@jx3box/jx3box-editor 2.2.48 → 3.0.1

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 (175) hide show
  1. package/config/global.js +79 -0
  2. package/config/global.less +16 -0
  3. package/index.js +21 -8
  4. package/package.json +64 -63
  5. package/readme.md +25 -99
  6. package/src/Article.vue +96 -57
  7. package/src/ArticleMarkdown.vue +54 -47
  8. package/src/BoxResource.vue +67 -42
  9. package/src/Buff.vue +18 -7
  10. package/src/GameText.vue +32 -45
  11. package/src/Item.vue +143 -235
  12. package/src/ItemSimple.vue +27 -37
  13. package/src/Markdown.vue +362 -210
  14. package/src/Npc.vue +51 -30
  15. package/src/Resource.vue +296 -252
  16. package/src/Skill.vue +36 -26
  17. package/src/Tinymce.vue +124 -137
  18. package/src/Upload.vue +238 -155
  19. package/src/UploadAlbum.vue +189 -118
  20. package/{assets → src/assets}/css/article.less +1 -0
  21. package/src/assets/css/markdown.less +4 -0
  22. package/{assets → src/assets}/css/module/author.less +4 -3
  23. package/{assets → src/assets}/css/module/directory.less +23 -32
  24. package/{assets → src/assets}/css/module/talent.less +2 -2
  25. package/{assets → src/assets}/css/resource.less +56 -22
  26. package/src/assets/css/tinymce/_.less +28 -0
  27. package/src/assets/css/tinymce/a.less +21 -0
  28. package/{assets → src/assets}/css/tinymce/code.less +1 -1
  29. package/{assets/css → src/assets/css/tinymce}/combo.less +123 -18
  30. package/{assets → src/assets}/css/tinymce/fold.less +3 -6
  31. package/src/assets/css/tinymce/h.less +90 -0
  32. package/{assets → src/assets}/css/tinymce/latex.less +14 -14
  33. package/{assets → src/assets}/css/tinymce/macro.less +3 -3
  34. package/{assets → src/assets}/css/tinymce/pz.less +2 -2
  35. package/{assets → src/assets}/css/tinymce/table.less +5 -10
  36. package/{assets → src/assets}/css/tinymce.less +8 -4
  37. package/src/assets/css/upload.less +195 -0
  38. package/src/assets/css/upload_album.less +164 -0
  39. package/src/assets/css/var.less +2 -0
  40. package/src/assets/img/other/qr-code.svg +1 -0
  41. package/{assets → src/assets}/js/audio.js +2 -2
  42. package/{assets → src/assets}/js/directory.js +51 -23
  43. package/src/assets/js/hljs_languages.js +177 -0
  44. package/src/assets/js/katex.js +211 -0
  45. package/src/assets/js/renderImgPreview.js +49 -0
  46. package/{assets → src/assets}/js/xss.js +48 -5
  47. package/src/components/Author.vue +32 -13
  48. package/src/components/Avatar.vue +22 -3
  49. package/src/components/Combo.vue +118 -72
  50. package/src/components/PostAuthor.vue +13 -11
  51. package/src/components/QRcode.vue +136 -0
  52. package/src/components/SkillMartial.vue +13 -12
  53. package/src/pages/article.js +14 -0
  54. package/src/pages/index.js +5 -0
  55. package/src/pages/markdown.js +14 -0
  56. package/src/pages/tinymce.js +49 -0
  57. package/src/pages/upload.js +14 -0
  58. package/{service → src/service}/author.js +2 -2
  59. package/{service → src/service}/cms.js +5 -3
  60. package/{service → src/service}/database.js +4 -2
  61. package/{service → src/service}/item.js +1 -1
  62. package/{service → src/service}/node.js +1 -1
  63. package/{service → src/service}/resource.js +1 -1
  64. package/src/views/article.vue +72 -0
  65. package/src/views/index.vue +11 -0
  66. package/src/views/markdown.vue +58 -0
  67. package/src/views/tinymce.vue +58 -0
  68. package/src/views/upload.vue +111 -0
  69. package/.env +0 -2
  70. package/.vscode/settings.json +0 -5
  71. package/assets/css/katex-fix.css +0 -20
  72. package/assets/css/tinymce/_.less +0 -30
  73. package/assets/css/tinymce/a.less +0 -30
  74. package/assets/css/tinymce/combo.less +0 -111
  75. package/assets/css/tinymce/h.less +0 -58
  76. package/assets/css/upload.less +0 -105
  77. package/assets/js/katex.js +0 -191
  78. package/assets/js/renderImgPreview.js +0 -25
  79. package/babel.config.js +0 -3
  80. package/docs/markdown.md +0 -16
  81. package/jsconfig.json +0 -9
  82. package/public/article.html +0 -15
  83. package/public/css/article.css +0 -2481
  84. package/public/css/article.less +0 -3
  85. package/public/favicon.ico +0 -0
  86. package/public/tinymce.html +0 -33
  87. package/src/Equip.vue +0 -301
  88. package/src/components/LetterDemo.vue +0 -93
  89. package/src/components/medal.vue +0 -43
  90. package/test-audio.html +0 -121
  91. package/vue.config.js +0 -147
  92. /package/{assets → src/assets}/css/markdown/_.less +0 -0
  93. /package/{assets → src/assets}/css/markdown/macro.less +0 -0
  94. /package/{assets/css/article_markdown.less → src/assets/css/markdown/markdown-article.less} +0 -0
  95. /package/{assets/css/markdown.less → src/assets/css/markdown/markdown-editor.less} +0 -0
  96. /package/{assets → src/assets}/css/markdown/talent.less +0 -0
  97. /package/{assets → src/assets}/css/markdown/video.less +0 -0
  98. /package/{assets → src/assets}/css/module/buff.less +0 -0
  99. /package/{assets → src/assets}/css/module/icon.less +0 -0
  100. /package/{assets → src/assets}/css/module/item.less +0 -0
  101. /package/{assets → src/assets}/css/module/item_simple.less +0 -0
  102. /package/{assets → src/assets}/css/module/jx3_element.less +0 -0
  103. /package/{assets → src/assets}/css/module/macro.less +0 -0
  104. /package/{assets → src/assets}/css/module/npc.less +0 -0
  105. /package/{assets → src/assets}/css/module/resource.less +0 -0
  106. /package/{assets → src/assets}/css/module/skill.less +0 -0
  107. /package/{assets → src/assets}/css/tinymce/hr.less +0 -0
  108. /package/{assets → src/assets}/css/tinymce/img.less +0 -0
  109. /package/{assets → src/assets}/css/tinymce/imgpreview.less +0 -0
  110. /package/{assets → src/assets}/css/tinymce/list.less +0 -0
  111. /package/{assets → src/assets}/css/tinymce/nextpage.less +0 -0
  112. /package/{assets → src/assets}/css/tinymce/p.less +0 -0
  113. /package/{assets → src/assets}/css/tinymce/plugin.less +0 -0
  114. /package/{assets → src/assets}/css/tinymce/qixue.less +0 -0
  115. /package/{assets → src/assets}/css/tinymce/quote.less +0 -0
  116. /package/{assets → src/assets}/css/tinymce/video.less +0 -0
  117. /package/{assets → src/assets}/css/tinymce/voice.less +0 -0
  118. /package/{assets → src/assets}/data/detach_type.json +0 -0
  119. /package/{assets → src/assets}/data/game_font.json +0 -0
  120. /package/{assets → src/assets}/data/markdown_whitelist.json +0 -0
  121. /package/{assets → src/assets}/data/weapon_type.json +0 -0
  122. /package/{assets → src/assets}/img/buff.svg +0 -0
  123. /package/{assets → src/assets}/img/equip_bg.png +0 -0
  124. /package/{assets → src/assets}/img/file.svg +0 -0
  125. /package/{assets → src/assets}/img/icons.svg +0 -0
  126. /package/{assets → src/assets}/img/item/pve.png +0 -0
  127. /package/{assets → src/assets}/img/item/pvp.png +0 -0
  128. /package/{assets → src/assets}/img/item/pvx.png +0 -0
  129. /package/{assets → src/assets}/img/item/std.png +0 -0
  130. /package/{assets → src/assets}/img/item/wujie.png +0 -0
  131. /package/{assets → src/assets}/img/item.svg +0 -0
  132. /package/{assets → src/assets}/img/jx3.svg +0 -0
  133. /package/{assets → src/assets}/img/jx3box.svg +0 -0
  134. /package/{assets → src/assets}/img/npc/attack.svg +0 -0
  135. /package/{assets → src/assets}/img/npc/buff.svg +0 -0
  136. /package/{assets → src/assets}/img/npc/energy.svg +0 -0
  137. /package/{assets → src/assets}/img/npc/miss.svg +0 -0
  138. /package/{assets → src/assets}/img/npc/npc.svg +0 -0
  139. /package/{assets → src/assets}/img/npc/radar.svg +0 -0
  140. /package/{assets → src/assets}/img/npc/shield.svg +0 -0
  141. /package/{assets → src/assets}/img/npc/sight.svg +0 -0
  142. /package/{assets → src/assets}/img/npc/skull.svg +0 -0
  143. /package/{assets → src/assets}/img/npc/target.svg +0 -0
  144. /package/{assets → src/assets}/img/skill.svg +0 -0
  145. /package/{assets → src/assets}/img/skillset.png +0 -0
  146. /package/{assets → src/assets}/js/a.js +0 -0
  147. /package/{assets → src/assets}/js/code.js +0 -0
  148. /package/{assets → src/assets}/js/combo.js +0 -0
  149. /package/{assets → src/assets}/js/drag.js +0 -0
  150. /package/{assets → src/assets}/js/filter2.js +0 -0
  151. /package/{assets → src/assets}/js/fold.js +0 -0
  152. /package/{assets → src/assets}/js/gallery.js +0 -0
  153. /package/{assets → src/assets}/js/iframe.js +0 -0
  154. /package/{assets → src/assets}/js/img.js +0 -0
  155. /package/{assets → src/assets}/js/item/attribute_percent.js +0 -0
  156. /package/{assets → src/assets}/js/item/bind.js +0 -0
  157. /package/{assets → src/assets}/js/item/border.js +0 -0
  158. /package/{assets → src/assets}/js/item/border_quest.js +0 -0
  159. /package/{assets → src/assets}/js/item/color.js +0 -0
  160. /package/{assets → src/assets}/js/item/hljs_languages.js +0 -0
  161. /package/{assets → src/assets}/js/item/icon_url.js +0 -0
  162. /package/{assets → src/assets}/js/item/second_format.js +0 -0
  163. /package/{assets → src/assets}/js/jx3_element.js +0 -0
  164. /package/{assets → src/assets}/js/macro.js +0 -0
  165. /package/{assets → src/assets}/js/nextpage.js +0 -0
  166. /package/{assets → src/assets}/js/pswp.js +0 -0
  167. /package/{assets → src/assets}/js/pswp_template.js +0 -0
  168. /package/{assets → src/assets}/js/pz_iframe.js +0 -0
  169. /package/{assets → src/assets}/js/qixue.js +0 -0
  170. /package/{assets → src/assets}/js/script.js +0 -0
  171. /package/{assets → src/assets}/js/talent2.js +0 -0
  172. /package/{assets → src/assets}/js/tex-mml-chtml.js +0 -0
  173. /package/{service → src/service}/enum/CollectionPublic.js +0 -0
  174. /package/{service → src/service}/enum/EquipPosition.js +0 -0
  175. /package/{service → src/service}/enum/EquipType.js +0 -0
