dialogComponent.vue 7.3 KB

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