edit.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <div class="system-edit-dic-container">
  3. <el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加') + '楼宇'" v-model="dialogVisible" width="550px">
  4. <el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
  5. <el-form-item label="所属组织" prop="organizationId">
  6. <el-tree-select
  7. v-model="ruleForm.organizationId"
  8. :data="orgList"
  9. :props="{
  10. label: 'name',
  11. children: 'children'
  12. }"
  13. node-key="id"
  14. :clearable="true"
  15. check-strictly
  16. style="width: 100%;"
  17. :render-after-expand="true"
  18. />
  19. </el-form-item>
  20. <el-form-item label="所属换热站" prop="heatId">
  21. <el-tree-select
  22. v-model="ruleForm.heatId"
  23. :data="heatList"
  24. :props="{
  25. label: 'name',
  26. children: 'children'
  27. }"
  28. node-key="id"
  29. :clearable="true"
  30. check-strictly
  31. style="width: 100%;"
  32. :render-after-expand="true"
  33. />
  34. </el-form-item>
  35. <el-form-item label="小区名称" prop="plotId">
  36. <el-select v-model="ruleForm.plotId" placeholder="选择小区名称" filterable clearable size="default" style="width: 100%">
  37. <el-option
  38. v-for="item in plotList"
  39. :key="item.id"
  40. :label="item.name"
  41. :value="item.id">
  42. </el-option>
  43. </el-select>
  44. </el-form-item>
  45. <el-form-item label="楼宇名称" prop="name">
  46. <el-input v-model="ruleForm.name" placeholder="请输入楼宇名称" />
  47. </el-form-item>
  48. <el-form-item label="楼号" prop="number">
  49. <el-input v-model="ruleForm.number" placeholder="请输入楼号" />
  50. </el-form-item>
  51. <el-form-item label="备注" prop="remark">
  52. <el-input type="textarea" :rows="8" v-model="ruleForm.remark" placeholder="请输入备注" />
  53. </el-form-item>
  54. </el-form>
  55. <template #footer>
  56. <span class="dialog-footer">
  57. <el-button @click="onCancel" size="default">取 消</el-button>
  58. <el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
  59. </span>
  60. </template>
  61. </el-dialog>
  62. </div>
  63. </template>
  64. <script lang="ts">
  65. import { reactive, toRefs, defineComponent, ref, unref, nextTick } from 'vue';
  66. import api from '/@/api/heatingDistrict';
  67. import heatApi from '/@/api/heatStation';
  68. import { ElMessage } from 'element-plus';
  69. interface RuleFormState {
  70. id?: number;
  71. name: string;
  72. organizationId: string;
  73. }
  74. export default defineComponent({
  75. name: 'edit',
  76. setup(prop, { emit }) {
  77. const formRef = ref<HTMLElement | null>(null);
  78. const state = reactive({
  79. dialogVisible: false,
  80. ruleForm: {
  81. id: 0,
  82. name: '',
  83. organizationId: '',
  84. plotId: '',
  85. heatId: '',
  86. number: '',
  87. remark: '',
  88. },
  89. rules: {
  90. name: [{ required: true, message: '楼宇名称不能为空', trigger: ['blur', 'change'] }],
  91. organizationId: [{ required: true, message: '所属组织不能为空', trigger: ['blur', 'change'] }],
  92. plotId: [{ required: true, message: '小区名称不能为空', trigger: ['blur', 'change'] }],
  93. heatId: [{ required: true, message: '所属换热站不能为空', trigger: ['blur', 'change'] }],
  94. number: [{ required: true, message: '楼号不能为空', trigger: ['blur', 'change'] }],
  95. },
  96. orgList: [],
  97. plotList: [],
  98. heatList: []
  99. })
  100. // 打开弹窗
  101. const openDialog = (row: RuleFormState | null) => {
  102. resetForm()
  103. queryTree()
  104. if (row) {
  105. (state.ruleForm as any).id = row.id
  106. getDetail()
  107. }
  108. state.dialogVisible = true
  109. }
  110. const resetForm = () => {
  111. state.ruleForm = {
  112. id: 0,
  113. name: '',
  114. organizationId: ''
  115. }
  116. }
  117. // 关闭弹窗
  118. const closeDialog = () => {
  119. state.dialogVisible = false;
  120. (formRef.value as any).clearValidate()
  121. }
  122. // 取消
  123. const onCancel = () => {
  124. closeDialog()
  125. }
  126. const queryTree = () => {
  127. heatApi.heatStation.getList({
  128. name: '',
  129. code: '',
  130. status: -1
  131. })
  132. .then((res: any) => {
  133. state.heatList = res || [];
  134. });
  135. };
  136. const getDetail = () => {
  137. api.floor.detail(state.ruleForm.id)
  138. .then((res: any) => {
  139. state.ruleForm = {
  140. ...res
  141. }
  142. })
  143. }
  144. // 新增
  145. const onSubmit = () => {
  146. const formWrap = unref(formRef) as any
  147. if (!formWrap) return;
  148. formWrap.validate((valid: boolean) => {
  149. if (valid) {
  150. let params = { ...state.ruleForm }
  151. if (params.id) {
  152. //修改
  153. api.floor.edit(params).then(() => {
  154. ElMessage.success('楼宇修改成功')
  155. closeDialog() // 关闭弹窗
  156. emit('queryList')
  157. })
  158. } else {
  159. //添加
  160. api.floor.add(params).then(() => {
  161. ElMessage.success('楼宇添加成功')
  162. closeDialog() // 关闭弹窗
  163. emit('queryList')
  164. })
  165. }
  166. }
  167. })
  168. }
  169. return {
  170. openDialog,
  171. closeDialog,
  172. onCancel,
  173. onSubmit,
  174. formRef,
  175. ...toRefs(state)
  176. }
  177. }
  178. })
  179. </script>