detail.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <template>
  2. <sc-dialog v-model="visible" width="80%" top="13vh" @closed="$emit('closed')">
  3. <template v-slot:header>
  4. <el-tabs v-model="activeName" @tab-change="$refs.purchaseTracking.getToken()">
  5. <el-tab-pane label="采购申请信息" name="purchase"></el-tab-pane>
  6. <el-tab-pane v-if="form.processInstanceId" label="流程跟踪" name="purchase_tracking"></el-tab-pane>
  7. </el-tabs>
  8. </template>
  9. <el-tabs v-model="activeName">
  10. <el-tab-pane name="purchase">
  11. <scApply ref="scApply" :id="form.id" :lg="12" :disabled="!showFooter"></scApply>
  12. </el-tab-pane>
  13. <el-tab-pane v-if="form.processInstanceId" name="purchase_tracking">
  14. <tracking ref="purchaseTracking" :processInstanceId="form.processInstanceId"></tracking>
  15. </el-tab-pane>
  16. </el-tabs>
  17. <template v-if="showFooter" #footer>
  18. <el-button @click="visible = false">取 消</el-button>
  19. <el-button type="primary" :loading="isSaveing" @click="validateForm(mode)">保 存</el-button>
  20. <el-button type="primary" :loading="isSaveing" @click="validateForm('saveApprove')">提 交</el-button>
  21. </template>
  22. </sc-dialog>
  23. <approve-iframe v-if="popoverShow" ref="approveIframe" @success="approve" @closed="popoverShow = false"></approve-iframe>
  24. </template>
  25. <script>
  26. import scApply from "@/components/scChengTou/purchase/apply";
  27. import Tracking from "@/components/scChengTou/purchase/tracking";
  28. export default {
  29. emits: ["success", "closed"],
  30. components: {
  31. scApply,
  32. Tracking
  33. },
  34. data() {
  35. return {
  36. mode: "add",
  37. visible: false,
  38. isSaveing: false,
  39. popoverShow: false,
  40. activeName: "purchase",
  41. form: {}
  42. }
  43. },
  44. computed: {
  45. showFooter() {
  46. return !this.form.status || this.form.status == "active";
  47. }
  48. },
  49. methods: {
  50. // 显示
  51. open(mode = "add") {
  52. this.mode = mode;
  53. this.visible = true;
  54. return this;
  55. },
  56. setData({ id, status, processTaskId, processInstanceId, processTemplateId }) {
  57. this.form["id"] = id;
  58. this.form["status"] = status;
  59. this.form["processTaskId"] = processTaskId;
  60. this.form["processInstanceId"] = processInstanceId;
  61. this.form["processTemplateId"] = processTemplateId;
  62. },
  63. // 表单提交方法
  64. validateForm(mode) {
  65. const promiseArr = [this.$refs.scApply.$refs.dialogForm.validate()];
  66. if (this.$refs.scApply.form.isLawyer == 1) promiseArr.push(this.$refs.scApply.$refs.lawyerSelection.$refs.dialogForm.validate());
  67. Promise.all(promiseArr).then(() => {
  68. if (mode == "saveApprove") {
  69. if (!this.form.status) {
  70. this.popoverShow = true;
  71. this.$nextTick(() => this.$refs.approveIframe.open().setData());
  72. } else this.submit("resubmit", this.form.processTemplateId);
  73. } else this.submit(mode);
  74. }).catch(() => false);
  75. },
  76. submit(mode, templateId) {
  77. const data = {};
  78. for (const key in this.$refs.scApply.form) {
  79. if (key == "folders") {
  80. for (const folder_key in this.$refs.scApply.form[key]) {
  81. const applyFiles = this.$refs.scApply.form[key][folder_key]["entities"].filter(item => !item.id).map(item => item.path);
  82. if (applyFiles.length) {
  83. if (!data[key]) data[key] = {};
  84. data[key][folder_key] = {
  85. entities: applyFiles.map(ticket => ({ features: { ticket } }))
  86. }
  87. }
  88. }
  89. } else data[key] = this.$refs.scApply.form[key];
  90. }
  91. if (templateId) data["templateId"] = templateId;
  92. if (mode == "resubmit") data["processTaskId"] = this.form.processTaskId;
  93. this.isSaveing = true;
  94. this.$API.procurement.apply[mode](data).then(() => {
  95. this.isSaveing = false;
  96. this.$message.success("操作成功");
  97. this.visible = false;
  98. this.$emit("success", mode);
  99. }).catch(() => this.isSaveing = false);
  100. },
  101. approve(data) {
  102. this.submit("saveApprove", data.processDefinitionId || null);
  103. }
  104. }
  105. }
  106. </script>
  107. <style lang="scss" scoped>
  108. .sc-dialog:deep(.el-dialog) {
  109. .el-dialog__header {
  110. padding: 0;
  111. &::after {
  112. display: none;
  113. }
  114. .sc-dialog__headerbtn button {
  115. margin-left: 0;
  116. }
  117. .el-tabs {
  118. flex-basis: 100%;
  119. --el-tabs-header-height: 50px;
  120. .el-tabs__header {
  121. margin-bottom: 0;
  122. .el-tabs__nav-wrap::after {
  123. height: 1px;
  124. }
  125. .el-tabs__item {
  126. padding-bottom: 10px;
  127. }
  128. }
  129. .el-tabs__content {
  130. display: none;
  131. }
  132. }
  133. }
  134. .el-dialog__body {
  135. padding-bottom: 0;
  136. .el-tabs .el-tabs__header {
  137. display: none;
  138. }
  139. }
  140. }
  141. </style>