项目设备管理
This commit is contained in:
parent
ce5c87608a
commit
65b766e27f
63
src/api/project.js
Normal file
63
src/api/project.js
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
|
||||||
|
/** 新建项目设备*/
|
||||||
|
export function createDevice(data) {
|
||||||
|
return request({
|
||||||
|
url: `/api/project/device`,
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/** 项目设备编码是否已存在 */
|
||||||
|
export function deviceIsExist(projectCode, code) {
|
||||||
|
return request({
|
||||||
|
url: `/api/project/device/exist/${projectCode}/${code}`,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/** 分页查询项目设备 */
|
||||||
|
export function getProjectDeviceList(params) {
|
||||||
|
return request({
|
||||||
|
url: `/api/project/device/paging`,
|
||||||
|
method: 'get',
|
||||||
|
params:params
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/** 删除项目设备 */
|
||||||
|
export function deleteProjectDevice(id) {
|
||||||
|
return request({
|
||||||
|
url: `/api/project/device/${id}`,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/** 获取设备详情 */
|
||||||
|
export function getDeviceDetail(id) {
|
||||||
|
return request({
|
||||||
|
url: `/api/project/device/${id}`,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/** 添加/修改屏蔽门设备网关映射配置 */
|
||||||
|
export function setPsdConfig(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/api/project/device/${id}/config/psd`,
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/** 添加/修改信号机设备网关映射配置 */
|
||||||
|
export function setSignalConfig(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/api/project/device/${id}/config/signal`,
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/** 添加/修改信号机设备网关映射配置 */
|
||||||
|
export function setSwitchConfig(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/api/project/device/${id}/config/switch`,
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
@ -71,5 +71,6 @@ export default {
|
|||||||
subsystemGeneration: 'Subsystem generation',
|
subsystemGeneration: 'Subsystem generation',
|
||||||
newsBulletin: 'New bulletin',
|
newsBulletin: 'New bulletin',
|
||||||
commandDictionary: 'Command dictionary',
|
commandDictionary: 'Command dictionary',
|
||||||
configLine: 'Line management'
|
configLine: 'Line management',
|
||||||
|
deviceManage: 'Device management'
|
||||||
};
|
};
|
||||||
|
@ -72,5 +72,6 @@ export default {
|
|||||||
subsystemGeneration: '子系统生成',
|
subsystemGeneration: '子系统生成',
|
||||||
newsBulletin: '消息公告',
|
newsBulletin: '消息公告',
|
||||||
commandDictionary: '指令字典',
|
commandDictionary: '指令字典',
|
||||||
configLine: '线路管理'
|
configLine: '线路管理',
|
||||||
|
deviceManage: '设备管理'
|
||||||
};
|
};
|
||||||
|
@ -104,6 +104,7 @@ const UserRulesDetail = () => import('@/views/orderauthor/rules/detail');
|
|||||||
const LessonApproval = () => import('@/views/approval/lesson/index');
|
const LessonApproval = () => import('@/views/approval/lesson/index');
|
||||||
const ScriptApproval = () => import('@/views/approval/script/index');
|
const ScriptApproval = () => import('@/views/approval/script/index');
|
||||||
const RunPlanApproval = () => import('@/views/approval/runPlan/index');
|
const RunPlanApproval = () => import('@/views/approval/runPlan/index');
|
||||||
|
const DeviceManage = () => import('@/views/system/deviceManage/index');
|
||||||
|
|
||||||
import { loginInfo } from '@/scripts/ConstDic';
|
import { loginInfo } from '@/scripts/ConstDic';
|
||||||
import { getSessionStorage } from '@/utils/auth';
|
import { getSessionStorage } from '@/utils/auth';
|
||||||
@ -838,6 +839,13 @@ export const asyncRouter = [
|
|||||||
meta: {
|
meta: {
|
||||||
i18n: 'router.configLine'
|
i18n: 'router.configLine'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'deviceManage',
|
||||||
|
component: DeviceManage,
|
||||||
|
meta: {
|
||||||
|
i18n: 'router.deviceManage'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
108
src/views/system/deviceManage/add.vue
Normal file
108
src/views/system/deviceManage/add.vue
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog v-dialogDrag :title="title" :visible.sync="dialogVisible" width="30%" :before-close="handleClose" center :close-on-click-modal="false">
|
||||||
|
<data-form ref="dataform" :form="form" :form-model="formModel" :rules="rules" />
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="doSave">{{ $t('global.confirm') }}</el-button>
|
||||||
|
<el-button @click="handleClose">{{ $t('global.cancel') }}</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { createDevice, deviceIsExist} from '@/api/project';
|
||||||
|
export default {
|
||||||
|
name: 'DeviceAdd',
|
||||||
|
props: {
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dialogVisible: false,
|
||||||
|
formModel: {
|
||||||
|
code: '',
|
||||||
|
type: '',
|
||||||
|
projectCode: ''
|
||||||
|
},
|
||||||
|
LessonList: [],
|
||||||
|
UserList: [],
|
||||||
|
UserLoading: false,
|
||||||
|
deviceTypeList:[{label: '道岔', value: 'SWITCH'}, {label: '信号机', value:'SIGNAL'}, {label: '屏蔽门', value: 'PSD'}],
|
||||||
|
projectList: [{label:'西铁院', value: 'XTY'}, {label: '贵州装备', value:'GZB'}],
|
||||||
|
gatewayList: []
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
form() {
|
||||||
|
const form = {
|
||||||
|
labelWidth: '120px',
|
||||||
|
items: [
|
||||||
|
{ prop: 'code', label: '设备编码', type: 'text', required: true, placeholder: '请输入设备编码' },
|
||||||
|
{ prop: 'type', label: '设备类型', type: 'select', required: true, options: this.deviceTypeList, placeholder: '请选择设备类型' },
|
||||||
|
{ prop: 'projectCode', label: '所属项目', type: 'select', required: true, options: this.projectList, placeholder: '请选择设备所属项目'}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
return form;
|
||||||
|
},
|
||||||
|
rules() {
|
||||||
|
const crules = {
|
||||||
|
code: [
|
||||||
|
{ required: true, message: '请输入设备编码', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
type: [
|
||||||
|
{ required: true, message: '请选择设备类型', trigger: 'change' }
|
||||||
|
],
|
||||||
|
projectCode: [
|
||||||
|
{ required: true, message: '请选择所属项目', trigger: 'change' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
return crules;
|
||||||
|
},
|
||||||
|
title() {
|
||||||
|
return '创建项目设备';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
show(data) {
|
||||||
|
this.dialogVisible = true;
|
||||||
|
},
|
||||||
|
doSave() {
|
||||||
|
const self = this;
|
||||||
|
this.$refs.dataform.validateForm(() => {
|
||||||
|
const params = {
|
||||||
|
code: this.formModel.code,
|
||||||
|
type: this.formModel.type,
|
||||||
|
projectCode: this.formModel.projectCode
|
||||||
|
};
|
||||||
|
deviceIsExist(params.projectCode, params.code).then(response => {
|
||||||
|
if (!response.data) {
|
||||||
|
createDevice(params).then(response => {
|
||||||
|
self.$message.success('创建项目设备成功!');
|
||||||
|
self.handleClose();
|
||||||
|
self.$emit('reloadTable');
|
||||||
|
}).catch(error => {
|
||||||
|
self.$message.error(this.$t('error.addFailed') + error.message);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
self.$message.error('已存在该设备编号,请修改设备编号后创建!');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleClose(done) {
|
||||||
|
this.formModel = {
|
||||||
|
code: '',
|
||||||
|
type: '',
|
||||||
|
projectCode: ''
|
||||||
|
};
|
||||||
|
this.$refs.dataform.resetForm();
|
||||||
|
this.dialogVisible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
397
src/views/system/deviceManage/editConfig.vue
Normal file
397
src/views/system/deviceManage/editConfig.vue
Normal file
@ -0,0 +1,397 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog v-dialogDrag :title="title" :visible.sync="dialogVisible" width="60%" :before-close="handleClose" center :close-on-click-modal="false">
|
||||||
|
<data-form ref="datatop" :form="formTop" :form-model="formModel" :rules="topRules" />
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-card class="box-card">
|
||||||
|
<div slot="header" class="clearfix">
|
||||||
|
<span>输入配置:</span>
|
||||||
|
</div>
|
||||||
|
<div style="margin-top: 20px">
|
||||||
|
<data-form ref="dataleft" :form="formLeft" :form-model="formModel" :rules="leftRules" />
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-card class="box-card">
|
||||||
|
<div slot="header" class="clearfix">
|
||||||
|
<span>输出配置:</span>
|
||||||
|
</div>
|
||||||
|
<div style="margin-top: 20px">
|
||||||
|
<data-form ref="dataright" :form="formRight" :form-model="formModel" :rules="rightRules" />
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="doSave">{{ $t('global.confirm') }}</el-button>
|
||||||
|
<el-button @click="handleClose">{{ $t('global.cancel') }}</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getDeviceDetail, setPsdConfig, setSignalConfig, setSwitchConfig } from '@/api/project';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'EditConfig',
|
||||||
|
props: {
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dialogVisible: false,
|
||||||
|
formModel: {},
|
||||||
|
formLeft: {},
|
||||||
|
formRight: {},
|
||||||
|
leftRules: {},
|
||||||
|
rightRules: {},
|
||||||
|
gatewayList: [],
|
||||||
|
setDeviceConfigFunction: null,
|
||||||
|
data: null,
|
||||||
|
psdLeftValue: [
|
||||||
|
{label: '输入-是否关门位', value: 'i_c'},
|
||||||
|
{label: '输入-PSL关门按钮位', value: 'i_dc_b'},
|
||||||
|
{label: '输入-PSL开门按钮位', value: 'i_do_b'},
|
||||||
|
{label: '输入-互锁解除钥匙开关位', value: 'i_ir'},
|
||||||
|
{label: '输入-是否锁闭位', value: 'i_l'},
|
||||||
|
{label: '输入-PSL允许钥匙开关位', value: 'i_psl'},
|
||||||
|
{label: '输入-PSL试灯按钮位', value: 'i_ts_b'}
|
||||||
|
],
|
||||||
|
psdRightValue: [
|
||||||
|
{label: '输出-关门位', value: 'o_c'},
|
||||||
|
{label: '输出-关门信号灯控制位', value: 'o_dc_s'},
|
||||||
|
{label: '输出-关门且锁闭信号灯控制位', value: 'o_dcl_s'},
|
||||||
|
{label: '输出-开门信号灯控制位', value: 'o_do_s'},
|
||||||
|
{label: '输出-互锁解除信号灯控制位', value: 'o_ir_s'},
|
||||||
|
{label: '输出-锁闭位', value: 'o_l'},
|
||||||
|
{label: '输出-开门位', value: 'o_o'},
|
||||||
|
{label: '输出-PSL信号灯控制位', value: 'o_psl_s'}
|
||||||
|
],
|
||||||
|
switchLeftValue: [
|
||||||
|
{label: '输入-故障挤岔表示位', value: 'i_f'},
|
||||||
|
{label: '输入-定位表示位', value: 'i_n'},
|
||||||
|
{label: '输入-反位表示位', value: 'i_r'}
|
||||||
|
],
|
||||||
|
switchRightValue: [
|
||||||
|
{label: '输出-设置故障控制位', value: 'o_f'},
|
||||||
|
{label: '输出-定操控制位', value: 'o_n'},
|
||||||
|
{label: '输出-反操控制位', value: 'o_r'}
|
||||||
|
],
|
||||||
|
signalLeftValue: [
|
||||||
|
{label: '输入-故障表示位', value: 'i_f'},
|
||||||
|
{label: '输入-绿灯表示位', value: 'i_g'},
|
||||||
|
{label: '输入-红灯表示位', value: 'i_r'},
|
||||||
|
{label: '输入-黄灯表示位', value: 'i_y'}
|
||||||
|
],
|
||||||
|
signalRightValue: [
|
||||||
|
{label: '输出-故障控制位', value: 'o_f'},
|
||||||
|
{label: '输出-绿灯控制位', value: 'o_g'},
|
||||||
|
{label: '输出-红灯控制位', value: 'o_r'},
|
||||||
|
{label: '输出-黄灯控制位', value: 'o_y'}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
formTop() {
|
||||||
|
const form = {
|
||||||
|
labelWidth: '220px',
|
||||||
|
items: [
|
||||||
|
{ prop: 'gatewayCode', label: '网关编码:', type: 'select', required: true, options: this.gatewayList, placeholder: '请选择网关编码' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
return form;
|
||||||
|
},
|
||||||
|
topRules() {
|
||||||
|
const crules = {
|
||||||
|
gatewayCode: [
|
||||||
|
{ required: true, message: '请输入网关编码', trigger: 'change' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
return crules;
|
||||||
|
},
|
||||||
|
title() {
|
||||||
|
return '编辑设备配置';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initForm(row) {
|
||||||
|
var validateDevice = (rule, value, callback) => {
|
||||||
|
console.log(value);
|
||||||
|
const list = [];
|
||||||
|
rule.list.forEach(item=> {
|
||||||
|
if (item.value !== rule.field && this.formModel[item.value] === value) {
|
||||||
|
list.push(item.label);
|
||||||
|
} else if (item.value === rule.field) {
|
||||||
|
list.push(item.label);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!value) {
|
||||||
|
callback(new Error(rule.messageEmpty));
|
||||||
|
} else if (list.length > 1) {
|
||||||
|
let repeatedValue = '';
|
||||||
|
list.forEach((item, index) => {
|
||||||
|
repeatedValue += item;
|
||||||
|
if (index !== list.length - 1) {
|
||||||
|
repeatedValue += '与';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
callback(new Error(repeatedValue + '位置重复,请调整!'));
|
||||||
|
} else {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
switch (row.type) {
|
||||||
|
case 'PSD': {
|
||||||
|
this.setDeviceConfigFunction = setPsdConfig;
|
||||||
|
this.formLeft = {
|
||||||
|
labelWidth: '220px',
|
||||||
|
items: [
|
||||||
|
{ prop:'i_addr', label:'输入网关字地址:', type: 'number', min: 1, max: 20000, step: 1},
|
||||||
|
{ prop: 'i_c', label: '输入-是否关门位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'i_dc_b', label: '输入-PSL关门按钮位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'i_do_b', label: '输入-PSL开门按钮位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'i_ir', label: '输入-互锁解除钥匙开关位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'i_l', label: '输入-是否锁闭位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'i_psl', label: '输入-PSL允许钥匙开关位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'i_ts_b', label: '输入-PSL试灯按钮位:', type: 'number', min: 1, max: 16, step: 1}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.leftRules = {
|
||||||
|
i_addr: [
|
||||||
|
{ required: true, message: '请填写输入网关字地址', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_c: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-是否关门位', list: this.psdLeftValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_dc_b: [
|
||||||
|
{validator: validateDevice, messageEmpty: '请填写输入-PSL关门按钮位', list: this.psdLeftValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_do_b: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-PSL开门按钮位', list: this.psdLeftValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_ir: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-互锁解除钥匙开关位', list: this.psdLeftValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_l: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-是否锁闭位', list: this.psdLeftValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_psl: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-PSL允许钥匙开关位', list: this.psdLeftValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_ts_b: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-PSL试灯按钮位', list: this.psdLeftValue, trigger: 'blur' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.formRight = {
|
||||||
|
labelWidth: '220px',
|
||||||
|
items: [
|
||||||
|
{ prop: 'o_addr', label: '输出网关字地址:', type: 'number', min: 1, max: 20000, step: 1},
|
||||||
|
{ prop: 'o_c', label: '输出-关门位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_dc_s', label: '输出-关门信号灯控制位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_dcl_s', label: '输出-关门且锁闭信号灯控制位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_do_s', label: '输出-开门信号灯控制位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_ir_s', label: '输出-互锁解除信号灯控制位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_l', label: '输出-锁闭位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_o', label: '输出-开门位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_psl_s', label: '输出-PSL信号灯控制位:', type: 'number', min: 1, max: 16, step: 1}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.rightRules = {
|
||||||
|
o_addr: [
|
||||||
|
{ required: true, message: '请填写输出网关字地址', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_c: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-关门位', list: this.psdRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_dc_s: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-关门信号灯控制位', list: this.psdRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_dcl_s: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-关门且锁闭信号灯控制位', list: this.psdRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_do_s: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-开门信号灯控制位', list: this.psdRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_ir_s: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-互锁解除信号灯控制位', list: this.psdRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_l: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-锁闭位', list: this.psdRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_o: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-开门位', list: this.psdRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_psl_s: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-PSL信号灯控制位', list: this.psdRightValue, trigger: 'blur' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'SIGNAL': {
|
||||||
|
this.setDeviceConfigFunction = setSignalConfig;
|
||||||
|
this.formTop.labelWidth = '150px';
|
||||||
|
this.formLeft = {
|
||||||
|
labelWidth: '150px',
|
||||||
|
items: [
|
||||||
|
{ prop:'i_addr', label:'输入网关字地址:', type: 'number', min: 1, max: 20000, step: 1},
|
||||||
|
{ prop: 'i_f', label: '输入-故障表示位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'i_g', label: '输入-绿灯表示位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'i_r', label: '输入-红灯表示位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'i_y', label: '输入-黄灯表示位:', type: 'number', min: 1, max: 16, step: 1}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.leftRules = {
|
||||||
|
i_addr: [
|
||||||
|
{ required: true, message: '请填写输入网关字地址', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_f: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-故障表示位', list: this.signalLeftValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_g: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-绿灯表示位', list: this.signalLeftValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_r: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-红灯表示位', list: this.signalLeftValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_y: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-黄灯表示位', list: this.signalLeftValue, trigger: 'blur' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.formRight = {
|
||||||
|
labelWidth: '150px',
|
||||||
|
size: 'mini',
|
||||||
|
items: [
|
||||||
|
{ prop: 'o_addr', label: '输出网关字地址:', type: 'number', min: 1, max: 20000, step: 1},
|
||||||
|
{ prop: 'o_f', label: '输出-故障控制位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_g', label: '输出-绿灯控制位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_r', label: '输出-红灯控制位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_y', label: '输出-黄灯控制位:', type: 'number', min: 1, max: 16, step: 1}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.rightRules = {
|
||||||
|
o_addr: [
|
||||||
|
{ required: true, message: '请填写输出网关字地址', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_f: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-故障控制位', list: this.signalRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_g: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-绿灯控制位', list: this.signalRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_r: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-红灯控制位', list: this.signalRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_y: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-黄灯控制位', list: this.signalRightValue, trigger: 'blur' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'SWITCH': {
|
||||||
|
this.setDeviceConfigFunction = setSwitchConfig;
|
||||||
|
this.formTop.labelWidth = '160px';
|
||||||
|
this.formLeft = {
|
||||||
|
labelWidth: '160px',
|
||||||
|
items: [
|
||||||
|
{ prop:'i_addr', label:'输入网关字地址:', type: 'number', min: 1, max: 20000, step: 1},
|
||||||
|
{ prop: 'i_f', label: '输入-故障挤岔表示位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'i_n', label: '输入-定位表示位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'i_r', label: '输入-反位表示位:', type: 'number', min: 1, max: 16, step: 1}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.leftRules = {
|
||||||
|
i_addr: [
|
||||||
|
{ required: true, message: '请填写输入网关字地址', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_f: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-故障挤岔表示位', list: this.switchLeftValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_n: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-定位表示位', list: this.switchLeftValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
i_r: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输入-反位表示位', list: this.switchLeftValue, trigger: 'blur' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.formRight = {
|
||||||
|
labelWidth: '160px',
|
||||||
|
items: [
|
||||||
|
{ prop: 'o_addr', label: '输出网关字地址:', type: 'number', min: 1, max: 20000, step: 1},
|
||||||
|
{ prop: 'o_f', label: '输出-故障挤岔控制位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_n', label: '输出-定操控制位:', type: 'number', min: 1, max: 16, step: 1},
|
||||||
|
{ prop: 'o_r', label: '输出-反操控制位:', type: 'number', min: 1, max: 16, step: 1}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
this.rightRules = {
|
||||||
|
o_addr: [
|
||||||
|
{ required: true, message: '请填写输出网关字地址', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_f: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输出-故障挤岔控制位', list: this.switchRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_n: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输出-定操控制位', list: this.switchRightValue, trigger: 'blur' }
|
||||||
|
],
|
||||||
|
o_r: [
|
||||||
|
{ validator: validateDevice, messageEmpty: '请填写输出-反操控制位', list: this.switchRightValue, trigger: 'blur' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
initData(row) {
|
||||||
|
getDeviceDetail(row.id).then(resp => {
|
||||||
|
if (resp.data.config) {
|
||||||
|
this.formModel = resp.data.config;
|
||||||
|
}
|
||||||
|
}).catch(()=> {
|
||||||
|
this.$message.error('获取项目设备详情失败!');
|
||||||
|
});
|
||||||
|
if (row.projectCode === 'XTY') {
|
||||||
|
this.gatewayList = [{lable:'XTY', value: 'XTY'}];
|
||||||
|
} else if (row.projectCode === 'GZB') {
|
||||||
|
this.gatewayList = [{label: 'GZB_1', value: 'GZB_1'}];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
doShow(row) {
|
||||||
|
this.initData(row);
|
||||||
|
this.initForm(row);
|
||||||
|
this.dialogVisible = true;
|
||||||
|
this.data = row;
|
||||||
|
},
|
||||||
|
doSave() {
|
||||||
|
const self = this;
|
||||||
|
this.$refs.datatop.validateForm(() => {
|
||||||
|
self.$refs.dataleft.validateForm(()=> {
|
||||||
|
self.$refs.dataright.validateForm(()=> {
|
||||||
|
this.setDeviceConfigFunction(this.data.id, this.formModel).then(response => {
|
||||||
|
self.$message.success('设置设备网关映射配置成功');
|
||||||
|
self.handleClose();
|
||||||
|
self.$emit('reloadTable');
|
||||||
|
}).catch(error => {
|
||||||
|
self.$message.error(this.$t('tip.modifyTheFailure') + error.message);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleClose(done) {
|
||||||
|
this.formModel = {};
|
||||||
|
this.formLeft = {};
|
||||||
|
this.formRight = {};
|
||||||
|
this.leftRules = {};
|
||||||
|
this.rightRules = {};
|
||||||
|
this.gatewayList = [];
|
||||||
|
this.dialogVisible = false;
|
||||||
|
this.$refs.datatop.resetForm();
|
||||||
|
this.$refs.dataleft.resetForm();
|
||||||
|
this.$refs.dataright.resetForm();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
176
src/views/system/deviceManage/index.vue
Normal file
176
src/views/system/deviceManage/index.vue
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<QueryListPage ref="queryListPage" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
|
||||||
|
<deivce-add ref="add" @reloadTable="reloadTable" />
|
||||||
|
<edit-config ref="editConfig" @reloadTable="reloadTable" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getProjectDeviceList, deleteProjectDevice } from '@/api/project';
|
||||||
|
import DeivceAdd from './add';
|
||||||
|
import EditConfig from './editConfig';
|
||||||
|
export default {
|
||||||
|
name: 'DeviceManage',
|
||||||
|
components: {
|
||||||
|
DeivceAdd,
|
||||||
|
EditConfig
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
examResultList: [],
|
||||||
|
pagerConfig: {
|
||||||
|
pageSize: 'pageSize',
|
||||||
|
pageIndex: 'pageNum'
|
||||||
|
},
|
||||||
|
deviceTypeList:[{label: '道岔', value: 'SWITCH'}, {label: '信号机', value:'SIGNAL'}, {label: '屏蔽门', value: 'PSD'}],
|
||||||
|
projectList: [{label:'西铁院', value: 'XTY'}, {label: '贵州装备', value:'GZB'}],
|
||||||
|
queryForm: {
|
||||||
|
labelWidth: '120px',
|
||||||
|
reset: true,
|
||||||
|
queryObject: {
|
||||||
|
projectCode: {
|
||||||
|
type: 'select',
|
||||||
|
label: '项目编码',
|
||||||
|
config: {
|
||||||
|
data: [{label:'西铁院', value: 'XTY'}, {label: '贵州装备', value:'GZB'}]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
code: {
|
||||||
|
type: 'text',
|
||||||
|
label: '设备编号'
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: 'select',
|
||||||
|
label: '设备类型',
|
||||||
|
config: {
|
||||||
|
data: [{label: '道岔', value: 'SWITCH'}, {label: '信号机', value:'SIGNAL'}, {label: '屏蔽门', value: 'PSD'}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
queryList: {
|
||||||
|
query: getProjectDeviceList,
|
||||||
|
selectCheckShow: false,
|
||||||
|
indexShow: true,
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: '设备编号',
|
||||||
|
prop: 'code'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '项目名称',
|
||||||
|
prop: 'projectCode',
|
||||||
|
type: 'tag',
|
||||||
|
columnValue: (row) => { return this.$convertField(row.projectCode, this.projectList, ['value', 'label']); },
|
||||||
|
tagType: (row) => { return 'success'; }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '设备类型',
|
||||||
|
prop: 'type',
|
||||||
|
type: 'tag',
|
||||||
|
columnValue: (row) => { return this.$convertField(row.type, this.deviceTypeList, ['value', 'label']); },
|
||||||
|
tagType: (row) => { return 'success'; }
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// title: this.$t('system.trainingUseTime'),
|
||||||
|
// prop: 'duration',
|
||||||
|
// type: 'tag',
|
||||||
|
// columnValue: (row) => { return this.computation(row.duration); },
|
||||||
|
// tagType: (row) => { return 'success'; }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// title: '网关唯一编码',
|
||||||
|
// prop: 'config',
|
||||||
|
// columnValue: (row) => { return row.config; }
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
title: '创建时间',
|
||||||
|
prop: 'createTime',
|
||||||
|
type: 'tag',
|
||||||
|
columnValue: (row) => { return this.handleTime(row.createTime); },
|
||||||
|
tagType: (row) => { return 'success'; }
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// title: '创建人',
|
||||||
|
// prop: 'creator'
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
type: 'button',
|
||||||
|
title: this.$t('global.operate'),
|
||||||
|
width: '250',
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
name: '编辑配置',
|
||||||
|
handleClick: this.editConfig
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: this.$t('global.delete'),
|
||||||
|
handleClick: this.handleDelete,
|
||||||
|
type: 'danger'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
actions: [
|
||||||
|
{ text: this.$t('global.add'), handler: this.createProjectDevice}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
currentModel: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
createProjectDevice() {
|
||||||
|
this.$refs.add.show();
|
||||||
|
},
|
||||||
|
computation(fieldValue, type) {
|
||||||
|
let list = [];
|
||||||
|
if (type === 'projectType') {
|
||||||
|
list = this.projectList;
|
||||||
|
} else if ( type === 'deviceType' ) {
|
||||||
|
list = this.deviceTypeList;
|
||||||
|
}
|
||||||
|
let value = '';
|
||||||
|
list.forEach((elem) => {
|
||||||
|
elem.label = fieldValue;
|
||||||
|
value = elem.value;
|
||||||
|
});
|
||||||
|
console.log(value, fieldValue, type);
|
||||||
|
return value;
|
||||||
|
},
|
||||||
|
handleTime(time) {
|
||||||
|
const timeList = time.split('T');
|
||||||
|
let newTime = '';
|
||||||
|
timeList.forEach(elem => {
|
||||||
|
newTime += elem;
|
||||||
|
});
|
||||||
|
return newTime;
|
||||||
|
},
|
||||||
|
// 删除
|
||||||
|
handleDelete(index, row) {
|
||||||
|
this.$confirm('此操作将删除该项目设备!', this.$t('global.tips'), {
|
||||||
|
confirmButtonText: this.$t('global.confirm'),
|
||||||
|
cancelButtonText: this.$t('global.cancel'),
|
||||||
|
type: 'warning'
|
||||||
|
}).then(() => {
|
||||||
|
deleteProjectDevice(row.id).then(response => {
|
||||||
|
this.$message.success(this.$t('system.deleteSuccess'));
|
||||||
|
this.reloadTable();
|
||||||
|
}).catch(() => {
|
||||||
|
this.reloadTable();
|
||||||
|
this.$messageBox(this.$t('error.deleteFailed'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
editConfig(index, row) {
|
||||||
|
this.$refs.editConfig.doShow(row);
|
||||||
|
},
|
||||||
|
reloadTable() {
|
||||||
|
this.queryList.reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
Loading…
Reference in New Issue
Block a user