@qlover/create-app 0.4.1 → 0.4.3

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 (53) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/configs/_common/.gitignore.template +49 -23
  3. package/dist/index.js +1 -1
  4. package/package.json +1 -1
  5. package/templates/react-app/{.env → .env.template} +2 -3
  6. package/templates/react-app/README.md +89 -8
  7. package/templates/react-app/config/app.router.json +13 -13
  8. package/templates/react-app/config/common.ts +8 -0
  9. package/templates/react-app/config/feapi.mock.json +8 -0
  10. package/templates/react-app/config/i18n.ts +3 -1
  11. package/templates/react-app/config/{Identifier.Error.ts → identifier/Error.ts} +7 -0
  12. package/templates/react-app/config/{Identifier.I18n.ts → identifier/I18n.ts} +321 -3
  13. package/templates/react-app/index.html +1 -1
  14. package/templates/react-app/package.json +3 -1
  15. package/templates/react-app/public/locales/en/common.json +55 -8
  16. package/templates/react-app/public/locales/zh/common.json +55 -8
  17. package/templates/react-app/public/router-root/logo.svg +1 -0
  18. package/templates/react-app/src/App.tsx +6 -3
  19. package/templates/react-app/src/base/cases/AppConfig.ts +1 -1
  20. package/templates/react-app/src/base/cases/PublicAssetsPath.ts +17 -0
  21. package/templates/react-app/src/base/port/LoginInterface.ts +8 -0
  22. package/templates/react-app/src/base/port/StoreInterface.ts +58 -0
  23. package/templates/react-app/src/base/services/I18nService.ts +15 -9
  24. package/templates/react-app/src/{uikit/controllers/RouterController.ts → base/services/RouteService.ts} +12 -12
  25. package/templates/react-app/src/{uikit/controllers/UserController.ts → base/services/UserService.ts} +29 -13
  26. package/templates/react-app/src/core/bootstrap.ts +1 -1
  27. package/templates/react-app/src/core/registers/RegisterCommon.ts +11 -1
  28. package/templates/react-app/src/core/registers/RegisterControllers.ts +3 -12
  29. package/templates/react-app/src/pages/auth/Layout.tsx +14 -6
  30. package/templates/react-app/src/pages/auth/Login.tsx +50 -29
  31. package/templates/react-app/src/pages/auth/Register.tsx +238 -1
  32. package/templates/react-app/src/pages/base/About.tsx +1 -1
  33. package/templates/react-app/src/pages/base/ErrorIdentifier.tsx +2 -2
  34. package/templates/react-app/src/pages/base/Executor.tsx +4 -4
  35. package/templates/react-app/src/pages/base/Home.tsx +1 -1
  36. package/templates/react-app/src/pages/base/JSONStorage.tsx +3 -3
  37. package/templates/react-app/src/pages/base/Request.tsx +4 -4
  38. package/templates/react-app/src/pages/base/components/BaseHeader.tsx +8 -2
  39. package/templates/react-app/src/styles/css/page.css +3 -3
  40. package/templates/react-app/src/styles/css/themes/_default.css +3 -3
  41. package/templates/react-app/src/styles/css/themes/dark.css +3 -3
  42. package/templates/react-app/src/styles/css/themes/pink.css +3 -3
  43. package/templates/react-app/src/uikit/components/LanguageSwitcher.tsx +7 -7
  44. package/templates/react-app/src/uikit/components/ThemeSwitcher.tsx +3 -3
  45. package/templates/react-app/src/uikit/contexts/BaseRouteContext.ts +1 -1
  46. package/templates/react-app/src/uikit/controllers/ExecutorController.ts +6 -3
  47. package/templates/react-app/src/uikit/controllers/JSONStorageController.ts +6 -3
  48. package/templates/react-app/src/uikit/controllers/RequestController.ts +3 -4
  49. package/templates/react-app/src/uikit/hooks/useDocumentTitle.ts +15 -0
  50. package/templates/react-app/src/uikit/hooks/useStore.ts +12 -0
  51. package/templates/react-app/src/uikit/providers/BaseRouteProvider.tsx +7 -1
  52. package/templates/react-app/src/uikit/providers/ProcessProvider.tsx +7 -7
  53. package/templates/react-app/vite.config.ts +20 -11
