DeviceModel.vue 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  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. <el-input v-model="formData.goafDevLocation" placeholder="请输入安装地点" style="width:260px" />
  26. </el-form-item>
  27. <el-form-item label="告警阈值" required>
  28. <el-input-number v-model="formData.goafAlarmThreshold" placeholder="告警阈值" :controls="false" />
  29. </el-form-item>
  30. <el-form-item label="设备类型" required>
  31. <el-select
  32. v-model="formData.goafDevTypeId"
  33. style="width: 260px"
  34. >
  35. <el-option
  36. v-for="item in sensorCats"
  37. :key="item.sensorTypeId"
  38. :value="item.sensorTypeId"
  39. :label="item.sensorTypeName"
  40. />
  41. </el-select>
  42. </el-form-item>
  43. <el-form-item label="设备安装时间">
  44. <el-date-picker
  45. v-model="formData.goafInstallTime"
  46. type="date"
  47. placeholder="设备安装时间"
  48. format="yyyy-MM-dd"
  49. value-format="yyyy-MM-dd"
  50. style="width: 260px"
  51. />
  52. </el-form-item>
  53. <el-form-item label="设备负责人部门">
  54. <el-cascader
  55. v-model="formData.goafDevGroupid"
  56. :options="treeData"
  57. :props="{ checkStrictly: true, emitPath: false }"
  58. style="min-width: 260px"
  59. filterable
  60. clearable
  61. @change="handleChange"
  62. >
  63. <template slot-scope="{ node, data }">
  64. <span>{{ data.label }}</span>
  65. <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
  66. </template>
  67. </el-cascader>
  68. </el-form-item>
  69. <el-form-item label="责任人员" prop="executeAccountId">
  70. <el-select v-model="formData.goafDevAccountId" style="width:260px" filterable clearable @change="handleUserSelect">
  71. <el-option v-for="item in userList" :key="item.accountId" :value="item.accountId" :label="item.accountName" />
  72. </el-select>
  73. </el-form-item>
  74. </el-form>
  75. <div class="btn-group">
  76. <el-button type="primary" @click="submitForm('ruleForm')">确定</el-button>
  77. <el-button class="cancel-btn" @click="dialogVisible = false">取消</el-button>
  78. </div>
  79. </el-drawer>
  80. </template>
  81. <script>
  82. import { toTree } from '@/utils/build-tree'
  83. import { getGroupByList } from '@/api/system/groupApi'
  84. import { getUserByPage } from '@/api/system/userApi'
  85. import { getSensorCat } from '@/api/goaf/sensorCatApi'
  86. import { getGoafBaseInfo } from '@/api/goaf/info'
  87. import { createSensor, updateSensor } from '@/api/goaf/sensor'
  88. export default {
  89. name: 'SensorModel',
  90. data() {
  91. return {
  92. title: '传感器配置',
  93. ops: {
  94. bar: {
  95. keepShow: false,
  96. background: 'rgba(144, 147, 153, 0.4)',
  97. onlyShowBarOnScroll: false
  98. }
  99. },
  100. dialogVisible: false,
  101. sensorCats: [],
  102. goaf: [],
  103. formData: {
  104. goafOrebelt: 0,
  105. goafOrebody: 0,
  106. goafOreheight: 0,
  107. goafId: 0,
  108. goafName: '',
  109. goafDevLocation: '',
  110. ocId: undefined,
  111. goafDevName: '',
  112. goafDevTypename: '',
  113. goafDevTypeId: '',
  114. goafDevAccountId: undefined,
  115. goafDevGroupid: '',
  116. goafDevAccountName: '',
  117. goafInstallTime: '',
  118. goafAlarmThreshold: 0
  119. },
  120. rules: {},
  121. ctrlLevelList: [],
  122. positionList: [],
  123. viewData: {},
  124. actionType: '',
  125. treeData: [],
  126. userList: [],
  127. goafOrebelts: [],
  128. goafOrebodys: [],
  129. goafOreheights: [],
  130. goafNames: [],
  131. groupList: []
  132. }
  133. },
  134. mounted() {
  135. this.init()
  136. },
  137. methods: {
  138. init() {
  139. getSensorCat().then((res) => {
  140. this.sensorCats = res.data.filter(item => item.sensorTypeName.includes('传感器'))
  141. })
  142. getGoafBaseInfo().then((res) => {
  143. this.goaf = res.data
  144. this.goafOrebelts = this.unique(res.data, 'goafOrebelt')
  145. this.goafOrebodys = res.data
  146. this.goafOreheights = res.data
  147. this.goafNames = res.data
  148. })
  149. getGroupByList().then((resp) => {
  150. const { code, data } = resp
  151. if (code === 0) {
  152. const temp = toTree(
  153. data,
  154. {
  155. value: 'value',
  156. name: 'label',
  157. pValue: 'parentId'
  158. },
  159. {
  160. value: 'groupId',
  161. name: 'groupName',
  162. pValue: 'parentId'
  163. }
  164. )
  165. this.treeData = temp
  166. this.groupList = data
  167. }
  168. })
  169. getUserByPage({
  170. page: 1,
  171. limit: 999999
  172. }).then((resp) => {
  173. const { data } = resp
  174. this.userList = data
  175. })
  176. },
  177. handleChange(groupId) {
  178. this.formData.goafDevAccountId = ''
  179. this.formData.goafDevAccountName = ''
  180. getUserByPage({
  181. page: 1,
  182. limit: 999999,
  183. keyword: '',
  184. groupId
  185. }).then((resp) => {
  186. const { data } = resp
  187. this.userList = data
  188. })
  189. },
  190. // Show Add Dialog
  191. showAddModel() {
  192. this.resetFormData()
  193. this.actionType = 'ADD'
  194. this.title = '新增传感器配置'
  195. this.dialogVisible = true
  196. },
  197. // Show Edit Dialog
  198. showEditModel(data) {
  199. this.resetFormData()
  200. this.actionType = 'UPDATE'
  201. this.title = '修改传感器配置'
  202. this.dialogVisible = true
  203. // Life minus one
  204. const sensorCat = this.sensorCats.filter(
  205. (item) => item.sensorTypeName === data.goafDevTypename
  206. )[0]
  207. this.formData = {
  208. ...data,
  209. goafDevTypeId: sensorCat.sensorTypeId
  210. }
  211. },
  212. // Reset Form Data
  213. resetFormData() {
  214. this.formData = {
  215. goafOrebelt: 0,
  216. goafOrebody: 0,
  217. goafOreheight: 0,
  218. goafId: 0,
  219. goafName: '',
  220. goafDevLocation: '',
  221. ocId: undefined,
  222. goafDevName: '',
  223. goafDevTypename: '',
  224. goafDevAccountId: undefined,
  225. goafDevAccountName: '',
  226. goafInstallTime: '',
  227. goafAlarmThreshold: 0,
  228. goafDevGroupid: ''
  229. }
  230. },
  231. handleUserSelect(accountId) {
  232. const item = this.userList.filter((item) => item.accountId === accountId)
  233. const user = item[0]
  234. this.formData.groupId = user.groupId
  235. this.formData.goafDevGroupname = user.groupName
  236. this.formData.goafDevAccountName = user.accountName
  237. this.formData.positionId = user.positionId
  238. this.formData.positionName = user.positionName
  239. },
  240. // 提交
  241. submitForm(formName) {
  242. this.formData.goafDevGroupname = this.groupList.filter(item => item.groupId === this.formData.goafDevGroupid)[0].groupName
  243. const sensorCat = this.sensorCats.filter(
  244. (item) => item.sensorTypeId === this.formData.goafDevTypeId
  245. )[0]
  246. this.formData.goafDevTypename = sensorCat.sensorTypeName
  247. this.formData.ocId = sensorCat.ocId
  248. this.$refs[formName].validate((valid) => {
  249. if (valid) {
  250. if (
  251. this.formData.goafId === undefined ||
  252. this.formData.goafId === 'undefined' ||
  253. this.formData.goafId === ''
  254. ) {
  255. this.$message.error('请选择采空区!')
  256. return
  257. }
  258. switch (this.actionType) {
  259. case 'ADD':
  260. createSensor(this.formData)
  261. .then((resp) => {
  262. const { code, msg } = resp
  263. if (code === 0) {
  264. this.dialogVisible = false
  265. this.$message.success(msg)
  266. this.formSuccess()
  267. } else {
  268. this.$message.error(msg)
  269. }
  270. })
  271. .catch((error) => {
  272. console.log(error)
  273. })
  274. break
  275. case 'UPDATE':
  276. updateSensor(this.formData)
  277. .then((resp) => {
  278. const { code, msg } = resp
  279. if (code === 0) {
  280. this.dialogVisible = false
  281. this.$message.success(msg)
  282. this.formSuccess()
  283. } else {
  284. this.$message.error(msg)
  285. }
  286. })
  287. .catch((error) => {
  288. console.log(error)
  289. })
  290. break
  291. }
  292. } else {
  293. this.$message.error('error submit!!')
  294. return false
  295. }
  296. })
  297. },
  298. handleSelectUser(item) {
  299. console.log({ item })
  300. },
  301. formSuccess() {
  302. this.$emit('formSuccess')
  303. },
  304. resetFormField(formName) {
  305. this.$refs[formName].resetFields()
  306. },
  307. unique(arr = [], name = 'name') {
  308. const res = new Map()
  309. return arr.filter((item) => !res.has(item[name]) && res.set(item[name], 1))
  310. },
  311. deeepClone(params) {
  312. return JSON.parse(JSON.stringify(params))
  313. }
  314. }
  315. }
  316. </script>
  317. <style lang="scss" scoped>
  318. .btn-group {
  319. padding-left: 160px;
  320. margin-top: 50px;
  321. }
  322. .safe-area {
  323. color: #fff;
  324. display: flex;
  325. flex-wrap: wrap;
  326. .safe-area-item {
  327. margin: 0 5px 10px 0;
  328. width: 20%;
  329. min-width: 120px;
  330. }
  331. .el-input__inner {
  332. text-align: left !important;
  333. }
  334. }
  335. ::v-deep.el-select-tree {
  336. .label {
  337. color: #606266 !important;
  338. }
  339. .el-tree-node.is-current > .el-tree-node__content,
  340. .el-tree-node__content:hover {
  341. background-color: #fff !important;
  342. color: #606266;
  343. }
  344. }
  345. </style>