NeedApproveWorkflowOld.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  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="needApproveRequest.condition"
  8. autocomplete="off"
  9. type="text"
  10. :placeholder="$t('lang.NeedApproveWorkflow.describe1')"
  11. class="form-control"
  12. />
  13. </div>
  14. </div>
  15. <div
  16. v-if="needApproveRequest.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.NeedApproveWorkflow.startTime") }}</label>
  21. </div>
  22. <div class="col-md-5 col-sm-5 col-xs-4">
  23. <DateTime
  24. v-model="needApproveRequest.processInstanceStartAfter"
  25. />
  26. </div>
  27. <div class="col-md-5 col-sm-5 col-xs-4">
  28. <DateTime
  29. v-model="needApproveRequest.processInstanceStartBefore"
  30. />
  31. </div>
  32. </div>
  33. <div
  34. v-if="needApproveRequest.advancedQuery"
  35. class="row m-row"
  36. >
  37. <div class="col-md-2 col-sm-2 col-xs-4">
  38. <label class="form-control-static">{{ $t("lang.NeedApproveWorkflow.approvalOriginator") }}</label>
  39. </div>
  40. <div class="col-md-10 col-sm-10 col-xs-8">
  41. <input
  42. id="applyUser"
  43. v-model="userName"
  44. autocomplete="off"
  45. type="text"
  46. class="form-control"
  47. />
  48. </div>
  49. </div>
  50. <div class="row m-row">
  51. <div class="col-md-2 col-sm-2 col-xs-4">
  52. <label class="form-control-static">{{ $t("lang.NeedApproveWorkflow.subject") }}</label>
  53. </div>
  54. <div class="col-md-10 col-sm-10 col-xs-8">
  55. <WorkflowType v-model="needApproveRequest.windowNo" />
  56. </div>
  57. </div>
  58. <div class="row m-row">
  59. <div class="col-md-12 col-sm-12 col-xs-10">
  60. <button
  61. role="button"
  62. target="_self"
  63. class="btn btn-primary"
  64. @click="search()"
  65. >
  66. {{ $t("lang.NeedApproveWorkflow.search") }}
  67. </button>
  68. <a
  69. class="form-label"
  70. @click="needApproveRequest.advancedQuery = !needApproveRequest.advancedQuery"
  71. >{{ (needApproveRequest.advancedQuery) ? $t("lang.NeedApproveWorkflow.closeAdvancedSearch") : $t("lang.NeedApproveWorkflow.advancedSearch") }}</a>
  72. <a
  73. id="clearSearchCondition"
  74. class="form-label"
  75. @click="clean()"
  76. >{{ $t("lang.NeedApproveWorkflow.clearSearchCriteria") }}</a>
  77. </div>
  78. </div>
  79. <div class="row m-row">
  80. <div class="table-responsive">
  81. <table class="table table-bordered table-hover ">
  82. <thead>
  83. <tr>
  84. <td>{{ $t("lang.NeedApproveWorkflow.documentCode") }}</td>
  85. <td>{{ $t("lang.NeedApproveWorkflow.subject") }}</td>
  86. <td>{{ $t("lang.NeedApproveWorkflow.approvalSummary") }}</td>
  87. <td>{{ $t("lang.NeedApproveWorkflow.originatingTime") }}</td>
  88. <td>{{ $t("lang.NeedApproveWorkflow.endTime") }}</td>
  89. <td>{{ $t("lang.NeedApproveWorkflow.operation") }}</td>
  90. </tr>
  91. </thead>
  92. <tbody>
  93. <tr
  94. v-for="item in taskInfos.taskInfo"
  95. :key="item.id"
  96. class="m-tr"
  97. >
  98. <td>
  99. {{ item.no }}
  100. </td>
  101. <td>
  102. <span v-if="item.category != 'CurdWindow'">
  103. {{ item.name }}
  104. </span>
  105. <span v-else>
  106. {{ item.title }}
  107. </span>
  108. </td>
  109. <td>
  110. <span v-if="item.category != 'CurdWindow'" style="white-space: pre-line">{{ item.description }}</span>
  111. <span v-else style="white-space: pre-line">{{ item.content }}</span>
  112. </td>
  113. <td>
  114. {{ item.startDate }}
  115. </td>
  116. <td>
  117. {{ item.dueDate }}
  118. </td>
  119. <td>
  120. <button class="btn btn-link" @click="selectTaskInfo(item)">{{ $t("lang.NeedApproveWorkflow.viewTasks") }}</button>
  121. </td>
  122. </tr>
  123. </tbody>
  124. </table>
  125. </div>
  126. </div>
  127. <VueBootstrapPagination
  128. :pagination="pagination"
  129. :callback="changePage"
  130. />
  131. </div>
  132. <Loading v-if="loading" />
  133. <CustomerTask ref="customerTask" :task-id="selectedTaskId" @closed="search" />
  134. </div>
  135. </template>
  136. <script>
  137. import Common from '../common/Common.js';
  138. import WindowService from '../common/WindowService.js';
  139. import WorkflowResource from '../api/workflow/WorkflowResource.js';
  140. import CustomerTask from './CustomerTask.vue';
  141. import { Notify, Uuid } from 'pc-component-v3';
  142. import TaskOpenUtil from './TaskOpenUtil.js';
  143. import * as dayjs from 'dayjs';
  144. import WorkflowType from './WorkflowType.vue';
  145. export default {
  146. components: {
  147. CustomerTask, WorkflowType,
  148. },
  149. data: function () {
  150. return {
  151. 'defaultStartAfter': '', //默认开始日期
  152. 'defaultStartBefore': '', //默认结束日期
  153. 'startAfter': '', //开始日期
  154. 'startBefore': '', //结束日期
  155. 'needApproveRequest': {
  156. 'condition': null,
  157. 'windowNo': null,
  158. 'startUserId': null,
  159. 'processInstanceStartAfter': null,
  160. 'processInstanceStartBefore': null,
  161. 'taskCreateTimeAfter': null,
  162. 'taskCreateTimeBefore': null,
  163. 'start': 0,
  164. 'length': 10,
  165. },
  166. 'taskInfos': [],
  167. 'userName': '',
  168. 'windowNo': '',
  169. 'approveType': [],
  170. pagination: {
  171. total: 0,
  172. per_page: 20, // required
  173. current_page: 1, // required
  174. last_page: 0, // required
  175. },
  176. selectedTaskId: null,
  177. loading: false,
  178. };
  179. },
  180. mounted: function () {
  181. this.init();
  182. },
  183. methods: {
  184. // 加载数据
  185. init: function () {
  186. var _self = this;
  187. _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
  188. _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
  189. _self.needApproveRequest = {
  190. 'condition': '', //查询条件(主题、文件编码、正文内容、审批意见).
  191. 'startAfter': _self.defaultStartAfter,
  192. 'startBefore': _self.defaultStartBefore,
  193. 'advancedQuery': false, //是否高级查询
  194. //"startUserId" : "", //审批单发起人
  195. 'windowNo': '', //工作流部署Id
  196. 'processStatusQuery': 'RUNNING', //审批状态
  197. 'range': { //查询区间
  198. 'length': 100,
  199. 'start': 0,
  200. },
  201. };
  202. console.log(JSON.stringify(_self.needApproveRequest));
  203. },
  204. //搜索
  205. search: function () {
  206. var _self = this;
  207. _self.loading=true;
  208. _self.pagination.current_page = 1;
  209. _self.needApproveRequest.range.start = 0;
  210. _self.needApproveRequest.range.length = _self.pagination.per_page;
  211. if (_self.needApproveRequest.advancedQuery) {
  212. _self.getStartUserId();
  213. _self.needApproveRequest.startAfter = _self.startAfter;
  214. _self.needApproveRequest.startBefore = _self.startBefore;
  215. }
  216. _self.needApproveRequest.windowNo = _self.windowNo;
  217. $.ajax({
  218. url: Common.getApiURL('WorkflowResource/needApprove'),
  219. type: 'post',
  220. dataType: 'json',
  221. beforeSend: function (request) {
  222. Common.addTokenToRequest(request);
  223. },
  224. contentType: 'application/json',
  225. data: JSON.stringify(_self.needApproveRequest),
  226. success: function (data) {
  227. _self.loading=false;
  228. _self.taskInfos = data;
  229. _self.taskInfos.taskInfo.forEach(item => {
  230. try{
  231. var content = JSON.parse(item.content);
  232. var parentForm = '';
  233. if(content != null && content.parentForm != null){
  234. content.parentForm.forEach(item => {
  235. parentForm = parentForm + item.title + ':' + item.content + ',\n';
  236. });
  237. item.content = parentForm;
  238. }else{
  239. item.content = null;
  240. }
  241. // eslint-disable-next-line no-empty
  242. }catch(e){
  243. }
  244. });
  245. _self.pagination.total = data.totalCount;
  246. _self.pagination.last_page = Math.ceil(data.totalCount / _self.needApproveRequest.range.length);
  247. },
  248. error: function (XMLHttpRequest, textStatus, errorThrown) {
  249. _self.loading=false;
  250. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  251. },
  252. });
  253. },
  254. getStartUserId: function () {
  255. var _self = this;
  256. if (_self.userName != null && _self.userName != '') {
  257. _self.loading=true;
  258. var infoQueryParam = {};
  259. infoQueryParam.infoWindowNo = 11531;
  260. infoQueryParam.start = 0;
  261. infoQueryParam.length = 1;
  262. infoQueryParam.sortClause = '';
  263. infoQueryParam.infoFilterFieldValues = [];
  264. infoQueryParam.infoFilterFieldValues[0] = {};
  265. infoQueryParam.infoFilterFieldValues[0].infoFilterFieldId = 11532;
  266. infoQueryParam.infoFilterFieldValues[0].value1 = _self.userName;
  267. $.ajax({
  268. url: Common.getApiURL('InfoWindowResource/QueryInfoWindowData2'),
  269. type: 'post',
  270. dataType: 'json',
  271. beforeSend: function (request) {
  272. Common.addTokenToRequest(request);
  273. },
  274. contentType: 'application/json',
  275. data: JSON.stringify(infoQueryParam),
  276. async: false,
  277. success: function (data) {
  278. _self.loading=false;
  279. _self.needApproveRequest.startUserId = '';
  280. if (data.dataList[0].id != null) {
  281. _self.needApproveRequest.startUserId = data.dataList[0].id;
  282. }
  283. },
  284. error: function (XMLHttpRequest, textStatus, errorThrown) {
  285. _self.loading=false;
  286. _self.$refs.common.processException(XMLHttpRequest, textStatus, errorThrown);
  287. },
  288. });
  289. }
  290. },
  291. //是否开启高级查询
  292. isAdvancedQuery: function (flag) {
  293. let _self = this;
  294. _self.needApproveRequest.advancedQuery = flag;
  295. if (!flag) {
  296. //初始化日期
  297. _self.needApproveRequest.startAfter = _self.defaultStartAfter;
  298. _self.needApproveRequest.startBefore = _self.defaultStartBefore;
  299. }
  300. },
  301. clean: function () { //清空搜索条件
  302. var _self = this;
  303. _self.userName = '';
  304. _self.needApproveRequest.condition = '';
  305. _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
  306. _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
  307. _self.startAfter = '';
  308. _self.startBefore = '';
  309. },
  310. changePage: function () {
  311. var _self = this;
  312. _self.loading=true;
  313. _self.needApproveRequest.range.start = (_self.pagination.current_page - 1) * _self.pagination.per_page;
  314. _self.needApproveRequest.range.length = _self.pagination.per_page;
  315. _self.needApproveRequest.startAfter = _self.defaultStartAfter;
  316. _self.needApproveRequest.startBefore = _self.defaultStartBefore;
  317. _self.needApproveRequest.finishAfter = _self.defaultFinishAfter;
  318. _self.needApproveRequest.finishBefore = _self.defaultFinishBefore;
  319. if (_self.needApproveRequest.advancedQuery) {
  320. _self.needApproveRequest.startAfter = _self.startAfter;
  321. _self.needApproveRequest.startBefore = _self.startBefore;
  322. _self.needApproveRequest.finishAfter = _self.finishAfter;
  323. _self.needApproveRequest.finishBefore = _self.finishBefore;
  324. }
  325. console.log(JSON.stringify(_self.needApproveRequest));
  326. $.ajax({
  327. url: Common.getApiURL('WorkflowResource/needApprove'),
  328. type: 'post',
  329. dataType: 'json',
  330. contentType: 'application/json',
  331. beforeSend: function (request) {
  332. Common.addTokenToRequest(request);
  333. },
  334. data: JSON.stringify(_self.needApproveRequest),
  335. success: function (data) {
  336. _self.loading=false;
  337. _self.taskInfos = data;
  338. _self.taskInfos.taskInfo.forEach(item => {
  339. try{
  340. var content = JSON.parse(item.content);
  341. var parentForm = '';
  342. content.parentForm.forEach(item => {
  343. parentForm = parentForm + item.title + ':' + item.content + ',\n';
  344. });
  345. item.content = parentForm;
  346. // eslint-disable-next-line no-empty
  347. }catch(e){
  348. }
  349. });
  350. _self.pagination.total = data.totalCount;
  351. _self.pagination.last_page = Math.ceil(data.totalCount / _self.needApproveRequest.range.length);
  352. console.log('totalCount=' + _self.pagination.total);
  353. console.log('totalPage=' + _self.pagination.last_page);
  354. },
  355. error: function (XMLHttpRequest, textStatus, errorThrown) {
  356. _self.loading=false;
  357. _self.$refs.common.processException(XMLHttpRequest, textStatus, errorThrown);
  358. },
  359. });
  360. },
  361. // 选择了taskInfo
  362. selectTaskInfo: function (taskInfo) {
  363. let _self = this;
  364. TaskOpenUtil.openTask(taskInfo).then(successData => {
  365. if(successData.type === 'newWindow'){
  366. WindowService.open(successData.url, '待处理', function(){
  367. _self.$emit('refreshStasticCount');
  368. _self.search();
  369. });
  370. }else if(successData.type === 'customerTask'){
  371. // 打开自定义的界面
  372. _self.selectedTaskId = taskInfo.id;
  373. _self.$refs.customerTask.show();
  374. _self.$emit('refreshStasticCount');
  375. _self.search();
  376. }
  377. }, errorData => {
  378. if(errorData != null){
  379. Notify.error(errorData.title, errorData.message, false);
  380. }
  381. });
  382. },
  383. },
  384. };
  385. </script>
  386. <style scoped>
  387. .form-label {
  388. margin-left: 10px;
  389. cursor: pointer;
  390. }
  391. .m-tr {
  392. cursor: pointer;
  393. }
  394. </style>