CopyTaskWorkflow.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569
  1. <template>
  2. <div>
  3. <div class="container-fluid">
  4. <div class="row m-row">
  5. <div class="col-md-12 col-sm-12 col-xs-12">
  6. <input
  7. v-model="taskQueryParam.condition"
  8. autocomplete="off"
  9. type="text"
  10. :placeholder="$t('lang.CopyTaskWorkflow.describe1')"
  11. class="form-control"
  12. />
  13. </div>
  14. </div>
  15. <div
  16. v-if="taskQueryParam.advancedQuery"
  17. class="row m-row"
  18. >
  19. <div class="col-md-2 col-sm-2 col-xs-4">
  20. <label class="form-control-static">{{ $t("lang.CopyTaskWorkflow.startTime") }}</label>
  21. </div>
  22. <div class="col-md-5 col-sm-5 col-xs-4">
  23. <DateTime v-model="startAfter" />
  24. </div>
  25. <div class="col-md-5 col-sm-5 col-xs-4">
  26. <DateTime v-model="startBefore" />
  27. </div>
  28. </div>
  29. <div
  30. v-if="taskQueryParam.advancedQuery"
  31. class="row m-row"
  32. >
  33. <div class="col-md-2 col-sm-2 col-xs-4">
  34. <label class="form-control-static">{{ $t("lang.CopyTaskWorkflow.completionTime") }}</label>
  35. </div>
  36. <div class="col-md-5 col-sm-5 col-xs-4">
  37. <DateTime v-model="finishAfter" />
  38. </div>
  39. <div class="col-md-5 col-sm-5 col-xs-4">
  40. <DateTime v-model="finishBefore" />
  41. </div>
  42. </div>
  43. <div
  44. v-if="taskQueryParam.advancedQuery"
  45. class="row m-row"
  46. >
  47. <div class="col-md-2 col-sm-2 col-xs-4">
  48. <label class="form-control-static">{{ $t("lang.CopyTaskWorkflow.approvalOriginator") }}</label>
  49. </div>
  50. <div class="col-md-10 col-sm-10 col-xs-8">
  51. <input
  52. id="applyUser"
  53. v-model="userName"
  54. autocomplete="off"
  55. type="text"
  56. class="form-control"
  57. />
  58. </div>
  59. </div>
  60. <div class="row m-row">
  61. <div class="col-md-2 col-sm-2 col-xs-4">
  62. <label class="form-control-static">{{ $t("lang.CopyTaskWorkflow.subject") }}</label>
  63. </div>
  64. <div class="col-md-10 col-sm-10 col-xs-8">
  65. <select
  66. v-model="deploymentId"
  67. class="form-control"
  68. >
  69. <option value="">{{ $t("lang.CopyTaskWorkflow.all") }}</option>
  70. <option
  71. v-for="item in approveType"
  72. :key="item.deploymentId"
  73. :value="item.deploymentId"
  74. >
  75. {{ item.name }}
  76. </option>
  77. </select>
  78. </div>
  79. </div>
  80. <div class="row m-row">
  81. <div class="col-md-12 col-sm-12 col-xs-10">
  82. <button
  83. role="button"
  84. target="_self"
  85. class="btn btn-primary"
  86. @click="searchCopyTask()"
  87. >
  88. {{ $t("lang.CopyTaskWorkflow.search") }}
  89. </button>
  90. <a
  91. class="form-label"
  92. @click="taskQueryParam.advancedQuery = !taskQueryParam.advancedQuery"
  93. >
  94. {{ (taskQueryParam.advancedQuery) ? $t("lang.CopyTaskWorkflow.closeAdvancedSearch") : $t("lang.CopyTaskWorkflow.advancedSearch") }}
  95. </a>
  96. <a
  97. id="clearSearchCondition"
  98. class="form-label"
  99. @click="clean()"
  100. >{{ $t("lang.CopyTaskWorkflow.clearSearchCriteria") }}</a>
  101. <span id="choiceStatus">
  102. <button
  103. class="btn"
  104. :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;ALL&quot;}"
  105. @click="choiceStatus('ALL')"
  106. >{{ $t("lang.CopyTaskWorkflow.all") }}</button>
  107. <button
  108. class="btn"
  109. :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;FINISH&quot;}"
  110. @click="choiceStatus('FINISH')"
  111. >{{ $t("lang.CopyTaskWorkflow.completed") }}</button>
  112. <button
  113. class="btn"
  114. :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;RUNNING&quot;}"
  115. @click="choiceStatus('RUNNING')"
  116. >{{ $t("lang.CopyTaskWorkflow.haveInHand") }}</button>
  117. <a-button type="link" @click="completeApproval">全部完成审阅</a-button>
  118. </span>
  119. </div>
  120. </div>
  121. <div class="row m-row">
  122. <div class="table-responsive">
  123. <table class="table table-bordered table-hover">
  124. <thead>
  125. <tr>
  126. <td>{{ $t("lang.CopyTaskWorkflow.documentCode") }}</td>
  127. <td>{{ $t("lang.CopyTaskWorkflow.subject") }}</td>
  128. <td>{{ $t("lang.CopyTaskWorkflow.approvalSummary") }}</td>
  129. <td>{{ $t("lang.CopyTaskWorkflow.originatingTime") }}</td>
  130. <td>{{ $t("lang.CopyTaskWorkflow.completionTime") }}</td>
  131. <td>{{ $t("lang.CopyTaskWorkflow.status") }}</td>
  132. </tr>
  133. </thead>
  134. <tbody>
  135. <tr
  136. v-for="item in copyTaskInfos.copyTaskInfo"
  137. :key="item.id"
  138. class="m-tr"
  139. @click="selectTaskInfo(item)"
  140. >
  141. <td>
  142. {{ item.no }}
  143. </td>
  144. <td>
  145. {{ item.title }}
  146. </td>
  147. <td>
  148. <span style="white-space: pre-line">{{ item.content }}</span>
  149. </td>
  150. <td>
  151. {{ item.startDate }}
  152. </td>
  153. <td>
  154. {{ item.endDate }}
  155. </td>
  156. <td>
  157. {{ item.documentStatus }}
  158. </td>
  159. </tr>
  160. </tbody>
  161. </table>
  162. </div>
  163. </div>
  164. <VueBootstrapPagination
  165. :pagination="pagination"
  166. :callback="changePage"
  167. />
  168. </div>
  169. <Loading v-if="loading" />
  170. </div>
  171. </template>
  172. <script>
  173. import Common from '../common/Common.js';
  174. import WindowService from '../common/WindowService.js';
  175. import TaskOpenUtil from './TaskOpenUtil.js';
  176. import { Notify, Uuid } from 'pc-component-v3';
  177. import * as dayjs from 'dayjs';
  178. export default {
  179. components: {
  180. },
  181. emits:['refreshStasticCount'],
  182. data: function () {
  183. return {
  184. defaultStartAfter: '', //默认开始日期
  185. defaultStartBefore: '',
  186. defaultFinishAfter: '', //默认结束日期
  187. defaultFinishBefore: '',
  188. startAfter: '', //开始日期
  189. startBefore: '',
  190. finishAfter: '', //结束日期
  191. finishBefore: '',
  192. taskQueryParam: { processStatusQuery: 'ALL' }, //查询条件
  193. copyTaskInfos: '',
  194. deploymentId: '',
  195. userName: '',
  196. approveType: [],
  197. pagination: {
  198. total: 0,
  199. per_page: 12, // required
  200. current_page: 1, // required
  201. last_page: 0, // required
  202. },
  203. loading: false,
  204. };
  205. },
  206. mounted: function () {
  207. this.init();
  208. },
  209. methods: {
  210. // 加载数据
  211. init: function () {
  212. var _self = this;
  213. _self.loading = true;
  214. _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
  215. _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
  216. _self.defaultFinishAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
  217. _self.defaultFinishBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
  218. _self.taskQueryParam = {
  219. condition: '', //查询条件(主题、文件编码、正文内容、审批意见).
  220. startAfter: _self.defaultStartAfter,
  221. startBefore: _self.defaultStartBefore,
  222. advancedQuery: false, //是否高级查询
  223. //"startUserId" : "", //审批单发起人
  224. deploymentId: '', //工作流部署Id
  225. processStatusQuery: 'RUNNING', //审批状态
  226. range: {
  227. //查询区间
  228. length: 100,
  229. start: 0,
  230. },
  231. };
  232. $.ajax({
  233. url: Common.getApiURL('WorkflowResource/approveType'),
  234. type: 'GET',
  235. dataType: 'json',
  236. beforeSend: function (request) {
  237. Common.addTokenToRequest(request);
  238. },
  239. success: function (data) {
  240. _self.loading = false;
  241. _self.approveType = data;
  242. _self.searchCopyTask();
  243. },
  244. error: function (XMLHttpRequest, textStatus, errorThrown) {
  245. _self.loading = false;
  246. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  247. },
  248. });
  249. },
  250. getStartUserId: function () {
  251. var _self = this;
  252. _self.loading = true;
  253. if (_self.userName != null && _self.userName != '') {
  254. var infoQueryParam = {};
  255. infoQueryParam.infoWindowNo = 11531;
  256. infoQueryParam.start = 0;
  257. infoQueryParam.length = 1;
  258. infoQueryParam.sortClause = '';
  259. infoQueryParam.infoFilterFieldValues = [];
  260. infoQueryParam.infoFilterFieldValues[0] = {};
  261. infoQueryParam.infoFilterFieldValues[0].infoFilterFieldId = 11532;
  262. infoQueryParam.infoFilterFieldValues[0].value1 = _self.userName;
  263. $.ajax({
  264. url: Common.getApiURL('InfoWindowResource/QueryInfoWindowData2'),
  265. type: 'post',
  266. dataType: 'json',
  267. beforeSend: function (request) {
  268. Common.addTokenToRequest(request);
  269. },
  270. contentType: 'application/json',
  271. data: JSON.stringify(infoQueryParam),
  272. async: false,
  273. success: function (data) {
  274. _self.loading = false;
  275. _self.taskQueryParam.startUserId = '';
  276. if (data.dataList[0].id != null) {
  277. _self.taskQueryParam.startUserId = data.dataList[0].id;
  278. }
  279. },
  280. error: function (XMLHttpRequest, textStatus, errorThrown) {
  281. _self.loading = false;
  282. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  283. },
  284. });
  285. }
  286. },
  287. searchCopyTask: function () {
  288. var _self = this;
  289. _self.loading = true;
  290. _self.taskQueryParam.range.start = 0;
  291. _self.taskQueryParam.range.length = _self.pagination.per_page;
  292. _self.pagination.current_page = 1;
  293. _self.taskQueryParam.startAfter = _self.defaultStartAfter;
  294. _self.taskQueryParam.startBefore = _self.defaultStartBefore;
  295. _self.taskQueryParam.finishAfter = _self.defaultFinishAfter;
  296. _self.taskQueryParam.finishBefore = _self.defaultFinishBefore;
  297. _self.taskQueryParam.deploymentId = _self.deploymentId;
  298. if (_self.taskQueryParam.advancedQuery) {
  299. _self.getStartUserId();
  300. _self.taskQueryParam.startAfter = _self.startAfter;
  301. _self.taskQueryParam.startBefore = _self.startBefore;
  302. _self.taskQueryParam.finishAfter = _self.finishAfter;
  303. _self.taskQueryParam.finishBefore = _self.finishBefore;
  304. }
  305. console.log(JSON.stringify(_self.taskQueryParam));
  306. $.ajax({
  307. url: Common.getApiURL('WorkflowResource/copyTask'),
  308. type: 'post',
  309. dataType: 'json',
  310. contentType: 'application/json',
  311. beforeSend: function (request) {
  312. Common.addTokenToRequest(request);
  313. },
  314. data: JSON.stringify(_self.taskQueryParam),
  315. success: function (data) {
  316. console.log(JSON.stringify(data));
  317. _self.loading = false;
  318. _self.copyTaskInfos = data;
  319. _self.copyTaskInfos.copyTaskInfo.forEach(item => {
  320. try {
  321. var content = JSON.parse(item.content);
  322. var parentForm = '';
  323. content.parentForm.forEach(item => {
  324. parentForm =
  325. parentForm + item.title + ':' + item.content + ',\n';
  326. });
  327. item.content = parentForm;
  328. // eslint-disable-next-line no-empty
  329. } catch (e) {
  330. }
  331. });
  332. _self.pagination.total = data.totalCount;
  333. _self.pagination.last_page =
  334. data.totalCount % _self.taskQueryParam.range.length == 0
  335. ? data.totalCount / _self.taskQueryParam.range.length
  336. : Math.floor(
  337. data.totalCount / _self.taskQueryParam.range.length,
  338. ) + 1;
  339. },
  340. error: function (XMLHttpRequest, textStatus, errorThrown) {
  341. _self.loading = false;
  342. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  343. },
  344. });
  345. },
  346. //是否开启高级查询
  347. isAdvancedQuery: function (flag) {
  348. let _self = this;
  349. _self.taskQueryParam.advancedQuery = flag;
  350. if (!flag) {
  351. //初始化日期
  352. _self.taskQueryParam.startAfter = _self.defaultStartAfter;
  353. _self.taskQueryParam.startBefore = _self.defaultStartBefore;
  354. }
  355. },
  356. showTaskInfo: function (id) {
  357. var _self = this;
  358. _self.taskInfoId = id;
  359. },
  360. clean: function () {
  361. //清空搜索条件
  362. var _self = this;
  363. _self.userName = '';
  364. _self.taskQueryParam.condition = '';
  365. _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
  366. _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
  367. _self.defaultFinishAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
  368. _self.defaultFinishBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
  369. _self.startAfter = '';
  370. _self.startBefore = '';
  371. _self.finishAfter = '';
  372. _self.finishBefore = '';
  373. },
  374. choiceStatus: function (status) {
  375. this.taskQueryParam.processStatusQuery = status;
  376. this.searchCopyTask();
  377. },
  378. changePage: function () {
  379. var _self = this;
  380. _self.loading = true;
  381. _self.taskQueryParam.range.start =
  382. _self.pagination.per_page *
  383. (parseInt(_self.pagination.current_page) - 1);
  384. _self.taskQueryParam.startAfter = _self.defaultStartAfter;
  385. _self.taskQueryParam.startBefore = _self.defaultStartBefore;
  386. _self.taskQueryParam.finishAfter = _self.defaultFinishAfter;
  387. _self.taskQueryParam.finishBefore = _self.defaultFinishBefore;
  388. if (_self.taskQueryParam.advancedQuery) {
  389. _self.taskQueryParam.startAfter = _self.startAfter;
  390. _self.taskQueryParam.startBefore = _self.startBefore;
  391. _self.taskQueryParam.finishAfter = _self.finishAfter;
  392. _self.taskQueryParam.finishBefore = _self.finishBefore;
  393. }
  394. console.log(JSON.stringify(_self.taskQueryParam));
  395. $.ajax({
  396. url: Common.getApiURL('WorkflowResource/copyTask'),
  397. type: 'post',
  398. dataType: 'json',
  399. contentType: 'application/json',
  400. beforeSend: function (request) {
  401. Common.addTokenToRequest(request);
  402. },
  403. data: JSON.stringify(_self.taskQueryParam),
  404. success: function (data) {
  405. _self.loading = false;
  406. //console.log(JSON.stringify(data));
  407. _self.copyTaskInfos = data;
  408. _self.copyTaskInfos.copyTaskInfo.forEach(item => {
  409. try {
  410. var content = JSON.parse(item.content);
  411. var parentForm = '';
  412. content.parentForm.forEach(item => {
  413. parentForm =
  414. parentForm + item.title + ':' + item.content + ',\n';
  415. });
  416. item.content = parentForm;
  417. // eslint-disable-next-line no-empty
  418. } catch (e) {
  419. }
  420. });
  421. _self.pagination.total = data.totalCount;
  422. _self.pagination.last_page =
  423. data.totalCount % _self.taskQueryParam.range.length == 0
  424. ? data.totalCount / _self.taskQueryParam.range.length
  425. : Math.floor(
  426. data.totalCount / _self.taskQueryParam.range.length,
  427. ) + 1;
  428. console.log('totalCount=' + _self.pagination.total);
  429. console.log('totalPage=' + _self.pagination.last_page);
  430. },
  431. error: function (XMLHttpRequest, textStatus, errorThrown) {
  432. _self.loading = false;
  433. Common.processException(
  434. XMLHttpRequest,
  435. textStatus,
  436. errorThrown,
  437. );
  438. },
  439. });
  440. },
  441. // 选择了taskInfo
  442. selectTaskInfo: function (taskInfo) {
  443. var _self = this;
  444. _self.loading = true;
  445. if (
  446. taskInfo.systemProcess == undefined ||
  447. taskInfo.systemProcess == false
  448. ) {
  449. $.ajax({
  450. url: Common.getApiURL('WorkflowResource/processTaskInfo'),
  451. type: 'get',
  452. dataType: 'json',
  453. contentType: 'application/json',
  454. beforeSend: function (request) {
  455. Common.addTokenToRequest(request);
  456. },
  457. data: {
  458. taskInfoId: taskInfo.id,
  459. },
  460. success: function (data) {
  461. _self.loading = false;
  462. },
  463. error: function (XMLHttpRequest, textStatus, errorThrown) {
  464. _self.loading = false;
  465. Common.processException(
  466. XMLHttpRequest,
  467. textStatus,
  468. errorThrown,
  469. );
  470. },
  471. });
  472. }
  473. TaskOpenUtil.openCopyTask(taskInfo).then(successData => {
  474. if (successData.type === 'newWindow') {
  475. WindowService.open(successData.url, '抄送我的', function () {
  476. _self.$emit('refreshStasticCount');
  477. _self.searchCopyTask();
  478. });
  479. } else if (successData.type === 'customerTask') {
  480. // 打开自定义的界面
  481. //_self.selectedTaskId = taskInfo.id;
  482. //_self.$refs.customerTask.show();
  483. //_self.$emit('refreshStasticCount');
  484. //_self.searchCopyTask();
  485. }
  486. }, errorData => {
  487. if (errorData != null) {
  488. Notify.error(errorData.title, errorData.message, false);
  489. }
  490. });
  491. },
  492. // 全部完成审阅
  493. completeApproval: function () {
  494. const _self = this;
  495. _self.loading = false;
  496. $.ajax({
  497. url: Common.getApiURL('WorkflowResource/completeCopyTasks'),
  498. type: 'post',
  499. dataType: 'json',
  500. contentType: 'application/json',
  501. beforeSend: function (request) {
  502. Common.addTokenToRequest(request);
  503. },
  504. success: function (data) {
  505. _self.loading = false;
  506. if(data.errorCode === 0){
  507. _self.$emit('refreshStasticCount');
  508. _self.searchCopyTask();
  509. } else {
  510. Notify.error('错误', data.errorMessage, false);
  511. }
  512. },
  513. error: function (XMLHttpRequest, textStatus, errorThrown) {
  514. _self.loading = false;
  515. Common.processException(
  516. XMLHttpRequest,
  517. textStatus,
  518. errorThrown,
  519. );
  520. },
  521. });
  522. },
  523. },
  524. };
  525. </script>
  526. <style scoped>
  527. .form-label {
  528. margin-left: 10px;
  529. cursor: pointer;
  530. }
  531. .m-tr {
  532. cursor: pointer;
  533. }
  534. </style>