Files
WuXiDiKe/nladmin-ui/src/views/acs/device/driver/standard_storage.vue
2024-05-29 18:26:09 +08:00

316 lines
9.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- 标准版-货架-->
<div>
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span">指令相关</span>
</div>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px">
<el-row>
<el-col :span="8">
<el-form-item label="是否请求wms" label-width="150px">
<el-switch v-model="form.reqWms" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span">设备协议</span>
</div>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px">
<el-row>
<el-col :span="12">
<el-form-item label="排:" label-width="150px" prop="x">
<el-input v-model.number="form.x" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="巷道:" label-width="150px" prop="tunnel">
<el-input v-model.number="form.tunnel" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="最大列:" label-width="150px" prop="maxY">
<el-input v-model.number="form.maxY" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="最小列:" label-width="150px" prop="minY">
<el-input v-model.number="form.minY" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="最大层:" label-width="150px" prop="maxZ">
<el-input v-model.number="form.maxZ" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="最小层:" label-width="150px" prop="minZ">
<el-input v-model.number="form.minZ" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span" />
<el-button
:loading="false"
icon="el-icon-check"
size="mini"
style="float: right; padding: 6px 9px"
type="primary"
@click="doSubmit"
>保存
</el-button>
</div>
</el-card>
</div>
</template>
<script>
import {
queryDriverConfig,
updateConfig,
testRead,
testwrite
} from '@/views/acs/device/driverConfig'
import { selectOpcList } from '@/views/acs/device/opc/opc'
import { selectPlcList } from '@/views/acs/device/opc/opcPlc'
import { selectListByOpcID } from '@/views/acs/device/opc/opcPlc'
import crud from '@/mixins/crud'
import deviceCrud from '@/views/acs/device/device'
export default {
name: 'StandardStorage',
mixins: [crud],
props: {
parentForm: {
type: Object,
require: true
}
},
data() {
const checkMaxY = (rule, value, callback) => {
if (value < this.form.minY) {
callback(new Error('最大列应大于最小列!'))
} else {
callback()
}
}
const checkMinY = (rule, value, callback) => {
if (value > this.form.maxY) {
callback(new Error('最小列应小于最大列!'))
} else {
callback()
}
}
const checkMaxZ = (rule, value, callback) => {
if (value < this.form.minZ) {
callback(new Error('最大层应大于最小层!'))
} else {
callback()
}
}
const checkMinZ = (rule, value, callback) => {
if (value > this.form.maxZ) {
callback(new Error('最小层应小于最大层!'))
} else {
callback()
}
}
return {
device_code: '',
device_id: '',
plc_id: '',
plc_code: '',
opc_id: '',
opc_code: '',
configLoading: false,
dataOpcservers: [],
dataOpcPlcs: [],
deviceList: [],
data1: [],
data2: [],
form: {
x: 0,
tunnel: 0,
maxY: 0,
maxZ: 0,
minY: 0,
minZ: 0,
reqWms: true
},
rules: {
x: [
{ required: true, message: '排不能为空', trigger: 'blur' }
],
tunnel: [
{ required: true, type: 'number', min: 0, message: '请输入大于0的数字', trigger: 'blur' }
],
maxY: [
{ required: true, type: 'number', min: 0, message: '请输入大于0的数字', trigger: 'blur' },
{ validator: checkMaxY, trigger: 'blur' }
],
maxZ: [
{ required: true, type: 'number', min: 0, message: '请输入大于0的数字', trigger: 'blur' },
{ validator: checkMaxZ, trigger: 'blur' }
],
minY: [
{ required: true, type: 'number', min: 0, message: '请输入大于0的数字', trigger: 'blur' },
{ validator: checkMinY, trigger: 'blur' }
],
minZ: [
{ required: true, type: 'number', min: 0, message: '请输入大于0的数字', trigger: 'blur' },
{ validator: checkMinZ, trigger: 'blur' }
]
}
}
},
created() {
this.$nextTick(() => {
// 从父表单获取设备编码
this.device_id = this.$props.parentForm.device_id
this.device_code = this.$props.parentForm.device_code
queryDriverConfig(this.device_id, this.$props.parentForm.driver_code).then(data => {
// 给表单赋值,并且属性不能为空
if (data.form) {
const arr = Object.keys(data.form)
// 不为空
if (arr.length > 0) {
data.form.x = parseInt(data.form.x)
data.form.tunnel = parseInt(data.form.tunnel)
data.form.minY = parseInt(data.form.minY)
data.form.maxY = parseInt(data.form.maxY)
data.form.minZ = parseInt(data.form.minZ)
data.form.maxZ = parseInt(data.form.maxZ)
this.form = data.form
}
}
// 给表单赋值,并且属性不能为空
if (data.parentForm) {
const arr = Object.keys(data.parentForm)
// 不为空
if (arr.length > 0) {
this.opc_code = data.parentForm.opc_code
this.plc_code = data.parentForm.plc_code
}
}
this.data1 = data.rs
this.data2 = data.ws
this.sliceItem()
})
selectPlcList().then(data => {
this.dataOpcPlcs = data
this.plc_id = this.$props.parentForm.opc_plc_id
})
selectOpcList().then(data => {
this.dataOpcservers = data
this.opc_id = this.$props.parentForm.opc_server_id
})
deviceCrud.selectDeviceList().then(data => {
this.deviceList = data
})
})
},
methods: {
changeOpc(val) {
this.dataOpcservers.forEach(item => {
if (item.opc_id === val) {
this.opc_code = item.opc_code
}
})
selectListByOpcID(val).then(data => {
this.dataOpcPlcs = data
this.plc_id = ''
this.plc_code = ''
if (this.dataOpcPlcs && this.dataOpcPlcs.length > 0) {
this.plc_id = this.dataOpcPlcs[0].plc_id
this.plc_code = this.dataOpcPlcs[0].plc_code
}
this.sliceItem()
})
},
changePlc(val) {
this.dataOpcPlcs.forEach(item => {
if (item.plc_id === val) {
this.plc_code = item.plc_code
this.sliceItem()
return
}
})
},
test_read1() {
testRead(this.data1, this.opc_id).then(data => {
this.data1 = data
this.notify('操作成功!', 'success')
}).catch(err => {
console.log(err.response.data.message)
})
},
test_write1() {
testwrite(this.data2, this.opc_id).then(data => {
this.notify('操作成功!', 'success')
}).catch(err => {
console.log(err.response.data.message)
})
},
doSubmit() {
this.$refs['form'].validate((valid) => {
if (valid) {
this.configLoading = true
// 根据驱动类型判断是否为路由设备
const parentForm = this.parentForm
parentForm.is_route = true
parentForm.plc_id = this.plc_id
parentForm.opc_id = this.opc_id
updateConfig(parentForm, this.form, this.data1, this.data2).then(res => {
this.notify('保存成功', 'success')
this.configLoading = false
}).catch(err => {
this.configLoading = false
console.log(err.response.data.message)
})
}
})
},
sliceItem() { // 拼接DB的Item值
this.data1.forEach(item => {
const str = item.code
// 是否包含.
if (str.search('.') !== -1) {
// 截取最后一位
item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + str.slice(str.lastIndexOf('.') + 1)
} else {
item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + item.code
}
})
this.data2.forEach(item => {
const str = item.code
// 是否包含.
if (str.search('.') !== -1) {
// 截取最后一位
item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + str.slice(str.lastIndexOf('.') + 1)
} else {
item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + item.code
}
})
}
}
}
</script>
<style scoped>
</style>