@jx3box/jx3box-ui 2.0.5 → 2.0.7

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 (241) hide show
  1. package/.storybook/preview.js +22 -13
  2. package/.storybook/storybookMocks.js +214 -0
  3. package/README.md +39 -43
  4. package/assets/css/bread/admin.less +20 -2
  5. package/assets/css/bread/breadcrumb.less +5 -2
  6. package/assets/css/comment/quick-reply.less +1 -1
  7. package/assets/css/common/left-sidebar.less +1 -1
  8. package/assets/css/interact/like2.less +5 -2
  9. package/assets/css/interact/qrcode.less +69 -0
  10. package/assets/css/single/author.less +15 -10
  11. package/assets/css/single/cms-single.less +1 -0
  12. package/assets/css/single/thx.less +34 -11
  13. package/assets/css/wiki/wiki-comments.less +176 -0
  14. package/assets/css/wiki/wiki-panel.less +177 -0
  15. package/assets/css/wiki/wiki-revisions.less +62 -0
  16. package/assets/data/nav.json +344 -10
  17. package/assets/img/comment/comment.svg +1 -1
  18. package/assets/img/comment/heart_1.svg +1 -1
  19. package/assets/img/comment/hide.svg +1 -1
  20. package/assets/img/leftsidebar/medal.svg +1 -1
  21. package/assets/img/leftsidebar/post.svg +27 -46
  22. package/i18n/messages/en-US.js +357 -22
  23. package/i18n/messages/vi.js +350 -22
  24. package/i18n/messages/zh-CN.js +469 -20
  25. package/i18n/messages/zh-TW.js +350 -22
  26. package/index.js +19 -7
  27. package/package.json +8 -5
  28. package/service/cms.js +22 -0
  29. package/service/commit-history.js +18 -0
  30. package/service/community.js +60 -0
  31. package/service/fav.js +5 -6
  32. package/src/App.vue +210 -80
  33. package/src/Breadcrumb.vue +24 -11
  34. package/src/CommonFooter.vue +2 -2
  35. package/src/Footer.vue +13 -5
  36. package/src/LeftSideToggle.vue +10 -3
  37. package/src/LeftSidebar.vue +19 -5
  38. package/src/Main.vue +9 -2
  39. package/src/RightSidebar.vue +12 -3
  40. package/src/SuspendCommon.vue +52 -38
  41. package/src/author/AuthorFans.vue +7 -5
  42. package/src/author/AuthorFollow.vue +14 -7
  43. package/src/author/AuthorGift.vue +25 -17
  44. package/src/author/AuthorInfo.vue +46 -19
  45. package/src/author/AuthorLink.vue +3 -1
  46. package/src/author/AuthorMedals.vue +5 -2
  47. package/src/author/AuthorPosts.vue +31 -13
  48. package/src/author/AuthorRss.vue +7 -3
  49. package/src/author/AuthorTeams.vue +3 -1
  50. package/src/author/UserPop.vue +29 -17
  51. package/src/bread/Admin.vue +55 -32
  52. package/src/bread/AdminDirectMessage.vue +15 -8
  53. package/src/bread/AdminDrop.vue +124 -45
  54. package/src/bread/CommunityAdmin.vue +527 -0
  55. package/src/bread/DesignTask.vue +30 -26
  56. package/src/bread/ListAdmin.vue +199 -0
  57. package/src/bread/MigrateCommunity.vue +192 -0
  58. package/src/bread/MoveToCommunityDialog.vue +234 -0
  59. package/src/comment/Avatar.vue +18 -24
  60. package/src/comment/CommentContent.vue +57 -37
  61. package/src/comment/CommentContentSimple.vue +61 -63
  62. package/src/comment/CommentInputForm.vue +45 -34
  63. package/src/comment/CommentWithReply.vue +9 -6
  64. package/src/comment/QuickReply.vue +5 -1
  65. package/src/comment/ReplyForReply.vue +6 -4
  66. package/src/comment/ReplyList.vue +28 -18
  67. package/src/comment/Upload.vue +24 -6
  68. package/src/filters/clientBy.vue +10 -8
  69. package/src/filters/markBy.vue +35 -31
  70. package/src/filters/menuBy.vue +20 -22
  71. package/src/filters/orderBy.vue +17 -11
  72. package/src/filters/tagBy.vue +4 -2
  73. package/src/filters/topicBy.vue +12 -10
  74. package/src/filters/versionBy.vue +5 -3
  75. package/src/filters/zlpBy.vue +29 -25
  76. package/src/footer/copyright.vue +5 -5
  77. package/src/footer/links.vue +2 -2
  78. package/src/footer/official.vue +1 -1
  79. package/src/footer/resource.vue +6 -6
  80. package/src/header/alternate.vue +35 -18
  81. package/src/header/asset.vue +9 -19
  82. package/src/header/box.vue +20 -8
  83. package/src/header/box2.vue +16 -9
  84. package/src/header/client.vue +7 -7
  85. package/src/header/lang.vue +41 -6
  86. package/src/header/logo.vue +2 -3
  87. package/src/header/manage.vue +2 -2
  88. package/src/header/message.vue +3 -3
  89. package/src/header/nav.vue +26 -23
  90. package/src/header/publish.vue +2 -2
  91. package/src/header/search.vue +2 -2
  92. package/src/header/shop.vue +2 -2
  93. package/src/header/user.vue +4 -4
  94. package/src/header/userInfo.vue +22 -24
  95. package/src/header/vip.vue +2 -2
  96. package/src/interact/BoxcoinAdmin.vue +30 -16
  97. package/src/interact/BoxcoinRecords.vue +28 -11
  98. package/src/interact/BoxcoinUser.vue +33 -17
  99. package/src/interact/Fav.vue +5 -1
  100. package/src/interact/Homework.vue +317 -0
  101. package/src/interact/Like.vue +4 -2
  102. package/src/interact/QRcode.vue +104 -0
  103. package/src/interact/Rss.vue +10 -4
  104. package/src/interact/Share.vue +18 -19
  105. package/src/interact/WatchLater.vue +5 -1
  106. package/src/main.js +1 -0
  107. package/src/single/Author.vue +5 -1
  108. package/src/single/CmsSingle.vue +29 -15
  109. package/src/single/Collection.vue +36 -26
  110. package/src/single/Comment.vue +19 -13
  111. package/src/single/Creators.vue +5 -3
  112. package/src/single/PostCollection.vue +158 -0
  113. package/src/single/PostDirectory.vue +0 -126
  114. package/src/single/PostGuide.vue +93 -0
  115. package/src/single/PostHeader.vue +39 -17
  116. package/src/single/PostTopic.vue +3 -3
  117. package/src/single/PostVersion.vue +219 -0
  118. package/src/single/RightAffix.vue +160 -0
  119. package/src/single/SimpleThx.vue +4 -2
  120. package/src/single/Thx.vue +14 -2
  121. package/src/single/VersionDialog.vue +238 -0
  122. package/src/stories/components/StoryPropsTable.vue +137 -0
  123. package/src/stories/filters/FilterGallery.stories.js +110 -0
  124. package/src/stories/filters/clientBy.stories.js +24 -0
  125. package/src/stories/filters/markBy.stories.js +6 -0
  126. package/src/stories/filters/menuBy.stories.js +6 -0
  127. package/src/stories/filters/orderBy.stories.js +6 -0
  128. package/src/stories/filters/tagBy.stories.js +6 -0
  129. package/src/stories/filters/topicBy.stories.js +6 -0
  130. package/src/stories/filters/versionBy.stories.js +6 -0
  131. package/src/stories/filters/zlpBy.stories.js +6 -0
  132. package/src/stories/interact/QRcode.stories.js +59 -0
  133. package/src/stories/layout/BaseShell.stories.js +38 -0
  134. package/src/stories/layout/Breadcrumb.stories.js +40 -0
  135. package/src/stories/layout/CommonFooter.stories.js +1 -1
  136. package/src/stories/layout/CommonHeader.stories.js +1 -1
  137. package/src/stories/layout/LeftSideToggle.stories.js +78 -0
  138. package/src/stories/layout/LeftSidebar.stories.js +40 -0
  139. package/src/stories/layout/Main.stories.js +41 -0
  140. package/src/stories/layout/RightSidebar.stories.js +36 -0
  141. package/src/stories/layout/StorybookShell.vue +271 -0
  142. package/src/stories/layout/SuspendCommon.stories.js +67 -0
  143. package/src/stories/layout/SuspendCommonStage.vue +143 -0
  144. package/src/stories/mockData.js +369 -0
  145. package/src/stories/other/UserPop.stories.js +51 -0
  146. package/src/stories/single/Author.stories.js +19 -0
  147. package/src/stories/single/AuthorStoryStage.vue +103 -0
  148. package/src/stories/single/CmsSingle.stories.js +19 -0
  149. package/src/stories/single/CmsSingleStoryStage.vue +118 -0
  150. package/src/stories/single/Collection.stories.js +34 -0
  151. package/src/stories/single/Comment.stories.js +36 -0
  152. package/src/stories/single/Creators.stories.js +34 -0
  153. package/src/stories/single/PostCollection.stories.js +34 -0
  154. package/src/stories/single/PostDirectory.stories.js +31 -0
  155. package/src/stories/single/PostGuide.stories.js +47 -0
  156. package/src/stories/single/PostHeader.stories.js +39 -0
  157. package/src/stories/single/PostVersion.stories.js +41 -0
  158. package/src/stories/single/RightAffix.stories.js +84 -0
  159. package/src/stories/single/SimpleThx.stories.js +39 -0
  160. package/src/stories/single/SingleGallery.stories.js +207 -0
  161. package/src/stories/single/Thx.stories.js +38 -0
  162. package/src/stories/wiki/GamePrice.stories.js +64 -0
  163. package/src/stories/wiki/WikiComments.stories.js +58 -0
  164. package/src/stories/wiki/WikiPanel.stories.js +69 -0
  165. package/src/stories/wiki/WikiRevisions.stories.js +47 -0
  166. package/src/wiki/GamePrice.vue +107 -0
  167. package/src/wiki/WikiComment.vue +153 -0
  168. package/src/wiki/WikiComments.vue +206 -0
  169. package/src/wiki/WikiPanel.vue +121 -0
  170. package/src/wiki/WikiRevisions.vue +125 -0
  171. package/vue.config.js +2 -12
  172. package/assets/css/common/bottom.less +0 -25
  173. package/assets/css/editor/article.less +0 -36
  174. package/assets/css/editor/combo.less +0 -362
  175. package/assets/css/editor/resource.less +0 -399
  176. package/assets/css/editor/tinymce.less +0 -100
  177. package/assets/css/editor/upload.less +0 -136
  178. package/assets/css/module/author.less +0 -231
  179. package/assets/css/module/buff.less +0 -88
  180. package/assets/css/module/directory.less +0 -165
  181. package/assets/css/module/icon.less +0 -25
  182. package/assets/css/module/item.less +0 -279
  183. package/assets/css/module/item_simple.less +0 -58
  184. package/assets/css/module/jx3_element.less +0 -5
  185. package/assets/css/module/macro.less +0 -89
  186. package/assets/css/module/npc.less +0 -265
  187. package/assets/css/module/resource.less +0 -93
  188. package/assets/css/module/skill.less +0 -74
  189. package/assets/css/module/talent.less +0 -495
  190. package/assets/js/a.js +0 -46
  191. package/assets/js/code.js +0 -13
  192. package/assets/js/combo.js +0 -40
  193. package/assets/js/directory.js +0 -114
  194. package/assets/js/filter2.js +0 -186
  195. package/assets/js/fold.js +0 -11
  196. package/assets/js/gallery.js +0 -14
  197. package/assets/js/hljs_languages.js +0 -177
  198. package/assets/js/iframe.js +0 -38
  199. package/assets/js/img.js +0 -23
  200. package/assets/js/item/attribute_percent.js +0 -88
  201. package/assets/js/item/bind.js +0 -18
  202. package/assets/js/item/border.js +0 -19
  203. package/assets/js/item/border_quest.js +0 -12
  204. package/assets/js/item/color.js +0 -25
  205. package/assets/js/item/hljs_languages.js +0 -177
  206. package/assets/js/item/icon_url.js +0 -15
  207. package/assets/js/item/second_format.js +0 -19
  208. package/assets/js/jx3_element.js +0 -73
  209. package/assets/js/katex.js +0 -181
  210. package/assets/js/macro.js +0 -16
  211. package/assets/js/nextpage.js +0 -4
  212. package/assets/js/pswp.js +0 -67
  213. package/assets/js/pswp_template.js +0 -66
  214. package/assets/js/pz_iframe.js +0 -30
  215. package/assets/js/qixue.js +0 -28
  216. package/assets/js/renderImgPreview.js +0 -18
  217. package/assets/js/script.js +0 -6
  218. package/assets/js/stat.js +0 -107
  219. package/assets/js/talent2.js +0 -21
  220. package/assets/js/tex-mml-chtml.js +0 -36310
  221. package/assets/js/voice.js +0 -238
  222. package/assets/js/xss.js +0 -130
  223. package/src/editor/Article.vue +0 -230
  224. package/src/editor/BoxResource.vue +0 -441
  225. package/src/editor/Resource.vue +0 -623
  226. package/src/editor/Tinymce.vue +0 -204
  227. package/src/editor/Upload.vue +0 -277
  228. package/src/editor/UploadAlum.vue +0 -176
  229. package/src/editor/UploadBanner.vue +0 -156
  230. package/src/editor/components/Author.vue +0 -322
  231. package/src/editor/components/Avatar.vue +0 -95
  232. package/src/editor/components/Buff.vue +0 -80
  233. package/src/editor/components/Combo.vue +0 -259
  234. package/src/editor/components/Equip.vue +0 -299
  235. package/src/editor/components/GameText.vue +0 -242
  236. package/src/editor/components/Item.vue +0 -325
  237. package/src/editor/components/ItemSimple.vue +0 -134
  238. package/src/editor/components/Medal.vue +0 -43
  239. package/src/editor/components/Npc.vue +0 -215
  240. package/src/editor/components/PostAuthor.vue +0 -102
  241. package/src/editor/components/Skill.vue +0 -71
