@qlover/create-app 0.4.0 → 0.4.2
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/CHANGELOG.md +45 -0
- package/configs/_common/package.json.template +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/templates/react-app/.env +1 -2
- package/templates/react-app/README.md +70 -8
- package/templates/react-app/config/app.router.json +13 -13
- package/templates/react-app/config/common.ts +8 -0
- package/templates/react-app/config/i18n.ts +3 -1
- package/templates/react-app/config/{Identifier.I18n.ts → identifier/I18n.ts} +321 -3
- package/templates/react-app/index.html +1 -1
- package/templates/react-app/public/locales/en/common.json +54 -8
- package/templates/react-app/public/locales/zh/common.json +54 -8
- package/templates/react-app/public/router-root/logo.svg +1 -0
- package/templates/react-app/src/App.tsx +6 -3
- package/templates/react-app/src/base/cases/PublicAssetsPath.ts +17 -0
- package/templates/react-app/src/base/port/LoginInterface.ts +8 -0
- package/templates/react-app/src/base/port/StoreInterface.ts +58 -0
- package/templates/react-app/src/base/services/I18nService.ts +15 -9
- package/templates/react-app/src/{uikit/controllers/RouterController.ts → base/services/RouteService.ts} +12 -12
- package/templates/react-app/src/{uikit/controllers/UserController.ts → base/services/UserService.ts} +21 -11
- package/templates/react-app/src/core/bootstrap.ts +1 -1
- package/templates/react-app/src/core/registers/RegisterCommon.ts +11 -1
- package/templates/react-app/src/core/registers/RegisterControllers.ts +3 -12
- package/templates/react-app/src/pages/auth/Layout.tsx +5 -5
- package/templates/react-app/src/pages/auth/Login.tsx +50 -29
- package/templates/react-app/src/pages/auth/Register.tsx +238 -1
- package/templates/react-app/src/pages/base/About.tsx +1 -1
- package/templates/react-app/src/pages/base/ErrorIdentifier.tsx +2 -2
- package/templates/react-app/src/pages/base/Executor.tsx +4 -4
- package/templates/react-app/src/pages/base/Home.tsx +1 -1
- package/templates/react-app/src/pages/base/JSONStorage.tsx +3 -3
- package/templates/react-app/src/pages/base/Request.tsx +4 -4
- package/templates/react-app/src/pages/base/components/BaseHeader.tsx +8 -2
- package/templates/react-app/src/uikit/components/LanguageSwitcher.tsx +7 -7
- package/templates/react-app/src/uikit/components/ThemeSwitcher.tsx +3 -3
- package/templates/react-app/src/uikit/contexts/BaseRouteContext.ts +1 -1
- package/templates/react-app/src/uikit/controllers/ExecutorController.ts +6 -3
- package/templates/react-app/src/uikit/controllers/JSONStorageController.ts +6 -3
- package/templates/react-app/src/uikit/controllers/RequestController.ts +3 -4
- package/templates/react-app/src/uikit/hooks/useDocumentTitle.ts +15 -0
- package/templates/react-app/src/uikit/hooks/useStore.ts +12 -0
- package/templates/react-app/src/uikit/providers/BaseRouteProvider.tsx +7 -1
- package/templates/react-app/src/uikit/providers/ProcessProvider.tsx +7 -7
- package/templates/react-app/vite.config.ts +20 -11
- /package/templates/react-app/config/{Identifier.Error.ts → identifier/Error.ts} +0 -0
|
@@ -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.
|
|
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
|
|
851
|
-
* @localEn Identifier From: '@config/Identifier
|
|
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>
|
|
7
|
+
<title>react-app</title>
|
|
8
8
|
</head>
|
|
9
9
|
<body>
|
|
10
10
|
<div id="root"></div>
|
|
@@ -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
|
|
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,50 @@
|
|
|
146
148
|
"about.alert.message": "This is a warning alert",
|
|
147
149
|
"common.ok": "OK",
|
|
148
150
|
"common.cancel": "Cancel",
|
|
149
|
-
"
|
|
150
|
-
"
|
|
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"
|
|
151
197
|
}
|
|
@@ -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
|
|
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,50 @@
|
|
|
146
148
|
"about.alert.message": "这是一个警告提示",
|
|
147
149
|
"common.ok": "确定",
|
|
148
150
|
"common.cancel": "取消",
|
|
149
|
-
"
|
|
150
|
-
"
|
|
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": "注册"
|
|
151
197
|
}
|
|
@@ -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 {
|
|
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(
|
|
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
|
|
|
@@ -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
|
}
|