ReportApprove.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436
  1. <template>
  2. <div v-if="window != null">
  3. <h1>{{ Language.getNameTrl($i18n.locale, window) }}</h1>
  4. <p v-if="subTitle != null && subTitle != 'undefined' && subTitle != 'null'" style="white-space: pre-line"> {{ subTitle }}</p>
  5. </div>
  6. <div v-if="modelData != null">
  7. <div v-if="tab != null && tab.tabFormView != null" class="m-row clearfix">
  8. <div class="col-xs-12">
  9. <div
  10. :class="{
  11. 'form-inline': tab.tabFormView.multipleColumn,
  12. 'form-horizontal': !tab.tabFormView.multipleColumn,
  13. }"
  14. >
  15. <template
  16. v-for="fieldItem in tabFormFields" :key="
  17. 'TabFormFieldView_' +
  18. windowNo +
  19. '_' +
  20. tabIndex +
  21. '_' +
  22. fieldItem.fieldName +
  23. '_' +
  24. fieldItem.entityFieldIndex
  25. "
  26. >
  27. <TabFormFieldView
  28. ref="fieldItem1" :class-name="tab.tabDataSource.className" :field="fieldItem"
  29. :model-data="modelData" :multiple-column="tab.tabFormView.multipleColumn"
  30. :js-url="window.jsUrl"
  31. :is-chinese-english="window.isChineseEnglish"
  32. />
  33. </template>
  34. </div>
  35. </div>
  36. </div>
  37. <div
  38. v-if="
  39. tab != null &&
  40. tab.tabFormView != null &&
  41. tab.tabFormView.fieldGroups != null &&
  42. tab.tabFormView.fieldGroups.length > 0
  43. " class="m-row clearfix"
  44. >
  45. <ul id="myTabs" class="nav nav-tabs" role="tablist">
  46. <li
  47. v-for="(fieldGroup, fieldGroupIndex) in tab.tabFormView.fieldGroups" :key="fieldGroup.groupName"
  48. role="presentation" :class="{ active: selectedTabIndex == fieldGroupIndex }"
  49. @click="selectedTabIndex = fieldGroupIndex"
  50. >
  51. <a
  52. :id="'tab-' + fieldGroupIndex" role="tab" data-toggle="tab"
  53. aria-controls="home" aria-expanded="true"
  54. >
  55. {{ Language.getGroupNameTrl($i18n.locale, fieldGroup) }}
  56. </a>
  57. </li>
  58. </ul>
  59. <div id="myTabContent" class="tab-content">
  60. <div
  61. v-for="(fieldGroup, fieldGroupIndex) in tab.tabFormView.fieldGroups"
  62. v-show="selectedTabIndex == fieldGroupIndex" id="home" :key="fieldGroup.groupName" role="tabpanel"
  63. class="tab-pane fade active in" aria-labelledby="home-tab"
  64. >
  65. <div v-if="fieldGroup.show">
  66. <div
  67. :class="{
  68. 'form-inline': tab.tabFormView.multipleColumn,
  69. 'form-horizontal': !tab.tabFormView.multipleColumn,
  70. }"
  71. >
  72. <template
  73. v-for="fieldItem in fieldGroup.fields" :key="
  74. 'TabFormFieldView_' +
  75. windowNo +
  76. '_' +
  77. tabIndex +
  78. '_' +
  79. fieldItem.fieldName +
  80. '_' +
  81. fieldItem.entityFieldIndex
  82. "
  83. >
  84. {{ window.isChineseEnglish }}
  85. <TabFormFieldView
  86. ref="fieldItem2" :class-name="tab.tabDataSource.className" :field="fieldItem"
  87. :model-data="modelData" :multiple-column="tab.tabFormView.multipleColumn" :js-url="window.jsUrl"
  88. :is-chinese-english="window.isChineseEnglish"
  89. />
  90. </template>
  91. </div>
  92. </div>
  93. </div>
  94. </div>
  95. </div>
  96. <template v-if="modelData != null && tab != null">
  97. <div
  98. v-for="subTab in tab.subTabs"
  99. :id="'SubTabGridEdit-' + windowNo + '-' + tabIndex + '-' + modelData.id + '-subTab-' + subTab.tabIndex"
  100. :key="'SubTabGridEdit-' + windowNo + '-' + tabIndex + '-' + modelData.id + '-subTab-' + subTab.tabIndex"
  101. class="row clearfix"
  102. >
  103. <div class="col-md-12">
  104. <SubTabGridEdit
  105. :ref="'subTab' + subTab.tabIndex" :window-no="windowNo" :tab-index="subTab.tabIndex"
  106. :fixed-button-group-height="fixedButtonGroupHeight" :is-show-edit="false" :tab="subTab"
  107. :parent-model-data="modelData" :parent-tab="tab" :js-url="window.jsUrl" :is-chinese-english="window.isChineseEnglish"
  108. />
  109. </div>
  110. </div>
  111. </template>
  112. </div>
  113. <div v-if="processReportNo != null && recordId != null">
  114. <a-button type="primary" @click="openReport()">{{ $t("lang.ReportApprove.viewReport") }}</a-button>
  115. </div>
  116. <br />
  117. <div />
  118. <div v-if="showApply" class="row clearfix">
  119. <div v-if="window.workflow.workflowType === 'UserDefine'" class="col-md-12">
  120. <WorkflowUserDefine
  121. ref="workflowUserDefine" :work-flow="window.workflow"
  122. :process-definition-id="processDefinitionId" :model-data="modelData" @apply="apply"
  123. />
  124. </div>
  125. <div v-else class="col-md-12">
  126. <WorkflowSelectUser
  127. ref="workflow" :work-flow="window.workflow" :window-no="windowNo"
  128. :process-definition-id="processDefinitionId" :model-data="modelData" :record-id="recordId" @apply="apply"
  129. />
  130. </div>
  131. </div>
  132. <div v-if="showApproveComment" class="row clearfix">
  133. <div class="col-md-12">
  134. <ApproveComment
  135. ref="approveComment" :parent-widget="'TabFormView'" :workflow-type="window.workflow.workflowType"
  136. :work-flow="window.workflow" :window-no="windowNo" :process-definition-id="processDefinitionId"
  137. :show-choice-button="showChoiceButton" :process-instance-id="processInstanceId" :task-info-id="taskId"
  138. :record-id="modelData.id" :show-tab-dto="tab" :model-data="modelData" :workflow-class-name="tab.tabDataSource.className"
  139. />
  140. </div>
  141. </div>
  142. <!-- 历史审批记录 -->
  143. <div v-if="modelData != null" class="row clearfix">
  144. <div class="col-md-12">
  145. <HistoryApproveComment :record-id="modelData.id" :process-instance-id="processInstanceId" />
  146. </div>
  147. </div>
  148. <div
  149. v-if="showApproveComment"
  150. class="row clearfix"
  151. >
  152. <AttachmentPanel
  153. :is-show-edit="true" :class-name="tab.tabDataSource.className"
  154. :record-id="modelData.id" :tab-index="0" :window-no="windowNo"
  155. />
  156. </div>
  157. <Loading v-if="loading" />
  158. </template>
  159. <script>
  160. import WorkflowUserDefine from './WorkflowUserDefine.vue';
  161. import WorkflowSelectUser from './WorkflowSelectUser.vue';
  162. import Common from '../common/Common.js';
  163. import CurdWindowResource from '../api/dic/CurdWindowResource.js';
  164. import WindowServerUtil from '../resource/dictionary/WindowServerUtil.js';
  165. import WindowClientUtil from '../resource/dictionary/WindowClientUtil.js';
  166. import SubTabGridEdit from '../window/tabGridView/SubTabGridEdit.vue';
  167. import TabFormFieldView from '../window/tabFormView/TabFormFieldView.vue';
  168. import TabButton from '../window/tabView/TabButton.vue';
  169. import FormFieldDef from '../window/tabFormView/FormFieldDef.vue';
  170. import AttachmentPanel from '../window/attachment/AttachmentPanel.vue';
  171. import Language from '../common/Language.js';
  172. import { Notify } from 'pc-component-v3';
  173. import WorkflowResource from '../api/workflow/WorkflowResource.js';
  174. import HistoryApproveComment from './HistoryApproveComment.vue';
  175. import ApproveComment from './ApproveComment.vue';
  176. export default {
  177. components: {
  178. WorkflowUserDefine, WorkflowSelectUser, ApproveComment,TabFormFieldView,SubTabGridEdit,TabButton,FormFieldDef,AttachmentPanel,HistoryApproveComment,
  179. },
  180. data: function(){
  181. this.Language = Language;
  182. return {
  183. windowNo: null,
  184. tabIndex: null,
  185. recordId: null,
  186. taskId: null,
  187. loading: false,
  188. processDefinitionId: null,
  189. processReportNo: null,
  190. window: null,
  191. tab: null,
  192. tabFormFields: null,
  193. modelData: {},
  194. title: null, // 标题
  195. subTitle: null, // 子标题
  196. };
  197. },
  198. computed: {
  199. /**
  200. * 是否显示审批按钮
  201. */
  202. showApply: function () {
  203. // 判断是否显示审批按钮
  204. if (this.window == undefined) {
  205. return false;
  206. }
  207. if (this.window.workflow == undefined) {
  208. return false;
  209. }
  210. // 已经审批的单据,不显示审批按钮。
  211. if (
  212. this.modelData != undefined &&
  213. this.modelData.data != undefined &&
  214. this.modelData.data.processInstanceId != undefined &&
  215. this.modelData.data.processInstanceId.displayValue != undefined &&
  216. this.modelData.data.processInstanceId.displayValue[0] != undefined &&
  217. this.modelData.data.processInstanceId.displayValue[0].length > 0
  218. ) {
  219. return false;
  220. }
  221. if (this.modelData == undefined || this.modelData.data == undefined) {
  222. return false;
  223. }
  224. return true;
  225. },
  226. /**
  227. * 是否显示审批面板
  228. * 处于审批中的单据,显示审批面板
  229. */
  230. showApproveComment: function () {
  231. // 判断是否显示审批按钮
  232. if (
  233. this.window != undefined &&
  234. this.window.hasWorkflow != undefined &&
  235. this.modelData != undefined &&
  236. this.modelData.data != undefined &&
  237. this.modelData.data.processInstanceId != undefined &&
  238. this.modelData.data.processInstanceId.displayValue != undefined &&
  239. this.modelData.data.processInstanceId.displayValue[0] != undefined &&
  240. this.modelData.data.processInstanceId.displayValue[0].length > 0
  241. ) {
  242. return true;
  243. }
  244. return false;
  245. },
  246. /**
  247. * 是否显示审批评论面板
  248. * 审批完成的单据,显示审批评论面板
  249. */
  250. showChoiceButton: function () {
  251. if (
  252. this.window != undefined &&
  253. this.window.workflow != undefined &&
  254. this.modelData != undefined &&
  255. this.modelData.data != undefined &&
  256. this.modelData.data.processInstanceId != undefined &&
  257. this.modelData.data.processInstanceId.displayValue != undefined &&
  258. this.modelData.data.processInstanceId.displayValue[0] != undefined &&
  259. this.modelData.data.processInstanceId.displayValue[0].length > 0 &&
  260. this.modelData.data.documentStatus != undefined &&
  261. this.modelData.data.documentStatus.displayValue != undefined &&
  262. this.modelData.data.documentStatus.displayValue[0] != undefined &&
  263. this.modelData.data.documentStatus.displayValue[0].length > 0 &&
  264. this.modelData.data.documentStatus.displayValue[0] == 'PROCESSING' &&
  265. this.taskId != undefined
  266. ) {
  267. return true;
  268. }
  269. return false;
  270. },
  271. },
  272. mounted: function(){
  273. this.initViewParam();
  274. this.initViewData();
  275. },
  276. methods: {
  277. openReport: function(){
  278. window.open('/static/x-spreadsheet/index.html?processReportNo=' + this.processReportNo + '&recordId=' + this.recordId);
  279. },
  280. /**
  281. * 初始化界面的参数
  282. */
  283. initViewParam: function () {
  284. this.type = this.$route.query.type;
  285. this.windowNo = this.$route.query.windowNo;
  286. this.tabIndex = this.$route.query.tabIndex;
  287. this.recordId = this.$route.query.recordId;
  288. this.processReportNo = this.$route.query.processReportNo;
  289. this.taskId = this.$route.query.taskId;
  290. this.title = this.$route.query.title;
  291. this.subTitle = this.$route.query.subTitle;
  292. },
  293. /**
  294. * 初始化界面数据
  295. */
  296. initViewData: function () {
  297. var _self = this;
  298. _self.loading = true;
  299. if (_self.taskId) {
  300. CurdWindowResource.uniqueByNoWithWorkflow(
  301. null,
  302. _self.taskId,
  303. _self.windowNo,
  304. ).then(
  305. successData => {
  306. _self.loading = false;
  307. if (successData.errorCode == 0) {
  308. initWindowAfterLoaded(successData.data);
  309. }else{
  310. Notify.error(_self.$t('lang.Notify.error'), successData.errorMessage, true);
  311. }
  312. },
  313. errorData => {
  314. _self.loading = false;
  315. Common.processException(errorData);
  316. },
  317. );
  318. }else {
  319. WindowServerUtil.getWindowById(
  320. _self.windowNo,
  321. function (window) {
  322. _self.loading = false;
  323. if(window.errorCode != 0){
  324. Notify.error('Error', window.errorMessage, false);
  325. return;
  326. }
  327. initWindowAfterLoaded(window.data);
  328. },
  329. function () {
  330. _self.loading = false;
  331. },
  332. );
  333. }
  334. function initWindowAfterLoaded(window) {
  335. WindowClientUtil.parseFilterSchema(window);
  336. var tab = WindowClientUtil.getTab(window, _self.tabIndex);
  337. WindowClientUtil.parseSubTab(window, tab);
  338. WindowClientUtil.parseFieldGroup(tab);
  339. WindowClientUtil.restoreWindowTabFieldGroupsVisible(window);
  340. _self.tabFormFields = WindowClientUtil.getDetailField(tab);
  341. _self.window = window;
  342. _self.tab = tab;
  343. _self.loadData();
  344. if (_self.window.workflow != undefined) {
  345. _self.processDefinitionId = _self.window.workflow.deploymentId;
  346. }
  347. _self.loading = false;
  348. }
  349. },
  350. /**
  351. * 加载数据
  352. */
  353. loadData: function () {
  354. var _self = this;
  355. if (_self.recordId == null) {
  356. return;
  357. }
  358. var tabLoadParam = {
  359. windowNo: _self.windowNo,
  360. tabIndex: _self.tabIndex,
  361. recordId: _self.recordId,
  362. };
  363. _self.processInstanceId = '';
  364. _self.loading = true;
  365. WindowServerUtil.loadTabSingleData(
  366. tabLoadParam,
  367. function (modelData) {
  368. _self.loading = false;
  369. _self.modelData = modelData;
  370. _self.processInstanceId = '';
  371. // 判断是否显示审批状态
  372. if (
  373. _self.modelData != null &&
  374. _self.modelData.data != null &&
  375. _self.modelData.data.processInstanceId != null
  376. ) {
  377. let displayValue =
  378. _self.modelData.data.processInstanceId.displayValue;
  379. if (displayValue != null && displayValue.length > 0) {
  380. _self.processInstanceId = displayValue[0];
  381. }
  382. }
  383. },
  384. function () {
  385. _self.loading = false;
  386. },
  387. );
  388. },
  389. },
  390. };
  391. </script>