Browse Source

处理流程 95%

dev
巴林闲侠 2 years ago
parent
commit
d73a12f846
  1. 15
      api/app/lib/controllers/workOrder/index.js
  2. 12
      web/client/src/components/workflow/approval.jsx
  3. 12
      web/client/src/components/workflow/index.jsx
  4. 3
      web/client/src/sections/auth/containers/login.jsx
  5. 12
      web/client/src/sections/workOrder/actions/jobOrder.js
  6. 69
      web/client/src/sections/workOrder/containers/aboutMe.jsx
  7. 66
      web/client/src/sections/workOrder/containers/initiated.jsx
  8. 9
      web/client/src/sections/workOrder/containers/jobOrder.jsx
  9. 64
      web/client/src/sections/workOrder/containers/preserve.jsx
  10. 69
      web/client/src/sections/workOrder/containers/receipt.jsx
  11. 56
      web/client/src/sections/workOrder/containers/stayDoWorkOrder.jsx
  12. 48
      web/client/src/utils/aboutProcess.js
  13. 6
      web/client/src/utils/index.js
  14. 99
      web/client/src/utils/parseProcessData.js
  15. 1
      web/client/src/utils/webapi.js

15
api/app/lib/controllers/workOrder/index.js

@ -39,13 +39,16 @@ async function basicDataAllProject (ctx) {
try {
const { models } = ctx.fs.dc;
const { clickHouse } = ctx.app.fs
const { includeDel } = ctx.query
const proRes = await models.ProjectCorrelation.findAll({
where: {
del: false,
},
let findOption = {
where: {},
order: [['updateTime', 'desc']],
})
}
if (!includeDel) {
findOption.where.del = false
}
const proRes = await models.ProjectCorrelation.findAll(findOption)
let pepProjectIds = new Set()
for (let p of proRes) {
@ -72,7 +75,7 @@ async function basicDataAllProject (ctx) {
return {
value: p.id,
label: corPro.project_name || p.name,
disabled: corPro.isdelete == 1
disabled: corPro.isdelete == 1 || p.del
}
})

12
web/client/src/components/workflow/approval.jsx

@ -42,7 +42,6 @@ const WorkFlowApprovalModal = (props) => {
}, [])
useEffect(() => {
console.log('iframeRef.current', iframeRef.current);
if (checkProcessInstanceId && processAuditList.length && iframeRef.current) {
const corProcessData = type == 'draft' ?
processAuditList.find(p => p.id == checkProcessInstanceId)
@ -88,8 +87,15 @@ const WorkFlowApprovalModal = (props) => {
<span className='workflow-body-header_title_zi'>让世间万物拥有感知服务人类社会于美好</span>
</span>
<IconClose className="workflow-body-header_closeIcon" onClick={() => {
onCancel && onCancel();
setLoading(false);
if (false && ['approval', 'draft'].includes(type)) {
// ifream
iframeRef.current.contentWindow.postMessage({
type: 'prepareClose',
}, '*')
} else {
onCancel && onCancel();
setLoading(false);
}
}} />
</div>
<div className='workflow-body-form'>

12
web/client/src/components/workflow/index.jsx

@ -3,6 +3,7 @@
import React from 'react';
import { connect } from 'react-redux';
import { Modal, Spin, Notification, Row, Space, Button } from '@douyinfe/semi-ui';
import { push } from 'react-router-redux';
import { RouteTable } from '../../utils/webapi';
import { EmisRequest, EmisApiTable } from '$utils';
import { useState } from 'react';
@ -47,7 +48,7 @@ const WorkFlowModal = (props) => {
const handelApprovalCenter = (activeKey) => {
if (webOa) {
window.open(webOa + "/approval/center?activeKey=" + activeKey);
dispatch(push("/workOrder/workOrderList/preserve"));
}
}
@ -78,8 +79,8 @@ const WorkFlowModal = (props) => {
if (event && event.data && typeof (event.data) == 'string') {
let data = JSON.parse(event.data);
const { type, isSaveDraft, setIntervalSave, draftId, msg } = data;
console.log(data, msg);
if (msg) {
console.log(msg);
Notification.success({ title: msg })
}
setDraftId(draftId);
@ -89,7 +90,11 @@ const WorkFlowModal = (props) => {
if (setIntervalSave) {
Notification.success({ title: '60秒,表单暂存草稿成功' });
} else {
Notification.success(<span>保存草稿成功可在<a onClick={() => handelApprovalCenter("save")}>审批中心/保存待发</a>查看详情</span>, 10);
Notification.success({
title: <span>保存草稿成功可在<a style={{}}
// onClick={() => handelApprovalCenter("save")}
>工单列表/我发起的</a>查看详情</span>
});
}
} else {
Notification.success({ title: '提交成功,可在【工单列表/我发起的】查看详情' });
@ -110,7 +115,6 @@ const WorkFlowModal = (props) => {
}
}, [])
console.log(webEmis, processId);
return (
<div>
<Modal

3
web/client/src/sections/auth/containers/login.jsx

@ -119,11 +119,8 @@ const Login = props => {
/>
<img src="/assets/images/background/xiangqi.png" style={{ width: 112, height: 14, margin: "4px 0 0 278px" }} />
<Button htmlType='submit' block theme="solid" loading={isRequesting} style={{ marginTop: 56, height: 46, backgroundColor: '#005ABD', borderRadius: '3px' }}>立即登录</Button>
</Form>
</div>
</div>
</div>
);

12
web/client/src/sections/workOrder/actions/jobOrder.js

@ -2,6 +2,18 @@
import { ApiTable, basicAction } from '$utils'
export function getPomsProjectBasicAll () {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
actionType: 'GET_POMS_PROJECT_BASIC_ALL',
url: `${ApiTable.getPomsProjectBasicAll}?includeDel=true`,
msg: { error: '获取项目列表失败' },
reducer: { name: 'pomsProjectBasicAll' }
});
}
export function getEnabledWorkflowProcess () {
return dispatch => basicAction({
type: 'get',

69
web/client/src/sections/workOrder/containers/aboutMe.jsx

@ -1,14 +1,14 @@
import React, { useEffect, useRef, useState } from 'react';
import { connect } from 'react-redux';
import { ApiTable, EmisApiTable, EmisRequest } from '$utils'
import { ApiTable, EmisApiTable, EmisRequest, parseProcessData, judgmentProcessState } from '$utils'
import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast } from '@douyinfe/semi-ui';
import { IconSearch } from '@douyinfe/semi-icons';
import { SkeletonScreen, WorkflowApprovalModal } from "$components";
import moment from "moment";
const Rest = (props) => {
const { dispatch, actions, user, socket } = props
const { dispatch, actions, user, socket, pomsProjectBasicAll } = props
const { workOrder } = actions
const [query, setQuery] = useState({ limit: 10, offset: 0 }); //
const [limits, setLimits] = useState(0)//
const [tableData, setTableData] = useState([]);
@ -20,23 +20,42 @@ const Rest = (props) => {
useEffect(() => {
backlogData()
if (!pomsProjectBasicAll.length) {
dispatch(workOrder.getPomsProjectBasicAll())
}
}, [])
let backlogData = (obj = { limit: 10, offset: 0 }) => {
setLoading(true)
EmisRequest.get(EmisApiTable.processInstancemMyNoticeList,
{ userId: user?.id, businessType: '', ...obj })
{
userId: user?.id,
businessType: '运维中台表单',
...obj,
queryFormData: 'true'
})
.then(res => {
setTableData(res?.data)
let nextTableData = (res?.data || []).map(r => {
let pomsNeedData = {}
if (r?.formData?.formData && r?.formData?.workflowProcessVersion?.workflowProcessForm?.formSchema) {
pomsNeedData = parseProcessData({
formSchema: r?.formData?.workflowProcessVersion?.workflowProcessForm?.formSchema,
formData: r?.formData?.formData
})
}
return {
...r,
pomsNeedData
}
})
setTableData(nextTableData)
setLoading(false)
}, error => {
Toast.error({ content: '抄送我的工单列表请求失败', duration: 1, })
setLoading(false)
});
EmisRequest.get(EmisApiTable.processInstancemMyNoticeCount,
{ userId: user?.id, businessType: '', ...obj, limit: "", offset: "" })
{ userId: user?.id, businessType: '运维中台工单', ...obj, limit: "", offset: "" })
.then(res => {
setLimits(res.count || 0)
}, error => {
@ -50,10 +69,22 @@ const Rest = (props) => {
render: (text, record, index) => index + 1
}, {
title: '标题',
dataIndex: 'nae',
dataIndex: 'title',
render: (text, record, index) => {
return record?.pomsNeedData?.title?.value || ''
}
}, {
title: '关联项目',
dataIndex: 'nae',
dataIndex: 'pomsProject',
render: (text, record, index) => {
const pomsProjectId = record?.pomsNeedData?.pomsProjectId?.value
if (pomsProjectId) {
const corProject = pomsProjectBasicAll.find(p => p.value == pomsProjectId)
return corProject?.label || ''
} else {
return ''
}
}
}, {
title: '申请人',
dataIndex: 'applyerName',
@ -62,14 +93,20 @@ const Rest = (props) => {
dataIndex: 'applyDepartmentName',
}, {
title: '审批状态',
dataIndex: 'apName',
dataIndex: 'status',
render: (text, record) => {
return judgmentProcessState(record, 'copy')
},
}, {
title: '提交时间',
dataIndex: 'startTime',
render: (text, record, index) => text && moment(text).format('YYYY-MM-DD HH:mm:ss') || '--'
}, {
title: '期望完成时间',
dataIndex: 'nae',
dataIndex: 'expectTime',
render: (text, record, index) => {
return record?.pomsNeedData?.expectTime?.value || ''
}
}, {
title: '操作',
dataIndex: 'hadle',
@ -187,13 +224,11 @@ const Rest = (props) => {
}
function mapStateToProps (state) {
const { auth, global, members, webSocket } = state;
const { auth, global, pomsProjectBasicAll } = state;
return {
// loading: members.isRequesting,
user: auth.user,
// actions: global.actions,
// members: members.data,
// socket: webSocket.socket
actions: global.actions,
pomsProjectBasicAll: pomsProjectBasicAll.data || []
};
}

66
web/client/src/sections/workOrder/containers/initiated.jsx

@ -1,13 +1,13 @@
import React, { useEffect, useRef, useState } from 'react';
import { connect } from 'react-redux';
import { ApiTable, EmisApiTable, EmisRequest } from '$utils'
import { ApiTable, EmisApiTable, EmisRequest, parseProcessData, judgmentProcessState } from '$utils'
import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast } from '@douyinfe/semi-ui';
import { SkeletonScreen, WorkflowApprovalModal, } from "$components";
import moment from "moment";
const Rest = (props) => {
const { dispatch, actions, user, socket } = props
const { dispatch, actions, user, socket, pomsProjectBasicAll } = props
const { workOrder } = actions
const [query, setQuery] = useState({ limit: 10, offset: 0 }); //
const [limits, setLimits] = useState(0)//
const [tableData, setTableData] = useState([]);
@ -18,20 +18,40 @@ const Rest = (props) => {
useEffect(() => {
backlogData()
if (!pomsProjectBasicAll.length) {
dispatch(workOrder.getPomsProjectBasicAll())
}
}, [])
let backlogData = (obj = { limit: 10, offset: 0 }) => {
setLoading(true)
EmisRequest.get(EmisApiTable.processInstancemMyApplyList,
{ userId: user?.id, businessType: '', ...obj })
{
userId: user?.id,
businessType: '运维中台表单',
...obj,
queryFormData: 'true'
})
.then(res => {
setTableData(res?.data)
let nextTableData = (res?.data || []).map(r => {
let pomsNeedData = {}
if (r?.formData?.submitFormData && r?.formData?.workflowProcessVersion?.workflowProcessForm?.formSchema) {
pomsNeedData = parseProcessData({
formSchema: r?.formData?.workflowProcessVersion?.workflowProcessForm?.formSchema,
formData: r?.formData?.submitFormData
})
}
return {
...r,
pomsNeedData
}
})
setTableData(nextTableData)
setLimits(res.count || 0)
setLoading(false)
}, error => {
Toast.error({ content: '由我发起的工单列表请求失败', duration: 1, })
setLoading(false)
});
}
@ -41,10 +61,22 @@ const Rest = (props) => {
render: (text, record, index) => index + 1
}, {
title: '标题',
dataIndex: 'nae',
dataIndex: 'title',
render: (text, record, index) => {
return record?.pomsNeedData?.title?.value || ''
}
}, {
title: '关联项目',
dataIndex: 'nae',
dataIndex: 'pomsProject',
render: (text, record, index) => {
const pomsProjectId = record?.pomsNeedData?.pomsProjectId?.value
if (pomsProjectId) {
const corProject = pomsProjectBasicAll.find(p => p.value == pomsProjectId)
return corProject?.label || ''
} else {
return ''
}
}
}, {
title: '申请人',
dataIndex: 'applyerName',
@ -53,14 +85,20 @@ const Rest = (props) => {
dataIndex: 'applyDepartmentName',
}, {
title: '审批状态',
dataIndex: 'apName',
dataIndex: 'status',
render: (text, record) => {
return judgmentProcessState(record, 'initiate')
},
}, {
title: '提交时间',
dataIndex: 'startTime',
render: (text, record, index) => text && moment(text).format('YYYY-MM-DD HH:mm:ss') || '--'
}, {
title: '期望完成时间',
dataIndex: 'nae',
dataIndex: 'expectTime',
render: (text, record, index) => {
return record?.pomsNeedData?.expectTime?.value || ''
}
}, {
title: '操作',
dataIndex: 'hadle',
@ -178,13 +216,11 @@ const Rest = (props) => {
}
function mapStateToProps (state) {
const { auth, global, members, webSocket } = state;
const { auth, global, pomsProjectBasicAll } = state;
return {
// loading: members.isRequesting,
user: auth.user,
// actions: global.actions,
// members: members.data,
// socket: webSocket.socket
actions: global.actions,
pomsProjectBasicAll: pomsProjectBasicAll.data || []
};
}

9
web/client/src/sections/workOrder/containers/jobOrder.jsx

@ -85,21 +85,12 @@ const JobOrder = (props) => {
onCancel={() => { setWorkflowModalVisible(false) }}
successCallBack={() => { setWorkflowModalVisible(false) }}
/>
{/* <WorkFlowViewModal
visible={workflowModalVisible}
processId={launchProcessId}
/> */}
{/* {<WorkflowApprovalModal
visible={workflowModalVisible}
onCancel={() => { setWorkflowModalVisible(false) }}
/>} */}
</div>
)
}
function mapStateToProps (state) {
const { auth, global, workflowProcess } = state;
console.log(global);
return {
user: auth.user,
actions: global.actions,

64
web/client/src/sections/workOrder/containers/preserve.jsx

@ -1,14 +1,14 @@
import React, { useEffect, useRef, useState } from 'react';
import { connect } from 'react-redux';
import { ApiTable, EmisApiTable, EmisRequest } from '$utils'
import { ApiTable, EmisApiTable, EmisRequest, parseProcessData, judgmentProcessState, processState } from '$utils'
import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast, Tooltip } from '@douyinfe/semi-ui';
import { IconSearch } from '@douyinfe/semi-icons';
import { SkeletonScreen, WorkflowApprovalModal } from "$components";
import moment from "moment";
const Rest = (props) => {
const { dispatch, actions, user, socket } = props
const { dispatch, actions, user, socket, pomsProjectBasicAll } = props
const { workOrder } = actions
const [query, setQuery] = useState({ limit: 10, offset: 0 }); //
const [limits, setLimits] = useState(0)//
const [tableData, setTableData] = useState([]);
@ -19,14 +19,34 @@ const Rest = (props) => {
useEffect(() => {
backlogData()
if (!pomsProjectBasicAll.length) {
dispatch(workOrder.getPomsProjectBasicAll())
}
}, [])
let backlogData = (obj = { limit: 10, offset: 0 }) => {
setLoading(true)
EmisRequest.get(EmisApiTable.processInstancemMyDraftList,
{ userId: user?.id, businessType: '', ...obj })
{
userId: user?.id,
businessType: '运维中台表单',
...obj
})
.then(res => {
setTableData(res?.data)
let nextTableData = (res?.data || []).map(r => {
let pomsNeedData = {}
if (r?.formData && r?.formSchema) {
pomsNeedData = parseProcessData({
formSchema: r?.formSchema,
formData: r?.formData
})
}
return {
...r,
pomsNeedData
}
})
setTableData(nextTableData)
setLimits(res.count || 0)
setLoading(false)
}, error => {
@ -41,10 +61,22 @@ const Rest = (props) => {
render: (text, record, index) => index + 1
}, {
title: '标题',
dataIndex: 'nae',
dataIndex: 'title',
render: (text, record, index) => {
return record?.pomsNeedData?.title?.value || ''
}
}, {
title: '关联项目',
dataIndex: 'nae',
dataIndex: 'pomsProject',
render: (text, record, index) => {
const pomsProjectId = record?.pomsNeedData?.pomsProjectId?.value
if (pomsProjectId) {
const corProject = pomsProjectBasicAll.find(p => p.value == pomsProjectId)
return corProject?.label || ''
} else {
return ''
}
}
}, {
title: '申请人',
dataIndex: 'applyerName',
@ -55,14 +87,20 @@ const Rest = (props) => {
render: (text, record, index) => user?.department[0]?.name
}, {
title: '审批状态',
dataIndex: 'apName',
dataIndex: 'status',
render: (text, record) => {
return judgmentProcessState({ state: processState.wait }, 'save')
},
}, {
title: '提交时间',
dataIndex: 'createAt',
render: (text, record, index) => text && moment(text).format('YYYY-MM-DD HH:mm:ss') || '--'
}, {
title: '期望完成时间',
dataIndex: 'nae',
dataIndex: 'expectTime',
render: (text, record, index) => {
return record?.pomsNeedData?.expectTime?.value || ''
}
}, {
title: '操作',
dataIndex: 'hadle',
@ -200,13 +238,11 @@ const Rest = (props) => {
}
function mapStateToProps (state) {
const { auth, global, members, webSocket } = state;
const { auth, global, pomsProjectBasicAll } = state;
return {
// loading: members.isRequesting,
user: auth.user,
// actions: global.actions,
// members: members.data,
// socket: webSocket.socket
actions: global.actions,
pomsProjectBasicAll: pomsProjectBasicAll.data || []
};
}

69
web/client/src/sections/workOrder/containers/receipt.jsx

@ -1,14 +1,14 @@
import React, { useEffect, useRef, useState } from 'react';
import { connect } from 'react-redux';
import { ApiTable, EmisApiTable, EmisRequest } from '$utils'
import { ApiTable, EmisApiTable, EmisRequest, parseProcessData, judgmentProcessState } from '$utils'
import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast } from '@douyinfe/semi-ui';
import { IconSearch } from '@douyinfe/semi-icons';
import { SkeletonScreen, WorkflowApprovalModal } from "$components";
import moment from "moment";
const Rest = (props) => {
const { dispatch, actions, user, socket } = props
const { dispatch, actions, user, socket, pomsProjectBasicAll } = props
const { workOrder } = actions
const [query, setQuery] = useState({ limit: 10, offset: 0 }); //
const [limits, setLimits] = useState(0)//
const [tableData, setTableData] = useState([]);
@ -17,25 +17,48 @@ const Rest = (props) => {
const [checkProcessInstanceId, setCheckProcessInstanceId] = useState(null)
const [params, setParams] = useState({})
useEffect(() => {
backlogData()
if (!pomsProjectBasicAll.length) {
dispatch(workOrder.getPomsProjectBasicAll())
}
}, [])
let backlogData = (obj = { limit: 10, offset: 0 }) => {
setLoading(true)
EmisRequest.get(EmisApiTable.processInstancemMyDoneList,
{ userId: user?.id, businessType: '', ...obj })
{
userId: user?.id,
businessType: '运维中台表单',
...obj,
queryFormData: 'true'
})
.then(res => {
setTableData(res?.data)
let nextTableData = (res?.data || []).map(r => {
let pomsNeedData = {}
if (r?.formData?.formData && r?.formData?.workflowProcessVersion?.workflowProcessForm?.formSchema) {
pomsNeedData = parseProcessData({
formSchema: r?.formData?.workflowProcessVersion?.workflowProcessForm?.formSchema,
formData: r?.formData?.formData
})
}
return {
...r,
pomsNeedData
}
})
setTableData(nextTableData)
setLoading(false)
}, error => {
Toast.error({ content: '已办工单列表请求失败', duration: 1, })
setLoading(false)
});
EmisRequest.get(EmisApiTable.processInstancemMyDoneCount,
{ userId: user?.id, businessType: '', ...obj, limit: "", offset: "" })
{
userId: user?.id,
// businessType: '',
...obj, limit: "", offset: ""
})
.then(res => {
setLimits(res.count || 0)
}, error => {
@ -49,10 +72,22 @@ const Rest = (props) => {
render: (text, record, index) => index + 1
}, {
title: '标题',
dataIndex: 'nae',
dataIndex: 'title',
render: (text, record, index) => {
return record?.pomsNeedData?.title?.value || ''
}
}, {
title: '关联项目',
dataIndex: 'nae',
dataIndex: 'pomsProject',
render: (text, record, index) => {
const pomsProjectId = record?.pomsNeedData?.pomsProjectId?.value
if (pomsProjectId) {
const corProject = pomsProjectBasicAll.find(p => p.value == pomsProjectId)
return corProject?.label || ''
} else {
return ''
}
}
}, {
title: '申请人',
dataIndex: 'application',
@ -61,14 +96,20 @@ const Rest = (props) => {
dataIndex: 'applyDepartmentName',
}, {
title: '审批状态',
dataIndex: 'apName',
dataIndex: 'status',
render: (text, record) => {
return judgmentProcessState(record, 'done')
},
}, {
title: '提交时间',
dataIndex: 'submissionTime',
render: (text, record, index) => text && moment(text).format('YYYY-MM-DD HH:mm:ss') || '--'
}, {
title: '期望完成时间',
dataIndex: 'nae',
dataIndex: 'expectTime',
render: (text, record, index) => {
return record?.pomsNeedData?.expectTime?.value || ''
}
}, {
title: '操作',
dataIndex: 'hadle',
@ -186,9 +227,11 @@ const Rest = (props) => {
}
function mapStateToProps (state) {
const { auth, } = state;
const { auth, global, pomsProjectBasicAll } = state;
return {
user: auth.user,
actions: global.actions,
pomsProjectBasicAll: pomsProjectBasicAll.data || []
};
}

56
web/client/src/sections/workOrder/containers/stayDoWorkOrder.jsx

@ -1,14 +1,14 @@
import React, { useEffect, useRef, useState } from 'react';
import { connect } from 'react-redux';
import { ApiTable, EmisApiTable, EmisRequest } from '$utils'
import { ApiTable, EmisApiTable, EmisRequest, parseProcessData } from '$utils'
import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Toast } from '@douyinfe/semi-ui';
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
const { dispatch, actions, user, socket, pomsProjectBasicAll } = props
const { workOrder } = actions
const [query, setQuery] = useState({ limit: 10, page: 0 }); //
const [limits, setLimits] = useState(0)//
const [tableData, setTableData] = useState([]); //
@ -18,14 +18,35 @@ const Rest = (props) => {
useEffect(() => {
backlogData()
if (!pomsProjectBasicAll.length) {
dispatch(workOrder.getPomsProjectBasicAll())
}
}, [])
let backlogData = (obj = {}) => {
setLoading(true)
EmisRequest.get(EmisApiTable.processInstancemMyAuditList,
{ userId: user?.id, businessType: '', ...obj })
{
userId: user?.id,
businessType: "运维中台表单",
...obj,
queryFormData: 'true'
})
.then(res => {
setTableData(res)
let nextTableData = (res || []).map(r => {
let pomsNeedData = {}
if (r?.formData?.formData && r?.formData?.workflowProcessVersion?.workflowProcessForm?.formSchema) {
pomsNeedData = parseProcessData({
formSchema: r?.formData?.workflowProcessVersion?.workflowProcessForm?.formSchema,
formData: r?.formData?.formData
})
}
return {
...r,
pomsNeedData
}
})
setTableData(nextTableData)
setLimits(res.length || 0)
setLoading(false)
}, error => {
@ -40,10 +61,22 @@ const Rest = (props) => {
render: (text, record, index) => index + 1
}, {
title: '标题',
dataIndex: 'nae',
dataIndex: 'title',
render: (text, record, index) => {
return record?.pomsNeedData?.title?.value || ''
}
}, {
title: '关联项目',
dataIndex: 'nae',
dataIndex: 'pomsProject',
render: (text, record, index) => {
const pomsProjectId = record?.pomsNeedData?.pomsProjectId?.value
if (pomsProjectId) {
const corProject = pomsProjectBasicAll.find(p => p.value == pomsProjectId)
return corProject?.label || ''
} else {
return ''
}
}
}, {
title: '申请人',
dataIndex: 'applyerName',
@ -56,7 +89,10 @@ const Rest = (props) => {
render: (text, record, index) => text && moment(text).format('YYYY-MM-DD HH:mm:ss') || '--'
}, {
title: '期望完成时间',
dataIndex: 'nae',
dataIndex: 'expectTime',
render: (text, record, index) => {
return record?.pomsNeedData?.expectTime?.value || ''
}
}, {
title: '操作',
dataIndex: 'hadle',
@ -172,9 +208,11 @@ const Rest = (props) => {
}
function mapStateToProps (state) {
const { auth, global, } = state;
const { auth, global, pomsProjectBasicAll } = state;
return {
user: auth.user,
actions: global.actions,
pomsProjectBasicAll: pomsProjectBasicAll.data || []
};
}

48
web/client/src/utils/aboutProcess.js

@ -0,0 +1,48 @@
'use strict';
export const processState = {
wait: 'WAIT', //保存待发
active: 'ACTIVE', // 正在运行中
suspended: 'SUSPENDED', // 流程暂停
completed: 'COMPLETED', //流程正常结束
externally: 'EXTERNALLY_TERMINATED', // 手动结束流程
internally: 'INTERNALLY_TERMINATED' //流程异常结束
}
export const judgmentProcessState = (record, activeKey) => {
let content = '';
const { state, status } = record
const state_ = state || status
switch (state_) {
case processState.wait:
content = '草稿'
break;
case processState.active:
content = '待审批'
break;
case processState.completed:
content = '审批通过';
break;
case processState.externally:
content = '审批驳回';
break;
case processState.suspended:
content = '撤销';
break;
case processState.internally:
content = '异常流程';
break;
default:
break;
}
if (state_ == processState.active && record.reviewTime != '') {
content = '审批中'
}
if (activeKey == 'review' && record.reviewTime == '') {
content = '待审批'
}
if (activeKey == 'review' && record.reviewTime != '') {
content = '审批中'
}
return content
}

6
web/client/src/utils/index.js

@ -6,6 +6,8 @@ import {
AxyRequest, EmisRequest,
basicAction, RouteRequest
} from './webapi'
import { parseProcessData } from './parseProcessData'
import { processState, judgmentProcessState } from './aboutProcess'
export {
isAuthorized,
@ -18,4 +20,8 @@ export {
EmisRequest,
basicAction,
RouteRequest,
parseProcessData,
processState,
judgmentProcessState,
}

99
web/client/src/utils/parseProcessData.js

@ -0,0 +1,99 @@
'use strict';
const schemaRecursionObj = (obj, target, schemaPath) => {
let schemaPath_ = JSON.parse(JSON.stringify(schemaPath))
if (obj.properties) {
for (let prKey in obj.properties) {
if (obj.properties[prKey].title == target) {
schemaPath_.push({
prKey,
...obj.properties[prKey]
})
return schemaPath_
}
const hasProperties = obj.properties[prKey].properties
const isGroup = obj.properties[prKey].type == 'array' && obj.properties[prKey].title == '分组'
if (hasProperties || isGroup) {
schemaPath_.push({
prKey,
...obj.properties[prKey],
isGroup: isGroup,
})
schemaPath_ = schemaRecursionObj(
isGroup ?
obj.properties[prKey].items
: obj.properties[prKey],
target,
schemaPath_
)
if (!schemaPath_) {
return []
}
if (schemaPath_.length > schemaPath.length) {
return schemaPath_
}
}
}
} else {
return schemaPath_
}
}
const dataRecursionObj = (dataObj, index, needData, lastKeyObj, nd) => {
const keyObj = needData[nd].schemaPath[index]
if (dataObj.hasOwnProperty(keyObj.prKey)) {
if (lastKeyObj.prKey == keyObj.prKey) {
let gotValue = dataObj[keyObj.prKey]
if (keyObj.enum && !needData[nd].fromDataSource) {
let vIndex = keyObj.enum.findIndex(ke => ke == gotValue)
gotValue = keyObj.enumNames[vIndex]
}
return gotValue
} else {
if (keyObj.isGroup) {
for (let item of dataObj[keyObj.prKey]) {
const gotValue = dataRecursionObj(item, index + 1, needData, lastKeyObj, nd)
if (gotValue) {
return gotValue
}
}
} else {
return dataRecursionObj(dataObj[keyObj.prKey], index + 1, needData, lastKeyObj, nd)
}
}
}
}
const getData = (applyDetail, needData) => {
for (let nd in needData) {
if (needData[nd].noProcess) {
continue
}
needData[nd].schemaPath = schemaRecursionObj(applyDetail.formSchema.jsonSchema, needData[nd]['keyWord'], [])
if (needData[nd].schemaPath && needData[nd].schemaPath.length) {
const lastKeyObj = needData[nd].schemaPath[
needData[nd].schemaPath.length - 1
]
needData[nd].value = dataRecursionObj(applyDetail.formData, 0, needData, lastKeyObj, nd)
} else {
// 记录错误 关键数据没找到
}
}
}
export const parseProcessData = (applyDetail, pomsNeedData = {
title: {
keyWord: '标题',
},
pomsProjectId: {
keyWord: '关联项目',
fromDataSource: true
},
expectTime: {
keyWord: '期望完成时间'
}
}) => {
let needData = JSON.parse(JSON.stringify(pomsNeedData))
getData(applyDetail, needData)
return needData
}

1
web/client/src/utils/webapi.js

@ -80,6 +80,7 @@ export const ApiTable = {
//工单
getEnabledWorkflowProcess: 'workflow/process/enabled',//获取工作流可用表单
getPomsProjectBasicAll: 'basic-data/workflow/single/allProject',
};
// 项企的接口

Loading…
Cancel
Save