@jx3box/jx3box-ui 2.0.2 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +101 -2
  2. package/assets/css/bread/admin.less +32 -0
  3. package/assets/css/bread/breadcrumb.less +38 -0
  4. package/assets/css/bread/crumb.less +6 -0
  5. package/assets/css/comment/quick-reply.less +12 -1
  6. package/assets/css/common/bottom.less +4 -0
  7. package/assets/css/common/footer.less +23 -0
  8. package/assets/css/common/left-sidebar.less +28 -0
  9. package/assets/css/common/main.less +21 -0
  10. package/assets/css/common/right-sidebar.less +31 -0
  11. package/assets/css/common/suspend-common.less +51 -0
  12. package/assets/css/editor/combo.less +51 -0
  13. package/assets/css/editor/resource.less +64 -0
  14. package/assets/css/editor/tinymce.less +20 -0
  15. package/assets/css/editor/upload.less +25 -0
  16. package/assets/css/filters/client-by.less +6 -0
  17. package/assets/css/header/box.less +34 -0
  18. package/assets/css/interact/like2.less +4 -0
  19. package/assets/css/interact/share2.less +17 -0
  20. package/assets/css/mixin.less +3 -0
  21. package/assets/css/module/author.less +41 -0
  22. package/assets/css/module/buff.less +10 -0
  23. package/assets/css/module/directory.less +22 -0
  24. package/assets/css/module/icon.less +4 -0
  25. package/assets/css/module/item.less +50 -0
  26. package/assets/css/module/item_simple.less +7 -0
  27. package/assets/css/module/jx3_element.less +2 -1
  28. package/assets/css/module/macro.less +17 -0
  29. package/assets/css/module/npc.less +46 -1
  30. package/assets/css/module/resource.less +13 -0
  31. package/assets/css/module/skill.less +9 -0
  32. package/assets/css/module/talent.less +71 -0
  33. package/assets/css/single/author.less +24 -10
  34. package/assets/css/single/cms-single.less +16 -0
  35. package/assets/css/single/thx.less +51 -0
  36. package/assets/css/tinymce/_.less +7 -1
  37. package/assets/css/tinymce/a.less +5 -0
  38. package/assets/css/tinymce/code.less +22 -0
  39. package/assets/css/tinymce/combo.less +12 -0
  40. package/assets/css/tinymce/fold.less +12 -0
  41. package/assets/css/tinymce/h.less +10 -0
  42. package/assets/css/tinymce/hr.less +2 -0
  43. package/assets/css/tinymce/img.less +3 -0
  44. package/assets/css/tinymce/imgpreview.less +6 -1
  45. package/assets/css/tinymce/latex.less +7 -1
  46. package/assets/css/tinymce/list.less +12 -0
  47. package/assets/css/tinymce/macro.less +7 -1
  48. package/assets/css/tinymce/nextpage.less +14 -0
  49. package/assets/css/tinymce/p.less +2 -0
  50. package/assets/css/tinymce/pz.less +6 -0
  51. package/assets/css/tinymce/qixue.less +6 -0
  52. package/assets/css/tinymce/quote.less +2 -0
  53. package/assets/css/tinymce/table.less +13 -1
  54. package/assets/css/tinymce/video.less +18 -0
  55. package/assets/img/author/rss.svg +1 -0
  56. package/assets/img/common/logo-v2.svg +14 -0
  57. package/i18n/messages/en-US.js +1 -0
  58. package/i18n/messages/vi.js +1 -0
  59. package/i18n/messages/zh-CN.js +1 -0
  60. package/i18n/messages/zh-TW.js +1 -0
  61. package/index.js +2 -0
  62. package/package.json +1 -1
  63. package/service/comment.js +56 -96
  64. package/src/App.vue +31 -31
  65. package/src/Breadcrumb.vue +16 -20
  66. package/src/Icon.vue +53 -0
  67. package/src/author/AuthorFans.vue +15 -5
  68. package/src/author/AuthorFollow.vue +1 -1
  69. package/src/author/AuthorGift.vue +9 -9
  70. package/src/author/AuthorHonor.vue +9 -8
  71. package/src/author/AuthorInfo.vue +10 -1
  72. package/src/author/AuthorLink.vue +8 -1
  73. package/src/author/AuthorPosts.vue +14 -8
  74. package/src/author/AuthorRss.vue +28 -34
  75. package/src/bread/Admin.vue +19 -6
  76. package/src/bread/Crumb.vue +7 -2
  77. package/src/bread/DesignTask.vue +44 -37
  78. package/src/comment/Avatar.vue +26 -8
  79. package/src/comment/CommentContent.vue +62 -17
  80. package/src/comment/CommentContentSimple.vue +54 -15
  81. package/src/comment/CommentWithReply.vue +22 -1
  82. package/src/comment/ReplyForReply.vue +14 -1
  83. package/src/comment/ReplyItem.vue +10 -1
  84. package/src/comment/ReplyList.vue +19 -1
  85. package/src/editor/BoxResource.vue +2 -2
  86. package/src/editor/Resource.vue +6 -6
  87. package/src/filters/clientBy.vue +14 -1
  88. package/src/filters/menuBy.vue +14 -1
  89. package/src/filters/orderBy.vue +1 -1
  90. package/src/filters/tagBy.vue +10 -1
  91. package/src/filters/versionBy.vue +6 -1
  92. package/src/filters/zlpBy.vue +6 -1
  93. package/src/footer/resource.vue +3 -1
  94. package/src/header/alternate.vue +2 -2
  95. package/src/header/asset.vue +13 -1
  96. package/src/header/box.vue +10 -5
  97. package/src/header/box2.vue +279 -247
  98. package/src/header/client.vue +6 -1
  99. package/src/header/lang.vue +1 -2
  100. package/src/header/logo.vue +3 -3
  101. package/src/header/manage.vue +0 -1
  102. package/src/header/nav.vue +1 -1
  103. package/src/header/userInfo.vue +18 -5
  104. package/src/interact/BoxcoinAdmin.vue +46 -5
  105. package/src/interact/BoxcoinRecords.vue +22 -1
  106. package/src/interact/BoxcoinUser.vue +49 -8
  107. package/src/interact/Contributors.vue +7 -11
  108. package/src/interact/Fav.vue +22 -1
  109. package/src/interact/Like.vue +10 -1
  110. package/src/interact/Share.vue +18 -1
  111. package/src/interact/WatchLater.vue +3 -3
  112. package/src/main.js +3 -1
  113. package/src/single/Author.vue +15 -10
  114. package/src/single/{cms-single.vue → CmsSingle.vue} +10 -1
  115. package/src/single/Collection.vue +10 -1
  116. package/src/single/Comment.vue +20 -3
  117. package/src/single/Creators.vue +10 -1
  118. package/src/single/PostDirectory.vue +1 -1
  119. package/src/single/PostHeader.vue +18 -1
  120. package/src/single/SimpleThx.vue +2 -2
  121. package/src/single/Thx.vue +45 -27
  122. package/assets/img/author/msg.svg +0 -55
  123. package/src/Bottom.vue +0 -23
  124. package/src/Box.vue +0 -149
  125. package/src/author/AuthorMsg.vue +0 -25
  126. package/src/bread/AdminButton.vue +0 -31
  127. package/src/header/bus.js +0 -9
  128. /package/docs/{README.md → i18n.md} +0 -0
