noticeInfo.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <template>
  2. <el-form
  3. ref="form"
  4. :model="form"
  5. :rules="rules"
  6. label-width="100px"
  7. class="create-form"
  8. >
  9. <el-row :gutter="15">
  10. <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
  11. <el-form-item label="名称:" prop="name">
  12. <el-input v-model="form.name" :disabled="disabled" />
  13. </el-form-item>
  14. </el-col>
  15. <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
  16. <el-form-item label="编码:" prop="code">
  17. <el-input v-model="form.code" disabled />
  18. </el-form-item>
  19. </el-col>
  20. <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
  21. <el-form-item label="类型:" prop="type">
  22. <DictSelection
  23. dictName="变更类型"
  24. v-model="form.type"
  25. :disabled="disabled"
  26. ></DictSelection>
  27. </el-form-item>
  28. </el-col>
  29. <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
  30. <el-form-item label="类别:" prop="category">
  31. <DictSelection
  32. multiple
  33. dictName="问题类型"
  34. v-model="form.category"
  35. :disabled="disabled"
  36. ></DictSelection>
  37. </el-form-item>
  38. </el-col>
  39. <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
  40. <el-form-item label="变更原因:">
  41. <el-input
  42. v-model="form.changeReason"
  43. type="textarea"
  44. :rows="2"
  45. :disabled="disabled"
  46. />
  47. </el-form-item>
  48. </el-col>
  49. <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
  50. <el-form-item label="变更内容:">
  51. <el-input
  52. v-model="form.changeContent"
  53. type="textarea"
  54. :rows="2"
  55. :disabled="disabled"
  56. />
  57. </el-form-item>
  58. </el-col>
  59. <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
  60. <el-form-item label="描述:">
  61. <el-input
  62. v-model="form.problemDescription"
  63. type="textarea"
  64. :rows="2"
  65. :disabled="disabled"
  66. />
  67. </el-form-item>
  68. </el-col>
  69. <el-col :span="24">
  70. <el-form-item
  71. label="通知人员"
  72. prop="recipientId"
  73. style="margin-bottom: 20px"
  74. >
  75. <el-select
  76. v-model="form.recipientId"
  77. clearable
  78. style="width: 100%"
  79. :disabled="disabled"
  80. :filterable="true"
  81. >
  82. <el-option
  83. v-for="item in userOptions"
  84. :key="item.id"
  85. :label="item.name"
  86. :value="item.id"
  87. @click.native="userChange(item)"
  88. />
  89. </el-select>
  90. </el-form-item>
  91. </el-col>
  92. <el-col :span="24">
  93. <el-form-item prop="accessory" label="相关文档">
  94. <fileUpload
  95. v-model="form.accessory"
  96. module="main"
  97. :limit="5"
  98. :disabled="disabled"
  99. :showLib="false"
  100. />
  101. </el-form-item>
  102. </el-col>
  103. </el-row>
  104. </el-form>
  105. </template>
  106. <script>
  107. import fileUpload from '@/components/upload/fileUpload';
  108. import { listAllUserBind } from '@/api/system/user/index';
  109. import { infoForm } from './data.js';
  110. export default {
  111. components: { fileUpload },
  112. data() {
  113. return {
  114. userOptions: [],
  115. form: { ...infoForm() },
  116. // 表单验证规则
  117. rules: {
  118. type: [{ required: true, message: '请选择', trigger: 'change' }],
  119. name: [{ required: true, message: '请选择', trigger: 'change' }],
  120. relationType: [{ required: true, message: '请选择', trigger: 'change' }]
  121. }
  122. };
  123. },
  124. props: {
  125. disabled: {
  126. type: Boolean,
  127. default: false
  128. }
  129. },
  130. computed: {
  131. // 是否开启响应式布局
  132. styleResponsive() {
  133. return this.$store.state.theme.styleResponsive;
  134. }
  135. },
  136. created() {
  137. this.userOptions = [];
  138. listAllUserBind().then((data) => {
  139. this.userOptions.push(...data);
  140. });
  141. },
  142. methods: {
  143. cancel() {
  144. this.form = { ...infoForm() };
  145. },
  146. setValue(data) {
  147. this.form = JSON.parse(JSON.stringify(data));
  148. },
  149. open(row) {
  150. if (row) {
  151. this.form = row;
  152. }
  153. },
  154. userChange(item) {
  155. this.form.recipientName = item.name;
  156. },
  157. /* 保存编辑 */
  158. async getValue() {
  159. const valid = await this.validateFn();
  160. this.form.objType = '3';
  161. return valid ? JSON.parse(JSON.stringify(this.form)) : '';
  162. },
  163. validateFn() {
  164. return new Promise((resolve, reject) => {
  165. this.$refs.form.validate((valid) => {
  166. resolve(valid);
  167. });
  168. });
  169. }
  170. }
  171. };
  172. </script>
  173. <style lang="scss" scoped>
  174. </style>