@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.
- package/assets/css/interact/share2.less +101 -65
- package/i18n/messages/en-US.js +25 -4
- package/i18n/messages/vi.js +21 -0
- package/i18n/messages/zh-CN.js +22 -1
- package/i18n/messages/zh-TW.js +21 -0
- package/index.js +3 -0
- package/package.json +4 -4
- package/src/CommonHeader.vue +9 -9
- package/src/bread/MigrateCommunity.vue +11 -11
- package/src/bread/MoveToCommunityDialog.vue +14 -14
- package/src/header/userInfo.vue +32 -12
- package/src/single/PostCollection.vue +2 -2
- package/src/single/PostVersion.vue +3 -3
- package/src/single/RightAffix.vue +2 -2
- package/src/wiki/WikiComments.vue +17 -13
- package/src/wiki/WikiPanel.vue +4 -4
- package/src/wiki/WikiRevisions.vue +8 -8
|
@@ -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
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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-
|
|
38
|
-
|
|
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
|
-
|
|
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
|
-
|
|
72
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
}
|
package/i18n/messages/en-US.js
CHANGED
|
@@ -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
|
|
14
|
-
originFull: "
|
|
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: "
|
|
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
|
};
|
package/i18n/messages/vi.js
CHANGED
|
@@ -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
|
};
|
package/i18n/messages/zh-CN.js
CHANGED
|
@@ -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
|
};
|
package/i18n/messages/zh-TW.js
CHANGED
|
@@ -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.
|
|
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.
|
|
36
|
-
"@jx3box/jx3box-data": "^3.9.
|
|
37
|
-
"@jx3box/jx3box-editor": "^3.2.
|
|
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",
|
package/src/CommonHeader.vue
CHANGED
|
@@ -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"
|
|
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"
|
|
50
|
-
<div class="u-text"
|
|
51
|
-
<el-button type="primary" @click="goAccountReady('/dashboard/notice')"
|
|
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"
|
|
55
|
-
<div class="u-text"
|
|
56
|
-
<el-button type="primary" @click="goAccountReady('/dashboard/pwd')"
|
|
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
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
28
|
-
<div class="u-value"><a target="_blank" :href="postLink(post?.post_type, post?.ID)"
|
|
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"
|
|
34
|
-
<el-button type="primary" @click="submit" :loading="loading"
|
|
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"
|
|
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"
|
|
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"
|
|
44
|
-
<el-button type="primary" @click="onConfirm" :disabled="!checked"
|
|
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: "
|
|
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
|
});
|
package/src/header/userInfo.vue
CHANGED
|
@@ -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/
|
|
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="/
|
|
90
|
-
><el-icon><
|
|
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/
|
|
93
|
-
><el-icon><
|
|
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/
|
|
96
|
-
><el-icon><
|
|
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
|
|
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"
|
|
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"
|
|
11
|
-
<span v-if="comments === false"
|
|
12
|
-
<span v-if="comments && !comments.length"
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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 ||
|
|
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();
|
package/src/wiki/WikiPanel.vue
CHANGED
|
@@ -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"
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
11
|
-
<span v-if="versions === false"
|
|
12
|
-
<span v-if="versions && !versions.length"
|
|
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
|
|
18
|
-
<th
|
|
19
|
-
<th
|
|
20
|
-
<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">
|