-
-
@@ -38,8 +38,8 @@ import { PropType } from 'vue';
import { QuestionCircleOutlined } from '@ant-design/icons-vue';
import { message } from 'ant-design-vue';
-import AccessMethodDialog from './dialogs/AccessMethodDialog.vue';
-import FuncTestDialog from './dialogs/FuncTestDialog.vue';
+import ProductChooseDialog from './dialogs/ProductChooseDialog.vue';
+import DeviceChooseDialog from './dialogs/DeviceChooseDialog.vue';
import { recommendList } from '../index';
@@ -73,9 +73,8 @@ const jumpPage = (row: recommendList) => {
}
};
// 弹窗返回后的二次跳转
-const againJumpPage = (paramsSource: object) => {
- const params = { ...(selectRow.params || {}), ...paramsSource };
- router.push(`${selectRow.linkUrl}${objToParams(params || {})}`);
+const againJumpPage = (params: string) => {
+ router.push(`${selectRow.linkUrl}/${params}`);
};
const objToParams = (source: object): string => {
diff --git a/src/views/home/components/dialogs/DeviceChooseDialog.vue b/src/views/home/components/dialogs/DeviceChooseDialog.vue
new file mode 100644
index 00000000..18a03947
--- /dev/null
+++ b/src/views/home/components/dialogs/DeviceChooseDialog.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+ {{ dateFormat(slotProps.modifyTime) }}
+
+
+
+
+
+
+
+ 取消
+ 确认
+
+
+
+
+
+
+
diff --git a/src/views/home/components/dialogs/FuncTestDialog.vue b/src/views/home/components/dialogs/FuncTestDialog.vue
deleted file mode 100644
index f04db868..00000000
--- a/src/views/home/components/dialogs/FuncTestDialog.vue
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
-
-
- 取消
- 确认
-
-
-
-
-
-
-
diff --git a/src/views/home/components/dialogs/AccessMethodDialog.vue b/src/views/home/components/dialogs/ProductChooseDialog.vue
similarity index 96%
rename from src/views/home/components/dialogs/AccessMethodDialog.vue
rename to src/views/home/components/dialogs/ProductChooseDialog.vue
index 6bf83d48..07cb6e95 100644
--- a/src/views/home/components/dialogs/AccessMethodDialog.vue
+++ b/src/views/home/components/dialogs/ProductChooseDialog.vue
@@ -53,7 +53,7 @@ const productList = ref<[productItem] | []>([]);
const getContainer = () => proxy?.$refs.modal as HTMLElement;
const getOptions = () => {
- getProductList_api().then((resp) => {
+ getProductList_api().then((resp:any) => {
productList.value = resp.result
.filter((i: any) => !i?.accessId)
.map((item: { name: any; id: any }) => ({
@@ -63,7 +63,7 @@ const getOptions = () => {
});
};
const handleOk = () => {
- emits('confirm', form.value);
+ emits('confirm', form.value.productId);
visible.value = false;
};
const filterOption = (input: string, option: any) => {
diff --git a/src/views/home/index.d.ts b/src/views/home/index.d.ts
index 6b8a22bb..19b3c366 100644
--- a/src/views/home/index.d.ts
+++ b/src/views/home/index.d.ts
@@ -8,7 +8,11 @@ export interface recommendList {
auth: boolean;
dialogTag?: 'accessMethod' | 'funcTest';
}
-
+// 产品列表里的每项
+export interface productItem {
+ label: string;
+ value: string
+}
export interface deviceInfo {
deviceId: string,
deviceName: string,
diff --git a/src/views/home/modules/config.ts b/src/views/home/modules/config.ts
index 5857b8d0..49b1d104 100644
--- a/src/views/home/modules/config.ts
+++ b/src/views/home/modules/config.ts
@@ -1,9 +1,10 @@
// import {getImage} from '@/utils/comm'
+import { useMenuStore } from "@/store/menu";
import { usePermissionStore } from "@/store/permission";
import { recommendList, bootConfig } from "../index";
-// 权限控制
+// 按钮权限控制
const hasPermission = usePermissionStore().hasPermission;
const productPermission = (action: string) =>
hasPermission(`device/Product:${action}`);
@@ -11,6 +12,8 @@ const devicePermission = (action: string) =>
hasPermission(`device/Instance:${action}`);
const rulePermission = (action: string) =>
hasPermission(`rule-engine/Instance:${action}`);
+// 页面权限控制
+const menuPermission = useMenuStore().hasPermission
// 物联网引导-数据
@@ -18,7 +21,7 @@ export const deviceBootConfig: bootConfig[] = [
{
english: 'STEP1',
label: '创建产品',
- link: '/a',
+ link: '/iot/device/Product',
auth: productPermission('add'),
params: {
save: true,
@@ -27,7 +30,7 @@ export const deviceBootConfig: bootConfig[] = [
{
english: 'STEP2',
label: '创建设备',
- link: '/b',
+ link: '/iot/device/Instance',
auth: devicePermission('add'),
params: {
save: true,
@@ -36,7 +39,7 @@ export const deviceBootConfig: bootConfig[] = [
{
english: 'STEP3',
label: '规则引擎',
- link: '/c',
+ link: '/iot/rule-engine/Instance',
auth: rulePermission('add'),
params: {
save: true,
@@ -50,7 +53,7 @@ export const deviceStepDetails: recommendList[] = [
details:
'产品是设备的集合,通常指一组具有相同功能的设备。物联设备必须通过产品进行接入方式配置。',
iconUrl: '/images/home/bottom-4.png',
- linkUrl: '/a',
+ linkUrl: '/iot/device/Product',
auth: productPermission('add'),
params: {
save: true,
@@ -61,7 +64,7 @@ export const deviceStepDetails: recommendList[] = [
details:
'通过产品对同一类型的设备进行统一的接入方式配置。请参照设备铭牌说明选择匹配的接入方式。',
iconUrl: '/images/home/bottom-1.png',
- linkUrl: '/a',
+ linkUrl: '/iot/device/Product/detail',
auth: productPermission('update'),
dialogTag: 'accessMethod',
},
@@ -69,7 +72,7 @@ export const deviceStepDetails: recommendList[] = [
title: '添加测试设备',
details: '添加单个设备,用于验证产品模型是否配置正确。',
iconUrl: '/images/home/bottom-5.png',
- linkUrl: '/a',
+ linkUrl: '/iot/device/Instance',
auth: devicePermission('add'),
params: {
save: true,
@@ -80,15 +83,16 @@ export const deviceStepDetails: recommendList[] = [
details:
'对添加的测试设备进行功能调试,验证能否连接到平台,设备功能是否配置正确。',
iconUrl: '/images/home/bottom-2.png',
- linkUrl: '/a',
+ linkUrl: '/iot/device/Instance/detail',
auth: devicePermission('update'),
+ // auth: true,
dialogTag: 'funcTest',
},
{
title: '批量添加设备',
details: '批量添加同一产品下的设备',
iconUrl: '/images/home/bottom-3.png',
- linkUrl: '/a',
+ linkUrl: '/iot/device/Instance',
auth: devicePermission('import'),
params: {
import: true,
@@ -102,14 +106,14 @@ export const opsBootConfig: bootConfig[] = [
{
english: 'STEP1',
label: '设备接入配置',
- link: '/a',
- auth: true,
+ link: '/iot/link/accessConfig',
+ auth: menuPermission('link/accessConfig'),
},
{
english: 'STEP2',
label: '日志排查',
- link: '/b',
- auth: true,
+ link: '/iot/link/Log',
+ auth: menuPermission('link/Log'),
params: {
key: 'system',
},
@@ -117,8 +121,8 @@ export const opsBootConfig: bootConfig[] = [
{
english: 'STEP3',
label: '实时监控',
- link: '/c',
- auth: false,
+ link: '/iot/link/dashboard',
+ auth: menuPermission('link/dashboard'),
params: {
save: true,
},
@@ -131,44 +135,38 @@ export const opsStepDetails: recommendList[] = [
details:
'根据业务需求自定义开发对应的产品(设备模型)接入协议,并上传到平台。',
iconUrl: '/images/home/bottom-1.png',
- linkUrl: '/a',
- auth: true,
- params: {
- a: 1,
- save: true,
- },
+ linkUrl: '/iot/link/protocol',
+ auth: menuPermission('link/Protocol'),
+
},
{
title: '证书管理',
details: '统一维护平台内的证书,用于数据通信加密。',
iconUrl: '/images/home/bottom-6.png',
- linkUrl: '/a',
- auth: true,
- params: {
- a: 1,
- save: false,
- },
+ linkUrl: '/iot/link/Certificate',
+ auth: menuPermission('link/Certificate'),
+
},
{
title: '网络组件',
details: '根据不同的传输类型配置平台底层网络组件相关参数。',
iconUrl: '/images/home/bottom-3.png',
- linkUrl: '/a',
- auth: true,
+ linkUrl: '/iot/link/type',
+ auth: menuPermission('link/Type'),
},
{
title: '设备接入网关',
details: '根据不同的传输类型,关联消息协议,配置设备接入网关相关参数。',
iconUrl: '/images/home/bottom-4.png',
- linkUrl: '/a',
- auth: true,
+ linkUrl: '/iot/link/accessConfig',
+ auth: menuPermission('link/AccessConfig'),
},
{
title: '日志管理',
details: '监控系统日志,及时处理系统异常。',
iconUrl: '/images/home/bottom-5.png',
- linkUrl: '/a',
- auth: false,
+ linkUrl: '/iot/link/Log',
+ auth: menuPermission('Log'),
params: {
key: 'system',
}
From f3bc5740afe06fd8e2b8ac179a79ba9b60b36611 Mon Sep 17 00:00:00 2001
From: xieyonghong <18010623010@163.com>
Date: Sun, 29 Jan 2023 17:16:16 +0800
Subject: [PATCH 09/23] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96Layout=E7=BB=84?=
=?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=8A=A8=E6=80=81=E8=B7=AF?=
=?UTF-8?q?=E7=94=B1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
config/config.ts | 12 +-
src/App.vue | 25 +-
src/api/comm.ts | 5 +
src/api/login.ts | 7 +-
src/api/system/menu.ts | 3 +
src/components/AIcon/index.tsx | 3 +-
src/components/Layout/BasicLayout.tsx | 91 ++---
src/components/Layout/BasicLayoutPage.vue | 59 ++++
src/components/Layout/BlankLayoutPage.vue | 13 +
.../Layout/components/Header/Header.tsx | 87 +++--
.../Layout/components/Header/index.less | 5 +
.../Layout/components/Header/index.tsx | 45 ++-
.../Layout/components/SiderMenu/BaseMenu.tsx | 9 +-
.../components/SiderMenu/SiderMenu.less | 16 +
.../Layout/components/SiderMenu/SiderMenu.tsx | 37 ++-
src/components/Layout/index.ts | 4 +-
src/components/Layout/utils.ts | 6 +-
src/components/index.ts | 3 +
src/router/index.ts | 55 +++-
src/router/menu.ts | 310 +++++++++++-------
src/store/menu.ts | 46 ++-
src/store/system.ts | 24 ++
src/store/userInfo.ts | 14 +-
src/utils/encodeQuery.ts | 4 +-
src/utils/menu.ts | 111 +++++++
src/utils/request.ts | 6 +-
tsconfig.json | 2 +-
27 files changed, 716 insertions(+), 286 deletions(-)
create mode 100644 src/api/system/menu.ts
create mode 100644 src/components/Layout/BasicLayoutPage.vue
create mode 100644 src/components/Layout/BlankLayoutPage.vue
create mode 100644 src/components/Layout/components/SiderMenu/SiderMenu.less
create mode 100644 src/store/system.ts
create mode 100644 src/utils/menu.ts
diff --git a/config/config.ts b/config/config.ts
index 11e31a68..9a3c3b8a 100644
--- a/config/config.ts
+++ b/config/config.ts
@@ -2,13 +2,13 @@ export default {
theme: {
'primary-color': '#1d39c4',
},
- logo: '/favicon.ico',
- title: 'Jetlinks',
+ logo: '/favicon.ico', // 浏览器标签页logo
+ title: 'Jetlinks', // 浏览器标签页title
layout: {
- title: '物联网平台',
- logo: '/icons/icon-192x192.png',
- siderWidth: 208,
- headerHeight: 48,
+ title: '物联网平台', // 平台title
+ logo: '/icons/icon-192x192.png', // 平台logo
+ siderWidth: 208, // 左侧菜单栏宽度
+ headerHeight: 48, // 头部高度
collapsedWidth: 48,
mode: 'inline',
theme: 'light', // 'dark' 'light'
diff --git a/src/App.vue b/src/App.vue
index 0bd59e76..02bc5677 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,31 +1,8 @@
-
-
-
+
diff --git a/src/components/Layout/BlankLayoutPage.vue b/src/components/Layout/BlankLayoutPage.vue
new file mode 100644
index 00000000..69d6fa16
--- /dev/null
+++ b/src/components/Layout/BlankLayoutPage.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/Layout/components/Header/Header.tsx b/src/components/Layout/components/Header/Header.tsx
index ad36951b..f3ff3654 100644
--- a/src/components/Layout/components/Header/Header.tsx
+++ b/src/components/Layout/components/Header/Header.tsx
@@ -8,6 +8,9 @@ import { defaultSettingProps } from 'components/Layout/defaultSetting'
import PropTypes from 'ant-design-vue/es/_util/vue-types'
import { CustomRender, MenuDataItem, ProProps, RightContentRender, WithFalse } from 'components/Layout/typings'
import './index.less'
+import { omit } from 'lodash-es'
+import { RouteRecordRaw } from 'vue-router'
+import { clearMenuItem } from 'components/Layout/utils'
export const headerProps = {
...defaultSettingProps,
@@ -66,48 +69,60 @@ export default defineComponent({
const context = useRouteContext();
+ const noChildrenMenuData = (menuData || []).map((item) => ({
+ ...item,
+ children: undefined,
+ })) as RouteRecordRaw[];
+
+ const clearMenuData = clearMenuItem(noChildrenMenuData);
+
return () => (
-