@@ -152,6 +152,20 @@ export const LOGIN_PASSWORD = 'login.password';
152
152
  */
153
153
  export const LOGIN_BUTTON = 'login.login';
154
154
 
155
+ /**
156
+ * @description Login page description
157
+ * @localZh 欢迎来到未来学习
158
+ * @localEn Welcome to the future of learning
159
+ */
160
+ export const LOGIN_WELCOME = 'login.welcome';
161
+
162
+ /**
163
+ * @description Login page description
164
+ * @localZh 解锁个性化 AI 驱动的学习体验,加速您的知识旅程。
165
+ * @localEn Unlock personalized AI-powered learning experiences designed to accelerate your knowledge journey.
166
+ */
167
+ export const LOGIN_SUBTITLE = 'login.subtitle';
168
+
155
169
  /**
156
170
  * @description Request timeout message
157
171
  * @localZh 请求超时
@@ -367,7 +381,7 @@ export const PAGE_EXECUTOR_TITLE = 'page.executor.title';
367
381
  * @localZh 错误标识符
368
382
  * @localEn Error Identifier
369
383
  */
370
- export const PAGE_ERROR_IDENTIFIER_TITLE = 'page.error.identifier.title';
384
+ export const PAGE_ERROR_IDENTIFIER_TITLE = 'page.error_identifier.title';
371
385
 
372
386
  /**
373
387
  * @description Error Identifier page description
@@ -847,8 +861,8 @@ export const PAGE_ERROR_IDENTIFIER_MAIN_TITLE =
847
861
 
848
862
  /**
849
863
  * @description ErrorIdentifier page description
850
- * @localZh 来自 '@config/Identifier.Error' 的标识符
851
- * @localEn Identifier From: '@config/Identifier.Error'
864
+ * @localZh 来自 '@config/Identifier/Error' 的标识符
865
+ * @localEn Identifier From: '@config/Identifier/Error'
852
866
  */
853
867
  export const PAGE_ERROR_IDENTIFIER_SOURCE_DESCRIPTION =
854
868
  'page.error.identifier.source_description';
@@ -1046,3 +1060,307 @@ export const COMMON_OK = 'common.ok';
1046
1060
  * @Codebase
1047
1061
  */
1048
1062
  export const COMMON_CANCEL = 'common.cancel';
