edit.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  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="">
  21. <el-tree-select
  22. v-model="ruleForm.heatStaId"
  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" @change="onPlotChange" 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="floorId">
  46. <el-select v-model="ruleForm.floorId" @change="onFloorChange" placeholder="选择楼宇名称" filterable clearable size="default" style="width: 100%">
  47. <el-option
  48. v-for="item in floorList"
  49. :key="item.id"
  50. :label="item.name"
  51. :value="item.id">
  52. </el-option>
  53. </el-select>
  54. </el-form-item>
  55. <el-form-item label="单元名称" prop="unitId">
  56. <el-select v-model="ruleForm.unitId" placeholder="选择单元名称" filterable clearable size="default" style="width: 100%">
  57. <el-option
  58. v-for="item in unitList"
  59. :key="item.id"
  60. :label="item.name"
  61. :value="item.id">
  62. </el-option>
  63. </el-select>
  64. </el-form-item>
  65. <el-form-item label="住户姓名" prop="name">
  66. <el-input v-model="ruleForm.name" placeholder="请输入住户姓名" />
  67. </el-form-item>
  68. <el-form-item label="楼层" prop="floorLevel">
  69. <el-input v-model="ruleForm.floorLevel" placeholder="请输入楼层" />
  70. </el-form-item>
  71. <el-form-item label="房间号" prop="roomNumber">
  72. <el-input v-model="ruleForm.roomNumber" placeholder="请输入房间号" />
  73. </el-form-item>
  74. <el-form-item label="电话号码" prop="phone">
  75. <el-input v-model="ruleForm.phone" placeholder="请输入电话号码" />
  76. </el-form-item>
  77. <el-form-item label="建筑面积" prop="buildingArea">
  78. <el-input v-model="ruleForm.buildingArea" placeholder="请输入建筑面积" />
  79. </el-form-item>
  80. <el-form-item label="实供面积" prop="forRealArea">
  81. <el-input v-model="ruleForm.forRealArea" placeholder="请输入实供面积" />
  82. </el-form-item>
  83. <el-form-item label="状态" prop="status">
  84. <el-radio v-model="ruleForm.status" :label="1">启用</el-radio>
  85. <el-radio v-model="ruleForm.status" :label="0">禁用</el-radio>
  86. </el-form-item>
  87. <el-form-item label="备注" prop="remark">
  88. <el-input type="textarea" :rows="8" v-model="ruleForm.remark" placeholder="请输入备注" />
  89. </el-form-item>
  90. </el-form>
  91. <template #footer>
  92. <span class="dialog-footer">
  93. <el-button @click="onCancel" size="default">取 消</el-button>
  94. <el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
  95. </span>
  96. </template>
  97. </el-dialog>
  98. </div>
  99. </template>
  100. <script lang="ts">
  101. import { reactive, toRefs, defineComponent, ref, unref, nextTick } from 'vue';
  102. import api from '/@/api/heatingDistrict';
  103. import heatApi from '/@/api/heatStation';
  104. import { ElMessage } from 'element-plus';
  105. interface RuleFormState {
  106. id?: number;
  107. name: string;
  108. organizationId: string;
  109. }
  110. export default defineComponent({
  111. name: 'edit',
  112. setup(prop, { emit }) {
  113. const formRef = ref<HTMLElement | null>(null);
  114. const state = reactive({
  115. dialogVisible: false,
  116. ruleForm: {
  117. id: 0,
  118. organizationId: '',
  119. heatStaId: '',
  120. plotId: '',
  121. floorId: '',
  122. unitId: '',
  123. name: '',
  124. floorLevel: '',
  125. roomNumber: '',
  126. phone: '',
  127. buildingArea: '',
  128. forRealArea: '',
  129. remark: '',
  130. status: 1
  131. },
  132. rules: {
  133. name: [{ required: true, message: '住户名称不能为空', trigger: ['blur', 'change'] }],
  134. organizationId: [{ required: true, message: '所属组织不能为空', trigger: ['blur', 'change'] }],
  135. plotId: [{ required: true, message: '小区名称不能为空', trigger: ['blur', 'change'] }],
  136. floorId: [{ required: true, message: '楼宇名称不能为空', trigger: ['blur', 'change'] }],
  137. unitId: [{ required: true, message: '单元名称不能为空', trigger: ['blur', 'change'] }],
  138. heatStaId: [{ required: true, message: '所属换热站不能为空', trigger: ['blur', 'change'] }],
  139. floorLevel: [{ required: true, message: '楼层不能为空', trigger: ['blur', 'change'] }],
  140. roomNumber: [{ required: true, message: '房间号不能为空', trigger: ['blur', 'change'] }],
  141. phone: [{ required: true, message: '手机号码不能为空', trigger: ['blur', 'change'] }],
  142. forRealArea: [{ required: true, message: '实供面积不能为空', trigger: ['blur', 'change'] }],
  143. buildingArea: [{ required: true, message: '建筑面积不能为空', trigger: ['blur', 'change'] }],
  144. },
  145. orgList: [],
  146. plotList: [],
  147. floorList: [],
  148. unitList: [],
  149. heatList: []
  150. })
  151. // 打开弹窗
  152. const openDialog = (row: RuleFormState | null) => {
  153. resetForm()
  154. queryTree()
  155. if (row) {
  156. (state.ruleForm as any).id = row.id
  157. getDetail()
  158. }
  159. state.dialogVisible = true
  160. }
  161. const resetForm = () => {
  162. state.ruleForm = {
  163. id: 0,
  164. organizationId: '',
  165. heatStaId: '',
  166. plotId: '',
  167. floorId: '',
  168. unitId: '',
  169. name: '',
  170. floorLevel: '',
  171. roomNumber: '',
  172. phone: '',
  173. buildingArea: '',
  174. forRealArea: '',
  175. remark: '',
  176. status: 1
  177. }
  178. }
  179. // 关闭弹窗
  180. const closeDialog = () => {
  181. state.dialogVisible = false;
  182. (formRef.value as any).clearValidate()
  183. }
  184. // 取消
  185. const onCancel = () => {
  186. closeDialog()
  187. }
  188. const queryTree = () => {
  189. heatApi.heatStation.getList({
  190. name: '',
  191. code: '',
  192. status: -1
  193. })
  194. .then((res: any) => {
  195. state.heatList = res || [];
  196. });
  197. };
  198. const getDetail = () => {
  199. api.resident.detail(state.ruleForm.id)
  200. .then((res: any) => {
  201. state.ruleForm = {
  202. ...res,
  203. heatStaId: res.heatStaId || ''
  204. }
  205. })
  206. }
  207. // 获取楼宇
  208. const getFloorList = () => {
  209. api.floor.allList({ plotId: state.ruleForm.plotId })
  210. .then((res: any) => {
  211. state.floorList = res.Info || []
  212. })
  213. }
  214. // 获取单元
  215. const getUnitList = () => {
  216. api.unit.getListByFloorId({ floorId: state.ruleForm.floorId })
  217. .then((res: any) => {
  218. (state.unitList as any) = res ? [res] : []
  219. })
  220. }
  221. const onPlotChange = () => {
  222. state.floorList = []
  223. state.unitList = []
  224. state.ruleForm.floorId = ''
  225. state.ruleForm.unitId = ''
  226. if (state.ruleForm.plotId) {
  227. getFloorList()
  228. }
  229. }
  230. const onFloorChange = () => {
  231. state.unitList = []
  232. state.ruleForm.unitId = ''
  233. if (state.ruleForm.floorId) {
  234. getUnitList()
  235. }
  236. }
  237. // 新增
  238. const onSubmit = () => {
  239. const formWrap = unref(formRef) as any
  240. if (!formWrap) return;
  241. formWrap.validate((valid: boolean) => {
  242. if (valid) {
  243. let params = { ...state.ruleForm }
  244. if (params.id) {
  245. //修改
  246. api.resident.edit(params).then(() => {
  247. ElMessage.success('单元修改成功')
  248. closeDialog() // 关闭弹窗
  249. emit('queryList')
  250. })
  251. } else {
  252. //添加
  253. api.resident.add(params).then(() => {
  254. ElMessage.success('单元添加成功')
  255. closeDialog() // 关闭弹窗
  256. emit('queryList')
  257. })
  258. }
  259. }
  260. })
  261. }
  262. return {
  263. openDialog,
  264. closeDialog,
  265. onCancel,
  266. onSubmit,
  267. formRef,
  268. onPlotChange,
  269. onFloorChange,
  270. ...toRefs(state)
  271. }
  272. }
  273. })
  274. </script>