diff --git a/web/client/src/components/workflow/approval.jsx b/web/client/src/components/workflow/approval.jsx index 62bc13f..e6e7eef 100644 --- a/web/client/src/components/workflow/approval.jsx +++ b/web/client/src/components/workflow/approval.jsx @@ -14,7 +14,8 @@ const WorkFlowApprovalModal = (props) => { myApply: 'process/my-apply', notice: 'process/my-apply', hasDone: 'process/my-apply', - draft: 'process/{processId}/draft' + draft: 'process/{processId}/draft', + submit: 'process/{processId}/apply' }) const [loading, setLoading] = useState(true); const [ifreamUrl, setIfreamUrl] = useState(''); @@ -28,7 +29,10 @@ const WorkFlowApprovalModal = (props) => { if (msg) { Notification.success({ title: msg }) } - if (type == 'submitSuccess' && successCallBack) { + if ( + (type == 'submitSuccess' || type == 'saveSuccess') + && successCallBack + ) { successCallBack({ refresh: true }); setLoading(false); } @@ -42,14 +46,19 @@ const WorkFlowApprovalModal = (props) => { }, []) useEffect(() => { - if (checkProcessInstanceId && processAuditList.length && iframeRef.current) { - const corProcessData = type == 'draft' ? - processAuditList.find(p => p.id == checkProcessInstanceId) - : processAuditList.find(p => p.processInstanceId == checkProcessInstanceId) - if (corProcessData) { - iframeRef.current.contentWindow.postMessage(JSON.stringify({ - ...corProcessData - }), '*'); + if (iframeRef.current) { + if (checkProcessInstanceId && processAuditList.length) { + const corProcessData = + type == 'draft' ?// 草稿 + processAuditList.find(p => p.id == checkProcessInstanceId) + : processAuditList.find(p => p.processInstanceId == checkProcessInstanceId) + if (corProcessData) { + iframeRef.current.contentWindow.postMessage(JSON.stringify( + { + ...corProcessData + } + ), '*'); + } } } }, [checkProcessInstanceId, iframeRef]) @@ -62,9 +71,16 @@ const WorkFlowApprovalModal = (props) => { }${type == 'notice' ? `&type=notice` : '' }${type == 'hasDone' ? `&type=done` : '' }` - if (type == 'draft') { + if (type == 'draft') {// 草稿 nextUrl = nextUrl.replace('{processId}', checkProcessInstanceId) } + if (type == 'submit') {// 重新发起 + const corProcessData = processAuditList.find(p => p.processInstanceId == checkProcessInstanceId) + nextUrl = nextUrl.replace('{processId}', corProcessData?.businessKey) + nextUrl += `&sourceType=again` + nextUrl += `&processId=${corProcessData?.businessKey}` + nextUrl += `&otherSyatem=true` + } setIfreamUrl(nextUrl); }, [user, checkProcessInstanceId, type, webEmis]) diff --git a/web/client/src/sections/means/nav-item.jsx b/web/client/src/sections/means/nav-item.jsx index b14ccc1..d03a462 100644 --- a/web/client/src/sections/means/nav-item.jsx +++ b/web/client/src/sections/means/nav-item.jsx @@ -19,11 +19,11 @@ export function getNavItem (user, dispatch) { }] }, { itemKey: 'repairFQA', - text: '维修FQA', + text: '维修FAQ', icon: , to: '/means/repairFQA/repairFQA1', items: [{ - itemKey: 'repairFQA1', to: '/means/repairFQA/repairFQA1', text: '维修FQA' + itemKey: 'repairFQA1', to: '/means/repairFQA/repairFQA1', text: '维修FAQ' }] }, { itemKey: 'faultInformation', diff --git a/web/client/src/sections/means/routes.js b/web/client/src/sections/means/routes.js index bd5d380..e17d047 100644 --- a/web/client/src/sections/means/routes.js +++ b/web/client/src/sections/means/routes.js @@ -20,12 +20,12 @@ export default [{ }, { path: '/repairFQA', key: 'repairFQA', - breadcrumb: '维修FQA', + breadcrumb: '维修FAQ', childRoutes: [{ path: '/repairFQA1', key: 'repairFQA1', component: RepairFQA, - breadcrumb: '维修FQA', + breadcrumb: '维修FAQ', }] }, { path: '/faultInformation', diff --git a/web/client/src/sections/workOrder/containers/initiated.jsx b/web/client/src/sections/workOrder/containers/initiated.jsx index d71ee57..ab58c67 100644 --- a/web/client/src/sections/workOrder/containers/initiated.jsx +++ b/web/client/src/sections/workOrder/containers/initiated.jsx @@ -1,7 +1,7 @@ import React, { useEffect, useRef, useState } from 'react'; import { connect } from 'react-redux'; -import { ApiTable, EmisApiTable, EmisRequest, parseProcessData, judgmentProcessState } from '$utils' -import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast } from '@douyinfe/semi-ui'; +import { ApiTable, EmisApiTable, EmisRequest, parseProcessData, processState, judgmentProcessState } from '$utils' +import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast, Space, Tooltip } from '@douyinfe/semi-ui'; import { SkeletonScreen, WorkflowApprovalModal, } from "$components"; import moment from "moment"; @@ -13,6 +13,7 @@ const Rest = (props) => { const [tableData, setTableData] = useState([]); const [loading, setLoading] = useState(true); const [workflowModalVisible, setWorkflowModalVisible] = useState(false) + const [workflowModalType, setWorkflowModalType] = useState('') const [checkProcessInstanceId, setCheckProcessInstanceId] = useState(null) const [params, setParams] = useState({}) @@ -102,10 +103,73 @@ const Rest = (props) => { }, { title: '操作', dataIndex: 'hadle', - render: (text, record, index) =>
{ - setCheckProcessInstanceId(record.processInstanceId) - setWorkflowModalVisible(true) - }}>查看详情
+ render: (text, record, index) => { + let reviewTime = record.lastApproveTime ? + moment(record.lastApproveTime).format('YYYY-MM-DD HH:mm:ss') + : + record.variables.find(t => t.name == 'fsLastActionTime') ? + moment.unix(record.variables.find(t => t.name == 'fsLastActionTime').value).format('YYYY-MM-DD HH:mm:ss') + : ''; + console.log(reviewTime); + let tooltipTitle = ''; + if (record.processDeleted) { + tooltipTitle = '该表单流程已删除,不支持重新发起'; + } + if (!record.processIsEnable) { + tooltipTitle = '该表单流程已停用,不支持重新发起'; + } + if (!record.isCurrentVersion) { + tooltipTitle = '该表单流程已修改,不支持重新发起' + } + return ( + + { + setWorkflowModalType('myApply') + setCheckProcessInstanceId(record.processInstanceId) + setWorkflowModalVisible(true) + }}>查看详情 + { + !reviewTime && processState.active == record.state ? + { + // setLoading(true) + EmisRequest.post(EmisApiTable.getApprovalActionUrl.replace('{type}', 'interrupt'), + { + procinstId: record.processInstanceId, + actionName: '撤销' + }) + .then(res => { + setLoading(false) + backlogData() + Toast.success({ content: '撤销流程成功', duration: 1, }) + }, error => { + Toast.error({ content: '撤销流程失败', duration: 1, }) + setLoading(false) + }); + }}> + 撤销 + + : '' + }{ + ( + record.state == processState.suspended // 已撤销 + || record.state == processState.externally // 手动结束 + ) ? + tooltipTitle + && false + ? + + 重新发起 + + : { + setWorkflowModalType('submit') + setCheckProcessInstanceId(record.processInstanceId) + setWorkflowModalVisible(true) + }}>重新发起 + : '' + } + + ) + } }] return ( @@ -199,7 +263,7 @@ const Rest = (props) => { { >
查看详情
- } else { return
{ setCheckProcessInstanceId(record.id) diff --git a/web/client/src/utils/webapi.js b/web/client/src/utils/webapi.js index 01282bc..1d3ebc0 100644 --- a/web/client/src/utils/webapi.js +++ b/web/client/src/utils/webapi.js @@ -96,6 +96,7 @@ export const EmisApiTable = { processInstancemMyNoticeCount: 'process-instance/my-notice-count/optimization', //抄送我 数量 processInstancemMyDraftList: 'process-instance/my-draft-list', //保存待发 + getApprovalActionUrl: 'process-instance/audit/{type}', // 审批、撤销操作 //删除草稿 delDraftUrl: 'process/drafts/{draftId}', }