Merge remote-tracking branch 'origin/feature/v5.0/5.0.5' into feature/v5.0/5.0.5
| | |
| | | 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' |
| | |
| | | |
| | | data () { |
| | | return { |
| | | xzqhData: [], |
| | | systemNamesList: [], |
| | | // 用于记录已经创建的websocket,防止重复创建 |
| | | webSocketIdSet: new Set(), |
| | | // 用于保存多组websocket |
| | |
| | | }, |
| | | selectionList: [], |
| | | option: { |
| | | addTitle: '设备注册', |
| | | menuWidth: 300, |
| | | lazy: true, |
| | | tree: true, |
| | |
| | | searchMenuSpan: 6, |
| | | border: true, |
| | | index: true, |
| | | indexLabel: '序号', |
| | | indexWidth: 60, |
| | | viewBtn: true, |
| | | selection: false, |
| | | excelBtn: false, |
| | | addBtn: true, |
| | | addBtnText: '设备注册', |
| | | dialogClickModal: false, |
| | | grid: false, |
| | | |
| | |
| | | { |
| | | label: '设备名称',// '工作空间名称', |
| | | prop: 'workspace_name', |
| | | editDisabled: true, |
| | | // editDisabled: true, |
| | | editDisplay: false, |
| | | searchLabelWidth: 130, |
| | | search: true, |
| | | // searchSpan: 4, |
| | |
| | | label: '系统名称',// '平台名称', |
| | | prop: 'platform_name', |
| | | labelWidth: 130, |
| | | editDisabled: true, |
| | | width: 180, |
| | | // editDisabled: true, |
| | | editDisplay: false, |
| | | type: 'select', |
| | | dicData: this.systemNamesDicData, |
| | | rules: [ |
| | | { |
| | | required: false, |
| | |
| | | }, |
| | | { |
| | | 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, |
| | |
| | | }, |
| | | { |
| | | label: '设备类型', |
| | | editDisplay: false, |
| | | prop: 'type', |
| | | type: 'radio', |
| | | labelWidth: 130, |
| | | value: 0, |
| | | type: 'select', |
| | | dicData: [ |
| | | { |
| | | label: '机场', |
| | |
| | | ], |
| | | }, |
| | | { |
| | | 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, |
| | | label: '设备位置',// '行政区划', |
| | | prop: 'area_name', |
| | | // hide: true, |
| | | overHidden: true, |
| | | type: 'date', |
| | | addDisplay: false, //新增显示 |
| | | editDisplay: false, //编辑显示 |
| | | viewDisplay: true, //查看显示 |
| | | labelWidth: 130, |
| | | width: 160, |
| | | format: 'YYYY-MM-DD HH:mm:ss', |
| | | |
| | | width: 200, |
| | | }, |
| | | { |
| | | label: '设备位置',// '行政区划', |
| | | prop: 'area_code', |
| | | type: 'cascader', |
| | | labelWidth: 130, |
| | | searchSpan: 4, |
| | | hide: true, |
| | | search: true, |
| | | editDisplay: true, |
| | | viewDisplay: false, |
| | | props: { |
| | |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | 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', |
| | | |
| | | }, |
| | | |
| | | |
| | | ], |
| | | }, |
| | |
| | | }) |
| | | return ids.join(',') |
| | | }, |
| | | systemNamesDicData() { |
| | | return this.systemNamesList.map(item => ({ |
| | | label: item.name, |
| | | value: item.id, |
| | | })); |
| | | }, |
| | | }, |
| | | destroyed () { |
| | | this.websocketMap.forEach((k, v) => { |
| | |
| | | } |
| | | }) |
| | | }, |
| | | 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 |
| | |
| | | this.onLoad(this.page, this.query) |
| | | }, |
| | | onLoad (page, params = {}) { |
| | | |
| | | const { releaseTimeRange } = this.query |
| | | let values = { |
| | | ...params, |
| | |
| | | } |
| | | 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 => { |
| | |
| | | // } |
| | | // }); |
| | | 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 = { |
| | |
| | | border: true, |
| | | index: true, |
| | | indexLabel: '序号', |
| | | indexWidth: 60, |
| | | viewBtn: true, |
| | | delBtn: false, |
| | | selection: true, |
| | |
| | | { |
| | | label: '设备类型', |
| | | prop: 'domainTxt', |
| | | editDisabled: true, |
| | | // editDisabled: true, |
| | | editDisplay: false, //编辑显示 |
| | | viewDisplay: true, //查看显示 |
| | | labelWidth: 130, |
| | |
| | | { |
| | | label: '设备型号', |
| | | prop: 'device_name', |
| | | editDisabled: true, |
| | | // editDisabled: true, |
| | | editDisplay: false, //编辑显示 |
| | | viewDisplay: true, //查看显示 |
| | | search: false, |
| | | searchSpan: 4, |
| | |
| | | width: 120, |
| | | overHidden: true, |
| | | searchSpan: 4, |
| | | editDisabled: true, |
| | | // editDisabled: true, |
| | | editDisplay: false, //编辑显示 |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | |
| | | // }, |
| | | // ], |
| | | // }, |
| | | { |
| | | label: '设备名称', |
| | | prop: 'nickname', |
| | | labelWidth: 130, |
| | | width: 160, |
| | | searchSpan: 4, |
| | | search: true, |
| | | overHidden: true, |
| | | editDisplay: true, //编辑显示 |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入设备名称', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '设备位置',// '行政区划', |
| | | prop: 'area_name', |
| | |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | label: '设备名称', |
| | | prop: 'nickname', |
| | | labelWidth: 130, |
| | | width: 160, |
| | | searchSpan: 4, |
| | | search: true, |
| | | overHidden: true, |
| | | editDisplay: true, //编辑显示 |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入设备名称', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | |
| | | // { |
| | | // label: '设备位置', |
| | | // prop: 'address', |
| | |
| | | labelWidth: 130, |
| | | width: 160, |
| | | overHidden: true, |
| | | editDisabled: true, |
| | | editDisplay: false, //编辑显示 |
| | | // editDisabled: true, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | }, |
| | | { |
| | | // hide: true, |
| | | label: '保险有效期', |
| | | prop: 'duration_of_insurance', |
| | | labelWidth: 130, |
| | | width: 200, |
| | | type: 'daterange', |
| | | format: 'YYYY-MM-DD', |
| | | valueFormat: 'YYYY-MM-DD HH:mm:ss', |
| | | startPlaceholder: '保险开始日期', |
| | | endPlaceholder: '保险结束日期', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择保险有效期', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | // { |
| | | // label: '保险有效期', |
| | |
| | | prop: 'traffic_remaining', |
| | | labelWidth: 130, |
| | | width: 100, |
| | | editDisabled: true, |
| | | // editDisabled: true, |
| | | editDisplay: false, //编辑显示 |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | |
| | | width: 120, |
| | | type: 'date', |
| | | format: 'YYYY-MM-DD', |
| | | editDisabled: true, |
| | | editDisplay: false, //编辑显示 |
| | | // editDisabled: true, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | |
| | | prop: 'firmware_version', |
| | | labelWidth: 130, |
| | | width: 110, |
| | | editDisabled: true, |
| | | editDisplay: false, //编辑显示 |
| | | // editDisabled: true, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | |
| | | hide: true, |
| | | viewDisabled: true, |
| | | addDisabled: true, |
| | | editDisabled: true, |
| | | editDisplay: false, //编辑显示 |
| | | // editDisabled: true, |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | |
| | | // }, |
| | | |
| | | |
| | | { |
| | | // hide: true, |
| | | label: '保险有效期', |
| | | prop: 'duration_of_insurance', |
| | | labelWidth: 130, |
| | | width: 160, |
| | | type: 'daterange', |
| | | format: 'YYYY-MM-DD', |
| | | valueFormat: 'YYYY-MM-DD HH:mm:ss', |
| | | startPlaceholder: '保险开始日期', |
| | | endPlaceholder: '保险结束日期', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择保险有效期', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | |
| | | |
| | | { |
| | | label: '在线时间', |
| | | hide: true, |
| | | prop: 'login_time', |
| | | type: 'date', |
| | | editDisplay: true, //编辑显示 |
| | | editDisabled: true, |
| | | editDisplay: false, //编辑显示 |
| | | // editDisabled: true, |
| | | viewDisplay: true, //查看显示 |
| | | addDisplay: true, |
| | | labelWidth: 130, |
| | |
| | | label: '注册时间', |
| | | prop: 'create_time', |
| | | type: 'date', |
| | | editDisplay: true, //编辑显示 |
| | | editDisabled: true, |
| | | hide: true, |
| | | editDisplay: false, //编辑显示 |
| | | // editDisabled: true, |
| | | viewDisplay: true, //查看显示 |
| | | addDisplay: true, |
| | | overHidden: true, |
| | |
| | | values.releaseTimeRange = null |
| | | } |
| | | 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 => { |
| | | const data = res.data.data |