@@ -16,12 +16,7 @@
16
16
  </div>
17
17
  <div class="u-search">
18
18
  <i class="el-icon-search u-search-icon"></i>
19
- <input
20
- v-model.trim="searchQuery"
21
- class="u-search-input"
22
- type="text"
23
- placeholder="搜索应用"
24
- />
19
+ <input v-model.trim="searchQuery" class="u-search-input" type="text" placeholder="搜索应用" />
25
20
  <button v-if="searchQuery" class="u-search-clear" type="button" @click="searchQuery = ''">
26
21
  <i class="el-icon-close"></i>
27
22
  </button>
@@ -35,7 +30,7 @@
35
30
  <div class="u-icon-wrap">
36
31
  <img class="u-pic" svg-inline :src="homeicon" />
37
32
  </div>
38
- <span class="u-txt">首页</span>
33
+ <span class="u-txt">{{ $jx3boxT("jx3boxUi.header.home", "首页") }}</span>
39
34
  </a>
40
35
  </li>
41
36
  <li v-for="(item, i) in filteredList" :key="i">
@@ -46,6 +41,14 @@
46
41
  <span class="u-txt">{{ item.abbr }}</span>
47
42
  </a>
48
43
  </li>
44
+ <li v-if="allMatched && filteredList.length > 0">
45
+ <a class="u-item" href="/app">
46
+ <div class="u-icon-wrap">
47
+ <img class="u-pic" svg-inline :src="allicon" />
48
+ </div>
49
+ <span class="u-txt">{{ $jx3boxT("jx3boxUi.header.all", "全部") }}</span>
50
+ </a>
51
+ </li>
49
52
  </ul>
