@jx3box/jx3box-ui 2.3.12 → 2.3.13

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.
@@ -2,12 +2,14 @@
2
2
  .w-share2 {
3
3
  .pointer;
4
4
  .dbi;
5
+
5
6
  .u-icon {
6
7
  .size(26px);
7
8
  .y;
8
9
  box-sizing: border-box;
9
10
  .pr;
10
11
  }
12
+
11
13
  .u-simple-icon {
12
14
  .size(20px);
13
15
  position: relative;
@@ -15,90 +17,124 @@
15
17
  fill: @color;
16
18
  }
17
19
  }
20
+
18
21
  .u-share2-pop {
22
+ padding: 0 !important;
23
+ overflow: hidden;
24
+ border: 0 !important;
25
+ border-radius: 12px !important;
26
+ box-shadow: 0 12px 32px rgb(31 45 61 / 14%) !important;
27
+
19
28
  .u-share2-content {
20
29
  display: flex;
21
- justify-content: space-between;
30
+ align-items: stretch;
31
+ width: 390px;
32
+ background: #fff;
33
+ }
34
+
35
+ .u-share2-content-main {
36
+ display: grid;
37
+ grid-template-columns: repeat(2, 78px);
38
+ gap: 10px;
39
+ align-content: center;
40
+ padding: 22px 20px;
41
+ }
42
+
43
+ .u-share2-item {
44
+ display: flex;
45
+ flex-direction: column;
46
+ gap: 7px;
22
47
  align-items: center;
48
+ justify-content: center;
49
+ min-height: 78px;
50
+ padding: 8px 5px;
51
+ color: #606266;
52
+ cursor: pointer;
53
+ border: 1px solid transparent;
54
+ border-radius: 9px;
55
+ transition: all .2s ease;
23
56
 
24
- .w(400px);
25
- .u-share2-content-main {
26
- // display: flex;
27
- &::after {
28
- content: "";
29
- height: 100%;
30
- width: 1px;
31
- color: #ececec;
32
- .pa;
33
- top: 0;
34
- right: 0;
35
- }
57
+ &:hover {
58
+ color: #0366d6;
59
+ background: #f2f8ff;
60
+ border-color: #d6e9ff;
61
+ transform: translateY(-2px);
36
62
 
37
- .u-share2-item {
38
- display: inline-flex;
39
- flex-direction: column;
40
- align-items: center;
41
-
42
- cursor: pointer;
43
- text-align: center;
44
- width: 55px;
45
- white-space: nowrap;
46
- text-align: center;
47
- .mr(10px);
48
- overflow: hidden;
49
-
50
- &:hover {
51
- color: #00a1d6;
52
- // .u-share-icon {
53
- // // 利用shadow来改变 icon 颜色,注意overflow应为hidden
54
- // position: relative;
55
- // left: -80px;
56
- // filter: drop-shadow(80px 0 #00a1d6);
57
- // }
58
- }
63
+ .u-share-icon {
64
+ transform: scale(1.08);
59
65
  }
60
66
  }
61
- .u-share2-wechat {
62
- text-align: center;
63
- padding: 0 0 0 20px;
64
- border-left: 1px solid #e5e9ef;
65
- margin-left: 10px;
66
- .flex;
67
- flex-direction: column;
68
- align-items: center;
69
- justify-content: center;
67
+ }
70
68
 
71
- .u-pic {
72
- cursor: pointer;
73
- }
74
- }
69
+ .u-share2-name {
70
+ font-size: 13px;
71
+ line-height: 18px;
72
+ white-space: nowrap;
75
73
  }
76
74
 
77
75
  .u-share-icon {
78
76
  .size(28px);
77
+ transition: transform .2s ease;
78
+ }
79
+
80
+ .u-share2-wechat {
81
+ display: flex;
82
+ flex: 1;
83
+ flex-direction: column;
84
+ gap: 10px;
85
+ align-items: center;
86
+ justify-content: center;
87
+ min-width: 160px;
88
+ padding: 20px 18px;
89
+ color: #5a5273;
90
+ font-size: 13px;
91
+ line-height: 20px;
92
+ text-align: center;
93
+ background: linear-gradient(145deg, #faf7ff, #f1ebff);
94
+ border-left: 1px solid #e8e1f6;
95
+
96
+ .u-pic {
97
+ display: flex;
98
+ padding: 6px;
99
+ cursor: pointer;
100
+ background: #fff;
101
+ border-radius: 8px;
102
+ box-shadow: 0 4px 12px rgb(103 79 151 / 12%);
103
+ }
79
104
  }
80
105
  }
81
106
 
82
107
  @media screen and (max-width: @phone) {
83
108
  .u-share2-pop {
84
109
  .u-share2-content {
85
- .w(150px);
86
- flex-wrap: wrap;
87
- text-align: center;
88
-
89
- .u-share2-wechat {
90
- text-align: center;
91
- .w(150px);
92
- padding: 0;
93
- padding-top: 20px;
94
- border-left: none;
95
- margin-left: 0;
96
- border-top: 1px solid #e5e9ef;
97
- margin-top: 10px;
98
-
99
- .u-pic {
100
- cursor: pointer;
101
- }
110
+ display: block;
111
+ width: 216px;
112
+ }
113
+
114
+ .u-share2-content-main {
115
+ grid-template-columns: repeat(4, 1fr);
116
+ gap: 4px;
117
+ padding: 12px;
118
+ }
119
+
120
+ .u-share2-item {
121
+ min-height: 66px;
122
+ padding: 5px 2px;
123
+ }
124
+
125
+ .u-share2-wechat {
126
+ flex-direction: row;
127
+ gap: 12px;
128
+ justify-content: flex-start;
129
+ min-width: 0;
130
+ padding: 12px;
131
+ text-align: left;
132
+ border-top: 1px solid #e8e1f6;
133
+ border-left: 0;
134
+
135
+ .u-pic {
136
+ flex: none;
137
+ padding: 4px;
102
138
  }
103
139
  }
104
140
  }
@@ -10,8 +10,8 @@ export default {
10
10
  expandBoxMatrix: "Click to open JX3BOX matrix",
11
11
  box: "JX3BOX",
12
12
  chooseGameVersion: "Choose game version",
13
- jx3Full: "JX3 / Wujie",
14
- originFull: "JX3 · Origin",
13
+ jx3Full: "JX3",
14
+ originFull: "Origin",
15
15
  jx3Short: "JX3",
16
16
  originShort: "Origin",
17
17
  asset: "Assets",
@@ -31,13 +31,15 @@ export default {
31
31
  switchAlternate: "Switch Alt",
32
32
  themeStyle: "Theme",
33
33
  logout: "Log out",
34
- roleManage: "Roles",
34
+ roleManage: "My Roles",
35
+ myTeams: "My Teams",
36
+ myRelations: "My Relations",
35
37
  favorites: "Favorites",
36
38
  purchased: "Purchased",
37
39
  orderCenter: "Orders",
38
40
  dashboard: "Dashboard",
39
41
  profile: "Profile",
40
- config: "Settings",
42
+ config: "Preferences",
41
43
  feedbackHelp: "Help",
42
44
  proExpireUntil: "(Valid until: {date})",
43
45
  uidPrefix: "UID: ",
@@ -161,6 +163,10 @@ export default {
161
163
  browserNotSupportCopy: "Copy not supported",
162
164
  confirm: "Confirm",
163
165
  cancel: "Cancel",
166
+ close: "Close",
167
+ view: "View",
168
+ submit: "Submit",
169
+ actionSuccess: "Done",
164
170
  tip: "Tip",
165
171
  },
166
172
  footer: { icp: "ICP: 湘ICP备2021002288号", about: "About", doc: "Docs", repo: "Repository", feedback: "Feedback" },
@@ -179,6 +185,7 @@ export default {
179
185
  proVip: "Pro Membership",
180
186
  preVip: "Premium Membership",
181
187
  },
188
+ authorRole: { title: "Author Roles" },
182
189
  authorPosts: { latest: "Latest Posts", noTitle: "{type}/Untitled" },
183
190
  authorFans: {
184
191
  title: "Fans",
@@ -370,12 +377,15 @@ export default {
370
377
  noTitle: "Untitled",
371
378
  anonymous: "Anonymous",
372
379
  },
380
+ postVersion: { title: "Version History", collapse: "Collapse", compare: "Compare" },
381
+ postCollection: { title: "Related", collapse: "Collapse" },
373
382
  simpleThx: { record: "Reward Records" },
374
383
  thx: {
375
384
  copyright1: "For all original works, copyright belongs to the author. Unauthorized reposts or plagiarism without attribution may be pursued by law.",
376
385
  copyright2: "Exclusive signed-author submissions and officially appraised JX3BOX works are treated as paid submissions once redeemed. Commercial reuse requires platform authorization.",
377
386
  },
378
387
  cmsSingle: { comment: "Comments", commentDisabled: "The author has not enabled comments", authorSet: "The author set [" },
388
+ rightAffix: { goComment: "Comment", backToTop: "Back to top" },
379
389
  suspendCommon: {
380
390
  more: "More",
381
391
  pinButton: "Pin Button",
@@ -475,4 +485,15 @@ export default {
475
485
  test: "Test",
476
486
  success: "Submitted successfully",
477
487
  },
488
+ accountReady: {
489
+ title: "⚠️ Complete account security information", description: "To keep App sign-in, account recovery, card codes, and related features working, please complete the information below.",
490
+ contactTitle: "Link email and phone", contactDescription: "Your email address or phone number is incomplete. Link your phone and link and verify your email, otherwise you may be unable to recover your account later.", bind: "Link now",
491
+ passwordTitle: "Set a sign-in password", passwordDescription: "Your account does not have a password yet. Without one, card codes and App sign-in with an account and password may be unavailable.", setPassword: "Set now", later: "Ask me again in 7 days",
492
+ },
493
+ migrateCommunity: { title: "Move back to original section", postTitle: "Title", author: "Author", originalSection: "Original section", originalLink: "Original link", notAvailable: "This post cannot be moved because its original post does not exist.", confirm: "Move this post back to its original section?", success: "Moved successfully" },
494
+ moveCommunity: { title: "Move to community", category: "Category", categoryPlaceholder: "Select a post category", introduction: "Introduction", contentPlaceholder: "Enter content", images: "Images", irreversibleTip: "Please confirm that this action cannot be undone", irreversible: "I confirm that this action cannot be undone", missingPost: "Post ID does not exist!", selectCategory: "Please select a category!" },
495
+ wiki: { loading: "🎉 Loading...", loadFailed: "⚠️ Failed to load data", empty: "💧 No data", reply: "Reply", nickname: "Nickname: ", mysterious: "Mysterious Hero" },
496
+ wikiPanel: { contributors: "Contributors", difficulty: "Difficulty", popularity: "Popularity", updatedAt: "Updated" },
497
+ wikiComments: { title: "Wiki Comments", empty: "💧 No comments", contentRequired: "Please enter a comment before submitting", submitSuccess: "Submitted successfully. Please wait for review." },
498
+ wikiRevisions: { title: "Revision History", version: "Version", contributor: "Contributor", remark: "Revision notes" },
478
499
  };
@@ -32,6 +32,8 @@ export default {
32
32
  themeStyle: "Giao diện",
33
33
  logout: "Đăng xuất",
34
34
  roleManage: "Quản lý nhân vật",
35
+ myTeams: "Nhóm của tôi",
36
+ myRelations: "Mối quan hệ của tôi",
35
37
  favorites: "Yêu thích",
36
38
  purchased: "Đã mua",
37
39
  orderCenter: "Đơn hàng",
@@ -161,6 +163,10 @@ export default {
161
163
  browserNotSupportCopy: "Không hỗ trợ sao chép",
162
164
  confirm: "Xác nhận",
163
165
  cancel: "Hủy",
166
+ close: "Đóng",
167
+ view: "Xem",
168
+ submit: "Gửi",
169
+ actionSuccess: "Thành công",
164
170
  tip: "Nhắc",
165
171
  },
166
172
  footer: { icp: "ICP: 湘ICP备2021002288号", about: "Giới thiệu", doc: "Tài liệu", repo: "Kho mã", feedback: "Góp ý" },
@@ -179,6 +185,7 @@ export default {
179
185
  proVip: "Thành viên Pro",
180
186
  preVip: "Thành viên Premium",
181
187
  },
188
+ authorRole: { title: "Vai trò tác giả" },
182
189
  authorPosts: { latest: "Bài mới nhất", noTitle: "{type}/Không tiêu đề" },
183
190
  authorFans: {
184
191
  title: "Fan",
@@ -358,12 +365,15 @@ export default {
358
365
  noTitle: "Không tiêu đề",
359
366
  anonymous: "Ẩn danh",
360
367
  },
368
+ postVersion: { title: "Lịch sử phiên bản", collapse: "Thu gọn", compare: "So sánh" },
369
+ postCollection: { title: "Liên quan", collapse: "Thu gọn" },
361
370
  simpleThx: { record: "Lịch sử tặng thưởng" },
362
371
  thx: {
363
372
  copyright1: "Mọi tác phẩm gốc đều thuộc bản quyền của tác giả. Các hành vi sao chép hoặc đăng lại trái phép có thể bị xử lý pháp lý.",
364
373
  copyright2: "Các bài độc quyền của tác giả ký kết và các tác phẩm được chấm điểm chính thức sẽ được xem là nội dung trả phí sau khi quy đổi. Việc sử dụng thương mại cần được nền tảng cho phép.",
365
374
  },
366
375
  cmsSingle: { comment: "Bình luận", commentDisabled: "Tác giả chưa bật chức năng bình luận", authorSet: "Tác giả đã đặt [" },
376
+ rightAffix: { goComment: "Bình luận", backToTop: "Lên đầu trang" },
367
377
  suspendCommon: {
368
378
  more: "Thêm",
369
379
  pinButton: "Nút ghim",
@@ -463,4 +473,15 @@ export default {
463
473
  test: "Test",
464
474
  success: "Gửi thành công",
465
475
  },
476
+ accountReady: {
477
+ title: "⚠️ Hoàn thiện bảo mật tài khoản", description: "Để đăng nhập App, khôi phục tài khoản, dùng mã thẻ và các tính năng liên quan hoạt động bình thường, hãy hoàn thiện thông tin bên dưới.",
478
+ contactTitle: "Liên kết email và số điện thoại", contactDescription: "Email hoặc số điện thoại của tài khoản chưa đầy đủ. Hãy liên kết số điện thoại, liên kết và xác minh email để có thể khôi phục tài khoản sau này.", bind: "Liên kết ngay",
479
+ passwordTitle: "Đặt mật khẩu đăng nhập", passwordDescription: "Tài khoản của bạn chưa có mật khẩu. Không có mật khẩu, mã thẻ và đăng nhập App bằng tài khoản có thể không dùng được.", setPassword: "Thiết lập", later: "Nhắc lại sau 7 ngày",
480
+ },
481
+ migrateCommunity: { title: "Chuyển về mục gốc", postTitle: "Tiêu đề", author: "Tác giả", originalSection: "Mục gốc", originalLink: "Liên kết gốc", notAvailable: "Không thể chuyển bài viết này vì bài gốc không tồn tại.", confirm: "Chuyển bài viết này về mục gốc?", success: "Chuyển thành công" },
482
+ moveCommunity: { title: "Chuyển đến diễn đàn", category: "Danh mục", categoryPlaceholder: "Chọn danh mục bài viết", introduction: "Giới thiệu", contentPlaceholder: "Nhập nội dung", images: "Hình ảnh", irreversibleTip: "Hãy xác nhận thao tác này không thể hoàn tác", irreversible: "Tôi xác nhận thao tác này không thể hoàn tác", missingPost: "ID bài viết không tồn tại!", selectCategory: "Vui lòng chọn danh mục!" },
483
+ wiki: { loading: "🎉 Đang tải dữ liệu...", loadFailed: "⚠️ Không thể tải dữ liệu", empty: "💧 Chưa có dữ liệu", reply: "Trả lời", nickname: "Biệt danh: ", mysterious: "Hiệp khách bí ẩn" },
484
+ wikiPanel: { contributors: "Người đóng góp", difficulty: "Độ khó", popularity: "Độ phổ biến", updatedAt: "Cập nhật" },
485
+ wikiComments: { title: "Bình luận Wiki", empty: "💧 Chưa có bình luận", contentRequired: "Hãy nhập bình luận trước khi gửi", submitSuccess: "Gửi thành công, vui lòng chờ duyệt" },
486
+ wikiRevisions: { title: "Lịch sử phiên bản", version: "Phiên bản", contributor: "Người đóng góp", remark: "Ghi chú chỉnh sửa" },
466
487
  };
@@ -31,7 +31,9 @@ export default {
31
31
  switchAlternate: "切换马甲",
32
32
  themeStyle: "主题风格",
33
33
  logout: "退出登录",
34
- roleManage: "角色管理",
34
+ roleManage: "我的角色",
35
+ myTeams: "我的团队",
36
+ myRelations: "我的关系",
35
37
  favorites: "收藏订阅",
36
38
  dashboard: "个人中心",
37
39
  profile: "资料修改",
@@ -161,6 +163,10 @@ export default {
161
163
  browserNotSupportCopy: "浏览器不支持复制",
162
164
  confirm: "确定",
163
165
  cancel: "取消",
166
+ close: "关闭",
167
+ view: "查看",
168
+ submit: "提交",
169
+ actionSuccess: "操作成功",
164
170
  tip: "提示",
165
171
  },
166
172
  footer: {
@@ -205,6 +211,7 @@ export default {
205
211
  proVip: "专业版会员",
206
212
  preVip: "高级版会员",
207
213
  },
214
+ authorRole: { title: "作者角色" },
208
215
  authorPosts: {
209
216
  latest: "最新作品",
210
217
  noTitle: "{type}/无标题",
@@ -478,6 +485,8 @@ export default {
478
485
  noTitle: "无标题",
479
486
  anonymous: "匿名",
480
487
  },
488
+ postVersion: { title: "历史版本", collapse: "折叠", compare: "对比" },
489
+ postCollection: { title: "关联", collapse: "折叠" },
481
490
  simpleThx: {
482
491
  record: "打赏记录",
483
492
  },
@@ -490,6 +499,7 @@ export default {
490
499
  commentDisabled: "作者没有开启评论功能",
491
500
  authorSet: "作者设置了【",
492
501
  },
502
+ rightAffix: { goComment: "去评论", backToTop: "回到顶部" },
493
503
  suspendCommon: {
494
504
  more: "更多",
495
505
  pinButton: "固定按钮",
@@ -589,4 +599,15 @@ export default {
589
599
  test: "体服",
590
600
  success: "提交成功",
591
601
  },
602
+ accountReady: {
603
+ title: "⚠️ 完善账号安全信息", description: "为了保障 App 登录、账号找回和卡密等功能正常使用,请先补全以下账号安全信息。",
604
+ contactTitle: "绑定邮箱和手机号", contactDescription: "当前账号的邮箱或手机号尚未完善。请完成手机号绑定,并绑定且验证邮箱,否则后续可能无法找回账号。", bind: "去绑定",
605
+ passwordTitle: "设置登录密码", passwordDescription: "当前账号还没有设置密码。未设置密码时,可能无法使用卡密等功能,也无法在 App 中通过账号密码登录。", setPassword: "去设置", later: "7天后再说",
606
+ },
607
+ migrateCommunity: { title: "迁回原板块", postTitle: "标题", author: "作者", originalSection: "原板块", originalLink: "原链接", notAvailable: "该帖子不可迁移,不存在原帖子", confirm: "确认将该帖子迁回原板块?", success: "迁移成功" },
608
+ moveCommunity: { title: "迁移至论坛", category: "分类", categoryPlaceholder: "请选择帖子分类", introduction: "简介", contentPlaceholder: "请输入内容", images: "附图", irreversibleTip: "请确认此操作不可逆", irreversible: "我已确认此操作不可逆", missingPost: "文章ID不存在!", selectCategory: "请选择分类!" },
609
+ wiki: { loading: "🎉 数据加载中...", loadFailed: "⚠️ 数据加载异常", empty: "💧 暂无数据", reply: "回复", nickname: "昵称:", mysterious: "神秘侠士" },
610
+ wikiPanel: { contributors: "参与贡献", difficulty: "综合难度", popularity: "热度", updatedAt: "更新时间" },
611
+ wikiComments: { title: "百科评论", empty: "💧 暂无评论", contentRequired: "请先填写评论内容再尝试提交", submitSuccess: "提交成功,请等待审核" },
612
+ wikiRevisions: { title: "历史版本", version: "版本", contributor: "贡献者", remark: "修订说明" },
592
613
  };
@@ -32,6 +32,8 @@ export default {
32
32
  themeStyle: "主題風格",
33
33
  logout: "退出登入",
34
34
  roleManage: "角色管理",
35
+ myTeams: "我的團隊",
36
+ myRelations: "我的關係",
35
37
  favorites: "收藏訂閱",
36
38
  dashboard: "個人中心",
37
39
  profile: "資料修改",
@@ -161,6 +163,10 @@ export default {
161
163
  browserNotSupportCopy: "瀏覽器不支援複製",
162
164
  confirm: "確定",
163
165
  cancel: "取消",
166
+ close: "關閉",
167
+ view: "查看",
168
+ submit: "提交",
169
+ actionSuccess: "操作成功",
164
170
  tip: "提示",
165
171
  },
166
172
  footer: { icp: "湘ICP備2021002288號", about: "關於我們", doc: "幫助文件", repo: "代碼倉庫", feedback: "反饋建議" },
@@ -179,6 +185,7 @@ export default {
179
185
  proVip: "專業版會員",
180
186
  preVip: "高級版會員",
181
187
  },
188
+ authorRole: { title: "作者角色" },
182
189
  authorPosts: { latest: "最新作品", noTitle: "{type}/無標題" },
183
190
  authorFans: {
184
191
  title: "粉絲榜",
@@ -363,12 +370,15 @@ export default {
363
370
  noTitle: "無標題",
364
371
  anonymous: "匿名",
365
372
  },
373
+ postVersion: { title: "歷史版本", collapse: "折疊", compare: "對比" },
374
+ postCollection: { title: "關聯", collapse: "折疊" },
366
375
  simpleThx: { record: "打賞記錄" },
367
376
  thx: {
368
377
  copyright1: "所有原創作品,著作權歸作者所有,所有未經授權的非署名轉載或抄襲將有權追究法律責任,所有法律事務由專聘律師代理。",
369
378
  copyright2: "簽約作者獨家特約稿件,及所有魔盒官方評分作品用戶一經兌現則視為有償付費稿件,所有商業稿件的轉載引用需同時徵得魔盒平台授權。",
370
379
  },
371
380
  cmsSingle: { comment: "評論", commentDisabled: "作者沒有開啟評論功能", authorSet: "作者設定了【" },
381
+ rightAffix: { goComment: "去評論", backToTop: "回到頂部" },
372
382
  suspendCommon: {
373
383
  more: "更多",
374
384
  pinButton: "固定按鈕",
@@ -468,4 +478,15 @@ export default {
468
478
  test: "體服",
469
479
  success: "提交成功",
470
480
  },
481
+ accountReady: {
482
+ title: "⚠️ 完善帳號安全資訊", description: "為保障 App 登入、帳號找回和卡密等功能正常使用,請先補全以下帳號安全資訊。",
483
+ contactTitle: "綁定信箱和手機號碼", contactDescription: "目前帳號的信箱或手機號碼尚未完善。請完成手機號碼綁定,並綁定且驗證信箱,否則後續可能無法找回帳號。", bind: "去綁定",
484
+ passwordTitle: "設定登入密碼", passwordDescription: "目前帳號還沒有設定密碼。未設定密碼時,可能無法使用卡密等功能,也無法在 App 中透過帳號密碼登入。", setPassword: "去設定", later: "7天後再說",
485
+ },
486
+ migrateCommunity: { title: "遷回原版塊", postTitle: "標題", author: "作者", originalSection: "原版塊", originalLink: "原連結", notAvailable: "此貼文不可遷移,不存在原貼文", confirm: "確認將此貼文遷回原版塊?", success: "遷移成功" },
487
+ moveCommunity: { title: "遷移至論壇", category: "分類", categoryPlaceholder: "請選擇貼文分類", introduction: "簡介", contentPlaceholder: "請輸入內容", images: "附圖", irreversibleTip: "請確認此操作不可逆", irreversible: "我已確認此操作不可逆", missingPost: "文章ID不存在!", selectCategory: "請選擇分類!" },
488
+ wiki: { loading: "🎉 資料載入中...", loadFailed: "⚠️ 資料載入異常", empty: "💧 暫無資料", reply: "回覆", nickname: "暱稱:", mysterious: "神祕俠士" },
489
+ wikiPanel: { contributors: "參與貢獻", difficulty: "綜合難度", popularity: "熱度", updatedAt: "更新時間" },
490
+ wikiComments: { title: "百科評論", empty: "💧 暫無評論", contentRequired: "請先填寫評論內容再嘗試提交", submitSuccess: "提交成功,請等待審核" },
491
+ wikiRevisions: { title: "歷史版本", version: "版本", contributor: "貢獻者", remark: "修訂說明" },
471
492
  };
package/index.js CHANGED
@@ -42,6 +42,7 @@ import {
42
42
  getJx3boxUiAvailableLocales,
43
43
  setJx3boxUiLocale,
44
44
  } from "./i18n";
45
+ import i18nMixin from "./i18n/mixin";
45
46
 
46
47
  const components = {
47
48
  CommonHeader,
@@ -77,6 +78,8 @@ const components = {
77
78
  };
78
79
 
79
80
  const install = function (app) {
81
+ // 为全部公共组件提供统一的本地化入口,避免每个组件重复注册 mixin。
82
+ app.mixin(i18nMixin);
80
83
  Object.keys(components).forEach((key) => {
81
84
  app.component(key, components[key]);
82
85
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jx3box/jx3box-ui",
3
- "version": "2.3.12",
3
+ "version": "2.3.13",
4
4
  "description": "JX3BOX Vue3 UI",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -32,9 +32,9 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@element-plus/icons-vue": "^2.3.2",
35
- "@jx3box/jx3box-common": "^9.2.5",
36
- "@jx3box/jx3box-data": "^3.9.5",
37
- "@jx3box/jx3box-editor": "^3.2.7",
35
+ "@jx3box/jx3box-common": "^9.2.9",
36
+ "@jx3box/jx3box-data": "^3.9.6",
37
+ "@jx3box/jx3box-editor": "^3.2.9",
38
38
  "@jx3box/jx3box-emotion": "^1.3.1",
39
39
  "@jx3box/jx3box-macro": "^1.0.4",
40
40
  "@jx3box/jx3box-talent": "^1.3.14",
@@ -38,27 +38,27 @@
38
38
  v-model="accountReadyDialogVisible"
39
39
  class="c-header-account-ready"
40
40
  width="min(92vw, 520px)"
41
- title="⚠️ 完善账号安全信息"
41
+ :title="$jx3boxT('jx3boxUi.accountReady.title', '⚠️ 完善账号安全信息')"
42
42
  append-to-body
43
43
  @close="markAccountReadyDismissed"
44
44
  >
45
45
  <div class="c-header-account-ready__body">
46
- <p class="u-desc">为了保障 App 登录、账号找回和卡密等功能正常使用,请先补全以下账号安全信息。</p>
46
+ <p class="u-desc">{{ $jx3boxT('jx3boxUi.accountReady.description', '为了保障 App 登录、账号找回和卡密等功能正常使用,请先补全以下账号安全信息。') }}</p>
47
47
  <div class="u-list">
48
48
  <div class="u-item" v-if="accountReadyIssues.includes('contact')">
49
- <div class="u-title">绑定邮箱和手机号</div>
50
- <div class="u-text">当前账号的邮箱或手机号尚未完善。请完成手机号绑定,并绑定且验证邮箱,否则后续可能无法找回账号。</div>
51
- <el-button type="primary" @click="goAccountReady('/dashboard/notice')">去绑定</el-button>
49
+ <div class="u-title">{{ $jx3boxT('jx3boxUi.accountReady.contactTitle', '绑定邮箱和手机号') }}</div>
50
+ <div class="u-text">{{ $jx3boxT('jx3boxUi.accountReady.contactDescription', '当前账号的邮箱或手机号尚未完善。请完成手机号绑定,并绑定且验证邮箱,否则后续可能无法找回账号。') }}</div>
51
+ <el-button type="primary" @click="goAccountReady('/dashboard/notice')">{{ $jx3boxT('jx3boxUi.accountReady.bind', '去绑定') }}</el-button>
52
52
  </div>
53
53
  <div class="u-item" v-if="accountReadyIssues.includes('password')">
54
- <div class="u-title">设置登录密码</div>
55
- <div class="u-text">当前账号还没有设置密码。未设置密码时,可能无法使用卡密等功能,也无法在 App 中通过账号密码登录。</div>
56
- <el-button type="primary" @click="goAccountReady('/dashboard/pwd')">去设置</el-button>
54
+ <div class="u-title">{{ $jx3boxT('jx3boxUi.accountReady.passwordTitle', '设置登录密码') }}</div>
55
+ <div class="u-text">{{ $jx3boxT('jx3boxUi.accountReady.passwordDescription', '当前账号还没有设置密码。未设置密码时,可能无法使用卡密等功能,也无法在 App 中通过账号密码登录。') }}</div>
56
+ <el-button type="primary" @click="goAccountReady('/dashboard/pwd')">{{ $jx3boxT('jx3boxUi.accountReady.setPassword', '去设置') }}</el-button>
57
57
  </div>
58
58
  </div>
59
59
  </div>
60
60
  <template #footer>
61
- <el-button @click="accountReadyDialogVisible = false">7天后再说</el-button>
61
+ <el-button @click="accountReadyDialogVisible = false">{{ $jx3boxT('jx3boxUi.accountReady.later', '7天后再说') }}</el-button>
62
62
  </template>
63
63
  </el-dialog>
64
64
  </template>
@@ -4,34 +4,34 @@
4
4
  :width="isPhone ? '95%' : '600px'"
5
5
  v-model="visible"
6
6
  @close="close"
7
- title="迁回原板块"
7
+ :title="$jx3boxT('jx3boxUi.migrateCommunity.title', '迁回原板块')"
8
8
  append-to-body
9
9
  draggable
10
10
  >
11
11
  <div class="m-migrate-box" v-if="post?.ID">
12
12
  <div class="m-item">
13
- <div class="u-label">标题</div>
13
+ <div class="u-label">{{ $jx3boxT('jx3boxUi.migrateCommunity.postTitle', '标题') }}</div>
14
14
  <div class="u-value">{{ post?.post_title }}</div>
15
15
  </div>
16
16
  <div class="m-item">
17
- <div class="u-label">作者</div>
17
+ <div class="u-label">{{ $jx3boxT('jx3boxUi.migrateCommunity.author', '作者') }}</div>
18
18
  <div class="u-value">
19
19
  <a target="_blank" :href="authorLink(post?.post_author)">{{ `${post?.author}` }}</a>
20
20
  </div>
21
21
  </div>
22
22
  <div class="m-item">
23
- <div class="u-label">原板块</div>
23
+ <div class="u-label">{{ $jx3boxT('jx3boxUi.migrateCommunity.originalSection', '原板块') }}</div>
24
24
  <div class="u-value">{{ showType(post?.post_type) }}</div>
25
25
  </div>
26
26
  <div class="m-item">
27
- <div class="u-label">原链接</div>
28
- <div class="u-value"><a target="_blank" :href="postLink(post?.post_type, post?.ID)">查看</a></div>
27
+ <div class="u-label">{{ $jx3boxT('jx3boxUi.migrateCommunity.originalLink', '原链接') }}</div>
28
+ <div class="u-value"><a target="_blank" :href="postLink(post?.post_type, post?.ID)">{{ $jx3boxT('jx3boxUi.common.view', '查看') }}</a></div>
29
29
  </div>
30
30
  </div>
31
- <el-alert type="warning" title="该帖子不可迁移,不存在原帖子" :closable="false" show-icon v-else></el-alert>
31
+ <el-alert type="warning" :title="$jx3boxT('jx3boxUi.migrateCommunity.notAvailable', '该帖子不可迁移,不存在原帖子')" :closable="false" show-icon v-else></el-alert>
32
32
  <template #footer v-if="post?.ID">
33
- <el-button @click="close" :loading="loading">关闭</el-button>
34
- <el-button type="primary" @click="submit" :loading="loading">确认</el-button>
33
+ <el-button @click="close" :loading="loading">{{ $jx3boxT('jx3boxUi.common.close', '关闭') }}</el-button>
34
+ <el-button type="primary" @click="submit" :loading="loading">{{ $jx3boxT('jx3boxUi.common.confirm', '确认') }}</el-button>
35
35
  </template>
36
36
  </el-dialog>
37
37
  </template>
@@ -92,12 +92,12 @@ export default {
92
92
  if (!this.post) {
93
93
  return;
94
94
  }
95
- this.$confirm("确认将该帖子迁回原板块?")
95
+ this.$confirm(this.$jx3boxT("jx3boxUi.migrateCommunity.confirm", "确认将该帖子迁回原板块?"))
96
96
  .then(() => {
97
97
  this.loading = true;
98
98
  migrateCommunityPost({ community_id: this.communityId })
99
99
  .then((res) => {
100
- this.$message.success("迁移成功");
100
+ this.$message.success(this.$jx3boxT("jx3boxUi.migrateCommunity.success", "迁移成功"));
101
101
  this.close();
102
102
  location.href = "/community";
103
103
  })
@@ -4,12 +4,12 @@
4
4
  :width="isPhone ? '95%' : '600px'"
5
5
  v-model="visible"
6
6
  @close="close"
7
- title="迁移至论坛"
7
+ :title="$jx3boxT('jx3boxUi.moveCommunity.title', '迁移至论坛')"
8
8
  append-to-body
9
9
  >
10
10
  <el-form :model="form" ref="form" :rules="rules" :label-position="isPhone ? 'top' : 'left'" label-width="80px">
11
- <el-form-item label="分类" prop="category">
12
- <el-select v-model="form.category" placeholder="请选择帖子分类" style="width: 100%" filterable>
11
+ <el-form-item :label="$jx3boxT('jx3boxUi.moveCommunity.category', '分类')" prop="category">
12
+ <el-select v-model="form.category" :placeholder="$jx3boxT('jx3boxUi.moveCommunity.categoryPlaceholder', '请选择帖子分类')" style="width: 100%" filterable>
13
13
  <el-option
14
14
  v-for="item in categoryList"
15
15
  :key="item.id"
@@ -18,12 +18,12 @@
18
18
  ></el-option>
19
19
  </el-select>
20
20
  </el-form-item>
21
- <el-form-item label="简介">
22
- <el-input type="textarea" :rows="5" placeholder="请输入内容" v-model="form.introduction"> </el-input>
21
+ <el-form-item :label="$jx3boxT('jx3boxUi.moveCommunity.introduction', '简介')">
22
+ <el-input type="textarea" :rows="5" :placeholder="$jx3boxT('jx3boxUi.moveCommunity.contentPlaceholder', '请输入内容')" v-model="form.introduction"> </el-input>
23
23
  </el-form-item>
24
24
  </el-form>
25
25
 
26
- <el-divider content-position="left">附图</el-divider>
26
+ <el-divider content-position="left">{{ $jx3boxT('jx3boxUi.moveCommunity.images', '附图') }}</el-divider>
27
27
  <div class="u-imgs">
28
28
  <div :class="`u-imgs-item`" v-for="(item, i) in form.extra_images" :key="i">
29
29
  <el-image :src="item" fit="cover" style="width: 148px; height: 148px" />
@@ -33,15 +33,15 @@
33
33
  <el-divider content-position="left"></el-divider>
34
34
 
35
35
  <div class="u_r_box">
36
- <el-popover placement="top" trigger="manual" size="mini" content="请确认此操作不可逆" v-model="visible">
36
+ <el-popover placement="top" trigger="manual" size="mini" :content="$jx3boxT('jx3boxUi.moveCommunity.irreversibleTip', '请确认此操作不可逆')" v-model="visible">
37
37
  <template #reference>
38
- <el-checkbox v-model="checked">我已确认此操作不可逆</el-checkbox>
38
+ <el-checkbox v-model="checked">{{ $jx3boxT('jx3boxUi.moveCommunity.irreversible', '我已确认此操作不可逆') }}</el-checkbox>
39
39
  </template>
40
40
  </el-popover>
41
41
  </div>
42
42
  <template #footer>
43
- <el-button @click="close">取 消</el-button>
44
- <el-button type="primary" @click="onConfirm" :disabled="!checked">确 定</el-button>
43
+ <el-button @click="close">{{ $jx3boxT('jx3boxUi.common.cancel', '取消') }}</el-button>
44
+ <el-button type="primary" @click="onConfirm" :disabled="!checked">{{ $jx3boxT('jx3boxUi.common.confirm', '确定') }}</el-button>
45
45
  </template>
46
46
  </el-dialog>
47
47
  </template>
@@ -77,7 +77,7 @@ export default {
77
77
  categoryList: [],
78
78
  isPhone: window.innerWidth < 768,
79
79
  rules: {
80
- category: [{ required: true, message: "请选择分类", trigger: "blur" }],
80
+ category: [{ required: true, message: this.$jx3boxT("jx3boxUi.moveCommunity.selectCategory", "请选择分类!"), trigger: "blur" }],
81
81
  },
82
82
  };
83
83
  },
@@ -107,11 +107,11 @@ export default {
107
107
  },
108
108
  onConfirm() {
109
109
  if (!this.post?.ID) {
110
- this.$message.error("文章ID不存在!");
110
+ this.$message.error(this.$jx3boxT("jx3boxUi.moveCommunity.missingPost", "文章ID不存在!"));
111
111
  return;
112
112
  }
113
113
  if (!this.form.category) {
114
- this.$message.error("请选择分类!");
114
+ this.$message.error(this.$jx3boxT("jx3boxUi.moveCommunity.selectCategory", "请选择分类!"));
115
115
  return;
116
116
  }
117
117
  if (!this.checked) {
@@ -122,7 +122,7 @@ export default {
122
122
  this.$refs.form?.validate((valid) => {
123
123
  if (valid) {
124
124
  recoverTopicFromPosts(this.form).then(() => {
125
- this.$message.success("操作成功");
125
+ this.$message.success(this.$jx3boxT("jx3boxUi.common.actionSuccess", "操作成功"));
126
126
  this.close();
127
127
  this.clearForm();
128
128
  });
@@ -71,29 +71,29 @@
71
71
  </div>
72
72
 
73
73
  <el-button-group class="u-actions">
74
- <a class="el-button el-button--default is-plain" href="/dashboard/config">{{
75
- $jx3boxT("jx3boxUi.commonHeader.config", "偏好设置")
76
- }}</a>
77
74
  <a class="el-button el-button--default is-plain" @click="changeAlternate">{{
78
75
  $jx3boxT("jx3boxUi.commonHeader.switchAlternate", "切换马甲")
79
76
  }}</a>
80
- <a class="el-button el-button--default is-plain" href="/dashboard/frame">{{
77
+ <a class="el-button el-button--default is-plain" href="/dashboard/config">{{
78
+ $jx3boxT("jx3boxUi.commonHeader.config", "偏好设置")
79
+ }}</a>
80
+ <a class="el-button el-button--default is-plain" href="/dashboard/theme">{{
81
81
  $jx3boxT("jx3boxUi.commonHeader.themeStyle", "主题风格")
82
82
  }}</a>
83
83
  </el-button-group>
84
84
 
85
85
  <div class="u-other">
86
86
  <a href="/dashboard/role" class="u-item"
87
- ><el-icon><User /></el-icon>{{ $jx3boxT("jx3boxUi.commonHeader.roleManage", "角色管理") }}
87
+ ><el-icon><User /></el-icon>{{ $jx3boxT("jx3boxUi.commonHeader.roleManage", "我的角色") }}
88
88
  </a>
89
- <a href="/dashboard/fav" class="u-item"
90
- ><el-icon><Star /></el-icon>{{ $jx3boxT("jx3boxUi.commonHeader.favorites", "收藏订阅") }}
89
+ <a href="/team/my/org" class="u-item"
90
+ ><el-icon><School /></el-icon>{{ $jx3boxT("jx3boxUi.commonHeader.myTeams", "我的团队") }}
91
91
  </a>
92
- <a href="/dashboard/mall" class="u-item"
93
- ><el-icon><Memo /></el-icon>{{ $jx3boxT("jx3boxUi.commonHeader.orderCenter", "订单中心") }}
92
+ <a href="/dashboard/privacy" class="u-item"
93
+ ><el-icon><Connection /></el-icon>{{ $jx3boxT("jx3boxUi.commonHeader.myRelations", "我的关系") }}
94
94
  </a>
95
- <a href="/dashboard/config" class="u-item"
96
- ><el-icon><Help /></el-icon>{{ $jx3boxT("jx3boxUi.commonHeader.dashboard", "个人中心") }}
95
+ <a href="/dashboard/fav" class="u-item"
96
+ ><el-icon><Star /></el-icon>{{ $jx3boxT("jx3boxUi.commonHeader.favorites", "收藏订阅") }}
97
97
  </a>
98
98
  <hr />
99
99
  <a href="/dashboard/profile" class="u-item"
@@ -103,6 +103,9 @@
103
103
  ><el-icon><Phone /></el-icon>{{ $jx3boxT("jx3boxUi.commonHeader.feedbackHelp", "反馈帮助") }}
104
104
  </a>
105
105
  <hr />
106
+ <div class="u-dashboard">
107
+ <a href="/dashboard">{{ $jx3boxT("jx3boxUi.commonHeader.dashboard", "个人中心") }}</a>
108
+ </div>
106
109
  <div class="u-logout">
107
110
  <el-button @click="logout" plain>{{ $jx3boxT("jx3boxUi.commonHeader.logout", "退出登录") }}</el-button>
108
111
  </div>
@@ -628,11 +631,28 @@ export default {
628
631
 
629
632
  .u-logout {
630
633
  padding: 0 10px 10px 10px;
631
- .mt(10px);
632
634
 
633
635
  .el-button {
634
636
  width: 100%;
635
637
  }
636
638
  }
639
+
640
+ .u-dashboard {
641
+ padding: 0 10px 10px;
642
+
643
+ a {
644
+ display: block;
645
+ padding: 8px 15px;
646
+ color: #fff;
647
+ text-align: center;
648
+ background: @v4primary;
649
+ .r(4px);
650
+
651
+ &:hover {
652
+ color: #fff;
653
+ background: lighten(@v4primary, 8%);
654
+ }
655
+ }
656
+ }
637
657
  }
638
658
  </style>
@@ -2,10 +2,10 @@
2
2
  <div class="c-post-collection" v-if="list && list.length">
3
3
  <div class="m-title">
4
4
  <div class="c-post-collection-title">
5
- <el-icon class="u-icon"><Connection>></Connection></el-icon> 关联
5
+ <el-icon class="u-icon"><Connection>></Connection></el-icon> {{ $jx3boxT("jx3boxUi.postCollection.title", "关联") }}
6
6
  </div>
7
7
  <div class="u-op" @click="toggle">
8
- <el-icon><DCaret></DCaret></el-icon> 折叠
8
+ <el-icon><DCaret></DCaret></el-icon> {{ $jx3boxT("jx3boxUi.postCollection.collapse", "折叠") }}
9
9
  </div>
10
10
  </div>
11
11
  <transition name="collapse">
@@ -2,10 +2,10 @@
2
2
  <div class="c-post-version" v-if="list && list.length">
3
3
  <div class="m-title">
4
4
  <div class="u-title">
5
- <el-icon class="u-icon"><Clock /></el-icon>历史版本
5
+ <el-icon class="u-icon"><Clock /></el-icon>{{ $jx3boxT("jx3boxUi.postVersion.title", "历史版本") }}
6
6
  </div>
7
7
  <div class="u-op" @click="toggle">
8
- <el-icon><DCaret></DCaret></el-icon> 折叠
8
+ <el-icon><DCaret></DCaret></el-icon> {{ $jx3boxT("jx3boxUi.postVersion.collapse", "折叠") }}
9
9
  </div>
10
10
  </div>
11
11
  <transition name="collapse">
@@ -15,7 +15,7 @@
15
15
  <span>{{ item.version }}</span> - <span>{{ item.created_at }}</span>
16
16
  </div>
17
17
  <el-button class="u-compare" size="small" type="primary" link
18
- ><el-icon class="u-icon"><Sort></Sort></el-icon>对比</el-button
18
+ ><el-icon class="u-icon"><Sort></Sort></el-icon>{{ $jx3boxT("jx3boxUi.postVersion.compare", "对比") }}</el-button
19
19
  >
20
20
  </li>
21
21
  </ul>
@@ -10,12 +10,12 @@
10
10
  :author_id="authorId"
11
11
  ></fav>
12
12
  </div>
13
- <el-tooltip v-if="showCommentBtn && showComment" effect="dark" content="去评论" placement="left">
13
+ <el-tooltip v-if="showCommentBtn && showComment" effect="dark" :content="$jx3boxT('jx3boxUi.rightAffix.goComment', '去评论')" placement="left">
14
14
  <div class="u-item" @click="toComment">
15
15
  <el-icon class="u-icon"><ChatDotSquare></ChatDotSquare></el-icon>
16
16
  </div>
17
17
  </el-tooltip>
18
- <el-tooltip effect="dark" content="回到顶部" placement="bottom">
18
+ <el-tooltip effect="dark" :content="$jx3boxT('jx3boxUi.rightAffix.backToTop', '回到顶部')" placement="bottom">
19
19
  <div class="u-item" v-show="scrollBtnShow" @click="goTop">
20
20
  <div class="u-to-top"></div>
21
21
  </div>
@@ -2,14 +2,14 @@
2
2
  <WikiPanel class="c-wiki-comments" scene="detail">
3
3
  <template #head-title>
4
4
  <i class="u-icon el-icon-chat-line-round"></i>
5
- <span class="u-txt">百科评论</span>
5
+ <span class="u-txt">{{ $jx3boxT('jx3boxUi.wikiComments.title', '百科评论') }}</span>
6
6
  </template>
7
7
  <template #body>
8
8
  <div class="m-comments-panel" v-loading="loading">
9
9
  <div class="u-empty" v-if="!comments || !comments.length">
10
- <span v-if="comments === null">🎉 数据加载中...</span>
11
- <span v-if="comments === false">⚠️ 数据加载异常</span>
12
- <span v-if="comments && !comments.length">💧 暂无评论</span>
10
+ <span v-if="comments === null">{{ $jx3boxT('jx3boxUi.wiki.loading', '🎉 数据加载中...') }}</span>
11
+ <span v-if="comments === false">{{ $jx3boxT('jx3boxUi.wiki.loadFailed', '⚠️ 数据加载异常') }}</span>
12
+ <span v-if="comments && !comments.length">{{ $jx3boxT('jx3boxUi.wikiComments.empty', '💧 暂无评论') }}</span>
13
13
  </div>
14
14
  <!-- 递归评论组件 -->
15
15
  <wiki-comment :comments="comments" :source-id="sourceId" />
@@ -27,16 +27,16 @@
27
27
  <div id="m-reply-form" class="m-reply-form">
28
28
  <h4 class="u-title">
29
29
  <i class="el-icon-chat-dot-round"></i>
30
- <span>回复</span>
30
+ <span>{{ $jx3boxT('jx3boxUi.wiki.reply', '回复') }}</span>
31
31
  </h4>
32
32
  <textarea class="u-reply-content" v-model="reply_form.content"></textarea>
33
33
  <div class="u-author">
34
- <span>昵称:</span>
34
+ <span>{{ $jx3boxT('jx3boxUi.wiki.nickname', '昵称:') }}</span>
35
35
  <input v-model="reply_form.user_nickname" type="text" />
36
36
  </div>
37
37
  <el-button type="primary" class="u-submit" @click="create_comment(reply_form)">
38
38
  <i class="el-icon-check"></i>
39
- <span>提交</span>
39
+ <span>{{ $jx3boxT('jx3boxUi.common.submit', '提交') }}</span>
40
40
  </el-button>
41
41
  </div>
42
42
  </div>
@@ -67,7 +67,7 @@ export default {
67
67
  comments: null,
68
68
  reply_form: {
69
69
  content: "",
70
- user_nickname: User.getInfo().name,
70
+ user_nickname: this.getDefaultNickname(),
71
71
  },
72
72
  page: 1,
73
73
  pageSize: 10,
@@ -84,6 +84,7 @@ export default {
84
84
  get_comments() {
85
85
  if (!this.type || !this.sourceId) return;
86
86
  this.loading = true;
87
+ const defaultNickname = this.getDefaultNickname();
87
88
  wikiComment
88
89
  .list({ type: this.type, id: this.sourceId }, { client: this.client, page: this.page })
89
90
  .then((res) => {
@@ -93,7 +94,7 @@ export default {
93
94
  comments[i]["reply_form"] = {
94
95
  show: false,
95
96
  content: "",
96
- user_nickname: User.getInfo().name,
97
+ user_nickname: this.getDefaultNickname(),
97
98
  };
98
99
  }
99
100
  this.page = res.data.page;
@@ -120,7 +121,7 @@ export default {
120
121
  item.reply_form = {
121
122
  show: false,
122
123
  content: "",
123
- user_nickname: User.getInfo().name,
124
+ user_nickname: defaultNickname,
124
125
  };
125
126
  return item;
126
127
  });
@@ -134,7 +135,7 @@ export default {
134
135
  // 校验评论内容
135
136
  if (!form.content) {
136
137
  this.$message({
137
- message: "请先填写评论内容再尝试提交",
138
+ message: this.$jx3boxT("jx3boxUi.wikiComments.contentRequired", "请先填写评论内容再尝试提交"),
138
139
  type: "warning",
139
140
  });
140
141
  return;
@@ -143,7 +144,7 @@ export default {
143
144
  type: this.type,
144
145
  source_id: this.sourceId,
145
146
  parent_id: parent_id,
146
- user_nickname: form.user_nickname || User.getInfo().name || "神秘侠士",
147
+ user_nickname: form.user_nickname || this.getDefaultNickname(),
147
148
  content: form.content,
148
149
  client: this.client,
149
150
  };
@@ -153,7 +154,7 @@ export default {
153
154
  res = res.data;
154
155
  form.content = "";
155
156
  this.$message({
156
- message: "提交成功,请等待审核",
157
+ message: this.$jx3boxT("jx3boxUi.wikiComments.submitSuccess", "提交成功,请等待审核"),
157
158
  type: "success",
158
159
  });
159
160
  })
@@ -161,6 +162,9 @@ export default {
161
162
  form.show = false;
162
163
  });
163
164
  },
165
+ getDefaultNickname() {
166
+ return User.isLogin() ? User.getInfo().name : "神秘侠士";
167
+ },
164
168
  handleCurrentChange(page) {
165
169
  this.page = page;
166
170
  this.get_comments();
@@ -21,7 +21,7 @@
21
21
  <div class="m-wiki-metas" v-if="wikiPost && wikiPost.post">
22
22
  <!-- 参与贡献 -->
23
23
  <div class="u-meta" v-if="wikiPost.users && wikiPost.users.length">
24
- <em class="u-label">参与贡献</em>
24
+ <em class="u-label">{{ $jx3boxT('jx3boxUi.wikiPanel.contributors', '参与贡献') }}</em>
25
25
  <a
26
26
  class="u-value u-creator"
27
27
  v-for="(user, key) in wikiPost.users"
@@ -34,19 +34,19 @@
34
34
  </div>
35
35
  <!-- 综合难度 -->
36
36
  <div class="u-meta" v-if="wikiPost.post && wikiPost.post.level">
37
- <em class="u-label">综合难度</em>
37
+ <em class="u-label">{{ $jx3boxT('jx3boxUi.wikiPanel.difficulty', '综合难度') }}</em>
38
38
  <span class="u-value">
39
39
  <i class="el-icon-star-on" v-for="i in wikiPost.post.level" :key="i"></i>
40
40
  </span>
41
41
  </div>
42
42
  <!-- 热度 -->
43
43
  <div class="u-meta" v-if="stat">
44
- <em class="u-label">热度</em>
44
+ <em class="u-label">{{ $jx3boxT('jx3boxUi.wikiPanel.popularity', '热度') }}</em>
45
45
  <span class="u-value" v-text="stat.views"></span>
46
46
  </div>
47
47
  <!-- 更新时间 -->
48
48
  <div class="u-meta" v-if="wikiPost.post && wikiPost.post.updated">
49
- <em class="u-label">更新时间</em>
49
+ <em class="u-label">{{ $jx3boxT('jx3boxUi.wikiPanel.updatedAt', '更新时间') }}</em>
50
50
  <span class="u-value" v-text="ts2str(wikiPost.post.updated)"></span>
51
51
  </div>
52
52
  </div>
@@ -2,22 +2,22 @@
2
2
  <WikiPanel class="c-wiki-revisions" scene="detail">
3
3
  <template #head-title>
4
4
  <i class="u-icon el-icon-time"></i>
5
- <span class="u-txt">历史版本</span>
5
+ <span class="u-txt">{{ $jx3boxT('jx3boxUi.wikiRevisions.title', '历史版本') }}</span>
6
6
  </template>
7
7
  <template #body>
8
8
  <div class="m-revisions-panel">
9
9
  <div class="u-empty" v-if="!versions || !versions.length">
10
- <span v-if="versions === null">🎉 数据加载中...</span>
11
- <span v-if="versions === false">⚠️ 数据加载异常</span>
12
- <span v-if="versions && !versions.length">💧 暂无数据</span>
10
+ <span v-if="versions === null">{{ $jx3boxT('jx3boxUi.wiki.loading', '🎉 数据加载中...') }}</span>
11
+ <span v-if="versions === false">{{ $jx3boxT('jx3boxUi.wiki.loadFailed', '⚠️ 数据加载异常') }}</span>
12
+ <span v-if="versions && !versions.length">{{ $jx3boxT('jx3boxUi.wiki.empty', '💧 暂无数据') }}</span>
13
13
  </div>
14
14
  <table v-if="versions && versions.length" class="m-histories">
15
15
  <thead>
16
16
  <tr>
17
- <th>版本</th>
18
- <th>更新时间</th>
19
- <th>贡献者</th>
20
- <th>修订说明</th>
17
+ <th>{{ $jx3boxT('jx3boxUi.wikiRevisions.version', '版本') }}</th>
18
+ <th>{{ $jx3boxT('jx3boxUi.wikiPanel.updatedAt', '更新时间') }}</th>
19
+ <th>{{ $jx3boxT('jx3boxUi.wikiRevisions.contributor', '贡献者') }}</th>
20
+ <th>{{ $jx3boxT('jx3boxUi.wikiRevisions.remark', '修订说明') }}</th>
21
21
  </tr>
22
22
  </thead>
23
23
  <tr class="history" v-for="(ver, key) in versions" :key="key">