无人机管理后台前端(已迁走)
张含笑
2025-12-09 5808f76456ca0d40de5074f132b73a5a488e3e13
src/views/device/addDevice.vue
@@ -72,9 +72,10 @@
                dialogWidth: 1050,
                searchGutter: 30,
                searchMenuPosition: 'left',
                searchMenuSpan: 4,
                tip: false,
                searchShow: true,
                searchMenuSpan: 6,
                border: true,
                index: true,
                indexLabel: '序号',
@@ -95,10 +96,9 @@
                        prop: 'workspace_name',
                        // editDisabled: true,
                        editDisplay: false,
                        searchLabelWidth: 130,
                        search: true,
                        // searchSpan: 4,
                        labelWidth: 130,
                        search: true,
                        searchSpan: 4,
                        rules: [
                            {
                                required: true,
@@ -125,7 +125,7 @@
                        ],
                    },
                    {
                        label: '所属单位',
                        label: '所属部门',
                        prop: 'dept_name',
                        addDisplay: false,
                        editDisplay: false,
@@ -135,13 +135,13 @@
                        rules: [
                        {
                            required: true,
                            message: '请输入所属单位',
                            message: '请输入所属部门',
                            trigger: 'blur',
                        },
                        ],
                    },
                    {
                        label: '所属单位',
                        label: '所属部门',
                        prop: 'dept_id',
                        hide: true,
                        type: 'tree',
@@ -157,7 +157,7 @@
                        rules: [
                        {
                            required: true,
                            message: '请输入所属单位',
                            message: '请输入所属部门',
                            trigger: 'blur',
                        },
                        ],
@@ -180,17 +180,16 @@
                        label: '设备类型',
                        editDisplay: false,
                        prop: 'type',
                        type: 'radio',
                        labelWidth: 130,
                        value: 0,
                        type: 'select',
                        dicData: [
                            {
                                label: '机场',
                                label: '机巢',
                                value: 0
                            },
                            {
                                label: '遥控器',
                                label: '控制器',
                                value: 1
                            }
                        ],
@@ -214,81 +213,33 @@
                        width: 200,
                    },
                    {
                        label: '设备位置',// '行政区划',
                        prop: 'area_code',
                        type: 'cascader',
                        labelWidth: 130,
                        searchSpan: 4,
                        hide: true,
                        search: true,
                        editDisplay: true,
                        viewDisplay: false,
                        props: {
                        label: 'title',
                        value: 'value',
                        emitPath: false,
                        checkStrictly: true,
                        multiple: false,
                        expandTrigger: 'hover',
                        },
                        dataType: 'string',
                        rules: [
                      label: '设备位置',
                      prop: 'area_code',
                      // type: 'cascader',
                      type: 'tree',
                      labelWidth: 130,
                      searchSpan: 4,
                      hide: true,
                      search: true,
                      // overHidden: true,
                      editDisplay: true,
                      viewDisplay: true,
                      checkStrictly: true,
                      defaultExpandAll: true,
                      dicData: [],
                      props: {
                        label: 'name',
                        value: 'id',
                        children: 'childrens',
                      },
                      rules: [
                        {
                            required: true,
                            message: '请选择设备位置',
                            trigger: 'change',
                          required: true,
                          message: '请选择设备位置',
                          trigger: 'change',
                        },
                        ],
                        lazy: true,
                        lazyLoad (node, resolve) {
                        let level = node.level
                        let list = []
                        let callback = () => {
                            resolve(
                            (list || []).map(ele => ({
                                ...ele,
                                value: ele.value,
                                leaf: level >= 2,
                            }))
                            )
                        }
                        if (level === 0) {
                            getLazyTree('000000000000').then(res => {
                            list = res.data.data
                            callback()
                            })
                        } else if (level === 1) {
                            getLazyTree(node.value).then(res => {
                            list = res.data.data
                            callback()
                            })
                        } else if (level === 2) {
                            getLazyTree(node.value).then(res => {
                            list = res.data.data
                            callback()
                            })
                        } else {
                            callback()
                        }
                        },
                      ],
                    },
                    {
                        label: '设备描述',// '工作空间描述',
                        prop: 'workspace_desc',
                        labelWidth: 130,
                        // search: true,
                        searchSpan: 4,
                        // editDisabled: true,
                        rules: [
                            {
                                required: true,
                                message: '请输入设备描述',
                                trigger: 'blur',
                            },
                        ],
                    },
                    {
                        label: '创建时间',
                        prop: 'create_time',
@@ -301,7 +252,45 @@
                        format: 'YYYY-MM-DD HH:mm:ss',
                    },
                    {
                        label: '设备描述', // '工作空间描述',
                        prop: 'workspace_desc',
                        type: 'textarea',
                        labelWidth: 130,
                        searchSpan: 4,
                        overHidden: true,
                        minRows: 3,
                        maxRows: 5,
                        maxlength: 250,
                        span: 24,
                        showWordLimit: true,
                        rules: [
                            {
                                required: true,
                                message: '请输入设备描述不能超过250个字',
                                trigger: 'blur',
                            },
                            {
                                max: 250,
                                message: '设备描述不能超过250个字',
                                trigger: 'blur',
                            },
                            // 如果需要更严格的校验(如中文字符计算),可以使用 validator
                            {
                                validator: (rule, value, callback) => {
                                    if (value && value.length > 250) {
                                        callback(new Error('设备描述不能超过250个字'));
                                    } else {
                                        callback();
                                    }
                                },
                                trigger: 'blur',
                            },
                        ],
                    },
                ],
            },
