From 260dc6b9425d432c090410a93d2a9029f088de4f Mon Sep 17 00:00:00 2001 From: BianLzhaoMin <11485688+bianliangzhaomin123@user.noreply.gitee.com> Date: Fri, 27 Jun 2025 11:23:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E4=BD=93=E4=BB=A3=E7=A0=81=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/action/storageManage.js | 39 +- src/api/home.js | 5 + src/components/DialogModal/index.vue | 2 +- src/components/FlvPlayer/index.vue | 18 +- src/hooks/common.js | 3 - src/http/request.js | 8 +- src/store/robot.js | 61 +++ src/style/naiveUi.scss | 12 + src/utils/getRobotInfo.js | 87 +++++ src/views/home/components/center-one.vue | 35 +- src/views/home/components/center-two.vue | 143 ++++--- src/views/home/components/control-deck.vue | 103 +++-- src/views/home/components/left-one.vue | 153 ++++---- src/views/home/components/left-two.vue | 65 ++-- .../modal-content/add-or-edit-form.vue | 2 +- .../modal-content/add-or-edit-marker-form.vue | 240 +++++++----- .../components/modal-content/control-deck.vue | 352 ++++++++++++++++++ .../modal-content/inspection-task.vue | 2 +- .../modal-content/preset-setting.vue | 250 ++++++++----- .../home/components/preset-setting-old.vue | 258 ------------- src/views/home/components/preset-setting.vue | 212 ----------- src/views/home/index.vue | 133 +++---- 22 files changed, 1241 insertions(+), 942 deletions(-) delete mode 100644 src/hooks/common.js create mode 100644 src/store/robot.js create mode 100644 src/utils/getRobotInfo.js create mode 100644 src/views/home/components/modal-content/control-deck.vue delete mode 100644 src/views/home/components/preset-setting-old.vue delete mode 100644 src/views/home/components/preset-setting.vue diff --git a/src/action/storageManage.js b/src/action/storageManage.js index bac034c..d5d882d 100644 --- a/src/action/storageManage.js +++ b/src/action/storageManage.js @@ -2,29 +2,50 @@ * 缓存对象管理 * 防止对象过多 */ -import StorageS from 'storages-js'; +import StorageS from 'storages-js' /** * 所有实例 * 公共管理 * */ -const allStorage = {}; +const allStorage = {} function createS(key, value) { if (!allStorage[key]) { - allStorage[key] = new StorageS(key, value, { modelName: 'local' }); + allStorage[key] = new StorageS(key, value, { modelName: 'local' }) } - return allStorage[key]; + return allStorage[key] } /** 保存用户的基本信息 */ const userStorage = (value) => { - return createS('user-container', value); -}; + return createS('user-container', value) +} const fullScreenStorage = (value) => { - return createS('full-screen-container', value); -}; + return createS('full-screen-container', value) +} + +/** 保存公共的 token 信息 */ +const userTokenStorage = (value) => { + return createS('token-container', value) +} +/** 保存机器人的信息 */ +const userRobotStorage = (value) => { + return createS('robot-container', value) +} +/** 保存地图信息 */ +const userMapStorage = (value) => { + return createS('map-container', value) +} +/** 保存机器人实时点位信息 */ +const userRobotPointsStorage = (value) => { + return createS('robot-points-container', value) +} export default { userStorage, fullScreenStorage, -}; + userTokenStorage, + userRobotStorage, + userMapStorage, + userRobotPointsStorage, +} diff --git a/src/api/home.js b/src/api/home.js index f645ae6..6e509f8 100644 --- a/src/api/home.js +++ b/src/api/home.js @@ -8,3 +8,8 @@ export const getTokenApi = (data) => { export const getDeviceInfoApi = (data) => { return service.post('/api/robot/sbdUser/getDeviceList', data) } + +// 操作机器人行动接口 +export const handleRobotActionApi = (data) => { + return service.post('/api/robot/instruct/sedXml', data) +} diff --git a/src/components/DialogModal/index.vue b/src/components/DialogModal/index.vue index 499138f..e781858 100644 --- a/src/components/DialogModal/index.vue +++ b/src/components/DialogModal/index.vue @@ -68,6 +68,6 @@ const onHandleCloseModal = () => { .modal-content { flex: 1; - // height: calc(100% - 40px); + height: calc(100% - 40px); } diff --git a/src/components/FlvPlayer/index.vue b/src/components/FlvPlayer/index.vue index 2b2a88f..88a7cc0 100644 --- a/src/components/FlvPlayer/index.vue +++ b/src/components/FlvPlayer/index.vue @@ -2,17 +2,18 @@ diff --git a/src/hooks/common.js b/src/hooks/common.js deleted file mode 100644 index 1a07265..0000000 --- a/src/hooks/common.js +++ /dev/null @@ -1,3 +0,0 @@ -import { getTokenApi } from '@/api/home' - -export function useScale(appRef) {} diff --git a/src/http/request.js b/src/http/request.js index 96a866b..3032b61 100644 --- a/src/http/request.js +++ b/src/http/request.js @@ -4,10 +4,13 @@ */ import axios from 'axios' import { userDataStore } from '@/store/user' +// import { useMessage } from 'naive-ui' import router from '@/router' +import { createDiscreteApi } from 'naive-ui' +const { message } = createDiscreteApi(['message']) let baseApiURL = import.meta.env.VITE_APP_baseApiURL //api原始链接 -const timeout = 13000 //api请求超时时间 +const timeout = 10000 //api请求超时时间 export const service = axios.create({ //可创建多个 axios实例 @@ -66,8 +69,9 @@ service.interceptors.response.use( return Promise.reject(data) } }, - () => { + (error) => { //数据请求发生错误 + message.error('请求发生错误,请稍后再试') return Promise.reject({ msg: '请求发生错误,请稍后再试', }) diff --git a/src/store/robot.js b/src/store/robot.js new file mode 100644 index 0000000..623e1d4 --- /dev/null +++ b/src/store/robot.js @@ -0,0 +1,61 @@ +/** 机器人数据 */ + +import { defineStore } from 'pinia' +import allStorage from '@/action/storageManage' + +export const useRobotDataStore = defineStore('useRobotDataStore', { + state: () => { + const userTokenStorage = allStorage.userTokenStorage() // 获取缓存 + const userStorage = allStorage.userRobotStorage() // 获取缓存 + const userMapStorage = allStorage.userMapStorage() // 获取缓存 + const userRobotPointsStorage = allStorage.userRobotPointsStorage() // 获取缓存 + + let tokenInfo = userTokenStorage.value + if (typeof tokenInfo !== 'object') { + tokenInfo = {} + } + let robotInfo = userStorage.value + if (typeof robotInfo !== 'object') { + robotInfo = {} + } + let mapInfo = userMapStorage.value + if (typeof mapInfo !== 'object') { + mapInfo = {} + } + let robotPoints = userRobotPointsStorage.value + if (typeof robotPoints !== 'object') { + robotPoints = {} + } + + return { + tokenInfo: tokenInfo || {}, // 设备token + robotInfo: robotInfo || {}, // 机器人信息 + mapInfo: mapInfo || {}, // 地图信息 + robotPoints: {}, // 机器人点位信息 + } + }, + getters: {}, + actions: { + setTokenInfo(value) { + this.tokenInfo = value || {} + /** 存入缓存 */ + const tokenStorage = allStorage.userTokenStorage() + tokenStorage.value = value + }, + setRobotInfo(value) { + this.robotInfo = value || {} + /** 存入缓存 */ + const robotStorage = allStorage.userRobotStorage() + robotStorage.value = value + }, + setMapInfo(value) { + this.mapInfo = value || {} + /** 存入缓存 */ + const mapStorage = allStorage.userMapStorage() + mapStorage.value = value + }, + setRobotPoints(value) { + this.robotPoints = value || {} + }, + }, +}) diff --git a/src/style/naiveUi.scss b/src/style/naiveUi.scss index 9186c30..dde9a3f 100644 --- a/src/style/naiveUi.scss +++ b/src/style/naiveUi.scss @@ -85,4 +85,16 @@ .n-form-item .n-form-item-label { color: #fff; +} + +.n-base-select-menu .n-base-select-option.n-base-select-option--selected.n-base-select-option--pending::before { + background-color: #072148; +} + +.n-base-select-menu .n-base-select-option.n-base-select-option--pending::before { + background-color: #2f5789; +} + +.n-base-selection:not(.n-base-selection--disabled).n-base-selection--active .n-base-selection-label { + background-color: #1d3861 } \ No newline at end of file diff --git a/src/utils/getRobotInfo.js b/src/utils/getRobotInfo.js new file mode 100644 index 0000000..7b6077a --- /dev/null +++ b/src/utils/getRobotInfo.js @@ -0,0 +1,87 @@ +import { initLoginApi } from '@/utils/initLogin' +import { getDeviceInfoApi, handleRobotActionApi } from '@/api/home' +import { useRobotDataStore } from '@/store/robot' +const robotData = useRobotDataStore() + +// 获取机器人token +export const getRobotTokenFn = async () => { + if (!robotData.tokenInfo.deviceToken) { + const loginParams = { + address: '112.31.70.193', + port: '9988', + user: 'bns3', + password: 'Bns@admin**', + epid: 'system', + bfix: 1, + } + const res = await initLoginApi(loginParams) + robotData.setTokenInfo({ + deviceToken: res.data.token, + }) + return res.data.token + } else { + return robotData.tokenInfo.deviceToken + } +} + +// 获取设备信息 +export const getRobotDeviceListFn = async () => { + if (!robotData.robotInfo.puId) { + const { data: res } = await getDeviceInfoApi() + if (res?.data?.length > 0) { + const deviceInfo = res.data[0] + robotData.setRobotInfo({ + devName: deviceInfo.devName, + puId: deviceInfo.puId, + }) + + return { + devName: deviceInfo.devName, + puId: deviceInfo.puId, + } + } + } else { + return robotData.robotInfo + } +} + +// 获取地图信息 +export const getRobotMapInfoFn = async (puId) => { + if (!robotData.mapInfo.mapBase64) { + const { data: res } = await handleRobotActionApi({ + puId, + type: 4, + }) + if (res.code === 200) { + const { Data, Height, Width } = res.data + const mapInfo = { + mapBase64: 'data:image/png;base64,' + Data, + mapWidth: Width, + mapHeight: Height, + } + robotData.setMapInfo(mapInfo) + return mapInfo + } + } else { + return robotData.mapInfo + } +} +// 获取机器人实时定位信息 +export const getRobotPointsInfoFn = async (puId) => { + if (!robotData.robotPoints.Robot_x && !robotData.robotPoints.Robot_y) { + const { data: res } = await handleRobotActionApi({ + puId, + type: 2, + }) + if (res.code === 200) { + const pointsInfo = { + Robot_x: res?.data?.Robot_x, + Robot_y: res?.data?.Robot_y, + } + robotData.setRobotPoints(pointsInfo) + return pointsInfo + } + } else { + return robotData.robotPoints + } +} diff --git a/src/views/home/components/center-one.vue b/src/views/home/components/center-one.vue index 0df5df0..fee20b0 100644 --- a/src/views/home/components/center-one.vue +++ b/src/views/home/components/center-one.vue @@ -2,17 +2,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+