area-edit.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <!-- 机构编辑弹窗 -->
  2. <template>
  3. <ele-modal
  4. width="880px"
  5. :visible.sync="visibleFlag"
  6. :close-on-click-modal="false"
  7. custom-class="ele-dialog-form"
  8. :title="title"
  9. :before-close="updateVisible"
  10. :maxable="true"
  11. >
  12. <el-form ref="form" :model="form" :rules="rules" label-width="140px">
  13. <el-row :gutter="15">
  14. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  15. <el-form-item label="区域类型:" prop="areaLevel">
  16. <DictSelection dictName="区域类型" v-model="form.areaType" :disabled="dialogType=='view'"></DictSelection>
  17. </el-form-item>
  18. </el-col>
  19. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  20. <el-form-item label="区域编码:" prop="areaCode">
  21. <el-input
  22. clearable
  23. :maxlength="50"
  24. v-model="form.areaCode"
  25. placeholder="请输入区域编码"
  26. :disabled="dialogType=='view'"
  27. />
  28. </el-form-item>
  29. </el-col>
  30. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  31. <el-form-item label="区域名称:" prop="name">
  32. <el-input
  33. clearable
  34. :maxlength="50"
  35. v-model="form.name"
  36. placeholder="请输入区域名称"
  37. :disabled="dialogType=='view'"
  38. />
  39. </el-form-item>
  40. </el-col>
  41. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  42. <el-form-item label="区域等级:" prop="areaLevel">
  43. <DictSelection dictName="区域等级" v-model="form.areaLevel" :disabled="dialogType=='view'"></DictSelection>
  44. </el-form-item>
  45. </el-col>
  46. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  47. <el-form-item label="父区域:">
  48. <area-select
  49. :disabled="dialogType=='view'"
  50. v-model="form.parentId"
  51. :data="organizationList"
  52. />
  53. </el-form-item>
  54. </el-col>
  55. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  56. <el-form-item label="备注:">
  57. <el-input
  58. style="width: 100%"
  59. v-model="form.remark"
  60. type="textarea"
  61. ></el-input>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="12">
  65. <el-form-item label="附件:">
  66. <fileUpload
  67. v-model="form.areaImg"
  68. module="main"
  69. :showLib="false"
  70. :limit="1"
  71. />
  72. </el-form-item>
  73. </el-col>
  74. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  75. <el-form-item label="排序:">
  76. <el-input-number
  77. style="width: 100%"
  78. v-model="form.areaSort"
  79. placeholder="请选择"
  80. controls-position="right"
  81. :min="1"
  82. ></el-input-number>
  83. </el-form-item>
  84. </el-col>
  85. </el-row>
  86. </el-form>
  87. <template v-slot:footer>
  88. <el-button @click="updateVisible(false)">取消</el-button>
  89. <el-button type="primary" :loading="loading" @click="save">
  90. 保存
  91. </el-button>
  92. </template>
  93. </ele-modal>
  94. </template>
  95. <script>
  96. import areaSelect from './area-select.vue';
  97. import areaTypeSelect from './area-type-select.vue';
  98. import fileUpload from '@/components/upload/fileUpload';
  99. import {basicAreaSaveAPI, basicAreaUpdateAPI} from "@/api/regionalManage";
  100. export default {
  101. components: {areaSelect, areaTypeSelect, fileUpload},
  102. props: {
  103. // 弹窗是否打开
  104. visibleFlag: Boolean,
  105. // 修改回显的数据
  106. data: Object,
  107. // 上级id
  108. parentId: [Number, String],
  109. // 数据
  110. organizationList: Array
  111. },
  112. data() {
  113. const defaultForm = {
  114. id: null,
  115. parentId: null,
  116. areaCode: "",
  117. areaImg: [],
  118. areaLevel: "",
  119. areaSort: 100,
  120. areaType: "",
  121. factoriesId: '',
  122. name: "",
  123. parentName: "",
  124. remark: "",
  125. stationCity: "",
  126. stationCode: "",
  127. stationCounty: "",
  128. stationId: '',
  129. stationName: "",
  130. stationProvince: "",
  131. };
  132. return {
  133. defaultForm,
  134. responsibleName: '',
  135. // 表单数据
  136. form: {...defaultForm},
  137. // 表单验证规则
  138. rules: {
  139. name: [
  140. {required: true, message: '请输入区域名称', trigger: 'blur'}
  141. ],
  142. areaLevel: [
  143. {required: true, message: '请选择区域等级', trigger: 'change'}
  144. ],
  145. areaType: [{required: true, message: '请选择区域类型', trigger: 'change'}],
  146. areaCode: [{required: true, message: '请输入区域编码', trigger: 'blur'}],
  147. },
  148. // 提交状态
  149. loading: false,
  150. dialogType: false,
  151. title: '',
  152. // 是否是修改
  153. isUpdate: false
  154. };
  155. },
  156. computed: {
  157. // 是否开启响应式布局
  158. styleResponsive() {
  159. return this.$store.state.theme.styleResponsive;
  160. }
  161. },
  162. methods: {
  163. init(type,row={}) {
  164. this.title = type =='update'?'修改': type =='add'?'新增':'详情'
  165. this.dialogType = type
  166. if(type == 'update') {
  167. let data = {...row}
  168. Object.assign(this.form, data)
  169. }
  170. },
  171. /* 保存编辑 */
  172. async save() {
  173. if (!(await this.formValidate())) {
  174. return false;
  175. }
  176. this.loading = true;
  177. const data = {
  178. ...this.form,
  179. parentId: this.form.parentId || 0
  180. };
  181. if (!this.dialogType == 'update') {
  182. delete data.id;
  183. }
  184. const saveOrUpdate = this.dialogType == 'update' ? basicAreaUpdateAPI : basicAreaSaveAPI;
  185. saveOrUpdate(data)
  186. .then((msg) => {
  187. this.loading = false;
  188. this.$message.success(msg);
  189. this.updateVisible(false);
  190. this.$emit('done');
  191. })
  192. .catch((e) => {
  193. this.loading = false;
  194. // this.$message.error(e.message);
  195. });
  196. },
  197. formValidate() {
  198. return new Promise((resolve, reject) => {
  199. this.$refs.form.validate((valid) => {
  200. resolve(valid);
  201. });
  202. });
  203. },
  204. enterpriseValidate() {
  205. return new Promise((resolve, reject) => {
  206. this.$refs.enterpriseForm.validate((valid) => {
  207. resolve(valid);
  208. });
  209. });
  210. },
  211. /* 更新visible */
  212. updateVisible(value) {
  213. this.$emit('update:visibleFlag', false);
  214. }
  215. }
  216. };
  217. </script>