index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794
  1. <template>
  2. <div class="app-container">
  3. <el-form
  4. :model="queryParams"
  5. ref="queryForm"
  6. size="small"
  7. :inline="true"
  8. v-show="showSearch"
  9. label-width="68px"
  10. >
  11. <el-form-item :label="$t('bpmprocess.processName')" prop="processName">
  12. <el-input
  13. v-model="queryParams.processName"
  14. :placeholder="$t('bpmprocess.pleaseEnterProcessName')"
  15. clearable
  16. @keyup.enter.native="handleQuery"
  17. />
  18. </el-form-item>
  19. <el-form-item :label="$t('bpmprocess.processKey')" prop="processKey">
  20. <el-input
  21. v-model="queryParams.processKey"
  22. :placeholder="$t('bpmprocess.pleaseEnterProcessKey')"
  23. clearable
  24. @keyup.enter.native="handleQuery"
  25. />
  26. </el-form-item>
  27. <el-form-item :label="$t('bpmprocess.processType')" prop="processType">
  28. <!-- <el-input
  29. v-model="queryParams.processType"
  30. placeholder="请输入流程别名"
  31. clearable
  32. @keyup.enter.native="handleQuery"
  33. /> -->
  34. <el-radio
  35. @change="handleQuery"
  36. v-model="queryParams.processType"
  37. label="0"
  38. >{{ $t('bpmprocess.productionProcess') }}</el-radio
  39. >
  40. <el-radio
  41. @change="handleQuery"
  42. v-model="queryParams.processType"
  43. label="1"
  44. >{{ $t('bpmprocess.approvalProcess') }}</el-radio
  45. >
  46. </el-form-item>
  47. <!-- <el-form-item
  48. label="流程开启状态"
  49. class="item_label"
  50. prop="processOpneState"
  51. >
  52. <el-input
  53. v-model="queryParams.processOpneState"
  54. placeholder="请输入流程开启状态"
  55. clearable
  56. @keyup.enter.native="handleQuery"
  57. />
  58. </el-form-item>
  59. <el-form-item
  60. label="流程部署时间"
  61. class="item_label"
  62. prop="processDeployTime"
  63. >
  64. <el-date-picker
  65. clearable
  66. v-model="queryParams.processDeployTime"
  67. type="date"
  68. value-format="yyyy-MM-dd"
  69. placeholder="请选择流程部署时间"
  70. >
  71. </el-date-picker>
  72. </el-form-item> -->
  73. <!-- <el-form-item label="版本状态" prop="processVersion">
  74. <el-select
  75. v-model="queryParams.processVersion"
  76. value-key="value"
  77. placeholder="请输入版本状态"
  78. filterable
  79. clearable
  80. @change="handleQuery"
  81. >
  82. <el-option
  83. v-for="item in dict.type.bpm_version"
  84. :key="item.value"
  85. :label="item.label"
  86. :value="item.value"
  87. >
  88. </el-option>
  89. </el-select>
  90. </el-form-item> -->
  91. <el-form-item>
  92. <el-button
  93. type="primary"
  94. icon="el-icon-search"
  95. size="mini"
  96. @click="handleQuery"
  97. >{{ $t('normal.search') }}
  98. </el-button>
  99. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  100. >{{ $t('normal.reset') }}
  101. </el-button>
  102. </el-form-item>
  103. </el-form>
  104. <el-row :gutter="10" class="mb8">
  105. <el-col :span="1.5">
  106. <el-button
  107. type="primary"
  108. plain
  109. icon="el-icon-plus"
  110. size="mini"
  111. @click="handleAdd"
  112. v-hasPermi="['system:process:add']"
  113. >{{ $t('normal.insert') }}
  114. </el-button>
  115. </el-col>
  116. <el-col :span="1.5">
  117. <el-button
  118. type="danger"
  119. plain
  120. icon="el-icon-delete"
  121. size="mini"
  122. :disabled="multiple"
  123. @click="handleDelete"
  124. v-hasPermi="['system:process:remove']"
  125. >{{ $t('normal.delete') }}
  126. </el-button>
  127. </el-col>
  128. <el-col :span="1.5">
  129. <el-button
  130. type="warning"
  131. plain
  132. v-if="selection.length == 0"
  133. icon="el-icon-download"
  134. size="mini"
  135. @click="handleExport"
  136. v-hasPermi="['system:process:export']"
  137. >{{ $t('bpmprocess.exportAll') }}
  138. </el-button>
  139. <ExcelDownLoad
  140. v-else
  141. :headerList="headerList"
  142. :fieldList="selection"
  143. :excelTitle="excelTitle"
  144. ></ExcelDownLoad>
  145. </el-col>
  146. <el-col :span="1.5">
  147. <el-button
  148. type="warning"
  149. plain
  150. icon="el-icon-download"
  151. size="mini"
  152. @click="handleFileExport"
  153. v-hasPermi="['system:process:export']"
  154. >{{ $t('bpmprocess.exportProcessFile') }}
  155. </el-button>
  156. </el-col>
  157. <right-toolbar
  158. :showSearch.sync="showSearch"
  159. @queryTable="getList"
  160. ></right-toolbar>
  161. </el-row>
  162. <el-table
  163. v-loading="loading"
  164. :data="processList"
  165. @selection-change="handleSelectionChange"
  166. ref="tableRef"
  167. >
  168. <el-table-column type="selection" width="55" align="center" />
  169. <el-table-column :label="$t('bpmprocess.primaryKey')" align="center" prop="processId" />
  170. <el-table-column :label="$t('bpmprocess.processName')" align="center" prop="processName">
  171. <template slot-scope="scope">
  172. <span class="process_name" @click="prviewHandle(scope.row)">{{
  173. scope.row.processName
  174. }}</span>
  175. </template>
  176. </el-table-column>
  177. <el-table-column :label="$t('bpmprocess.processKey')" align="center" prop="processKey" />
  178. <!-- <el-table-column label="流程状态" align="center" prop="processOpneState">
  179. <template slot-scope="scope">
  180. <span>{{
  181. getDictLabel(scope.row.processOpneState, dict.type.bpm_state)
  182. }}</span>
  183. </template>
  184. </el-table-column> -->
  185. <el-table-column :label="$t('bpmprocess.processType')" align="center" prop="processType">
  186. <template slot-scope="scope">
  187. <span>{{
  188. getDictLabel(scope.row.processType, dict.type.bpm_type)
  189. }}</span>
  190. </template>
  191. </el-table-column>
  192. <!-- <el-table-column
  193. label="流程部署时间"
  194. align="center"
  195. prop="processDeployTime"
  196. width="180"
  197. >
  198. <template slot-scope="scope">
  199. <span>{{
  200. parseTime(scope.row.processDeployTime, "{y}-{m}-{d}")
  201. }}</span>
  202. </template>
  203. </el-table-column> -->
  204. <el-table-column
  205. :label="$t('bpmprocess.startEventType')"
  206. align="center"
  207. prop="startEventType"
  208. >
  209. <template slot-scope="scope">
  210. <span>{{
  211. getDictLabel(
  212. scope.row.startEventType,
  213. dict.type.bpm_start_event_type
  214. )
  215. }}</span>
  216. </template>
  217. </el-table-column>
  218. <el-table-column :label="$t('bpmprocess.versionNote')" align="center" prop="note" />
  219. <el-table-column :label="$t('bpmprocess.versionStatus')" align="center" prop="processVersion">
  220. <template slot-scope="scope">
  221. <span
  222. style="color: #337ab7; cursor: pointer"
  223. @click="versionStatusHandle(scope.row)"
  224. >{{
  225. getDictLabel(scope.row.processVersion, dict.type.bpm_version)
  226. }}</span
  227. >
  228. </template>
  229. </el-table-column>
  230. <!-- <el-table-column label="节点json串" align="center" prop="processJson" /> -->
  231. <!-- <el-table-column
  232. label="xml文件存放地址"
  233. align="center"
  234. prop="processXmlPath"
  235. /> -->
  236. <el-table-column :label="$t('normal.remark')" align="center" prop="remark" />
  237. <el-table-column
  238. :label="$t('normal.operation')"
  239. align="center"
  240. class-name="small-padding fixed-width"
  241. >
  242. <template slot-scope="scope">
  243. <el-dropdown>
  244. <el-button type="warning" plain size="small">
  245. {{ $t('normal.process') }}<i class="el-icon-arrow-down el-icon--right"></i>
  246. </el-button>
  247. <el-dropdown-menu slot="dropdown">
  248. <el-dropdown-item>
  249. <el-button
  250. size="mini"
  251. type="text"
  252. icon="el-icon-edit"
  253. @click="backupProcess(scope.row)"
  254. v-hasPermi="['system:user:edit']"
  255. >{{ $t('bpmprocess.backupFlowChart') }}
  256. </el-button>
  257. </el-dropdown-item>
  258. <el-dropdown-item>
  259. <el-button
  260. size="mini"
  261. type="text"
  262. icon="el-icon-edit"
  263. @click="handleEditbpmn(scope.row)"
  264. v-hasPermi="['system:user:edit']"
  265. >{{ $t('bpmprocess.designFlowChart') }}
  266. </el-button>
  267. </el-dropdown-item>
  268. <el-dropdown-item>
  269. <el-button
  270. size="mini"
  271. type="text"
  272. icon="el-icon-delete"
  273. @click="handleDelete(scope.row)"
  274. v-hasPermi="['system:user:remove']"
  275. >{{ $t('normal.delete') }}
  276. </el-button>
  277. </el-dropdown-item>
  278. </el-dropdown-menu>
  279. </el-dropdown>
  280. </template>
  281. </el-table-column>
  282. </el-table>
  283. <pagination
  284. v-show="total > 0"
  285. :total="total"
  286. :page.sync="queryParams.pageNum"
  287. :limit.sync="queryParams.pageSize"
  288. @pagination="getList"
  289. />
  290. <!-- 预览流程图对话框 -->
  291. <el-dialog
  292. :title="previewData.processName"
  293. :visible.sync="preOpen"
  294. width="100%"
  295. height="100%"
  296. append-to-body
  297. >
  298. <Preview ref="previewRef" @preCloseHandler="preCloseHandler"></Preview>
  299. </el-dialog>
  300. <!-- 版本状态对话框 -->
  301. <el-dialog :title="$t('bpmprocess.versionStatusDialog')" width="800px" :visible.sync="isVersionsStatus">
  302. <el-table :data="versionForm" style="width: 100%">
  303. <el-table-column prop="processId" :label="$t('bpmprocess.primaryKey')" align="center">
  304. </el-table-column>
  305. <el-table-column prop="processName" :label="$t('bpmprocess.processName')" align="center">
  306. </el-table-column>
  307. <el-table-column prop="processKey" :label="$t('bpmprocess.processKey')" align="center">
  308. </el-table-column>
  309. <el-table-column prop="processType" :label="$t('bpmprocess.processType')" align="center">
  310. </el-table-column>
  311. <el-table-column
  312. prop="startEventType"
  313. :label="$t('bpmprocess.startEventType')"
  314. align="center"
  315. width="100px"
  316. >
  317. </el-table-column>
  318. <el-table-column prop="note" :label="$t('bpmprocess.versionNote')" align="center">
  319. </el-table-column>
  320. <el-table-column prop="remark" :label="$t('normal.remark')" align="center">
  321. </el-table-column>
  322. <el-table-column
  323. :label="$t('normal.operation')"
  324. align="center"
  325. class-name="small-padding fixed-width"
  326. >
  327. <template slot-scope="scope">
  328. <el-dropdown>
  329. <el-button type="warning" plain size="small">
  330. {{ $t('normal.process') }}<i class="el-icon-arrow-down el-icon--right"></i>
  331. </el-button>
  332. <el-dropdown-menu slot="dropdown">
  333. <el-dropdown-item>
  334. <el-button
  335. size="mini"
  336. type="text"
  337. icon="el-icon-edit"
  338. v-hasPermi="['system:user:edit']"
  339. @click="statusStartHandle(scope.row)"
  340. >{{ $t('bpmprocess.enable') }}
  341. </el-button>
  342. </el-dropdown-item>
  343. </el-dropdown-menu>
  344. </el-dropdown>
  345. </template>
  346. </el-table-column>
  347. </el-table>
  348. <pagination
  349. :total="statustotal"
  350. :page.sync="statusParams.pageNum"
  351. :limit.sync="statusParams.pageSize"
  352. @pagination="pagelist(versionForm)"
  353. />
  354. </el-dialog>
  355. </div>
  356. </template>
  357. <script>
  358. import {
  359. listProcess,
  360. getProcess,
  361. delProcess,
  362. addProcess,
  363. updateProcess,
  364. bpmBackups,
  365. exportFileProcess,
  366. enableProcess,
  367. } from "@/api/bpmprocess/process";
  368. import Preview from "./components/preview.vue";
  369. import ExcelDownLoad from "@/components/ExcelDownLoad/index.vue";
  370. export default {
  371. name: "Process",
  372. dicts: ["bpm_state", "bpm_type", "bpm_start_event_type", "bpm_version"],
  373. components: { Preview, ExcelDownLoad },
  374. data() {
  375. return {
  376. // 前端导出数据
  377. headerList: {
  378. 流程名称: "processName",
  379. 流程别名: "processKey",
  380. 流程开启状态: "processOpenState",
  381. 流程类型: "processType",
  382. 流程部署时间: "processDeployTime",
  383. 启动事件类型: "startEventType",
  384. 版本注释: "note",
  385. 版本状态: "processVersion",
  386. xml流文件: "processXml",
  387. 节点ison串: "processJson",
  388. xml标签内容: "processXmlContent",
  389. xml文件存放地址: "processXmlPath",
  390. },
  391. // fieldList: [],
  392. excelTitle: "process",
  393. // 预览的数据
  394. previewData: {},
  395. // 预览弹窗
  396. preOpen: false,
  397. // 遮罩层
  398. loading: true,
  399. // 选中数组
  400. ids: [],
  401. // 选中数组(包含所有数据)
  402. selection: [],
  403. // 非单个禁用
  404. single: true,
  405. // 非多个禁用
  406. multiple: true,
  407. // 显示搜索条件
  408. showSearch: true,
  409. // 总条数
  410. total: 0,
  411. // 流程定义表格数据
  412. processList: [],
  413. // 弹出层标题
  414. title: "",
  415. // 是否显示弹出层
  416. open: false,
  417. // 是否显示版本控制弹出层
  418. isVersionsStatus: false,
  419. versionForm: [],
  420. // 查询参数
  421. queryParams: {
  422. pageNum: 1,
  423. pageSize: 10,
  424. processName: null,
  425. processKey: null,
  426. processOpneState: null,
  427. processType: null,
  428. processDeployTime: null,
  429. startEventType: null,
  430. note: null,
  431. processXml: null,
  432. processJson: null,
  433. processXmlContent: null,
  434. processXmlPath: null,
  435. processVersion: 0,
  436. },
  437. // 表单参数
  438. form: {},
  439. // 表单校验
  440. rules: {},
  441. // 版本状态参数
  442. statusParams: {
  443. pageNum: 1,
  444. pageSize: 10,
  445. processKey: null,
  446. processVersion: 1,
  447. },
  448. statustotal: 0,
  449. processKey: null,
  450. };
  451. },
  452. created() {
  453. this.getList();
  454. },
  455. activated() {
  456. this.getList();
  457. },
  458. methods: {
  459. /** 查询流程定义列表 */
  460. getList() {
  461. this.loading = true;
  462. let tempSelection = JSON.parse(JSON.stringify(this.selection));
  463. listProcess(this.queryParams).then((response) => {
  464. this.processList = response.rows;
  465. this.total = response.total;
  466. this.loading = false;
  467. });
  468. },
  469. // 取消按钮
  470. cancel() {
  471. this.open = false;
  472. this.reset();
  473. },
  474. // 表单重置
  475. reset() {
  476. this.form = {
  477. processId: null,
  478. processName: null,
  479. processKey: null,
  480. processOpneState: null,
  481. processType: null,
  482. processDeployTime: null,
  483. startEventType: null,
  484. note: null,
  485. processVersion: null,
  486. processXml: null,
  487. processJson: null,
  488. processXmlContent: null,
  489. processXmlPath: null,
  490. createBy: null,
  491. createTime: null,
  492. updateBy: null,
  493. updateTime: null,
  494. delFlag: null,
  495. remark: null,
  496. };
  497. this.resetForm("form");
  498. },
  499. /** 搜索按钮操作 */
  500. handleQuery() {
  501. this.queryParams.pageNum = 1;
  502. this.getList();
  503. },
  504. /** 重置按钮操作 */
  505. resetQuery() {
  506. let endFormData = {
  507. // 节点脚本关联表
  508. BpmNodeExceptionList: [
  509. {
  510. id: null,
  511. nodeKey: null, // 节点别名
  512. scriptKey: null, // 脚本别名
  513. scriptTriggerType: null, // 脚本触发机制(0:手动 1:自动)
  514. },
  515. ],
  516. // 节点操作人 -》 数据传输分两种情况:1.当前节点勾选了指定用户,就需要前端生成一个虚拟的角色编码、以及指定的用户id、真实的角色编码null即可
  517. // 2.当前节点根据角色勾选的执行人,就需要存贮真实的角色权限字符 生成一个虚拟的角色编码,其他为null即可
  518. // 节点处理人表
  519. BpmNodeHandleUser: [
  520. {
  521. id: null,
  522. virtuallyRole: null, // 前端生成的虚拟角色编码
  523. realRole: null, // 真实的角色编码 [1,2,3]/[1]
  524. executeUserNo: null, // 用户编码 [1,2,3]/[1]
  525. },
  526. ],
  527. // 所有节点表
  528. BpmProcessConfigurationList: [
  529. {
  530. id: null,
  531. nodeKey: null, // 节点别名
  532. nodeName: null, // 节点名称
  533. nodeFormKey: null, // 节点表单别名
  534. nodeProcessKey: null, // 流程别名
  535. nodeType: null, // 节点类型(判断节点、正常节点。。。)根据字典维护
  536. nodeBefor: null, // 节点前
  537. nodeAfter: null, // 节点后
  538. nodeRolePermission: null, // 节点对应的角色权限字符(只存虚拟角色编码)
  539. spare1: null, // 备用列
  540. spare2: null,
  541. spare3: null,
  542. createBy: null, // 创建者
  543. updateBy: null, // 修改者
  544. remark: null, // 节点描述
  545. },
  546. ],
  547. };
  548. this.resetForm("queryForm");
  549. this.handleQuery();
  550. },
  551. // 多选框选中数据
  552. handleSelectionChange(selection) {
  553. this.ids = selection.map((item) => item.processId);
  554. this.selection = selection;
  555. this.single = selection.length !== 1;
  556. this.multiple = !selection.length;
  557. },
  558. /** 新增按钮操作 */
  559. handleAdd() {
  560. this.$router.push({
  561. path: "/processModeling/bpmnPro",
  562. });
  563. // this.reset();
  564. // this.open = true;
  565. // this.title = "添加流程定义";
  566. },
  567. /** 修改按钮操作 */
  568. handleUpdate(row) {
  569. this.reset();
  570. const processId = row.processId || this.ids;
  571. getProcess(processId).then((response) => {
  572. this.form = response.data;
  573. this.open = true;
  574. this.title = "修改流程定义";
  575. });
  576. },
  577. /** */
  578. handleEditbpmn(row) {
  579. this.$router.push({
  580. path: "/processModeling/bpmnPro",
  581. query: {
  582. id: row.processId,
  583. },
  584. });
  585. },
  586. // 备份流程图
  587. backupProcess(row) {
  588. this.$prompt("请输入备份描述:", "提示", {
  589. confirmButtonText: "确定",
  590. cancelButtonText: "取消",
  591. beforeClose: async (action, instance, done) => {
  592. if (action === "confirm") {
  593. if (instance.inputValue?.trim().length) {
  594. instance.confirmButtonLoading = true;
  595. instance.confirmButtonText = "保存中...";
  596. try {
  597. let data = {
  598. processId: row.processId,
  599. remark: instance.inputValue.trim(),
  600. };
  601. let res = await bpmBackups(data);
  602. if (res.code == 200) {
  603. this.$message.success("备份成功");
  604. instance.confirmButtonLoading = false;
  605. instance.confirmButtonText = "确定";
  606. this.getList();
  607. done();
  608. } else {
  609. this.$message.error("备份失败");
  610. }
  611. instance.confirmButtonLoading = false;
  612. instance.confirmButtonText = "确定";
  613. } catch (error) {
  614. instance.confirmButtonLoading = false;
  615. instance.confirmButtonText = "确定";
  616. console.log(error);
  617. }
  618. } else {
  619. this.$message({
  620. type: "error",
  621. message: "备份描述不能为空",
  622. });
  623. }
  624. } else {
  625. this.getList();
  626. done();
  627. }
  628. },
  629. })
  630. .then(({ value }) => {})
  631. .catch(() => {
  632. this.$message({
  633. type: "info",
  634. message: "取消备份",
  635. });
  636. });
  637. },
  638. /** 提交按钮 */
  639. submitForm() {
  640. this.$refs["form"].validate((valid) => {
  641. if (valid) {
  642. if (this.form.processId != null) {
  643. updateProcess(this.form).then((response) => {
  644. this.$modal.msgSuccess("修改成功");
  645. this.open = false;
  646. this.getList();
  647. });
  648. } else {
  649. addProcess(this.form).then((response) => {
  650. this.$modal.msgSuccess("新增成功");
  651. this.open = false;
  652. this.getList();
  653. });
  654. }
  655. }
  656. });
  657. },
  658. /** 删除按钮操作 */
  659. handleDelete(row) {
  660. const processIds = row.processId || this.ids;
  661. this.$modal
  662. .confirm(this.$t('normal.isConfirmDelete') + processIds + '"的数据项?')
  663. .then(function () {
  664. return delProcess(processIds);
  665. })
  666. .then(() => {
  667. this.getList();
  668. this.$modal.msgSuccess(this.$t('normal.deleteSuccess'));
  669. })
  670. .catch(() => {});
  671. },
  672. /** 导出按钮操作 */
  673. handleExport() {
  674. this.download(
  675. process.env.VUE_APP_BASE_API4 + "system/process/export",
  676. {
  677. ...this.queryParams,
  678. },
  679. `process_${new Date().getTime()}.xlsx`
  680. );
  681. },
  682. handleFileExport() {
  683. if (this.ids.length != 0) {
  684. exportFileProcess(this.ids).then((res) => {
  685. const content = res;
  686. const blob = new Blob([content], { type: "application/zip" });
  687. const fileName = this.$t('bpmprocess.exportProcessFile');
  688. if ("download" in document.createElement("a")) {
  689. // 非IE下载
  690. const elink = document.createElement("a");
  691. elink.download = fileName;
  692. elink.style.display = "none";
  693. elink.href = URL.createObjectURL(blob);
  694. document.body.appendChild(elink);
  695. elink.click();
  696. URL.revokeObjectURL(elink.href); // 释放URL 对象
  697. document.body.removeChild(elink);
  698. this.loading = false;
  699. } else {
  700. // IE10+下载
  701. navigator.msSaveBlob(blob, fileName);
  702. this.loading = false;
  703. }
  704. });
  705. } else {
  706. this.$message.warning(this.$t('normal.pleaseSelectData'));
  707. }
  708. },
  709. // 获取字典对应label
  710. getDictLabel(value, dictLsit = []) {
  711. return dictLsit.find((item) => {
  712. return item.value == value;
  713. })?.label;
  714. },
  715. // 版本状态
  716. versionStatusHandle(row) {
  717. this.statusParams.processKey = this.processKey
  718. ? this.processKey
  719. : row.processKey;
  720. listProcess(this.statusParams).then((res) => {
  721. this.statustotal = res.total;
  722. res.rows.forEach((item) => {
  723. // 启动事件类型
  724. item.startEventType = this.getDictLabel(
  725. item.startEventType,
  726. this.dict.type.bpm_start_event_type
  727. );
  728. // 流程类型
  729. item.processType = this.getDictLabel(
  730. item.processType,
  731. this.dict.type.bpm_type
  732. );
  733. });
  734. this.versionForm = res.rows;
  735. });
  736. this.isVersionsStatus = true;
  737. },
  738. // 版本状态分页器
  739. pagelist(row) {
  740. this.processKey = row[0].processKey;
  741. this.versionStatusHandle(this.processKey);
  742. },
  743. // 版本状态启用
  744. statusStartHandle(row) {
  745. enableProcess({
  746. processId: row.processId,
  747. processKey: row.processKey,
  748. }).then((res) => {
  749. if (res.code == 200) {
  750. this.getList();
  751. this.$message.success(this.$t('bpmprocess.enableSuccess'));
  752. this.isVersionsStatus = false;
  753. }
  754. });
  755. },
  756. // 预览流程图
  757. prviewHandle(row) {
  758. this.previewData = row;
  759. this.preOpen = true;
  760. this.$nextTick(() => {
  761. this.$refs.previewRef.getImg(row.processXmlContent);
  762. });
  763. },
  764. // 关闭预览回调
  765. preCloseHandler() {
  766. this.$refs.previewRef.destroyPreventMenu();
  767. this.preOpen = false;
  768. },
  769. },
  770. };
  771. </script>
  772. <style lang="scss" scoped>
  773. .process_name {
  774. color: #337ab7;
  775. cursor: pointer;
  776. }
  777. ::v-deep .el-form-item__label {
  778. width: 98px !important;
  779. }
  780. ::v-deep .el-dialog {
  781. margin-top: 0px !important;
  782. }
  783. </style>