@@ -1,10 +1,11 @@
1
1
  <template>
2
- <div class="c-combo m-resource-combo">
2
+ <!-- 连招 -->
3
+ <div class="w-resource-combo">
3
4
  <el-tabs v-model="activeName" type="card" class="m-skill-tabs">
4
5
  <el-tab-pane label="门派武学" name="special">
5
6
  <template #label>
6
7
  <div class="u-tab-label">
7
- <i class="el-icon-s-order"></i>
8
+ <el-icon><Sort></Sort></el-icon>
8
9
  <b>门派武学</b>
9
10
  </div>
10
11
  </template>
@@ -12,17 +13,17 @@
12
13
  <el-tab-pane label="全部技能" name="all">
13
14
  <template #label>
14
15
  <div class="u-tab-label">
15
- <i class="el-icon-menu"></i>
16
+ <el-icon><Menu></Menu></el-icon>
16
17
  <b>全部技能</b>
17
18
  </div>
18
19
  </template>
19
20
  </el-tab-pane>
20
21
  </el-tabs>
21
- <div class="c-combo-content">
22
+ <div class="w-resource-combo__content">
22
23
  <div class="m-select-content">
23
24
  <div v-show="activeName === 'all'">
24
25
  <div v-if="total && done" class="m-resource-count">