package/src/App.vue CHANGED
@@ -3,7 +3,7 @@
3
3
  <CommonHeader></CommonHeader>
4
4
  <breadcrumb
5
5
  name="频道名称"
6
- slug="slug"
6
+ slug="bps"
7
7
  root="/slug"
8
8
  :publishEnable="true"
9
9
  :feedbackEnable="true"
@@ -13,123 +13,228 @@
13
13
  <template #logo>
14
14
  <img svg-inline src="../assets/img/editor/jx3.svg" />
15
15
  </template>
16
- <template #op-prepend> </template>
16
+ bread info
17
+ <template #op-prepend>
18
+ <AdminDrop :post="community" :isCommunity="true" :user-id="8" :showMove="true" />
19
+ </template>
17
20
  </breadcrumb>
18
- <LeftSidebar :open="true" :uid="8719">
19
- <LeftSideToggle :mobileOnly="true" />
20
- <Author :uid="8719" />
21
+ <LeftSidebar :open="true" :uid="8">
22
+ <Author :uid="8" />
21
23
  </LeftSidebar>
22
24
  <Main :withoutLeft="false" :withoutRight="false">
23
- <versionBy value=""></versionBy>
25
+ <el-tabs v-model="tab" type="card">
26
+ <el-tab-pane label="通用组件" name="widget">
27
+ <h1 class="m-title">UC泛用组件</h1>
28
+ <div class="m-block">
29
+ <el-button @click="userpop = true" style="width: 100px">用户POP</el-button>
30
+ <UserPop title="添加用户" v-model="userpop"></UserPop>
31
+ </div>
32
+
33
+ <h1 class="m-title">切换侧边栏</h1>
34
+ <div class="m-block">
35
+ <LeftSideToggle :mobileOnly="false" />
36
+ <LeftSideToggle :mobileOnly="true" />
37
+ </div>
38
+ </el-tab-pane>
39
+ <el-tab-pane label="文章列表" name="list">
40
+ <h1 class="m-title">筛选</h1>
41
+ <div class="m-block">
42
+ <markBy />
43
+ <menuBy :data="['test1', 'test2']" />
44
+ <zlpBy />
45
+ <topicBy v-model="tag2" :topics="post_topics" />
46
+ <tagBy :data="['PVE', 'PVX']" :type="tag" />
47
+ </div>
48
+
49
+ <h2 class="m-title">客户端</h2>
50
+ <div class="m-block">
51
+ <clientBy type="" />
52
+ <versionBy value="" />
53
+ </div>
54
+
55
+ <h2 class="m-title">排序</h2>
56
+ <div class="m-block">
57
+ <orderBy />
58
+ </div>
59
+ </el-tab-pane>
60
+ <el-tab-pane label="文章详情" name="single">
61
+ <h1 class="m-title">Append</h1>
62
+ <div class="m-block">
63
+ <PostGuide :post="post" />
64
+ </div>
65
+ <h1 class="m-title">Comment</h1>
66
+ <div class="m-block">
67
+ <el-button @click="homeworkVisible = true" style="width: 100px" size="small"
68
+ >作业组件</el-button
69
+ >
70
+ <Homework
71
+ v-model="homeworkVisible"
72
+ post-type="comment"
73
+ :post-id="19382"
74
+ :userId="8719"
75
+ client="std"
76
+ ></Homework>
77
+ </div>
78
+ <h1 class="m-title">QRcode</h1>
79
+ <div class="m-block">
80
+ <QRcode v="cms" />
81
+ </div>
82
+ </el-tab-pane>
83
+ <el-tab-pane label="文章内容" name="content">
84
+ <el-radio-group v-model="post_id">
85
+ <el-radio value="23240">临时测试</el-radio>
86
+ <el-radio value="35605">Markdown</el-radio>
87
+ <el-radio value="32035">仅小册</el-radio>
88
+ <el-radio value="30017">仅联合创作者</el-radio>
89
+ <el-radio value="30582">小册和联合创作者</el-radio>
90
+ <el-radio value="31129">无小册和联合创作者</el-radio>
91
+ </el-radio-group>
92
+ <singlebox :post="post" />
93
+ </el-tab-pane>
94
+ <el-tab-pane label="百科组件" name="wiki">
95
+ <h1 class="m-title">游戏价格组件</h1>
96
+ <div class="m-block">
97
+ <GamePrice :price="100009999" :align="true"></GamePrice>
98
+ </div>
99
+
100
+ <h1 class="m-title">百科面板</h1>
101
+ <div class="m-block">
102
+ <WikiPanel :wiki-post="wiki_post">
103
+ <template #head-title>奇遇攻略</template>
104
+ </WikiPanel>
105
+ </div>
106
+
107
+ <h1 class="m-title">百科评论</h1>
108
+ <div class="m-block">
109
+ <WikiComments :source-id="12572" type="achievement" />
110
+ </div>
111
+
112
+ <h1 class="m-title">百科修订</h1>
113
+ <div class="m-block">
114
+ <WikiRevisions type="achievement" :source-id="12572" />
115
+ </div>
116
+ </el-tab-pane>
117
+ <el-tab-pane label="移动组件" name="mobile">
118
+ <h1 class="m-title">Common</h1>
119
+ <el-switch v-model="showSuspendCommon" active-text="展示移动组件"></el-switch>
120
+ <div class="m-block">
121
+ <SuspendCommon
122
+ v-if="showSuspendCommon"
123
+ :drawerOptions="{
124
+ author: {
125
+ name: '作者名字',
126
+ avatar: 'https://cdn.jx3box.com/upload/avatar/2022/3/2/8_9860765.png',
127
+ author_id: 8,
128
+ },
129
+ subscribeType: 'posts',
130
+ postType: 'macro',
131
+ id: 97147,
132
+ title: '薄嘴唇靓仔!!!',
133
+ }"
134
+ @search="suspendSearch"
135
+ >
136
+ <template #default>
137
+ <div style="display: flex; gap: 1rem">
138
+ <div>切换</div>
139
+ <div>切换</div>
140
+ <div>切换</div>
141
+ </div>
142
+ </template>
143
+ </SuspendCommon>
144
+ </div>
145
+ </el-tab-pane>
146
+ </el-tabs>
24
147
  <el-divider></el-divider>
