diff --git a/web/client/src/components/workflow/approval.jsx b/web/client/src/components/workflow/approval.jsx index 191ce1d..a2255a1 100644 --- a/web/client/src/components/workflow/approval.jsx +++ b/web/client/src/components/workflow/approval.jsx @@ -3,16 +3,21 @@ import React from 'react'; import { connect } from 'react-redux'; import { Modal, Spin, Notification, Row, Space, Button } from '@douyinfe/semi-ui'; -import { EmisRequest, EmisApiTable } from '$utils'; -import { useState } from 'react'; -import { useEffect } from 'react'; +import { useState, useRef, useEffect } from 'react'; import { IconClose } from '@douyinfe/semi-icons'; import './index.less' const WorkFlowApprovalModal = (props) => { - const { visible, onCancel, webEmis, user, processAuditList, checkProcessInstanceId, successCallBack } = props; + const { visible, onCancel, webEmis, user, processAuditList, checkProcessInstanceId, successCallBack, type } = props; + const ifreamUrlMap = useRef({ + approval: 'approval/info', + myApply: 'process/my-apply', + notice: 'process/my-apply', + hasDone: 'process/my-apply', + draft: 'process/{processId}/draft' + }) const [loading, setLoading] = useState(true); - const [processData, setProcessData] = useState({}); + const [ifreamUrl, setIfreamUrl] = useState(''); const iframeRef = React.createRef(); useEffect(() => { @@ -21,11 +26,10 @@ const WorkFlowApprovalModal = (props) => { let data = JSON.parse(event.data); const { type, msg } = data; if (msg) { - console.log(msg); Notification.success({ title: msg }) } if (type == 'submitSuccess' && successCallBack) { - successCallBack(); + successCallBack({ refresh: true }); setLoading(false); } } @@ -40,7 +44,9 @@ const WorkFlowApprovalModal = (props) => { useEffect(() => { console.log('iframeRef.current', iframeRef.current); if (checkProcessInstanceId && processAuditList.length && iframeRef.current) { - const corProcessData = processAuditList.find(p => p.processInstanceId == checkProcessInstanceId) + 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 @@ -49,7 +55,20 @@ const WorkFlowApprovalModal = (props) => { } }, [checkProcessInstanceId, iframeRef]) - console.log(iframeRef); + useEffect(() => { + let nextUrl = `${webEmis + }/${ifreamUrlMap.current[type] + }?token=${user.token + }&processInstanceId=${checkProcessInstanceId + }${type == 'notice' ? `&type=notice` : '' + }${type == 'hasDone' ? `&type=done` : '' + }` + if (type == 'draft') { + nextUrl = nextUrl.replace('{processId}', checkProcessInstanceId) + } + setIfreamUrl(nextUrl); + }, [user, checkProcessInstanceId, type, webEmis]) + return (
{ spinning={loading} > { - // webEmis && processId || - 1 ? + ifreamUrl ? + > + + : '' } diff --git a/web/client/src/sections/workOrder/containers/aboutMe.jsx b/web/client/src/sections/workOrder/containers/aboutMe.jsx index ebfaa96..1dddd58 100644 --- a/web/client/src/sections/workOrder/containers/aboutMe.jsx +++ b/web/client/src/sections/workOrder/containers/aboutMe.jsx @@ -3,13 +3,9 @@ import { connect } from 'react-redux'; import { ApiTable, EmisApiTable, EmisRequest } from '$utils' import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast } from '@douyinfe/semi-ui'; import { IconSearch } from '@douyinfe/semi-icons'; -import { SkeletonScreen, WorkflowModal } from "$components"; +import { SkeletonScreen, WorkflowApprovalModal } from "$components"; import moment from "moment"; - - - - const Rest = (props) => { const { dispatch, actions, user, socket } = props @@ -18,7 +14,7 @@ const Rest = (props) => { const [tableData, setTableData] = useState([]); const [loading, setLoading] = useState(true); const [workflowModalVisible, setWorkflowModalVisible] = useState(false) - const [processInstanceId, setProcessInstanceId] = useState(null) + const [checkProcessInstanceId, setCheckProcessInstanceId] = useState(null) const [params, setParams] = useState({}) @@ -78,9 +74,8 @@ const Rest = (props) => { title: '操作', dataIndex: 'hadle', render: (text, record, index) =>
{ - setProcessInstanceId(record.processInstanceId) + setCheckProcessInstanceId(record.proc_inst_id_) setWorkflowModalVisible(true) - }}>查看详情
}] @@ -174,12 +169,18 @@ const Rest = (props) => {
- { setWorkflowModalVisible(false) }} - successCallBack={() => { setWorkflowModalVisible(false) }} + successCallBack={({ refresh }) => { + if (refresh) { + backlogData() + } + setWorkflowModalVisible(false) + }} /> ) diff --git a/web/client/src/sections/workOrder/containers/initiated.jsx b/web/client/src/sections/workOrder/containers/initiated.jsx index b517480..6e383f8 100644 --- a/web/client/src/sections/workOrder/containers/initiated.jsx +++ b/web/client/src/sections/workOrder/containers/initiated.jsx @@ -2,14 +2,9 @@ import React, { useEffect, useRef, useState } from 'react'; import { connect } from 'react-redux'; import { ApiTable, EmisApiTable, EmisRequest } from '$utils' import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast } from '@douyinfe/semi-ui'; -import { IconSearch } from '@douyinfe/semi-icons'; -import { SkeletonScreen, WorkflowModal } from "$components"; +import { SkeletonScreen, WorkflowApprovalModal, } from "$components"; import moment from "moment"; - - - - const Rest = (props) => { const { dispatch, actions, user, socket } = props @@ -18,16 +13,14 @@ const Rest = (props) => { const [tableData, setTableData] = useState([]); const [loading, setLoading] = useState(true); const [workflowModalVisible, setWorkflowModalVisible] = useState(false) - const [processInstanceId, setProcessInstanceId] = useState(null) + const [checkProcessInstanceId, setCheckProcessInstanceId] = useState(null) const [params, setParams] = useState({}) - useEffect(() => { backlogData() }, []) let backlogData = (obj = { limit: 10, offset: 0 }) => { - setLoading(true) EmisRequest.get(EmisApiTable.processInstancemMyApplyList, { userId: user?.id, businessType: '', ...obj }) @@ -72,9 +65,8 @@ const Rest = (props) => { title: '操作', dataIndex: 'hadle', render: (text, record, index) =>
{ - setProcessInstanceId(record.processInstanceId) + setCheckProcessInstanceId(record.processInstanceId) setWorkflowModalVisible(true) - }}>查看详情
}] @@ -168,12 +160,18 @@ const Rest = (props) => { - { setWorkflowModalVisible(false) }} - successCallBack={() => { setWorkflowModalVisible(false) }} + successCallBack={({ refresh }) => { + if (refresh) { + backlogData() + } + setWorkflowModalVisible(false) + }} /> ) diff --git a/web/client/src/sections/workOrder/containers/preserve.jsx b/web/client/src/sections/workOrder/containers/preserve.jsx index 7bc9659..b818e05 100644 --- a/web/client/src/sections/workOrder/containers/preserve.jsx +++ b/web/client/src/sections/workOrder/containers/preserve.jsx @@ -1,15 +1,11 @@ import React, { useEffect, useRef, useState } from 'react'; import { connect } from 'react-redux'; import { ApiTable, EmisApiTable, EmisRequest } from '$utils' -import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast } from '@douyinfe/semi-ui'; +import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast, Tooltip } from '@douyinfe/semi-ui'; import { IconSearch } from '@douyinfe/semi-icons'; -import { SkeletonScreen, WorkflowModal } from "$components"; +import { SkeletonScreen, WorkflowApprovalModal } from "$components"; import moment from "moment"; - - - - const Rest = (props) => { const { dispatch, actions, user, socket } = props @@ -18,16 +14,14 @@ const Rest = (props) => { const [tableData, setTableData] = useState([]); const [loading, setLoading] = useState(true); const [workflowModalVisible, setWorkflowModalVisible] = useState(false) - const [processInstanceId, setProcessInstanceId] = useState(null) + const [checkProcessInstanceId, setCheckProcessInstanceId] = useState(null) const [params, setParams] = useState({}) - useEffect(() => { backlogData() }, []) let backlogData = (obj = { limit: 10, offset: 0 }) => { - setLoading(true) EmisRequest.get(EmisApiTable.processInstancemMyDraftList, { userId: user?.id, businessType: '', ...obj }) @@ -38,7 +32,6 @@ const Rest = (props) => { }, error => { Toast.error({ content: '保存待发列表请求失败', duration: 1, }) setLoading(false) - }); } @@ -55,11 +48,11 @@ const Rest = (props) => { }, { title: '申请人', dataIndex: 'applyerName', - render: (text, record, index) =>user?.name + render: (text, record, index) => user?.name }, { title: '申请部门', dataIndex: 'applyDepartmentName', - render: (text, record, index) =>user?.department[0]?.name + render: (text, record, index) => user?.department[0]?.name }, { title: '审批状态', dataIndex: 'apName', @@ -73,11 +66,32 @@ const Rest = (props) => { }, { title: '操作', dataIndex: 'hadle', - render: (text, record, index) =>
{ - setProcessInstanceId(record.processInstanceId) - setWorkflowModalVisible(true) - - }}>查看详情
+ render: (text, record, index) => { + let tooltipTitle = ''; + if (record.processDeleted) { + tooltipTitle = '该表单流程已删除,不支持重新发起'; + } else if (!record.processIsEnable) { + tooltipTitle = '该表单流程已停用,不支持重新发起'; + } else if (!record.isCurrentVersion) { + tooltipTitle = '该表单流程已修改,不支持重新发起' + } + + if (tooltipTitle) { + return +
查看详情
+
+ + } else { + return
{ + setCheckProcessInstanceId(record.id) + setWorkflowModalVisible(true) + }}>查看详情
+ } + } }] return ( @@ -121,8 +135,6 @@ const Rest = (props) => { /> */} - - @@ -170,12 +182,18 @@ const Rest = (props) => { - { setWorkflowModalVisible(false) }} - successCallBack={() => { setWorkflowModalVisible(false) }} + successCallBack={({ refresh }) => { + if (refresh) { + backlogData() + } + setWorkflowModalVisible(false) + }} /> ) diff --git a/web/client/src/sections/workOrder/containers/receipt.jsx b/web/client/src/sections/workOrder/containers/receipt.jsx index 91f3510..7e06d57 100644 --- a/web/client/src/sections/workOrder/containers/receipt.jsx +++ b/web/client/src/sections/workOrder/containers/receipt.jsx @@ -3,13 +3,9 @@ import { connect } from 'react-redux'; import { ApiTable, EmisApiTable, EmisRequest } from '$utils' import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast } from '@douyinfe/semi-ui'; import { IconSearch } from '@douyinfe/semi-icons'; -import { SkeletonScreen, WorkflowModal } from "$components"; +import { SkeletonScreen, WorkflowApprovalModal } from "$components"; import moment from "moment"; - - - - const Rest = (props) => { const { dispatch, actions, user, socket } = props @@ -18,7 +14,7 @@ const Rest = (props) => { const [tableData, setTableData] = useState([]); const [loading, setLoading] = useState(true); const [workflowModalVisible, setWorkflowModalVisible] = useState(false) - const [processInstanceId, setProcessInstanceId] = useState(null) + const [checkProcessInstanceId, setCheckProcessInstanceId] = useState(null) const [params, setParams] = useState({}) @@ -37,7 +33,6 @@ const Rest = (props) => { }, error => { Toast.error({ content: '已办工单列表请求失败', duration: 1, }) setLoading(false) - }); EmisRequest.get(EmisApiTable.processInstancemMyDoneCount, { userId: user?.id, businessType: '', ...obj, limit: "", offset: "" }) @@ -78,9 +73,8 @@ const Rest = (props) => { title: '操作', dataIndex: 'hadle', render: (text, record, index) =>
{ - setProcessInstanceId(record.processInstanceId) + setCheckProcessInstanceId(record.proc_inst_id_) setWorkflowModalVisible(true) - }}>查看详情
}] @@ -174,25 +168,27 @@ const Rest = (props) => { - { setWorkflowModalVisible(false) }} - successCallBack={() => { setWorkflowModalVisible(false) }} + successCallBack={({ refresh }) => { + if (refresh) { + backlogData() + } + setWorkflowModalVisible(false) + }} /> ) } function mapStateToProps (state) { - const { auth, global, members, webSocket } = state; + const { auth, } = state; return { - // loading: members.isRequesting, user: auth.user, - // actions: global.actions, - // members: members.data, - // socket: webSocket.socket }; } diff --git a/web/client/src/sections/workOrder/containers/stayDoWorkOrder.jsx b/web/client/src/sections/workOrder/containers/stayDoWorkOrder.jsx index 246858d..9fd0ef7 100644 --- a/web/client/src/sections/workOrder/containers/stayDoWorkOrder.jsx +++ b/web/client/src/sections/workOrder/containers/stayDoWorkOrder.jsx @@ -6,10 +6,6 @@ import { IconSearch } from '@douyinfe/semi-icons'; import { SkeletonScreen, WorkflowModal, WorkflowApprovalModal } from "$components"; import moment from "moment"; - - - - const Rest = (props) => { const { dispatch, actions, user, socket } = props @@ -19,15 +15,12 @@ const Rest = (props) => { const [loading, setLoading] = useState(true); //获取项目状态列表 const [workflowModalVisible, setWorkflowModalVisible] = useState(false) const [checkProcessInstanceId, setCheckProcessInstanceId] = useState(null) - const [processData, setProcessData] = useState([]) - useEffect(() => { backlogData() }, []) let backlogData = (obj = {}) => { - setLoading(true) EmisRequest.get(EmisApiTable.processInstancemMyAuditList, { userId: user?.id, businessType: '', ...obj }) @@ -38,7 +31,6 @@ const Rest = (props) => { }, error => { Toast.error({ content: '待办工单请求失败', duration: 1, }) setLoading(false) - }); } @@ -163,24 +155,26 @@ const Rest = (props) => { { setWorkflowModalVisible(false) }} - successCallBack={() => { setWorkflowModalVisible(false) }} + successCallBack={({ refresh }) => { + if (refresh) { + backlogData() + } + setWorkflowModalVisible(false) + }} /> ) } function mapStateToProps (state) { - const { auth, global, members, webSocket } = state; + const { auth, global, } = state; return { - // loading: members.isRequesting, - user: auth.user, - // actions: global.actions, - // members: members.data, - // socket: webSocket.socket + user: auth.user, }; }