25
- <i class="el-icon-s-data"></i> 共找到 <b>{{ total }}</b> 条记录
26
+ <el-icon><Histogram /></el-icon> 共找到 <b>{{ total }}</b> 条记录
26
27
  </div>
27
28
  <ul class="m-resource-list">
28
29
  <li v-for="(o, i) in skill" class="u-item" :key="i" @click="selectSkill(o, i)" ref="skill">
@@ -43,7 +44,14 @@
43
44
 
44
45
  <template v-if="multipage">
45
46
  <!-- 下一页 -->
46
- <el-button class="m-archive-more" :class="{ show: hasNextPage }" type="primary" icon="el-icon-arrow-down" @click="appendPage">加载更多</el-button>
47
+ <el-button
48
+ class="m-archive-more"
49
+ :class="{ show: hasNextPage }"
50
+ type="primary"
51
+ icon="ArrowDown"
52
+ @click="appendPage"
53
+ >加载更多</el-button
54
+ >
47
55
  <!-- 分页 -->
48
56
  <el-pagination
49
57
  class="m-archive-pages"
@@ -59,32 +67,59 @@
59
67
 
60
68
  <div class="m-database-tip" v-show="isBlank">❤ 请输入搜索条件查询</div>
61
69
  </div>
62
- <skill-martial v-show="activeName === 'special'" :client="client" :subtype="subtype" @selectSkill="selectSkill"></skill-martial>
70
+ <skill-martial
71
+ v-show="activeName === 'special'"
72
+ :client="client"
73
+ :subtype="subtype"
74
+ @selectSkill="selectSkill"
75
+ ></skill-martial>
63
76
  </div>