25
- <UploadAlum />
26
- <singlebox :post="post" />
27
- <SimpleThxVue
28
- postType="bbs"
29
- postTitle="bbs23865的标题"
30
- :userId="7"
31
- :adminBoxcoinEnable="true"
32
- :userBoxcoinEnable="true"
33
- :allowGift="true"
34
- :postId="57260"
35
- />
36
- <Thx
37
- postType="bbs"
38
- postTitle="bbs23865的标题"
39
- type="batchReward"
40
- :userId="7"
41
- :adminBoxcoinEnable="true"
42
- :userBoxcoinEnable="true"
43
- :postId="57260"
44
- :allowGift="true"
45
- :showRss="true"
46
- />
47
- <Comment category="post" id="80449"></Comment>
48
- <RightSidebar :show-toggle="true">
148
+ <RightSidebar :show-toggle="true" style="padding: 15px">
49
149
  <PostTopic type="bps" :id="48857"></PostTopic>
50
150
  <div id="directory"></div>
151
+ <PostVersion :post="post"></PostVersion>
152
+ <PostCollection :id="59" />
51
153
  </RightSidebar>
52
-
53
- <SuspendCommon
54
- :drawerOptions="{
55
- author: {
56
- name: '作者名字',
57
- avatar: 'https://cdn.jx3box.com/upload/avatar/2022/3/2/8_9860765.png',
58
- author_id: 8,
59
- },
60
- subscribeType: 'posts',
61
- postType: 'macro',
62
- id: 97147,
63
- title: '薄嘴唇靓仔!!!',
64
- }"
65
- @search="suspendSearch"
66
- >
67
- <template #default>
68
- <div style="display: flex; gap: 1rem">
69
- <div>切换</div>
70
- <div>切换</div>
71
- <div>切换</div>
72
- </div>
73
- </template>
74
- </SuspendCommon>
75
154
  </Main>
