Browse Source

设备管理 添加各种设备

master
z_yu 3 years ago
parent
commit
ddfa9a66d8
  1. 14
      src/api/storeManage/deviceManage/device.js
  2. 225
      src/views/storeManage/deviceManage/module/deviceDetail.vue

14
src/api/storeManage/deviceManage/device.js

@ -8,8 +8,20 @@ export function getSupplier() {
}
export function add(data) {
let url = 'api/desecabinet/create'
if (data.deviceTypeId.name === '密集架') {
url = 'api/desecabinet/create'
} else if (data.deviceTypeId.name === '回转柜') {
url = 'api/desecabinet/create'
} else if (data.deviceTypeId.name === '摄像头') {
url = 'api/camera/create'
} else if (data.deviceTypeId.name === '空调' || data.deviceTypeId.name === '桌面式RFID读写器' || data.deviceTypeId.name === '盘点机' || data.deviceTypeId.name === '恒湿机' || data.deviceTypeId.name === '漏水传感器' || data.deviceTypeId.name === '温湿度感应器' || data.deviceTypeId.name === '空气质监测' || data.deviceTypeId.name === '漏水传感器') {
url = 'api/insidedevices/create'
} else if (data.deviceTypeId.name === '通道门' || data.deviceTypeId.name === '手持式RFID读写器') {
url = 'api/outsidedevices/create'
}
return request({
url: 'api/desecabinet/create',
url: url,
method: 'post',
data
})

225
src/views/storeManage/deviceManage/module/deviceDetail.vue

@ -8,14 +8,14 @@
</template>
<template v-slot:right>
<el-button v-permission="permission.del" icon="el-icon-delete" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections && crud.selections.length === 0" @click="toDelete(crud.selections)">删除</el-button>
<el-select v-model="deviceType" placeholder="全部">
<!-- <el-select v-model="deviceType" placeholder="全部">
<el-option
v-for="item in deviceTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-select> -->
</template>
</crudOperation>
</div>
@ -25,51 +25,77 @@
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="80px">
<el-form-item label="设备厂商" prop="deviceInfo.supplierId">
<el-select v-model="form.deviceInfo.supplier" style="width: 370px;">
<el-form-item label="设备厂商" prop="supplier">
<el-select v-model="form.supplier" style="width: 370px;">
<el-option v-for="item in supplierOptions" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="设备名称" prop="deviceInfo.deviceName">
<el-input v-model="form.deviceInfo.deviceName" style="width: 370px;" />
<el-form-item v-if="isInsidedevices || isOutsidedevices" label="设备ID" prop="deviceId">
<el-input v-model="form.deviceId" style="width: 370px;" />
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="form.deviceName" style="width: 370px;" />
</el-form-item>
<el-form-item label="接口IP" prop="deviceInfo.deviceIp">
<el-input v-model="form.deviceInfo.deviceIp" style="width: 370px;" />
<el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜' || selectedDeviceType === '摄像头' || isInsidedevices" label="接口IP" prop="deviceIp">
<el-input v-model="form.deviceIp" style="width: 370px;" />
</el-form-item>
<el-form-item label="端口" prop="deviceInfo.devicePort">
<el-input v-model="form.deviceInfo.devicePort" style="width: 370px;" />
<el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜' || selectedDeviceType === '摄像头' || isInsidedevices" label="端口" prop="devicePort">
<el-input v-model="form.devicePort" style="width: 370px;" />
</el-form-item>
<el-form-item label="库房代码" prop="storeroomCode">
<!-- 密集架 || 回转柜 -->
<el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜'" label="库房代码" prop="storeroomCode">
<el-input v-model="form.storeroomCode" style="width: 370px;" />
</el-form-item>
<el-form-item label="区号" prop="areaNo">
<!-- 密集架 -->
<el-form-item v-if="selectedDeviceType === '密集架'" label="区号" prop="areaNo">
<el-input v-model="form.areaNo" style="width: 370px;" />
</el-form-item>
<el-form-item label="起始列号" prop="firstColumnNo">
<el-input v-model="form.firstColumnNo" style="width: 150px;" />
<el-form-item v-if="selectedDeviceType === '密集架'" label="起始列号" prop="firstColumnNo">
<el-input v-model.number="form.firstColumnNo" style="width: 150px;" />
</el-form-item>
<el-form-item v-if="selectedDeviceType === '密集架'" label="总列数" prop="sumColumnNo">
<el-input v-model.number="form.sumColumnNo" style="width: 150px;" />
</el-form-item>
<el-form-item v-if="selectedDeviceType === '密集架'" label="节数" prop="partNo">
<el-input v-model.number="form.partNo" style="width: 150px;" />
</el-form-item>
<el-form-item label="总列数" prop="sumColumnNo">
<el-input v-model="form.sumColumnNo" style="width: 150px;" />
<!-- 回转柜 || 摄像头 -->
<el-form-item v-if="selectedDeviceType === '回转柜' || selectedDeviceType === '摄像头'" label="账号" prop="deviceAccount">
<el-input v-model="form.deviceAccount" style="width: 370px;" />
</el-form-item>
<el-form-item label="节数" prop="partNo">
<el-input v-model="form.partNo" style="width: 150px;" />
<el-form-item v-if="selectedDeviceType === '回转柜' || selectedDeviceType === '摄像头'" label="密码" prop="devicePassword">
<el-input v-model="form.devicePassword" style="width: 370px;" />
</el-form-item>
<el-form-item label="层数" prop="rowNo">
<el-input v-model="form.rowNo" style="width: 150px;" />
<!-- 回转柜 -->
<el-form-item v-if="selectedDeviceType === '回转柜'" label="柜号" prop="cupboardNo">
<el-input v-model="form.cupboardNo" style="width: 370px;" />
</el-form-item>
<el-form-item label="联动操作" prop="isLinkage">
<!-- 摄像头 -->
<el-form-item v-if="selectedDeviceType === '摄像头'" label="频道" prop="videoRoute">
<el-input v-model="form.videoRoute" style="width: 370px;" />
</el-form-item>
<!-- 密集架 || 回转柜 -->
<el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜'" label="层数" prop="rowNo">
<el-input v-model.number="form.rowNo" style="width: 150px;" />
</el-form-item>
<!-- 回转柜 -->
<el-form-item v-if="selectedDeviceType === '回转柜'" label="每层列数" prop="columnRowNo">
<el-input v-model.number="form.columnRowNo" style="width: 150px;" />
</el-form-item>
<!-- 密集架 || 回转柜 -->
<el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜'" label="联动操作" prop="isLinkage">
<el-checkbox v-model="form.isLinkage.lend">借出</el-checkbox>
<el-checkbox v-model="form.isLinkage.borrow">归还</el-checkbox>
<el-checkbox v-model="form.isLinkage.inBound">入库</el-checkbox>
<el-checkbox v-model="form.isLinkage.outBound">出库</el-checkbox>
</el-form-item>
<el-form-item label="回调确认" prop="isCallback">
<el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜'" label="回调确认" prop="isCallback">
<el-checkbox v-model="form.isCallback.lend">借出</el-checkbox>
<el-checkbox v-model="form.isCallback.borrow">归还</el-checkbox>
<el-checkbox v-model="form.isCallback.inBound">入库</el-checkbox>
<el-checkbox v-model="form.isCallback.outBound">出库</el-checkbox>
</el-form-item>
<el-form-item label="下发通知" prop="isNotice" style="display: block;">
<el-form-item v-if="selectedDeviceType === '密集架' || selectedDeviceType === '回转柜'" label="下发通知" prop="isNotice" style="display: block;">
<el-checkbox v-model="form.isNotice">通知</el-checkbox>
</el-form-item>
</el-form>
@ -97,7 +123,7 @@
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
<el-form-item label="设备类型">
<el-select v-model="selectedDeviceType" style="width: 370px;">
<el-option v-for="item in deviceTypeOptions" :key="item.id" :label="item.name" :value="item.id" />
<el-option v-for="item in deviceTypeOptions" :key="item.id" :label="item.name" :value="item.name" />
</el-select>
</el-form-item>
</el-form>
@ -137,7 +163,7 @@ import crudDevice from '@/api/storeManage/deviceManage/device'
import CRUD, { presenter, header, form } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
const defaultForm = { deviceInfo: { supplierId: null }, id: null, isLinkage: { stateType: 1, lend: false, borrow: false, inBound: false, outBound: false }, isCallback: { stateType: 2, lend: false, borrow: false, inBound: false, outBound: false }, isNotice: false }
const defaultForm = { supplier: null, id: null, deviceId: null, deviceName: null, deviceIp: null, devicePort: null, rowNo: null, areaNo: null, sumColumnNo: null, firstColumnNo: null, partNo: null, storeroomCode: null, columnRowNo: null, deviceAccount: null, devicePassword: null, cupboardNo: null, videoRoute: null, isLinkage: { stateType: 1, lend: false, borrow: false, inBound: false, outBound: false }, isCallback: { stateType: 2, lend: false, borrow: false, inBound: false, outBound: false }, isNotice: false }
export default {
components: { crudOperation, pagination },
@ -170,34 +196,25 @@ export default {
}
},
data() {
var checkDeviceIp = (rule, value, callback) => {
const reg = /^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/
if (reg.test(value)) {
callback()
} else {
callback(new Error('设备IP格式错误'))
}
}
return {
storeroomId: null,
deviceType: null, //
needRefreshTree: false,
rules: {
// deviceInfo.
deviceInfo: {
supplier: [
{ required: true, message: '请选择设备产商', trigger: 'blur' }
],
deviceName: [
{ required: true, message: '请输入设备名称', trigger: 'blur' }
],
deviceIp: [
{ required: true, message: '请输入设备IP', trigger: 'blur' },
{ validator: checkDeviceIp, trigger: 'blur' }
]
}
// deviceInfo.deviceName
},
// rules: {
// // deviceInfo.
// supplier: [
// { required: true, message: '', trigger: 'blur' }
// ],
// deviceName: [
// { required: true, message: '', trigger: 'blur' }
// ]
// // ,
// // deviceIp: [
// // { required: true, message: 'IP', trigger: 'blur' },
// // { validator: checkDeviceIp, trigger: 'blur' }
// // ]
// // deviceInfo.deviceName
// },
permission: {
add: ['admin', 'dict:add'],
edit: ['admin', 'dict:edit'],
@ -237,7 +254,7 @@ export default {
},
{
id: '7882487E0C15304A3758AF',
name: '温湿度感器'
name: '温湿度感器'
},
{
id: 'E58C8D7C896BCB9A408A78',
@ -252,18 +269,116 @@ export default {
name: '手持式RFID读写器'
}
],
selectedDeviceType: 'DD656054BE3D1DF1E2F1FC', //
selectedDeviceType: '密集架', //
supplierOptions: [] //
}
},
computed: {
addTypeStr() {
const addType = this.deviceTypeOptions.find(deviceType => deviceType.id === this.selectedDeviceType)
const addType = this.deviceTypeOptions.find(deviceType => deviceType.name === this.selectedDeviceType)
if (addType) {
return '新增' + addType.name
} else {
return '新增'
}
},
isInsidedevices() {
if (this.selectedDeviceType === '空调' || this.selectedDeviceType === '桌面式RFID读写器' || this.selectedDeviceType === '盘点机' || this.selectedDeviceType === '恒湿机' || this.selectedDeviceType === '漏水传感器' || this.selectedDeviceType === '温湿度感应器' || this.selectedDeviceType === '空气质监测' || this.selectedDeviceType === '漏水传感器') {
return true
} else {
return false
}
},
isOutsidedevices() {
if (this.selectedDeviceType === '通道门' || this.selectedDeviceType === '手持式RFID读写器') {
return true
} else {
return false
}
},
rules() {
const checkDeviceIp = (rule, value, callback) => {
const reg = /^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/
if (reg.test(value)) {
callback()
} else {
callback(new Error('设备IP格式错误'))
}
}
const checkDevicePort = (rule, value, callback) => {
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])$/
if (reg.test(value)) {
callback()
} else {
callback(new Error('端口号输入错误'))
}
}
const validateRule = {
// deviceInfo.
supplier: [
{ required: true, message: '请选择设备产商', trigger: 'blur' }
],
deviceName: [
{ required: true, message: '请输入设备名称', trigger: 'blur' }
]
}
if (this.isInsidedevices || this.isOutsidedevices) {
this.$set(validateRule, 'deviceId', [
{ required: true, message: '请输入设备ID', trigger: 'blur' }
])
}
if (this.selectedDeviceType === '密集架' || this.selectedDeviceType === '回转柜' || this.selectedDeviceType === '摄像头' || this.isInsidedevices) {
this.$set(validateRule, 'deviceIp', [
{ required: true, message: '请输入接口IP', trigger: 'blur' },
{ validator: checkDeviceIp, trigger: 'blur' }
])
this.$set(validateRule, 'devicePort', [
{ required: true, message: '请输入端口号', trigger: 'blur' },
{ validator: checkDevicePort, trigger: 'blur' }
])
if (this.selectedDeviceType === '密集架') {
this.$set(validateRule, 'areaNo', [
{ required: true, message: '请输入区号', trigger: 'blur' }
])
this.$set(validateRule, 'firstColumnNo', [
{ required: true, message: '请输入起始列号', trigger: 'blur' }
])
this.$set(validateRule, 'sumColumnNo', [
{ required: true, message: '请输入总列数', trigger: 'blur' }
])
this.$set(validateRule, 'partNo', [
{ required: true, message: '请输入节数', trigger: 'blur' }
])
this.$set(validateRule, 'rowNo', [
{ required: true, message: '请输入层数', trigger: 'blur' }
])
} else {
// ||
this.$set(validateRule, 'deviceAccount', [
{ required: true, message: '请输入账号', trigger: 'blur' }
])
this.$set(validateRule, 'devicePassword', [
{ required: true, message: '请输入密码', trigger: 'blur' }
])
if (this.selectedDeviceType === '回转柜') {
this.$set(validateRule, 'cupboardNo', [
{ required: true, message: '请输入柜号', trigger: 'blur' }
])
this.$set(validateRule, 'rowNo', [
{ required: true, message: '请输入层数', trigger: 'blur' }
])
this.$set(validateRule, 'columnRowNo', [
{ required: true, message: '请输入每层列数', trigger: 'blur' }
])
} else {
//
this.$set(validateRule, 'videoRoute', [
{ required: true, message: '请输入频道', trigger: 'blur' }
])
}
}
}
return validateRule
}
},
methods: {
@ -274,9 +389,9 @@ export default {
// this.needRefreshTree = true
// },
[CRUD.HOOK.beforeSubmit]() {
this.crud.form.deviceInfo.storeroomId = this.storeroomId
this.crud.form.deviceInfo.supplierId = this.supplierOptions.find(item => item.id === this.crud.form.deviceInfo.supplier)
this.crud.form.deviceTypeId = this.deviceTypeOptions.find(item => item.id === this.selectedDeviceType)
this.crud.form.storeroomId = this.storeroomId
this.crud.form.supplierId = this.supplierOptions.find(item => item.id === this.crud.form.supplier)
this.crud.form.deviceTypeId = this.deviceTypeOptions.find(item => item.name === this.selectedDeviceType)
this.crud.form.sequence = 2
// if (!this.crud.form.isSequence) {
// this.crud.form.isSequence = this.crud.data.reduce((prev, cur) => { return { isSequence: Math.max(prev.isSequence, cur.isSequence) } }).isSequence + 1

Loading…
Cancel
Save