CameraModel.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. <template>
  2. <el-drawer
  3. :title="title"
  4. :modal-append-to-body="false"
  5. :modal="false"
  6. :wrapper-closable="false"
  7. size="36%"
  8. :visible.sync="dialogVisible"
  9. >
  10. <el-form
  11. ref="ruleForm"
  12. :model="formData"
  13. :rules="rules"
  14. label-position="right"
  15. label-width="160px"
  16. >
  17. <el-form-item label="设备名称" required>
  18. <el-input
  19. v-model="formData.goafDevName"
  20. placeholder="请输入设备名称"
  21. style="width: 260px"
  22. />
  23. </el-form-item>
  24. <el-form-item label="安装区域" required>
  25. <div class="safe-area">
  26. <el-select
  27. v-model="formData.goafOrebelt"
  28. class="safe-area-item"
  29. filterable
  30. placeholder="矿带"
  31. @change="changeArea(1)"
  32. >
  33. <el-option :value="0" label="请选择矿带" disabled />
  34. <el-option
  35. v-for="(item, index) in goafOrebelts"
  36. :key="index"
  37. :value="item.goafOrebelt"
  38. :label="item.goafOrebelt"
  39. />
  40. </el-select>
  41. <el-select
  42. v-model="formData.goafOrebody"
  43. class="safe-area-item"
  44. filterable
  45. placeholder="矿体"
  46. @change="changeArea(2)"
  47. >
  48. <el-option :value="0" label="请选择矿体" disabled />
  49. <el-option
  50. v-for="(item, index) in goafOrebodys"
  51. :key="index"
  52. :value="item.goafOrebody"
  53. :label="item.goafOrebody"
  54. />
  55. </el-select>
  56. <el-select
  57. v-model="formData.goafOreheight"
  58. class="safe-area-item"
  59. filterable
  60. placeholder="中段"
  61. @change="changeArea(3)"
  62. >
  63. <el-option :value="0" label="请选择中段" disabled />
  64. <el-option
  65. v-for="(item, index) in goafOreheights"
  66. :key="index"
  67. :value="item.goafOreheight"
  68. :label="item.goafOreheight"
  69. />
  70. </el-select>
  71. <el-select
  72. v-model="formData.goafId"
  73. class="safe-area-item"
  74. filterable
  75. placeholder="采空区名称"
  76. @change="changeArea(4)"
  77. >
  78. <el-option :value="0" label="请选择采空区" disabled />
  79. <el-option
  80. v-for="item in goafNames"
  81. :key="item.goafId"
  82. :value="item.goafId"
  83. :label="item.goafName"
  84. />
  85. </el-select>
  86. </div>
  87. </el-form-item>
  88. <el-form-item label="安装地点" required>
  89. <el-input v-model="formData.goafDevLocation" placeholder="请输入安装地点" style="width:260px" />
  90. </el-form-item>
  91. <el-form-item label="设备类型" required>
  92. <el-select
  93. v-model="formData.goafDevTypeId"
  94. style="width: 260px"
  95. >
  96. <el-option
  97. v-for="item in sensorCats"
  98. :key="item.sensorTypeId"
  99. :value="item.sensorTypeId"
  100. :label="item.sensorTypeName"
  101. />
  102. </el-select>
  103. </el-form-item>
  104. <el-form-item label="设备安装时间">
  105. <el-date-picker
  106. v-model="formData.goafInstallTime"
  107. type="date"
  108. placeholder="设备安装时间"
  109. format="yyyy-MM-dd"
  110. value-format="yyyy-MM-dd"
  111. style="width: 260px"
  112. />
  113. </el-form-item>
  114. <el-form-item label="设备负责人部门">
  115. <el-cascader
  116. v-model="formData.goafDevGroupid"
  117. :options="treeData"
  118. :props="{ checkStrictly: true, emitPath: false }"
  119. style="min-width: 260px"
  120. filterable
  121. clearable
  122. @change="handleChange"
  123. >
  124. <template slot-scope="{ node, data }">
  125. <span>{{ data.label }}</span>
  126. <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
  127. </template>
  128. </el-cascader>
  129. </el-form-item>
  130. <el-form-item label="责任人员" prop="executeAccountId">
  131. <el-select v-model="formData.goafDevAccountId" style="width:260px" filterable clearable @change="handleUserSelect">
  132. <el-option v-for="item in userList" :key="item.accountId" :value="item.accountId" :label="item.accountName" />
  133. </el-select>
  134. </el-form-item>
  135. </el-form>
  136. <div class="btn-group">
  137. <el-button type="primary" @click="submitForm('ruleForm')">确定</el-button>
  138. <el-button class="cancel-btn" @click="dialogVisible = false">取消</el-button>
  139. </div>
  140. </el-drawer>
  141. </template>
  142. <script>
  143. import { toTree } from '@/utils/build-tree'
  144. import { getGroupByList } from '@/api/system/groupApi'
  145. import { getUserByPage } from '@/api/system/userApi'
  146. import { getSensorCat } from '@/api/goaf/sensorCatApi'
  147. import { getGoafBaseInfo } from '@/api/goaf/info'
  148. import { createSensor, updateSensor } from '@/api/goaf/sensor'
  149. export default {
  150. name: 'CameraModel',
  151. data() {
  152. return {
  153. title: '摄像头配置',
  154. ops: {
  155. bar: {
  156. keepShow: false,
  157. background: 'rgba(144, 147, 153, 0.4)',
  158. onlyShowBarOnScroll: false
  159. }
  160. },
  161. dialogVisible: false,
  162. sensorCats: [],
  163. goaf: [],
  164. formData: {
  165. goafOrebelt: 0,
  166. goafOrebody: 0,
  167. goafOreheight: 0,
  168. goafId: 0,
  169. goafName: '',
  170. goafDevLocation: '',
  171. ocId: undefined,
  172. goafDevName: '',
  173. goafDevTypename: '',
  174. goafDevTypeId: '',
  175. goafDevAccountId: undefined,
  176. goafDevGroupid: '',
  177. goafDevAccountName: '',
  178. goafInstallTime: ''
  179. },
  180. rules: {},
  181. ctrlLevelList: [],
  182. positionList: [],
  183. viewData: {},
  184. actionType: '',
  185. treeData: [],
  186. userList: [],
  187. goafOrebelts: [],
  188. goafOrebodys: [],
  189. goafOreheights: [],
  190. goafNames: [],
  191. groupList: []
  192. }
  193. },
  194. mounted() {
  195. this.init()
  196. },
  197. methods: {
  198. init() {
  199. getSensorCat().then((res) => {
  200. this.sensorCats = res.data.filter(item => item.sensorTypeName.includes('摄像头'))
  201. })
  202. getGoafBaseInfo().then((res) => {
  203. this.goaf = res.data
  204. this.goafOrebelts = res.data
  205. this.goafOrebodys = res.data
  206. this.goafOreheights = res.data
  207. this.goafNames = res.data
  208. })
  209. getGroupByList().then((resp) => {
  210. const { code, data } = resp
  211. if (code === 0) {
  212. const temp = toTree(
  213. data,
  214. {
  215. value: 'value',
  216. name: 'label',
  217. pValue: 'parentId'
  218. },
  219. {
  220. value: 'groupId',
  221. name: 'groupName',
  222. pValue: 'parentId'
  223. }
  224. )
  225. this.treeData = temp
  226. this.groupList = data
  227. }
  228. })
  229. getUserByPage({
  230. page: 1,
  231. limit: 999999
  232. }).then((resp) => {
  233. const { data } = resp
  234. this.userList = data
  235. })
  236. },
  237. handleChange(groupId) {
  238. this.formData.goafDevAccountId = ''
  239. this.formData.goafDevAccountName = ''
  240. getUserByPage({
  241. page: 1,
  242. limit: 999999,
  243. keyword: '',
  244. groupId
  245. }).then((resp) => {
  246. const { data } = resp
  247. this.userList = data
  248. })
  249. },
  250. changeArea(type) {
  251. const goafOrebelts = this.deeepClone(this.goafOrebelts)
  252. let goafOrebodys = this.deeepClone(this.goafOrebodys)
  253. let goafOreheights = this.deeepClone(this.goafOreheights)
  254. let goafNames = this.deeepClone(this.goafNames)
  255. if (type === 1) {
  256. goafOrebodys = goafOrebelts.filter(
  257. (item) => item.goafOrebelt === this.formData.goafOrebelt
  258. )
  259. // goafOrebodys = this.unique(goafOrebodys, 'goafOrebelt')
  260. this.goafOrebodys = goafOrebodys
  261. this.goafOreheights = []
  262. this.goafNames = []
  263. this.formData.goafOrebody = ''
  264. this.formData.goafOreheight = ''
  265. this.formData.goafId = ''
  266. } else if (type === 2) {
  267. goafOreheights = goafOrebodys.filter(
  268. (item) => item.goafOrebody === this.formData.goafOrebody
  269. )
  270. // goafOreheights = this.unique(goafOreheights, 'goafOreheight')
  271. this.goafOreheights = goafOreheights
  272. this.goafNames = []
  273. this.formData.goafOreheights = ''
  274. this.formData.goafId = ''
  275. } else if (type === 3) {
  276. goafNames = goafOreheights.filter(
  277. (item) => item.goafOreheight === this.formData.goafOreheight
  278. )
  279. // goafNames = this.unique(goafNames, 'goafName')
  280. this.goafNames = goafNames
  281. this.formData.goafId = ''
  282. } else {
  283. for (let i = 0; i < goafNames.length; i++) {
  284. if (this.formData.goafId === goafNames[i].goafId) {
  285. this.formData.goafName = goafNames[i].goafName
  286. }
  287. }
  288. }
  289. this.$forceUpdate()
  290. },
  291. // Show Add Dialog
  292. showAddModel() {
  293. this.resetFormData()
  294. this.actionType = 'ADD'
  295. this.title = '新增摄像头配置'
  296. this.dialogVisible = true
  297. },
  298. // Show Edit Dialog
  299. showEditModel(data) {
  300. this.resetFormData()
  301. this.actionType = 'UPDATE'
  302. this.title = '修改摄像头配置'
  303. this.dialogVisible = true
  304. // Life minus one
  305. const sensorCat = this.sensorCats.filter(
  306. (item) => item.sensorTypeName === data.goafDevTypename
  307. )[0]
  308. this.formData = {
  309. ...data,
  310. goafDevTypeId: sensorCat.sensorTypeId
  311. }
  312. },
  313. // Reset Form Data
  314. resetFormData() {
  315. this.formData = {
  316. goafOrebelt: 0,
  317. goafOrebody: 0,
  318. goafOreheight: 0,
  319. goafId: 0,
  320. goafName: '',
  321. goafDevLocation: '',
  322. ocId: undefined,
  323. goafDevName: '',
  324. goafDevTypename: '',
  325. goafDevAccountId: undefined,
  326. goafDevAccountName: '',
  327. goafInstallTime: '',
  328. goafDevGroupid: ''
  329. }
  330. },
  331. handleUserSelect(accountId) {
  332. const item = this.userList.filter((item) => item.accountId === accountId)
  333. const user = item[0]
  334. this.formData.groupId = user.groupId
  335. this.formData.goafDevGroupname = user.groupName
  336. this.formData.goafDevAccountName = user.accountName
  337. this.formData.positionId = user.positionId
  338. this.formData.positionName = user.positionName
  339. },
  340. // 提交
  341. submitForm(formName) {
  342. this.formData.goafDevGroupname = this.groupList.filter(item => item.groupId === this.formData.goafDevGroupid)[0].groupName
  343. const sensorCat = this.sensorCats.filter(
  344. (item) => item.sensorTypeId === this.formData.goafDevTypeId
  345. )[0]
  346. this.formData.goafDevTypename = sensorCat.sensorTypeName
  347. this.formData.ocId = sensorCat.ocId
  348. this.$refs[formName].validate((valid) => {
  349. if (valid) {
  350. if (
  351. this.formData.goafId === undefined ||
  352. this.formData.goafId === 'undefined' ||
  353. this.formData.goafId === ''
  354. ) {
  355. this.$message.error('请选择采空区!')
  356. return
  357. }
  358. switch (this.actionType) {
  359. case 'ADD':
  360. createSensor(this.formData)
  361. .then((resp) => {
  362. const { code, msg } = resp
  363. if (code === 0) {
  364. this.dialogVisible = false
  365. this.$message.success(msg)
  366. this.formSuccess()
  367. } else {
  368. this.$message.error(msg)
  369. }
  370. })
  371. .catch((error) => {
  372. console.log(error)
  373. })
  374. break
  375. case 'UPDATE':
  376. updateSensor(this.formData)
  377. .then((resp) => {
  378. const { code, msg } = resp
  379. if (code === 0) {
  380. this.dialogVisible = false
  381. this.$message.success(msg)
  382. this.formSuccess()
  383. } else {
  384. this.$message.error(msg)
  385. }
  386. })
  387. .catch((error) => {
  388. console.log(error)
  389. })
  390. break
  391. }
  392. } else {
  393. this.$message.error('error submit!!')
  394. return false
  395. }
  396. })
  397. },
  398. handleSelectUser(item) {
  399. console.log({ item })
  400. },
  401. formSuccess() {
  402. this.$emit('formSuccess')
  403. },
  404. resetFormField(formName) {
  405. this.$refs[formName].resetFields()
  406. },
  407. unique(arr = [], name = 'name') {
  408. const res = new Map()
  409. return arr.filter((item) => !res.has(item[name]) && res.set(item[name], 1))
  410. },
  411. deeepClone(params) {
  412. return JSON.parse(JSON.stringify(params))
  413. }
  414. }
  415. }
  416. </script>
  417. <style lang="scss" scoped>
  418. .btn-group {
  419. padding-left: 160px;
  420. margin-top: 50px;
  421. }
  422. .safe-area {
  423. color: #fff;
  424. display: flex;
  425. flex-wrap: wrap;
  426. .safe-area-item {
  427. margin: 0 5px 10px 0;
  428. width: 20%;
  429. min-width: 120px;
  430. }
  431. .el-input__inner {
  432. text-align: left !important;
  433. }
  434. }
  435. ::v-deep.el-select-tree {
  436. .label {
  437. color: #606266 !important;
  438. }
  439. .el-tree-node.is-current > .el-tree-node__content,
  440. .el-tree-node__content:hover {
  441. background-color: #fff !important;
  442. color: #606266;
  443. }
  444. }
  445. </style>