WorkflowEdit.vue 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075
  1. <template>
  2. <div class="container-fluid">
  3. <Navbar
  4. :title="$t('lang.WorkflowEdit.workflowManagement')"
  5. :is-go-back="false"
  6. />
  7. <div class="form-inline" style="margin-top: 10px">
  8. <div class="form-group">
  9. <label for="condition">{{ $t("lang.WorkflowEdit.queryCondition") }}:</label>
  10. <input
  11. id="condition"
  12. v-model="condition"
  13. autocomplete="off"
  14. class="form-control"
  15. type="text"
  16. @change="query"
  17. />
  18. </div>
  19. <a-button class="btn btn-default" @click="requeryWorkflows">
  20. {{ $t("lang.WorkflowEdit.query") }}
  21. </a-button>
  22. <a-button class="btn btn-default" @click="addition">
  23. {{ $t("lang.WorkflowEdit.newlyBuild") }}
  24. </a-button>
  25. <a-button class="btn btn-default" @click="exportJsonFile">
  26. {{ $t("lang.WorkflowEdit.export") }}
  27. </a-button>
  28. <a-button class="btn btn-default" @click="importJsonFile">
  29. {{ $t("lang.WorkflowEdit.import") }}
  30. </a-button>
  31. </div>
  32. <div class="table-responsive" style="margin-top: 10px">
  33. <template v-if="hasSelected">
  34. {{ `Selected ${selectedRowKeys.length} items` }}
  35. </template>
  36. <CommonTable
  37. ref="table"
  38. :columns="columns"
  39. :data-source="workflowDatas"
  40. :total="pagination.total"
  41. :row-selection="rowSelection"
  42. @get-page="getPageParams"
  43. >
  44. <template #headerCell="{ column }">
  45. <template v-if="column.dataIndex == 'check'">
  46. <input
  47. v-model="checked"
  48. autocomplete="off"
  49. type="checkbox"
  50. :checked="checked"
  51. @change="selectAll()"
  52. />
  53. </template>
  54. </template>
  55. <template #bodyCell="{ column, record }">
  56. <template v-if="column.dataIndex === 'check'">
  57. <input
  58. autocomplete="off"
  59. type="checkbox"
  60. name="checkboxinput"
  61. :checked="record.checked"
  62. @click="record.checked = !record.checked"
  63. />
  64. </template>
  65. <template v-if="column.dataIndex === 'operation'">
  66. <a-button type="dashed" @click="selectWorkflow(record, true)">
  67. 编辑
  68. </a-button>
  69. </template>
  70. <template v-if="column.dataIndex === 'window'">
  71. <span>{{ record.windowNo }}.{{ record.windowName }}</span>
  72. </template>
  73. <template v-if="column.dataIndex === 'deploymentId'">
  74. <span>{{
  75. record.deploymentId != undefined &&
  76. record.deploymentId.length > 0
  77. ? "已部署"
  78. : "未部署"
  79. }}
  80. </span>
  81. </template>
  82. </template>
  83. </CommonTable>
  84. </div>
  85. <Loading v-if="loading" />
  86. <a-drawer
  87. v-model:visible="modal"
  88. :width="640"
  89. class="custom-class"
  90. title="工作流定义"
  91. placement="right"
  92. >
  93. <div class="form-group">
  94. <label>{{ $t("lang.WorkflowEdit.corporateName") }}</label>
  95. <v-select
  96. v-model="selectedWorkflow.client"
  97. :options="clientOptions"
  98. :label="'name'"
  99. />
  100. </div>
  101. <div class="form-group">
  102. <label>{{ $t("lang.WorkflowEdit.windowName") }}</label>
  103. <v-select
  104. v-model="selectedWorkflow.window"
  105. :options="windowOptions"
  106. :label="'value'"
  107. />
  108. </div>
  109. <div class="form-group">
  110. <label>{{ $t("lang.WorkflowEdit.workflowName") }}</label>
  111. <input
  112. v-model="selectedWorkflow.name"
  113. autocomplete="off"
  114. class="form-control"
  115. type="text"
  116. />
  117. </div>
  118. <div class="form-group">
  119. <label>{{ $t("lang.WorkflowEdit.workflowFilePath") }}</label>
  120. <v-select
  121. v-model="selectedWorkflow.bpmnFileName"
  122. :options="bpmns"
  123. :label="'value'"
  124. />
  125. </div>
  126. <div class="form-group">
  127. <label>{{ $t("lang.WorkflowEdit.workflowType") }}</label>
  128. <select v-model="selectedWorkflow.workflowType" class="form-control">
  129. <option
  130. v-for="workflowType in workflowTypes"
  131. :key="workflowType.keyStr"
  132. :value="workflowType.keyStr"
  133. >
  134. {{ workflowType.value }}
  135. </option>
  136. </select>
  137. </div>
  138. <div class="form-group">
  139. <label>{{ $t("lang.WorkflowEdit.deploymentStatus")
  140. }}{{
  141. selectedWorkflow.deploymentId != undefined &&
  142. selectedWorkflow.deploymentId.length > 0
  143. ? $t("lang.WorkflowEdit.deployed")
  144. : $t("lang.WorkflowEdit.notDeployed")
  145. }}</label>
  146. <input
  147. v-model="selectedWorkflow.deploymentId"
  148. autocomplete="off"
  149. class="form-control"
  150. type="text"
  151. />
  152. </div>
  153. <div class="form-group">
  154. <label>{{
  155. $t("lang.WorkflowEdit.deleteProcessVerificationPassword")
  156. }}</label>
  157. <input
  158. v-model="selectedWorkflow.deletePassword"
  159. autocomplete="off"
  160. onfocus="this.type='password'"
  161. class="form-control"
  162. type="text"
  163. />
  164. </div>
  165. <template #footer>
  166. <div class="footerStyle">
  167. <a-button class="btn btn-default" @click="approvalFlow">
  168. {{ $t("lang.WorkflowEdit.editor") }}
  169. </a-button>
  170. <a-button class="btn btn-default" @click="deleteWorkflow">
  171. {{ $t("lang.WorkflowEdit.delete") }}
  172. </a-button>
  173. <a-button class="btn btn-default" @click="save">
  174. {{ $t("lang.WorkflowEdit.save") }}
  175. </a-button>
  176. <a-button class="btn btn-default" @click="sync">
  177. {{ $t("lang.WorkflowEdit.synchronization") }}
  178. </a-button>
  179. <a-button class="btn btn-default" @click="deleteInstance">
  180. {{ $t("lang.WorkflowEdit.deleteInstance") }}
  181. </a-button>
  182. <a-button class="btn btn-default" @click="processInstanceCount">
  183. {{ $t("lang.WorkflowEdit.numberOfProcessInstances") }}
  184. </a-button>
  185. <a-button
  186. v-if="
  187. selectedWorkflow.workflowType == 'Timer' ||
  188. selectedWorkflow.workflowType == 'OTHER' ||
  189. selectedWorkflow.workflowType == 'NoticeOnLogin'
  190. "
  191. class="btn btn-default"
  192. @click="manualStartWorkflow"
  193. >
  194. {{ $t("lang.WorkflowEdit.manualStartProcess") }}
  195. </a-button>
  196. </div>
  197. </template>
  198. </a-drawer>
  199. <Modal v-model:show="modal1" small="true">
  200. <template #header>
  201. {{ $t("lang.WorkflowEdit.workflowDefinition") }}
  202. </template>
  203. <div>
  204. <div class="form-group">
  205. <label>{{ $t("lang.WorkflowEdit.workflowJsonFile") }}</label>
  206. <pre>{{ selectWorkflowDatas }}</pre>
  207. </div>
  208. </div>
  209. </Modal>
  210. <Modal
  211. v-model:show="modal2"
  212. :show-ok-button="false"
  213. :show-canel-button="false"
  214. small="true"
  215. >
  216. <template #header>
  217. {{ $t("lang.WorkflowEdit.workflowDefinition") }}
  218. </template>
  219. <div>
  220. <div class="form-group">
  221. <label>{{ $t("lang.WorkflowEdit.workflowJsonFile") }}</label>
  222. <textarea v-model="jsonFile" class="form-control" rows="20" />
  223. </div>
  224. </div>
  225. <template #footer>
  226. <div>
  227. <button class="btn btn-default" type="button" @click="modelClose">
  228. {{ $t("lang.WorkflowEdit.cancel") }}
  229. </button>
  230. <button
  231. class="btn btn-default"
  232. type="button"
  233. @click="saveWorkflowDto"
  234. >
  235. {{ $t("lang.WorkflowEdit.determine") }}
  236. </button>
  237. </div>
  238. </template>
  239. </Modal>
  240. </div>
  241. </template>
  242. <script>
  243. import Common from '../common/Common.js';
  244. import vSelect from 'vue-select';
  245. import WorkflowEditResource from './WorkflowEditResource.js';
  246. import 'vue-select/dist/vue-select.css';
  247. import { Notify, Uuid } from 'pc-component-v3';
  248. import CommonTable from './CommonTable.vue';
  249. export default {
  250. components: {
  251. 'v-select': vSelect,
  252. CommonTable,
  253. },
  254. data: function () {
  255. return {
  256. isSelect: true,
  257. columns: [
  258. {
  259. title: '',
  260. dataIndex: 'check',
  261. key: 'check',
  262. width: 48,
  263. },
  264. {
  265. title: '序号',
  266. dataIndex: 'index',
  267. key: 'index',
  268. width: 75,
  269. customRender: ({ text, record, index }) => `${index + 1}`,
  270. },
  271. {
  272. title: '公司名称',
  273. dataIndex: 'clientName',
  274. key: 'clientName',
  275. },
  276. {
  277. title: '工作流名称',
  278. dataIndex: 'name',
  279. key: 'name',
  280. },
  281. {
  282. title: '文件路径',
  283. dataIndex: 'bpmnFileName',
  284. key: 'bpmnFileName',
  285. },
  286. {
  287. title: '窗口',
  288. dataIndex: 'window',
  289. key: 'window',
  290. width: '250px',
  291. },
  292. {
  293. title: '工作流类型',
  294. dataIndex: 'workflowTypeName',
  295. key: 'workflowTypeName',
  296. },
  297. {
  298. title: '部署状态',
  299. dataIndex: 'deploymentId',
  300. key: 'deploymentId',
  301. },
  302. {
  303. title: '操作',
  304. dataIndex: 'operation',
  305. key: 'operation',
  306. width: '100px',
  307. fixed: 'right',
  308. },
  309. ].map(item => ({ ...item, align: 'center' })),
  310. // dataSource: [
  311. // {
  312. // key: '1',
  313. // corporateName: '测试公司',
  314. // workflowName: '资产申购单',
  315. // fileUrl: '',
  316. // window: '040601.资产申购单',
  317. // workflowType: '用户自定义',
  318. // deploymentStatus: '已部署',
  319. // },
  320. // ],
  321. clientOptions: [],
  322. workflowDatas: [],
  323. windowOptions: [],
  324. workflowTypes: [],
  325. bpmns: [],
  326. checked: false,
  327. selectedWorkflow: {
  328. id: undefined,
  329. clientId: undefined,
  330. clientName: undefined,
  331. client: undefined,
  332. windowNo: undefined,
  333. windowName: '',
  334. window: undefined,
  335. deploymentId: undefined,
  336. name: undefined,
  337. bpmnFileName: undefined,
  338. description: undefined,
  339. workflowType: undefined,
  340. deletePassword: null,
  341. },
  342. processReports: [],
  343. condition: undefined,
  344. pagination: {
  345. total: 0,
  346. per_page: Common.pageSize, // required
  347. current_page: 1, // required
  348. last_page: 0, // required
  349. },
  350. selectWorkflowDatas: undefined,
  351. jsonFile: undefined,
  352. loading: false,
  353. modal: false,
  354. modal1: false,
  355. modal2: false,
  356. };
  357. },
  358. computed: {},
  359. watch:{
  360. 'selectedWorkflow.window': {
  361. handler(newValue,oldVal) {
  362. if(newValue != oldVal && newValue){
  363. this.selectedWorkflow.name = newValue.value;
  364. }
  365. },
  366. deep: true,
  367. },
  368. },
  369. mounted: function () {
  370. this.queryBpmn();
  371. //this.queryDeploymentIds();
  372. this.initSelectedWorkflow();
  373. this.loadWorkflowTypes();
  374. this.loadClients();
  375. this.loadProcessReports();
  376. },
  377. methods: {
  378. rowSelection: function () {
  379. const onChange = (selectedRowKeys, selectedRows) => {
  380. //第一个参数控制选不选中,第二个参数是选中列表的数据的集合
  381. console.log(selectedRows);
  382. };
  383. const getCheckboxProps = record => ({
  384. disabled: record.releaseState === 'ONLINE', //控制禁用那个按钮
  385. releaseState: record.releaseState,
  386. });
  387. return onChange, getCheckboxProps;
  388. },
  389. /**
  390. * 导入json文件
  391. * @author GuoZhiBo 20210318
  392. */
  393. saveWorkflowDto: function () {
  394. var _self = this;
  395. var jsonFile = JSON.parse(_self.jsonFile);
  396. WorkflowEditResource.saveListWorkflowDto(jsonFile).then(
  397. successData => {
  398. if (successData) {
  399. Notify.success('导入成功', '导入成功', 1500);
  400. _self.refreshWorkflows();
  401. }
  402. _self.modal2 = false;
  403. _self.jsonFile = undefined;
  404. },
  405. errorData => {
  406. Common.processException(errorData);
  407. _self.modal2 = false;
  408. },
  409. );
  410. },
  411. /**
  412. * 关闭模态框
  413. * @author GuoZhiBo 20210318
  414. */
  415. modelClose: function () {
  416. var _self = this;
  417. _self.modal2 = false;
  418. },
  419. /**
  420. * 全选和反选
  421. * @author GuoZhiBo 20210318
  422. */
  423. selectAll: function () {
  424. var _self = this;
  425. if (_self.checked) {
  426. for (let i = 0; i < _self.workflowDatas.length; i++) {
  427. _self.workflowDatas[i].checked = true;
  428. }
  429. } else {
  430. for (let i = 0; i < _self.workflowDatas.length; i++) {
  431. _self.workflowDatas[i].checked = false;
  432. }
  433. }
  434. },
  435. setSelectedWorkflow: function (data) {
  436. data.client = {
  437. id: data.clientId,
  438. name: data.clientName,
  439. };
  440. data.window = {
  441. id: data.windowNo,
  442. value: data.windowName,
  443. };
  444. this.selectedWorkflow = data;
  445. },
  446. initSelectedWorkflow: function () {
  447. var _self = this;
  448. this.selectedWorkflow = {
  449. id: undefined,
  450. clientId: undefined,
  451. clientName: undefined,
  452. client: undefined,
  453. windowNo: undefined,
  454. windowName: undefined,
  455. window: undefined,
  456. deploymentId: undefined,
  457. name: undefined,
  458. bpmnFileName: undefined,
  459. description: undefined,
  460. workflowType: undefined,
  461. deletePassword: null,
  462. };
  463. },
  464. /**
  465. * 查询所有的可访问的单位
  466. */
  467. loadClients: function () {
  468. var _self = this;
  469. $.ajax({
  470. url: Common.getApiURL('ClientResource/listSubClient'),
  471. type: 'get',
  472. beforeSend: function (request) {
  473. Common.addTokenToRequest(request);
  474. },
  475. success: function (data) {
  476. _self.clientOptions.splice(0, _self.clientOptions.length);
  477. // 清空数据
  478. if (data == undefined || data.length == 0) {
  479. return;
  480. }
  481. for (var i = 0, len = data.length; i < len; i++) {
  482. _self.clientOptions.push(data[i]);
  483. }
  484. },
  485. error: function (XMLHttpRequest, textStatus, errorThrown) {
  486. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  487. },
  488. });
  489. },
  490. /**
  491. * 编辑器
  492. */
  493. approvalFlow: function () {
  494. var _self = this;
  495. var url =
  496. '/workflow.html#/?windowNo=' +
  497. _self.selectedWorkflow.window.keyStr +
  498. '&workflowId=' +
  499. _self.selectedWorkflow.id;
  500. window.open(url);
  501. },
  502. /**
  503. * [loadWindows 获取窗口]
  504. * @return {[type]} [description]
  505. */
  506. loadWindows: function () {
  507. var _self = this;
  508. _self.loading = true;
  509. $.ajax({
  510. url: Common.getApiURL('CurdWindowResource/getWindowKeyValues'),
  511. type: 'get',
  512. dataType: 'json',
  513. beforeSend: function (request) {
  514. Common.addTokenToRequest(request);
  515. },
  516. success: function (data) {
  517. _self.loading = false;
  518. _self.windowOptions.splice(0, _self.windowOptions.length);
  519. // 清空数据
  520. if (data == undefined || data.length == 0) {
  521. return;
  522. }
  523. for (var i = 0, len = data.length; i < len; i++) {
  524. _self.windowOptions.push(data[i]);
  525. }
  526. _self.refreshWorkflows();
  527. },
  528. error: function (XMLHttpRequest, textStatus, errorThrown) {
  529. _self.loading = false;
  530. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  531. },
  532. });
  533. },
  534. /**
  535. * 查询所有流程文件
  536. * @author GuoZhiBo 20200507
  537. */
  538. queryBpmn: function () {
  539. var _self = this;
  540. $.ajax({
  541. url: Common.getApiURL('WorkflowResource/queryBpmn'),
  542. type: 'get',
  543. dataType: 'json',
  544. beforeSend: function (request) {
  545. Common.addTokenToRequest(request);
  546. },
  547. success: function (data) {
  548. _self.bpmns = data;
  549. },
  550. error: function (XMLHttpRequest, textStatus, errorThrown) {
  551. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  552. },
  553. });
  554. },
  555. /**
  556. * 加载流程报表
  557. */
  558. loadProcessReports: function () {
  559. var _self = this;
  560. _self.loading = true;
  561. $.ajax({
  562. url: Common.getApiURL(
  563. 'ProcessReportResource/getProcessReportKeyValues',
  564. ),
  565. type: 'get',
  566. dataType: 'json',
  567. beforeSend: function (request) {
  568. Common.addTokenToRequest(request);
  569. },
  570. success: function (data) {
  571. _self.loading = false;
  572. _self.processReports.splice(0, _self.processReports.length);
  573. for (var i = 0, len = data.length; i < len; i++) {
  574. _self.processReports.push(data[i]);
  575. }
  576. },
  577. error: function (XMLHttpRequest, textStatus, errorThrown) {
  578. _self.loading = false;
  579. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  580. },
  581. });
  582. },
  583. /**
  584. * [获取工作流类型]
  585. * @return {[type]} [description]
  586. */
  587. loadWorkflowTypes: function () {
  588. var _self = this;
  589. _self.loading = true;
  590. $.ajax({
  591. url: Common.getApiURL('workflowEditResource/getWorkflowTypes'),
  592. type: 'get',
  593. dataType: 'json',
  594. beforeSend: function (request) {
  595. Common.addTokenToRequest(request);
  596. },
  597. success: function (data) {
  598. _self.loading = false;
  599. _self.workflowTypes.splice(0, _self.workflowTypes.length);
  600. if (data == undefined || data.length == 0) {
  601. return;
  602. }
  603. for (var i = 0, len = data.length; i < len; i++) {
  604. _self.workflowTypes.push(data[i]);
  605. }
  606. _self.loadWindows();
  607. },
  608. error: function (XMLHttpRequest, textStatus, errorThrown) {
  609. _self.loading = false;
  610. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  611. },
  612. });
  613. },
  614. /**
  615. * 重新查询工作流
  616. */
  617. requeryWorkflows: function () {
  618. this.initSelectedWorkflow();
  619. this.pagination.current_page = 1;
  620. this.pagination.last_page = 0;
  621. this.$refs.table.backFirstPage();
  622. },
  623. // 从子组件获取的分页参数
  624. getPageParams: function (start, length) {
  625. this.pagination.current_page = start;
  626. this.pagination.per_page = length;
  627. this.refreshWorkflows();
  628. },
  629. /**
  630. * [getWorkflows 获取(刷新)工作流]
  631. * @return {[type]} [description]
  632. */
  633. refreshWorkflows: function () {
  634. var _self = this;
  635. _self.loading = true;
  636. var workflowDto = {
  637. range: {
  638. start:
  639. (_self.pagination.current_page - 1) * _self.pagination.per_page,
  640. length: _self.pagination.per_page,
  641. },
  642. condition: _self.condition,
  643. };
  644. $.ajax({
  645. url: Common.getApiURL('workflowEditResource/getWorkflowDtos'),
  646. type: 'post',
  647. dataType: 'json',
  648. contentType: 'application/json',
  649. data: JSON.stringify(workflowDto),
  650. beforeSend: function (request) {
  651. Common.addTokenToRequest(request);
  652. },
  653. success: function (data) {
  654. _self.loading = false;
  655. _self.pagination.total = data.totalSize;
  656. // 清空数据
  657. _self.workflowDatas.splice(0, _self.workflowDatas.length);
  658. if (data == undefined || data.dataList.length == 0) {
  659. return;
  660. }
  661. for (var i = 0, len = data.dataList.length; i < len; i++) {
  662. data.dataList[i].selected = false;
  663. data.dataList[i].checked = false;
  664. _self.workflowDatas.push(data.dataList[i]);
  665. if (
  666. _self.selectedWorkflow != null &&
  667. _self.selectedWorkflow.id == data.dataList[i].id
  668. ) {
  669. _self.selectWorkflow(data.dataList[i], false);
  670. }
  671. }
  672. _self.pagination.last_page = Math.ceil(
  673. data.totalSize / data.range.length,
  674. );
  675. },
  676. error: function (XMLHttpRequest, textStatus, errorThrown) {
  677. _self.loading = false;
  678. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  679. },
  680. });
  681. },
  682. /**
  683. * [addition 添加事件]
  684. * @return {[type]} [description]
  685. */
  686. addition: function () {
  687. var _self = this;
  688. _self.modal = true;
  689. _self.initSelectedWorkflow();
  690. },
  691. /**
  692. * 导出选中的流程
  693. * @author GuoZhiBo 20210318
  694. */
  695. exportJsonFile: function () {
  696. var _self = this;
  697. _self.modal1 = true;
  698. _self.selectWorkflowDatas = [];
  699. for (var i = 0; i < _self.workflowDatas.length; i++) {
  700. if (_self.workflowDatas[i].checked == true) {
  701. let item = _self.workflowDatas[i];
  702. item.id = null;
  703. item.clientId = null;
  704. item.clientName = null;
  705. _self.selectWorkflowDatas.push(item);
  706. }
  707. }
  708. },
  709. /**
  710. * 导入JSON文件
  711. */
  712. importJsonFile: function () {
  713. var _self = this;
  714. _self.modal2 = true;
  715. },
  716. /**
  717. * [deleteWorkflow 删除事件]
  718. * @return {[type]} [description]
  719. */
  720. deleteWorkflow: function () {
  721. var _self = this;
  722. if (_self.selectedWorkflow == undefined) {
  723. Notify.error('提示', '请选择数据', false);
  724. return;
  725. }
  726. if (_self.selectedWorkflow.id == 0) {
  727. _self.modal = false;
  728. } else {
  729. _self.loading = true;
  730. $.ajax({
  731. url: Common.getApiURL('workflowEditResource/deleteWorkflowDto'),
  732. type: 'post',
  733. dataType: 'json',
  734. beforeSend: function (request) {
  735. Common.addTokenToRequest(request);
  736. },
  737. contentType: 'application/json',
  738. data: JSON.stringify(_self.selectedWorkflow),
  739. success: function (data) {
  740. _self.loading = false;
  741. _self.modal = false;
  742. Notify.success('删除成功', '数据删除成功', 1500);
  743. _self.refreshWorkflows();
  744. },
  745. error: function (XMLHttpRequest, textStatus, errorThrown) {
  746. _self.loading = false;
  747. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  748. },
  749. });
  750. }
  751. },
  752. /*
  753. 按条件查询
  754. */
  755. query: function () {
  756. var _self = this;
  757. _self.$refs.table.backFirstPage();
  758. },
  759. /**
  760. * [save 保存]
  761. * @return {[type]} [description]
  762. */
  763. save: function () {
  764. var _self = this;
  765. if (_self.selectedWorkflow == undefined) {
  766. Notify.error('提示', '请选择数据', false);
  767. return;
  768. }
  769. _self.windowChange(_self.selectedWorkflow.window);
  770. _self.clientChange(_self.selectedWorkflow.client);
  771. _self.bpmnChange(_self.selectedWorkflow.bpmnFileName);
  772. _self.loading = true;
  773. $.ajax({
  774. url: Common.getApiURL('workflowEditResource/saveWorkflowDto'),
  775. type: 'post',
  776. dataType: 'json',
  777. beforeSend: function (request) {
  778. Common.addTokenToRequest(request);
  779. },
  780. contentType: 'application/json',
  781. data: JSON.stringify(_self.selectedWorkflow),
  782. success: function (data) {
  783. _self.loading = false;
  784. _self.setSelectedWorkflow(data);
  785. Notify.success('保存成功', '数据保存成功', 1500);
  786. _self.refreshWorkflows();
  787. },
  788. error: function (XMLHttpRequest, textStatus, errorThrown) {
  789. _self.loading = false;
  790. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  791. },
  792. });
  793. },
  794. /**
  795. * [sync 同步工作流信息]
  796. * @return {[type]} [description]
  797. */
  798. sync: function () {
  799. var _self = this;
  800. if (_self.selectedWorkflow == undefined) {
  801. Notify.error('提示', '请选择数据', false);
  802. return;
  803. }
  804. _self.loading = true;
  805. $.ajax({
  806. url: Common.getApiURL('workflowEditResource/syncWorkflowDto'),
  807. type: 'post',
  808. dataType: 'json',
  809. beforeSend: function (request) {
  810. Common.addTokenToRequest(request);
  811. },
  812. contentType: 'application/json',
  813. data: JSON.stringify(_self.selectedWorkflow),
  814. success: function (data) {
  815. _self.loading = false;
  816. _self.setSelectedWorkflow(data);
  817. Notify.success('同步成功', '数据同步成功', 1500);
  818. _self.refreshWorkflows();
  819. },
  820. error: function (XMLHttpRequest, textStatus, errorThrown) {
  821. _self.loading = false;
  822. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  823. },
  824. });
  825. },
  826. /**
  827. * [deleteInstance 删除实例]
  828. * @return {[type]} [description]
  829. */
  830. deleteInstance: function () {
  831. var _self = this;
  832. if (_self.selectedWorkflow == undefined) {
  833. Notify.error('提示', '请选择数据', false);
  834. return;
  835. }
  836. _self.loading = true;
  837. $.ajax({
  838. url: Common.getApiURL('workflowEditResource/deleteWorkflowResource'),
  839. type: 'post',
  840. dataType: 'json',
  841. beforeSend: function (request) {
  842. Common.addTokenToRequest(request);
  843. },
  844. contentType: 'application/json',
  845. data: JSON.stringify(_self.selectedWorkflow),
  846. success: function (data) {
  847. _self.loading = false;
  848. Notify.success('删除实例成功', '数据删除成功', 1500);
  849. _self.refreshWorkflows();
  850. },
  851. error: function (XMLHttpRequest, textStatus, errorThrown) {
  852. _self.loading = false;
  853. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  854. },
  855. });
  856. },
  857. /**
  858. * [processInstanceCount 流程实例数量]
  859. * @return {[type]} [description]
  860. */
  861. processInstanceCount: function () {
  862. var _self = this;
  863. if (_self.selectedWorkflow == undefined) {
  864. Notify.error('提示', '请选择数据', false);
  865. return;
  866. }
  867. _self.loading = true;
  868. $.ajax({
  869. url: Common.getApiURL('workflowEditResource/getProcessInstanceCount'),
  870. type: 'post',
  871. dataType: 'json',
  872. beforeSend: function (request) {
  873. Common.addTokenToRequest(request);
  874. },
  875. contentType: 'application/json',
  876. data: JSON.stringify(_self.selectedWorkflow),
  877. success: function (data) {
  878. _self.loading = false;
  879. Notify.success('流程实例数量:' + data, '', 1500);
  880. },
  881. error: function (XMLHttpRequest, textStatus, errorThrown) {
  882. _self.loading = false;
  883. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  884. },
  885. });
  886. },
  887. manualStartWorkflow: function () {
  888. var _self = this;
  889. if (_self.selectedWorkflow == undefined) {
  890. Notify.error('提示', '请选择数据', false);
  891. return;
  892. }
  893. _self.loading = true;
  894. $.ajax({
  895. url: Common.getApiURL('workflowEditResource/start'),
  896. type: 'post',
  897. dataType: 'text',
  898. beforeSend: function (request) {
  899. Common.addTokenToRequest(request);
  900. },
  901. contentType: 'application/json',
  902. data: JSON.stringify(_self.selectedWorkflow),
  903. success: function (data) {
  904. _self.loading = false;
  905. Notify.success('提示', '手工启动流程成功', 1500);
  906. _self.refreshWorkflows();
  907. },
  908. error: function (XMLHttpRequest, textStatus, errorThrown) {
  909. _self.loading = false;
  910. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  911. },
  912. });
  913. },
  914. getTypeDisplayValue: function (workflow) {
  915. var _self = this;
  916. var type = workflow.workflowType;
  917. for (var i = 0, len = _self.workflowTypes.length; i < len; i++) {
  918. if (_self.workflowTypes[i].keyStr == type) {
  919. return _self.workflowTypes[i].value;
  920. }
  921. }
  922. return '';
  923. },
  924. /**
  925. * 编辑工作流
  926. * @param {Object} data
  927. */
  928. selectWorkflow: function (data, showModal) {
  929. var _self = this;
  930. if (showModal) {
  931. _self.modal = true;
  932. }
  933. if (data.clientId != undefined) {
  934. for (let i = 0, len = _self.clientOptions.length; i < len; i++) {
  935. if (_self.clientOptions[i].id == data.clientId) {
  936. data.client = _self.clientOptions[i];
  937. data.clientName = _self.clientOptions[i].name;
  938. break;
  939. }
  940. }
  941. } else {
  942. data.client = undefined;
  943. data.clientName = undefined;
  944. }
  945. if (data.windowNo != undefined) {
  946. for (let i = 0, len = _self.windowOptions.length; i < len; i++) {
  947. if (_self.windowOptions[i].keyStr == data.windowNo) {
  948. data.window = _self.windowOptions[i];
  949. data.windowName = _self.windowOptions[i].value;
  950. break;
  951. }
  952. }
  953. } else {
  954. data.window = undefined;
  955. data.windowName = undefined;
  956. }
  957. this.selectedWorkflow = data;
  958. },
  959. /**
  960. * 窗口选择发生改变
  961. */
  962. windowChange: function (val) {
  963. if (this.selectedWorkflow != undefined) {
  964. if (val != undefined) {
  965. this.selectedWorkflow.windowNo = val.keyStr;
  966. this.selectedWorkflow.windowName = val.value;
  967. this.selectedWorkflow.window = val;
  968. if (
  969. this.selectedWorkflow.name == null ||
  970. this.selectedWorkflow.name.length == 0
  971. ) {
  972. this.selectedWorkflow.name = val.value;
  973. }
  974. } else {
  975. this.selectedWorkflow.windowNo = undefined;
  976. this.selectedWorkflow.windowName = undefined;
  977. this.selectedWorkflow.window = undefined;
  978. }
  979. }
  980. },
  981. /**
  982. * 单位选择发生改变
  983. */
  984. clientChange: function (val) {
  985. if (this.selectedWorkflow != undefined) {
  986. if (val != undefined) {
  987. this.selectedWorkflow.clientId = val.id;
  988. this.selectedWorkflow.clientName = val.name;
  989. this.selectedWorkflow.client = val;
  990. } else {
  991. this.selectedWorkflow.clientId = undefined;
  992. this.selectedWorkflow.clientName = undefined;
  993. this.selectedWorkflow.client = undefined;
  994. }
  995. }
  996. },
  997. bpmnChange: function (val) {
  998. if (this.selectedWorkflow != undefined) {
  999. if (val != undefined) {
  1000. this.selectedWorkflow.bpmnFileName = val.value;
  1001. } else {
  1002. this.selectedWorkflow.bpmnFileName = undefined;
  1003. }
  1004. }
  1005. },
  1006. deploymentChange: function (val) {
  1007. if (this.selectedWorkflow != undefined) {
  1008. if (val != undefined) {
  1009. this.selectedWorkflow.deploymentId = val.deploymentId;
  1010. } else {
  1011. this.selectedWorkflow.deploymentId = undefined;
  1012. }
  1013. }
  1014. },
  1015. },
  1016. };
  1017. </script>
  1018. <style scoped>
  1019. .row {
  1020. margin: 10px 0px;
  1021. }
  1022. .form-inline > .btn {
  1023. margin-left: 8px;
  1024. }
  1025. .footerStyle {
  1026. float: right;
  1027. }
  1028. </style>