Browse Source

处理流程 60%

dev
巴林闲侠 2 years ago
parent
commit
815bad4e7d
  1. 50
      web/client/src/components/workflow/approval.jsx
  2. 25
      web/client/src/sections/workOrder/containers/aboutMe.jsx
  3. 28
      web/client/src/sections/workOrder/containers/initiated.jsx
  4. 64
      web/client/src/sections/workOrder/containers/preserve.jsx
  5. 32
      web/client/src/sections/workOrder/containers/receipt.jsx
  6. 24
      web/client/src/sections/workOrder/containers/stayDoWorkOrder.jsx

50
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 (
<div>
<Modal
@ -78,24 +97,21 @@ const WorkFlowApprovalModal = (props) => {
spinning={loading}
>
{
// webEmis && processId ||
1 ?
ifreamUrl ?
<iframe
id='workflowFrame'
onLoad={() => {
let frameWin = document.getElementById('workflowFrame');
// frameWin.contentWindow.postMessage(JSON.stringify({
// }), '*');
setLoading(false);
}}
allowTransparency="true"
ref={iframeRef}
src={`${webEmis}/approval/info?token=${user.token}`}
src={ifreamUrl}
width={'100%'}
style={{ height: '100vh' }}
frameBorder="0"
></iframe>
>
</iframe>
: ''
}
</Spin>

25
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) => <div style={{ width: 60, color: "#1890ff", cursor: "pointer" }} onClick={() => {
setProcessInstanceId(record.processInstanceId)
setCheckProcessInstanceId(record.proc_inst_id_)
setWorkflowModalVisible(true)
}}>查看详情</div>
}]
@ -174,12 +169,18 @@ const Rest = (props) => {
</div>
</div>
</div>
<WorkflowModal
<WorkflowApprovalModal
type='notice'
visible={workflowModalVisible}
title={''}
processId={processInstanceId}
processAuditList={tableData}
checkProcessInstanceId={checkProcessInstanceId}
onCancel={() => { setWorkflowModalVisible(false) }}
successCallBack={() => { setWorkflowModalVisible(false) }}
successCallBack={({ refresh }) => {
if (refresh) {
backlogData()
}
setWorkflowModalVisible(false)
}}
/>
</>
)

28
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) => <div style={{ width: 60, color: "#1890ff", cursor: "pointer" }} onClick={() => {
setProcessInstanceId(record.processInstanceId)
setCheckProcessInstanceId(record.processInstanceId)
setWorkflowModalVisible(true)
}}>查看详情</div>
}]
@ -168,12 +160,18 @@ const Rest = (props) => {
</div>
</div>
</div>
<WorkflowModal
<WorkflowApprovalModal
type='myApply'
visible={workflowModalVisible}
title={''}
processId={processInstanceId}
processAuditList={tableData}
checkProcessInstanceId={checkProcessInstanceId}
onCancel={() => { setWorkflowModalVisible(false) }}
successCallBack={() => { setWorkflowModalVisible(false) }}
successCallBack={({ refresh }) => {
if (refresh) {
backlogData()
}
setWorkflowModalVisible(false)
}}
/>
</>
)

64
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) => <div style={{ width: 60, color: "#1890ff", cursor: "pointer" }} onClick={() => {
setProcessInstanceId(record.processInstanceId)
setWorkflowModalVisible(true)
}}>查看详情</div>
render: (text, record, index) => {
let tooltipTitle = '';
if (record.processDeleted) {
tooltipTitle = '该表单流程已删除,不支持重新发起';
} else if (!record.processIsEnable) {
tooltipTitle = '该表单流程已停用,不支持重新发起';
} else if (!record.isCurrentVersion) {
tooltipTitle = '该表单流程已修改,不支持重新发起'
}
if (tooltipTitle) {
return <Tooltip
content={tooltipTitle}
arrowPointAtCenter={false}
position={'topRight'}
>
<div style={{ width: 60, color: "##F2F3F5", }} >查看详情</div>
</Tooltip>
} else {
return <div style={{ width: 60, color: "#1890ff", cursor: "pointer" }} onClick={() => {
setCheckProcessInstanceId(record.id)
setWorkflowModalVisible(true)
}}>查看详情</div>
}
}
}]
return (
@ -121,8 +135,6 @@ const Rest = (props) => {
/> */}
<Button theme='solid' type="primary" htmlType="submit">查询</Button>
</Form>
</div>
</div>
@ -170,12 +182,18 @@ const Rest = (props) => {
</div>
</div>
</div>
<WorkflowModal
<WorkflowApprovalModal
type='draft'
visible={workflowModalVisible}
title={''}
processId={processInstanceId}
processAuditList={tableData}
checkProcessInstanceId={checkProcessInstanceId}
onCancel={() => { setWorkflowModalVisible(false) }}
successCallBack={() => { setWorkflowModalVisible(false) }}
successCallBack={({ refresh }) => {
if (refresh) {
backlogData()
}
setWorkflowModalVisible(false)
}}
/>
</>
)

32
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) => <div style={{ width: 60, color: "#1890ff", cursor: "pointer" }} onClick={() => {
setProcessInstanceId(record.processInstanceId)
setCheckProcessInstanceId(record.proc_inst_id_)
setWorkflowModalVisible(true)
}}>查看详情</div>
}]
@ -174,25 +168,27 @@ const Rest = (props) => {
</div>
</div>
</div>
<WorkflowModal
<WorkflowApprovalModal
type='hasDone'
visible={workflowModalVisible}
title={''}
processId={processInstanceId}
processAuditList={tableData}
checkProcessInstanceId={checkProcessInstanceId}
onCancel={() => { 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
};
}

24
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) => {
</div>
</div>
<WorkflowApprovalModal
type='approval'
visible={workflowModalVisible}
processAuditList={tableData}
checkProcessInstanceId={checkProcessInstanceId}
onCancel={() => { 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,
};
}

Loading…
Cancel
Save