From 02409bfbe15f22fc3b5dccadabfd860a660a49d9 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Sat, 11 Oct 2025 10:37:14 +0800
Subject: [PATCH] feat: 名称修改
---
src/views/device/addDevice.vue | 264 ++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 221 insertions(+), 43 deletions(-)
diff --git a/src/views/device/addDevice.vue b/src/views/device/addDevice.vue
index f556b04..8b12544 100644
--- a/src/views/device/addDevice.vue
+++ b/src/views/device/addDevice.vue
@@ -24,6 +24,9 @@
getDetail,
} from '@/api/device/workspaces'
+import { getList as getSystemNames } from '@/api/system/sysConfig'
+import { getRegionTreeAll } from '@/api/job/task';
+
import { getLazyTree } from '@/api/base/region'
import { mapGetters } from 'vuex'
@@ -36,6 +39,8 @@
data () {
return {
+ xzqhData: [],
+ systemNamesList: [],
// 用于记录已经创建的websocket,防止重复创建
webSocketIdSet: new Set(),
// 用于保存多组websocket
@@ -60,20 +65,26 @@
},
selectionList: [],
option: {
+ addTitle: '设备注册',
menuWidth: 300,
lazy: true,
tree: true,
- // dialogWidth: 1050,
+ dialogWidth: 1050,
+ searchGutter: 30,
tip: false,
searchShow: true,
searchMenuSpan: 6,
+ searchGutter: 30,
border: true,
index: true,
+ indexLabel: '序号',
+ indexWidth: 60,
viewBtn: true,
selection: false,
excelBtn: false,
addBtn: true,
+ addBtnText: '设备注册',
dialogClickModal: false,
grid: false,
@@ -83,8 +94,9 @@
{
label: '设备名称',// '工作空间名称',
prop: 'workspace_name',
- editDisabled: true,
- searchLabelWidth: 130,
+ // editDisabled: true,
+ editDisplay: false,
+ labelWidth: 130,
search: true,
// searchSpan: 4,
labelWidth: 130,
@@ -100,7 +112,11 @@
label: '系统名称',// '平台名称',
prop: 'platform_name',
labelWidth: 130,
- editDisabled: true,
+ width: 180,
+ // editDisabled: true,
+ editDisplay: false,
+ type: 'select',
+ dicData: this.systemNamesDicData,
rules: [
{
required: false,
@@ -111,28 +127,48 @@
},
{
label: '所属单位',
+ prop: 'dept_name',
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ labelWidth: 130,
+ width: 180,
+ rules: [
+ {
+ required: true,
+ message: '请输入所属单位',
+ trigger: 'blur',
+ },
+ ],
+ },
+ {
+ label: '所属单位',
prop: 'dept_id',
+ hide: true,
type: 'tree',
defaultExpandAll: true,
+ search: true,
+ searchSpan: 4,
labelWidth: 130,
dicUrl: '/blade-system/dept/getTree',
props: {
- label: 'name',
- value: 'id',
+ label: 'name',
+ value: 'id',
},
rules: [
- {
- required: true,
- message: '请输入所属单位',
- trigger: 'blur',
- },
+ {
+ required: true,
+ message: '请输入所属单位',
+ trigger: 'blur',
+ },
],
},
{
label: '绑定编号',
prop: 'bind_code',
labelWidth: 130,
- editDisabled: true,
+ // editDisabled: true,
+ editDisplay: false,
rules: [
{
required: false,
@@ -143,10 +179,12 @@
},
{
label: '设备类型',
+ editDisplay: false,
prop: 'type',
type: 'radio',
labelWidth: 130,
value: 0,
+ type: 'select',
dicData: [
{
label: '机场',
@@ -166,46 +204,33 @@
],
},
{
- label: '设备描述',// '工作空间描述',
- prop: 'workspace_desc',
- labelWidth: 130,
- // search: true,
- searchSpan: 4,
- // editDisabled: true,
- rules: [
- {
- required: true,
- message: '请输入设备描述',
- trigger: 'blur',
- },
- ],
- },
-
- {
- label: '创建时间',
- prop: 'create_time',
- addDisplay: false,
- editDisplay: false,
- overHidden: true,
- type: 'date',
- labelWidth: 130,
- width: 160,
- format: 'YYYY-MM-DD HH:mm:ss',
-
- },
- {
label: '设备位置',// '行政区划',
+ prop: 'area_name',
+ // hide: true,
+ overHidden: true,
+ addDisplay: false, //新增显示
+ editDisplay: false, //编辑显示
+ viewDisplay: true, //查看显示
+ labelWidth: 130,
+ width: 200,
+ },
+ {
+ label: '设备位置',
prop: 'area_code',
type: 'cascader',
labelWidth: 130,
+ searchSpan: 4,
hide: true,
+ search: true,
+ // overHidden: true,
editDisplay: true,
- viewDisplay: false,
+ viewDisplay: true,
+ checkStrictly: true,
+
props: {
label: 'title',
value: 'value',
emitPath: false,
- checkStrictly: true,
multiple: false,
expandTrigger: 'hover',
},
@@ -251,6 +276,49 @@
}
},
},
+ {
+ label: '设备描述', // '工作空间描述',
+ prop: 'workspace_desc',
+ labelWidth: 130,
+ searchSpan: 4,
+ rules: [
+ {
+ required: true,
+ message: '请输入设备描述',
+ trigger: 'blur',
+ },
+ {
+ max: 30,
+ message: '设备描述不能超过30个字',
+ trigger: 'blur',
+ },
+ // 如果需要更严格的校验(如中文字符计算),可以使用 validator
+ {
+ validator: (rule, value, callback) => {
+ if (value && value.length > 30) {
+ callback(new Error('设备描述不能超过30个字'));
+ } else {
+ callback();
+ }
+ },
+ trigger: 'blur',
+ },
+ ],
+ },
+
+ {
+ label: '创建时间',
+ prop: 'create_time',
+ addDisplay: false,
+ editDisplay: false,
+ overHidden: true,
+ type: 'date',
+ labelWidth: 130,
+ width: 160,
+ format: 'YYYY-MM-DD HH:mm:ss',
+
+ },
+
],
},
@@ -275,6 +343,12 @@
})
return ids.join(',')
},
+ systemNamesDicData() {
+ return this.systemNamesList.map(item => ({
+ label: item.name,
+ value: item.id,
+ }));
+ },
},
destroyed () {
this.websocketMap.forEach((k, v) => {
@@ -285,7 +359,99 @@
}
})
},
+ async created() {
+ await this.getRegionTreeList();
+ await this.getSystemNamesList();
+ },
methods: {
+ async getRegionTreeList(code) {
+ try {
+ const res = await getRegionTreeAll({ parentCode: code });
+ return res.data.data; // 返回数据而不是赋值给 this.xzqhData
+ } catch (error) {
+ console.error('获取区域树数据失败:', error);
+ return null;
+ }
+ },
+ async getSystemNamesList() {
+ try {
+ const res = await getSystemNames(1, 99);
+ if (res?.data?.data?.records) {
+ this.systemNamesList = res.data.data.records;
+ // 找到平台名称列的索引
+ const columnIndex = this.option.column.findIndex(col => col.prop === 'platform_name');
+ if (columnIndex !== -1) {
+ // 直接更新 dicData
+ this.option.column[columnIndex].dicData = this.systemNamesList.map(item => ({
+ label: item.name,
+ value: item.id
+ }));
+ }
+ }
+ } catch (error) {
+ console.error('获取系统名称失败:', error);
+ this.systemNamesList = [];
+ }
+ },
+ beforeOpen (type, row, index) {
+ if (type === 'add') {
+ this.form = {
+ workspace_name: '',
+ platform_name: '',
+ dept_name: '',
+ bind_code: '',
+ type: 0,
+ workspace_desc: '',
+ area_name: '',
+ area_code: '',
+ }
+ }
+ },
+ async getXZQHList(area_code) {
+ try {
+ const res = await getLazyTree(area_code);
+ return res.data.data; // 返回数据,而不是直接修改 this.xzqhData
+ } catch (error) {
+ console.error('获取行政区划数据失败:', error);
+ return [];
+ }
+ },
+ findNodeById(tree, id) {
+ if (tree.id === id) {
+ return tree;
+ }
+ if (tree.childrens && tree.childrens.length > 0) {
+ for (const child of tree.childrens) {
+ const found = this.findNodeById(child, id);
+ if (found) return found;
+ }
+ }
+ return null;
+ },
+ async fetchAreaName(areaCode) {
+ if (!areaCode) return '/';
+ try {
+ const response = await this.getFullAreaCode(areaCode);
+ const codes = response.split(',');
+
+ // 获取区域树数据
+ const xzqhData = await this.getRegionTreeList(codes[0]);
+ if (!xzqhData) return '/';
+
+ const names = [];
+ for (const code of codes) {
+ const node = this.findNodeById(xzqhData, code);
+ if (node) {
+ names.push(node.name);
+ }
+ }
+
+ return names.join('');
+ } catch (error) {
+ console.error('获取区域名称失败:', error);
+ return '/';
+ }
+ },
copyInfo (row, index) {
const ipAddress = import.meta.env.VITE_APP_DEVICE_IP
@@ -454,6 +620,7 @@
this.onLoad(this.page, this.query)
},
onLoad (page, params = {}) {
+
const { releaseTimeRange } = this.query
let values = {
...params,
@@ -467,9 +634,14 @@
}
values.releaseTimeRange = null
}
+ console.log(values.area_code,this.query)
values['type'] = 1
+ if (values.area_code) {
+ values['area_code'] = values.area_code.split(',').pop()
+ }
+
this.loading = true
- getList(page.currentPage, page.pageSize, values).then(res => {
+ getList(page.currentPage, page.pageSize, values).then(async res => {
const data = res.data.data
this.page.total = data.total
// data.records.forEach(e => {
@@ -479,9 +651,15 @@
// }
// });
this.data = data.records
+ for (const row of this.data) {
+ if (row.area_code) {
+ row.area_name = await this.fetchAreaName(row.area_code);
+ }
+ }
this.loading = false
this.selectionClear()
})
+
},
treeLoad (tree, treeNode, resolve) {
var params = {
--
Gitblit v1.9.3