1063
+
1064
+ /**
1065
+ * @description Login page forgot password text
1066
+ * @localZh 忘记密码?
1067
+ * @localEn Forgot your password?
1068
+ */
1069
+ export const LOGIN_FORGOT_PASSWORD = 'login.forgot_password';
1070
+
1071
+ /**
1072
+ * @description Login page continue with text
1073
+ * @localZh 或继续使用
1074
+ * @localEn or continue with
1075
+ */
1076
+ export const LOGIN_CONTINUE_WITH = 'login.continue_with';
1077
+
1078
+ /**
1079
+ * @description Login with Google button text
1080
+ * @localZh 使用 Google 登录
1081
+ * @localEn Sign in with Google
1082
+ */
1083
+ export const LOGIN_WITH_GOOGLE = 'login.with_google';
1084
+
1085
+ /**
1086
+ * @description Login page no account text
1087
+ * @localZh 还没有账号?
1088
+ * @localEn Don't have an account?
1089
+ */
1090
+ export const LOGIN_NO_ACCOUNT = 'login.no_account';
1091
+
1092
+ /**
1093
+ * @description Login page create account link text
1094
+ * @localZh 在此创建
1095
+ * @localEn Create one here
1096
+ */
1097
+ export const LOGIN_CREATE_ACCOUNT = 'login.create_account';
1098
+
1099
+ /**
1100
+ * @description Login page email validation message
1101
+ * @localZh 请输入您的邮箱!
1102
+ * @localEn Please input your email!
1103
+ */
1104
+ export const LOGIN_EMAIL_REQUIRED = 'login.email_required';
1105
+
1106
+ /**
1107
+ * @description Login page password validation message
1108
+ * @localZh 请输入您的密码!
1109
+ * @localEn Please input your password!
1110
+ */
1111
+ export const LOGIN_PASSWORD_REQUIRED = 'login.password_required';
1112
+
1113
+ /**
1114
+ * @description Login page feature item - AI learning paths
1115
+ * @localZh AI驱动的个性化学习路径
1116
+ * @localEn AI-powered personalized learning paths
1117
+ */
1118
+ export const LOGIN_FEATURE_AI_PATHS = 'login.feature.ai_paths';
1119
+
1120
+ /**
1121
+ * @description Login page feature item - Smart recommendations
1122
+ * @localZh 智能内容推荐
1123
+ * @localEn Smart content recommendations
1124
+ */
1125
+ export const LOGIN_FEATURE_SMART_RECOMMENDATIONS =
1126
+ 'login.feature.smart_recommendations';
1127
+
1128
+ /**
1129
+ * @description Login page feature item - Progress tracking
1130
+ * @localZh 实时进度追踪
1131
+ * @localEn Real-time progress tracking
1132
+ */
1133
+ export const LOGIN_FEATURE_PROGRESS_TRACKING =
1134
+ 'login.feature.progress_tracking';
1135
+
1136
+ /**
1137
+ * @description Login page email input title
1138
+ * @localZh 输入邮箱
1139
+ * @localEn Enter email
1140
+ */
1141
+ export const LOGIN_EMAIL_TITLE = 'login.email.title';
1142
+
1143
+ /**
1144
+ * @description Login page password input title
1145
+ * @localZh 输入密码
1146
+ * @localEn Enter password
1147
+ */
1148
+ export const LOGIN_PASSWORD_TITLE = 'login.password.title';
1149
+
1150
+ /**
1151
+ * @description Login page forgot password link title
1152
+ * @localZh 重置密码
1153
+ * @localEn Reset password
1154
+ */
1155
+ export const LOGIN_FORGOT_PASSWORD_TITLE = 'login.forgot_password.title';
1156
+
1157
+ /**
1158
+ * @description Login page submit button title
1159
+ * @localZh 登录账号
1160
+ * @localEn Sign in to account
1161
+ */
1162
+ export const LOGIN_BUTTON_TITLE = 'login.button.title';
1163
+
1164
+ /**
1165
+ * @description Login page Google sign in button title
1166
+ * @localZh 使用Google账号登录
1167
+ * @localEn Sign in with Google account
1168
+ */
1169
+ export const LOGIN_WITH_GOOGLE_TITLE = 'login.with_google.title';
1170
+
1171
+ /**
1172
+ * @description Login page create account link title
1173
+ * @localZh 创建新账号
1174
+ * @localEn Create new account
1175
+ */
1176
+ export const LOGIN_CREATE_ACCOUNT_TITLE = 'login.create_account.title';
1177
+
1178
+ /**
1179
+ * @description Register page title
1180
+ * @localZh 创建账号
1181
+ * @localEn Create Account
1182
+ */
1183
+ export const REGISTER_TITLE = 'register.title';
1184
+
1185
+ /**
1186
+ * @description Register page subtitle
1187
+ * @localZh 开始您的学习之旅
1188
+ * @localEn Start your learning journey
1189
+ */
1190
+ export const REGISTER_SUBTITLE = 'register.subtitle';
1191
+
1192
+ /**
1193
+ * @description Register page username field
1194
+ * @localZh 用户名
1195
+ * @localEn Username
1196
+ */
1197
+ export const REGISTER_USERNAME = 'register.username';
1198
+
1199
+ /**
1200
+ * @description Register page username required message
1201
+ * @localZh 请输入用户名!
1202
+ * @localEn Please input your username!
1203
+ */
1204
+ export const REGISTER_USERNAME_REQUIRED = 'register.username_required';
1205
+
1206
+ /**
1207
+ * @description Register page email field
1208
+ * @localZh 邮箱
1209
+ * @localEn Email
1210
+ */
1211
+ export const REGISTER_EMAIL = 'register.email';
1212
+
1213
+ /**
1214
+ * @description Register page email required message
1215
+ * @localZh 请输入邮箱!
1216
+ * @localEn Please input your email!
1217
+ */
1218
+ export const REGISTER_EMAIL_REQUIRED = 'register.email_required';
1219
+
1220
+ /**
1221
+ * @description Register page password field
1222
+ * @localZh 密码
1223
+ * @localEn Password
1224
+ */
1225
+ export const REGISTER_PASSWORD = 'register.password';
1226
+
1227
+ /**
1228
+ * @description Register page password required message
1229
+ * @localZh 请输入密码!
1230
+ * @localEn Please input your password!
1231
+ */
1232
+ export const REGISTER_PASSWORD_REQUIRED = 'register.password_required';
1233
+
1234
+ /**
1235
+ * @description Register page confirm password field
1236
+ * @localZh 确认密码
1237
+ * @localEn Confirm Password
1238
+ */
1239
+ export const REGISTER_CONFIRM_PASSWORD = 'register.confirm_password';
1240
+
1241
+ /**
1242
+ * @description Register page confirm password required message
1243
+ * @localZh 请确认密码!
1244
+ * @localEn Please confirm your password!
1245
+ */
1246
+ export const REGISTER_CONFIRM_PASSWORD_REQUIRED =
1247
+ 'register.confirm_password_required';
1248
+
1249
+ /**
1250
+ * @description Register page passwords don't match message
1251
+ * @localZh 两次输入的密码不匹配!
1252
+ * @localEn The passwords you entered don't match!
1253
+ */
1254
+ export const REGISTER_PASSWORD_MISMATCH = 'register.password_mismatch';
1255
+
1256
+ /**
1257
+ * @description Register page submit button
1258
+ * @localZh 注册
1259
+ * @localEn Register
1260
+ */
1261
+ export const REGISTER_BUTTON = 'register.button';
1262
+
1263
+ /**
1264
+ * @description Register page terms and conditions text
1265
+ * @localZh 注册即表示您同意我们的
1266
+ * @localEn By registering, you agree to our
1267
+ */
1268
+ export const REGISTER_TERMS_PREFIX = 'register.terms_prefix';
1269
+
1270
+ /**
1271
+ * @description Register page terms and conditions link
1272
+ * @localZh 服务条款
1273
+ * @localEn Terms of Service
1274
+ */
1275
+ export const REGISTER_TERMS_LINK = 'register.terms_link';
1276
+
1277
+ /**
1278
+ * @description Register page privacy policy text
1279
+ * @localZh 和
1280
+ * @localEn and
1281
+ */
1282
+ export const REGISTER_TERMS_AND = 'register.terms_and';
1283
+
1284
+ /**
1285
+ * @description Register page privacy policy link
1286
+ * @localZh 隐私政策
1287
+ * @localEn Privacy Policy
1288
+ */
1289
+ export const REGISTER_PRIVACY_LINK = 'register.privacy_link';
1290
+
1291
+ /**
1292
+ * @description Register page have account text
1293
+ * @localZh 已有账号?
1294
+ * @localEn Already have an account?
1295
+ */
1296
+ export const REGISTER_HAVE_ACCOUNT = 'register.have_account';
1297
+
1298
+ /**
1299
+ * @description Register page login link
1300
+ * @localZh 登录
1301
+ * @localEn Sign in
1302
+ */
1303
+ export const REGISTER_LOGIN_LINK = 'register.login_link';
1304
+
1305
+ /**
1306
+ * @description Register page feature item - Personalized Learning
1307
+ * @localZh 个性化学习体验
1308
+ * @localEn Personalized Learning Experience
1309
+ */
1310
+ export const REGISTER_FEATURE_PERSONALIZED = 'register.feature.personalized';
1311
+
1312
+ /**
1313
+ * @description Register page feature item - Expert Support
1314
+ * @localZh 专家支持和指导
1315
+ * @localEn Expert Support and Guidance
1316
+ */
1317
+ export const REGISTER_FEATURE_SUPPORT = 'register.feature.support';
1318
+
1319
+ /**
1320
+ * @description Register page feature item - Learning Community
1321
+ * @localZh 活跃的学习社区
1322
+ * @localEn Active Learning Community
1323
+ */
1324
+ export const REGISTER_FEATURE_COMMUNITY = 'register.feature.community';
1325
+
1326
+ /**
1327
+ * @description Register page terms agreement required message
1328
+ * @localZh 请同意服务条款和隐私政策
1329
+ * @localEn Please agree to the Terms of Service and Privacy Policy
1330
+ */
1331
+ export const REGISTER_TERMS_REQUIRED = 'register.terms_required';
1332
+
1333
+ /**
1334
+ * @description Home page title
1335
+ * @localZh 首页
1336
+ * @localEn Home
1337
+ */
1338
+ export const PAGE_HOME_TITLE = 'page.home.title';
1339
+
1340
+ /**
1341
+ * @description 404 page title
1342
+ * @localZh 404 - 页面未找到
1343
+ * @localEn 404 - Page Not Found
1344
+ */
1345
+ export const PAGE_404_TITLE = 'page.404.title';
1346
+
1347
+ /**
1348
+ * @description 500 page title
1349
+ * @localZh 500 - 服务器错误
1350
+ * @localEn 500 - Server Error
1351
+ */
1352
+ export const PAGE_500_TITLE = 'page.500.title';
1353
+
1354
+ /**
1355
+ * @description Login page title
1356
+ * @localZh 登录
1357
+ * @localEn Login
1358
+ */
1359
+ export const PAGE_LOGIN_TITLE = 'page.login.title';
1360
+
1361
+ /**
1362
+ * @description Register page title
1363
+ * @localZh 注册
1364
+ * @localEn Register
1365
+ */
1366
+ export const PAGE_REGISTER_TITLE = 'page.register.title';
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Template FE-React</title>
7
+ <title>react-app</title>
8
8
  </head>
