From 78fadcc3cd3910b8f523b62c7babb8b12d6a9b1a Mon Sep 17 00:00:00 2001 From: saatana <1041367524@qq.com> Date: Tue, 22 Mar 2022 16:37:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=9B=BE=E6=A0=87=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/layouts/components/view.vue | 11 +-- src/plugins/global-api.js | 16 +++++ src/router/demo.js | 14 +++- src/router/index.js | 11 ++- src/store/modules/layout.js | 2 + src/views/demo/iconDemo.vue | 115 ++++++++++++++++++++++++++++++++ 6 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 src/plugins/global-api.js create mode 100644 src/views/demo/iconDemo.vue diff --git a/src/layouts/components/view.vue b/src/layouts/components/view.vue index 7147491..2dbcf39 100644 --- a/src/layouts/components/view.vue +++ b/src/layouts/components/view.vue @@ -1,13 +1,16 @@ - + diff --git a/src/plugins/global-api.js b/src/plugins/global-api.js new file mode 100644 index 0000000..c855971 --- /dev/null +++ b/src/plugins/global-api.js @@ -0,0 +1,16 @@ +import { ElMessage } from './element-plus'; + +export const copy = (content) => { + const el = document.createElement('textarea'); + el.style.position = 'absolute'; + el.style.zIndex = '-9999'; + el.value = content; + document.body.appendChild(el); + el.select(); + document.execCommand('copy'); + el.remove(); + ElMessage.success('复制成功'); +}; +export default (app) => { + app.config.globalProperties.$copy = copy; +}; diff --git a/src/router/demo.js b/src/router/demo.js index 3d3434b..be38faf 100644 --- a/src/router/demo.js +++ b/src/router/demo.js @@ -5,17 +5,27 @@ export default [ component: () => import('@/layouts/default.vue'), meta: { title: '组件示例', - icon: 'home-fill', + icon: 'test-tube-fill', layout: true, }, children: [ + { + path: 'icon', + name: 'IconDemo', + component: () => import('@/views/demo/iconDemo.vue'), + meta: { + title: '图标库', + icon: 'aliens-fill', + keepAlive: false, + }, + }, { path: 'sortable', name: 'SortableTableDemo', component: () => import('@/views/demo/sortableTableDemo.vue'), meta: { title: '拖拽排序', - icon: 'home-fill', + icon: 'table-2', }, }, ], diff --git a/src/router/index.js b/src/router/index.js index 9d76111..6f2cc11 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -22,7 +22,7 @@ export const globalRoutes = [ // 示例模块 import demoModule from './demo'; -export const demoRoutes = import.meta.env.DEV ? demoModule : []; +export const demoRoutes = import.meta.env.MODE === 'development' ? demoModule : []; // 动态模块 export const dynamicRoutes = []; @@ -120,7 +120,7 @@ router.beforeEach(async (to, from, next) => { export default router; /** * 多级嵌套路由时,由于父级路由页面中没有router-view组件所以子级路由页面无法显示 - * 所以需要将路由规则展平处理让所有页面路由规则都是平级 + * 所以需要将路由规则展平处理 * @param {*} routes * @param {*} parent */ @@ -169,5 +169,12 @@ export const reset = (routes) => { ]; } flatRoutes(routes).forEach(router.addRoute); + store.commit( + 'layout/setNotKeepAliveList', + router + .getRoutes() + .filter((item) => item.meta.keepAlive === false) + .map((item) => item.name) + ); console.info('[router] reset', router.getRoutes()); }; diff --git a/src/store/modules/layout.js b/src/store/modules/layout.js index d698c62..6d8081a 100644 --- a/src/store/modules/layout.js +++ b/src/store/modules/layout.js @@ -8,6 +8,7 @@ const state = () => ({ activeTab: null, breakcrumbList: [], autoRouter: false, + notKeepAliveList: [], }); const getters = { asideList: (state, getters, rootState) => { @@ -52,6 +53,7 @@ const mutations = { setActiveTab: (state, data) => (state.activeTab = data), setBreakcrumbList: (state, data) => (state.breakcrumbList = data), setAutoRouter: (state, data) => (state.autoRouter = data), + setNotKeepAliveList: (state, data) => (state.notKeepAliveList = data), }; const actions = {}; export default { diff --git a/src/views/demo/iconDemo.vue b/src/views/demo/iconDemo.vue new file mode 100644 index 0000000..2d11add --- /dev/null +++ b/src/views/demo/iconDemo.vue @@ -0,0 +1,115 @@ + + + + +