64
77
 
65
- <div class="c-combo-content__right">
78
+ <div class="m-selected-content">
66
79
  <!-- 已选技能 -->
67
- <el-divider>已选技能
80
+ <el-divider
81
+ >已选技能
68
82
  <!-- <el-checkbox v-model="sort" border size="small">开启排序</el-checkbox> -->
69
83
  </el-divider>
70
84
  <div class="m-selected-skills">
71
85
  <ul class="m-skills-list">
72
- <li v-for="(skill, index) in selected" :key="skill.SkillID + '' + index" class="m-skill" @contextmenu.prevent="(event) => onContextmenu(event, skill)">
86
+ <li
87
+ v-for="(skill, index) in selected"
88
+ :key="skill.SkillID + '' + index"
89
+ class="m-skill"
90
+ @contextmenu.prevent="(event) => onContextmenu(event, skill)"
91
+ >
73
92
  <div class="u-skill" v-if="skill && skill.IconID">
74
- <img class="u-skill-icon" :class="skill.iconSize ? `u-skill-icon_${skill.iconSize}` : ''" :src="iconURL(skill.IconID)" :alt="skill.IconID" />
93
+ <img
94
+ class="u-skill-icon"
95
+ :class="skill.iconSize ? `u-skill-icon_${skill.iconSize}` : ''"
96
+ :src="iconURL(skill.IconID)"
97
+ :alt="skill.IconID"
98
+ />
75
99
  <i class="u-gcd-icon" v-show="skill.WithoutGcd">
76
- <i class="el-icon-time"></i>
100
+ <el-icon><Timer /></el-icon>
77
101
  </i>
78
- <span class="u-name" :class="{ 'u-name_underline': skill.underline }" :title="skill.Name">{{ skill.Name }}</span>
102
+ <span
103
+ class="u-name"
104
+ :class="{ 'u-name_underline': skill.underline }"
105
+ :title="skill.Name"
106
+ >{{ skill.Name }}</span
107
+ >
79
108
  <span class="u-note" :title="skill.n" :style="itemStyle(skill)">{{ skill.n }}</span>
80
109
  </div>
81
- <i class="u-remove-icon" :class="skill.iconSize ? `u-remove-icon_${skill.iconSize}` : ''" title="移除" @click="removeSelected(index)"><i class="el-icon-close"></i></i>
110
+ <i
111
+ class="u-remove-icon"
112
+ :class="skill.iconSize ? `u-remove-icon_${skill.iconSize}` : ''"
113
+ title="移除"
114
+ @click="removeSelected(index)"
115
+ ><el-icon><Close /></el-icon
116
+ ></i>
82
117
  </li>
83
118
  </ul>
84
119
  </div>
85
120
  </div>
86
121
  </div>
87
- <el-dialog :visible.sync="showRemark" width="600px" append-to-body v-draggable class="c-large-dialog" title="设置备注">
122
+ <el-dialog v-model="showRemark" width="600px" append-to-body draggable class="c-large-dialog" title="设置备注">
88
123
  <el-form label-position="left" label-width="80px">
89
124
  <el-form-item label="备注">
90
125
  <el-input placeholder="输入备注" v-model="form.n"></el-input>
@@ -101,32 +136,35 @@
101
136
  </el-select>
102
137
  </el-form-item>
103
138
  <el-form-item label="预览">
104
- <span :style="nStyle">{{ form.n || '示例文字' }}</span>
139
+ <span :style="nStyle">{{ form.n || "示例文字" }}</span>
105
140
  </el-form-item>
106
141
  </el-form>
107
- <span slot="footer" class="dialog-footer">
108
- <el-button @click="showRemark = false">取 消</el-button>
109
- <el-button type="primary" @click="confirm">确
110
- </el-button>
111
- </span>
142
+ <template #footer>
143
+ <span class="m-dialog-footer">
144
+ <el-button @click="showRemark = false">取 消</el-button>
145
+ <el-button type="primary" @click="confirm">确 定 </el-button>
146
+ </span>
147
+ </template>
112
148
  </el-dialog>
113
149
  </div>
114
150
  </template>
115
151
 
116
152
  <script>
117
- import Vue from "vue";
153
+ import { h } from "vue";
154
+ import { ElIcon } from "element-plus";
155
+ import { Check, Close } from "@element-plus/icons-vue";
118
156
  import { iconLink } from "@jx3box/jx3box-common/js/utils";