76
155
  <CommonFooter> </CommonFooter>
77
156
  </div>
78
157
  </template>
79
158
 
80
159
  <script>
160
+ import { getPost } from "../service/cms";
161
+ import { get_item } from "../service/item";
162
+ import { getTopicDetails } from "../service/community";
163
+ import post_topics from "@jx3box/jx3box-common/data/post_topics.json";
164
+ import { wiki } from "@jx3box/jx3box-common/js/wiki.js";
165
+
166
+ // components
81
167
  import singlebox from "./single/CmsSingle.vue";
82
- import UploadAlum from "./editor/UploadAlum.vue";
83
168
  import Author from "./single/Author.vue";
84
- import SimpleThxVue from "./single/SimpleThx.vue";
85
- import Comment from "./single/Comment.vue";
86
- import Thx from "./single/Thx.vue";
87
- import PostHeader from "./single/PostHeader.vue";
88
169
  import PostTopic from "./single/PostTopic.vue";
89
- import axios from "axios";
90
- import post_topics from "@jx3box/jx3box-common/data/post_topics.json";
91
- import { get_item } from "../service/item";
92
- import AdminDirectMessage from "./bread/AdminDirectMessage.vue";
93
- import Admin from "@/bread/Admin.vue";
94
- import versionBy from "./filters/versionBy.vue";
95
- import SuspendCommon from "./SuspendCommon.vue";
170
+ import PostGuide from "./single/PostGuide.vue";
171
+ import Homework from "./interact/Homework.vue";
172
+ import PostVersion from "./single/PostVersion.vue";
173
+ import PostCollection from "./single/PostCollection.vue";
174
+ import QRcode from "./interact/QRcode.vue";
175
+
176
+ import GamePrice from "./wiki/GamePrice.vue";
177
+ import WikiComments from "./wiki/WikiComments.vue";
178
+ import WikiRevisions from "./wiki/WikiRevisions.vue";
179
+ import WikiPanel from "./wiki/WikiPanel.vue";
96
180
  export default {
97
181
  name: "App",
98
182
  components: {
99
- SimpleThxVue,
100
183
  Author,
101
- Comment,
102
- Thx,
103
184
  // PostHeader,
104
185
  PostTopic,
105
- UploadAlum,
106
186
  // AdminDirectMessage,
107
187
  singlebox,
108
- versionBy,
109
- SuspendCommon,
110
188
  // Admin,
189
+ Homework,
190
+ PostGuide,
191
+ PostVersion,
192
+ PostCollection,
193
+ QRcode,
194
+
195
+ GamePrice,
196
+ WikiComments,
197
+ WikiRevisions,
198
+ WikiPanel,
111
199
  },
112
200
  data() {
113
201
  return {
114
- post_id: "74662",
202
+ tab: "content",
203
+
204
+ post_id: "23240",
115
205
  post: "",
116
206
  client: location.href.includes("origin") ? "origin" : "std",
117
- tag: "",
118
- // post_topics: post_topics["bps_pve"],
119
- tag2: "",
120
207
  item1: null,
121
208
  item2: null,
122
209
  item3: null,
123
210
  item4: null,
124
211
  item5: null,
125
212
  item6: null,
213
+
214
+ // 列表
215
+ tag: "post",
216
+ post_topics: post_topics["pve"],
217
+ tag2: "",
218
+
219
+ // 通用
220
+ userpop: false,
221
+ homeworkVisible: false,
222
+
223
+ showSuspendCommon: false,
224
+
225
+ community: {},
226
+
227
+ wiki_post: {
228
+ source: {},
229
+ post: null,
230
+ },
126
231
  };
127
232
  },
128
233
  watch: {
129
234
  post_id: {
130
235
  immediate: true,
131
236
  handler: function () {
132
- // this.loadPost();
237
+ this.loadPost();
133
238
  },
134
239
  },
135
240
  },
@@ -141,7 +246,7 @@ export default {
141
246
  console.log(data);
142
247
  },
143
248
  loadPost() {
144
- axios.get(`/api/cms/post/${this.post_id}`).then((res) => {
249
+ getPost(this.post_id).then((res) => {
145
250
  this.post = res.data.data;
146
251
  this.$forceUpdate();
147
252
  });
@@ -198,15 +303,40 @@ export default {
198
303
  }
199
304
  });
200
305
  },
306
+ loadCommunity: function () {
307
+ // 72
308
+ getTopicDetails(4339).then((res) => {
309
+ this.community = res.data.data;
310
+ });
311
+ },
312
+ loadWiki() {
313
+ wiki.mix({ type: "achievement", id: 12572, client: this.client }).then((res) => {
314
+ const { post, source, compatible, isEmpty, users } = res;
315
+ this.wiki_post = {
316
+ post: post,
317
+ source: source,
318
+ users,
319
+ };
320
+ });
321
+ },
201
322
  },
