generator-mico-cli 0.1.18
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.
- package/README.md +84 -0
- package/bin/mico.js +316 -0
- package/generators/micro-react/ignore-list.json +8 -0
- package/generators/micro-react/index.js +158 -0
- package/generators/micro-react/templates/.commitlintrc.js +6 -0
- package/generators/micro-react/templates/.cursor/rules/always-read-docs.mdc +129 -0
- package/generators/micro-react/templates/.cursor/rules/cicd-deploy.mdc +143 -0
- package/generators/micro-react/templates/.cursor/rules/coding-conventions.mdc +206 -0
- package/generators/micro-react/templates/.cursor/rules/commit-conventions.mdc +111 -0
- package/generators/micro-react/templates/.cursor/rules/development-guide.mdc +295 -0
- package/generators/micro-react/templates/.cursor/rules/layout-app.mdc +275 -0
- package/generators/micro-react/templates/.cursor/rules/micro-frontend.mdc +196 -0
- package/generators/micro-react/templates/.cursor/rules/project-overview.mdc +128 -0
- package/generators/micro-react/templates/.cursor/rules/request-auth.mdc +220 -0
- package/generators/micro-react/templates/.cursor/rules/theme-system.mdc +206 -0
- package/generators/micro-react/templates/.editorconfig +16 -0
- package/generators/micro-react/templates/.env +3 -0
- package/generators/micro-react/templates/.eslintrc.js +30 -0
- package/generators/micro-react/templates/.husky/commit-msg +2 -0
- package/generators/micro-react/templates/.husky/pre-commit +2 -0
- package/generators/micro-react/templates/.lintstagedrc +5 -0
- package/generators/micro-react/templates/.stylelintrc.js +25 -0
- package/generators/micro-react/templates/AGENTS.md +39 -0
- package/generators/micro-react/templates/CICD/start_dev.sh +30 -0
- package/generators/micro-react/templates/CICD/start_local.sh +30 -0
- package/generators/micro-react/templates/CICD/start_prod.sh +30 -0
- package/generators/micro-react/templates/CICD/start_test.sh +30 -0
- package/generators/micro-react/templates/CICD/wangsu_fresh_dev.sh +19 -0
- package/generators/micro-react/templates/CICD/wangsu_fresh_prod.sh +19 -0
- package/generators/micro-react/templates/CICD/wangsu_fresh_test.sh +19 -0
- package/generators/micro-react/templates/CLAUDE.md +106 -0
- package/generators/micro-react/templates/README.md +84 -0
- package/generators/micro-react/templates/_gitignore +57 -0
- package/generators/micro-react/templates/_npmrc +2 -0
- package/generators/micro-react/templates/apps/layout/.env +4 -0
- package/generators/micro-react/templates/apps/layout/.eslintrc.js +10 -0
- package/generators/micro-react/templates/apps/layout/.lintstagedrc +17 -0
- package/generators/micro-react/templates/apps/layout/.prettierignore +3 -0
- package/generators/micro-react/templates/apps/layout/.prettierrc +8 -0
- package/generators/micro-react/templates/apps/layout/.stylelintrc.js +20 -0
- package/generators/micro-react/templates/apps/layout/README.md +37 -0
- package/generators/micro-react/templates/apps/layout/config/config.dev.ts +54 -0
- package/generators/micro-react/templates/apps/layout/config/config.prod.ts +37 -0
- package/generators/micro-react/templates/apps/layout/config/config.testing.ts +27 -0
- package/generators/micro-react/templates/apps/layout/config/config.ts +132 -0
- package/generators/micro-react/templates/apps/layout/config/routes.ts +13 -0
- package/generators/micro-react/templates/apps/layout/mock/api.mock.ts +78 -0
- package/generators/micro-react/templates/apps/layout/mock/menus.json +100 -0
- package/generators/micro-react/templates/apps/layout/mock/menus.ts +11 -0
- package/generators/micro-react/templates/apps/layout/mock/user.mock.ts +20 -0
- package/generators/micro-react/templates/apps/layout/package.json +45 -0
- package/generators/micro-react/templates/apps/layout/public/font/ar-SA.js +54 -0
- package/generators/micro-react/templates/apps/layout/public/font/default.js +54 -0
- package/generators/micro-react/templates/apps/layout/src/app.tsx +123 -0
- package/generators/micro-react/templates/apps/layout/src/assets/.gitkeep +0 -0
- package/generators/micro-react/templates/apps/layout/src/common/auth/cs-auth-manager.ts +220 -0
- package/generators/micro-react/templates/apps/layout/src/common/auth/index.ts +41 -0
- package/generators/micro-react/templates/apps/layout/src/common/auth/tool.ts +3 -0
- package/generators/micro-react/templates/apps/layout/src/common/auth/type.ts +6 -0
- package/generators/micro-react/templates/apps/layout/src/common/constants.ts +38 -0
- package/generators/micro-react/templates/apps/layout/src/common/env.ts +73 -0
- package/generators/micro-react/templates/apps/layout/src/common/helpers.ts +69 -0
- package/generators/micro-react/templates/apps/layout/src/common/locale.ts +123 -0
- package/generators/micro-react/templates/apps/layout/src/common/logger.ts +45 -0
- package/generators/micro-react/templates/apps/layout/src/common/menu/index.ts +2 -0
- package/generators/micro-react/templates/apps/layout/src/common/menu/parser.ts +143 -0
- package/generators/micro-react/templates/apps/layout/src/common/menu/types.ts +92 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/config.ts +73 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/index.ts +188 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/interceptors.ts +186 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/sso.ts +132 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/token-refresh.ts +136 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/types.ts +44 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/url-resolver.ts +75 -0
- package/generators/micro-react/templates/apps/layout/src/common/theme.ts +107 -0
- package/generators/micro-react/templates/apps/layout/src/common/types.ts +7 -0
- package/generators/micro-react/templates/apps/layout/src/common/upload/index.ts +2 -0
- package/generators/micro-react/templates/apps/layout/src/common/upload/oss.ts +401 -0
- package/generators/micro-react/templates/apps/layout/src/common/upload/types.ts +47 -0
- package/generators/micro-react/templates/apps/layout/src/common/uploadFiles.ts +35 -0
- package/generators/micro-react/templates/apps/layout/src/components/IconFont/index.tsx +25 -0
- package/generators/micro-react/templates/apps/layout/src/components/MicroAppLoader/index.less +44 -0
- package/generators/micro-react/templates/apps/layout/src/components/MicroAppLoader/index.tsx +121 -0
- package/generators/micro-react/templates/apps/layout/src/constants/index.ts +15 -0
- package/generators/micro-react/templates/apps/layout/src/global.less +13 -0
- package/generators/micro-react/templates/apps/layout/src/hooks/index.ts +3 -0
- package/generators/micro-react/templates/apps/layout/src/hooks/useAuth.ts +75 -0
- package/generators/micro-react/templates/apps/layout/src/hooks/useMenu.ts +35 -0
- package/generators/micro-react/templates/apps/layout/src/hooks/useMenuState.ts +112 -0
- package/generators/micro-react/templates/apps/layout/src/hooks/useTheme.ts +124 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/components/header/index.less +109 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/components/header/index.tsx +97 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/components/menu/index.less +164 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/components/menu/index.tsx +165 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/index.less +71 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/index.tsx +91 -0
- package/generators/micro-react/templates/apps/layout/src/locales/en-US.ts +20 -0
- package/generators/micro-react/templates/apps/layout/src/locales/zh-CN.ts +19 -0
- package/generators/micro-react/templates/apps/layout/src/models/global.ts +13 -0
- package/generators/micro-react/templates/apps/layout/src/pages/Home/index.less +3 -0
- package/generators/micro-react/templates/apps/layout/src/pages/Home/index.tsx +7 -0
- package/generators/micro-react/templates/apps/layout/src/requestErrorConfig.ts +171 -0
- package/generators/micro-react/templates/apps/layout/src/services/auth.ts +37 -0
- package/generators/micro-react/templates/apps/layout/src/services/oss.ts +40 -0
- package/generators/micro-react/templates/apps/layout/src/styles/arco-override.less +78 -0
- package/generators/micro-react/templates/apps/layout/src/styles/themes/dark/custom-var.less +244 -0
- package/generators/micro-react/templates/apps/layout/src/styles/themes/normal/custom-var.less +195 -0
- package/generators/micro-react/templates/apps/layout/src/styles/variables.less +5 -0
- package/generators/micro-react/templates/apps/layout/src/utils/format.ts +4 -0
- package/generators/micro-react/templates/apps/layout/tailwind.config.js +7 -0
- package/generators/micro-react/templates/apps/layout/tailwind.css +3 -0
- package/generators/micro-react/templates/apps/layout/tsconfig.json +3 -0
- package/generators/micro-react/templates/apps/layout/typings.d.ts +1 -0
- package/generators/micro-react/templates/deployDesc.md +60 -0
- package/generators/micro-react/templates/docs/commit-message.md +98 -0
- package/generators/micro-react/templates/package.json +35 -0
- package/generators/micro-react/templates/packages/shared-styles/README.md +125 -0
- package/generators/micro-react/templates/packages/shared-styles/arco-override.less +78 -0
- package/generators/micro-react/templates/packages/shared-styles/index.less +14 -0
- package/generators/micro-react/templates/packages/shared-styles/package.json +27 -0
- package/generators/micro-react/templates/packages/shared-styles/theme-inject.less +10 -0
- package/generators/micro-react/templates/packages/shared-styles/themes/dark/custom-var.less +246 -0
- package/generators/micro-react/templates/packages/shared-styles/themes/normal/custom-var.less +195 -0
- package/generators/micro-react/templates/packages/shared-styles/variables-only.less +301 -0
- package/generators/micro-react/templates/packages/shared-styles/variables.less +363 -0
- package/generators/micro-react/templates/pnpm-workspace.yaml +9 -0
- package/generators/micro-react/templates/scripts/collect-dist.js +68 -0
- package/generators/micro-react/templates/scripts/create-umi-app.sh +61 -0
- package/generators/micro-react/templates/scripts/dev.js +133 -0
- package/generators/micro-react/templates/turbo.json +68 -0
- package/generators/subapp-react/ignore-list.json +7 -0
- package/generators/subapp-react/index.js +189 -0
- package/generators/subapp-react/templates/homepage/.env +4 -0
- package/generators/subapp-react/templates/homepage/README.md +116 -0
- package/generators/subapp-react/templates/homepage/_gitignore +9 -0
- package/generators/subapp-react/templates/homepage/config/config.dev.ts +59 -0
- package/generators/subapp-react/templates/homepage/config/config.prod.ts +41 -0
- package/generators/subapp-react/templates/homepage/config/config.testing.ts +40 -0
- package/generators/subapp-react/templates/homepage/config/config.ts +102 -0
- package/generators/subapp-react/templates/homepage/config/routes.ts +7 -0
- package/generators/subapp-react/templates/homepage/mock/api.mock.ts +59 -0
- package/generators/subapp-react/templates/homepage/package.json +30 -0
- package/generators/subapp-react/templates/homepage/src/app.tsx +80 -0
- package/generators/subapp-react/templates/homepage/src/assets/yay.jpg +0 -0
- package/generators/subapp-react/templates/homepage/src/common/logger.ts +42 -0
- package/generators/subapp-react/templates/homepage/src/common/mainApp.ts +53 -0
- package/generators/subapp-react/templates/homepage/src/common/request.ts +49 -0
- package/generators/subapp-react/templates/homepage/src/global.less +26 -0
- package/generators/subapp-react/templates/homepage/src/pages/index.less +139 -0
- package/generators/subapp-react/templates/homepage/src/pages/index.tsx +342 -0
- package/generators/subapp-react/templates/homepage/src/styles/theme.less +6 -0
- package/generators/subapp-react/templates/homepage/tsconfig.json +3 -0
- package/generators/subapp-react/templates/homepage/typings.d.ts +17 -0
- package/lib/utils.js +165 -0
- package/package.json +31 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name Mock API
|
|
3
|
+
* @description homepage 子应用的 Mock 数据
|
|
4
|
+
* @doc https://umijs.org/docs/guides/mock
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export default {
|
|
8
|
+
// 获取用户信息
|
|
9
|
+
'GET /api/user/info': {
|
|
10
|
+
success: true,
|
|
11
|
+
data: {
|
|
12
|
+
id: 1001,
|
|
13
|
+
name: '张三',
|
|
14
|
+
email: 'zhangsan@example.com',
|
|
15
|
+
avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=homepage',
|
|
16
|
+
role: 'admin',
|
|
17
|
+
department: '技术部',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
// 获取统计数据
|
|
22
|
+
'GET /api/dashboard/stats': {
|
|
23
|
+
success: true,
|
|
24
|
+
data: {
|
|
25
|
+
totalUsers: 12580,
|
|
26
|
+
activeUsers: 3420,
|
|
27
|
+
pendingTasks: 156,
|
|
28
|
+
completedTasks: 8934,
|
|
29
|
+
lastUpdated: new Date().toISOString(),
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
// 获取列表数据
|
|
34
|
+
'GET /api/items': {
|
|
35
|
+
success: true,
|
|
36
|
+
data: {
|
|
37
|
+
list: [
|
|
38
|
+
{ id: 1, title: '待审核内容 A', status: 'pending', createdAt: '2025-12-27 10:00:00' },
|
|
39
|
+
{ id: 2, title: '待审核内容 B', status: 'pending', createdAt: '2025-12-27 09:30:00' },
|
|
40
|
+
{ id: 3, title: '已通过内容 C', status: 'approved', createdAt: '2025-12-26 15:00:00' },
|
|
41
|
+
{ id: 4, title: '已拒绝内容 D', status: 'rejected', createdAt: '2025-12-26 14:00:00' },
|
|
42
|
+
],
|
|
43
|
+
total: 4,
|
|
44
|
+
page: 1,
|
|
45
|
+
pageSize: 10,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
// POST 请求示例
|
|
50
|
+
'POST /api/items/approve': (req: any, res: any) => {
|
|
51
|
+
const { id } = req.body || {};
|
|
52
|
+
res.json({
|
|
53
|
+
success: true,
|
|
54
|
+
message: `Item ${id} approved successfully`,
|
|
55
|
+
data: { id, status: 'approved' },
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "<%= appName %>",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"private": true,
|
|
5
|
+
"author": "Easton <easton@micous.com>",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "max dev",
|
|
8
|
+
"build": "npm run build:production",
|
|
9
|
+
"build:development": "cross-env UMI_ENV=dev max build",
|
|
10
|
+
"build:production": "cross-env UMI_ENV=prod max build",
|
|
11
|
+
"build:testing": "cross-env UMI_ENV=testing max build",
|
|
12
|
+
"postinstall": "max setup",
|
|
13
|
+
"setup": "max setup",
|
|
14
|
+
"start": "npm run dev"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"<%= packageScope %>/shared-styles": "workspace:*",
|
|
18
|
+
"@umijs/max": "^4.4.8",
|
|
19
|
+
"babel-plugin-dynamic-import-node": "^2.3.3",
|
|
20
|
+
"cross-env": "^10.1.0",
|
|
21
|
+
"react": "^18.2.0",
|
|
22
|
+
"react-dom": "^18.2.0"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@arco-design/web-react": "^2.66.6",
|
|
26
|
+
"@types/react": "^18.0.33",
|
|
27
|
+
"@types/react-dom": "^18.0.11",
|
|
28
|
+
"typescript": "^5.0.3"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name 应用入口配置
|
|
3
|
+
* @description homepage 子应用的运行时配置
|
|
4
|
+
* @doc https://umijs.org/docs/max/micro-frontend#子应用配置
|
|
5
|
+
*
|
|
6
|
+
* 注意:app.tsx 只能导出 Umi 规定的 API(qiankun、getInitialState 等)
|
|
7
|
+
* 自定义函数请放在 @/common/mainApp.ts 中
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { appLogger } from './common/logger';
|
|
11
|
+
import { type IMicroAppProps, setMainAppProps } from './common/mainApp';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @name 独立运行时加载主题
|
|
15
|
+
* @description 仅在开发环境且非 qiankun 环境中加载主题样式
|
|
16
|
+
*
|
|
17
|
+
* 实现原理:
|
|
18
|
+
* - 生产构建时 process.env.NODE_ENV !== 'development',整个 if 块被 tree-shake
|
|
19
|
+
* - 开发环境独立运行时加载主题,支持本地预览
|
|
20
|
+
* - 作为微应用运行时(无论开发还是生产),使用主应用的主题
|
|
21
|
+
*/
|
|
22
|
+
if (process.env.NODE_ENV === 'development') {
|
|
23
|
+
// 开发环境:运行时检测是否独立运行
|
|
24
|
+
if (typeof window !== 'undefined' && !window.__POWERED_BY_QIANKUN__) {
|
|
25
|
+
// 直接导入主题样式(开发环境下会被打包)
|
|
26
|
+
import('./styles/theme.less');
|
|
27
|
+
appLogger.log('Running standalone in dev mode, theme loaded');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// 生产环境:作为微应用时,主题由主应用注入,无需加载
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @name qiankun 生命周期钩子
|
|
34
|
+
* @description 子应用生命周期配置,用于与主应用通信
|
|
35
|
+
*/
|
|
36
|
+
export const qiankun = {
|
|
37
|
+
/**
|
|
38
|
+
* 在应用 bootstrap 时调用
|
|
39
|
+
*/
|
|
40
|
+
async bootstrap(props: IMicroAppProps) {
|
|
41
|
+
appLogger.log('bootstrap', props);
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法
|
|
46
|
+
*/
|
|
47
|
+
async mount(props: IMicroAppProps) {
|
|
48
|
+
appLogger.log('mount', props);
|
|
49
|
+
// 保存主应用传递的 props,包括 request 实例
|
|
50
|
+
setMainAppProps(props);
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* 应用每次切出/卸载会调用的方法,通常在这里我们会卸载微应用的应用实例
|
|
55
|
+
*/
|
|
56
|
+
async unmount(props: IMicroAppProps) {
|
|
57
|
+
appLogger.log('unmount', props);
|
|
58
|
+
// 清理引用
|
|
59
|
+
setMainAppProps(null);
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* 可选生命周期钩子,仅使用 loadMicroApp 方式加载微应用时生效
|
|
64
|
+
*/
|
|
65
|
+
async update(props: IMicroAppProps) {
|
|
66
|
+
appLogger.log('update', props);
|
|
67
|
+
// 更新 props
|
|
68
|
+
setMainAppProps(props);
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @name 全局初始状态
|
|
74
|
+
* @description 可以从主应用获取共享的状态
|
|
75
|
+
*/
|
|
76
|
+
export async function getInitialState() {
|
|
77
|
+
return {
|
|
78
|
+
name: '<%= appName %>',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 日志工具
|
|
3
|
+
* 仅在开发环境下输出日志,生产环境自动静默
|
|
4
|
+
*
|
|
5
|
+
* 使用 bind 保持原始调用位置,避免错误栈指向 logger 内部
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const isDev = process.env.NODE_ENV === 'development';
|
|
9
|
+
|
|
10
|
+
// 空操作函数(生产环境使用)
|
|
11
|
+
const noop = (): void => {};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 创建带前缀的日志函数
|
|
15
|
+
* 使用 bind 绑定前缀,保持控制台显示正确的调用位置
|
|
16
|
+
*/
|
|
17
|
+
const createLogger = (prefix: string) => {
|
|
18
|
+
if (!isDev) {
|
|
19
|
+
// 生产环境返回空操作
|
|
20
|
+
return {
|
|
21
|
+
log: noop,
|
|
22
|
+
info: noop,
|
|
23
|
+
warn: noop,
|
|
24
|
+
error: noop,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const formattedPrefix = `[${prefix}]`;
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
log: console.log.bind(console, formattedPrefix),
|
|
32
|
+
info: console.info.bind(console, formattedPrefix),
|
|
33
|
+
warn: console.warn.bind(console, formattedPrefix),
|
|
34
|
+
error: console.error.bind(console, formattedPrefix),
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// 预定义的日志实例
|
|
39
|
+
export const appLogger = createLogger('<%= appName %>');
|
|
40
|
+
|
|
41
|
+
// 导出创建器供自定义使用
|
|
42
|
+
export { createLogger };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name 主应用共享依赖管理
|
|
3
|
+
* @description 存储和获取主应用传递的 props
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 主应用传递的 props 类型定义
|
|
8
|
+
*/
|
|
9
|
+
export interface IMicroAppProps {
|
|
10
|
+
/** 主应用标识 */
|
|
11
|
+
mainApp: string;
|
|
12
|
+
/** 主应用共享的 request 实例 */
|
|
13
|
+
request: <T = any>(url: string, options?: any) => Promise<T>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** 存储主应用传递的 props */
|
|
17
|
+
let mainAppProps: IMicroAppProps | null = null;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* 设置主应用 props(由 qiankun 生命周期调用)
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export const setMainAppProps = (props: IMicroAppProps | null) => {
|
|
24
|
+
mainAppProps = props;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* 获取主应用共享的 request 实例
|
|
29
|
+
* 子应用内部使用此方法获取 request,确保复用主应用的认证和拦截器
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```tsx
|
|
33
|
+
* import { getMainAppRequest } from '@/common/mainApp';
|
|
34
|
+
*
|
|
35
|
+
* const request = getMainAppRequest();
|
|
36
|
+
* if (request) {
|
|
37
|
+
* const data = await request('/api/xxx');
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export const getMainAppRequest = () => mainAppProps?.request;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* 判断是否作为微前端子应用运行
|
|
45
|
+
*/
|
|
46
|
+
export const isRunningInQiankun = () => !!mainAppProps;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 获取主应用标识
|
|
50
|
+
*/
|
|
51
|
+
export const getMainAppName = () => mainAppProps?.mainApp;
|
|
52
|
+
|
|
53
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name 统一请求封装
|
|
3
|
+
* @description 优先使用主应用的 request,独立运行时使用 umi request
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { getMainAppRequest } from '@/common/mainApp';
|
|
7
|
+
import { request as umiRequest } from '@umijs/max';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 统一请求方法
|
|
11
|
+
* - 作为微前端子应用时:使用主应用传递的 request(共享认证和拦截器)
|
|
12
|
+
* - 独立运行时:使用 umi 内置的 request
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* import { request } from '@/common/request';
|
|
17
|
+
*
|
|
18
|
+
* const data = await request('/api/user/info');
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export async function request<T = any>(
|
|
22
|
+
url: string,
|
|
23
|
+
options?: any,
|
|
24
|
+
): Promise<T> {
|
|
25
|
+
const mainAppRequest = getMainAppRequest();
|
|
26
|
+
|
|
27
|
+
if (mainAppRequest) {
|
|
28
|
+
// 微前端模式:使用主应用的 request
|
|
29
|
+
console.log('[homepage] Using main app request:', url);
|
|
30
|
+
return mainAppRequest<T>(url, options);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// 独立运行模式:使用 umi request
|
|
34
|
+
console.log('[homepage] Using umi request:', url);
|
|
35
|
+
// umi request 默认返回 data,skipErrorHandler 可选
|
|
36
|
+
return umiRequest<T>(url, {
|
|
37
|
+
skipErrorHandler: true,
|
|
38
|
+
...options,
|
|
39
|
+
}) as Promise<T>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 判断当前使用的是哪个 request
|
|
44
|
+
*/
|
|
45
|
+
export function getRequestSource(): 'main-app' | 'umi' {
|
|
46
|
+
return getMainAppRequest() ? 'main-app' : 'umi';
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name 全局样式
|
|
3
|
+
* @description homepage 子应用的全局样式
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// 仅导入 Less 变量(不包含 CSS 变量定义,避免重复打包)
|
|
7
|
+
// CSS 变量由主应用(layout)注入到 body 上
|
|
8
|
+
// Less 变量通过 var(--xxx) 引用 CSS 变量,自动适配主题
|
|
9
|
+
@import '<%= packageScope %>/shared-styles/variables-only';
|
|
10
|
+
|
|
11
|
+
* {
|
|
12
|
+
box-sizing: border-box;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
html,
|
|
16
|
+
body {
|
|
17
|
+
margin: 0;
|
|
18
|
+
padding: 0;
|
|
19
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
|
|
20
|
+
'Noto Sans', sans-serif;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
#homepage-root {
|
|
24
|
+
width: 100%;
|
|
25
|
+
height: 100%;
|
|
26
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name 首页样式
|
|
3
|
+
* @description 使用主题色变量的示例
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// 导入共享样式变量
|
|
7
|
+
@import '<%= packageScope %>/shared-styles/variables-only';
|
|
8
|
+
|
|
9
|
+
.homepage {
|
|
10
|
+
padding: @spacing-lg;
|
|
11
|
+
min-height: 100vh;
|
|
12
|
+
// 使用主题色变量 - 背景色会随主题切换自动变化
|
|
13
|
+
background-color: @color-fill-1;
|
|
14
|
+
transition: background-color 0.3s ease;
|
|
15
|
+
|
|
16
|
+
&-title {
|
|
17
|
+
font-size: @font-size-xxl;
|
|
18
|
+
font-weight: @font-weight-bold;
|
|
19
|
+
// 主要文字色 - 亮色模式为深色,暗色模式为浅色
|
|
20
|
+
color: @color-text-1;
|
|
21
|
+
margin-bottom: @spacing-md;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&-subtitle {
|
|
25
|
+
font-size: @font-size-md;
|
|
26
|
+
// 次要文字色
|
|
27
|
+
color: @color-text-2;
|
|
28
|
+
margin-bottom: @spacing-lg;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&-card {
|
|
32
|
+
padding: @card-padding;
|
|
33
|
+
// 卡片背景色 - 使用 color-text-5(亮色模式为白色)
|
|
34
|
+
background-color: @color-text-5;
|
|
35
|
+
border-radius: @border-radius-card;
|
|
36
|
+
// 边框色
|
|
37
|
+
border: 1px solid @color-border-2;
|
|
38
|
+
box-shadow: @shadow-card;
|
|
39
|
+
margin-bottom: @spacing-md;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&-colors {
|
|
43
|
+
display: flex;
|
|
44
|
+
flex-wrap: wrap;
|
|
45
|
+
gap: @spacing-md;
|
|
46
|
+
margin-top: @spacing-lg;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
&-color-item {
|
|
50
|
+
display: flex;
|
|
51
|
+
flex-direction: column;
|
|
52
|
+
align-items: center;
|
|
53
|
+
gap: @spacing-xs;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
&-color-box {
|
|
57
|
+
width: 60px;
|
|
58
|
+
height: 60px;
|
|
59
|
+
border-radius: @border-radius-md;
|
|
60
|
+
border: 1px solid @color-border-2;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
&-color-label {
|
|
64
|
+
font-size: @font-size-sm;
|
|
65
|
+
color: @color-text-3;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// 品牌色示例
|
|
69
|
+
.brand-1 { background-color: @Brand1-6; }
|
|
70
|
+
.brand-2 { background-color: @Brand2-6; }
|
|
71
|
+
|
|
72
|
+
// 功能色示例
|
|
73
|
+
.success { background-color: @Success-6; }
|
|
74
|
+
.warning { background-color: @Warning-6; }
|
|
75
|
+
.danger { background-color: @Danger-6; }
|
|
76
|
+
|
|
77
|
+
// 中性色示例
|
|
78
|
+
.fill-1 { background-color: @color-fill-1; }
|
|
79
|
+
.fill-2 { background-color: @color-fill-2; }
|
|
80
|
+
.fill-3 { background-color: @color-fill-3; }
|
|
81
|
+
|
|
82
|
+
// 按钮示例
|
|
83
|
+
&-button {
|
|
84
|
+
display: inline-flex;
|
|
85
|
+
align-items: center;
|
|
86
|
+
justify-content: center;
|
|
87
|
+
padding: @spacing-sm @spacing-md;
|
|
88
|
+
font-size: @font-size-base;
|
|
89
|
+
border-radius: @border-radius-button;
|
|
90
|
+
cursor: pointer;
|
|
91
|
+
transition: all 0.2s ease;
|
|
92
|
+
|
|
93
|
+
&--primary {
|
|
94
|
+
background-color: @Brand1-6;
|
|
95
|
+
color: @color-text-5;
|
|
96
|
+
border: none;
|
|
97
|
+
|
|
98
|
+
&:hover {
|
|
99
|
+
background-color: @Brand1-5;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
&--secondary {
|
|
104
|
+
background-color: transparent;
|
|
105
|
+
color: @Brand1-6;
|
|
106
|
+
border: 1px solid @Brand1-6;
|
|
107
|
+
|
|
108
|
+
&:hover {
|
|
109
|
+
background-color: @Brand1-1;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// 提示信息示例
|
|
115
|
+
&-tip {
|
|
116
|
+
padding: @spacing-md;
|
|
117
|
+
border-radius: @border-radius-md;
|
|
118
|
+
margin-top: @spacing-lg;
|
|
119
|
+
|
|
120
|
+
&--info {
|
|
121
|
+
background-color: @Brand2-1;
|
|
122
|
+
border: 1px solid @Brand2-3;
|
|
123
|
+
color: @Brand2-7;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
&--success {
|
|
127
|
+
background-color: @Success-1;
|
|
128
|
+
border: 1px solid @Success-3;
|
|
129
|
+
color: @Success-7;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
&--warning {
|
|
133
|
+
background-color: @Warning-1;
|
|
134
|
+
border: 1px solid @Warning-3;
|
|
135
|
+
color: @Warning-7;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|