dialogComponent.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. <template>
  2. <el-dialog
  3. :title="dialogTitle"
  4. v-model="dialogVisible"
  5. width="640px"
  6. @close="closeDialog()"
  7. @open="open"
  8. >
  9. <el-form
  10. ref="formInfo"
  11. :model="form"
  12. class="demo-form-inline"
  13. label-width="100px"
  14. :rules="rules"
  15. >
  16. <el-form-item label="设备名称:" prop="deviceName">
  17. <el-input v-model="form.deviceName"></el-input>
  18. </el-form-item>
  19. <el-form-item label="设备编号:" prop="deviceCode">
  20. <el-input v-model="form.deviceCode"></el-input>
  21. </el-form-item>
  22. <el-form-item label="楼层:" prop="floor">
  23. <el-input-number
  24. v-model="form.floor"
  25. controls-position="right"
  26. :min="0"
  27. :max="255"
  28. ></el-input-number>
  29. </el-form-item>
  30. <el-form-item label="所属站点:" prop="siteId">
  31. <el-select
  32. v-model="form.siteId"
  33. :disabled="
  34. deviceNumDataContent != '' &&
  35. form.siteId != null &&
  36. form.siteId != ''
  37. ? true
  38. : false
  39. "
  40. placeholder="请选择所属站点"
  41. >
  42. <el-option
  43. v-for="item in store.state.siteList"
  44. :key="item.value"
  45. :label="item.siteName"
  46. :value="item.id"
  47. ></el-option>
  48. </el-select>
  49. </el-form-item>
  50. <el-form-item label="设备安装位置:" prop="deviceAddress">
  51. <el-input v-model="form.deviceAddress"></el-input>
  52. </el-form-item>
  53. <el-form-item label="设备类型:" prop="deviceType">
  54. <el-select
  55. v-model="form.deviceType"
  56. placeholder="请选择设备类型"
  57. disabled
  58. v-if="dialogTitle == '编辑'"
  59. >
  60. <el-option
  61. v-for="item in deviceType"
  62. :key="item.value"
  63. :label="item.label"
  64. :value="item.value"
  65. ></el-option>
  66. </el-select>
  67. <el-select
  68. v-model="form.deviceType"
  69. placeholder="请选择设备类型"
  70. v-else
  71. >
  72. <el-option
  73. v-for="item in deviceType"
  74. :key="item.value"
  75. :label="item.label"
  76. :value="item.value"
  77. ></el-option>
  78. </el-select>
  79. </el-form-item>
  80. <el-form-item label="sim卡" prop="sim">
  81. <el-input v-model="form.sim"></el-input>
  82. </el-form-item>
  83. <br />
  84. <br />
  85. <br />
  86. <div style="text-align: right">
  87. <el-button @click="closeDialog(0)">取消</el-button>
  88. <el-button type="primary" @click="submitForm()">保存</el-button>
  89. </div>
  90. </el-form>
  91. </el-dialog>
  92. </template>
  93. <script>
  94. import { useStore } from 'vuex'
  95. import { defineComponent, ref, watchEffect } from 'vue'
  96. import * as api from '@/api/siteManage/camera.js'
  97. import { ElMessage } from 'element-plus'
  98. export default defineComponent({
  99. name: 'DialogComponent',
  100. emits: ['closeDialog'],
  101. props: {
  102. flag: Boolean,
  103. dialogTitle: String,
  104. itemInfo: Object,
  105. },
  106. setup(props, context) {
  107. context
  108. const store = useStore()
  109. const dialogVisible = ref(false)
  110. const formInfo = ref(null)
  111. const form = ref([])
  112. const siteList = ref([])
  113. // open(): Dialog弹窗打开之前做的事
  114. const open = () => {
  115. store.commit('publicSiteList')
  116. form.value = props.itemInfo.value
  117. }
  118. // 关闭弹框
  119. const closeDialog = () => {
  120. context.emit('closeDialog', false)
  121. dialogVisible.value = false
  122. resetForm()
  123. }
  124. function resetForm() {
  125. formInfo.value.resetFields()
  126. }
  127. watchEffect((fn, options) => {
  128. fn, options
  129. dialogVisible.value = props.flag
  130. })
  131. const roleValid = (rule, value, callback) => {
  132. rule
  133. if (value.length === 0) {
  134. callback(new Error('角色不能为空'))
  135. } else {
  136. callback()
  137. }
  138. }
  139. // 保存-修改操作
  140. const submitForm = () => {
  141. formInfo.value.validate((valid) => {
  142. if (valid) {
  143. // form.value.siteId =18
  144. if (props.dialogTitle === '新增') {
  145. api.correspondDeviceAdd(form.value).then((requset) => {
  146. if (requset.status === 'SUCCESS') {
  147. ElMessage.success({
  148. message: '新增成功',
  149. type: 'success',
  150. })
  151. closeDialog()
  152. } else {
  153. ElMessage.error(requset.msg)
  154. }
  155. })
  156. } else {
  157. api.correspondDeviceUpdate(form.value).then((requset) => {
  158. if (requset.status === 'SUCCESS') {
  159. ElMessage.success({
  160. message: '修改成功',
  161. type: 'success',
  162. })
  163. closeDialog()
  164. } else {
  165. ElMessage.error(requset.msg)
  166. }
  167. })
  168. }
  169. } else {
  170. console.log('error submit!!')
  171. return false
  172. }
  173. })
  174. }
  175. return {
  176. store,
  177. // ...toRefs(state),
  178. closeDialog,
  179. dialogVisible,
  180. roleValid,
  181. formInfo,
  182. siteList,
  183. form,
  184. open,
  185. submitForm,
  186. rules: {
  187. deviceName: [
  188. { required: true, message: '请输入设备名称', trigger: 'blur' },
  189. ],
  190. deviceCode: [
  191. { required: true, message: '请输入设备编号', trigger: 'blur' },
  192. ],
  193. floor: [{ required: true, message: '请选择所属楼层', trigger: 'blur' }],
  194. siteId: [
  195. {
  196. required: true,
  197. message: '请选择所属站点',
  198. trigger: 'blur',
  199. },
  200. ],
  201. deviceAddress: [
  202. { required: true, message: '请输入设备安装位置', trigger: 'blur' },
  203. ],
  204. deviceType: [
  205. { required: true, message: '请选择设备类型', trigger: 'change' },
  206. ],
  207. sim: [{ required: true, message: '请输入sim卡号', trigger: 'blur' }],
  208. },
  209. deviceType: ref([
  210. {
  211. value: 1,
  212. label: '183用电设备',
  213. },
  214. {
  215. value: 2,
  216. label: '视频监控设备',
  217. },
  218. {
  219. value: 3,
  220. label: '171用电设备',
  221. },
  222. {
  223. value: 4,
  224. label: '173用电设备',
  225. },
  226. {
  227. value: 5,
  228. label: '158智能网关',
  229. },
  230. {
  231. value: 6,
  232. label: '其他',
  233. },
  234. ]),
  235. }
  236. },
  237. })
  238. </script>
  239. <style scoped lang="scss">
  240. .el-input,
  241. .el-select {
  242. width: 240px;
  243. }
  244. // label样式
  245. .el-form-item__label {
  246. width: 150px;
  247. }
  248. .el-form-item__content {
  249. margin-left: 150px;
  250. }
  251. </style>