阅行客电子档案
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

557 lines
25 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <template>
  2. <div>
  3. <!--工具栏-->
  4. <div class="head-container" style="display: flex; justify-content: space-between; align-items: center;">
  5. <div class="head-search" style="margin-bottom: 0;">
  6. <el-select v-model="deviceType" class="filter-item" placeholder="设备类型选择" @change="crud.toQuery">
  7. <el-option :key="0" label="全部" value="" />
  8. <el-option v-for="item in deviceTypeOptions" :key="item.id" :label="item.name" :value="item.id" />
  9. </el-select>
  10. <el-input v-model="query.ruleName" clearable size="small" placeholder="输入设备编号或名称" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
  11. <rrOperation />
  12. </div>
  13. <crudOperation :permission="permission">
  14. <template v-slot:left>
  15. <el-button v-permission="permission.add" size="mini" @click="deviceSelectVisible = true">
  16. <i class="iconfont icon-xinzeng" />
  17. 新增
  18. </el-button>
  19. </template>
  20. <template v-slot:right>
  21. <el-button slot="reference" v-permission="permission.del" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">
  22. <i class="iconfont icon-shanchu" />
  23. 删除
  24. </el-button>
  25. </template>
  26. </crudOperation>
  27. </div>
  28. <!--表单组件-->
  29. <el-dialog
  30. :close-on-click-modal="false"
  31. :modal-append-to-body="false"
  32. append-to-body
  33. :before-close="handleCloseDialog"
  34. :visible.sync="deviceSelectVisible"
  35. title="新增设备-选择设备类型"
  36. >
  37. <div class="setting-dialog">
  38. <el-form ref="deviceForm" inline :model="deviceForm" size="small" label-width="90px">
  39. <el-form-item label="设备类型" prop="deviceType" :rules="[{ required:true, message:'请选择设备类型', trigger:'change'}]">
  40. <el-select v-model="deviceForm.deviceType" class="filter-item" value-key="id" placeholder="设备类型" style="width: 550px;">
  41. <el-option v-for="item in deviceTypeOptions" :key="item.id" :label="item.name" :value="item" />
  42. </el-select>
  43. </el-form-item>
  44. </el-form>
  45. <div slot="footer" class="dialog-footer">
  46. <el-button type="text" @click="handleCloseDialog">取消</el-button>
  47. <el-button :loading="crud.status.cu === 2" type="primary" @click="handleComfirmDevice">确定</el-button>
  48. </div>
  49. </div>
  50. </el-dialog>
  51. <el-dialog
  52. :close-on-click-modal="false"
  53. :modal-append-to-body="false"
  54. append-to-body
  55. :before-close="crud.cancelCU"
  56. :visible.sync="crud.status.cu > 0"
  57. :title="addDeviceTitle"
  58. >
  59. <div class="setting-dialog">
  60. <el-form ref="form" inline :model="form" :rules="rules" size="small" label-width="90px">
  61. <el-form-item label="设备名称" prop="name">
  62. <el-input v-model="form.name" />
  63. </el-form-item>
  64. <el-form-item label="设备编号" prop="code">
  65. <el-input v-model="form.code" />
  66. </el-form-item>
  67. <el-row>
  68. <el-form-item label="品牌厂商" prop="supplier">
  69. <el-select v-model="form.supplier" class="filter-item" placeholder="请选择" style="width: 225px;">
  70. <el-option v-for="item in supplierOptions" :key="item.id" :label="item.name" :value="item.id" />
  71. </el-select>
  72. </el-form-item>
  73. </el-row>
  74. <el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜' || selectedDeviceType === '网络视频录像机(NVR)' || selectedDeviceType ==='环境监控主机' || isInsidedevices" label="IPv4地址" prop="deviceIp">
  75. <el-input v-model="form.deviceIp" />
  76. </el-form-item>
  77. <el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜' || selectedDeviceType === '环境监控主机' || isInsidedevices" label="端口" prop="port" style="margin-right: 0; margin-left: 30px;">
  78. <el-input v-model="form.port" />
  79. </el-form-item>
  80. <el-form-item v-if="selectedDeviceType === '网络视频录像机(NVR)'" label="RTSP端口" prop="port" style="margin-right: 0; margin-left: 30px;">
  81. <el-input v-model="form.port" placeholder="RTSP端口一般均为554" />
  82. </el-form-item>
  83. <el-form-item v-if="selectedDeviceType === '回转柜' || selectedDeviceType === '网络视频录像机(NVR)'" label="账号" prop="deviceAccount">
  84. <el-input v-model="form.deviceAccount" />
  85. </el-form-item>
  86. <el-form-item v-if="selectedDeviceType === '回转柜' || selectedDeviceType === '网络视频录像机(NVR)'" label="密码" prop="devicePassword" style="margin-right: 0; margin-left: 30px;">
  87. <el-input v-model="form.devicePassword" />
  88. </el-form-item>
  89. <!-- 密集架 -->
  90. <el-row>
  91. <el-form-item v-if="selectedDeviceType === '密集架'" label="区号" prop="areaNo">
  92. <el-input v-model="form.areaNo" :disabled="crud.status.edit === 1" />
  93. </el-form-item>
  94. </el-row>
  95. <el-form-item v-if="selectedDeviceType === '密集架'" label="总列数" prop="sumColumnNo">
  96. <el-input v-model.number="form.sumColumnNo" :disabled="crud.status.edit === 1" />
  97. </el-form-item>
  98. <el-form-item v-if="selectedDeviceType === '密集架'" label="起始列号" prop="firstColumnNo">
  99. <el-input v-model.number="form.firstColumnNo" :disabled="crud.status.edit === 1" />
  100. </el-form-item>
  101. <el-form-item v-if="selectedDeviceType === '密集架'" label="节数" prop="partNo">
  102. <el-input v-model.number="form.partNo" :disabled="crud.status.edit === 1" />
  103. </el-form-item>
  104. <!-- 密集架 || 回转柜 -->
  105. <el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜'" label="层数" prop="rowNo">
  106. <el-input v-model.number="form.rowNo" :disabled="crud.status.edit === 1" />
  107. </el-form-item>
  108. <!-- 回转柜 -->
  109. <el-form-item v-if="selectedDeviceType === '回转柜'" label="每层列数" prop="columnRowNo">
  110. <el-input v-model.number="form.columnRowNo" :disabled="crud.status.edit === 1" />
  111. </el-form-item>
  112. <!-- 密集架 || 回转柜 -->
  113. <el-row>
  114. <el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜'" class="checkbox-style" label="系统联动" prop="isLinkage">
  115. <el-checkbox v-model="form.isLinkage.lend" @change="checked=>isLinkageChange(checked,'lend')">借出</el-checkbox>
  116. <el-checkbox v-model="form.isLinkage.borrow" @change="checked=>isLinkageChange(checked,'borrow')">归还</el-checkbox>
  117. <el-checkbox v-model="form.isLinkage.inBound" @change="checked=>isLinkageChange(checked,'inBound')">入库</el-checkbox>
  118. <el-checkbox v-model="form.isLinkage.outBound" @change="checked=>isLinkageChange(checked,'outBound')">出库</el-checkbox>
  119. </el-form-item>
  120. </el-row>
  121. <el-row>
  122. <el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜'" class="checkbox-style" label="设备回调" prop="isCallback">
  123. <el-checkbox v-model="form.isCallback.lend" @change="checked=>isCallbackChange(checked,'lend')">借出</el-checkbox>
  124. <el-checkbox v-model="form.isCallback.borrow" @change="checked=>isCallbackChange(checked,'lend')">归还</el-checkbox>
  125. <el-checkbox v-model="form.isCallback.inBound" @change="checked=>isCallbackChange(checked,'lend')">入库</el-checkbox>
  126. <el-checkbox v-model="form.isCallback.outBound" @change="checked=>isCallbackChange(checked,'lend')">出库</el-checkbox>
  127. </el-form-item>
  128. </el-row>
  129. <el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜'" label="下发通知" prop="isNotice" style="display: block;">
  130. <el-checkbox v-model="form.isNotice">通知</el-checkbox>
  131. </el-form-item>
  132. <el-form-item label="备注" prop="remark">
  133. <el-input v-model="form.remark" type="textarea" :rows="4" style="width: 585px;" />
  134. </el-form-item>
  135. </el-form>
  136. <div slot="footer" class="dialog-footer">
  137. <el-button v-if="crud.status.cu > 0 && ( selectedDeviceType === '网络视频录像机(NVR)' || selectedDeviceType ==='环境监控主机')" class="device-child-btn" @click="handleChildDevice"><i class="iconfont icon-zishebeiguanli" />子设备管理</el-button>
  138. <el-button type="text" @click="handleCloseDialog">取消</el-button>
  139. <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确定</el-button>
  140. </div>
  141. </div>
  142. </el-dialog>
  143. <!--表格渲染-->
  144. <div class="container-right">
  145. <span class="right-top-line" />
  146. <span class="left-bottom-line" />
  147. <el-table
  148. ref="table"
  149. v-loading="crud.loading"
  150. :data="crud.data"
  151. row-key="id"
  152. highlight-current-row
  153. style="min-width: 100%;"
  154. @selection-change="crud.selectionChangeHandler"
  155. @row-click="clickRowHandler"
  156. @cell-dblclick="tableDoubleClick"
  157. >
  158. <el-table-column type="selection" align="center" width="55" />
  159. <el-table-column label="子设备" prop="child" min-width="80" />
  160. <el-table-column label="设备类型" prop="deviceTypeId.name" min-width="200" />
  161. <el-table-column label="设备名称" prop="deviceName" min-width="140" />
  162. <el-table-column label="设备编号" prop="deviceCode" min-width="85" />
  163. <el-table-column label="接口IP" prop="deviceIp" min-width="120" show-overflow-tooltip>
  164. <template slot-scope="scope">
  165. <span v-if="scope.row.deviceIp"> {{ scope.row.deviceIp }} </span>
  166. <span v-else></span>
  167. </template>
  168. </el-table-column>
  169. <el-table-column label="端口" prop="devicePort" min-width="85">
  170. <template slot-scope="scope">
  171. <span v-if="scope.row.devicePort"> {{ scope.row.devicePort }} </span>
  172. <span v-else></span>
  173. </template>
  174. </el-table-column>
  175. <el-table-column label="状态" prop="categoryName" min-width="60" align="center">
  176. <template slot-scope="scope">
  177. <span :class="{ 'spk-a': scope.row.deviceState === 1, 'off-line': scope.row.deviceState !== 1 }" />
  178. </template>
  179. </el-table-column>
  180. <el-table-column label="所属库房" prop="categoryName" min-width="120" />
  181. <el-table-column label="所属区域" prop="storeroomId.name" min-width="120" />
  182. <el-table-column label="设备厂商" prop="supplierId.name" min-width="120" show-overflow-tooltip />
  183. <el-table-column prop="createTime" label="创建日期" min-width="180">
  184. <template slot-scope="scope">
  185. <div>{{ scope.row.createTime | parseTime }}</div>
  186. </template>
  187. </el-table-column>
  188. <el-table-column prop="createTime" label="最后一次同步时间" min-width="180">
  189. <template slot-scope="scope">
  190. <div>{{ scope.row.createTime | parseTime }}</div>
  191. </template>
  192. </el-table-column>
  193. </el-table>
  194. <!--分页组件-->
  195. <pagination v-if="crud.data.length!==0" />
  196. </div>
  197. <!-- 子设备管理 -->
  198. <ChildDevice ref="childDevice" :selected-device-type="selectedDeviceType" />
  199. <!-- 详情 -->
  200. <DetailModule ref="detailModule" :selected-device-type="selectedDeviceType" @childDevice="handleChildDevice" />
  201. </div>
  202. </template>
  203. <script>
  204. import typeJson from './type.json'
  205. import crudDevice from '@/api/storeManage/deviceManage/device'
  206. import CRUD, { presenter, header, form, crud } from '@crud/crud'
  207. import rrOperation from '@crud/RR.operation'
  208. import crudOperation from '@crud/CRUD.operation'
  209. import pagination from '@crud/Pagination'
  210. import ChildDevice from './module/childDevice'
  211. import DetailModule from './module/detail'
  212. import { mapGetters } from 'vuex'
  213. const defaultForm = {
  214. id: null,
  215. name: null,
  216. code: null,
  217. deviceIp: null,
  218. port: null,
  219. remark: null,
  220. deviceAccount: null,
  221. devicePassword: null,
  222. isLinkage: { stateType: 1, lend: false, borrow: false, inBound: false, outBound: false },
  223. isCallback: { stateType: 2, lend: false, borrow: false, inBound: false, outBound: false },
  224. isNotice: false,
  225. rowNo: null,
  226. columnRowNo: null,
  227. areaNo: null, sumColumnNo: null, firstColumnNo: null, partNo: null
  228. }
  229. export default {
  230. name: 'DeviceTableList',
  231. components: { rrOperation, crudOperation, pagination, ChildDevice, DetailModule },
  232. cruds() {
  233. return CRUD({ title: '设备', url: 'api/device/list', crudMethod: { ...crudDevice }, optShow: {
  234. add: false,
  235. edit: true,
  236. del: false,
  237. reset: true,
  238. download: false,
  239. group: false
  240. }})
  241. },
  242. mixins: [presenter(), header(), form(defaultForm), crud()],
  243. props: {
  244. selectedStore: {
  245. type: Object,
  246. default: function() {
  247. return {}
  248. }
  249. }
  250. },
  251. data() {
  252. return {
  253. deviceType: null,
  254. deviceTypeOptions: [],
  255. deviceSelectVisible: false,
  256. deviceForm: {
  257. deviceType: null
  258. },
  259. addDeviceTitle: '',
  260. supplierOptions: [],
  261. selectedDeviceType: '网络视频录像机(NVR)',
  262. permission: {
  263. add: ['admin', 'device:add'],
  264. edit: ['admin', 'device:edit'],
  265. del: ['admin', 'device:del']
  266. }
  267. }
  268. },
  269. computed: {
  270. ...mapGetters([
  271. 'baseApi'
  272. ]),
  273. isInsidedevices() {
  274. if (this.selectedDeviceType === '桌面式RFID读写器') {
  275. return true
  276. } else {
  277. return false
  278. }
  279. },
  280. isOutsidedevices() {
  281. if (this.selectedDeviceType === '通道门' || this.selectedDeviceType === '手持式RFID读写器') {
  282. return true
  283. } else {
  284. return false
  285. }
  286. },
  287. rules() {
  288. // const checkDeviceIp = (rule, value, callback) => {
  289. // const reg = /^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/
  290. // if (reg.test(value)) {
  291. // callback()
  292. // } else {
  293. // callback(new Error('设备IP格式错误'))
  294. // }
  295. // }
  296. const checkDevicePort = (rule, value, callback) => {
  297. const reg = /^([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{4}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/
  298. if (reg.test(value)) {
  299. callback()
  300. } else {
  301. callback(new Error('端口号输入错误'))
  302. }
  303. }
  304. const validateRule = {
  305. // supplier: [
  306. // { required: true, message: '请选择设备产商', trigger: 'blur' }
  307. // ]
  308. code: [{ required: true, message: '设备编号不可为空', trigger: 'blur' }],
  309. name: [{ required: true, message: '设备名称不可为空', trigger: 'blur' }]
  310. }
  311. // if (this.isInsidedevices || this.isOutsidedevices) {
  312. // this.$set(validateRule, 'deviceId', [
  313. // { required: true, message: '请输入设备ID', trigger: 'blur' }
  314. // ])
  315. // }
  316. if (this.selectedDeviceType === '密集架' || this.selectedDeviceType === '回转柜' || this.selectedDeviceType === '网络视频录像机(NVR)' || this.selectedDeviceType === '环境监控主机' || this.isInsidedevices) {
  317. this.$set(validateRule, 'deviceIp', [
  318. { required: true, message: '请输入接口IP', trigger: 'blur' }
  319. // ,
  320. // { validator: checkDeviceIp, trigger: 'blur' }
  321. ])
  322. this.$set(validateRule, 'port', [
  323. { required: true, message: '请输入端口号', trigger: 'blur' },
  324. { validator: checkDevicePort, trigger: 'blur' }
  325. ])
  326. if (this.selectedDeviceType === '密集架') {
  327. this.$set(validateRule, 'areaNo', [
  328. { required: true, message: '请输入区号', trigger: 'blur' }
  329. ])
  330. this.$set(validateRule, 'firstColumnNo', [
  331. { required: true, message: '请输入起始列号', trigger: 'blur' }
  332. ])
  333. this.$set(validateRule, 'sumColumnNo', [
  334. { required: true, message: '请输入总列数', trigger: 'blur' }
  335. ])
  336. this.$set(validateRule, 'partNo', [
  337. { required: true, message: '请输入节数', trigger: 'blur' }
  338. ])
  339. this.$set(validateRule, 'rowNo', [
  340. { required: true, message: '请输入层数', trigger: 'blur' }
  341. ])
  342. } else if (this.selectedDeviceType === '回转柜' || this.selectedDeviceType === '网络视频录像机(NVR)') {
  343. // 回转柜 || 网络视频录像机(NVR)
  344. this.$set(validateRule, 'deviceAccount', [
  345. { required: true, message: '请输入账号', trigger: 'blur' }
  346. ])
  347. this.$set(validateRule, 'devicePassword', [
  348. { required: true, message: '请输入密码', trigger: 'blur' }
  349. ])
  350. if (this.selectedDeviceType === '回转柜') {
  351. this.$set(validateRule, 'cupboardNo', [
  352. { required: true, message: '请输入柜号', trigger: 'blur' }
  353. ])
  354. this.$set(validateRule, 'rowNo', [
  355. { required: true, message: '请输入层数', trigger: 'blur' }
  356. ])
  357. this.$set(validateRule, 'columnRowNo', [
  358. { required: true, message: '请输入每层列数', trigger: 'blur' }
  359. ])
  360. } else {
  361. // 网络视频录像机(NVR)
  362. // this.$set(validateRule, 'videoRoute', [
  363. // { required: true, message: '请输入频道', trigger: 'blur' }
  364. // ])
  365. }
  366. }
  367. }
  368. return validateRule
  369. }
  370. },
  371. watch: {
  372. selectedStore: function(newValue, oldValue) {
  373. this.crud.refresh()
  374. }
  375. },
  376. created() {
  377. this.deviceTypeOptions = typeJson.data
  378. this.crud.data = [
  379. { id: '7305DE3D273B0CAC079538', deviceTypeId: { name: '网络视频录像机(NVR)' }},
  380. { id: 'C09A1946216E496BB3FA88', deviceTypeId: { name: '环境监控主机' }},
  381. { id: 'DD656054BE3D1DF1E2F1FC', deviceTypeId: { name: '密集架' }},
  382. { id: '65D1886B0F864291766421', deviceTypeId: { name: '通道门' }},
  383. { id: 'E2767FEACA9CE0E3B16B89', deviceTypeId: { name: '桌面式RFID读写器' }},
  384. { id: '3B85FA21FDAFBB618B5D40', deviceTypeId: { name: '手持式RFID读写器' }}
  385. ]
  386. },
  387. methods: {
  388. // 获取数据前设置默认参数
  389. [CRUD.HOOK.beforeRefresh]() {
  390. },
  391. [CRUD.HOOK.afterRefresh](crud) {
  392. // this.crud.data = [
  393. // { id: 1, deviceTypeId: { name: '网络视频录像机(NVR)' }},
  394. // { id: 2, deviceTypeId: { name: '环境监控主机' }},
  395. // { id: 3, deviceTypeId: { name: '密集架' }},
  396. // { id: 4, deviceTypeId: { name: '通道门' }},
  397. // { id: 5, deviceTypeId: { name: '桌面式RFID读写器' }},
  398. // { id: 6, deviceTypeId: { name: '手持式RFID读写器' }}
  399. // ]
  400. },
  401. [CRUD.HOOK.beforeToEdit](crud, form, btn) {
  402. console.log(crud.selections[0])
  403. console.log(form)
  404. this.selectedDeviceType = form.deviceTypeId.name
  405. this.addDeviceTitle = '编辑设备 - ' + form.deviceTypeId.name
  406. },
  407. // 提交前做的操作
  408. async [CRUD.HOOK.afterValidateCU](crud) {
  409. if (form.deviceTypeId.name === '密集架' || form.deviceTypeId.name === '回转柜') {
  410. if (form.deviceTypeId.name === '密集架') {
  411. // 获取密集架行号列号等信息
  412. await crudDevice.getDesecabinetById({ deviceInfoId: this.crud.selections[0].id }).then((data) => {
  413. form.rowNo = data.rowNo
  414. form.areaNo = data.areaNo
  415. form.sumColumnNo = data.sumColumnNo
  416. form.firstColumnNo = data.firstColumnNo
  417. form.partNo = data.partNo
  418. form.storeroomCode = data.storeroomCode
  419. })
  420. } else if (form.deviceTypeId.name === '回转柜') {
  421. // 获取回转柜行号列号等信息
  422. await crudDevice.getRotarycabinetById({ deviceInfoId: this.crud.selections[0].id }).then((data) => {
  423. form.columnRowNo = data.columnRowNo
  424. form.cupboardNo = data.cupboardNo
  425. form.rowNo = data.rowNo
  426. form.storeroomCode = data.storeroomCode
  427. })
  428. }
  429. // 获取联动和回调结果
  430. await crudDevice.getDeviceById({ deviceInfoId: this.crud.selections[0].id }).then((data) => {
  431. if (data.length === 3) {
  432. form.isLinkage = data.find(element => element.stateType === 1)
  433. form.isCallback = data.find(element => element.stateType === 2)
  434. }
  435. })
  436. }
  437. form.supplier = form.supplierId.id
  438. crud.status.edit = CRUD.STATUS.PREPARED
  439. crud.getDataStatus(this.crud.selections[0].id).edit = CRUD.STATUS.PREPARED
  440. // this.deviceForm.deviceType = null
  441. // this.$refs.deviceForm.resetFields()
  442. return false
  443. },
  444. // 防止编辑时,isLinkage是null,isLinkage.lend报错
  445. [CRUD.HOOK.afterRefresh](crud) {
  446. crud.data.forEach(element => {
  447. element.isLinkage = { stateType: 1, lend: null, borrow: null, inBound: null, outBound: null }
  448. element.isCallback = { stateType: 2, lend: null, borrow: null, inBound: null, outBound: null }
  449. })
  450. },
  451. // table - 双击查看详情
  452. tableDoubleClick(row) {
  453. this.selectedDeviceType = row.deviceTypeId.name
  454. this.$refs.detailModule.detailTitle = '设备详情-' + row.deviceTypeId.name
  455. this.$refs.detailModule.detailVisible = true
  456. this.$refs.detailModule.activeIndex = 0
  457. // this.$refs.archivesInfo.getDetial(row.id)
  458. },
  459. handleComfirmDevice() {
  460. this.$refs.deviceForm.validate((valid) => {
  461. if (valid) {
  462. this.crud.toAdd()
  463. this.deviceSelectVisible = false
  464. this.selectedDeviceType = this.deviceForm.deviceType.name
  465. this.addDeviceTitle = '新增设备 - ' + this.selectedDeviceType
  466. this.$refs.form.resetFields()
  467. } else {
  468. console.log('error submit!!')
  469. return false
  470. }
  471. })
  472. },
  473. isLinkageChange(value, type) {
  474. if (!value && this.form.isCallback[type]) {
  475. this.$message.error('取消对应回调选项后才能取消联动操作')
  476. this.form.isLinkage[type] = true
  477. }
  478. },
  479. isCallbackChange(value, type) {
  480. if (value && !this.form.isLinkage[type]) {
  481. this.$message.error('选中对应联动选项后才能勾选回调操作')
  482. this.form.isCallback[type] = false
  483. }
  484. },
  485. clickRowHandler(row) {
  486. this.$refs.table.toggleRowSelection(row)
  487. },
  488. selectionChangeHandler(val) {
  489. this.crud.selections = val
  490. },
  491. toDelete(datas) {
  492. this.$confirm('此操作将删除当前所选' + this.crud.title + '<span>你是否还要继续?</span>', '提示', {
  493. confirmButtonText: '继续',
  494. cancelButtonText: '取消',
  495. type: 'warning',
  496. dangerouslyUseHTMLString: true
  497. }).then(() => {
  498. this.crud.delAllLoading = true
  499. const ids = []
  500. datas.forEach(val => {
  501. ids.push(val.id)
  502. })
  503. crudDevice.del(ids).then(() => {
  504. this.crud.notify('删除成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
  505. this.crud.delAllLoading = false
  506. this.crud.refresh()
  507. }).catch(err => {
  508. this.crud.delAllLoading = false
  509. console.log(err)
  510. })
  511. }).catch(() => {
  512. })
  513. },
  514. handleChildDevice() {
  515. this.$refs.childDevice.childDeviceVisible = true
  516. this.$refs.childDevice.childDeviceTitle = '子设备管理 - ' + this.selectedDeviceType
  517. },
  518. handleCloseDialog(done) {
  519. // 重置表单数据
  520. if (this.$refs.deviceForm) {
  521. this.deviceSelectVisible = false
  522. this.$refs.deviceForm.resetFields()
  523. }
  524. if (this.$refs.form) {
  525. this.$refs.form.resetFields()
  526. this.crud.cancelCU()
  527. }
  528. // 关闭弹框
  529. // done()
  530. }
  531. }
  532. }
  533. </script>
  534. <style lang="scss" scoped>
  535. ::v-deep .el-dialog .el-dialog__body{
  536. .checkbox-style.el-form-item{
  537. .el-form-item__content{
  538. width: 550px !important;
  539. }
  540. }
  541. }
  542. </style>