9
9
  <body>
10
10
  <div id="root"></div>
@@ -43,7 +43,9 @@
43
43
  "fe-release": "./bin/release.js"
44
44
  },
45
45
  "scripts": {
46
- "dev": "vite",
46
+ "dev": "vite --mode localhost",
47
+ "dev:staging": "vite --mode staging",
48
+ "dev:prod": "vite --mode production",
47
49
  "build": "vite build",
48
50
  "lint": "eslint ./src --fix",
49
51
  "prettier": "prettier --write ./src",
@@ -1,14 +1,14 @@
1
1
  {
2
- "404.notComponent": "Component not found",
3
- "404.notPage": "Page not found",
4
- "500.title": "Server Error",
5
- "header.theme.label": "Switch Theme",
6
2
  "err.ioc.not.implemented": "IOC not implemented",
7
3
  "err.local.no.user.token": "Local no user token",
8
4
  "err.global.no.window": "Global no window",
9
5
  "err.within.page.provider": "Must be used in PageProvider",
10
6
  "page.about.title": "About",
11
7
  "page.about.description": "Learn more about our project and team information",
8
+ "404.notComponent": "Component not found",
9
+ "404.notPage": "Page not found",
10
+ "500.title": "Server Error",
11
+ "header.theme.label": "Switch Theme",
12
12
  "about.title": "About",
13
13
  "jsonStorage.title": "JSONStorage Demo",
14
14
  "jsonStorage.title2": "Permanent storage test",
@@ -54,7 +54,6 @@
54
54
  "page.request.title": "Request Examples",
55
55
  "page.request.description": "Demonstrate various request examples and usage",
56
56
  "page.executor.title": "Executor Examples",
57
- "page.executor.description": "A powerful task executor supporting multiple task types and state management",
58
57
  "page.error.identifier.title": "Error Identifier",
59
58
  "page.error.identifier.description": "Error identifier usage and examples",
60
59
  "home.explore": "Explore",
@@ -88,6 +87,7 @@
88
87
  "page.request.trigger_api_catch": "Trigger API Catch Result",
89
88
  "page.request.stop_api_catch": "Stop API Catch Result",
90
89
  "page.executor.main_title": "Executor",
90
+ "page.executor.description": "A powerful task executor supporting multiple task types and state management",
91
91
  "page.executor.test_plugin.title": "Test Plugin",
92
92
  "page.executor.task.status.pending": "Pending",
93
93
  "page.executor.task.status.running": "Running",
@@ -120,7 +120,7 @@
120
120
  "page.executor.view_guide": "View Guide",
121
121
  "page.executor.contact_support": "Contact Support",
122
122
  "page.error.identifier.main_title": "Error Identifier",
123
- "page.error.identifier.source_description": "Identifier From: '@config/Identifier.Error'",
123
+ "page.error.identifier.source_description": "Identifier From: '@config/Identifier/Error'",
124
124
  "page.error.identifier.help.title": "Need Help?",
125
125
  "page.error.identifier.help.description": "If you encounter any issues while using error identifiers, please contact our support team",
126
126
  "page.error.identifier.contact_support": "Contact Support",
@@ -128,7 +128,9 @@
128
128
  "about.notification.title": "Notification Title",
129
129
  "about.notification.description": "This is a test notification",
130
130
  "about.button.message": "Show Message",
131
+ "about.button.message2": "Static Message",
131
132
  "about.button.notification": "Show Notification",
133
+ "about.button.notification2": "Static Notification",
132
134
  "about.tooltip.text": "This is a tooltip text",
133
135
  "about.button.tooltip": "Hover to show Tooltip",
134
136
  "about.modal.title": "Modal Example",
@@ -146,6 +148,51 @@
146
148
  "about.alert.message": "This is a warning alert",
147
149
  "common.ok": "OK",
148
150
  "common.cancel": "Cancel",
149
- "about.button.message2": "Static Message",
150
- "about.button.notification2": "Static Notification"
151
+ "login.welcome": "Welcome to the future of learning",
152
+ "login.subtitle": "Unlock personalized AI-powered learning experiences designed to accelerate your knowledge journey.",
153
+ "login.forgot_password": "Forgot your password?",
154
+ "login.continue_with": "or continue with",
155
+ "login.with_google": "Sign in with Google",
156
+ "login.no_account": "Don't have an account?",
157
+ "login.create_account": "Create one here",
158
+ "login.email_required": "Please input your email!",
159
+ "login.password_required": "Please input your password!",
160
+ "login.feature.ai_paths": "AI-powered personalized learning paths",
161
+ "login.feature.smart_recommendations": "Smart content recommendations",
162
+ "login.feature.progress_tracking": "Real-time progress tracking",
163
+ "login.email.title": "Enter email",
164
+ "login.password.title": "Enter password",
165
+ "login.forgot_password.title": "Reset password",
166
+ "login.button.title": "Sign in to account",
167
+ "login.with_google.title": "Sign in with Google account",
168
+ "login.create_account.title": "Create new account",
169
+ "register.title": "Create Account",
170
+ "register.subtitle": "Start your learning journey",
171
+ "register.username": "Username",
172
+ "register.username_required": "Please input your username!",
173
+ "register.email": "Email",
174
+ "register.email_required": "Please input your email!",
175
+ "register.password": "Password",
176
+ "register.password_required": "Please input your password!",
177
+ "register.confirm_password": "Confirm Password",
178
+ "register.confirm_password_required": "Please confirm your password!",
179
+ "register.password_mismatch": "The passwords you entered don't match!",
180
+ "register.button": "Register",
181
+ "register.terms_prefix": "By registering, you agree to our",
182
+ "register.terms_link": "Terms of Service",
183
+ "register.terms_and": "and",
184
+ "register.privacy_link": "Privacy Policy",
185
+ "register.have_account": "Already have an account?",
186
+ "register.login_link": "Sign in",
187
+ "register.feature.personalized": "Personalized Learning Experience",
188
+ "register.feature.support": "Expert Support and Guidance",
189
+ "register.feature.community": "Active Learning Community",
190
+ "register.terms_required": "Please agree to the Terms of Service and Privacy Policy",
191
+ "page.error_identifier.title": "Error Identifier",
192
+ "page.home.title": "Home",
193
+ "page.404.title": "404 - Page Not Found",
194
+ "page.500.title": "500 - Server Error",
195
+ "page.login.title": "Login",
196
+ "page.register.title": "Register",
197
+ "response.no.token": "Response not token value"
151
198
  }
@@ -1,14 +1,14 @@
1
1
  {
2
- "404.notComponent": "组件不存在",
3
- "404.notPage": "页面不存在",
4
- "500.title": "服务器错误",
5
- "header.theme.label": "切换主题",
6
2
  "err.ioc.not.implemented": "IOC 未实现",
7
3
  "err.local.no.user.token": "本地未找到 user token",
8
4
  "err.global.no.window": "全局未找到 window",
9
5
  "err.within.page.provider": "必须在 PageProvider 中使用",
10
6
  "page.about.title": "关于",
11
7
  "page.about.description": "了解更多关于我们的项目和团队信息",
8
+ "404.notComponent": "组件不存在",
9
+ "404.notPage": "页面不存在",
10
+ "500.title": "服务器错误",
11
+ "header.theme.label": "切换主题",
12
12
  "about.title": "关于我们",
13
13
  "jsonStorage.title": "JSONStorage Demo",
14
14
  "jsonStorage.title2": "永久存储测试",
@@ -54,7 +54,6 @@
54
54
  "page.request.title": "请求示例",
55
55
  "page.request.description": "展示各种请求示例和用法",
56
56
  "page.executor.title": "执行器示例",
57
- "page.executor.description": "一个强大的任务执行器,支持多种任务类型和状态管理",
58
57
  "page.error.identifier.title": "错误标识符",
59
58
  "page.error.identifier.description": "错误标识符的使用和示例",
60
59
  "home.explore": "探索",
@@ -88,6 +87,7 @@
88
87
  "page.request.trigger_api_catch": "触发 API 捕获结果",
89
88
  "page.request.stop_api_catch": "停止 API 捕获结果",
90
89
  "page.executor.main_title": "执行器",
90
+ "page.executor.description": "一个强大的任务执行器,支持多种任务类型和状态管理",
91
91
  "page.executor.test_plugin.title": "测试插件",
92
92
  "page.executor.task.status.pending": "等待中",
93
93
  "page.executor.task.status.running": "运行中",
@@ -120,7 +120,7 @@
120
120
  "page.executor.view_guide": "查看指南",
121
121
  "page.executor.contact_support": "联系支持",
122
122
  "page.error.identifier.main_title": "错误标识符",
123
- "page.error.identifier.source_description": "来自 '@config/Identifier.Error' 的标识符",
123
+ "page.error.identifier.source_description": "来自 '@config/Identifier/Error' 的标识符",
124
124
  "page.error.identifier.help.title": "需要帮助?",
125
125
  "page.error.identifier.help.description": "如果您在使用错误标识符时遇到问题,请联系我们的支持团队",
126
126
  "page.error.identifier.contact_support": "联系支持",
@@ -128,7 +128,9 @@
128
128
  "about.notification.title": "通知标题",
129
129
  "about.notification.description": "这是一条测试通知",
130
130
  "about.button.message": "显示 Message",
131
+ "about.button.message2": "静态消息",
131
132
  "about.button.notification": "显示 Notification",
133
+ "about.button.notification2": "静态通知",
132
134
  "about.tooltip.text": "这是一个提示文本",
133
135
  "about.button.tooltip": "悬停显示 Tooltip",
134
136
  "about.modal.title": "模态框示例",
@@ -146,6 +148,51 @@
146
148
  "about.alert.message": "这是一个警告提示",
147
149
  "common.ok": "确定",
148
150
  "common.cancel": "取消",
149
- "about.button.message2": "静态消息",
150
- "about.button.notification2": "静态通知"
151
+ "login.welcome": "欢迎来到未来学习",
152
+ "login.subtitle": "解锁个性化 AI 驱动的学习体验,加速您的知识旅程。",
153
+ "login.forgot_password": "忘记密码?",
154
+ "login.continue_with": "或继续使用",
155
+ "login.with_google": "使用 Google 登录",
156
+ "login.no_account": "还没有账号?",
157
+ "login.create_account": "在此创建",
158
+ "login.email_required": "请输入您的邮箱!",
159
+ "login.password_required": "请输入您的密码!",
160
+ "login.feature.ai_paths": "AI驱动的个性化学习路径",
161
+ "login.feature.smart_recommendations": "智能内容推荐",
162
+ "login.feature.progress_tracking": "实时进度追踪",
163
+ "login.email.title": "输入邮箱",
164
+ "login.password.title": "输入密码",
165
+ "login.forgot_password.title": "重置密码",
166
+ "login.button.title": "登录账号",
167
+ "login.with_google.title": "使用Google账号登录",
168
+ "login.create_account.title": "创建新账号",
169
+ "register.title": "创建账号",
170
+ "register.subtitle": "开始您的学习之旅",
171
+ "register.username": "用户名",
172
+ "register.username_required": "请输入用户名!",
173
+ "register.email": "邮箱",
174
+ "register.email_required": "请输入邮箱!",
175
+ "register.password": "密码",
176
+ "register.password_required": "请输入密码!",
177
+ "register.confirm_password": "确认密码",
178
+ "register.confirm_password_required": "请确认密码!",
179
+ "register.password_mismatch": "两次输入的密码不匹配!",
180
+ "register.button": "注册",
181
+ "register.terms_prefix": "注册即表示您同意我们的",
182
+ "register.terms_link": "服务条款",
183
+ "register.terms_and": "和",
184
+ "register.privacy_link": "隐私政策",
185
+ "register.have_account": "已有账号?",
186
+ "register.login_link": "登录",
187
+ "register.feature.personalized": "个性化学习体验",
188
+ "register.feature.support": "专家支持和指导",
189
+ "register.feature.community": "活跃的学习社区",
190
+ "register.terms_required": "请同意服务条款和隐私政策",
191
+ "page.error_identifier.title": "错误标识符",
192
+ "page.home.title": "首页",
193
+ "page.404.title": "404 - 页面未找到",
194
+ "page.500.title": "500 - 服务器错误",
195
+ "page.login.title": "登录",
196
+ "page.register.title": "注册",
197
+ "response.no.token": "响应内容没有 token 值"
151
198
  }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path><text x="50" y="50" font-family="Arial" font-size="24" fill="black">fe</text></svg>
@@ -3,9 +3,10 @@ import { createBrowserRouter, RouterProvider } from 'react-router-dom';
3
3
  import { lazy, useMemo } from 'react';
4
4
  import { RouterRenderComponent } from './uikit/components/RouterRenderComponent';
5
5
  import { IOC } from './core/IOC';
6
- import { RouterController } from './uikit/controllers/RouterController';
6
+ import { RouteService } from './base/services/RouteService';
7
7
  import { RouterLoader, type ComponentValue } from '@/base/cases/RouterLoader';
8
8
  import { AntdThemeProvider } from '@brain-toolkit/antd-theme-override/react';
9
+ import { routerPrefix } from '@config/common';
9
10
 
10
11
  function getAllPages() {
11
12
  const modules = import.meta.glob('./pages/**/*.tsx');
@@ -28,10 +29,12 @@ const routerLoader = new RouterLoader({
28
29
 
29
30
  function App() {
30
31
  const routerBase = useMemo(() => {
31
- const routes = IOC(RouterController)
32
+ const routes = IOC(RouteService)
32
33
  .getRoutes()
33
34
  .map((route) => routerLoader.toRoute(route));
34
- const router = createBrowserRouter(routes);
35
+ const router = createBrowserRouter(routes, {
36
+ basename: routerPrefix
37
+ });
35
38
  return router;
36
39
  }, []);
37
40
 
@@ -51,7 +51,7 @@ export class AppConfig implements EnvConfigInterface {
51
51
  * Storage key for user authentication token
52
52
  * @description Injected from VITE_USER_TOKEN_STORAGE_KEY environment variable
53
53
  */
54
- readonly userTokenStorageKey = '';
54
+ readonly userTokenStorageKey = '__fe_user_token__';
55
55
 
56
56
  /**
57
57
  * Available OpenAI model configurations
@@ -0,0 +1,17 @@
1
+ import { routerPrefix } from '@config/common';
2
+ import { injectable } from 'inversify';
3
+
4
+ /**
5
+ * Get Publish Assets Path
6
+ *
7
+ * - If router has prefix, the path will be `prefix/path`
8
+ * - If router has no prefix, the path will be `path`
9
+ */
10
+ @injectable()
11
+ export class PublicAssetsPath {
12
+ constructor(protected prefix: string = routerPrefix) {}
13
+
14
+ getPath(path: string): string {
15
+ return this.prefix + `/${path}`;
16
+ }
17
+ }
@@ -1,4 +1,12 @@
1
+ export interface RegisterFormData {
2
+ username: string;
3
+ email: string;
4
+ password: string;
5
+ confirmPassword: string;
6
+ agreeToTerms: boolean;
7
+ }
1
8
  export interface LoginInterface {
2
9
  login(params: { username: string; password: string }): Promise<unknown>;
3
10
  logout(): void;
11
+ register(params: RegisterFormData): Promise<unknown>;
4
12
  }