dialog.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <template>
  2. <el-dialog v-model="visible" :title="titleMap[mode]" width="680" @closed="$emit('closed')">
  3. <el-form ref="formRef" :model="form" :rules="rules" :disabled="mode == 'detail'" label-width="110px">
  4. <el-row>
  5. <el-col v-if="form.id" :span="12">
  6. <el-form-item label="案例编号" prop="businessNo">
  7. <el-input v-model="form.businessNo" readonly :disabled="mode != 'add'"></el-input>
  8. </el-form-item>
  9. </el-col>
  10. <el-col :span="12">
  11. <el-form-item label="项目名称" prop="policyStrive.name">
  12. <el-input v-model="form.policyStrive.name" readonly placeholder="点击选择政策争取" @click="showStrive"></el-input>
  13. </el-form-item>
  14. </el-col>
  15. <el-col :span="12">
  16. <el-form-item label="填报人">
  17. <el-input v-model="form.policyStrive.createName" readonly placeholder="自动带出"></el-input>
  18. </el-form-item>
  19. </el-col>
  20. <el-col :span="12">
  21. <el-form-item label="填报部门">
  22. <el-input v-model="form.policyStrive.deptName" readonly placeholder="自动带出"></el-input>
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="12">
  26. <el-form-item label="填报单位">
  27. <el-input v-model="form.policyStrive.companyName" readonly placeholder="自动带出"></el-input>
  28. </el-form-item>
  29. </el-col>
  30. <el-col v-if="form.id" :span="12">
  31. <el-form-item label="填报日期">
  32. <el-date-picker v-model="form.createTime" readonly format="YYYY-MM-DD"></el-date-picker>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="12">
  36. <el-form-item label="项目等级" required>
  37. <el-input v-model="form.policyStrive.zcLevel" readonly placeholder="自动带出"></el-input>
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="12">
  41. <el-form-item label="项目类别" required>
  42. <el-input v-model="form.policyStrive.zcType" readonly placeholder="自动带出"></el-input>
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="12">
  46. <el-form-item label="政策文号" required>
  47. <el-input v-model="form.policyStrive.docNo" readonly placeholder="自动带出"></el-input>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="12">
  51. <el-form-item label="联系方式" required>
  52. <el-input v-model="form.policyStrive.contactPhone" readonly placeholder="自动带出"></el-input>
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="24">
  56. <el-form-item label="项目概要" required>
  57. <el-input v-model="form.policyStrive.abstractContent" type="textarea" :rows="4" readonly placeholder="自动带出"></el-input>
  58. </el-form-item>
  59. </el-col>
  60. <el-col :span="24">
  61. <el-form-item label="经验分享" prop="expContent">
  62. <el-input v-model="form.expContent" type="textarea" :rows="4" placeholder="请输入经验"></el-input>
  63. </el-form-item>
  64. </el-col>
  65. <el-col :span="24">
  66. <el-form-item class="no-upload-btn" label="附件">
  67. <yhUpload v-model="form.policyStrive.fileList" disabled :limit="10">
  68. <el-button type="primary" icon="upload" size="small"></el-button>
  69. </yhUpload>
  70. </el-form-item>
  71. </el-col>
  72. </el-row>
  73. </el-form>
  74. <template #footer>
  75. <template v-if="mode == 'add' || mode == 'edit'">
  76. <el-button :loading="isSaving" type="primary" @click="submit(mode)">保 存</el-button>
  77. <el-button :loading="isSaving" type="primary" @click="submit('saveApprove')">直接上报</el-button>
  78. </template>
  79. </template>
  80. </el-dialog>
  81. <strive-select v-if="dialog" ref="striveSelect" :striveId="form.striveId" @selected="striveChange" @closed="dialog = false"></strive-select>
  82. </template>
  83. <script>
  84. import API from "@/api/policy/case";
  85. import { useUserStore } from "@/store/user";
  86. import yhUpload from "@/components/Upload/index.vue";
  87. import striveSelect from "./strive.vue";
  88. export default {
  89. emits: ["success", "closed"],
  90. components: {
  91. yhUpload,
  92. striveSelect
  93. },
  94. data() {
  95. return {
  96. visible: false,
  97. isSaving: false,
  98. mode: "add",
  99. titleMap: {
  100. add: "新增",
  101. edit: "修改",
  102. detail: "详情"
  103. },
  104. form: {
  105. id: null,
  106. striveId: null,
  107. policyStrive: {
  108. id: null,
  109. name: null,
  110. createName: null,
  111. companyName: null,
  112. deptName: null,
  113. zcLevel: null,
  114. zcType: null,
  115. docNo: null,
  116. contactPhone: null,
  117. abstractContent: null,
  118. fileList: []
  119. },
  120. businessNo: null,
  121. status: null,
  122. createId: useUserStore().userInfo.id,
  123. createName: useUserStore().userInfo.name,
  124. createTime: null,
  125. expContent: null
  126. },
  127. rules: {
  128. businessNo: [{ required: true }],
  129. "policyStrive.name": [{ required: true, message: "请选择政策争取" }],
  130. expContent: [{ required: true, message: "请输入经验" }]
  131. },
  132. dialog: false
  133. }
  134. },
  135. methods: {
  136. open(mode = "add") {
  137. this.mode = mode;
  138. this.visible = true;
  139. return this;
  140. },
  141. setData(id) {
  142. API.detail(id).then(res => {
  143. if (res.code === 200) {
  144. for (const key in this.form) {
  145. if (key == "policyStrive") {
  146. for (const striveKey in this.form[key]) {
  147. if (striveKey == "fileList") this.form[key][striveKey] = res.data[key][striveKey].map(file => ({ ...file, name: file.originalName, path: file.fileDomain + "/" + file.fileName }));
  148. else this.form[key][striveKey] = res.data[key][striveKey] || null;
  149. }
  150. } else this.form[key] = res.data[key] || null;
  151. }
  152. } else ElMessage.error(res.msg);
  153. });
  154. },
  155. showStrive() {
  156. if (this.mode == "add") {
  157. this.dialog = true;
  158. nextTick(() => this.$refs.striveSelect.open().reloadTable());
  159. }
  160. },
  161. striveChange(e) {
  162. for (const key in this.form.policyStrive) {
  163. if (key == "fileList") this.form.policyStrive[key] = e[key].map(file => ({ ...file, name: file.originalName, path: file.fileDomain + "/" + file.fileName }));
  164. else this.form.policyStrive[key] = e[key];
  165. }
  166. this.form.striveId = e.id;
  167. },
  168. // 表单提交方法
  169. submit(mode) {
  170. this.$refs.formRef.validate(valid => {
  171. if (valid) {
  172. this.isSaving = true;
  173. API[mode](this.form).then(res => {
  174. this.isSaving = false;
  175. if (res.code === 200) {
  176. ElMessage.success("操作成功");
  177. this.visible = false;
  178. this.$emit("success", mode);
  179. } else ElMessage.error(res.msg);
  180. }).catch(() => this.isSaving = false);
  181. } else {
  182. return false;
  183. }
  184. });
  185. }
  186. }
  187. }
  188. </script>
  189. <style lang="scss" scoped>
  190. .no-upload-btn :deep(.yh-upload-file) {
  191. .el-upload {
  192. display: none;
  193. }
  194. .el-upload-list.is-disabled {
  195. margin-top: 0;
  196. }
  197. }
  198. </style>