pandax 0.0.1

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 (90) hide show
  1. package/README.md +83 -0
  2. package/bin/pandax.js +592 -0
  3. package/package.json +33 -0
  4. package/skills/pandax-frontend-api-mock/SKILL.md +62 -0
  5. package/skills/pandax-frontend-architecture/SKILL.md +1239 -0
  6. package/skills/pandax-frontend-component-review/SKILL.md +114 -0
  7. package/skills/pandax-frontend-requirement/SKILL.md +142 -0
  8. package/skills/pandax-frontend-standards/SKILL.md +468 -0
  9. package/skills/pandax-frontend-use-modal/SKILL.md +621 -0
  10. package/templates/pandax-monorepo/.editorconfig +16 -0
  11. package/templates/pandax-monorepo/.husky/commit-msg +2 -0
  12. package/templates/pandax-monorepo/.husky/pre-commit +2 -0
  13. package/templates/pandax-monorepo/.prettierrc.json +28 -0
  14. package/templates/pandax-monorepo/apps/base/env.d.ts +1 -0
  15. package/templates/pandax-monorepo/apps/base/index.html +13 -0
  16. package/templates/pandax-monorepo/apps/base/package.json +30 -0
  17. package/templates/pandax-monorepo/apps/base/src/App.vue +15 -0
  18. package/templates/pandax-monorepo/apps/base/src/layouts/default-layout/index.vue +23 -0
  19. package/templates/pandax-monorepo/apps/base/src/main.ts +31 -0
  20. package/templates/pandax-monorepo/apps/base/src/router/index.ts +22 -0
  21. package/templates/pandax-monorepo/apps/base/src/stores/index.ts +15 -0
  22. package/templates/pandax-monorepo/apps/base/src/styles/global.scss +19 -0
  23. package/templates/pandax-monorepo/apps/base/src/styles/variables.scss +4 -0
  24. package/templates/pandax-monorepo/apps/base/src/types/wujie.d.ts +16 -0
  25. package/templates/pandax-monorepo/apps/base/src/views/home/index.vue +21 -0
  26. package/templates/pandax-monorepo/apps/base/tsconfig.json +25 -0
  27. package/templates/pandax-monorepo/apps/base/tsconfig.node.json +11 -0
  28. package/templates/pandax-monorepo/apps/base/vite.config.ts +26 -0
  29. package/templates/pandax-monorepo/apps/main/env.d.ts +1 -0
  30. package/templates/pandax-monorepo/apps/main/index.html +13 -0
  31. package/templates/pandax-monorepo/apps/main/package.json +32 -0
  32. package/templates/pandax-monorepo/apps/main/src/App.vue +15 -0
  33. package/templates/pandax-monorepo/apps/main/src/layouts/MicroApp.vue +29 -0
  34. package/templates/pandax-monorepo/apps/main/src/layouts/default-layout/index.vue +48 -0
  35. package/templates/pandax-monorepo/apps/main/src/main.ts +27 -0
  36. package/templates/pandax-monorepo/apps/main/src/router/index.ts +22 -0
  37. package/templates/pandax-monorepo/apps/main/src/stores/index.ts +23 -0
  38. package/templates/pandax-monorepo/apps/main/src/styles/global.scss +23 -0
  39. package/templates/pandax-monorepo/apps/main/src/styles/variables.scss +8 -0
  40. package/templates/pandax-monorepo/apps/main/src/views/home/index.vue +25 -0
  41. package/templates/pandax-monorepo/apps/main/tsconfig.json +25 -0
  42. package/templates/pandax-monorepo/apps/main/tsconfig.node.json +11 -0
  43. package/templates/pandax-monorepo/apps/main/vite.config.ts +24 -0
  44. package/templates/pandax-monorepo/commitlint.config.js +38 -0
  45. package/templates/pandax-monorepo/eslint.config.js +61 -0
  46. package/templates/pandax-monorepo/package.json +50 -0
  47. package/templates/pandax-monorepo/packages/components/package.json +20 -0
  48. package/templates/pandax-monorepo/packages/components/src/PandaButton.vue +15 -0
  49. package/templates/pandax-monorepo/packages/components/src/PandaCard.vue +16 -0
  50. package/templates/pandax-monorepo/packages/components/src/index.ts +2 -0
  51. package/templates/pandax-monorepo/packages/core/package.json +20 -0
  52. package/templates/pandax-monorepo/packages/core/src/index.ts +2 -0
  53. package/templates/pandax-monorepo/packages/core/src/request.ts +24 -0
  54. package/templates/pandax-monorepo/packages/core/src/utils.ts +7 -0
  55. package/templates/pandax-monorepo/packages/hooks/package.json +19 -0
  56. package/templates/pandax-monorepo/packages/hooks/src/index.ts +2 -0
  57. package/templates/pandax-monorepo/packages/hooks/src/useCounter.ts +27 -0
  58. package/templates/pandax-monorepo/packages/hooks/src/useToggle.ts +19 -0
  59. package/templates/pandax-monorepo/packages/styles/package.json +19 -0
  60. package/templates/pandax-monorepo/packages/styles/src/index.ts +1 -0
  61. package/templates/pandax-monorepo/packages/styles/src/uno.ts +19 -0
  62. package/templates/pandax-monorepo/packages/styles/src/variables.scss +14 -0
  63. package/templates/pandax-monorepo/pnpm-workspace.yaml +32 -0
  64. package/templates/pandax-monorepo/turbo.json +23 -0
  65. package/templates/vue3/.eslintrc.cjs +16 -0
  66. package/templates/vue3/.prettierrc +7 -0
  67. package/templates/vue3/env.d.ts +1 -0
  68. package/templates/vue3/index.html +13 -0
  69. package/templates/vue3/package.json +34 -0
  70. package/templates/vue3/src/App.vue +14 -0
  71. package/templates/vue3/src/api/index.ts +27 -0
  72. package/templates/vue3/src/assets/.gitkeep +1 -0
  73. package/templates/vue3/src/components/.gitkeep +1 -0
  74. package/templates/vue3/src/composables/.gitkeep +1 -0
  75. package/templates/vue3/src/constants/.gitkeep +1 -0
  76. package/templates/vue3/src/directives/.gitkeep +1 -0
  77. package/templates/vue3/src/layouts/default-layout/index.vue +33 -0
  78. package/templates/vue3/src/locales/.gitkeep +1 -0
  79. package/templates/vue3/src/main.ts +17 -0
  80. package/templates/vue3/src/router/index.ts +17 -0
  81. package/templates/vue3/src/services/.gitkeep +1 -0
  82. package/templates/vue3/src/stores/index.ts +12 -0
  83. package/templates/vue3/src/styles/global.scss +18 -0
  84. package/templates/vue3/src/styles/variables.scss +17 -0
  85. package/templates/vue3/src/types/global.d.ts +9 -0
  86. package/templates/vue3/src/utils/format.ts +11 -0
  87. package/templates/vue3/src/views/home/index.vue +19 -0
  88. package/templates/vue3/tsconfig.json +25 -0
  89. package/templates/vue3/tsconfig.node.json +10 -0
  90. package/templates/vue3/vite.config.ts +20 -0
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "pandax-base",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "vite --port 7101",
7
+ "build": "vue-tsc --noEmit && vite build",
8
+ "preview": "vite preview --port 7101",
9
+ "lint": "eslint .",
10
+ "lint:fix": "eslint . --fix",
11
+ "typecheck": "vue-tsc --noEmit"
12
+ },
13
+ "dependencies": {
14
+ "vue": "catalog:",
15
+ "vue-router": "catalog:",
16
+ "pinia": "catalog:",
17
+ "axios": "catalog:",
18
+ "element-plus": "catalog:",
19
+ "@element-plus/icons-vue": "catalog:"
20
+ },
21
+ "devDependencies": {
22
+ "@vitejs/plugin-vue": "^5.2.0",
23
+ "vite": "catalog:",
24
+ "vue-tsc": "catalog:",
25
+ "typescript": "catalog:",
26
+ "sass": "^1.86.0",
27
+ "unocss": "^66.0.0",
28
+ "@unocss/preset-uno": "^66.0.0"
29
+ }
30
+ }
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ import DefaultLayout from '@/layouts/default-layout/index.vue';
3
+ </script>
4
+
5
+ <template>
6
+ <DefaultLayout>
7
+ <RouterView />
8
+ </DefaultLayout>
9
+ </template>
10
+
11
+ <style scoped lang="scss">
12
+ .app-root {
13
+ height: 100%;
14
+ }
15
+ </style>
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import { useRoute } from 'vue-router';
3
+
4
+ const route = useRoute();
5
+ </script>
6
+
7
+ <template>
8
+ <el-container class="default-layout h-screen">
9
+ <el-header class="bg-white shadow-sm flex items-center justify-between">
10
+ <span class="text-lg font-bold text-primary">Base 子应用</span>
11
+ <span class="text-sm text-gray-500">{{ route.path }}</span>
12
+ </el-header>
13
+ <el-main class="bg-gray-50">
14
+ <slot />
15
+ </el-main>
16
+ </el-container>
17
+ </template>
18
+
19
+ <style scoped lang="scss">
20
+ .text-primary {
21
+ color: var(--el-color-primary);
22
+ }
23
+ </style>
@@ -0,0 +1,31 @@
1
+ import { createApp } from 'vue';
2
+ import { createPinia } from 'pinia';
3
+ import ElementPlus from 'element-plus';
4
+ import 'element-plus/dist/index.css';
5
+ import 'virtual:uno.css';
6
+ import './styles/global.scss';
7
+
8
+ import App from './App.vue';
9
+ import router from './router';
10
+
11
+ let app: ReturnType<typeof createApp> | null = null;
12
+
13
+ function mount() {
14
+ app = createApp(App);
15
+ app.use(createPinia());
16
+ app.use(router);
17
+ app.use(ElementPlus);
18
+ app.mount('#app');
19
+ }
20
+
21
+ function unmount() {
22
+ app?.unmount();
23
+ app = null;
24
+ }
25
+
26
+ if (window.__POWERED_BY_WUJIE__) {
27
+ window.__WUJIE_MOUNT = mount;
28
+ window.__WUJIE_UNMOUNT = unmount;
29
+ } else {
30
+ mount();
31
+ }
@@ -0,0 +1,22 @@
1
+ import { createRouter, createWebHistory } from 'vue-router';
2
+
3
+ const routes = [
4
+ {
5
+ path: '/',
6
+ redirect: '/home',
7
+ },
8
+ {
9
+ path: '/home',
10
+ name: 'BaseHome',
11
+ component: () => import('@/views/home/index.vue'),
12
+ },
13
+ ];
14
+
15
+ const router = createRouter({
16
+ history: createWebHistory(
17
+ window.__POWERED_BY_WUJIE__ ? '/base' : import.meta.env.BASE_URL
18
+ ),
19
+ routes,
20
+ });
21
+
22
+ export default router;
@@ -0,0 +1,15 @@
1
+ import { defineStore } from 'pinia';
2
+ import { ref } from 'vue';
3
+
4
+ export const useBaseStore = defineStore('base', () => {
5
+ const count = ref(0);
6
+
7
+ function increment() {
8
+ count.value += 1;
9
+ }
10
+
11
+ return {
12
+ count,
13
+ increment,
14
+ };
15
+ });
@@ -0,0 +1,19 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ html,
8
+ body,
9
+ #app {
10
+ height: 100%;
11
+ font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB',
12
+ 'Microsoft YaHei', Arial, sans-serif;
13
+ -webkit-font-smoothing: antialiased;
14
+ -moz-osx-font-smoothing: grayscale;
15
+ }
16
+
17
+ .h-screen {
18
+ height: 100vh;
19
+ }
@@ -0,0 +1,4 @@
1
+ // 主题变量
2
+ $primary-color: var(--el-color-primary);
3
+ $text-color: var(--el-text-color-primary);
4
+ $border-color: var(--el-border-color);
@@ -0,0 +1,16 @@
1
+ declare global {
2
+ interface Window {
3
+ __POWERED_BY_WUJIE__?: boolean;
4
+ __WUJIE_MOUNT?: () => void;
5
+ __WUJIE_UNMOUNT?: () => void;
6
+ $wujie?: {
7
+ props?: Record<string, any>;
8
+ bus: {
9
+ $emit: (event: string, ...args: any[]) => void;
10
+ $on: (event: string, callback: (...args: any[]) => void) => void;
11
+ };
12
+ };
13
+ }
14
+ }
15
+
16
+ export {};
@@ -0,0 +1,21 @@
1
+ <script setup lang="ts">
2
+ import { computed } from 'vue';
3
+
4
+ const isWujie = computed(() => !!window.__POWERED_BY_WUJIE__);
5
+ </script>
6
+
7
+ <template>
8
+ <div class="base-home p-6">
9
+ <el-card shadow="never">
10
+ <template #header>
11
+ <div class="text-lg font-bold">Base 子应用</div>
12
+ </template>
13
+ <p class="text-gray-600 mb-4">
14
+ 这是一个独立的 Vue 3 + Vite 8 子应用,支持 wujie 微前端嵌入和独立运行两种模式。
15
+ </p>
16
+ <el-tag :type="isWujie ? 'success' : 'info'">
17
+ 当前运行模式:{{ isWujie ? 'wujie 微前端' : '独立运行' }}
18
+ </el-tag>
19
+ </el-card>
20
+ </div>
21
+ </template>
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "useDefineForClassFields": true,
5
+ "module": "ESNext",
6
+ "lib": ["ESNext", "DOM", "DOM.Iterable"],
7
+ "skipLibCheck": true,
8
+ "moduleResolution": "bundler",
9
+ "allowImportingTsExtensions": true,
10
+ "resolveJsonModule": true,
11
+ "isolatedModules": true,
12
+ "noEmit": true,
13
+ "jsx": "preserve",
14
+ "strict": true,
15
+ "noUnusedLocals": true,
16
+ "noUnusedParameters": true,
17
+ "noFallthroughCasesInSwitch": true,
18
+ "paths": {
19
+ "@/*": ["./src/*"]
20
+ },
21
+ "types": ["vite/client"]
22
+ },
23
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "env.d.ts"],
24
+ "references": [{ "path": "./tsconfig.node.json" }]
25
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "skipLibCheck": true,
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "allowSyntheticDefaultImports": true,
8
+ "strict": true
9
+ },
10
+ "include": ["vite.config.ts"]
11
+ }
@@ -0,0 +1,26 @@
1
+ import { defineConfig } from 'vite';
2
+ import vue from '@vitejs/plugin-vue';
3
+ import { resolve } from 'path';
4
+ import UnoCSS from 'unocss/vite';
5
+
6
+ export default defineConfig({
7
+ base: '/',
8
+ plugins: [vue(), UnoCSS()],
9
+ resolve: {
10
+ alias: {
11
+ '@': resolve(__dirname, 'src'),
12
+ },
13
+ },
14
+ css: {
15
+ preprocessorOptions: {
16
+ scss: {
17
+ additionalData: `@use "@/styles/variables.scss" as *;`,
18
+ },
19
+ },
20
+ },
21
+ server: {
22
+ port: 7101,
23
+ strictPort: true,
24
+ cors: true,
25
+ },
26
+ });
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Pandax Micro Frontend Main</title>
8
+ </head>
9
+ <body>
10
+ <div id="app"></div>
11
+ <script type="module" src="/src/main.ts"></script>
12
+ </body>
13
+ </html>
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "pandax-main",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "vite --port 7000",
7
+ "build": "vue-tsc --noEmit && vite build",
8
+ "preview": "vite preview",
9
+ "lint": "eslint .",
10
+ "lint:fix": "eslint . --fix",
11
+ "typecheck": "vue-tsc --noEmit"
12
+ },
13
+ "dependencies": {
14
+ "vue": "catalog:",
15
+ "vue-router": "catalog:",
16
+ "pinia": "catalog:",
17
+ "wujie": "^1.0.25",
18
+ "wujie-vue3": "^1.0.25",
19
+ "axios": "catalog:",
20
+ "element-plus": "catalog:",
21
+ "@element-plus/icons-vue": "catalog:"
22
+ },
23
+ "devDependencies": {
24
+ "@vitejs/plugin-vue": "^5.2.0",
25
+ "vite": "catalog:",
26
+ "vue-tsc": "catalog:",
27
+ "typescript": "catalog:",
28
+ "sass": "^1.86.0",
29
+ "unocss": "^66.0.0",
30
+ "@unocss/preset-uno": "^66.0.0"
31
+ }
32
+ }
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ import DefaultLayout from '@/layouts/default-layout/index.vue';
3
+ </script>
4
+
5
+ <template>
6
+ <DefaultLayout>
7
+ <RouterView />
8
+ </DefaultLayout>
9
+ </template>
10
+
11
+ <style scoped lang="scss">
12
+ .app-root {
13
+ height: 100%;
14
+ }
15
+ </style>
@@ -0,0 +1,29 @@
1
+ <script setup lang="ts">
2
+ import WujieVue from 'wujie-vue3';
3
+
4
+ interface Props {
5
+ name: string;
6
+ url: string;
7
+ }
8
+
9
+ const props = defineProps<Props>();
10
+ </script>
11
+
12
+ <template>
13
+ <div class="micro-app-container h-full w-full">
14
+ <WujieVue
15
+ :name="props.name"
16
+ :url="props.url"
17
+ :sync="true"
18
+ width="100%"
19
+ height="100%"
20
+ />
21
+ </div>
22
+ </template>
23
+
24
+ <style scoped lang="scss">
25
+ .micro-app-container {
26
+ position: relative;
27
+ overflow: hidden;
28
+ }
29
+ </style>
@@ -0,0 +1,48 @@
1
+ <script setup lang="ts">
2
+ import { useRouter, useRoute } from 'vue-router';
3
+
4
+ const router = useRouter();
5
+ const route = useRoute();
6
+
7
+ function navigateToBase() {
8
+ router.push('/base/home');
9
+ }
10
+ </script>
11
+
12
+ <template>
13
+ <el-container class="default-layout h-screen">
14
+ <el-aside width="220px" class="bg-gray-1">
15
+ <div class="logo h-16 flex items-center justify-center text-lg font-bold">
16
+ Pandax
17
+ </div>
18
+ <el-menu
19
+ :default-active="route.path"
20
+ router
21
+ class="border-r-0"
22
+ >
23
+ <el-menu-item index="/">
24
+ <el-icon><HomeFilled /></el-icon>
25
+ <span>首页</span>
26
+ </el-menu-item>
27
+ <el-menu-item index="/base/home" @click="navigateToBase">
28
+ <el-icon><Menu /></el-icon>
29
+ <span>Base 子应用</span>
30
+ </el-menu-item>
31
+ </el-menu>
32
+ </el-aside>
33
+ <el-container>
34
+ <el-header class="bg-white shadow-sm flex items-center">
35
+ <span class="text-sm text-gray-500">微前端基座应用</span>
36
+ </el-header>
37
+ <el-main class="bg-gray-50">
38
+ <slot />
39
+ </el-main>
40
+ </el-container>
41
+ </el-container>
42
+ </template>
43
+
44
+ <style scoped lang="scss">
45
+ .logo {
46
+ color: var(--el-color-primary);
47
+ }
48
+ </style>
@@ -0,0 +1,27 @@
1
+ import { createApp } from 'vue';
2
+ import { createPinia } from 'pinia';
3
+ import { setupApp } from 'wujie';
4
+ import ElementPlus from 'element-plus';
5
+ import 'element-plus/dist/index.css';
6
+ import 'virtual:uno.css';
7
+ import './styles/global.scss';
8
+
9
+ import App from './App.vue';
10
+ import router from './router';
11
+
12
+ setupApp({
13
+ name: 'base',
14
+ url: '//localhost:7101',
15
+ exec: true,
16
+ props: {
17
+ token: localStorage.getItem('token') || '',
18
+ },
19
+ });
20
+
21
+ const app = createApp(App);
22
+
23
+ app.use(createPinia());
24
+ app.use(router);
25
+ app.use(ElementPlus);
26
+
27
+ app.mount('#app');
@@ -0,0 +1,22 @@
1
+ import { createRouter, createWebHistory } from 'vue-router';
2
+
3
+ const routes = [
4
+ {
5
+ path: '/',
6
+ name: 'Home',
7
+ component: () => import('@/views/home/index.vue'),
8
+ },
9
+ {
10
+ path: '/base/:path(.*)',
11
+ name: 'BaseMicroApp',
12
+ component: () => import('@/layouts/MicroApp.vue'),
13
+ props: { name: 'base', url: '//localhost:7101' },
14
+ },
15
+ ];
16
+
17
+ const router = createRouter({
18
+ history: createWebHistory(),
19
+ routes,
20
+ });
21
+
22
+ export default router;
@@ -0,0 +1,23 @@
1
+ import { defineStore } from 'pinia';
2
+ import { ref } from 'vue';
3
+
4
+ export const useMainStore = defineStore('main', () => {
5
+ const collapsed = ref(false);
6
+ const token = ref(localStorage.getItem('token') || '');
7
+
8
+ function setCollapsed(value: boolean) {
9
+ collapsed.value = value;
10
+ }
11
+
12
+ function setToken(value: string) {
13
+ token.value = value;
14
+ localStorage.setItem('token', value);
15
+ }
16
+
17
+ return {
18
+ collapsed,
19
+ token,
20
+ setCollapsed,
21
+ setToken,
22
+ };
23
+ });
@@ -0,0 +1,23 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ html,
8
+ body,
9
+ #app {
10
+ height: 100%;
11
+ font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB',
12
+ 'Microsoft YaHei', Arial, sans-serif;
13
+ -webkit-font-smoothing: antialiased;
14
+ -moz-osx-font-smoothing: grayscale;
15
+ }
16
+
17
+ .h-screen {
18
+ height: 100vh;
19
+ }
20
+
21
+ .bg-gray-1 {
22
+ background-color: #f5f7fa;
23
+ }
@@ -0,0 +1,8 @@
1
+ // 主题变量
2
+ $primary-color: var(--el-color-primary);
3
+ $text-color: var(--el-text-color-primary);
4
+ $border-color: var(--el-border-color);
5
+
6
+ // 布局变量
7
+ $aside-width: 220px;
8
+ $header-height: 60px;
@@ -0,0 +1,25 @@
1
+ <script setup lang="ts">
2
+ import { useRouter } from 'vue-router';
3
+
4
+ const router = useRouter();
5
+
6
+ function goToBase() {
7
+ router.push('/base/home');
8
+ }
9
+ </script>
10
+
11
+ <template>
12
+ <div class="home-page p-6">
13
+ <el-card shadow="never">
14
+ <template #header>
15
+ <div class="text-lg font-bold">Pandax 微前端平台</div>
16
+ </template>
17
+ <p class="text-gray-600 mb-4">
18
+ 这是基于 Vue 3 + Vite 8 + wujie 的微前端基座应用。
19
+ </p>
20
+ <el-button type="primary" @click="goToBase">
21
+ 进入 Base 子应用
22
+ </el-button>
23
+ </el-card>
24
+ </div>
25
+ </template>
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "useDefineForClassFields": true,
5
+ "module": "ESNext",
6
+ "lib": ["ESNext", "DOM", "DOM.Iterable"],
7
+ "skipLibCheck": true,
8
+ "moduleResolution": "bundler",
9
+ "allowImportingTsExtensions": true,
10
+ "resolveJsonModule": true,
11
+ "isolatedModules": true,
12
+ "noEmit": true,
13
+ "jsx": "preserve",
14
+ "strict": true,
15
+ "noUnusedLocals": true,
16
+ "noUnusedParameters": true,
17
+ "noFallthroughCasesInSwitch": true,
18
+ "paths": {
19
+ "@/*": ["./src/*"]
20
+ },
21
+ "types": ["vite/client"]
22
+ },
23
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "env.d.ts"],
24
+ "references": [{ "path": "./tsconfig.node.json" }]
25
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "skipLibCheck": true,
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "allowSyntheticDefaultImports": true,
8
+ "strict": true
9
+ },
10
+ "include": ["vite.config.ts"]
11
+ }
@@ -0,0 +1,24 @@
1
+ import { defineConfig } from 'vite';
2
+ import vue from '@vitejs/plugin-vue';
3
+ import { resolve } from 'path';
4
+ import UnoCSS from 'unocss/vite';
5
+
6
+ export default defineConfig({
7
+ plugins: [vue(), UnoCSS()],
8
+ resolve: {
9
+ alias: {
10
+ '@': resolve(__dirname, 'src'),
11
+ },
12
+ },
13
+ css: {
14
+ preprocessorOptions: {
15
+ scss: {
16
+ additionalData: `@use "@/styles/variables.scss" as *;`,
17
+ },
18
+ },
19
+ },
20
+ server: {
21
+ port: 7000,
22
+ strictPort: true,
23
+ },
24
+ });
@@ -0,0 +1,38 @@
1
+ // Conventional Commits 配置:https://commitlint.js.org/
2
+ // 中文 commit 参考:https://www.conventionalcommits.org/zh-hans/v1.0.0/
3
+ export default {
4
+ extends: ['@commitlint/config-conventional'],
5
+ rules: {
6
+ // header(提交信息首行)最大长度 100,超过警告
7
+ 'header-max-length': [2, 'always', 100],
8
+ // body 单行最大长度 120,超过警告
9
+ 'body-max-line-length': [1, 'always', 120],
10
+ // type 必须是以下之一(小写)
11
+ 'type-enum': [
12
+ 2,
13
+ 'always',
14
+ [
15
+ 'feat', // 新功能
16
+ 'fix', // 修复 bug
17
+ 'docs', // 文档变更
18
+ 'style', // 代码格式调整(不影响功能)
19
+ 'refactor', // 重构
20
+ 'perf', // 性能优化
21
+ 'test', // 测试
22
+ 'build', // 构建系统或外部依赖变更
23
+ 'ci', // CI 配置
24
+ 'chore', // 杂项(不修改 src 或 test)
25
+ 'revert', // 回滚
26
+ 'wip', // 开发中
27
+ ],
28
+ ],
29
+ // type 不能为空
30
+ 'type-empty': [2, 'never'],
31
+ // subject 不能为空
32
+ 'subject-empty': [2, 'never'],
33
+ // subject 不能以句号结尾
34
+ 'subject-full-stop': [2, 'never', '.'],
35
+ // subject 大小写:不强制(中文 subject 不适用)
36
+ 'subject-case': [0],
37
+ },
38
+ };