119
- import { getSkill } from "../../service/resource";
157
+ import { getSkill } from "../service/resource";
120
158
  import SkillMartial from "./SkillMartial.vue";
121
159
 
122
160
  import Sortable from "sortablejs";
123
161
  import { cloneDeep, pick } from "lodash";
124
162
 
125
- import LoadScript from "vue-plugin-load-script";
126
- Vue.use(LoadScript);
163
+ import ContextMenu from "@imengyu/vue3-context-menu";
164
+ import "@imengyu/vue3-context-menu/lib/vue3-context-menu.css";
165
+
166
+ const renderMenuIcon = (IconComponent) => h(ElIcon, null, () => h(IconComponent));
127
167
 
128
- import contextmenu from "vue-contextmenujs";
129
- Vue.use(contextmenu);
130
168
  export default {
131
169
  name: "ComboSkill",
132
170
  components: {
@@ -176,27 +214,27 @@ export default {
176
214
  n: "",
177
215
  c: "",
178
216
  fz: "14",
179
- fw: "500"
217
+ fw: "500",
180
218
  },
181
219
  showRemark: false,
182
220
  currentSkill: {},
183
221
 
184
222
  predefineColors: [
185
- '#ff4500',
186
- '#ff8c00',
187
- '#ffd700',
188
- '#90ee90',
189
- '#00ced1',
190
- '#1e90ff',
191
- '#c71585',
192
- 'rgba(255, 69, 0, 0.68)',
193
- 'rgb(255, 120, 0)',
194
- 'hsv(51, 100, 98)',
195
- 'hsva(120, 40, 94, 0.5)',
196
- 'hsl(181, 100%, 37%)',
197
- 'hsla(209, 100%, 56%, 0.73)',
198
- '#c7158577',
199
- ]
223
+ "#ff4500",
224
+ "#ff8c00",
225
+ "#ffd700",
226
+ "#90ee90",
227
+ "#00ced1",
228
+ "#1e90ff",
229
+ "#c71585",
230
+ "rgba(255, 69, 0, 0.68)",
231
+ "rgb(255, 120, 0)",
232
+ "hsv(51, 100, 98)",
233
+ "hsva(120, 40, 94, 0.5)",
234
+ "hsl(181, 100%, 37%)",
235
+ "hsla(209, 100%, 56%, 0.73)",
236
+ "#c7158577",
237
+ ],
200
238
  };
201
239
  },
202
240
  computed: {
@@ -210,12 +248,15 @@ export default {
210
248
  return !this.query && !this.skill["length"];
211
249
  },
212
250
  nStyle() {
213
- return pick({
214
- color: this.form.c,
215
- fontSize: (this.form.fz || 12) + 'px',
216
- fontWeight: this.form.fw
217
- }, ['color','fontSize','fontWeight'])
218
- }
251
+ return pick(
252
+ {
253
+ color: this.form.c,
254
+ fontSize: (this.form.fz || 12) + "px",
255
+ fontWeight: this.form.fw,
256
+ },
257
+ ["color", "fontSize", "fontWeight"]
258
+ );
259
+ },
219
260
  },