50
53
  <div v-if="searchQuery && !homeMatched && filteredList.length === 0" class="u-empty">
51
54
  未找到匹配应用
@@ -57,30 +60,44 @@
57
60
  </template>
58
61
 
59
62
  <script>
60
- import Bus from "./bus";
63
+ import Bus from "../../utils/bus";
61
64
  import JX3BOX from "@jx3box/jx3box-common/data/jx3box.json";
65
+ import i18nMixin from "../../i18n/mixin";
62
66
  import box from "../../assets/data/box.json";
63
67
  import { getMenu } from "../../service/header.js";
68
+ import axios from "axios";
69
+ import { flatten } from "lodash";
64
70
 
65
- const { __imgPath, __cdn } = JX3BOX;
71
+ const { __cdn, __imgPath } = JX3BOX;
66
72
 
67
73
  export default {
68
74
  name: "Box2",
75
+ mixins: [i18nMixin],
69
76
  data: function () {
70
77
  return {
71
78
  status: false,
72
79
  searchQuery: "",
73
- data: box,
80
+ data: [],
74
81
  client: location.href.includes("origin") ? "origin" : "std",
75
82
  };
76
83
  },
77
84
  computed: {
78
85
  homeicon: function () {
79
- return __imgPath + "image/box/home.svg";
86
+ return this.getBoxIcon("home.svg");
87
+ },
88
+ allicon: function () {
89
+ return this.getBoxIcon("more.svg");
80
90
  },
81
91
  list: function () {
82
92
  return this.data.filter((item) => {
83
- return item.status && (item.client == this.client || item.client == "all");
93
+ const currentClient = String(this.client || "").toLowerCase();
94
+ const rawClient = item.client;
95
+ const matchedClient = !rawClient
96
+ ? true
97
+ : Array.isArray(rawClient)
98
+ ? rawClient.map((c) => String(c || "").toLowerCase()).includes(currentClient)
99
+ : String(rawClient || "").toLowerCase().includes(currentClient);
100
+ return matchedClient;
84
101
  });
85
102
  },
86
103
  filteredList: function () {
@@ -98,7 +115,12 @@ export default {
98
115
  homeMatched: function () {
99
116
  const query = (this.searchQuery || "").toLowerCase().trim();
100
117
  if (!query) return true;
101
- return "首页".includes(query);
118
+ return this.$jx3boxT("jx3boxUi.header.home", "首页").includes(query);
119
+ },
120
+ allMatched: function () {
121
+ const query = (this.searchQuery || "").toLowerCase().trim();
122
+ if (!query) return true;
123
+ return this.$jx3boxT("jx3boxUi.header.all", "全部").includes(query);
102
124
  },
103
125
  },
104
126
  methods: {
@@ -138,18 +160,26 @@ export default {
138
160
  },
139
161
  loadMenu() {
140
162
  try {
141
- const _box = JSON.parse(sessionStorage.getItem("box"));
142
- if (_box) {
143
- this.data = _box;
163
+ const data = JSON.parse(sessionStorage.getItem("box"));
164
+ if (data) {
165
+ this.data = data;
144
166
  } else {
145
- getMenu("box").then((res) => {
146
- this.data = res.data?.data?.val;
167
+ axios.get(__imgPath + "logo/app.json").then((res) => {
168
+ const _data = flatten(Object.values(res.data || {}));
169
+ this.data = _data.map((item) => ({
170
+ img: item.key + ".svg",
171
+ uuid: item.key,
172
+ abbr: item.label,
173
+ href: item.link,
174
+ client: item.client || ["std", "origin"],
175
+ }));
176
+
177
+ if (!this.data.length) this.data = box;
147
178
  sessionStorage.setItem("box", JSON.stringify(this.data));
148
179
  });
149
180
  }
150
181
  } catch (e) {
151
182
  this.data = box;
152
- console.log("loadBox2 error", e);
153
183
  }
154
184
  },
155
185
  onEsc(e) {
@@ -169,12 +199,12 @@ export default {
169
199
  this.status = !!status;
170
200
  }
171
201
  };
172
- Bus.$on("toggleBox", this.__toggleHandler);
202
+ Bus.on("toggleBox", this.__toggleHandler);
173
203
  window.addEventListener("keydown", this.onEsc);
174
204
  },
175
205
  beforeUnmount() {
176
206
  if (this.__toggleHandler) {
177
- Bus.$off("toggleBox", this.__toggleHandler);
207
+ Bus.off("toggleBox", this.__toggleHandler);
178
208
  this.__toggleHandler = null;
179
209
  }
180
210
  window.removeEventListener("keydown", this.onEsc);
@@ -188,7 +218,7 @@ export default {
188
218
  };
189
219
  </script>
190
220
 
191
- <style scoped lang="less">
221
+ <style lang="less">
192
222
  .c-jx3box2-mask {
193
223
  position: fixed;
194
224
  left: 0;
@@ -204,6 +234,32 @@ export default {
204
234
  backdrop-filter: blur(12px);
205
235
  -webkit-backdrop-filter: blur(12px);
206
236
  }
237
+ @media screen and (max-width: @phone) {
238
+ .c-jx3box2-mask {
239
+ display: none;
240
+ }
241
+ }
242
+
243
+ .box2-fade-enter-active,
244
+ .box2-fade-leave-active {
245
+ transition: opacity 0.25s ease;
246
+ }
247
+
248
+ .box2-fade-enter-active .c-jx3box2,
249
+ .box2-fade-leave-active .c-jx3box2 {
250
+ transition: transform 0.25s ease, opacity 0.25s ease;
251
+ }
252
+
253
+ .box2-fade-enter-from,
254
+ .box2-fade-leave-to {
255
+ opacity: 0;
256
+ }
257
+
258
+ .box2-fade-enter-from .c-jx3box2,
259
+ .box2-fade-leave-to .c-jx3box2 {
260
+ transform: translateY(16px) scale(0.96);
261
+ opacity: 0;
262
+ }
207
263
 
208
264
  .c-jx3box2 {
209
265
  position: relative;
@@ -218,262 +274,238 @@ export default {
218
274
  box-shadow: 0 30px 100px rgba(0, 0, 0, 0.45);
219
275
  }
220
276
 
221
- .u-topline {
222
- height: 6px;
223
- width: 100%;
224
- background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.6), transparent);
225
- }
226
-
227
- .u-head {
228
- padding: 28px 32px 24px;
229
- display: flex;
230
- align-items: center;
231
- gap: 20px;
232
- justify-content: space-between;
233
- flex-wrap: wrap;
234
- }
235
-
236
- .u-title-wrap {
237
- display: flex;
238
- align-items: center;
239
- gap: 14px;
240
- }
241
-
242
- .u-logo {
243
- width: 46px;
244
- height: 46px;
245
- border-radius: 14px;
246
- background: #fff;
247
- color: #fff;
248
- display: inline-flex;
249
- align-items: center;
250
- justify-content: center;
251
- box-shadow: 0 8px 24px rgba(37, 99, 235, 0.38);
252
- }
253
-
254
- .u-title {
255
- margin: 0;
256
- color: #fff;
257
- font-size: 28px;
258
- line-height: 1.1;
259
- font-weight: 800;
260
- }
261
-
262
- .u-subtitle {
263
- margin: 6px 0 0;
264
- color: #60a5fa;
265
- font-size: 10px;
266
- letter-spacing: 0.26em;
267
- font-weight: 700;
268
- }
277
+ .c-jx3box2 {
278
+ .u-topline {
279
+ height: 6px;
280
+ width: 100%;
281
+ background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.6), transparent);
282
+ }
269
283
 
270
- .u-search {
271
- width: min(460px, 100%);
272
- margin-left: auto;
273
- position: relative;
274
- }
284
+ .u-head {
285
+ padding: 28px 32px 24px;
286
+ display: flex;
287
+ align-items: center;
288
+ gap: 20px;
289
+ justify-content: space-between;
290
+ flex-wrap: wrap;
291
+ }
275
292
 
276
- .u-search-input {
277
- width: 100%;
278
- height: 48px;
279
- border-radius: 16px;
280
- border: 1px solid rgba(255, 255, 255, 0.12);
281
- background: rgba(0, 0, 0, 0.3);
282
- color: #fff;
283
- outline: none;
284
- padding: 0 40px 0 40px;
285
- box-sizing: border-box;
286
- transition: all 0.2s ease;
287
- }
293
+ .u-title-wrap {
294
+ display: flex;
295
+ align-items: center;
296
+ gap: 14px;
297
+ }
288
298
 
289
- .u-search-input::placeholder {
290
- color: #6b7280;
291
- }
299
+ .u-logo {
300
+ width: 46px;
301
+ height: 46px;
302
+ border-radius: 14px;
303
+ background: #fff;
304
+ color: #fff;
305
+ display: inline-flex;
306
+ align-items: center;
307
+ justify-content: center;
308
+ box-shadow: 0 8px 24px rgba(37, 99, 235, 0.38);
309
+ padding:5px;
310
+ }
292
311
 
293
- .u-search-input:focus {
294
- border-color: rgba(59, 130, 246, 0.5);
295
- box-shadow: 0 0 20px rgba(59, 130, 246, 0.2);
296
- }
312
+ .u-title {
313
+ margin: 0;
314
+ color: #fff;
315
+ font-size: 28px;
316
+ line-height: 1.1;
317
+ font-weight: 800;
318
+ }
297
319
 
298
- .u-search-icon {
299
- position: absolute;
300
- left: 14px;
301
- top: 50%;
302
- transform: translateY(-50%);
303
- color: #6b7280;
304
- font-size: 16px;
305
- }
320
+ .u-subtitle {
321
+ margin: 6px 0 0;
322
+ color: #60a5fa;
323
+ font-size: 10px;
324
+ letter-spacing: 0.26em;
325
+ font-weight: 700;
326
+ }
306
327
 
307
- .u-search-clear {
308
- position: absolute;
309
- right: 10px;
310
- top: 50%;
311
- transform: translateY(-50%);
312
- border: 0;
313
- background: transparent;
314
- color: #798192;
315
- cursor: pointer;
316
- }
328
+ .u-search {
329
+ width: min(460px, 100%);
330
+ margin-left: auto;
331
+ position: relative;
332
+ }
317
333
 
318
- .u-search-clear:hover {
319
- color: #fff;
320
- }
334
+ .u-search-input {
335
+ width: 100%;
336
+ height: 48px;
337
+ border-radius: 16px;
338
+ border: 1px solid rgba(255, 255, 255, 0.12);
339
+ background: rgba(0, 0, 0, 0.3);
340
+ color: #fff;
341
+ outline: none;
342
+ padding: 0 40px 0 40px;
343
+ box-sizing: border-box;
344
+ transition: all 0.2s ease;
345
+ }
321
346
 
322
- .u-body {
323
- padding: 4px 32px 24px;
324
- flex: 1;
325
- min-height: 360px;
326
- display: flex;
327
- flex-direction: column;
328
- overflow-y: auto;
329
- }
347
+ .u-search-input::placeholder {
348
+ color: #6b7280;
349
+ }
330
350
 
331
- .u-list {
332
- margin: 0;
333
- padding: 0;
334
- list-style: none;
335
- display: grid;
336
- grid-template-columns: repeat(8, minmax(0, 1fr));
337
- gap: 14px;
338
- align-content: start;
339
- }
351
+ .u-search-input:focus {
352
+ border-color: rgba(59, 130, 246, 0.5);
353
+ box-shadow: 0 0 20px rgba(59, 130, 246, 0.2);
354
+ }
340
355
 
341
- .u-item {
342
- height: 116px;
343
- display: flex;
344
- flex-direction: column;
345
- align-items: center;
346
- justify-content: center;
347
- border-radius: 22px;
348
- background: rgba(255, 255, 255, 0.03);
349
- border: 1px solid rgba(255, 255, 255, 0.07);
350
- text-decoration: none;
351
- transition: all 0.25s ease;
352
- }
356
+ .u-search-icon {
357
+ position: absolute;
358
+ left: 14px;
359
+ top: 50%;
360
+ transform: translateY(-50%);
361
+ color: #6b7280;
362
+ font-size: 16px;
363
+ }
353
364
 
354
- .u-item:hover {
355
- transform: translateY(-4px);
356
- border-color: rgba(59, 130, 246, 0.5);
357
- background: rgba(59, 130, 246, 0.12);
358
- box-shadow: 0 14px 26px -12px rgba(0, 0, 0, 0.55), 0 0 16px rgba(59, 130, 246, 0.2);
359
- }
365
+ .u-search-clear {
366
+ position: absolute;
367
+ right: 10px;
368
+ top: 50%;
369
+ transform: translateY(-50%);
370
+ border: 0;
371
+ background: transparent;
372
+ color: #798192;
373
+ cursor: pointer;
374
+ }
360
375
 
361
- .u-icon-wrap {
362
- width: 54px;
363
- height: 54px;
364
- border-radius: 14px;
365
- background: rgba(255, 255, 255, 0.05);
366
- display: flex;
367
- align-items: center;
368
- justify-content: center;
369
- transition: all 0.25s ease;
370
- }
376
+ .u-search-clear:hover {
377
+ color: #fff;
378
+ }
371
379
 
372
- .u-item:hover .u-icon-wrap {
373
- background: rgba(37, 99, 235, 0.18);
374
- }
380
+ .u-body {
381
+ padding: 4px 32px 24px;
382
+ flex: 1;
383
+ min-height: 360px;
384
+ display: flex;
385
+ flex-direction: column;
386
+ overflow-y: auto;
387
+ }
375
388
 
376
- .u-pic {
377
- width: 30px;
378
- height: 30px;
379
- object-fit: contain;
380
- }
389
+ .u-list {
390
+ margin: 0;
391
+ padding: 0;
392
+ list-style: none;
393
+ display: grid;
394
+ grid-template-columns: repeat(8, minmax(0, 1fr));
395
+ gap: 14px;
396
+ align-content: start;
397
+ }
381
398
 
382
- .u-txt {
383
- margin-top: 10px;
384
- font-size: 12px;
385
- color: #a8b0be;
386
- line-height: 1.2;
387
- }
399
+ .u-item {
400
+ height: 116px;
401
+ display: flex;
402
+ flex-direction: column;
403
+ align-items: center;
404
+ justify-content: center;
405
+ border-radius: 22px;
406
+ background: rgba(255, 255, 255, 0.03);
407
+ border: 1px solid rgba(255, 255, 255, 0.07);
408
+ text-decoration: none;
409
+ transition: all 0.25s ease;
410
+ }
388
411
 
389
- .u-item:hover .u-txt {
390
- color: #fff;
391
- }
412
+ .u-item:hover {
413
+ transform: translateY(-4px);
414
+ border-color: rgba(59, 130, 246, 0.5);
415
+ background: rgba(59, 130, 246, 0.12);
416
+ box-shadow: 0 14px 26px -12px rgba(0, 0, 0, 0.55), 0 0 16px rgba(59, 130, 246, 0.2);
417
+ }
392
418
 
393
- .u-empty {
394
- flex: 1;
395
- display: flex;
396
- align-items: center;
397
- justify-content: center;
398
- color: #8b95a7;
399
- font-size: 13px;
400
- }
419
+ .u-icon-wrap {
420
+ width: 54px;
421
+ height: 54px;
422
+ border-radius: 14px;
423
+ background: rgba(255, 255, 255, 0.05);
424
+ display: flex;
425
+ align-items: center;
426
+ justify-content: center;
427
+ transition: all 0.25s ease;
428
+ }
401
429
 
402
- .u-foot {
403
- display: flex;
404
- align-items: center;
405
- justify-content: space-between;
406
- padding: 14px 32px;
407
- border-top: 1px solid rgba(255, 255, 255, 0.05);
408
- background: rgba(0, 0, 0, 0.24);
409
- }
430
+ .u-item:hover .u-icon-wrap {
431
+ background: rgba(37, 99, 235, 0.18);
432
+ }
410
433
 
411
- .u-foot-left {
412
- display: inline-flex;
413
- align-items: center;
414
- gap: 8px;
415
- font-size: 10px;
416
- letter-spacing: 0.2em;
417
- color: #9ba3b2;
418
- font-weight: 600;
419
- }
434
+ .u-pic {
435
+ width: 30px;
436
+ height: 30px;
437
+ object-fit: contain;
438
+ }
420
439
 
421
- .u-dot {
422
- width: 6px;
423
- height: 6px;
424
- border-radius: 50%;
425
- background: #3b82f6;
426
- }
440
+ .u-txt {
441
+ margin-top: 10px;
442
+ font-size: 12px;
443
+ color: #a8b0be;
444
+ line-height: 1.2;
445
+ }
427
446
 
428
- .u-close {
429
- border: 0;
430
- background: transparent;
431
- color: #9ba3b2;
432
- font-size: 11px;
433
- letter-spacing: 0.12em;
434
- cursor: pointer;
435
- }
447
+ .u-item:hover .u-txt {
448
+ color: #fff;
449
+ }
436
450
 
437
- .u-close:hover {
438
- color: #fff;
439
- }
451
+ .u-empty {
452
+ flex: 1;
453
+ display: flex;
454
+ align-items: center;
455
+ justify-content: center;
456
+ color: #8b95a7;
457
+ font-size: 13px;
458
+ }
440
459
 
441
- .box2-fade-enter-active,
442
- .box2-fade-leave-active {
443
- transition: opacity 0.25s ease;
444
- }
460
+ .u-foot {
461
+ display: flex;
462
+ align-items: center;
463
+ justify-content: space-between;
464
+ padding: 14px 32px;
465
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
466
+ background: rgba(0, 0, 0, 0.24);
467
+ }
445
468
 
446
- .box2-fade-enter-active .c-jx3box2,
447
- .box2-fade-leave-active .c-jx3box2 {
448
- transition: transform 0.25s ease, opacity 0.25s ease;
449
- }
469
+ .u-foot-left {
470
+ display: inline-flex;
471
+ align-items: center;
472
+ gap: 8px;
473
+ font-size: 10px;
474
+ letter-spacing: 0.2em;
475
+ color: #9ba3b2;
476
+ font-weight: 600;
477
+ }
450
478
 
451
- .box2-fade-enter-from,
452
- .box2-fade-leave-to {
453
- opacity: 0;
454
- }
479
+ .u-dot {
480
+ width: 6px;
481
+ height: 6px;
482
+ border-radius: 50%;
483
+ background: #3b82f6;
484
+ }
455
485
 
456
- .box2-fade-enter-from .c-jx3box2,
457
- .box2-fade-leave-to .c-jx3box2 {
458
- transform: translateY(16px) scale(0.96);
459
- opacity: 0;
460
- }
486
+ .u-close {
487
+ border: 0;
488
+ background: transparent;
489
+ color: #9ba3b2;
490
+ font-size: 11px;
491
+ letter-spacing: 0.12em;
492
+ cursor: pointer;
493
+ }
461
494
 
462
- @media screen and (max-width: 1200px) {
463
- .u-list {
464
- grid-template-columns: repeat(6, minmax(0, 1fr));
495
+ .u-close:hover {
496
+ color: #fff;
465
497
  }
466
- }
467
498
 
468
- @media screen and (max-width: 992px) {
469
- .u-list {
470
- grid-template-columns: repeat(5, minmax(0, 1fr));
499
+ @media screen and (max-width: 1200px) {
500
+ .u-list {
501
+ grid-template-columns: repeat(6, minmax(0, 1fr));
502
+ }
471
503
  }
472
- }
473
504
 
474
- @media screen and (max-width: @phone) {
475
- .c-jx3box2-mask {
476
- display: none;
505
+ @media screen and (max-width: 992px) {
506
+ .u-list {
507
+ grid-template-columns: repeat(5, minmax(0, 1fr));
508
+ }
477
509
  }
478
510
  }
479
511
  </style>
@@ -107,7 +107,12 @@ export default {
107
107
  // Jx3Icon,
108
108
  // OriginIcon,
109
109
  },
110
- props: ["defaultValue"],
110
+ props: {
111
+ defaultValue: {
112
+ type: String,
113
+ default: "",
114
+ },
115
+ },
111
116
  data: function () {
112
117
  return {
113
118
  activeKey: this.defaultValue || (location.host.includes("origin") ? "origin" : "std"),
@@ -1,7 +1,6 @@
1
1
  <template>
2
2
  <div class="c-header-panel c-lang-switcher" id="c-header-lang-switcher">
3
3
  <span class="u-translator" href="/dashboard/boxcoin">
4
- <!-- <langIcon class="u-icon" /> -->
5
4
  <img
6
5
  class="u-icon"
7
6
  svg-inline
@@ -86,7 +85,7 @@ export default {
86
85
  if (!normalized) return;
87
86
 
88
87
  const ok = setJx3boxUiLocale(normalized);
89
- if (!ok) location.reload();
88
+ if (ok) location.reload();
90
89
  },
91
90
  },
92
91
  };