OAMange.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826
  1. <template>
  2. <div class="process-mange-wrap">
  3. <el-card shadow="always" :body-style="{ padding: '20px' }">
  4. <div slot="header" class="clearfix">
  5. <span>待办任务</span>
  6. </div>
  7. <div class="search-area">
  8. <el-form
  9. :model="queryParams"
  10. ref="queryParamsRef"
  11. label-width="80px"
  12. :inline="true"
  13. size="medium"
  14. >
  15. <el-form-item label="名称" size="normal">
  16. <el-input v-model="queryParams.taskName"></el-input>
  17. </el-form-item>
  18. <!-- <el-form-item label="开始时间" size="normal">
  19. <el-date-picker
  20. v-model="queryParams.startDate"
  21. type="date"
  22. size="normal"
  23. placeholder="选择日期时间"
  24. >
  25. </el-date-picker>
  26. </el-form-item> -->
  27. <el-form-item>
  28. <el-button
  29. type="primary"
  30. size="medium"
  31. @click="getList"
  32. icon="el-icon-search"
  33. >搜索</el-button
  34. >
  35. <el-button size="medium" @click="resetQuery" icon="el-icon-refresh"
  36. >重置</el-button
  37. >
  38. <!-- <el-button type="info" size="medium" @click="toDetail"
  39. >详情</el-button
  40. > -->
  41. </el-form-item>
  42. <el-form-item>
  43. <el-radio-group
  44. v-model="queryParams.taskProcessState"
  45. @change="getList"
  46. >
  47. <el-radio-button label="3">已完成</el-radio-button>
  48. <el-radio-button label="0">进行中</el-radio-button>
  49. </el-radio-group>
  50. </el-form-item>
  51. </el-form>
  52. </div>
  53. <!-- <el-button type="primary" size="default" @click="printTest">
  54. 打印测试
  55. </el-button> -->
  56. <div class="show-body">
  57. <!-- 流程任务列表 -->
  58. <el-table
  59. v-loading="loading"
  60. :data="tableData"
  61. border
  62. @selection-change="() => {}"
  63. >
  64. <el-table-column type="selection" width="55" align="center" />
  65. <el-table-column type="index" width="50" align="center" />
  66. <el-table-column
  67. v-for="col in newColumn"
  68. :prop="col.prop"
  69. :key="col.prop"
  70. :label="col.label"
  71. align="center"
  72. >
  73. <template slot-scope="scope">
  74. <span v-if="col.prop == 'benCreateTime'">{{
  75. scope.row.benCreateTime.replace("T", " ")
  76. }}</span>
  77. <span v-else-if="col.prop == 'bepTaskProcessType'">{{
  78. getDictLabel(scope.row.bepTaskProcessType, dict.type.bpm_type)
  79. }}</span>
  80. <span v-else-if="col.prop == 'benTaskNodeState'">{{
  81. scope.row.benTaskNodeState == "0" ? "未执行" : "已执行"
  82. }}</span>
  83. <span v-else-if="col.prop == 'bepTaskProcessState'">{{
  84. getDictLabel(
  85. scope.row.bepTaskProcessState,
  86. dict.type.task_process_state
  87. )
  88. }}</span>
  89. <span v-else>{{ scope.row[col.prop] }}</span>
  90. </template>
  91. </el-table-column>
  92. <el-table-column
  93. label="操作"
  94. width="150"
  95. fixed="right"
  96. class-name="small-padding fixed-width"
  97. >
  98. <template slot-scope="scope">
  99. <el-button
  100. v-show="scope.row.bepTaskProcessState != 3"
  101. class="mr5 mb5"
  102. @click="approveHandler(scope.row)"
  103. type="primary"
  104. size="small"
  105. >审批</el-button
  106. >
  107. <el-dropdown>
  108. <el-button type="warning" plain size="small">
  109. 处理<i class="el-icon-arrow-down el-icon--right"></i>
  110. </el-button>
  111. <el-dropdown-menu slot="dropdown">
  112. <!-- <el-dropdown-item>
  113. <el-button
  114. @click="approveHandler(scope.row)"
  115. type="text"
  116. size="small"
  117. >审批</el-button
  118. >
  119. </el-dropdown-item> -->
  120. <el-dropdown-item>
  121. <el-button
  122. @click="toDetail(scope.row)"
  123. type="text"
  124. size="small"
  125. >详情</el-button
  126. >
  127. </el-dropdown-item>
  128. <el-dropdown-item>
  129. <el-button
  130. v-show="isShowCancel(scope.row)"
  131. @click="cancelHandler(scope.row)"
  132. type="text"
  133. size="small"
  134. >取消申请</el-button
  135. >
  136. </el-dropdown-item>
  137. <!-- <el-dropdown-item>
  138. <el-button
  139. @click="() => {}"
  140. type="text"
  141. size="small"
  142. v-hasPermi="['system:deployment:remove']"
  143. >删除</el-button
  144. >
  145. </el-dropdown-item> -->
  146. </el-dropdown-menu>
  147. </el-dropdown>
  148. <!-- <el-button @click="(scope) => {}" type="text" size="small"
  149. >详情</el-button
  150. >
  151. <el-button @click="() => {}" type="text" size="small"
  152. >取消申请</el-button
  153. >
  154. <el-button
  155. @click="() => {}"
  156. type="text"
  157. size="small"
  158. v-hasPermi="['system:deployment:remove']"
  159. >删除</el-button
  160. > -->
  161. </template>
  162. </el-table-column>
  163. </el-table>
  164. <!-- 分页 -->
  165. <pagination
  166. v-show="total > 0"
  167. :total="total"
  168. :page.sync="queryParams.pageNum"
  169. :limit.sync="queryParams.pageSize"
  170. @pagination="getList"
  171. />
  172. <!-- 审批弹窗 -->
  173. <el-dialog title="审批" :visible.sync="show">
  174. <!-- <FormGroup ref="formGroupRef" :formList="formList"></FormGroup> -->
  175. <Approve
  176. ref="approveRef"
  177. :formList="formList"
  178. :nodeLogList="nodeLogList"
  179. ></Approve>
  180. <template #footer>
  181. <span>
  182. <el-button @click="show = false">取消</el-button>
  183. <el-button type="primary" @click="confirmHandler">确认</el-button>
  184. </span>
  185. </template>
  186. </el-dialog>
  187. </div>
  188. </el-card>
  189. <div id="print"></div>
  190. </div>
  191. </template>
  192. <script>
  193. import {
  194. processList,
  195. runProcessNodeExecution,
  196. getProcessNodeFormTemplate,
  197. getProcessNodeFormInfoData,
  198. processNodeExecutionApproval,
  199. revokeApplication,
  200. } from "@/api/bpmprocess/run/executeProcess";
  201. import { triggerExceptionNode } from "@/api/bpmprocess/process";
  202. import getNodeSequence from "@/utils/bpmn/getNodeSequence";
  203. import { getForm } from "@/api/dragform/form";
  204. import FormGroup from "@/components/FormGroup/index.vue";
  205. import Approve from "@/components/FormGroup/Approve.vue";
  206. import receiptDocuments from "@/utils/print/receiptDocuments";
  207. import qrCodeList from "@/utils/print/qrCodeList.js";
  208. import { xmlStr2XmlObj } from "@/utils/bpmn/tool";
  209. import { submitNodeForm } from "@/api/bpmprocess/runDialogApi/index";
  210. import { camelCase, toUnderline } from "@/utils";
  211. export default {
  212. name: "processMange",
  213. props: [],
  214. components: { FormGroup, Approve },
  215. dicts: ["bpm_type", "task_process_state"],
  216. data() {
  217. return {
  218. // 弹窗表单数据
  219. row: {},
  220. formList: [],
  221. show: false,
  222. loading: false,
  223. row: {}, //当前操作行数据
  224. myForm: "", //自定义表单组件名
  225. // 节点弹窗title
  226. nodeTitle: "节点弹窗",
  227. open: false,
  228. // 节点弹窗对应的formData
  229. commonData: {},
  230. taskType: 1,
  231. queryString: "",
  232. taskStatus: "",
  233. tableData: [], //表格数据
  234. // 查询参数
  235. queryParams: {
  236. pageNum: 1,
  237. pageSize: 10,
  238. taskProcessState: "0",
  239. taskProcessType: 1,
  240. },
  241. total: 0,
  242. columns: [
  243. {
  244. prop: "bepTaskKey",
  245. label: "任务编号",
  246. },
  247. {
  248. prop: "bepTaskProcessName",
  249. label: "任务名称",
  250. },
  251. // {
  252. // prop: "bepTaskProcessType",
  253. // label: "任务流程类型",
  254. // },
  255. {
  256. prop: "bepTaskProcessState",
  257. label: "任务流程状态",
  258. },
  259. {
  260. prop: "benTaskNodeName",
  261. label: "节点名称",
  262. },
  263. {
  264. prop: "benTaskNodeType",
  265. label: "节点类型",
  266. },
  267. {
  268. prop: "benTaskNodeState",
  269. label: "节点状态",
  270. },
  271. {
  272. prop: "benCreateBy",
  273. label: "创建人",
  274. },
  275. {
  276. prop: "benCreateTime",
  277. label: "创建时间",
  278. },
  279. ],
  280. formType: "", //表单类型 dragForm:拖拽表单 composeForm:工艺组合表单 designForm:定制表单
  281. // k-form-build 数据
  282. dynamicData: {},
  283. tableName: "",
  284. defaultValue: {},
  285. jsonData: {},
  286. // 拖拽数据
  287. taskInfo: {},
  288. groupKey: "",
  289. subCount: {},
  290. tableCount: {},
  291. subTableName: "",
  292. // 弹窗表单渲染数据
  293. formData: {},
  294. backExceptionTaskList: ["GY06"], //特殊回退表单组件列表
  295. nodeLogList: [], //节点日志列表
  296. };
  297. },
  298. computed: {
  299. newColumn() {
  300. if (this.queryParams.taskProcessState == "3") {
  301. return [
  302. {
  303. prop: "bepTaskKey",
  304. label: "任务编号",
  305. },
  306. {
  307. prop: "bepTaskProcessName",
  308. label: "任务名称",
  309. },
  310. // {
  311. // prop: "bepTaskProcessType",
  312. // label: "任务流程类型",
  313. // },
  314. {
  315. prop: "bepTaskProcessState",
  316. label: "任务流程状态",
  317. },
  318. {
  319. prop: "benCreateBy",
  320. label: "创建人",
  321. },
  322. {
  323. prop: "benCreateTime",
  324. label: "创建时间",
  325. },
  326. ];
  327. } else {
  328. return this.columns;
  329. }
  330. },
  331. },
  332. mounted() {
  333. this.getList();
  334. },
  335. methods: {
  336. // 审批回调
  337. async approveHandler(row) {
  338. console.log(row);
  339. this.row = row;
  340. let {
  341. benTaskNodeFormKey,
  342. benTaskNodeFormType,
  343. bepTaskPlanKey,
  344. bepTaskKey,
  345. benTaskNodeKey,
  346. bepTaskNodeKey,
  347. benTaskProcessKey,
  348. benmTaskAutomaticScriptTriggerType,
  349. bepTaskNodeNextKey,
  350. } = row;
  351. // 新的运行逻辑
  352. let payLoad = {
  353. taskNodeKey: benTaskNodeKey,
  354. taskProcessKey: benTaskProcessKey,
  355. // taskAutomaticScriptTriggerType: benmTaskAutomaticScriptTriggerType,
  356. taskPlanKey: bepTaskPlanKey,
  357. };
  358. let res = await getProcessNodeFormTemplate(payLoad);
  359. if (res.code == 200) {
  360. if (res.data[0]?.template?.mainForm) {
  361. //表单组
  362. this.transformDataFormat(res.data[0].template);
  363. this.tableName =
  364. res.data[0].template.mainForm.showTemplate.dfTableName;
  365. console.log(this.formList);
  366. } else {
  367. this.formList = res.data;
  368. this.tableName = res.data[0].template.dfTableName;
  369. }
  370. this.nodeLogList = row.nodeLog.slice(1);
  371. this.show = true;
  372. } else {
  373. this.$message.error("网络异常,请稍后再试");
  374. }
  375. },
  376. // 将表单组数据转换成符合单个表单的数据格式
  377. transformDataFormat(data) {
  378. let { mainForm, subFormList } = data;
  379. this.formList = [];
  380. let showValue = mainForm.showValue[0];
  381. if (showValue) {
  382. mainForm.showTemplate.resultMap = mainForm.showValue;
  383. }
  384. this.formList.push({
  385. template: mainForm.showTemplate,
  386. tableName: mainForm.mainFormTable,
  387. });
  388. if (subFormList && subFormList.length > 0) {
  389. subFormList.forEach((item) => {
  390. let showValue = null;
  391. if (item.showValue) {
  392. showValue = item.showValue[0];
  393. }
  394. let defaultValue = {};
  395. if (showValue) {
  396. if (item.showTemplate.spare == "2") {
  397. //动态表格表单
  398. let batch = {},
  399. tableName = item.formItem?.split(".")?.[0];
  400. batch[tableName] = item.showValue.map((item) => item.resultMap);
  401. defaultValue = JSON.parse(JSON.stringify(batch));
  402. console.log(JSON.parse(JSON.stringify(batch)));
  403. // 所有字段驼峰转下划线
  404. batch[tableName].forEach((i) => {
  405. for (const key of Object.keys(i)) {
  406. i[toUnderline(key)] = i[key];
  407. if (toUnderline(key) != key) {
  408. delete i[key];
  409. }
  410. }
  411. });
  412. item.showTemplate.resultMap = [
  413. {
  414. batch,
  415. },
  416. ];
  417. } else {
  418. for (const key of Object.keys(item.showValue[0].resultMap)) {
  419. item.showValue[0].resultMap[toUnderline(key)] =
  420. item.showValue[0].resultMap[key];
  421. }
  422. item.showTemplate.resultMap = [item.showValue[0].resultMap];
  423. }
  424. }
  425. this.formList.push({
  426. template: item.showTemplate,
  427. tableName: item.formItem?.split(".")?.[0],
  428. });
  429. // this.FormNameList.push({
  430. // tableName: item.formItem?.split(".")?.[0],
  431. // formItem: item.formItem,
  432. // relateFormItem: item.relateMainItem,
  433. // formType: item.showTemplate.spare == "2" ? "batch" : "normal",
  434. // defaultValue,
  435. // insertMap: item.insertMap,
  436. // });
  437. });
  438. // subFormList.forEach((item) => {
  439. // let showValue = item.showValue[0];
  440. // if (showValue) {
  441. // item.showTemplate.resultMap = mainForm.showValue;
  442. // }
  443. // this.formList.push({
  444. // template: item.showTemplate,
  445. // tableName: item.formItem?.split(".")?.[0],
  446. // });
  447. // });
  448. }
  449. },
  450. toDetail(row) {
  451. console.log(row);
  452. let { bepTaskPlanKey, benTaskNodeKey, benTaskProcessKey } = row;
  453. window.sessionStorage.setItem("oaRow", JSON.stringify(row));
  454. let theLastNode = this.getTheLastNode(row.bepTaskProcessXmlContent);
  455. this.$router.push({
  456. path: "/processMange/detail",
  457. query: {
  458. taskNodeKey:
  459. row.bepTaskProcessState == 3 ? theLastNode : benTaskNodeKey,
  460. taskProcessKey: benTaskProcessKey,
  461. taskPlanKey: bepTaskPlanKey,
  462. },
  463. });
  464. },
  465. // 获取最后一个节点的nodekey 最后一个非结束节点
  466. getTheLastNode(xmlStr) {
  467. let xmlObj = xmlStr2XmlObj(xmlStr);
  468. let nodeSequence = getNodeSequence(xmlObj);
  469. console.log(nodeSequence);
  470. return nodeSequence[nodeSequence.length - 2]?.nodeId;
  471. },
  472. // 获取列表数据
  473. getList() {
  474. processList({ ...this.queryParams, taskName: this.queryString }).then(
  475. (res) => {
  476. if (res.code == 200) {
  477. this.tableData = res.rows.map((item) => item.resultMap);
  478. this.total = res.total;
  479. console.log(this.tableData);
  480. } else {
  481. this.$message.error("网络异常,请稍后再试");
  482. }
  483. }
  484. );
  485. },
  486. // 获取字典对应label
  487. getDictLabel(value, dictLsit = []) {
  488. return dictLsit.find((item) => {
  489. return item.value == value;
  490. })?.label;
  491. },
  492. // xml字符串转xml对象
  493. xmlStr2XmlObj(xmlStr) {
  494. var xmlObj = {};
  495. if (document.all) {
  496. var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
  497. xmlDom.loadXML(xmlStr);
  498. xmlObj = xmlDom;
  499. } else {
  500. xmlObj = new DOMParser().parseFromString(xmlStr, "text/xml");
  501. }
  502. return xmlObj;
  503. },
  504. // 获取下一个节点的nodekey
  505. getNextNodeKey(nodeKey, xmlStr) {
  506. let xmlObj = this.xmlStr2XmlObj(xmlStr);
  507. let nodeSequence = getNodeSequence(xmlObj);
  508. return nodeSequence.find((item) => item.nodeId == nodeKey) || {};
  509. },
  510. // 确认审批回调
  511. async confirmHandler() {
  512. let { benTaskNodeKey, bepTaskProcessXmlContent, implementationName } =
  513. this.row;
  514. let { nodeId, nextNodeId } = this.getNextNodeKey(
  515. benTaskNodeKey,
  516. bepTaskProcessXmlContent
  517. );
  518. let res = await this.$refs.approveRef.getformInfo();
  519. if (!res.flag) return;
  520. // this.afterNodeExecute(this.row, res);
  521. // return;
  522. // 准备审批数据
  523. let payLoad = {
  524. taskProcessKey: this.row.bepTaskKey, //当前任务流程编码
  525. taskNodeKey: nodeId, //当前执行节点唯一编码
  526. nextNodeKey: nextNodeId, //下一节点编码
  527. implementationName: this.row.benmTaskAutomaticScriptTriggerType, //当前节点绑定的脚本名
  528. // taskProcessXmlContent: this.row.bepTaskProcessXmlContent, //当前流程xml
  529. tableName: this.tableName,
  530. // formDataMap: JSON.stringify(res.data), //自定义表单组件收集的表单数据
  531. taskNodeType: this.row.benTaskNodeType,
  532. ...res.data,
  533. };
  534. let fileXML = new File(
  535. [this.row.bepTaskProcessXmlContent],
  536. this.row.bepTaskKey + ".bpmn",
  537. {
  538. type: "text/bpmn",
  539. }
  540. );
  541. const subformData = new FormData();
  542. subformData.append("fileXML", fileXML);
  543. for (let key in payLoad) {
  544. subformData.append(key, payLoad[key] == null ? "" : payLoad[key]);
  545. }
  546. let result = await processNodeExecutionApproval(subformData);
  547. if (result.code == 200) {
  548. this.$message.success("审批成功");
  549. this.afterNodeExecute(this.row, res);
  550. this.show = false;
  551. this.getList();
  552. } else {
  553. this.$message.error("审批失败");
  554. }
  555. },
  556. // 节点后操作
  557. async afterNodeExecute(row, formData) {
  558. let { benTask3 } = row;
  559. let timing = formData.data.approvalStatus;
  560. if (!benTask3) return;
  561. let tempData = JSON.parse(benTask3);
  562. console.log(tempData, this.formList, formData);
  563. let timingList = tempData.filter((item) => item.timing == timing);
  564. if (timingList.length == 0) return; //没有指定时机的操作
  565. let ExecuteTypeObj = {
  566. insert: {}, //insertCommonEntityList
  567. update: {}, //updateCommonEntityList
  568. };
  569. // let ExecuteTypeObj=new Object();
  570. timingList.forEach((item) => {
  571. let exeType = item.exeType;
  572. if (exeType == "insert") {
  573. item.tableData.forEach((i) => {
  574. // let insertTableName = i.fieldName.split(".")[0];
  575. // let insertField = i.fieldName.split(".")[1];
  576. let insertTableName = i.relaTableName;
  577. let insertField = i.relaFieldName;
  578. if (!ExecuteTypeObj.insert[insertTableName]) {
  579. //新的表 添加初始结构
  580. ExecuteTypeObj.insert[insertTableName] = {
  581. basicMap: {
  582. tableName: insertTableName,
  583. },
  584. addListMap: [{}],
  585. };
  586. }
  587. // 在保证有基础结构后 进行赋值
  588. ExecuteTypeObj.insert[insertTableName].addListMap[0][insertField] =
  589. i.defaultValue ? i.defaultValue : this.getRelateValue(i);
  590. });
  591. } else if (exeType == "update") {
  592. item.tableData.forEach((i) => {
  593. // let insertTableName = i.fieldName.split(".")[0];
  594. // let insertField = i.fieldName.split(".")[1];
  595. let insertTableName = i.relaTableName;
  596. let insertField = i.relaFieldName;
  597. if (!ExecuteTypeObj.update[insertTableName]) {
  598. //新的表 添加初始结构
  599. ExecuteTypeObj.update[insertTableName] = {
  600. basicMap: {
  601. tableName: insertTableName,
  602. },
  603. commMap: {},
  604. conditionMap: {},
  605. };
  606. }
  607. if (i.isCondition == "false") {
  608. //非条件
  609. ExecuteTypeObj.update[insertTableName].commMap[insertField] =
  610. i.defaultValue ? i.defaultValue : this.getRelateValue(i);
  611. } else {
  612. //条件
  613. ExecuteTypeObj.update[insertTableName].conditionMap[insertField] =
  614. i.defaultValue ? i.defaultValue : this.getRelateValue(i);
  615. }
  616. });
  617. }
  618. });
  619. console.log(ExecuteTypeObj);
  620. let payload = {
  621. insertCommonEntityList: [],
  622. updateCommonEntityList: [],
  623. };
  624. let tempInsert = ExecuteTypeObj.insert;
  625. if (Object.keys(tempInsert).length > 0) {
  626. for (const val of Object.keys(tempInsert)) {
  627. payload.insertCommonEntityList.push(tempInsert[val]);
  628. }
  629. }
  630. let tempUpdate = ExecuteTypeObj.update;
  631. if (Object.keys(tempUpdate).length > 0) {
  632. for (const iterator of Object.keys(tempUpdate)) {
  633. payload.updateCommonEntityList.push(tempUpdate[iterator]);
  634. }
  635. }
  636. try {
  637. console.log(payload);
  638. let res = await submitNodeForm(payload);
  639. if (res.code == 200) {
  640. // this.$message.success("提交成功");
  641. } else {
  642. this.$message.error("网络异常,请稍后再试");
  643. }
  644. } catch (error) {
  645. console.log(error);
  646. }
  647. },
  648. // 获取表单对应的值
  649. getRelateValue(i) {
  650. let { relaTableName, relaFieldName, fieldName } = i;
  651. let tableName = fieldName.split(".")[0];
  652. let field = fieldName.split(".")[1];
  653. let relaForm = this.formList.find((item) => item.tableName == tableName);
  654. if (!relaForm || !relaForm.template.defaultValue) return "";
  655. return relaForm.template.defaultValue[field];
  656. },
  657. // 取消审批回调
  658. async cancelHandler(row) {
  659. console.log(row);
  660. // 先获取tableName
  661. let {
  662. benTaskNodeKey,
  663. bepTaskProcessXmlContent,
  664. implementationName,
  665. bepTaskPlanKey,
  666. benTaskProcessKey,
  667. } = row;
  668. let { nodeId, nextNodeId } = this.getNextNodeKey(
  669. benTaskNodeKey,
  670. bepTaskProcessXmlContent
  671. );
  672. // let payLoad = {
  673. // taskNodeKey: benTaskNodeKey,
  674. // taskProcessKey: benTaskProcessKey,
  675. // // taskAutomaticScriptTriggerType: benmTaskAutomaticScriptTriggerType,
  676. // taskPlanKey: bepTaskPlanKey,
  677. // };
  678. // 准备审批数据
  679. let payLoad = {
  680. taskProcessKey: row.bepTaskKey, //当前任务流程编码
  681. taskNodeKey: nodeId, //当前执行节点唯一编码
  682. nextNodeKey: nextNodeId, //下一节点编码
  683. implementationName: row.benmTaskAutomaticScriptTriggerType, //当前节点绑定的脚本名
  684. // taskProcessXmlContent: this.row.bepTaskProcessXmlContent, //当前流程xml
  685. tableName: this.tableName,
  686. // formDataMap: JSON.stringify(res.data), //自定义表单组件收集的表单数据
  687. taskNodeType: row.benTaskNodeType,
  688. };
  689. let fileXML = new File(
  690. [row.bepTaskProcessXmlContent],
  691. row.bepTaskKey + ".bpmn",
  692. {
  693. type: "text/bpmn",
  694. }
  695. );
  696. const subformData = new FormData();
  697. subformData.append("fileXML", fileXML);
  698. for (let key in payLoad) {
  699. subformData.append(key, payLoad[key] == null ? "" : payLoad[key]);
  700. }
  701. this.$confirm("确认取消吗?", "提示", {
  702. confirmButtonText: "确定",
  703. cancelButtonText: "取消",
  704. type: "warning",
  705. }).then(async () => {
  706. let result = await revokeApplication(subformData);
  707. if (result.code == 200) {
  708. this.$message.success("取消成功");
  709. this.getList();
  710. } else {
  711. this.$message.error("取消失败");
  712. }
  713. });
  714. },
  715. // 取消审批按钮 显示与隐藏
  716. isShowCancel(row) {
  717. if (row.bepTaskProcessState == 3) {
  718. return false;
  719. }
  720. this.cancelShow = !this.cancelShow;
  721. },
  722. //重置查询参数
  723. resetQuery() {
  724. this.queryParams = {
  725. pageNum: 1,
  726. pageSize: 10,
  727. taskName: "",
  728. taskProcessState: "0",
  729. taskProcessType: 1,
  730. };
  731. this.getList();
  732. },
  733. // 打印测试
  734. printTest() {
  735. // receiptDocuments({}, "print");
  736. qrCodeList({}, "print");
  737. },
  738. },
  739. };
  740. </script>
  741. <style scoped lang="scss">
  742. .process-mange-wrap {
  743. background-color: #f2f3f8;
  744. padding: 20px;
  745. .col {
  746. background-color: #fff;
  747. border-right: 1px solid #ebedf2;
  748. /* margin-right: 3px; */
  749. .statistic-wrap {
  750. /* // height: 70px; */
  751. box-sizing: border-box;
  752. display: flex;
  753. align-items: center;
  754. padding: 10px 17px;
  755. justify-content: space-between;
  756. .discription {
  757. display: flex;
  758. flex-direction: column;
  759. .title {
  760. line-height: 20px;
  761. font-size: 18px;
  762. font-weight: 700;
  763. margin-bottom: 5px;
  764. }
  765. .sub-title {
  766. font-size: 14px;
  767. }
  768. }
  769. .data {
  770. font-size: 20px;
  771. font-weight: 700;
  772. }
  773. }
  774. }
  775. .main-area {
  776. margin-top: 30px;
  777. box-shadow: 0 1px 15px 1px rgb(69 65 78 / 8%);
  778. background-color: #fff;
  779. .show-header {
  780. border-bottom: 1px solid #ebedf2;
  781. display: flex;
  782. align-items: center;
  783. justify-content: space-between;
  784. padding: 0px 20px 0px 20px;
  785. height: 70px;
  786. /* .header {
  787. } */
  788. .search-list {
  789. display: flex;
  790. .search-tab {
  791. margin-right: 20px;
  792. .btn-list-two {
  793. margin-left: 10px;
  794. }
  795. }
  796. }
  797. }
  798. .show-body {
  799. padding: 25px;
  800. }
  801. }
  802. }
  803. </style>