220
261
  mounted() {
221
262
  this.$nextTick(() => {
@@ -302,14 +343,16 @@ export default {
302
343
  });
303
344
  },
304
345
  onContextmenu(event, skill) {
305
- this.$contextmenu({
346
+ ContextMenu.showContextMenu({
347
+ x: event.x || event.clientX,
348
+ y: event.y || event.clientY,
306
349
  items: [
307
350
  {
308
351
  label: !skill?.WithoutGcd ? "设置为无GCD技能" : "设置为有GCD技能",
309
352
  onClick: () => {
310
- this.$set(skill, "WithoutGcd", !skill.WithoutGcd);
353
+ skill.WithoutGcd = !skill.WithoutGcd;
311
354
  },
312
- icon: !skill?.WithoutGcd ? "el-icon-check" : "el-icon-close",
355
+ icon: !skill?.WithoutGcd ? renderMenuIcon(Check) : renderMenuIcon(Close),
313
356
  },
314
357
  {
315
358
  label: "图标大小",
@@ -317,13 +360,13 @@ export default {
317
360
  {
318
361
  label: "小",
319
362
  onClick: () => {
320
- this.$set(skill, "iconSize", "small");
363
+ skill.iconSize = "small";
321
364
  },
322
365
  },
323
366
  {
324
367
  label: "大",
325
368
  onClick: () => {
326
- this.$set(skill, "iconSize", "large");
369
+ skill.iconSize = "large";
327
370
  },
328
371
  },
329
372
  ],
@@ -331,19 +374,17 @@ export default {
331
374
  {
332
375
  label: skill.underline ? "取消下划线" : "设置下划线",
333
376
  onClick: () => {
334
- this.$set(skill, "underline", !skill.underline);
377
+ skill.underline = !skill.underline;
335
378
  },
336
379
  },
337
380
  {
338
381
  label: "备注",
339
382
  onClick: () => {
340
383
  this.showRemark = true;
341
- this.currentSkill = skill
384
+ this.currentSkill = skill;
342
385
  },
343
- }
386
+ },
344
387
  ],
345
- event,
346
- customClass: "custom-class",
347
388
  zIndex: 99999,
348
389
  minWidth: 200,
349
390
  });
@@ -365,32 +406,37 @@ export default {
365
406
  item.underline && (obj.underline = item.underline);
366
407
 
367
408
  item.client = this.client;
368
- skills_html += `<li class="w-skill-combo-item">${item.SkillID},${item.Name},${item.IconID},${JSON.stringify(obj)}</li>`;
409
+ skills_html += `<li class="w-skill-combo-item">${item.SkillID},${item.Name},${
410
+ item.IconID
411
+ },${JSON.stringify(obj)}</li>`;
369
412
  });
370
413
  const html = `<ul class="e-skill-combo w-skill-combo">${skills_html}</ul>`;
371
414
  return html;
372
415
  },
373
416
  confirm() {
374
417
  if (this.form.n) {
375
- this.$set(this.currentSkill, 'n', this.form.n);
376
- this.$set(this.currentSkill, 'c', this.form.c);
377
- this.$set(this.currentSkill, 'fz', this.form.fz);
378
- this.$set(this.currentSkill, 'fw', this.form.fw);
418
+ this.currentSkill.n = this.form.n;
419
+ this.currentSkill.c = this.form.c;
420
+ this.currentSkill.fz = this.form.fz;
421
+ this.currentSkill.fw = this.form.fw;
379
422
  }
380
423
 
381
- this.showRemark = false
424
+ this.showRemark = false;
382
425
  },
383
426
  itemStyle(item) {
384
- return pick({
385
- color: item.c,
386
- fontSize: (item.fz || 12) + 'px',
387
- fontWeight: item.fw
388
- }, ['color','fontSize','fontWeight'])
389
- }
427
+ return pick(
428
+ {
429
+ color: item.c,
430
+ fontSize: (item.fz || 12) + "px",
431
+ fontWeight: item.fw,
432
+ },
433
+ ["color", "fontSize", "fontWeight"]
434
+ );
435
+ },
390
436
  },
391
437
  };
392
438
  </script>
393
439
 
394
440
  <style lang="less">
395
- @import "../../assets/css/combo.less";
441
+ @import "../assets/css/tinymce/combo.less";
396
442
  </style>
@@ -1,9 +1,4 @@
1
- <!--
2
- * @Author: iRuxu
3
- * @Date: 2022-07-17 00:13:35
4
- * @LastEditTime: 2022-07-17 00:40:25
5
- * @Description:
6
- -->
1
+ <!-- 骚图hover:来源作者-->
7
2
  <template>
8
3
  <div class="w-author w-author__post" v-loading="loading">
9
4
  <div class="w-author-wrapper el-popover" v-if="data">
@@ -32,16 +27,23 @@
32
27
 
33
28
  <script>
34
29
  import { authorLink } from "@jx3box/jx3box-common/js/utils";
35
- import { getEmotion } from "../../service/author";
36
- import { __server, __imgPath, __userLevelColor } from "@jx3box/jx3box-common/data/jx3box.json";
30
+ import { getEmotion } from "../service/author";
31
+ import JX3BOX from "@jx3box/jx3box-common/data/jx3box.json";
37
32
  import dayjs from "dayjs";
38
33
  import Avatar from "./Avatar.vue";
