无人机管理后台前端(已迁走)
shuishen
2025-05-19 2dfc8dc4bcd3d3cd4aed1b6054e073e140eba9c8
src/views/device/addDevice.vue
@@ -4,7 +4,7 @@
            v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave"
            :before-open="beforeOpen" @search-change="searchChange" @search-reset="searchReset"
            @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
            @refresh-change="refreshChange" @on-load="onLoad" @tree-load="treeLoad">
            @refresh-change="refreshChange" @on-load="onLoad">
            <template #menu="scope">
                <el-button type="primary" text icon="el-icon-copy-document" @click.stop="copyInfo(scope.row, scope.index)"
@@ -30,6 +30,7 @@
import { getWebsocketUrl } from '@/websocket/util/config';
import ConnectWebSocket from '@/websocket';
import { $Clipboard } from "@smallwei/avue";
export default {
    components: {
@@ -64,9 +65,9 @@
                menuWidth: 300,
                lazy: true,
                tree: true,
                height: '460',
                calcHeight: 32,
                dialogWidth: 1050,
                // height: '460',
                // calcHeight: 32,
                // dialogWidth: 1050,
                tip: false,
                searchShow: true,
                searchMenuSpan: 6,
@@ -157,6 +158,30 @@
                        ],
                    },
                    {
                        label: '设备类型',
                        prop: 'type',
                        type: 'radio',
                        labelWidth: 130,
                        value: 0,
                        dicData: [
                            {
                                label: '机场',
                                value: 0
                            },
                            {
                                label: '遥控器',
                                value: 1
                            }
                        ],
                        rules: [
                            {
                                required: true,
                                message: '请选择设备类型',
                                trigger: 'change',
                            },
                        ],
                    },
                    {
                        label: '创建时间',
                        prop: 'create_time',
                        addDisplay: false,
@@ -171,18 +196,7 @@
                ],
            },
            data: [],
            DeviceFirmwareTypeEnum: {
                // 普通升级
                ToUpgraded: 3,
                // 一致性升级
                ConsistencyUpgrade: 2,
            },
            DeviceFirmwareStatusEnum: {
                None: 1, // 无需升级
                ToUpgraded: 2, // 待升级
                ConsistencyUpgrade: 3, // 一致性升级
                DuringUpgrade: 4, // 升级中
            },
        };
    },
    computed: {
@@ -215,7 +229,16 @@
    methods: {
        copyInfo(row, index) {
            let params = `host: tcp://139.196.74.78:1883   账号:drone  密码:123456  组织id:${row.bing_id}  设备码:${row.bind_code}  机场名称:${row.workspace_name}   aircrattName:${row.workspace_desc}`;
            if(import.meta.env.VITE_APP_ENV==='development'){
                // alert('地址'+import.meta.env.VITE_APP_ENV);
                let params = `
            host: tcp://139.196.74.78:1883
            账号:drone
            密码:123456
            组织id:${row.bing_id}
            设备码:${row.bind_code}
            机场名称:${row.workspace_name}
            aircrattName:${row.workspace_desc}`;
            $Clipboard({
                text: params,
            }).then(() => {
@@ -223,73 +246,26 @@
            }).catch(() => {
                this.$message.error("复制失败");
            });
        },
        // 关闭所有的webscoket
        closeAllWebsoket() {
            this.websocketMap.forEach((k, v) => {
                if (null != v) {
                    v.close()
                    this.websocketMap.delete(k)
                    this.webSocketIdSet.delete(k)
                }
            });
        },
        // 连接webSocket
        connectWebSocket(data) {
            const webSocketId = data.workspace_id
            if (!this.webSocketIdSet.has(webSocketId)) {
                // 防止重复连接
                this.webSocketIdSet.add(webSocketId);
                const webSorketUrl = getWebsocketUrl() + '&workspace-id=' + data.workspace_id;
                // 监听ws 消息
                this.useConnectWebSocket(webSocketId, webSorketUrl);
            }
        },
        useConnectWebSocket(webSocketId, url) {
            const websocket = new ConnectWebSocket(url);
            // 加入 webscoket map
            this.websocketMap.set(webSocketId, websocket)
            websocket?.registerMessageHandler(this.messageHandler);
            websocket?.initSocket();
        },
        async messageHandler(payload) {
            console.log(payload, 7777);
            if (!payload) {
                return;
            }
            if (payload.biz_code != "ota_progress") {
                return;
            }
            var data = payload.data;
            this.data.forEach(e => {
                if (e.device_sn == data.sn && data.output.status == 'in_progress') {
                    e.firmware_progress = data.output.progress.percent;
                }
                if (e.device_sn == data.sn && data.output.status == 'ok') {
                    // 升级完成修改状态
                    e.firmware_status = 1
                    const webscoket = this.websocketMap.get(e.workspace_id);
                    // 关闭
                    webscoket?.close();
                    //删除对应的webscoket
                    this.websocketMap.delete(e.workspace_id);
                    this.webSocketIdSet.delete(e.workspace_id);
                }
            });
        }else{
            // alert('地址'+import.meta.env.VITE_APP_ENV);
            let params = `
            host: tcp://101.132.85.201:1883
            账号:drone
            密码:drone@123
            组织id:${row.bing_id}
            设备码:${row.bind_code}
            机场名称:${row.workspace_name}
            aircrattName:${row.workspace_desc}`;
            $Clipboard({
                text: params,
            }).then(() => {
                this.$message.success("复制成功");
            }).catch(() => {
                this.$message.error("复制失败");
            });}
        },
        init() {
            this.onLoad(this.page);
        },
        // 打开权限分享页面
        handleOpenDevicePerShare(row) {
            var that = this;
            this.devicePerShareVisible = true;
            this.$nextTick(() => {
                that.$refs.devicePerShare.init(row);
            });
        },
        handleOpenRemoteDebugging(row) {
@@ -297,63 +273,6 @@
            this.remoteDebuggingShow = true;
        },
        // 打开固件管理页面
        handleOpenFirmwarm(row) {
            var that = this;
            this.firmwareManageVisible = true;
            this.$nextTick(() => {
                that.$refs.firmwareManage.init(row);
            });
        },
        // 升级固件按钮事件
        updateFirmware(row) {
            if (row.status == 0) {
                this.$message({
                    type: 'warning',
                    message: '设备不在线!',
                });
                return;
            }
            var that = this;
            this.firmwareBox = true;
            const param = {
                device_name: row.device_name,
            };
            // 获取固件最新版本信息
            getDeviceUpgradeInfo(param).then(res => {
                const data = res.data.data;
                if (data.length === 0) {
                    return;
                }
                that.firmwareVersion = data[0].product_version;
                that.firmwareInfo['device_name'] = row.device_name;
                that.firmwareInfo['sn'] = row.device_sn;
                that.firmwareInfo['product_version'] = data[0].product_version;
                // 1-普通升级,2-一致性升级;
                that.firmwareInfo['firmware_upgrade_type'] =
                    row.firmware_status === that.DeviceFirmwareStatusEnum.ToUpgraded
                        ? that.DeviceFirmwareTypeEnum.ToUpgraded
                        : that.DeviceFirmwareTypeEnum.ConsistencyUpgrade;
                that.firmwareInfo['workspaceId'] = row.workspace_id;
            });
        },
        // 确定升级固件版本
        updateFirmwareConfirm() {
            var that = this;
            var arr = [];
            arr.push(that.firmwareInfo);
            ota(that.firmwareInfo.workspaceId, arr).then(res => {
                that.firmwareVersion = '';
                that.firmwareInfo = {};
                that.firmwareBox = false;
                this.$message({
                    type: 'success',
                    message: '操作成功!',
                });
                this.onLoad(this.page);
                done();
            });
        },
        rowSave(row, done, loading) {
            add(row).then(
                () => {
@@ -460,7 +379,6 @@
            this.onLoad(this.page, this.query);
        },
        onLoad(page, params = {}) {
            this.closeAllWebsoket()
            const { releaseTimeRange } = this.query;
            let values = {
                ...params,
@@ -479,12 +397,12 @@
            getList(page.currentPage, page.pageSize, values).then(res => {
                const data = res.data.data;
                this.page.total = data.total;
                data.records.forEach(e => {
                    e['hasChildren'] = e.has_children;
                    if (e.firmware_status == 4) {
                        this.connectWebSocket(e);
                    }
                });
                // data.records.forEach(e => {
                //     e['hasChildren'] = e.has_children;
                //     if (e.firmware_status == 4) {
                //         this.connectWebSocket(e);
                //     }
                // });
                this.data = data.records;
                this.loading = false;
                this.selectionClear();