video-device-form.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <template>
  2. <div>
  3. <el-dialog :modal-append-to-body="true" :append-to-body="true" :title="title" :before-close="beforeClose"
  4. :center="true" :visible.sync="dialogShow" width="45%" :close-on-click-modal="false" top="4%">
  5. <avue-form ref="avueForm" :option="option" v-model="model" @submit="submit"></avue-form>
  6. </el-dialog>
  7. </div>
  8. </template>
  9. <script>
  10. import {
  11. update
  12. } from "@/api/device/gb/gbdevicechannel.js"
  13. import {
  14. deepClone
  15. } from '@/util/util.js'
  16. export default {
  17. data() {
  18. return {
  19. isAdd: false,
  20. dialogShow: false,
  21. model: {},
  22. option: {
  23. detail: true,
  24. labelWidth: 110,
  25. group: [{
  26. label: '基本信息',
  27. prop: 'group1',
  28. column: [{
  29. label: "设备编号",
  30. prop: "deviceId",
  31. overHidden: true,
  32. disabled: true,
  33. rules: [{
  34. required: false,
  35. message: "请输入设备编号",
  36. trigger: "blur"
  37. }]
  38. }, {
  39. label: "设备名称",
  40. prop: "name",
  41. labelWidth: 100,
  42. width: 150,
  43. rules: [{
  44. required: true,
  45. message: "请输入设备名称",
  46. trigger: "blur"
  47. }],
  48. },
  49. {
  50. label: "厂商名称",
  51. prop: "manufacture",
  52. },
  53. {
  54. label: "型号",
  55. prop: "model",
  56. hide: true,
  57. disabled: true,
  58. },
  59. {
  60. label: "ip地址",
  61. prop: "ipAddress",
  62. hide: true,
  63. disabled: true,
  64. },
  65. {
  66. label: "端口号",
  67. prop: "port",
  68. hide: true,
  69. disabled: true,
  70. },
  71. {
  72. label: "云台类型",
  73. prop: "ptzType",
  74. slot: true,
  75. search: true,
  76. type: "select",
  77. width: 100,
  78. align: "center",
  79. disabled: true,
  80. dicData: [{
  81. label: "未知",
  82. value: 0
  83. },
  84. {
  85. label: "球机",
  86. value: 1
  87. },
  88. {
  89. label: "半球",
  90. value: 2
  91. },
  92. {
  93. label: "固定枪机",
  94. value: 3
  95. },
  96. {
  97. label: "遥控枪机",
  98. value: 4
  99. }
  100. ]
  101. },
  102. {
  103. label: "是否有音频",
  104. prop: "hasAudio",
  105. slot: true,
  106. search: true,
  107. type: "select",
  108. width: 100,
  109. align: "center",
  110. dicData: [{
  111. label: "有",
  112. value: true
  113. },
  114. {
  115. label: "无",
  116. value: false
  117. }
  118. ]
  119. },
  120. ]
  121. }, {
  122. label: '所属信息',
  123. prop: 'group2',
  124. column: [{
  125. label: "所属园区",
  126. prop: "agencyId",
  127. type: "select",
  128. search: true,
  129. remote: true,
  130. searchSpan: 4,
  131. searchFilterable: true,
  132. hide: true,
  133. dataType: "string",
  134. cascaderItem: ['residentialId'],
  135. dicUrl: "/api/cyzh-community/agency/list?size=500&id={{key}}",
  136. dicFormatter: (res) => {
  137. return res.data.records; //返回字典的层级结构
  138. },
  139. props: {
  140. label: "name",
  141. value: "id"
  142. },
  143. rules: [{
  144. required: false,
  145. message: "请选择所属区域",
  146. trigger: "change"
  147. }],
  148. },
  149. {
  150. label: "所属区域",
  151. prop: "residentialId",
  152. type: "select",
  153. search: true,
  154. searchSpan: 4,
  155. searchFilterable: true,
  156. hide: true,
  157. cascaderItem: ['buildingId'],
  158. dicUrl: "/api/cyzh-community/residential/list?size=500&agencyId={{key}}",
  159. dicFormatter: (res) => {
  160. return res.data.records; //返回字典的层级结构
  161. },
  162. dateType: "string",
  163. props: {
  164. label: "name",
  165. value: "id"
  166. },
  167. rules: [{
  168. required: true,
  169. message: "请选择所属区域",
  170. trigger: "change"
  171. }],
  172. },
  173. {
  174. label: "所属楼栋",
  175. prop: "buildingId",
  176. type: "select",
  177. search: true,
  178. searchSpan: 4,
  179. searchFilterable: true,
  180. hide: true,
  181. cascaderItem: ['unitId'],
  182. dicUrl: "/api/cyzh-community/building/list?size=500&residentialId={{key}}",
  183. dicFormatter: (res) => {
  184. return res.data.records; //返回字典的层级结构
  185. },
  186. props: {
  187. label: "name",
  188. value: "id"
  189. },
  190. rules: [{
  191. required: false,
  192. message: "请选择所属楼栋",
  193. trigger: "change"
  194. }],
  195. },
  196. {
  197. label: "所属楼层",
  198. prop: "floorId",
  199. type: "select",
  200. search: true,
  201. searchFilterable: true,
  202. hide: true,
  203. searchSpan: 4,
  204. dateType: "string",
  205. dicUrl: "/api/cyzh-community/floor/list?size=500",
  206. dicFormatter: (res) => {
  207. return res.data.records; //返回字典的层级结构
  208. },
  209. props: {
  210. label: "name",
  211. value: "id"
  212. },
  213. rules: [{
  214. required: false,
  215. message: "请选择所属楼层",
  216. trigger: "change"
  217. }],
  218. },
  219. ]
  220. }, {
  221. label: '位置信息',
  222. prop: 'group3',
  223. column: [{
  224. label: "经度",
  225. prop: "longitude",
  226. width: 100,
  227. overHidden: true,
  228. disabled: true,
  229. hide: true,
  230. rules: [{
  231. required: false,
  232. message: "请输入经度",
  233. trigger: "blur"
  234. }]
  235. },
  236. {
  237. label: "纬度",
  238. prop: "latitude",
  239. width: 100,
  240. overHidden: true,
  241. disabled: true,
  242. hide: true,
  243. rules: [{
  244. required: false,
  245. message: "请输入纬度",
  246. trigger: "blur"
  247. }]
  248. },
  249. {
  250. label: "安装地址",
  251. prop: "address",
  252. hide: true,
  253. overHidden: true,
  254. rules: [{
  255. required: false,
  256. message: "请输入具体地址",
  257. trigger: "blur"
  258. }]
  259. },
  260. ]
  261. }],
  262. }
  263. }
  264. },
  265. computed: {
  266. title() {
  267. if (this.isAdd) {
  268. return '添加监控设备'
  269. }
  270. if (this.option.detail) {
  271. return '监控设备详情'
  272. } else {
  273. return '编辑监控设备'
  274. }
  275. }
  276. },
  277. methods: {
  278. showDialog(model, detail = true) {
  279. this.isAdd = false
  280. this.model = model
  281. this.option.detail = detail
  282. this.dialogShow = true
  283. },
  284. showAddForm(model) {
  285. this.isAdd = true
  286. this.dialogShow = true
  287. this.option.detail = false
  288. this.model = model
  289. },
  290. beforeClose(done) {
  291. console.log("close");
  292. this.$refs.avueForm.resetForm()
  293. done()
  294. this.$emit('closed')
  295. },
  296. async submit(form, done) {
  297. let data = deepClone(form)
  298. let res = await update(data)
  299. done()
  300. if (res.data.success) {
  301. this.dialogShow = false;
  302. this.$refs.avueForm.resetForm()
  303. this.$message.success('操作成功')
  304. this.$emit('reloadData', res.data.data)
  305. } else {
  306. this.$message.success('操作失败')
  307. }
  308. },
  309. }
  310. }
  311. </script>
  312. x