addOrEditDialog.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <template>
  2. <ele-modal
  3. custom-class="ele-dialog-form long-dialog-form"
  4. :centered="true"
  5. :visible.sync="addOrEditDialogFlag"
  6. :title="title"
  7. :append-to-body="false"
  8. :close-on-click-modal="false"
  9. width="1000px"
  10. :before-close="cancel"
  11. :maxable="true"
  12. :resizable="true"
  13. >
  14. <div class="switch_left" v-if="dialogType=='view'">
  15. <ul>
  16. <li
  17. v-for="item in tabOptions"
  18. :key="item.key"
  19. :class="{ active: activeComp == item.key }"
  20. @click="activeComp = item.key"
  21. >
  22. {{ item.name }}
  23. </li>
  24. </ul>
  25. </div>
  26. <el-form
  27. v-show="activeComp=='main'"
  28. ref="form"
  29. :rules="rules"
  30. class="el-form-box"
  31. :model="form"
  32. label-width="90px"
  33. style="margin-top:15px"
  34. >
  35. <el-row>
  36. <el-col :span="12" v-if="dialogType != 'add'">
  37. <el-form-item label="编码" prop="changeCode">
  38. <el-input v-model="form.changeCode" disabled></el-input>
  39. </el-form-item>
  40. </el-col>
  41. <el-col :span="12">
  42. <el-form-item label="变更合同" prop="contractName">
  43. <el-input
  44. v-model="form.contractName"
  45. @click.native="selectContract"
  46. readonly
  47. :disabled="dialogType=='view'"
  48. ></el-input>
  49. </el-form-item>
  50. </el-col>
  51. <el-col :span="12">
  52. <el-form-item label="附件" prop="file">
  53. <fileMain v-model="form.file" :type="dialogType=='view'?'view':'add'"></fileMain>
  54. </el-form-item>
  55. </el-col>
  56. <el-col :span="24">
  57. <el-form-item label="变更原因" prop="reason">
  58. <el-input v-model="form.reason" type="textarea" :disabled="dialogType=='view'"></el-input>
  59. </el-form-item>
  60. </el-col>
  61. <el-col :span="24">
  62. <el-form-item label="变更描述" prop="remark">
  63. <el-input v-model="form.remark" type="remark" :disabled="dialogType=='view'"></el-input>
  64. </el-form-item>
  65. </el-col>
  66. </el-row>
  67. </el-form>
  68. <div slot="footer">
  69. <el-button type="primary" v-if="dialogType!='view'" @click="handleSave()" v-click-once
  70. >保存</el-button
  71. >
  72. <el-button @click="cancel">返回</el-button>
  73. </div>
  74. <bpmDetail v-if="activeComp==='bpm'&&form.processInstanceId" :id="form.processInstanceId"></bpmDetail>
  75. <contractListDialog
  76. ref="selectContractRef"
  77. @changeParent="changeContract"
  78. :type="0"
  79. :isChange="true"
  80. ></contractListDialog>
  81. </ele-modal>
  82. </template>
  83. <script>
  84. import { mapGetters } from 'vuex';
  85. import {
  86. addInformation,
  87. UpdateInformation,
  88. getDetail
  89. } from '@/api/contractManage/contractChange.js';
  90. // import fileMain from '@/components/addDoc/index.vue';
  91. import contractListDialog from '@/views/saleManage/saleOrder/components/contractListDialog.vue';
  92. import bpmDetail from '@/views/bpm/processInstance/detail.vue';
  93. const defForm = {
  94. name: '',
  95. changeCode: '',
  96. file: [], //条件
  97. remark: '',
  98. type: '',
  99. describes: '',
  100. contractName: '',
  101. contractId: ''
  102. };
  103. export default {
  104. components: {
  105. // fileMain,
  106. contractListDialog,bpmDetail },
  107. computed: {
  108. ...mapGetters(['user'])
  109. },
  110. data() {
  111. return {
  112. activeComp: 'main',
  113. fullscreen:false,
  114. tabOptions: [
  115. { key: 'main', name: '变更详情' },
  116. { key: 'bpm', name: '流程详情' }
  117. ],
  118. addOrEditDialogFlag: false,
  119. dialogType: '',
  120. title: '',
  121. form: {
  122. ...defForm
  123. },
  124. rules: {
  125. name: { required: true, message: '请输入', trigger: 'change' }
  126. }
  127. };
  128. },
  129. created() {},
  130. methods: {
  131. //初始化
  132. async open(row = {}, type) {
  133. this.addOrEditDialogFlag = true;
  134. this.title = type == 'add' ? '新增' :type == 'view' ? '详情' : '修改';
  135. this.dialogType = type;
  136. if (type !== 'add') {
  137. this.getInfo(row.id);
  138. }
  139. },
  140. selectContract() {
  141. this.$nextTick(() => {
  142. this.$refs.selectContractRef.open();
  143. });
  144. },
  145. changeContract(data) {
  146. this.$set(this.form, 'contractName', data.contractName);
  147. this.$set(this.form, 'contractId', data.id);
  148. this.$set(this.form, 'contractNo', data.contractNo);
  149. this.$set(this.form, 'contractNumber', data.contractNumber);
  150. console.log(this.form);
  151. },
  152. //获取详情
  153. async getInfo(id) {
  154. this.form = await getDetail(id);
  155. },
  156. handleSave(type) {
  157. this.$refs.form.validate((valid) => {
  158. if (!valid) return this.$message.warning('有必填项未填,请检查');
  159. let api =
  160. this.dialogType == 'add' ? addInformation : UpdateInformation;
  161. api(this.form)
  162. .then((res) => {
  163. this.$message.success('操作成功');
  164. if (type === 'sub') {
  165. this.sendSubmit(res);
  166. return;
  167. }
  168. this.done();
  169. this.cancel();
  170. })
  171. .catch((e) => {});
  172. });
  173. },
  174. //刷新主列表数据
  175. done() {
  176. this.$emit('reload');
  177. },
  178. //关闭弹窗
  179. cancel() {
  180. this.form = {
  181. ...defForm
  182. };
  183. this.addOrEditDialogFlag = false;
  184. }
  185. }
  186. };
  187. </script>
  188. <style scoped lang="scss"></style>