create-pubinfo 2.0.0-beta.3 → 2.0.0-beta.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/index.js +187 -129
  2. package/package.json +8 -7
  3. package/templates/pubinfo-template/.browserslistrc +5 -0
  4. package/templates/pubinfo-template/.editorconfig +10 -0
  5. package/templates/pubinfo-template/.env +12 -0
  6. package/templates/pubinfo-template/.env.development +6 -0
  7. package/templates/pubinfo-template/.env.production +10 -0
  8. package/templates/pubinfo-template/_gitignore +37 -0
  9. package/templates/pubinfo-template/_npmrc +5 -0
  10. package/templates/pubinfo-template/commitlint.config.js +66 -0
  11. package/templates/pubinfo-template/eslint.config.ts +3 -0
  12. package/templates/pubinfo-template/index.html +47 -0
  13. package/templates/pubinfo-template/openapi.config.ts +33 -0
  14. package/templates/pubinfo-template/package.json +53 -0
  15. package/templates/pubinfo-template/pubinfo.config.ts +9 -0
  16. package/templates/pubinfo-template/public/browser_upgrade/chrome.png +0 -0
  17. package/templates/pubinfo-template/public/browser_upgrade/edge.png +0 -0
  18. package/templates/pubinfo-template/public/browser_upgrade/index.css +49 -0
  19. package/templates/pubinfo-template/public/loading.css +92 -0
  20. package/templates/pubinfo-template/src/App.vue +7 -0
  21. package/templates/pubinfo-template/src/api/modules/auth/index.ts +3 -0
  22. package/templates/pubinfo-template/src/api/modules/auth/renzhengfuwu.ts +145 -0
  23. package/templates/pubinfo-template/src/api/modules/auth/typings.d.ts +97 -0
  24. package/templates/pubinfo-template/src/api/request.ts +124 -0
  25. package/templates/pubinfo-template/src/assets/icons/logo.svg +1 -0
  26. package/templates/pubinfo-template/src/assets/icons/process-management.svg +1 -0
  27. package/templates/pubinfo-template/src/assets/icons/workbench.svg +1 -0
  28. package/templates/pubinfo-template/src/assets/images/login-bg.webp +0 -0
  29. package/templates/pubinfo-template/src/assets/images/login-bg_dark.webp +0 -0
  30. package/templates/pubinfo-template/src/assets/images/login-small.png +0 -0
  31. package/templates/pubinfo-template/src/assets/images/login-small_dark.webp +0 -0
  32. package/templates/pubinfo-template/src/components/UIProvider/index.vue +51 -0
  33. package/templates/pubinfo-template/src/layouts/index.vue +38 -0
  34. package/templates/pubinfo-template/src/main.ts +25 -0
  35. package/templates/pubinfo-template/src/modules/auth.ts +21 -0
  36. package/templates/pubinfo-template/src/modules/rbac.ts +52 -0
  37. package/templates/pubinfo-template/src/routes/index.ts +71 -0
  38. package/templates/pubinfo-template/src/routes/modules/demo/breadcrumb.example.ts +62 -0
  39. package/templates/pubinfo-template/src/routes/modules/demo/link.ts +15 -0
  40. package/templates/pubinfo-template/src/routes/modules/demo/multilevel.menu.example.ts +68 -0
  41. package/templates/pubinfo-template/src/routes/modules/demo/other.page.ts +37 -0
  42. package/templates/pubinfo-template/src/routes/modules/demo/single.ts +14 -0
  43. package/templates/pubinfo-template/src/settings.ts +8 -0
  44. package/templates/pubinfo-template/src/stores/index.ts +2 -0
  45. package/templates/pubinfo-template/src/stores/modules/conter.ts +16 -0
  46. package/templates/pubinfo-template/src/views/demo/breadcrumb_example/detail1.vue +11 -0
  47. package/templates/pubinfo-template/src/views/demo/breadcrumb_example/detail2.vue +11 -0
  48. package/templates/pubinfo-template/src/views/demo/breadcrumb_example/list1.vue +11 -0
  49. package/templates/pubinfo-template/src/views/demo/breadcrumb_example/list2.vue +11 -0
  50. package/templates/pubinfo-template/src/views/demo/multilevel_menu_example/level2/level3/page1.vue +11 -0
  51. package/templates/pubinfo-template/src/views/demo/multilevel_menu_example/level2/level3/page2.vue +11 -0
  52. package/templates/pubinfo-template/src/views/demo/multilevel_menu_example/level2/page.vue +11 -0
  53. package/templates/pubinfo-template/src/views/demo/multilevel_menu_example/page.vue +11 -0
  54. package/templates/pubinfo-template/src/views/demo/other_page/des.vue +13 -0
  55. package/templates/pubinfo-template/src/views/demo/other_page/index.vue +25 -0
  56. package/templates/pubinfo-template/src/views/demo/preview-empty/index.vue +17 -0
  57. package/templates/pubinfo-template/src/views/demo/single/index.vue +13 -0
  58. package/templates/pubinfo-template/src/views/system/index.vue +5 -0
  59. package/templates/pubinfo-template/src/views/system/login/components/LoginForm.vue +68 -0
  60. package/templates/pubinfo-template/src/views/system/login/components/LoginWithPhone.vue +213 -0
  61. package/templates/pubinfo-template/src/views/system/login/components/PasswordLogin.vue +214 -0
  62. package/templates/pubinfo-template/src/views/system/login/components/Savephone.vue +17 -0
  63. package/templates/pubinfo-template/src/views/system/login/components/Useragreement.vue +26 -0
  64. package/templates/pubinfo-template/src/views/system/login/composables.ts +84 -0
  65. package/templates/pubinfo-template/src/views/system/login/index.vue +165 -0
  66. package/templates/pubinfo-template/stylelint.config.js +3 -0
  67. package/templates/pubinfo-template/tsconfig.json +3 -0
  68. package/templates/pubinfo-template/uno.config.ts +17 -0
  69. package/dist/index.cjs +0 -364
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><defs><linearGradient id="b" x1="24.065%" x2="100%" y1="0%" y2="100%"><stop offset="0%" stop-color="#FFC758"/><stop offset="100%" stop-color="#FFB92B"/></linearGradient><rect id="a" width="24" height="24" x="0" y="0" rx="8"/></defs><g fill="none" fill-rule="evenodd"><use xlink:href="#a" fill="url(#b)"/><path fill="#FFF" d="M17 6a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2h-4.4v1.801H14a.6.6 0 0 1 .097 1.193L14 19h-4a.6.6 0 0 1-.097-1.192L10 17.8h1.4V16H7a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2zm-5.5 5.65h-2l-.097.008A.6.6 0 0 0 9.5 12.85h2l.097-.008a.6.6 0 0 0-.097-1.192m3-2.5h-5l-.097.008A.6.6 0 0 0 9.5 10.35h5l.097-.008A.6.6 0 0 0 14.5 9.15"/></g></svg>
@@ -0,0 +1,51 @@
1
+ <script setup lang="ts">
2
+ import { legacyLogicalPropertiesTransformer, theme } from 'ant-design-vue';
3
+ import zhCN from 'ant-design-vue/es/locale/zh_CN';
4
+ import dayjs from 'dayjs';
5
+ import { useTheme } from 'pubinfo';
6
+ import 'dayjs/locale/zh-cn';
7
+
8
+ defineOptions({
9
+ name: 'UIProvider',
10
+ });
11
+
12
+ dayjs.locale('zh-cn');
13
+
14
+ function getContainer() {
15
+ return document.body;
16
+ }
17
+
18
+ const { isDark } = useTheme();
19
+
20
+ const UILocales = computed(() => {
21
+ return zhCN;
22
+ });
23
+
24
+ const themeMode = computed(() => {
25
+ return isDark.value
26
+ ? { algorithm: [theme.darkAlgorithm] }
27
+ : {};
28
+ });
29
+
30
+ const themeConfig = computed(() => {
31
+ return Object.assign(
32
+ { token: { wireframe: true } },
33
+ themeMode.value,
34
+ );
35
+ });
36
+ </script>
37
+
38
+ <template>
39
+ <a-config-provider
40
+ :locale="UILocales"
41
+ :theme="themeConfig"
42
+ :get-popup-container="getContainer"
43
+ >
44
+ <a-style-provider hash-priority="high" :transformers="[legacyLogicalPropertiesTransformer]">
45
+ <a-app class="w-full h-full">
46
+ <slot />
47
+ <a-modal />
48
+ </a-app>
49
+ </a-style-provider>
50
+ </a-config-provider>
51
+ </template>
@@ -0,0 +1,38 @@
1
+ <script lang="ts" setup>
2
+ import {
3
+ Copyright,
4
+ Layout,
5
+ LayoutContent,
6
+ LayoutHeader,
7
+ LayoutProvider,
8
+ Logo,
9
+ Tools,
10
+ } from 'pubinfo';
11
+
12
+ const title = import.meta.env.VITE_APP_TITLE;
13
+ const dev = import.meta.env.DEV;
14
+ </script>
15
+
16
+ <template>
17
+ <LayoutProvider :app-title="title" :is-dev="dev">
18
+ <Layout>
19
+ <template #header>
20
+ <LayoutHeader>
21
+ <template #logo>
22
+ <Logo name="logo" />
23
+ </template>
24
+
25
+ <template #tools>
26
+ <Tools />
27
+ </template>
28
+ </LayoutHeader>
29
+ </template>
30
+
31
+ <LayoutContent />
32
+
33
+ <template #footer>
34
+ <Copyright />
35
+ </template>
36
+ </Layout>
37
+ </LayoutProvider>
38
+ </template>
@@ -0,0 +1,25 @@
1
+ import { createPubinfo, loadIconsFromGlob } from 'pubinfo';
2
+ import App from './App.vue';
3
+ import { setupAuth } from './modules/auth';
4
+ import { setupRbac } from './modules/rbac';
5
+ import { constantRoutes } from './routes';
6
+ import './settings';
7
+ import 'uno.css';
8
+
9
+ createPubinfo(
10
+ App,
11
+ {
12
+ routes: constantRoutes,
13
+ },
14
+ (ctx) => {
15
+ const { iconRegistry } = ctx;
16
+ const iconMap = loadIconsFromGlob(import.meta.glob('./assets/icons/*.svg', { eager: true }));
17
+ iconRegistry.register(iconMap);
18
+ },
19
+ {
20
+ modules: [
21
+ setupAuth(),
22
+ setupRbac(),
23
+ ],
24
+ },
25
+ );
@@ -0,0 +1,21 @@
1
+ import { createAuth, withModule } from '@pubinfo/module-auth';
2
+ import FourA from '@pubinfo/module-auth/providers/4A';
3
+
4
+ export const auth = createAuth({
5
+ baseURL: import.meta.env.VITE_APP_API_BASEURL,
6
+ providers: [
7
+ FourA({
8
+ clientId: import.meta.env.VITE_AUTH_4A_CLIENT_ID,
9
+ redirectUri: import.meta.env.VITE_AUTH_4A_REDIRECT_URI,
10
+ }),
11
+ ],
12
+ });
13
+
14
+ /**
15
+ * 登录相关配置
16
+ */
17
+ export function setupAuth() {
18
+ return withModule(auth, {
19
+ redirectTo: '/',
20
+ });
21
+ }
@@ -0,0 +1,52 @@
1
+ import { rbac } from '@pubinfo/module-rbac';
2
+ import '@pubinfo/module-rbac/style.css';
3
+
4
+ export function setupRbac() {
5
+ return rbac({
6
+ pages: {
7
+ AuthorityManage: {
8
+ Resource: true,
9
+ Role: true,
10
+ RoleGroup: true,
11
+ DataPermission: true,
12
+ Organization: true,
13
+ User: true,
14
+ Tenant: import.meta.env.VITE_TENANT_ENABLED === 'true',
15
+ },
16
+
17
+ SystemManage: {
18
+ DictionaryPage: {
19
+ Dictionary: true,
20
+ DictionaryItem: true,
21
+ },
22
+ Position: true,
23
+ Region: true,
24
+ Group: true,
25
+ },
26
+
27
+ SettingManage: {
28
+ ThemeSetting: true,
29
+ LayoutSetting: true,
30
+ PageAnimationSetting: true,
31
+ PageSizeSetting: true,
32
+ MenuSetting: true,
33
+ TabbarSetting: true,
34
+ ToolbarSetting: true,
35
+ BreadcrumbSetting: true,
36
+ OtherSetting: true,
37
+ },
38
+
39
+ SafeManage: {
40
+ Blacklist: true,
41
+ Whitelist: true,
42
+ SafeSetting: true,
43
+ WatermarkSetting: true,
44
+ },
45
+
46
+ LogManage: {
47
+ LoginHistory: true,
48
+ OperateHistory: true,
49
+ },
50
+ },
51
+ });
52
+ }
@@ -0,0 +1,71 @@
1
+ import Login from '@/views/system/login/index.vue';
2
+ import { defineAsyncRoutes, defineSystemRoutes } from 'pubinfo';
3
+
4
+ import Breadcrumb from './modules/demo/breadcrumb.example';
5
+ import Link from './modules/demo/link';
6
+ import MultilevelMenuExample from './modules/demo/multilevel.menu.example';
7
+ import OtherPage from './modules/demo/other.page';
8
+ import Single from './modules/demo/single';
9
+
10
+ /**
11
+ * ========================================================================
12
+ * 动态路由(异步路由、导航栏路由)
13
+ *========================================================================*
14
+ */
15
+ defineAsyncRoutes([
16
+ {
17
+ meta: {
18
+ title: '演示管理系统',
19
+ icon: 'workbench',
20
+ },
21
+ children: [
22
+ Single,
23
+ MultilevelMenuExample,
24
+ OtherPage,
25
+ Link,
26
+ Breadcrumb,
27
+ ],
28
+ },
29
+ {
30
+ meta: {
31
+ title: '演示系统1',
32
+ icon: 'process-management',
33
+ isDev: true,
34
+ },
35
+ },
36
+ ]);
37
+
38
+ /**
39
+ * ========================================================================
40
+ * 系统路由(包含布局)
41
+ *========================================================================*
42
+ */
43
+ defineSystemRoutes([
44
+ {
45
+ path: '/',
46
+ name: 'Home',
47
+ component: () => import('@/views/system/index.vue'),
48
+ meta: {
49
+ title: '首页',
50
+ icon: 'i-ant-design:home-twotone',
51
+ breadcrumb: false,
52
+ },
53
+ },
54
+ ]);
55
+
56
+ /**
57
+ * ========================================================================
58
+ * 固定路由(默认路由)
59
+ *========================================================================*
60
+ */
61
+ export const constantRoutes = [
62
+ {
63
+ path: '/login',
64
+ name: 'Login',
65
+ component: Login,
66
+ meta: {
67
+ whiteList: true,
68
+ title: '登录',
69
+ },
70
+ },
71
+ ];
@@ -0,0 +1,62 @@
1
+ import type { RouteRecordRaw } from 'vue-router';
2
+
3
+ const routes: RouteRecordRaw = {
4
+ path: '/breadcrumb_example',
5
+ redirect: '/breadcrumb_example/list1',
6
+ name: 'breadcrumbExample',
7
+ meta: {
8
+ title: '面包屑导航',
9
+ icon: 'i-solar-confetti-minimalistic-bold',
10
+ },
11
+ children: [
12
+ {
13
+ path: 'list1',
14
+ name: 'breadcrumbExampleList1',
15
+ component: () => import('@/views/demo/breadcrumb_example/list1.vue'),
16
+ meta: {
17
+ title: '列表1(平级模式)',
18
+ },
19
+ },
20
+ {
21
+ path: 'detail1',
22
+ name: 'breadcrumbExampleDetail1',
23
+ component: () => import('@/views/demo/breadcrumb_example/detail1.vue'),
24
+ meta: {
25
+ title: '详情1',
26
+ sidebar: false,
27
+ activeMenu: '/breadcrumb_example/list1',
28
+ },
29
+ },
30
+ {
31
+ path: 'list2',
32
+ name: 'breadcrumbExampleList2',
33
+ redirect: '/breadcrumb_example/demo/list2',
34
+ meta: {
35
+ title: '列表2(层级模式)',
36
+ },
37
+ children: [
38
+ {
39
+ path: '',
40
+ component: () => import('@/views/demo/breadcrumb_example/list2.vue'),
41
+ meta: {
42
+ title: '列表2(层级模式)',
43
+ sidebar: false,
44
+ breadcrumb: false,
45
+ },
46
+ },
47
+ {
48
+ path: 'detail2',
49
+ name: 'breadcrumbExampleDetail2',
50
+ component: () => import('@/views/demo/breadcrumb_example/detail2.vue'),
51
+ meta: {
52
+ title: '详情2',
53
+ sidebar: false,
54
+ activeMenu: '/breadcrumb_example/list2',
55
+ },
56
+ },
57
+ ],
58
+ },
59
+ ],
60
+ };
61
+
62
+ export default routes;
@@ -0,0 +1,15 @@
1
+ import type { RouteRecordRaw } from 'vue-router';
2
+
3
+ const routes: RouteRecordRaw = {
4
+ path: '/link',
5
+ name: 'Link',
6
+ redirect: '',
7
+ meta: {
8
+ title: '跳转路由',
9
+ singleMenu: true,
10
+ icon: 'i-solar-confetti-minimalistic-bold',
11
+ link: 'http://124.223.184.245:10000/docs/',
12
+ },
13
+ };
14
+
15
+ export default routes;
@@ -0,0 +1,68 @@
1
+ import type { RouteRecordRaw } from 'vue-router';
2
+
3
+ const routes: RouteRecordRaw = {
4
+ path: '/multilevel_menu_example',
5
+ redirect: '/multilevel_menu_example/page',
6
+ name: 'multilevelMenuExample',
7
+ meta: {
8
+ title: '多级导航',
9
+ icon: 'i-heroicons-solid:menu-alt-3',
10
+ },
11
+ children: [
12
+ {
13
+ path: 'page',
14
+ name: 'multilevelMenuExample1',
15
+ component: () => import('@/views/demo/multilevel_menu_example/page.vue'),
16
+ meta: {
17
+ title: '导航1',
18
+ icon: 'i-heroicons-solid:menu-alt-3',
19
+ },
20
+ },
21
+ {
22
+ path: 'level2',
23
+ name: 'multilevelMenuExample2',
24
+ redirect: '/multilevel_menu_example/level2/page',
25
+ meta: {
26
+ title: '导航2',
27
+ },
28
+ children: [
29
+ {
30
+ path: 'page',
31
+ name: 'multilevelMenuExample2-1',
32
+ component: () => import('@/views/demo/multilevel_menu_example/level2/page.vue'),
33
+ meta: {
34
+ title: '导航2-1',
35
+ },
36
+ },
37
+ {
38
+ path: 'level3',
39
+ name: 'multilevelMenuExample2-2',
40
+ redirect: '/multilevel_menu_example/level2/level3/page1',
41
+ meta: {
42
+ title: '导航2-2',
43
+ },
44
+ children: [
45
+ {
46
+ path: 'page1',
47
+ name: 'multilevelMenuExample2-2-1',
48
+ component: () => import('@/views/demo/multilevel_menu_example/level2/level3/page1.vue'),
49
+ meta: {
50
+ title: '导航2-2-1',
51
+ },
52
+ },
53
+ {
54
+ path: 'page2',
55
+ name: 'multilevelMenuExample2-2-2',
56
+ component: () => import('@/views/demo/multilevel_menu_example/level2/level3/page2.vue'),
57
+ meta: {
58
+ title: '导航2-2-2',
59
+ },
60
+ },
61
+ ],
62
+ },
63
+ ],
64
+ },
65
+ ],
66
+ };
67
+
68
+ export default routes;
@@ -0,0 +1,37 @@
1
+ import type { RouteRecordRaw } from 'vue-router';
2
+
3
+ const routes: RouteRecordRaw = {
4
+ path: '/other-page',
5
+ redirect: '/other-page/list',
6
+ name: 'OtherPage',
7
+ meta: {
8
+ title: '下探页面',
9
+ icon: 'i-solar-confetti-minimalistic-bold',
10
+ },
11
+ children: [
12
+ {
13
+ path: 'list',
14
+ name: 'OtherPageList',
15
+ component: () => import('@/views/demo/other_page/index.vue'),
16
+ meta: {
17
+ title: '列表页',
18
+ sidebar: false,
19
+ breadcrumb: false,
20
+ activeMenu: '/other-page',
21
+ },
22
+ },
23
+ {
24
+ path: 'detail',
25
+ name: 'OtherPageDetail',
26
+ component: () => import('@/views/demo/other_page/des.vue'),
27
+ meta: {
28
+ title: '详情页',
29
+ sidebar: false,
30
+ breadcrumb: true,
31
+ activeMenu: '/other-page',
32
+ },
33
+ },
34
+ ],
35
+ };
36
+
37
+ export default routes;
@@ -0,0 +1,14 @@
1
+ import type { RouteRecordRaw } from 'vue-router';
2
+
3
+ const routes: RouteRecordRaw = {
4
+ path: '/single',
5
+ component: () => import('@/views/demo/single/index.vue'),
6
+ name: 'Single',
7
+ meta: {
8
+ title: '单页面路由',
9
+ singleMenu: true,
10
+ icon: 'i-solar-confetti-minimalistic-bold',
11
+ },
12
+ };
13
+
14
+ export default routes;
@@ -0,0 +1,8 @@
1
+ import { defineSettings } from 'pubinfo';
2
+
3
+ export default defineSettings({
4
+ // 请在此处编写或粘贴配置代码
5
+ app: {
6
+ storagePrefix: 'wsy_rbac',
7
+ },
8
+ });
@@ -0,0 +1,2 @@
1
+ export * from './modules/conter';
2
+ export { useUserStore } from 'pubinfo';
@@ -0,0 +1,16 @@
1
+ import { defineStore } from 'pinia';
2
+ import { computed, ref } from 'vue';
3
+
4
+ export const useCounterStore = defineStore('counter', () => {
5
+ const count = ref(0);
6
+ const doubleCount = computed(() => count.value * 2);
7
+ function increment() {
8
+ count.value++;
9
+ }
10
+
11
+ return {
12
+ count,
13
+ doubleCount,
14
+ increment,
15
+ };
16
+ });
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 注意看面包屑导航的变化
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 注意看面包屑导航的变化
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <PageMain>
7
+ <RouterLink :to="{ name: 'breadcrumbExampleDetail1' }">
8
+ 查看详情页
9
+ </RouterLink>
10
+ </PageMain>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <PageMain>
7
+ <RouterLink :to="{ name: 'breadcrumbExampleDetail2' }">
8
+ 查看详情页
9
+ </RouterLink>
10
+ </PageMain>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 多级导航2-2-2221
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 多级导航2-2-1
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 多级导航2-1
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 多级导航1
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,13 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+
4
+ defineOptions({
5
+ name: 'OtherPageDetail',
6
+ });
7
+ </script>
8
+
9
+ <template>
10
+ <PageMain>
11
+ 123
12
+ </PageMain>
13
+ </template>
@@ -0,0 +1,25 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+
4
+ defineOptions({
5
+ name: 'OtherPage',
6
+ });
7
+ /* =============================================
8
+ = 逻辑代码 =
9
+ ============================================= */
10
+ const router = useRouter();
11
+ function jump() {
12
+ router.push({
13
+ name: 'OtherPageDetail',
14
+ });
15
+ }
16
+ </script>
17
+
18
+ <template>
19
+ <PageMain>
20
+ 列表页
21
+ <a-button type="primary" @click="jump">
22
+ 点击跳转入详情页
23
+ </a-button>
24
+ </PageMain>
25
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ /* =============================================
3
+ = Vue SFC Options 配置 =
4
+ ============================================= */
5
+ defineOptions({
6
+ name: 'PreviewEmpty',
7
+ });
8
+ /* =============================================
9
+ = 逻辑代码 =
10
+ ============================================= */
11
+ </script>
12
+
13
+ <template>
14
+ <div>
15
+ 空白展示页面
16
+ </div>
17
+ </template>