edit.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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. <!-- heatStaId -->
  21. <el-form-item label="所属换热站" prop="">
  22. <el-tree-select
  23. v-model="ruleForm.heatStaId"
  24. :data="heatList"
  25. :props="{
  26. label: 'name',
  27. children: 'children'
  28. }"
  29. node-key="id"
  30. :clearable="true"
  31. check-strictly
  32. style="width: 100%;"
  33. :render-after-expand="true"
  34. />
  35. </el-form-item>
  36. <el-form-item label="小区名称" prop="plotId">
  37. <el-select v-model="ruleForm.plotId" @change="onPlotChange" placeholder="选择小区名称" filterable clearable size="default" style="width: 100%">
  38. <el-option
  39. v-for="item in plotList"
  40. :key="item.id"
  41. :label="item.name"
  42. :value="item.id">
  43. </el-option>
  44. </el-select>
  45. </el-form-item>
  46. <el-form-item label="楼宇名称" prop="floorId">
  47. <el-select v-model="ruleForm.floorId" placeholder="选择楼宇名称" filterable clearable size="default" style="width: 100%">
  48. <el-option
  49. v-for="item in floorList"
  50. :key="item.id"
  51. :label="item.name"
  52. :value="item.id">
  53. </el-option>
  54. </el-select>
  55. </el-form-item>
  56. <el-form-item label="单元名称" prop="name">
  57. <el-input v-model="ruleForm.name" placeholder="请输入单元名称" />
  58. </el-form-item>
  59. <el-form-item label="单元号" prop="number">
  60. <el-input v-model="ruleForm.number" placeholder="请输入单元号" />
  61. </el-form-item>
  62. <el-form-item label="状态" prop="status">
  63. <el-radio v-model="ruleForm.status" :label="1">启用</el-radio>
  64. <el-radio v-model="ruleForm.status" :label="0">禁用</el-radio>
  65. </el-form-item>
  66. <el-form-item label="备注" prop="remark">
  67. <el-input type="textarea" :rows="8" v-model="ruleForm.remark" placeholder="请输入备注" />
  68. </el-form-item>
  69. </el-form>
  70. <template #footer>
  71. <span class="dialog-footer">
  72. <el-button @click="onCancel" size="default">取 消</el-button>
  73. <el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
  74. </span>
  75. </template>
  76. </el-dialog>
  77. </div>
  78. </template>
  79. <script lang="ts">
  80. import { reactive, toRefs, defineComponent, ref, unref, nextTick } from 'vue';
  81. import api from '/@/api/heatingDistrict';
  82. import heatApi from '/@/api/heatStation';
  83. import { ElMessage } from 'element-plus';
  84. export default defineComponent({
  85. name: 'edit',
  86. setup(prop, { emit }) {
  87. const formRef = ref<HTMLElement | null>(null);
  88. const state = reactive({
  89. dialogVisible: false,
  90. ruleForm: {
  91. id: 0,
  92. name: '',
  93. organizationId: '',
  94. plotId: '',
  95. floorId: '',
  96. heatStaId: '',
  97. number: '',
  98. remark: '',
  99. status: 1
  100. },
  101. rules: {
  102. name: [{ required: true, message: '单元名称不能为空', trigger: ['blur', 'change'] }],
  103. organizationId: [{ required: true, message: '所属组织不能为空', trigger: ['blur', 'change'] }],
  104. plotId: [{ required: true, message: '小区名称不能为空', trigger: ['blur', 'change'] }],
  105. floorId: [{ required: true, message: '楼宇名称不能为空', trigger: ['blur', 'change'] }],
  106. heatStaId: [{ required: true, message: '所属换热站不能为空', trigger: ['blur', 'change'] }],
  107. number: [{ required: true, message: '楼号不能为空', trigger: ['blur', 'change'] }],
  108. },
  109. orgList: [],
  110. plotList: [],
  111. floorList: [],
  112. heatList: []
  113. })
  114. // 打开弹窗
  115. const openDialog = (row: any) => {
  116. resetForm()
  117. queryTree()
  118. if (row) {
  119. (state.ruleForm as any).id = row.id;
  120. (state.ruleForm as any).plotId = row.plotId;
  121. getDetail()
  122. getFloorList()
  123. }
  124. state.dialogVisible = true
  125. }
  126. const resetForm = () => {
  127. state.ruleForm = {
  128. id: 0,
  129. name: '',
  130. organizationId: '',
  131. plotId: '',
  132. floorId: '',
  133. heatStaId: '',
  134. number: '',
  135. remark: '',
  136. status: 1
  137. }
  138. }
  139. // 关闭弹窗
  140. const closeDialog = () => {
  141. state.dialogVisible = false;
  142. (formRef.value as any).clearValidate()
  143. }
  144. // 取消
  145. const onCancel = () => {
  146. closeDialog()
  147. }
  148. const queryTree = () => {
  149. heatApi.heatStation.getList({
  150. name: '',
  151. code: '',
  152. status: -1
  153. })
  154. .then((res: any) => {
  155. state.heatList = res || [];
  156. });
  157. };
  158. const getDetail = () => {
  159. api.unit.detail(state.ruleForm.id)
  160. .then((res: any) => {
  161. state.ruleForm = {
  162. ...res,
  163. heatStaId: res.heatStaId || ''
  164. }
  165. })
  166. }
  167. const onPlotChange = () => {
  168. state.floorList = []
  169. state.ruleForm.floorId = ''
  170. if (state.ruleForm.plotId) {
  171. getFloorList()
  172. }
  173. }
  174. // 获取楼宇
  175. const getFloorList = () => {
  176. api.floor.allList({ plotId: state.ruleForm.plotId })
  177. .then((res: any) => {
  178. state.floorList = res.Info || []
  179. })
  180. }
  181. // 新增
  182. const onSubmit = () => {
  183. const formWrap = unref(formRef) as any
  184. if (!formWrap) return;
  185. formWrap.validate((valid: boolean) => {
  186. if (valid) {
  187. let params = { ...state.ruleForm }
  188. if (params.id) {
  189. //修改
  190. api.unit.edit(params).then(() => {
  191. ElMessage.success('单元修改成功')
  192. closeDialog() // 关闭弹窗
  193. emit('queryList')
  194. })
  195. } else {
  196. //添加
  197. api.unit.add(params).then(() => {
  198. ElMessage.success('单元添加成功')
  199. closeDialog() // 关闭弹窗
  200. emit('queryList')
  201. })
  202. }
  203. }
  204. })
  205. }
  206. return {
  207. openDialog,
  208. closeDialog,
  209. onCancel,
  210. onSubmit,
  211. formRef,
  212. onPlotChange,
  213. ...toRefs(state)
  214. }
  215. }
  216. })
  217. </script>