34
+
35
+ const { __server, __imgPath, __userLevelColor } = JX3BOX;
39
36
  export default {
40
37
  name: "PostAuthor",
41
38
  components: {
42
39
  Avatar,
43
40
  },
44
- props: ["id"],
41
+ props: {
42
+ id: {
43
+ type: [String, Number],
44
+ default: "",
45
+ },
46
+ },
45
47
  data: () => ({
46
48
  data: null,
47
49
  loading: false,
@@ -74,7 +76,7 @@ export default {
74
76
  </script>
75
77
 
76
78
  <style scoped lang="less">
77
- @import "../../assets/css/module/author.less";
79
+ @import "../assets/css/module/author.less";
78
80
  .w-author {
79
81
  .u-meta {
80
82
  display: flex;
@@ -85,7 +87,7 @@ export default {
85
87
  }
86
88
  .u-meta-label {
87
89
  .mr(10px);
88
- background-color: @bg-gray;
90
+ background-color: #f6f8fa;
89
91
  padding: 0 8px;
90
92
  .r(2px);
91
93
  }
@@ -0,0 +1,136 @@
1
+ <template>
2
+ <div class="w-qrcode" @click="togglePic" :class="{ on: active }" v-if="mode == 'cms'">
3
+ <img class="u-icon" svg-inline src=".././assets/img/other/qr-code.svg" />
4
+ <span class="u-text">二维码</span>
5
+ <div class="u-qrcode">
6
+ <qrcode-vue class="u-pic" :value="value" :size="size" level="H"></qrcode-vue>
7
+ <span>扫一扫即可访问</span>
8
+ </div>
9
+ </div>
10
+ <div class="w-qrcode-static" v-else-if="mode == 'static'">
11
+ <div class="u-qrcode">
12
+ <qrcode-vue class="u-pic" :value="value" :size="size" level="H"></qrcode-vue>
13
+ <span class="u-txt"
14
+ ><img class="u-icon" svg-inline src="./assets/img/other/qr-code.svg" />扫一扫手机访问</span
15
+ >
16
+ </div>
17
+ </div>
18
+ </template>
19
+
20
+ <script>
21
+ import QrcodeVue from "qrcode.vue";
22
+ export default {
23
+ name: "QRcode",
24
+ props: {
25
+ href: {
26
+ type: String,
27
+ default: "",
28
+ },
29
+ s: {
30
+ type: [String, Number],
31
+ default: 100,
32
+ },
33
+ v: {
34
+ type: String,
35
+ default: "cms",
36
+ },
37
+ },
38
+ data: function () {
39
+ return {
40
+ value: this.href || location.href,
41
+ size: this.s || 100,
42
+ active: false,
43
+ mode: this.v || "cms",
44
+ };
45
+ },
46
+ computed: {},
47
+ methods: {
48
+ togglePic: function (e) {
49
+ e.stopPropagation();
50
+ this.active = !this.active;
51
+ },
52
+ },
53
+ mounted: function () {
54
+ const vm = this;
55
+ document.addEventListener("click", function () {
56
+ vm.active = false;
57
+ });
58
+ },
59
+ components: {
60
+ QrcodeVue,
61
+ },
62
+ };
63
+ </script>
64
+
65
+ <style lang="less">
66
+ .w-qrcode {
67
+ .dbi;
68
+ .u-icon {
69
+ .mr(5px);
70
+ .size(14px);
71
+ .y(-2px);
72
+ fill: @color;
73
+ }
74
+ .u-text {
75
+ .fz(13px);
76
+ user-select: none;
77
+ }
78
+ .pointer;
79
+ transition: 0.1s ease-in-out;
80
+ &:hover {
81
+ color: #f39;
82
+ .u-icon {
83
+ fill: #f39;
84
+ }
85
+ }
86
+
87
+ .u-qrcode {
88
+ .none;
89
+ .pa;
90
+ .mt(5px);
91
+ padding: 10px;
92
+ border: 1px solid #e8e8e8;
93
+ z-index: 1;
94
+ background: #fff;
95
+ border-radius: 3px;
96
+ font-size: 12px;
97
+ text-align: center;
98
+ color: #888;
99
+ box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
100
+ }
101
+ .u-pic {
102
+ .size(100px);
103
+ .mb(5px);
104
+ }
105
+ &.on {
106
+ .u-qrcode {
107
+ .db;
108
+ }
109
+ }
110
+ }
111
+ @media screen and (max-width: @phone) {
112
+ .w-qrcode {
113
+ .none;
114
+ }
115
+ }
116
+ .w-qrcode-static {
117
+ .u-qrcode {
118
+ .ps;
119
+ }
120
+ .u-icon {
121
+ .mr(5px);
122
+ .size(14px);
123
+ .y(-2px);
124
+ fill: @color;
125
+ }
126
+ .u-pic {
127
+ background-color: #fff;
128
+ padding: 7px 7px 7px 8px;
129
+ }
130
+ .u-txt {
131
+ padding: 0 5px;
132
+ .db;
133
+ .fz(12px,2);
134
+ }
135
+ }
136
+ </style>
@@ -26,7 +26,7 @@
26
26
  showKungfuName(kungfu)
27
27
  }}</span>
28
28
  <img
29
- src="../../assets/img/skillset.png"
29
+ src=".././assets/img/skillset.png"
30
30
  class="u-title-img"
31
31
  alt="" />
32
32
  </div>
@@ -57,7 +57,7 @@
57
57
  <div class="u-title">
58
58
  <span class="u-title-name">奇穴技能</span>
59
59
  <img
60
- src="../../assets/img/skillset.png"
60
+ src=".././assets/img/skillset.png"
61
61
  class="u-title-img"
62
62
  alt="" />
63
63
  </div>
@@ -84,7 +84,7 @@
84
84
  <div class="u-title">
85
85
  <span class="u-title-name">江湖轻功</span>
86
86
  <img
87
- src="../../assets/img/skillset.png"
87
+ src=".././assets/img/skillset.png"
88
88
  class="u-title-img"
89
89
  alt="" />
90
90
  </div>
@@ -114,7 +114,7 @@
114
114
  <div class="u-title">
115
115
  <span class="u-title-name">门派技能</span>
116
116
  <img
117
- src="../../assets/img/skillset.png"
117
+ src=".././assets/img/skillset.png"
118
118
  class="u-title-img"
119
119
  alt="" />
120
120
  </div>
@@ -143,7 +143,7 @@
143
143
  <div class="u-title">
144
144
  <span class="u-title-name">通用技能</span>
145
145
  <img
146
- src="../../assets/img/skillset.png"
146
+ src=".././assets/img/skillset.png"
147
147
  class="u-title-img"
148
148
  alt="" />
149
149
  </div>
@@ -178,14 +178,14 @@ import {
178
178
  getSkills,
179
179
  getTalents,
180
180
  getMobileForceSkillList,
181
- } from "../../service/node";
181
+ } from "../service/node";
182
182
  import kungfumap_std from "@jx3box/jx3box-data/data/martial/kungfu_std.json";
183
183
  import kungfumap_origin from "@jx3box/jx3box-data/data/martial/kungfu_origin.json";
184
184
  import { flattenDeep, uniqBy } from "lodash";
185
185
  import kungfus from "@jx3box/jx3box-data/data/martial/kungfuid.json";
186
186
  import { iconLink } from "@jx3box/jx3box-common/js/utils";
187
187
  export default {
188
- name: "pvp_martial",
188
+ name: "SkillMartial",
189
189
  props: {
190
190
  subtype: {
191
191
  type: String,
@@ -215,9 +215,7 @@ export default {
215
215
  return xfmap[this.subtype]?.id;
216
216
  },
217
217
  skillIds() {
218
- return flattenDeep(
219
- Object.values(this.kungfumap?.[this.mountId]?.["skills"])
220
- );
218
+ return flattenDeep(Object.values(this.mountData?.skills || {}));
221
219
  },
222
220
  ids() {
223
221
  return [
@@ -229,6 +227,9 @@ export default {
229
227
  kungfumap() {
230
228
  return this.client == "origin" ? kungfumap_origin : kungfumap_std;
231
229
  },
230
+ mountData() {
231
+ return this.kungfumap?.[this.mountId] || {};
232
+ },
232
233
  params() {
233
234
  return {
234
235
  ids: this.ids,
@@ -249,7 +250,7 @@ export default {
249
250
  // 门派技能数据
250
251
  kungfusSkills: function () {
251
252
  const obj = {};
252
- Object.entries(this.kungfumap[this.mountId]["skills"]).forEach(
253
+ Object.entries(this.mountData?.skills || {}).forEach(
253
254
  ([key, value]) => {
254
255
  obj[key] = value.map(SkillID => {
255
256
  const currentSkill = this.data.find(
@@ -263,7 +264,7 @@ export default {
263
264
  },
264
265
  // 门派技能套路id
265
266
  kungfus: function () {
266
- return this.kungfumap[this.mountId]["kungfus"];
267
+ return this.mountData?.kungfus || [];
267
268
  },
268
269
  talentSkills() {
269
270
  return this.talentSkillIds
@@ -0,0 +1,14 @@
1
+ import { createApp } from "vue";
2
+
3
+ import ArticlePage from "../views/article.vue";
4
+ const app = createApp(ArticlePage);
5
+
6
+ import ElementPlus from "element-plus";
7
+ import "element-plus/dist/index.css";
8
+ import "@jx3box/jx3box-common/css/element-plus-theme.scss";
9
+ app.use(ElementPlus);
10
+
11
+ import '@jx3box/jx3box-common/css/font.css';
12
+ import '@jx3box/jx3box-common/css/normalize.css';
13
+
14
+ app.mount("#app");
@@ -0,0 +1,5 @@
1
+ // 第三方UI组件
2
+ import { createApp } from "vue";
3
+ import App from "../views/index.vue";
4
+ const app = createApp(App);
5
+ app.mount("#app");
@@ -0,0 +1,14 @@
1
+ import { createApp } from "vue";
2
+
3
+ import MarkdownPage from "../views/markdown.vue";
4
+ const app = createApp(MarkdownPage);
5
+
6
+ import ElementPlus from "element-plus";
7
+ import "element-plus/dist/index.css";
8
+ import "@jx3box/jx3box-common/css/element-plus-theme.scss";
9
+ app.use(ElementPlus);
10
+
11
+ import '@jx3box/jx3box-common/css/font.css';
12
+ import '@jx3box/jx3box-common/css/normalize.css';
13
+
14
+ app.mount("#app");