From 1492f9119aa2960cc05956218e6d151c8b316875 Mon Sep 17 00:00:00 2001 From: kailong321200875 <321200875@qq.com> Date: Sat, 19 Feb 2022 14:26:05 +0800 Subject: [PATCH] feat: Add example-page demo --- package.json | 1 + pnpm-lock.yaml | 13 ++ src/components/TabMenu/src/helper.ts | 2 +- src/hooks/web/useEmitt.ts | 23 +++ src/locales/en.ts | 6 +- src/locales/zh-CN.ts | 6 +- src/router/index.ts | 47 +++++ .../Example/Dialog/components/Detail.vue | 36 +--- src/views/Example/Page/ExampleAdd.vue | 54 ++++++ src/views/Example/Page/ExampleDetail.vue | 41 +++++ src/views/Example/Page/ExampleEdit.vue | 71 ++++++++ src/views/Example/Page/ExamplePage.vue | 166 ++++++++++++++++++ src/views/Example/Page/components/Detail.vue | 65 +++++++ src/views/Example/Page/components/Write.vue | 144 +++++++++++++++ 14 files changed, 639 insertions(+), 36 deletions(-) create mode 100644 src/hooks/web/useEmitt.ts create mode 100644 src/views/Example/Page/ExampleAdd.vue create mode 100644 src/views/Example/Page/ExampleDetail.vue create mode 100644 src/views/Example/Page/ExampleEdit.vue create mode 100644 src/views/Example/Page/ExamplePage.vue create mode 100644 src/views/Example/Page/components/Detail.vue create mode 100644 src/views/Example/Page/components/Write.vue diff --git a/package.json b/package.json index cfb0b1caa..97e187655 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "element-plus": "2.0.2", "intro.js": "^5.0.0", "lodash-es": "^4.17.21", + "mitt": "^3.0.0", "mockjs": "^1.1.0", "nprogress": "^0.2.0", "pinia": "^2.0.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2b4660adf..a5239244f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,7 @@ specifiers: less: ^4.1.2 lint-staged: ^12.3.4 lodash-es: ^4.17.21 + mitt: ^3.0.0 mockjs: ^1.1.0 nprogress: ^0.2.0 pinia: ^2.0.11 @@ -86,6 +87,7 @@ dependencies: element-plus: registry.npmmirror.com/element-plus/2.0.2_1a412d14def5ff5ca1122000e4bee666 intro.js: registry.npmmirror.com/intro.js/5.0.0 lodash-es: registry.nlark.com/lodash-es/4.17.21 + mitt: registry.npmmirror.com/mitt/3.0.0 mockjs: registry.npmmirror.com/mockjs/1.1.0 nprogress: registry.npmmirror.com/nprogress/0.2.0 pinia: registry.npmmirror.com/pinia/2.0.11_typescript@4.5.5+vue@3.2.31 @@ -10127,6 +10129,17 @@ packages: version: 1.2.5 dev: true + registry.npmmirror.com/mitt/3.0.0: + resolution: + { + integrity: sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==, + registry: https://registry.npm.taobao.org/, + tarball: https://registry.npmmirror.com/mitt/-/mitt-3.0.0.tgz + } + name: mitt + version: 3.0.0 + dev: false + registry.npmmirror.com/mixin-deep/1.3.2: resolution: { diff --git a/src/components/TabMenu/src/helper.ts b/src/components/TabMenu/src/helper.ts index 484280911..1e7f3d899 100644 --- a/src/components/TabMenu/src/helper.ts +++ b/src/components/TabMenu/src/helper.ts @@ -27,7 +27,7 @@ export const filterMenusPath = ( for (const v of routes) { let data: Nullable = null const meta = (v.meta ?? {}) as RouteMeta - if (!meta.hidden) { + if (!meta.hidden || meta.showMainRoute) { const allParentPaht = getAllParentPath(allRoutes, v.path) const fullPath = isUrl(v.path) ? v.path : allParentPaht.join('/') diff --git a/src/hooks/web/useEmitt.ts b/src/hooks/web/useEmitt.ts new file mode 100644 index 000000000..26b5d626c --- /dev/null +++ b/src/hooks/web/useEmitt.ts @@ -0,0 +1,23 @@ +import mitt from 'mitt' +import { onBeforeUnmount } from 'vue' + +interface Option { + name: string // 事件名称 + callback: Fn // 回调 +} + +const emitter = mitt() + +export const useEmitt = (option?: Option) => { + if (option) { + emitter.on(option.name, option.callback) + + onBeforeUnmount(() => { + emitter.off(option.name) + }) + } + + return { + emitter + } +} diff --git a/src/locales/en.ts b/src/locales/en.ts index b443dbd87..5b0f46301 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -115,7 +115,11 @@ export default { imageViewer: 'Image viewer', descriptions: 'Descriptions', example: 'Example', - exampleDialog: 'Example dialog' + exampleDialog: 'Example dialog', + examplePage: 'Example page', + exampleAdd: 'Example page - add', + exampleEdit: 'Example page - edit', + exampleDetail: 'Example page - detail' }, analysis: { newUser: 'New user', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index a23e9bee2..b98c82d4a 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -115,7 +115,11 @@ export default { imageViewer: '图片预览', descriptions: '描述', example: '综合示例', - exampleDialog: '综合示例 - 弹窗' + exampleDialog: '综合示例 - 弹窗', + examplePage: '综合示例 - 页面', + exampleAdd: '综合示例 - 新增', + exampleEdit: '综合示例 - 编辑', + exampleDetail: '综合示例 - 详情' }, analysis: { newUser: '新增用户', diff --git a/src/router/index.ts b/src/router/index.ts index cbbb9a38c..149412656 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -352,6 +352,53 @@ export const asyncRouterMap: AppRouteRecordRaw[] = [ meta: { title: t('router.exampleDialog') } + }, + { + path: 'example-page', + component: () => import('@/views/Example/Page/ExamplePage.vue'), + name: 'ExamplePage', + meta: { + title: t('router.examplePage') + } + }, + { + path: 'example-add', + component: () => import('@/views/Example/Page/ExampleAdd.vue'), + name: 'ExampleAdd', + meta: { + title: t('router.exampleAdd'), + noTagsView: true, + noCache: true, + hidden: true, + showMainRoute: true, + activeMenu: '/example/example-page' + } + }, + { + path: 'example-edit', + component: () => import('@/views/Example/Page/ExampleEdit.vue'), + name: 'ExampleEdit', + meta: { + title: t('router.exampleEdit'), + noTagsView: true, + noCache: true, + hidden: true, + showMainRoute: true, + activeMenu: '/example/example-page' + } + }, + { + path: 'example-detail', + component: () => import('@/views/Example/Page/ExampleDetail.vue'), + name: 'ExampleDetail', + meta: { + title: t('router.exampleDetail'), + noTagsView: true, + noCache: true, + hidden: true, + showMainRoute: true, + activeMenu: '/example/example-page' + } } ] } diff --git a/src/views/Example/Dialog/components/Detail.vue b/src/views/Example/Dialog/components/Detail.vue index 4da0a99ac..b89ed4d2f 100644 --- a/src/views/Example/Dialog/components/Detail.vue +++ b/src/views/Example/Dialog/components/Detail.vue @@ -1,6 +1,5 @@