ReportApprove.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  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 ApproveComment from './ApproveComment.vue';
  163. import Common from '../common/Common.js';
  164. import CurdWindowResource from '../api/dic/CurdWindowResource.js';
  165. import WindowServerUtil from '../resource/dictionary/WindowServerUtil.js';
  166. import WindowClientUtil from '../resource/dictionary/WindowClientUtil.js';
  167. import SubTabGridEdit from '../window/tabGridView/SubTabGridEdit.vue';
  168. import TabFormFieldView from '../window/tabFormView/TabFormFieldView.vue';
  169. import TabButton from '../window/tabView/TabButton.vue';
  170. import FormFieldDef from '../window/tabFormView/FormFieldDef.vue';
  171. import AttachmentPanel from '../window/attachment/AttachmentPanel.vue';
  172. import Language from '../common/Language.js';
  173. import { Notify } from 'pc-component-v3';
  174. import WorkflowResource from '../api/workflow/WorkflowResource.js';
  175. import HistoryApproveComment from './HistoryApproveComment.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. initWindowAfterLoaded(successData);
  307. },
  308. errorData => {
  309. _self.loading = false;
  310. Common.processException(errorData);
  311. },
  312. );
  313. }else {
  314. WindowServerUtil.getWindowById(
  315. _self.windowNo,
  316. function (window) {
  317. initWindowAfterLoaded(window);
  318. },
  319. function () {
  320. _self.loading = false;
  321. },
  322. );
  323. }
  324. function initWindowAfterLoaded(window) {
  325. WindowClientUtil.parseFilterSchema(window);
  326. var tab = WindowClientUtil.getTab(window, _self.tabIndex);
  327. WindowClientUtil.parseSubTab(window, tab);
  328. WindowClientUtil.parseFieldGroup(tab);
  329. WindowClientUtil.restoreWindowTabFieldGroupsVisible(window);
  330. _self.tabFormFields = WindowClientUtil.getDetailField(tab);
  331. _self.window = window;
  332. _self.tab = tab;
  333. _self.loadData();
  334. if (_self.window.workflow != undefined) {
  335. _self.processDefinitionId = _self.window.workflow.deploymentId;
  336. }
  337. _self.loading = false;
  338. }
  339. },
  340. /**
  341. * 加载数据
  342. */
  343. loadData: function () {
  344. var _self = this;
  345. if (_self.recordId == null) {
  346. return;
  347. }
  348. var tabLoadParam = {
  349. windowNo: _self.windowNo,
  350. tabIndex: _self.tabIndex,
  351. recordId: _self.recordId,
  352. };
  353. _self.processInstanceId = '';
  354. _self.loading = true;
  355. WindowServerUtil.loadTabSingleData(
  356. tabLoadParam,
  357. function (modelData) {
  358. _self.modelData = modelData;
  359. _self.processInstanceId = '';
  360. // 判断是否显示审批状态
  361. if (
  362. _self.modelData != null &&
  363. _self.modelData.data != null &&
  364. _self.modelData.data.processInstanceId != null
  365. ) {
  366. let displayValue =
  367. _self.modelData.data.processInstanceId.displayValue;
  368. if (displayValue != null && displayValue.length > 0) {
  369. _self.processInstanceId = displayValue[0];
  370. }
  371. }
  372. _self.loading = false;
  373. },
  374. function () {
  375. _self.loading = false;
  376. },
  377. );
  378. },
  379. },
  380. };
  381. </script>