@@ -346,6 +335,12 @@
        await this.getRegionTreeList();
        await this.getSystemNamesList();
    },
    mounted() {
      getRegionTreeAll({ parentCode: this.userInfo.detail.areaCode }).then(res => {
        const column = this.findObject(this.option.column, 'area_code');
        column.dicData = res.data.data ? [res.data.data] : [];
      });
    },
    methods: {
        async getRegionTreeList(code) {
            try {
@@ -376,20 +371,20 @@
                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: '',
                }
            }
        },
        // 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);
@@ -398,7 +393,7 @@
                console.error('获取行政区划数据失败:', error);
                return [];
            }
        },
        },
        findNodeById(tree, id) {
            if (tree.id === id) {
                return tree;
@@ -416,11 +411,11 @@
            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);
@@ -439,7 +434,7 @@
        copyInfo (row, index) {
          const ipAddress = import.meta.env.VITE_APP_DEVICE_IP
          let params = `
            host: tcp://${ipAddress}
            网关地址: tcp://${ipAddress}
            账号:drone
            密码:drone@123
            组织id:${row.bing_id}
@@ -582,12 +577,24 @@
            }
        },
        beforeOpen (done, type) {
            if (type === 'add') {
              this.form = {
                workspace_name: '',
                platform_name: '',
                dept_name: '',
                bind_code: '',
                type: 0,
                workspace_desc: '',
                area_name: '',
                area_code: '',
              }
            }
            if (['edit', 'view'].includes(type)) {
                getDetail(this.form.id).then(async res => {
                    const data = res.data.data
                     this.form = {
                        ...data,
                        area_code: await this.getFullAreaCode(data.area_code),
                        // area_code: await this.getFullAreaCode(data.area_code),
                     }
                })
            }
@@ -603,7 +610,7 @@
            this.onLoad(this.page, this.query)
        },
        onLoad (page, params = {}) {
            const { releaseTimeRange } = this.query
            let values = {
                ...params,
@@ -622,7 +629,7 @@
            if (values.area_code) {
                values['area_code'] = values.area_code.split(',').pop()
            }
            this.loading = true
            getList(page.currentPage, page.pageSize, values).then(async res => {
                const data = res.data.data
@@ -642,7 +649,7 @@
                this.loading = false
                this.selectionClear()
            })
        },
        treeLoad (tree, treeNode, resolve) {
            var params = {