From d8520da8941747faca9f18eee10e040153b31a95 Mon Sep 17 00:00:00 2001 From: trezeman <2857385816@qq.com> Date: Tue, 31 Mar 2026 17:56:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=BE=E5=A4=87=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=92=8C=E6=95=99=E5=AD=A6=E8=A7=86=E9=A2=91=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=EF=BC=8C=E5=AE=8C=E6=88=90=E5=9F=BA=E7=A1=80ui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/system/info.js | 18 + src/api/system/video.js | 18 + src/store/modules/permission.js | 8 + src/views/system/info/index.vue | 545 +++++++++++++++++++++++++++++++ src/views/system/video/index.vue | 329 +++++++++++++++++++ 5 files changed, 918 insertions(+) create mode 100644 src/api/system/info.js create mode 100644 src/api/system/video.js create mode 100644 src/views/system/info/index.vue create mode 100644 src/views/system/video/index.vue diff --git a/src/api/system/info.js b/src/api/system/info.js new file mode 100644 index 0000000..f12a368 --- /dev/null +++ b/src/api/system/info.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询设备基本信息列表 +export function listInfo(query) { + return request({ + url: '/system/info/list', + method: 'get', + params: query + }) +} + +// 查询设备基本信息详细 +export function getInfo(deviceId) { + return request({ + url: '/system/info/' + deviceId, + method: 'get' + }) +} diff --git a/src/api/system/video.js b/src/api/system/video.js new file mode 100644 index 0000000..8f70b59 --- /dev/null +++ b/src/api/system/video.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询教学视频列表 +export function listVideo(query) { + return request({ + url: '/system/video/list', + method: 'get', + params: query + }) +} + +// 查询教学视频详细 +export function getVideo(videoId) { + return request({ + url: '/system/video/' + videoId, + method: 'get' + }) +} diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js index 6a16d9d..7b71840 100644 --- a/src/store/modules/permission.js +++ b/src/store/modules/permission.js @@ -58,6 +58,14 @@ const usePermissionStore = defineStore( // 遍历后台传来的路由字符串,转换为组件对象 function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) { return asyncRouterMap.filter(route => { + // 兼容:后端把顶级菜单配置成了具体页面组件(非Layout)时,会导致进入后丢失整体布局(侧边栏/顶部栏)。 + // 这里将该类顶级叶子路由自动包一层 Layout,子路由使用空 path 以保持原 URL 不变。 + if (!lastRouter && route.component && !route.children && !['Layout', 'ParentView', 'InnerLink'].includes(route.component) && typeof route.path === 'string' && route.path.startsWith('/')) { + const inner = { ...route } + route.component = 'Layout' + route.name = inner.name ? `${inner.name}Wrapper` : route.name + route.children = [Object.assign(inner, { path: '' })] + } if (type && route.children) { route.children = filterChildren(route.children) } diff --git a/src/views/system/info/index.vue b/src/views/system/info/index.vue new file mode 100644 index 0000000..476a4f7 --- /dev/null +++ b/src/views/system/info/index.vue @@ -0,0 +1,545 @@ + + + + + diff --git a/src/views/system/video/index.vue b/src/views/system/video/index.vue new file mode 100644 index 0000000..4db52ce --- /dev/null +++ b/src/views/system/video/index.vue @@ -0,0 +1,329 @@ +