202
323
  mounted() {
203
324
  // this.loadItems();
325
+ this.loadCommunity();
326
+ this.loadWiki();
204
327
  },
205
328
  };
206
329
  </script>
207
-
208
330
  <style lang="less">
209
- body {
210
- padding-top: @header-height;
331
+ .m-title {
332
+ margin: 20px 0 10px;
333
+ font-size: 16px;
334
+ font-weight: 500;
335
+ }
336
+ .m-block {
337
+ padding: 15px;
338
+ .flex;
339
+ flex-direction: column;
340
+ gap: 20px;
211
341
  }
212
342
  </style>
@@ -13,7 +13,7 @@
13
13
  <!-- 面包屑内容 -->
14
14
  <Crumb :name="slug" v-if="crumbEnable" />
15
15
  <slot></slot>
16
- <slot v-if="show" name="title"></slot>
16
+ <slot v-if="showTitle" name="title"></slot>
17
17
  <div class="u-op">
18
18
  <slot name="op-append"></slot>
19
19
  <a
@@ -22,7 +22,7 @@
22
22
  class="u-publish el-button el-button--primary el-button--medium u-op-public"
23
23
  >
24
24
  <el-icon><Edit /></el-icon>
25
- <span>发布</span>
25
+ <span>{{ $jx3boxT("jx3boxUi.breadcrumb.publish", "发布") }}</span>
26
26
  </a>
27
27
  <a
28
28
  v-if="feedbackEnable"
@@ -32,9 +32,15 @@
32
32
  target="_blank"
33
33
  >
34
34
  <el-icon><InfoFilled /></el-icon>
35
- <span>反馈</span>
35
+ <span>{{ $jx3boxT("jx3boxUi.breadcrumb.feedback", "反馈") }}</span>
36
36
  </a>
37
- <Admin v-if="adminEnable" :marksOptions="adminMarks" :show-extend="showExtend" :app="slug" :subtypeMap="subtypeMap" />
37
+ <Admin
38
+ v-if="adminEnable"
39
+ :marksOptions="adminMarks"
40
+ :show-extend="showExtend"
41
+ :app="slug"
42
+ :subtypeMap="subtypeMap"
43
+ />
38
44
  <slot name="op-prepend"></slot>
39
45
  </div>
40
46
  </div>
@@ -48,9 +54,11 @@ import Admin from "./bread/Admin.vue";
48
54
  import Crumb from "./bread/Crumb.vue";
49
55
  import { isApp } from "../assets/js/app.js";
50
56
  import Bus from "../utils/bus";
57
+ import i18nMixin from "../i18n/mixin";
51
58
 
52
59
  export default {
53
60
  name: "CommonBreadcrumb",
61
+ mixins: [i18nMixin],
54
62
  props: {
55
63
  name: { type: String, default: "" },
56
64
  slug: { type: String, default: "" },
@@ -71,10 +79,10 @@ export default {
71
79
  return {
72
80
  isOpen: true,
73
81
  feedback: "/feedback?refer=" + encodeURIComponent(window.location.href),
74
- isNotAdmin: !User.isEditor(),
82
+ isNotAdmin: !User.isEditor(), // 非管理员都显示反馈链接
75
83
  isOverlay: false,
76
84
  isApp: isApp(),
77
- show: false,
85
+ showTitle: false,
78
86
  };
79
87
  },
80
88
  computed: {
@@ -96,20 +104,25 @@ export default {
96
104
  }
97
105
  let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
98
106
  if (scrollTop > 100) {
99
- this.show = true;
107
+ this.showTitle = true;
100
108
  } else {
101
- this.show = false;
109
+ this.showTitle = false;
102
110
  }
103
- }
111
+ },
104
112
  },
105
113
  beforeUnmount() {
106
114
  document.removeEventListener("scroll", this.onShowTitle);
115
+ if (this.__toggleLeftSideHandler) {
116
+ Bus.off("toggleLeftSide", this.__toggleLeftSideHandler);
117
+ this.__toggleLeftSideHandler = null;
118
+ }
107
119
  },
108
120
  mounted: function () {
109
121
  document.addEventListener("scroll", this.onShowTitle);
110
- Bus.on("toggleLeftSide", (data) => {
122
+ this.__toggleLeftSideHandler = (data) => {
111
123
  this.isOpen = data;
112
- });
124
+ };
125
+ Bus.on("toggleLeftSide", this.__toggleLeftSideHandler);
113
126
 
114
127
  if (window.innerWidth < 1024) {
115
128
  this.isOpen = false;
@@ -8,8 +8,8 @@
8
8
  <span class="text-2xl font-bold tracking-tight text-white">JX3BOX</span>
9
9
  </a>
10
10
  <p class="mt-5 text-sm leading-7 text-gray-400" style="max-width: 20rem">
11
- {{ $jx3boxT("jx3boxUi.footer.slogan1", "一站式剑三工具与资源聚合站。") }}<br />
12
- {{ $jx3boxT("jx3boxUi.footer.slogan2", "江湖路远,幸甚有你。") }}
11
+ {{ $jx3boxT("jx3boxUi.commonFooter.slogan1", "一站式剑三工具与资源聚合站。") }}<br />
12
+ {{ $jx3boxT("jx3boxUi.commonFooter.slogan2", "江湖路远,幸甚有你。") }}
13
13
  </p>
14
14
  <footer-official />
15
15
  </section>
package/src/Footer.vue CHANGED
@@ -3,16 +3,22 @@
3
3
  <div class="c-footer-inner">
4
4
  <div class="c-footer-left">
5
5
  <img class="u-flag" svg-inline src="../assets/img/footer/china.svg" />
6
- <a href="https://beian.miit.gov.cn/" class="u-beian" target="_blank">湘ICP备2021002288号</a>
6
+ <a href="https://beian.miit.gov.cn/" class="u-beian" target="_blank">{{
7
+ $jx3boxT("jx3boxUi.footer.icp", "湘ICP备2021002288号")
8
+ }}</a>
7
9
  </div>
8
10
  <div class="c-footer-right">
9
- <a class="u-about" :href="about" target="_blank">关于我们</a>
11
+ <a class="u-about" :href="about" target="_blank">{{ $jx3boxT("jx3boxUi.footer.about", "关于我们") }}</a>
10
12
  <em>|</em>
11
- <a class="u-doc" href="/help" target="_blank">帮助文档</a>
13
+ <a class="u-doc" href="/help" target="_blank">{{ $jx3boxT("jx3boxUi.footer.doc", "帮助文档") }}</a>
12
14
  <em>|</em>
13
- <a class="u-log" href="https://github.com/JX3BOX" target="_blank">代码仓库</a>
15
+ <a class="u-log" href="https://github.com/JX3BOX" target="_blank">{{
16
+ $jx3boxT("jx3boxUi.footer.repo", "代码仓库")
17
+ }}</a>
14
18
  <em>|</em>
15
- <a class="u-feedback" :href="feedback" target="_blank">反馈建议</a>
19
+ <a class="u-feedback" :href="feedback" target="_blank">{{
20
+ $jx3boxT("jx3boxUi.footer.feedback", "反馈建议")
21
+ }}</a>
16
22
  </div>
17
23
  <slot></slot>
18
24
  </div>
@@ -22,8 +28,10 @@
22
28
  <script>
23
29
  import JX3BOX from "@jx3box/jx3box-common/data/jx3box.json";
24
30
  import { isApp } from "../assets/js/app.js";
31
+ import i18nMixin from "../i18n/mixin";
25
32
  export default {
26
33
  name: "CommonFooter",
34
+ mixins: [i18nMixin],
27
35
  props: {
28
36
  darkMode: {
29
37
  type: Boolean,
@@ -26,14 +26,21 @@ export default {
26
26
  },
27
27
  },
28
28
  mounted: function () {
29
- Bus.on("toggleLeftSide", (data) => {
29
+ this.__toggleLeftSideHandler = (data) => {
30
30
  this.isOpen = data;
31
- });
31
+ };
32
+ Bus.on("toggleLeftSide", this.__toggleLeftSideHandler);
32
33
 
33
34
  if (window.innerWidth < 1024) {
34
35
  this.isOpen = false;
35
36
  }
36
37
  },
38
+ beforeUnmount() {
39
+ if (this.__toggleLeftSideHandler) {
40
+ Bus.off("toggleLeftSide", this.__toggleLeftSideHandler);
41
+ this.__toggleLeftSideHandler = null;
42
+ }
43
+ },
37
44
  components: {},
38
45
  };
39
46
  </script>
@@ -52,7 +59,7 @@ export default {
52
59
  }
53
60
  &.on {
54
61
  svg {
55
- fill: @primary;
62
+ fill: var(--el-color-primary);
56
63
  }
57
64
  }
58
65
  }
@@ -16,7 +16,7 @@
16
16
  class="c-sidebar-left-toggle"
17
17
  :class="!isOpen && 'close-sidebar-left'"
18
18
  @click="toggleLeftSide"
19
- :title="isOpen ? '收起侧边栏' : '打开侧边栏'"
19
+ :title="isOpen ? $jx3boxT('jx3boxUi.leftSidebar.collapse', '收起侧边栏') : $jx3boxT('jx3boxUi.leftSidebar.expand', '打开侧边栏')"
20
20
  >
21
21
  <el-icon>
22
22
  <ArrowRight v-if="!isOpen" />
@@ -31,9 +31,11 @@ import Bus from "../utils/bus";
31
31
  import { isApp } from "../assets/js/app.js";
32
32
  import { getDecoration } from "../service/cms";
33
33
  import JX3BOX from "@jx3box/jx3box-common/data/jx3box.json";
34
+ import i18nMixin from "../i18n/mixin";
34
35
  const DECORATION_SIDEBAR = "decoration_sidebar";
35
36
  export default {
36
37
  name: "LeftSidebar",
38
+ mixins: [i18nMixin],
37
39
  props: ["open", "withoutBread", "uid"],
38
40
  data: function () {
39
41
  return {
@@ -90,17 +92,29 @@ export default {
90
92
  }
91
93
  },
92
94
  },
95
+ beforeUnmount() {
96
+ if (this.__toggleLeftSideHandler) {
97
+ Bus.off("toggleLeftSide", this.__toggleLeftSideHandler);
98
+ this.__toggleLeftSideHandler = null;
99
+ }
100
+ if (this.__docClickHandler) {
101
+ document.removeEventListener("click", this.__docClickHandler);
102
+ this.__docClickHandler = null;
103
+ }
104
+ },
93
105
  mounted: function () {
94
- Bus.on("toggleLeftSide", (data) => {
106
+ this.__toggleLeftSideHandler = (data) => {
95
107
  this.isOpen = data;
96
- });
108
+ };
109
+ Bus.on("toggleLeftSide", this.__toggleLeftSideHandler);
97
110
 
98
111
  if (window.innerWidth < 1024) {
99
112
  this.isOpen = false;
100
113
 
101
- document.addEventListener("click", function () {
114
+ this.__docClickHandler = () => {
102
115
  Bus.emit("toggleLeftSide", false);
103
- });
116
+ };
117
+ document.addEventListener("click", this.__docClickHandler);
104
118
  }
105
119
  },
106
120
  created: function () {
package/src/Main.vue CHANGED
@@ -33,9 +33,16 @@ export default {
33
33
  },
34
34
  methods: {},
35
35
  mounted: function () {
36
- Bus.on("toggleLeftSide", (data) => {
36
+ this.__toggleLeftSideHandler = (data) => {
37
37
  this.expanding = !data;
38
- });
38
+ };
39
+ Bus.on("toggleLeftSide", this.__toggleLeftSideHandler);
40
+ },
41
+ beforeUnmount() {
42
+ if (this.__toggleLeftSideHandler) {
43
+ Bus.off("toggleLeftSide", this.__toggleLeftSideHandler);
44
+ this.__toggleLeftSideHandler = null;
45
+ }
39
46
  },
40
47
  created: function () {
41
48
  this.expanding = this.withoutLeft === undefined ? false : !!this.withoutLeft;
@@ -9,7 +9,7 @@
9
9
  class="c-sidebar-right-toggle"
10
10
  :class="!isOpen && 'close-sidebar-right'"
11
11
  @click="toggleRightSide"
12
- :title="isOpen ? '收起侧边栏' : '打开侧边栏'"
12
+ :title="isOpen ? $jx3boxT('jx3boxUi.rightSidebar.collapse', '收起侧边栏') : $jx3boxT('jx3boxUi.rightSidebar.expand', '打开侧边栏')"
13
13
  >
14
14
  <el-icon>
15
15
  <ArrowLeft v-show="!isOpen" />
@@ -23,8 +23,10 @@
23
23
  <script>
24
24
  import { isApp } from "../assets/js/app.js";
25
25
  import Bus from "../utils/bus";
26
+ import i18nMixin from "../i18n/mixin";
26
27
  export default {
27
28
  name: "RightSidebar",
29
+ mixins: [i18nMixin],
28
30
  props: {
29
31
  // 展示收起按钮
30
32
  showToggle: {
@@ -45,14 +47,21 @@ export default {
45
47
  },
46
48
  },
47
49
  mounted: function () {
48
- Bus.on("toggleRightSide", (data) => {
50
+ this.__toggleRightSideHandler = (data) => {
49
51
  this.isOpen = data;
50
- });
52
+ };
53
+ Bus.on("toggleRightSide", this.__toggleRightSideHandler);
51
54
 
52
55
  if (window.innerWidth <= 1440) {
53
56
  this.isOpen = false;
54
57
  }
55
58
  },
59
+ beforeUnmount() {
60
+ if (this.__toggleRightSideHandler) {
61
+ Bus.off("toggleRightSide", this.__toggleRightSideHandler);
62
+ this.__toggleRightSideHandler = null;
63
+ }
64
+ },
56
65
  };
57
66
  </script>
58
67