diff --git a/jeecgboot-vue3/src/components/JDragNotice/JDragNotice.vue b/jeecgboot-vue3/src/components/JDragNotice/JDragNotice.vue deleted file mode 100644 index d1f7fe44..00000000 --- a/jeecgboot-vue3/src/components/JDragNotice/JDragNotice.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - - diff --git a/jeecgboot-vue3/src/hooks/web/useDragNotice.ts b/jeecgboot-vue3/src/hooks/web/useDragNotice.ts deleted file mode 100644 index 2669c294..00000000 --- a/jeecgboot-vue3/src/hooks/web/useDragNotice.ts +++ /dev/null @@ -1,349 +0,0 @@ -import { ref, nextTick, getCurrentInstance, watch } from 'vue'; -import { getToken } from '/@/utils/auth'; -import md5 from 'crypto-js/md5'; -import { connectWebSocket, onWebSocket } from '/@/hooks/web/useWebSocket'; -import { useGlobSetting } from '/@/hooks/setting'; -import { useModal } from '/@/components/Modal'; -import { useUserStore } from '/@/store/modules/user'; -//弹窗业务需求引用的 -import { useMyRunningTaskList } from '@/hooks/jeecg/process/useMyRunningTaskList'; -import { hisProcessNodeInfo } from '@/hooks/jeecg/process/useBpmNodeInfo'; -import { queryByCode, save } from '@/views/super/eoa/cmsbpm/cmsbpm.api'; -import { isUrl } from '@/utils/is'; -import { getQueryVariable, getUrlParams } from '@/utils'; -import { backProcess, invalidProcess } from '@/views/super/eoa/cmsbpm/cmsbpm.api'; -import { editReadStatus } from '@/views/super/eoa/cmsoa/cmsoa.api'; -import { useRouter } from 'vue-router'; -import { useMessage } from '@/hooks/web/useMessage'; -const { createMessage } = useMessage(); -export function useDragNotice() { - //*********************************websocket配置begin****************************************** - const glob = useGlobSetting(); - const { push, currentRoute } = useRouter(); - const userStore = useUserStore(); - const instance: any = getCurrentInstance(); - const taskDealRef = ref(null); - const desformRef = ref(null); - // 初始化 WebSocket - function initWebSocket() { - const token = getToken(); - //将登录token生成一个短的标识 - const wsClientId = md5(token); - // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https - const url = glob.domainUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/dragChannelSocket/' + wsClientId; - connectWebSocket(url); - onWebSocket(onWebSocketMessage); - } - - async function onWebSocketMessage(data) { - console.log('仪表盘监听按钮点击事件websocket', data); - if (data?.CMD === 'drag') { - //触发动作: url:路径 modal:弹窗 - const action = data.result.action; - //弹窗类型: 点击按钮打开什么弹窗,根据type打开不同的弹窗 - const type = data.result.type; - //url地址,可以是路由,也可以是外部链接 - let url = data.result.url; - //弹窗参数或者url参数 - const record = data.result.records || {}; - console.log('仪表盘监听点击事件类型type', type); - console.log('仪表盘监听点击事件动作action', action); - console.log('仪表盘监听点击事件路径url', url); - console.log('仪表盘监听点击事件参数', record); - //1.路径的话,判断外部链接还是内部路由跳转 - if (action == 'url') { - //常用下載特殊处理 - if (url == 'fileUrl') { - url = record[url]; - } - const urlParamsObj = getUrlParams(url); - if (url.startsWith('http')) { - window.open(url, '_blank'); - } else { - push({ path: urlParamsObj.url, query: { ...urlParamsObj.params, ...record } }); - } - } else { - //2.弹窗方式打开项目组件 - switch (type) { - case 'task': - //流程办理弹窗 - const { formData, formUrl } = await getTaskNodeInfo(record); - formData['PROCESS_TAB_TYPE'] = 'run'; - handleOpenType('task', { formData, formUrl, title: '流程办理' }); - break; - case 'history': - //历史流程弹窗 - hisProcessNodeInfo({ procInstId: record.processInstanceId }).then((res) => { - console.log('获取流程节点信息', res); - if (res.success) { - const formData = { - dataId: res.result.dataId, - taskId: record.id, - taskDefKey: record.taskId, - procInsId: record.processInstanceId, - tableName: res.result.tableName, - vars: res.result.records, - }; - let tempFormUrl = res.result.formUrl; - //节点配置表单URL,VUE组件类型对应的拓展参数 - if (tempFormUrl && tempFormUrl.indexOf('?') != -1 && !isUrl(tempFormUrl) && tempFormUrl.indexOf('{{DOMAIN_URL}}') == -1) { - tempFormUrl = res.result.formUrl.split('?')[0]; - formData['extendUrlParams'] = getQueryVariable(res.result.formUrl); - } - currentModal.value = null; - modalParams.value = { path: tempFormUrl, formData }; - taskDealRef.value.deal(record); - taskDealRef.value.data.title = '流程历史'; - console.log('taskDealRef', taskDealRef.value); - } - }); - break; - case 'entrust': - //委托办理 - handleOpenType('entrust', { taskId: record.id }); - break; - case 'taskNotify': - //催办任务 - handleOpenType('taskNotify', { - title: '催办提醒', - procInstId: record.processInstanceId, - }); - break; - case 'invalid': - //作废流程 - await invalidProcess({ - processInstanceId: record.processInstanceId, - }); - reloadPage(); - break; - case 'backTask': - //取回流程 - await backProcess({ - processInstanceId: record.processInstanceId, - }); - reloadPage(); - break; - case 'sysNotice': - //通知公告弹窗 - await editReadStatus({ anntId: record.anntId }); - currentModal.value = null; - if (record.openType === 'component') { - modalParams.value = { path: record.openPage, formData: { id: record.busId } }; - instance.refs.dynamicNoticeRef?.detail(record.openPage); - } else { - instance.refs.detailRef?.show({ - record, - isUpdate: true, - }); - } - break; - case 'email': - //邮箱查看弹窗 - handleOpenType('email', { record }); - break; - case 'plan': - //我的计划弹窗 - let data = {}; - if (!!record?.id) { - data = { id: record?.id }; - instance.refs.planRef?.show({ - isUpdate: !!record?.id, - record: data, - }); - } else { - data = { joinPerson: userStore.getUserInfo.username, ...record }; - instance.refs.planRef?.show({ - isUpdate: !!record?.id, - ...data, - }); - } - - break; - case 'desform': - const title = '表单【' + record.desformName + '】发起申请'; - bindParams.value = { dialogOptions: { top: 60, width: 1000, padding: { top: 25, right: 25, bottom: 30, left: 25 } } }; - openDesformModal('add', record, title); - break; - default: - break; - } - } - } - } - //*********************************websocket配置end****************************************** - - //*********************************打开弹窗修改,动态设置弹窗begin******************************* - //当前表单弹窗 - const currentModal = ref(null); - //当前表单参数 - const modalParams = ref({}); - //表单注册缓存 - const modalRegCache = ref({}); - //组件绑定参数 - const bindParams = ref({}); - /** - * 根据类型打开不同弹窗 - * @param type - * @param params - */ - async function handleOpenType(type, params) { - currentModal.value = null; - modalParams.value = { ...params }; - switch (type) { - case 'task': - //流程办理 - currentModal.value = 'TaskHandleModal'; - break; - case 'history': - currentModal.value = 'HisTaskDealModal'; - case 'entrust': - //委托 - currentModal.value = 'SelectEntrusterModal'; - break; - case 'taskNotify': - //催办 - currentModal.value = 'TaskNotifyModal'; - break; - case 'email': - //邮件查看 - currentModal.value = 'EoaMailBoxInModal'; - break; - default: - currentModal.value = null; - break; - } - //注册表单弹窗 - initModalRegister(); - await nextTick(() => { - if (modalRegCache.value[currentModal.value!]?.isRegister) { - console.log('已注冊,走缓存'); - modalRegCache.value[currentModal.value!].modalMethods.openModal(true, modalParams.value); - } - }); - } - /** - * 初始化弹窗注册 - */ - function initModalRegister() { - //如果当前选择表单为null,就不处理 - if (!currentModal.value) { - return; - } - //判断缓存中是否存在,不存在就走缓存逻辑 - if (!modalRegCache.value[currentModal.value]) { - const [registerModal, modalMethods] = useModal(); - modalRegCache.value[currentModal.value] = { - isRegister: false, - register: bindRegisterModal(registerModal, modalMethods), - modalMethods, - }; - } - } - - /** - * 绑定注册弹窗 - * @param regFn - * @param modalMethod - */ - function bindRegisterModal(regFn, modalMethod) { - return async (...args) => { - console.log('开始注册:', currentModal.value); - await regFn(...args); - console.log('注册完成:', currentModal.value); - //打开弹窗 - modalMethod.openModal(true, modalParams.value); - //设置缓存标识 - modalRegCache.value[currentModal.value!].isRegister = true; - }; - } - //*********************************打开弹窗修改,动态设置弹窗end****************************************** - //***********************打开弹窗的业务逻辑处理********************************************************* - const { getTaskNodeInfo } = useMyRunningTaskList('run'); - /** - * 打开表单 - */ - function openDesformModal(mode, record, title) { - let desform = record, - dataId = null; - if (mode === 'edit' || mode === 'detail') { - let { desformId: id, desformCode, desformDataId } = record; - dataId = desformDataId; - desform = { id, desformCode }; - } - queryByCode({ desformCode: desform.desformCode }).then((res) => { - if (res.success) { - const designJson = res.result.desformDesignJson; - const json = JSON.parse(designJson); - if (json.config.dialogOptions) { - bindParams.value = { dialogOptions: json.config.dialogOptions }; - } - desformRef.value.open(mode, desform, dataId, title); - } - }); - } - /** - * 添加我的申请表单流程 - */ - function handleDesformDataAdded(event) { - const flowCodePre = 'desform_'; - // 将流程保存至后台 - let { desform, dataId } = event; - save({ - desformId: desform.id, - desformCode: desform.desformCode, - desformDataId: dataId, - desformName: desform.desformName, - processName: desform.procName, - flowCode: `${flowCodePre}${desform.desformCode}`, - titleExp: desform.titleExp, - }).then((res) => { - if (!res.success) { - createMessage.error(res.message); - return; - } - push({ path: '/oaOffice/myOrder' }); - }); - } - /** - * 邮箱回复 - * @param record - */ - function handReply(record) { - //跳转到邮箱 - push({ name: 'eoa-email', params: { type: 'process', rec: JSON.stringify(record.value) } }); - } - watch( - () => currentRoute.value, - (value) => { - if (value?.meta?.frameSrc && value?.meta?.frameSrc.indexOf('/drag/view?pageId=') >= 0) { - reloadPage(); - } - } - ); - //刷新页面 - function reloadPage() { - const iframes: any = document.getElementsByClassName('jeecg-iframe-page__main'); - // 将 HTMLCollection 转换为数组 - const iframeArray = Array.from(iframes); - if (currentRoute.value?.meta?.frameSrc && currentRoute.value?.meta?.frameSrc.indexOf('/drag/view?pageId=') >= 0) { - const targetIframe: any = iframeArray.find((iframe: any) => iframe.src == currentRoute.value?.meta?.frameSrc); - console.log('targetIframe', targetIframe); - if (targetIframe) { - targetIframe.contentWindow.postMessage({ reload: true }, '*'); - } - } - } - return { - initDragWebSocket: initWebSocket, - handleOpenType, - currentModal, - modalParams, - modalRegCache, - bindParams, - taskDealRef, - desformRef, - handleDesformDataAdded, - handReply, - reloadPage, - }; -}