diff --git a/.env.development b/.env.development index aca0341..9ddffd1 100644 --- a/.env.development +++ b/.env.development @@ -7,7 +7,7 @@ VITE_APP_ENV = 'development' # 招商车研物联网平台/开发环境 VITE_APP_BASE_API = '/dev-api' -VITE_API_URL = http://192.168.28.10:13080 +VITE_API_URL = http://192.168.0.201:13080 VITE_WS_URL = ws://192.168.0.201:13080/ws # explanation diff --git a/src/api/intelligenceTest/car.js b/src/api/intelligenceTest/car.js new file mode 100644 index 0000000..5d8c25e --- /dev/null +++ b/src/api/intelligenceTest/car.js @@ -0,0 +1,32 @@ +import request from '@/utils/request' + +export function addVehicle(data) { + return request({ + url: '/aima/vehicle', + method: 'post', + data: data + }) +} + +export function getVehicleList(params) { + return request({ + url: '/aima/vehicle/list', + method: 'get', + params: params + }) +} + +export function updateVehicle(data) { + return request({ + url: '/aima/vehicle', + method: 'put', + data: data + }) +} + +export function deleteVehicle(ids) { + return request({ + url: `/aima/vehicle/${ids}`, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/intelligenceTest/mobilePhone.js b/src/api/intelligenceTest/mobilePhone.js new file mode 100644 index 0000000..b683fc2 --- /dev/null +++ b/src/api/intelligenceTest/mobilePhone.js @@ -0,0 +1,32 @@ +import request from '@/utils/request' + +export function addPhone(data) { + return request({ + url: '/aima/phone', + method: 'post', + data: data + }) +} + +export function getPhoneList(params) { + return request({ + url: '/aima/phone/list', + method: 'get', + params: params + }) +} + +export function updatePhone(data) { + return request({ + url: '/aima/phone', + method: 'put', + data: data + }) +} + +export function deletePhone(ids) { + return request({ + url: `/aima/phone/${ids}`, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/intelligenceTest/runningTask.js b/src/api/intelligenceTest/runningTask.js new file mode 100644 index 0000000..adfd01e --- /dev/null +++ b/src/api/intelligenceTest/runningTask.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' +import { method } from 'lodash' + +export function addTaskinstance(data) { + return request({ + url: '/aima/taskinstance', + method: 'post', + data: data + }) +} + +export function getTaskinstanceList(params) { + return request({ + url: '/aima/taskinstance/list', + method: 'get', + params: params + }) +} + +export function updateTaskinstance(data) { + return request({ + url: '/aima/taskinstance', + method: 'put', + data: data + }) +} + +export function deleteTaskinstance(ids) { + return request({ + url: `/aima/taskinstance/{ids}`, + method: 'delete' + }) +} + +export function startTaskinstance(id) { + return request({ + url: `/aima/taskinstance/start/${id}`, + method: 'put' + }) +} + +export function pauseTaskinstance(id) { + return request({ + url: `/aima/taskinstance/pause/${id}`, + method: 'put' + }) +} + +export function stopTaskinstance(id) { + return request({ + url: `/aima/taskinstance/stop/${id}`, + method: 'put' + }) +} + +export function resumeTaskinstance(id) { + return request({ + url: `/aima/taskinstance/resume/${id}`, + method: 'put' + }) +} + +export function getTaskLogListApi(params) { + return request({ + url: '/aima/testlog/list', + method: 'get', + params: params + }) +} \ No newline at end of file diff --git a/src/api/intelligenceTest/taskManage.js b/src/api/intelligenceTest/taskManage.js new file mode 100644 index 0000000..457d33f --- /dev/null +++ b/src/api/intelligenceTest/taskManage.js @@ -0,0 +1,47 @@ +import request from '@/utils/request' + +export function addTask(data) { + return request({ + url: '/aima/task', + method: 'post', + data: data + }) +} + +export function getTaskList(params) { + return request({ + url: '/aima/task/list', + method: 'get', + params: params + }) +} + +export function updateTask(data) { + return request({ + url: '/aima/task', + method: 'put', + data: data + }) +} + +export function deleteTask(ids) { + return request({ + url: `/aima/task/${ids}`, + method: 'delete' + }) +} + +export function getTestCaseByTaskId(taskId) { + return request({ + url: `/aima/task/testCases/${taskId}`, + method: 'get', + }) +} + +export function bindTastCase(taskId, ids) { + return request({ + url: `/aima/task/bindTestCases/${taskId}`, + method: 'post', + data: ids + }) +} \ No newline at end of file diff --git a/src/api/intelligenceTest/testCase.js b/src/api/intelligenceTest/testCase.js new file mode 100644 index 0000000..374ebe1 --- /dev/null +++ b/src/api/intelligenceTest/testCase.js @@ -0,0 +1,32 @@ +import request from '@/utils/request' + +export function addTestCase(data) { + return request({ + url: '/aima/testcase', + method: 'post', + data: data + }) +} + +export function getTestCaseList(params) { + return request({ + url: '/aima/testcase/list', + method: 'get', + params: params + }) +} + +export function updateTestCase(data) { + return request({ + url: '/aima/testcase', + method: 'put', + data: data + }) +} + +export function deleteTestCase(ids) { + return request({ + url: `/aima/testcase/${ids}`, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index cf65917..7bd4be0 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -58,75 +58,6 @@ export const constantRoutes = [ component: () => import("@/views/error/401"), hidden: true, }, - { - path: "/device", - component: Layout, - children: [ - { - path: "mechanical_arm/:id", - component: () => - import("@/views/device/register/components/MechanicalArm/index.vue"), - name: "机械臂示教", - meta: { title: "机械臂详情" }, - hidden: true, - }, - { - path: "camera/:id", - component: () => - import("@/views/device/register/components/Camera/index.vue"), - name: "摄像头示教", - meta: { title: "摄像头详情" }, - hidden: true, - }, - { - path: "head/:id", - component: () => - import("@/views/device/register/components/Head/index.vue"), - name: "人工头示教", - meta: { title: "人工头详情" }, - hidden: true, - }, - { - path: "speaker/:id", - component: () => - import("@/views/device/register/components/Speaker/index.vue"), - name: "扬声器示教", - meta: { title: "扬声器详情" }, - hidden: true, - }, - { - path: "hand/:id", - component: () => - import("@/views/device/register/components/DexHand/index.vue"), - name: "灵巧手示教", - meta: { title: "灵巧手详情" }, - hidden: true, - },{ - path: "microphone/:id", - component: () => - import("@/views/device/register/components/Microphone/index.vue"), - name: "麦克风示教", - meta: { title: "麦克风详情" }, - hidden: true, - } - ], - }, - { - //语音合成 - path: "/speech_synthesis", - component: () => - import("@/views/device/register/components/SpeechSynthesis/index.vue"), - meta: { title: "语音合成", noLogin: true }, - hidden: true, - }, - { - //触摸交互 - path: "/touch_interaction", - component: () => - import("@/views/device/register/components/TouchInteraction/index.vue"), - meta: { title: "触摸交互", noLogin: true }, - hidden: true, - }, { //cockpit path: "/inspection/cockpit", @@ -135,14 +66,6 @@ export const constantRoutes = [ meta: { title: "logicFlow", noLogin: true }, hidden: true, }, - { - //logicFlow - path: "/logic_flow", - component: () => - import("@/views/device/register/components/LogicFlow/index.vue"), - meta: { title: "logicFlow", noLogin: true }, - hidden: true, - }, { //logicFlow path: "/flow", @@ -150,13 +73,6 @@ export const constantRoutes = [ meta: { title: "flow", noLogin: true }, hidden: true, }, - { - //电机路由 - path: "/Motor/:id", - component: () => - import("@/views/device/register/components/Motor/index.vue"), - hidden: true, - }, { path: "", component: Layout, @@ -216,76 +132,6 @@ export const dynamicRoutes = [ }, ], }, - { - path: "/vi/plan", - component: Layout, - hidden: true, - permissions: ["vi:testProject:list"], - children: [ - { - path: "index/:id", - component: () => import("@/views/vi/testProject/plan/index"), - name: "Plan", - meta: { title: "方案管理", activeMenu: "/vi/testProject" }, - }, - ], - }, - { - path: "/is/plan", - component: Layout, - hidden: true, - permissions: ["is:project:list"], - children: [ - { - path: "index/:id", - component: () => import("@/views/is/project/plan/index"), - name: "ProjectPlan", - meta: { title: "项目方案", activeMenu: "/is/plan" }, - }, - ], - }, - { - path: "/is/evaluate", - component: Layout, - hidden: true, - permissions: ["is:project:list"], - children: [ - { - path: "index/:id", - component: () => import("@/views/is/project/evaluate/index"), - name: "isProjectEvaluate", - meta: { title: "触控评价", activeMenu: "/is/evaluate" }, - }, - ], - }, - { - path: "/vi/evaluate", - component: Layout, - hidden: true, - permissions: ["is:project:list"], - children: [ - { - path: "index/:id", - component: () => import("@/views/vi/testProject/evaluate/index"), - name: "viProjectEvaluate", - meta: { title: "语音评价", activeMenu: "/vi/evaluate" }, - }, - ], - }, - { - path: "/monitor/job-log", - component: Layout, - hidden: true, - permissions: ["monitor:job:list"], - children: [ - { - path: "index/:jobId(\\d+)", - component: () => import("@/views/monitor/job/log"), - name: "JobLog", - meta: { title: "调度日志", activeMenu: "/monitor/job" }, - }, - ], - }, { path: "/tool/gen-edit", component: Layout, diff --git a/src/views/device/profile/index.vue b/src/views/device/profile/index.vue new file mode 100644 index 0000000..34443c3 --- /dev/null +++ b/src/views/device/profile/index.vue @@ -0,0 +1,508 @@ + + + diff --git a/src/views/device/register/components/Camera/index.vue b/src/views/device/register/components/Camera/index.vue new file mode 100644 index 0000000..466ccb9 --- /dev/null +++ b/src/views/device/register/components/Camera/index.vue @@ -0,0 +1,330 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/register/components/ControlCard/index.vue b/src/views/device/register/components/ControlCard/index.vue new file mode 100644 index 0000000..1590fb4 --- /dev/null +++ b/src/views/device/register/components/ControlCard/index.vue @@ -0,0 +1,36 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/register/components/DexHand/LeftBottomHand.vue b/src/views/device/register/components/DexHand/LeftBottomHand.vue new file mode 100644 index 0000000..27d3d37 --- /dev/null +++ b/src/views/device/register/components/DexHand/LeftBottomHand.vue @@ -0,0 +1,431 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/register/components/DexHand/LeftTopHand.vue b/src/views/device/register/components/DexHand/LeftTopHand.vue new file mode 100644 index 0000000..5efda72 --- /dev/null +++ b/src/views/device/register/components/DexHand/LeftTopHand.vue @@ -0,0 +1,270 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/register/components/DexHand/RightBottomCharts.vue b/src/views/device/register/components/DexHand/RightBottomCharts.vue new file mode 100644 index 0000000..bc42122 --- /dev/null +++ b/src/views/device/register/components/DexHand/RightBottomCharts.vue @@ -0,0 +1,229 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/register/components/DexHand/RightTopCharts.vue b/src/views/device/register/components/DexHand/RightTopCharts.vue new file mode 100644 index 0000000..09cae93 --- /dev/null +++ b/src/views/device/register/components/DexHand/RightTopCharts.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/register/components/DexHand/index.vue b/src/views/device/register/components/DexHand/index.vue new file mode 100644 index 0000000..fd33381 --- /dev/null +++ b/src/views/device/register/components/DexHand/index.vue @@ -0,0 +1,158 @@ + + + + + + \ No newline at end of file diff --git a/src/views/device/register/components/Head/index.vue b/src/views/device/register/components/Head/index.vue new file mode 100644 index 0000000..3142033 --- /dev/null +++ b/src/views/device/register/components/Head/index.vue @@ -0,0 +1,314 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/register/components/LogicFlow/CustomGroup.js b/src/views/device/register/components/LogicFlow/CustomGroup.js new file mode 100644 index 0000000..7cc34cf --- /dev/null +++ b/src/views/device/register/components/LogicFlow/CustomGroup.js @@ -0,0 +1,103 @@ + +import { GroupNodeModel, GroupNode } from '@logicflow/extension' +import { recursiveFilter } from "@/utils/convertNodeRedToLogicFlow"; + +class CustomGroupModel extends GroupNodeModel { + initNodeData(data) { + super.initNodeData(data); + this.children = new Set(data.children || []) + this.zIndex = 0; + + this.width = data.w + 80; // 增加内边距 + this.height = data.h + 80; + this.x = data.x; + this.y = data.y; + + setTimeout(() => { + this.updateSize() + const nodes = this.graphModel.nodes; + const arr = recursiveFilter(nodes, this.id) + arr.forEach((item) => { + item.updateSize() + }) + }, 0) + } + + setAttributes() { + this.text.editable = false; + } + + getTextStyle() { + const style = super.getTextStyle(); + style.fill = this.properties.style?.color || '#333'; + style.fontSize = 16; + return style; + } + + updateSize() { + const children = [] + this.children.forEach((id) => { + children.push(this.graphModel.getNodeModelById(id)) + }); + if (children.length === 0) return; + + let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity; + children.forEach((node) => { + minX = Math.min(minX, node.x - node.width / 2); + maxX = Math.max(maxX, node.x + node.width / 2); + minY = Math.min(minY, node.y - node.height / 2); + maxY = Math.max(maxY, node.y + node.height / 2); + }); + + this.width = maxX - minX + 80; // 增加内边距 + this.height = maxY - minY + 80; + this.x = (minX + maxX) / 2; + this.y = (minY + maxY) / 2; + this.setTextCoordinate(this.width, this.height, this.x, this.y) + } + + setTextCoordinate(width, height, x, y) { + const strategies = { + "n": () => { + this.text.x = x + this.text.y = y - height / 2 + 20 + }, + "ne": () => { + this.text.x = x + width / 2 - 20 + this.text.y = y - height / 2 + 20 + }, + "sw": () => { + this.text.x = x - width / 2 + 20 + this.text.y = y + height / 2 - 20 + }, + "s": () => { + this.text.x = x + this.text.y = y + height / 2 - 20 + }, + "se": () => { + this.text.x = x + width / 2 - 20 + this.text.y = y + height / 2 - 20 + }, + "default": () => { + this.text.x = x - width / 2 + 20 + this.text.y = y - height / 2 + 20 + } + }; + const labelPosition = this.properties.style?.['label-position'] || 'default' + const action = strategies[labelPosition] + action(); + } + + removeChild(id) { + this.children.delete(id) // 现在可安全调用 + } +} + +// 导出方法注册 +export function registerCustomGroup(lf) { + lf.register({ + type: "customGroup", + view: GroupNode, + model: CustomGroupModel + }) +} diff --git a/src/views/device/register/components/LogicFlow/IPlayer/config.ts b/src/views/device/register/components/LogicFlow/IPlayer/config.ts new file mode 100644 index 0000000..3048428 --- /dev/null +++ b/src/views/device/register/components/LogicFlow/IPlayer/config.ts @@ -0,0 +1,59 @@ +export const conf = { + /** + * 基础功能配置 + * */ + autoplay: false, // 是否自动播放,不自动播放,浏览器有限制规则 + autoplayMuted: false, // 是否自动播放(静音播放) + videoInit: true, // 是否默认初始化video,默认初始化,默认true + playsinline: true, // 是否启用内联播放模式,仅移动端生效 + defaultPlaybackRate: 1, // 默认播放速度(可选:0.5/0.75/1/1.5/2等) + volume: 0.72, // 播放音量(可选:0 ~ 1) + loop: false, // 是否循环播放,默认不循环播放 + startTime: 0, // 点播模式下,初始起播时间 + videoAttributes: {}, // video扩展属性,暂且不配置 + lang: 'zh-cn', // 播放器初始显示语言,设置为中文 + fluid: true, // 是否流式布局(宽高优先于流失布局,默认16:9)注掉上方宽高看效果 + fitVideoSize: 'fixed', // 保持容器宽/高,不做适配,按照容器来 + videoFillMode: 'auto', // 宽高不够自动底色填充(fill拉伸填充等...) + seekedStatus: 'play', // 跳转后继续播放 + // 播放器进度条故事点信息数组 + progressDot: [ + { + id: 0, // 唯一标识,用于删除的时候索引 + time: 30, // 展示的时间点,例子为在播放到10s钟的时候展示 + text: '进度条信息提示...', // hover的时候展示文案,可以为空 + duration: 1, // 展示时间跨度,单位为s + style: { // 指定样式 + backgroundColor: 'white' + } + }, + ], + thumbnail: null, // 进度条预览图配置,普通业务用不到 + marginControls: false, // 是否开启画面和控制栏分离模式,不开启空间多一些 + domEventType: 'default', // 响应的事件类型,不用指定,用默认的即可 + /** + * 交互功能配置(一般使用默认即可) + * */ + /** + * 插件配置,根据需求自选 + * */ + icons: {}, // 使用默认的icon图标 + i18n: [], // 使用默认的中文 + // 自定义一些颜色 + commonStyle: { + progressColor: 'green', // 整个进度条颜色 + playedColor: 'chocolate', // 已播放的进度条颜色 + volumeColor: 'pink', // 音量大小竖向滑块颜色 + }, + controls: true, // 是否使用底部控制栏,默认使用 + miniprogress: true, // 是否使用mini进度条(当底部控制栏隐藏时生效) + screenShot: false, // 关闭截图功能 + rotate: true, // 是否使用视频旋转插件,默认不使用 + download: true, // 是否使用下载按钮,一般不用,一般自定义控制 + pip: true, // 使用使用画中画模式,默认不用 + mini: true, // 是否使用小屏幕控件 + cssFullscreen: true, // 是否使用网页样式全屏按钮开关 + playbackRate: [0.5, 1, 1.5, 2, 3], //传入倍速可选数组 + // playbackRate: true, //false,禁用倍速播放(即控制栏不显示) + keyShortcut: false, // 是否开启快捷键模式 +} diff --git a/src/views/device/register/components/LogicFlow/IPlayer/index.vue b/src/views/device/register/components/LogicFlow/IPlayer/index.vue new file mode 100644 index 0000000..55be899 --- /dev/null +++ b/src/views/device/register/components/LogicFlow/IPlayer/index.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/src/views/device/register/components/LogicFlow/customFlow.vue b/src/views/device/register/components/LogicFlow/customFlow.vue new file mode 100644 index 0000000..9ba9db2 --- /dev/null +++ b/src/views/device/register/components/LogicFlow/customFlow.vue @@ -0,0 +1,238 @@ + + + + + + diff --git a/src/views/device/register/components/LogicFlow/customFlowNode.js b/src/views/device/register/components/LogicFlow/customFlowNode.js new file mode 100644 index 0000000..447800b --- /dev/null +++ b/src/views/device/register/components/LogicFlow/customFlowNode.js @@ -0,0 +1,134 @@ +// 导入 HtmlNode 及其模型,为后续继承做准备 +import { HtmlNode, HtmlNodeModel } from '@logicflow/core'; +// 导入 Vue 相关方法,用于渲染组件 +import { createApp, h } from 'vue'; +import ElementPlus from 'element-plus' +// 导入 Vue 组件 +import CustomFlow from './customFlow.vue'; + +/** + * 定义一个 元素的 HTML 节点类,继承自 HtmlNode + * 该类负责在 HTML 中渲染 元素,并处理其交互逻辑 + */ +class CustomFlowHtmlNode extends HtmlNode { + isMounted; // 标记组件是否已挂载 + r; // 渲染函数 + app; // Vue 应用实例 + + /** + * 构造函数 + * @param props 传递给节点的属性,包括模型、图模型等 + */ + constructor(props) { + super(props); + this.isMounted = false; + // 创建 元素的渲染函数 + this.r = h(CustomFlow, { + model: props.model, + graphModel: props.graphModel, + properties: { + ...props.model.getProperties(), + }, + text: props.model.text.value, + }); + + // 创建 Vue 应用实例,并指定渲染函数 + this.app = createApp({ + render: () => this.r + }); + } + + /** + * 将 HTML 内容设置到指定的根元素上 + * @param rootEl 根元素 + */ + setHtml(rootEl) { + if (!this.isMounted) { + this.isMounted = true; + const node = document.createElement('div'); + node.style.width = '100%' + node.style.height = '100%' + rootEl.appendChild(node); + this.app.use(ElementPlus) // 关键:单独注册ElementPlus + this.app.mount(node); + } else { + this.r.component.props.properties = this.props.model.getProperties(); + } + } + + /** + * 获取节点文本内容 + * 对于元素,返回 null,因为其内容由特定组件渲染 + * @returns {null} + */ + getText() { + return null; + } +} + +/** + * 定义一个元素的 HTML 模型类,继承自 HtmlNodeModel + * 该类主要设置节点的属性和样式 + */ +class CustomFlowHtmlModel extends HtmlNodeModel { + initNodeData(data) { + super.initNodeData(data); + // 仅允许从底部锚点连出 + this.sourceRules.push({ + message: '只能从输出锚点连线', + validate: (sourceNode, targetNode, sourceAnchor) => + // sourceAnchor.name === 'right' + sourceAnchor.properties.connectionType === 'source' + }); + + // 仅允许连接到顶部锚点 + this.targetRules.push({ + message: '只能连接到输入锚点', + validate: (sourceNode, targetNode, targetAnchor) => + // targetAnchor.name === 'left' + targetAnchor.properties.connectionType === 'target' + }); + } + + /** + * 设置节点属性 + * 包括宽度、高度、文本编辑属性等 + */ + setAttributes() { + this.width = 200; + this.height = 100; + this.text.editable = false; + } + + // 定义节点只有左右两个锚点. 锚点位置通过中心点和宽度算出来。 + getDefaultAnchor() { + let _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height; + return [ + // { x: x, y: y - height / 2, id: "".concat(this.id, "_0") }, + { x: x + width / 2, y: y, name: 'left', id: "".concat(this.id, "_1"), properties: { connectionType: 'target' } }, + // { x: x, y: y + height / 2, id: "".concat(this.id, "_2") }, + { x: x - width / 2, y: y, name: 'right', id: "".concat(this.id, "_3"), properties: { connectionType: 'source' } }, + ]; + } + + /** + * 获取节点轮廓样式 + * 覆盖父类方法,设置 stroke 属性为 none,以适应特定的视觉效果 + * @returns {object} 节点轮廓样式 + */ + getOutlineStyle() { + const style = super.getOutlineStyle(); + style.stroke = 'none'; + style.hover.stroke = 'none'; + return style; + } +} + +// 导出方法注册 +export function registerCustomNode(lf) { + lf.register({ + type: "CustomNode", + view: CustomFlowHtmlNode, + model: CustomFlowHtmlModel + }) +} \ No newline at end of file diff --git a/src/views/device/register/components/LogicFlow/index.vue b/src/views/device/register/components/LogicFlow/index.vue new file mode 100644 index 0000000..facfd2a --- /dev/null +++ b/src/views/device/register/components/LogicFlow/index.vue @@ -0,0 +1,294 @@ + + + \ No newline at end of file diff --git a/src/views/device/register/components/MechanicalArm/components/JointControl.vue b/src/views/device/register/components/MechanicalArm/components/JointControl.vue new file mode 100644 index 0000000..f53b595 --- /dev/null +++ b/src/views/device/register/components/MechanicalArm/components/JointControl.vue @@ -0,0 +1,133 @@ + + + \ No newline at end of file diff --git a/src/views/device/register/components/MechanicalArm/components/UrdfViewer.vue b/src/views/device/register/components/MechanicalArm/components/UrdfViewer.vue new file mode 100644 index 0000000..bdcc52b --- /dev/null +++ b/src/views/device/register/components/MechanicalArm/components/UrdfViewer.vue @@ -0,0 +1,394 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/register/components/MechanicalArm/index.vue b/src/views/device/register/components/MechanicalArm/index.vue new file mode 100644 index 0000000..558f317 --- /dev/null +++ b/src/views/device/register/components/MechanicalArm/index.vue @@ -0,0 +1,350 @@ + + + + + diff --git a/src/views/device/register/components/Microphone/index.vue b/src/views/device/register/components/Microphone/index.vue new file mode 100644 index 0000000..fa76496 --- /dev/null +++ b/src/views/device/register/components/Microphone/index.vue @@ -0,0 +1,225 @@ + + + diff --git a/src/views/device/register/components/Motor/index.vue b/src/views/device/register/components/Motor/index.vue new file mode 100644 index 0000000..8ecf371 --- /dev/null +++ b/src/views/device/register/components/Motor/index.vue @@ -0,0 +1,76 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/register/components/Speaker/index.vue b/src/views/device/register/components/Speaker/index.vue new file mode 100644 index 0000000..f29bf07 --- /dev/null +++ b/src/views/device/register/components/Speaker/index.vue @@ -0,0 +1,276 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/register/components/SpeechSynthesis/AudioPlayer.vue b/src/views/device/register/components/SpeechSynthesis/AudioPlayer.vue new file mode 100644 index 0000000..be36efc --- /dev/null +++ b/src/views/device/register/components/SpeechSynthesis/AudioPlayer.vue @@ -0,0 +1,108 @@ + + + + + + diff --git a/src/views/device/register/components/SpeechSynthesis/chat.vue b/src/views/device/register/components/SpeechSynthesis/chat.vue new file mode 100644 index 0000000..aaf1aca --- /dev/null +++ b/src/views/device/register/components/SpeechSynthesis/chat.vue @@ -0,0 +1,699 @@ + + + + diff --git a/src/views/device/register/components/SpeechSynthesis/img/ai.png b/src/views/device/register/components/SpeechSynthesis/img/ai.png new file mode 100644 index 0000000..79bbe45 Binary files /dev/null and b/src/views/device/register/components/SpeechSynthesis/img/ai.png differ diff --git a/src/views/device/register/components/SpeechSynthesis/img/user.png b/src/views/device/register/components/SpeechSynthesis/img/user.png new file mode 100644 index 0000000..481f7e7 Binary files /dev/null and b/src/views/device/register/components/SpeechSynthesis/img/user.png differ diff --git a/src/views/device/register/components/SpeechSynthesis/index.vue b/src/views/device/register/components/SpeechSynthesis/index.vue new file mode 100644 index 0000000..94b9003 --- /dev/null +++ b/src/views/device/register/components/SpeechSynthesis/index.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/src/views/device/register/components/SpeechSynthesis/soundRecording.vue b/src/views/device/register/components/SpeechSynthesis/soundRecording.vue new file mode 100644 index 0000000..5b2a05b --- /dev/null +++ b/src/views/device/register/components/SpeechSynthesis/soundRecording.vue @@ -0,0 +1,115 @@ + + + + + + diff --git a/src/views/device/register/components/TouchInteraction/ai.png b/src/views/device/register/components/TouchInteraction/ai.png new file mode 100644 index 0000000..79bbe45 Binary files /dev/null and b/src/views/device/register/components/TouchInteraction/ai.png differ diff --git a/src/views/device/register/components/TouchInteraction/index.vue b/src/views/device/register/components/TouchInteraction/index.vue new file mode 100644 index 0000000..08788ae --- /dev/null +++ b/src/views/device/register/components/TouchInteraction/index.vue @@ -0,0 +1,512 @@ + + + + + diff --git a/src/views/device/register/components/TouchInteraction/zsj.png b/src/views/device/register/components/TouchInteraction/zsj.png new file mode 100644 index 0000000..481f7e7 Binary files /dev/null and b/src/views/device/register/components/TouchInteraction/zsj.png differ diff --git a/src/views/device/register/components/index.js b/src/views/device/register/components/index.js new file mode 100644 index 0000000..93584d6 --- /dev/null +++ b/src/views/device/register/components/index.js @@ -0,0 +1,59 @@ +import {controlPageList} from "@/enum/index.js"; +import {ElMessage} from "element-plus"; +import router from "@/router"; + +export const intoControlPage = (path, params) => { + if (!controlPageList.includes(path)) { + ElMessage.warning('该页面不在控制台页面中,无法打开'); + return + } + // const fullPath = `${window.location.origin}${path}/${params}`; + // // 使用 window.open 在新标签页中打开 + // window.open(fullPath, '_blank'); + const fullPath = `${path}/${params}`; // 构造路由路径 + router.push(fullPath); // 使用路由跳转 +} + +// 定义需要转换的属性列表 +const propertiesToConvert = [ + "workModule", + "posStep", + "postureStep", + "jointStep", + "joint1", + "joint2", + "joint3", + "joint4", + "joint5", + "joint6", + "x", + "y", + "z", + "rx", + "ry", + "rz" +]; +export const formatNumber = (data) => { + const res = JSON.parse(JSON.stringify(data)); +// 遍历属性列表并转换值 + propertiesToConvert.forEach(property => { + if (data[property] !== null) { + res[property] = Number(data[property]); + } + }); + return res +} + +//对象中存在数字类型属性时,转换为字符串类型 +export const convertNumbersToStrings = (obj) => { + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + const value = obj[key]; + // 检查值是否不是 null 且是数字类型 + if (value !== null && typeof value === 'number') { + obj[key] = String(value); // 转换为字符串 + } + } + } + return obj; +} diff --git a/src/views/device/register/index.vue b/src/views/device/register/index.vue new file mode 100644 index 0000000..7520614 --- /dev/null +++ b/src/views/device/register/index.vue @@ -0,0 +1,414 @@ + + + diff --git a/src/views/device/robot/ContextMenu.vue b/src/views/device/robot/ContextMenu.vue new file mode 100644 index 0000000..ab47455 --- /dev/null +++ b/src/views/device/robot/ContextMenu.vue @@ -0,0 +1,89 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/robot/TechButtonWithLine.vue b/src/views/device/robot/TechButtonWithLine.vue new file mode 100644 index 0000000..a2a3526 --- /dev/null +++ b/src/views/device/robot/TechButtonWithLine.vue @@ -0,0 +1,547 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/robot/index.vue b/src/views/device/robot/index.vue new file mode 100644 index 0000000..058ce86 --- /dev/null +++ b/src/views/device/robot/index.vue @@ -0,0 +1,874 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/terminal/index.vue b/src/views/device/terminal/index.vue new file mode 100644 index 0000000..b47886d --- /dev/null +++ b/src/views/device/terminal/index.vue @@ -0,0 +1,316 @@ + + + diff --git a/src/views/home/components/BarChart.vue b/src/views/home/components/BarChart.vue new file mode 100644 index 0000000..cb08904 --- /dev/null +++ b/src/views/home/components/BarChart.vue @@ -0,0 +1,117 @@ + + + + \ No newline at end of file diff --git a/src/views/home/components/LineChart.vue b/src/views/home/components/LineChart.vue new file mode 100644 index 0000000..99ad96c --- /dev/null +++ b/src/views/home/components/LineChart.vue @@ -0,0 +1,118 @@ + + + + \ No newline at end of file diff --git a/src/views/home/index.vue b/src/views/home/index.vue new file mode 100644 index 0000000..3995412 --- /dev/null +++ b/src/views/home/index.vue @@ -0,0 +1,307 @@ + + + \ No newline at end of file diff --git a/src/views/index.vue b/src/views/index.vue index 60a9e14..60f2acb 100644 --- a/src/views/index.vue +++ b/src/views/index.vue @@ -1,40 +1,14 @@ diff --git a/src/views/intelligenceTest/car/index.vue b/src/views/intelligenceTest/car/index.vue new file mode 100644 index 0000000..a4ae1a2 --- /dev/null +++ b/src/views/intelligenceTest/car/index.vue @@ -0,0 +1,304 @@ + + + diff --git a/src/views/intelligenceTest/mobilePhone/index.vue b/src/views/intelligenceTest/mobilePhone/index.vue new file mode 100644 index 0000000..9b7acac --- /dev/null +++ b/src/views/intelligenceTest/mobilePhone/index.vue @@ -0,0 +1,321 @@ + + + diff --git a/src/views/intelligenceTest/runningTask/index.vue b/src/views/intelligenceTest/runningTask/index.vue new file mode 100644 index 0000000..0a23ee3 --- /dev/null +++ b/src/views/intelligenceTest/runningTask/index.vue @@ -0,0 +1,647 @@ + + + \ No newline at end of file diff --git a/src/views/intelligenceTest/runningTask/task-log.vue b/src/views/intelligenceTest/runningTask/task-log.vue new file mode 100644 index 0000000..28b562b --- /dev/null +++ b/src/views/intelligenceTest/runningTask/task-log.vue @@ -0,0 +1,71 @@ + + + \ No newline at end of file diff --git a/src/views/intelligenceTest/runningTask/task-steps.vue b/src/views/intelligenceTest/runningTask/task-steps.vue new file mode 100644 index 0000000..3aa7440 --- /dev/null +++ b/src/views/intelligenceTest/runningTask/task-steps.vue @@ -0,0 +1,88 @@ + + + + \ No newline at end of file diff --git a/src/views/intelligenceTest/taskManage/index.vue b/src/views/intelligenceTest/taskManage/index.vue new file mode 100644 index 0000000..57687c2 --- /dev/null +++ b/src/views/intelligenceTest/taskManage/index.vue @@ -0,0 +1,357 @@ + + + diff --git a/src/views/intelligenceTest/testCase/index.vue b/src/views/intelligenceTest/testCase/index.vue new file mode 100644 index 0000000..ef81792 --- /dev/null +++ b/src/views/intelligenceTest/testCase/index.vue @@ -0,0 +1,330 @@ + + +