|
|
@ -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="接口IP" prop="deviceInfo.deviceIp"> |
|
|
|
<el-input v-model="form.deviceInfo.deviceIp" style="width: 370px;" /> |
|
|
|
<el-form-item label="设备名称" prop="deviceName"> |
|
|
|
<el-input v-model="form.deviceName" 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="接口IP" prop="deviceIp"> |
|
|
|
<el-input v-model="form.deviceIp" style="width: 370px;" /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="库房代码" prop="storeroomCode"> |
|
|
|
<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 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 v-if="selectedDeviceType === '回转柜' || selectedDeviceType === '摄像头'" label="账号" prop="deviceAccount"> |
|
|
|
<el-input v-model="form.deviceAccount" style="width: 370px;" /> |
|
|
|
</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="devicePassword"> |
|
|
|
<el-input v-model="form.devicePassword" 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 === '回转柜'" label="柜号" prop="cupboardNo"> |
|
|
|
<el-input v-model="form.cupboardNo" 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="videoRoute"> |
|
|
|
<el-input v-model="form.videoRoute" style="width: 370px;" /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="联动操作" prop="isLinkage"> |
|
|
|
<!-- 密集架 || 回转柜 --> |
|
|
|
<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 |
|
|
|