|
|
@@ -2,7 +2,7 @@
|
|
|
* @Author: tengmingxue 1473375109@qq.com
|
|
|
* @Date: 2023-08-30 17:25:03
|
|
|
* @LastEditors: tengmingxue 1473375109@qq.com
|
|
|
- * @LastEditTime: 2024-01-26 10:59:29
|
|
|
+ * @LastEditTime: 2024-02-05 14:45:26
|
|
|
* @FilePath: \xld-gis-admin\src\views\dataAdmin\dataAdmin\flowStep\index.vue
|
|
|
* @Description: 流程图表
|
|
|
-->
|
|
|
@@ -159,6 +159,9 @@ export default defineComponent({
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * 设置流程结点
|
|
|
+ */
|
|
|
const setFlowNodes = async (flow) => {
|
|
|
if (!flow?.flowInfo || !flow?.flowNode || !flow?.flowNodePerson) {
|
|
|
createMessage.error(`3、获取流程【${data.flowName}】配置信息异常!请联系管理员检查!`);
|
|
|
@@ -177,41 +180,75 @@ export default defineComponent({
|
|
|
{ handler: user['EMPLOYEE']['NAME'], id: user['EMPLOYEE']['EMPLOYEE_ID'], status: '1' },
|
|
|
],
|
|
|
status: '1', //status 1:已完成,2:进行中,3:驳回,0:未开始
|
|
|
+ model: '1',
|
|
|
},
|
|
|
];
|
|
|
- const step = getFlowNodes(flow.flowNode, flow.flowNodePerson);
|
|
|
- // step.map(i => {
|
|
|
- // i.status = "1";
|
|
|
- // i.handlers.map(j => j.status = "1");
|
|
|
- // })
|
|
|
+ let step = getFlowNodes(flow.flowNode, flow.flowNodePerson);
|
|
|
|
|
|
if (step) data.steps.push(...step);
|
|
|
const length = step.length;
|
|
|
//最后一步默认完成
|
|
|
- data.steps.push({ xh: length + 2, stepName: '完成', handlers: [], status: '0' });
|
|
|
+ data.steps.push({ xh: length + 2, stepName: '完成', handlers: [], status: '0', model: '1' });
|
|
|
getSelectFlowRecord();
|
|
|
};
|
|
|
|
|
|
+ /**
|
|
|
+ * 更具审核人设置流程结点状态
|
|
|
+ */
|
|
|
const getFlowNodes = (flowNode, flowNodePerson) => {
|
|
|
let index = 1;
|
|
|
let steps = [];
|
|
|
function getNextNode(nodes, id) {
|
|
|
const node = flowNode.find((item) => item['PRENODEID'] === id);
|
|
|
if (node) {
|
|
|
- const eximPersons = flowNodePerson.filter((item) => item['FLOWNODEID'] === node['ID']);
|
|
|
+ let eximPersons = flowNodePerson.filter((item) => item['FLOWNODEID'] === node['ID']);
|
|
|
+ //更具审核人判断当前结点是逐级(1)还是并行(2)
|
|
|
+ let model = '1';
|
|
|
+ //只有一个结点默认为逐级(1)
|
|
|
+ if (eximPersons.length <= 1) {
|
|
|
+ model = '1';
|
|
|
+ eximPersons[0]['xh'] = 0;
|
|
|
+ } else {
|
|
|
+ //更具审核人的前后顺序进行排序和判断结点是逐级(1)还是并行(2
|
|
|
+ const list = eximPersons.filter((xp) => xp.NEXTUSERID !== '');
|
|
|
+ //并行
|
|
|
+ if (list.length === 0) {
|
|
|
+ model = '2';
|
|
|
+ eximPersons.map((xp, i) => (eximPersons[i]['xh'] = i));
|
|
|
+ } else {
|
|
|
+ //逐级
|
|
|
+ model = '1';
|
|
|
+ let sIndex = 0;
|
|
|
+ let oid = '';
|
|
|
+ let obj = eximPersons.find((xp) => xp.PREUSERID === oid);
|
|
|
+ let olist = [];
|
|
|
+ while (obj) {
|
|
|
+ oid = obj['ID'];
|
|
|
+ olist.push({ ...obj, xh: sIndex });
|
|
|
+ sIndex++;
|
|
|
+ obj = eximPersons.find((xp) => xp.PREUSERID === oid);
|
|
|
+ }
|
|
|
+
|
|
|
+ eximPersons = olist;
|
|
|
+ }
|
|
|
+ }
|
|
|
let handlers = [];
|
|
|
eximPersons.map((item) => {
|
|
|
handlers.push({
|
|
|
handler: data.sysUserInfo[item['USERID']],
|
|
|
- id: item['USERID'],
|
|
|
+ id: item['USERID'], //用户id
|
|
|
status: '0',
|
|
|
+ uid: item['ID'], //记录id
|
|
|
+ xh: item.xh,
|
|
|
});
|
|
|
});
|
|
|
+
|
|
|
steps.push({
|
|
|
xh: (index = index + 1),
|
|
|
stepName: node['NODENAME'],
|
|
|
handlers: handlers,
|
|
|
status: '0',
|
|
|
+ model: model, //逐级1还是并行2
|
|
|
});
|
|
|
getNextNode(nodes, node['ID']); //递归
|
|
|
} else return false;
|
|
|
@@ -246,7 +283,7 @@ export default defineComponent({
|
|
|
var num = 0;
|
|
|
var allType = true;
|
|
|
if (res.resp_code == 0 && res?.datas?.pageData?.length) {
|
|
|
- console.log('审核记录', res?.datas?.pageData);
|
|
|
+ console.log('记录信息',res.datas.pageData)
|
|
|
res.datas.pageData.map((i, index) => {
|
|
|
if (!i.NODEDISCRIPTION) {
|
|
|
i.NODEDISCRIPTION =
|
|
|
@@ -260,109 +297,63 @@ export default defineComponent({
|
|
|
i.CHECKINFO = '';
|
|
|
data.steps[index].handlers.map((j) => (j.handler = i.CHECKUSERNAEM));
|
|
|
}
|
|
|
- if (i.ISPASS != null && i.ISPASS != undefined) {
|
|
|
- // if (!i.NODEDISCRIPTION) {
|
|
|
- // i.NODEDISCRIPTION =
|
|
|
- // i.CHECKINFO == '起件'
|
|
|
- // ? i.BUSSNAME
|
|
|
- // : i.CHECKINFO == '归档'
|
|
|
- // ? '审核结束'
|
|
|
- // : i.NODEDISCRIPTION;
|
|
|
- // }
|
|
|
- // if (!index) {
|
|
|
- // i.CHECKINFO = '';
|
|
|
- // data.steps[index].handlers.map((j) => (j.handler = i.CHECKUSERNAEM));
|
|
|
- // }
|
|
|
- var type = i.ISPASS == '1' ? '1' : i.ISPASS == '0' ? '1' : '0';
|
|
|
- // if (i.CHECKINFO != '归档') {
|
|
|
- // data.steps[index].status = type;
|
|
|
- // data.steps[index].handlers.map((j) => {
|
|
|
- // (j.status = type), (i.handler = j.handler);
|
|
|
- // });
|
|
|
- // } else if (i.CHECKINFO == '归档' && i.ISPASS == '1') {
|
|
|
- // data.steps[index].status = type;
|
|
|
- // data.steps[index].handlers.map((j) => {
|
|
|
- // (j.status = type), (i.handler = j.handler);
|
|
|
- // });
|
|
|
- // }
|
|
|
- // if (i.CHECKINFO != '归档') objList.unshift(i);
|
|
|
- data.steps[index].status = type;
|
|
|
- data.steps[index].handlers.map((j) => {
|
|
|
- (j.status = type), (i.handler = j.handler);
|
|
|
- });
|
|
|
- if (i.ISPASS == '1') {
|
|
|
- data.steps[index].status = type;
|
|
|
- data.steps[index].handlers.map((j) => {
|
|
|
- (j.status = type), (i.handler = j.handler);
|
|
|
- });
|
|
|
- }
|
|
|
|
|
|
- if (i.ISPASS == '0') {
|
|
|
- allType = false;
|
|
|
+ var type = i.ISPASS === '1' ? '1' : '0';
|
|
|
+ data.steps.map((sp, s) => {
|
|
|
+ //跳过第一步默认步骤
|
|
|
+ if (s !== 0 && sp.stepName === i.NODENAME) {
|
|
|
+ data.steps[s].handlers.map((hd) => {
|
|
|
+ if (hd.uid && hd.uid === i.FLOWNODEPERSONID) {
|
|
|
+ (hd.status = type), (i.handler = hd.handler); //修改状态,并且获取审核记录审核人名称
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
- num++;
|
|
|
- }
|
|
|
-
|
|
|
+ });
|
|
|
objList.unshift(i);
|
|
|
});
|
|
|
-
|
|
|
- if (num < len && allType) {
|
|
|
- data.steps[num].status = '2';
|
|
|
- data.steps[num].handlers.map((j) => {
|
|
|
- j.status = '2';
|
|
|
- });
|
|
|
- }
|
|
|
- pageData.value = objList;
|
|
|
-
|
|
|
- //重新更新审核状态
|
|
|
- data.steps.map((item, index) => {
|
|
|
- //(1)根据步骤名称获取审核情况
|
|
|
- const obj = res.datas.pageData.filter((pd) =>
|
|
|
- pd.NODENAME ? pd.NODENAME === item.stepName : pd.FLOWNAME === item.stepName
|
|
|
- );
|
|
|
- if (obj.length > 0) {
|
|
|
- //存在生审核日志
|
|
|
- //第一个审核步骤,审核状态设置为已审核
|
|
|
- if (index === 0) {
|
|
|
- data.steps[index].status = '1';
|
|
|
- data.steps[index].handlers.map((h, i) => {
|
|
|
- data.steps[index].handlers[i].status = '1';
|
|
|
- });
|
|
|
- } else {
|
|
|
- //非第一个审核步骤,则根据审核人情况就判断状态
|
|
|
- //如果当前结点的审核记录数小于结点配置审核人数,则表示当前结点处于审核中状态
|
|
|
- if (obj.length < data.steps[index].handlers.length) {
|
|
|
- data.steps[index].status = '2';
|
|
|
- //设置结点状态
|
|
|
- data.steps[index].handlers.map((hd, i) => {
|
|
|
- if (obj.find((o) => o.CHECKUSERID === hd.id))
|
|
|
- data.steps[index].handlers[i].status = '1';
|
|
|
- else data.steps[index].handlers[i].status = '2';
|
|
|
- });
|
|
|
- return false;
|
|
|
- } else {
|
|
|
- //否则表示当前步骤结点已经全部审核完成
|
|
|
- data.steps[index].status = '1';
|
|
|
- data.steps[index].handlers.map((hd, i) => {
|
|
|
- data.steps[index].handlers[i].status = '1';
|
|
|
- });
|
|
|
+ let preStatus = '1'; //前一个状态默认为1=已完成
|
|
|
+ let currNodeFinish = false;
|
|
|
+ //更具步骤更新状态
|
|
|
+ data.steps.map((sp, s) => {
|
|
|
+ //跳过第一步默认步骤
|
|
|
+ if (s !== 0) {
|
|
|
+ data.steps[s].handlers.map((sh, h) => {
|
|
|
+ //status 1:已完成,2:进行中,3:驳回,0:未开始
|
|
|
+ if (sh.status === '0') {
|
|
|
+ //如果当前状态未开始0,并且上一个状态是1=已完成,此时当前状态要改为2=进行中
|
|
|
+ if (preStatus === '1') {
|
|
|
+ data.steps[s].handlers[h].status = '2';
|
|
|
+ //逐级的话要改变当前状态标记
|
|
|
+ if (sp.model === '1') preStatus = '0';
|
|
|
+ else {
|
|
|
+ //并行的话到最后一个改变当前状态标记
|
|
|
+ if (data.steps[s].handlers.length - 1 <= h) preStatus = '0';
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- } else {
|
|
|
- //没有任何审核,此时状态改为未开始
|
|
|
- data.steps[index].status = '0';
|
|
|
- data.steps[index].handlers.map((h, i) => {
|
|
|
- data.steps[index].handlers[i].status = '0';
|
|
|
});
|
|
|
+ //当前结点是否审核完成
|
|
|
+ let exList = data.steps[s].handlers.filter((shd) => shd.status === '1');
|
|
|
+ currNodeFinish = exList.length === data.steps[s].handlers.length;
|
|
|
+ if (currNodeFinish) data.steps[s].status = '1';
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断是否所有的已完成
|
|
|
+ if (data.steps.length - 1 === s && data.steps[s - 1].status !== '1'){
|
|
|
+ data.steps[s].status = '0';
|
|
|
}
|
|
|
});
|
|
|
- console.log('步骤', data.steps);
|
|
|
+ pageData.value = objList;
|
|
|
+
|
|
|
//排序
|
|
|
data.steps.map((step, i) => {
|
|
|
data.steps[i].handlers.sort((a, b) => {
|
|
|
- return parseInt(a.status) - parseInt(b.status);
|
|
|
+ return parseInt(a.xh) - parseInt(b.xh);
|
|
|
});
|
|
|
});
|
|
|
+
|
|
|
+ console.log('步骤信息',data.steps)
|
|
|
+
|
|
|
}
|
|
|
});
|
|
|
}
|