Model.vue 12 KB

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