@jx3box/jx3box-editor 2.2.47 → 3.0.0

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 +162 -126
  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
@@ -0,0 +1,49 @@
1
+ import { createApp } from "vue";
2
+
3
+ import TinymcePage from "../views/tinymce.vue";
4
+ const app = createApp(TinymcePage);
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
+
10
+ const rawLang = (localStorage.getItem("lang") || "zh-cn").toLowerCase();
11
+ const langMap = {
12
+ "zh-cn": { element: "zh-cn", tinymce: "zh_CN" },
13
+ "zh-hans": { element: "zh-cn", tinymce: "zh_CN" },
14
+ "zh-tw": { element: "zh-tw", tinymce: "zh_TW" },
15
+ "zh-hant": { element: "zh-tw", tinymce: "zh_TW" },
16
+ en: { element: "en", tinymce: "en" },
17
+ "en-us": { element: "en", tinymce: "en" },
18
+ vi: { element: "vi", tinymce: "vi_VN" },
19
+ "vi-vn": { element: "vi", tinymce: "vi_VN" },
20
+ };
21
+ const currentLang = langMap[rawLang] || langMap["zh-cn"];
22
+ window.__EDITOR_LANG__ = currentLang;
23
+
24
+ const epLocaleLoaders = {
25
+ "zh-cn": () => import("element-plus/es/locale/lang/zh-cn"),
26
+ "zh-tw": () => import("element-plus/es/locale/lang/zh-tw"),
27
+ en: () => import("element-plus/es/locale/lang/en"),
28
+ vi: () => import("element-plus/es/locale/lang/vi"),
29
+ };
30
+ const loadElementLocale = epLocaleLoaders[currentLang.element] || epLocaleLoaders["zh-cn"];
31
+
32
+ import '@jx3box/jx3box-common/css/font.css';
33
+ import '@jx3box/jx3box-common/css/normalize.css';
34
+
35
+ import * as ElementPlusIconsVue from "@element-plus/icons-vue";
36
+ for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
37
+ app.component(key, component);
38
+ }
39
+
40
+ loadElementLocale()
41
+ .then((module) => {
42
+ app.use(ElementPlus, { locale: module.default });
43
+ })
44
+ .catch(() => {
45
+ app.use(ElementPlus);
46
+ })
47
+ .finally(() => {
48
+ app.mount("#app");
49
+ });
@@ -0,0 +1,14 @@
1
+ import { createApp } from "vue";
2
+
3
+ import UploadPage from "../views/upload.vue";
4
+ const app = createApp(UploadPage);
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");
@@ -1,4 +1,4 @@
1
- import { $next, $cms, $team } from "@jx3box/jx3box-common/js/https";
1
+ import { $next, $cms, $team } from "@jx3box/jx3box-common/js/api";
2
2
 
3
3
  async function getUserMedals(uid) {
4
4
  const res = await $next({ mute: true })
@@ -31,4 +31,4 @@ export {
31
31
  getUserInfo,
32
32
  getUserPublicTeams,
33
33
  getEmotion
34
- }
34
+ }
@@ -1,6 +1,8 @@
1
- import { $cms } from "@jx3box/jx3box-common/js/https";
1
+ import { $cms } from "@jx3box/jx3box-common/js/api";
2
2
  import axios from "axios";
3
- import { __cdn } from "@jx3box/jx3box-common/data/jx3box.json";
3
+ import JX3BOX from "@jx3box/jx3box-common/data/jx3box.json";
4
+
5
+ const { __cdn } = JX3BOX;
4
6
 
5
7
  function uploadFile(data) {
6
8
  return $cms().post(`/api/cms/upload`, data);
@@ -37,4 +39,4 @@ function getLetterPaper(params) {
37
39
  params,
38
40
  });
39
41
  }
40
- export { uploadFile, loadAuthors, loadEmotions, getDecoration, getDecorationJson, getLetterPaper };
42
+ export { uploadFile, loadAuthors, loadEmotions, getDecoration, getDecorationJson, getLetterPaper };
@@ -1,6 +1,8 @@
1
1
  import axios from "axios";
2
- import { __node, __helperUrl, __iconPath } from "@jx3box/jx3box-common/data/jx3box.json";
3
- import { $node } from "@jx3box/jx3box-common/js/https";
2
+ import JX3BOX from "@jx3box/jx3box-common/data/jx3box.json";
3
+ import { $node } from "@jx3box/jx3box-common/js/api";
4
+
5
+ const { __node } = JX3BOX;
4
6
 
5
7
  function loadResource(type, query, params) {
6
8
  switch (type) {
@@ -1,4 +1,4 @@
1
- import { $node, $cms } from "@jx3box/jx3box-common/js/https";
1
+ import { $node, $cms } from "@jx3box/jx3box-common/js/api";
2
2
 
3
3
  // 获取物品
4
4
  function get_item(item_id, client = 'std') {
@@ -1,4 +1,4 @@
1
- import { $node, axios } from "@jx3box/jx3box-common/js/https";
1
+ import { $node, axios } from "@jx3box/jx3box-common/js/api";
2
2
 
3
3
  function getSkill(query, params) {
4
4
  let condition = isNaN(query) ? "name" : "id";
@@ -5,7 +5,7 @@
5
5
  * @LastEditTime: 2022-08-20 23:54:41
6
6
  * @Description:
7
7
  */
8
- import { $node } from "@jx3box/jx3box-common/js/https";
8
+ import { $node } from "@jx3box/jx3box-common/js/api";
9
9
  const $ = $node();
10
10
 
11
11
  /* import axios from 'axios'
@@ -0,0 +1,72 @@
1
+ <template>
2
+ <h1 class="title">文章渲染</h1>
3
+ <div class="tab">
4
+ <el-segmented v-model="group" :options="groupOptions" />
5
+ </div>
6
+ <div class="container">
7
+ <Article class="article" :content="content"></Article>
8
+ <div id="directory"></div>
9
+ </div>
10
+ </template>
11
+
12
+ <script>
13
+ import Article from "../Article.vue";
14
+ export default {
15
+ name: "ArticleDemo",
16
+ props: [],
17
+ components: {
18
+ Article,
19
+ },
20
+ data: function () {
21
+ return {
22
+ content: "",
23
+ group: "basic",
24
+ groupOptions: [
25
+ { label: "基础内容", value: "basic" },
26
+ { label: "剑三内容", value: "jx3" },
27
+ { label: "魔盒内容", value: "jx3box" },
28
+ { label: "Markdown", value: "markdown" },
29
+ ],
30
+ };
31
+ },
32
+ watch: {
33
+ group: {
34
+ immediate: true,
35
+ handler(val) {
36
+ const url = `/demo/article_${val}.html`;
37
+ fetch(url)
38
+ .then((res) => res.text())
39
+ .then((data) => {
40
+ this.content = data;
41
+ });
42
+ },
43
+ },
44
+ },
45
+ };
46
+ </script>
47
+
48
+ <style lang="less">
49
+ .title {
50
+ .x;
51
+ }
52
+ .tab {
53
+ .flex(x);
54
+ margin-bottom: 1rem;
55
+ }
56
+ .container{
57
+ #directory{
58
+ .w(200px);
59
+ position: fixed;
60
+ right:20px;
61
+ top:20px;
62
+ }
63
+ .article{
64
+ margin-right: 320px;
65
+ }
66
+
67
+ }
68
+ body{
69
+ min-height:2000px;
70
+ padding:0 20px;
71
+ }
72
+ </style>
@@ -0,0 +1,11 @@
1
+ <template>
2
+ <div>
3
+ <h2>通用组件</h2>
4
+ <ul>
5
+ <li><a href="/article">Article - 文章渲染</a></li>
6
+ <li><a href="/tinymce">Tinymce - 编辑器</a></li>
7
+ <li><a href="/markdown">Markdown - 编辑器</a></li>
8
+ <li><a href="/upload">Upload - 上传组件</a></li>
9
+ </ul>
10
+ </div>
11
+ </template>
@@ -0,0 +1,58 @@
1
+ <template>
2
+ <div class="m-markdown-demo">
3
+ <h1 class="m-markdown-demo__title">Markdown 编辑器</h1>
4
+ <p class="m-markdown-demo__desc">基于 Vditor 的演示页,默认加载 `public/demo/article_markdown.html`。</p>
5
+
6
+ <Markdown v-model="content" />
7
+ </div>
8
+ </template>
9
+
10
+ <script>
11
+ import Markdown from "../Markdown.vue";
12
+
13
+ export default {
14
+ name: "MarkdownDemo",
15
+ components: {
16
+ Markdown,
17
+ },
18
+ data() {
19
+ return {
20
+ content: "",
21
+ };
22
+ },
23
+ created() {
24
+ this.loadDemoContent();
25
+ },
26
+ methods: {
27
+ loadDemoContent() {
28
+ fetch("/demo/article_markdown.html")
29
+ .then((res) => res.text())
30
+ .then((data) => {
31
+ this.content = data;
32
+ })
33
+ .catch(() => {
34
+ this.content = "";
35
+ });
36
+ },
37
+ },
38
+ };
39
+ </script>
40
+
41
+ <style lang="less">
42
+ .m-markdown-demo {
43
+ max-width: 1280px;
44
+ margin: 0 auto;
45
+ padding: 24px;
46
+
47
+ &__title {
48
+ margin: 0 0 8px;
49
+ text-align: center;
50
+ }
51
+
52
+ &__desc {
53
+ margin: 0 0 16px;
54
+ text-align: center;
55
+ color: #57606a;
56
+ }
57
+ }
58
+ </style>
@@ -0,0 +1,58 @@
1
+ <template>
2
+ <h1 class="title">Tinymce编辑器</h1>
3
+ <div class="tab">
4
+ <el-segmented v-model="group" :options="groupOptions" />
5
+ </div>
6
+
7
+ <div>
8
+ <Tinymce
9
+ v-model="content"
10
+ :attachmentEnable="true"
11
+ :resourceEnable="true"
12
+ />
13
+ </div>
14
+ </template>
15
+
16
+ <script>
17
+ import Tinymce from "../Tinymce.vue";
18
+ export default {
19
+ name: "TinymceDemo",
20
+ data: function () {
21
+ return {
22
+ content: "",
23
+ group: "basic",
24
+ groupOptions: [
25
+ { label: "基础内容", value: "basic" },
26
+ { label: "剑三内容", value: "jx3" },
27
+ { label: "魔盒内容", value: "jx3box" },
28
+ ],
29
+ };
30
+ },
31
+ components: {
32
+ Tinymce,
33
+ },
34
+ watch: {
35
+ group: {
36
+ immediate: true,
37
+ handler(val) {
38
+ const url = `/demo/article_${val}.html`;
39
+ fetch(url)
40
+ .then((res) => res.text())
41
+ .then((data) => {
42
+ this.content = data;
43
+ });
44
+ },
45
+ },
46
+ },
47
+ };
48
+ </script>
49
+
50
+ <style lang="less">
51
+ .title {
52
+ .x;
53
+ }
54
+ .tab {
55
+ .flex(x);
56
+ margin-bottom: 1rem;
57
+ }
58
+ </style>
@@ -0,0 +1,111 @@
1
+ <template>
2
+ <div class="c-upload-demo">
3
+ <h1 class="title">Upload 组件演示</h1>
4
+
5
+ <el-tabs v-model="activeTab">
6
+ <el-tab-pane label="Upload 附件上传" name="upload">
7
+ <Upload @insert="onInsert" @update="onUploadListChange" />
8
+
9
+ <el-alert class="u-alert" type="info" :closable="false" show-icon title="插入结果(HTML)" />
10
+ <pre class="u-block">{{ insertedHtml || "暂无插入内容" }}</pre>
11
+
12
+ <el-alert class="u-alert" type="info" :closable="false" show-icon title="当前文件列表" />
13
+ <ul class="u-list" v-if="uploadFileList.length">
14
+ <li v-for="file in uploadFileList" :key="file.uid || file.url">
15
+ <span>{{ file.name }}</span>
16
+ <a :href="file.url" target="_blank" rel="noopener noreferrer">{{ file.url }}</a>
17
+ </li>
18
+ </ul>
19
+ <div v-else class="u-empty">暂无文件</div>
20
+ </el-tab-pane>
21
+
22
+ <el-tab-pane label="UploadAlbum 图片相册" name="album">
23
+ <UploadAlbum v-model="albumList" />
24
+ <ol class="u-list" v-if="albumList.length">
25
+ <li v-for="item in albumList" :key="item.id || item.url">
26
+ <span>{{ item.name || "未命名" }}</span>
27
+ <a :href="item.url" target="_blank" rel="noopener noreferrer">{{ item.url }}</a>
28
+ </li>
29
+ </ol>
30
+ <div v-else class="u-empty">暂无相册图片</div>
31
+ </el-tab-pane>
32
+ </el-tabs>
33
+ </div>
34
+ </template>
35
+
36
+ <script>
37
+ import Upload from "../Upload.vue";
38
+ import UploadAlbum from "../UploadAlbum.vue";
39
+
40
+ export default {
41
+ name: "UploadDemo",
42
+ components: {
43
+ Upload,
44
+ UploadAlbum,
45
+ },
46
+ data() {
47
+ return {
48
+ activeTab: "upload",
49
+ insertedHtml: "",
50
+ uploadFileList: [],
51
+ albumList: [],
52
+ };
53
+ },
54
+ methods: {
55
+ onInsert(payload) {
56
+ this.insertedHtml = payload?.html || "";
57
+ },
58
+ onUploadListChange(list) {
59
+ this.uploadFileList = Array.isArray(list) ? list : [];
60
+ },
61
+ },
62
+ };
63
+ </script>
64
+
65
+ <style lang="less">
66
+ .c-upload-demo {
67
+ max-width: 960px;
68
+ margin: 0 auto;
69
+
70
+ .title {
71
+ .x;
72
+ margin-bottom: 20px;
73
+ }
74
+
75
+ .u-alert {
76
+ margin: 20px 0 10px;
77
+ }
78
+
79
+ .u-block {
80
+ margin: 0;
81
+ padding: 12px;
82
+ border: 1px solid #e4e7ed;
83
+ border-radius: 4px;
84
+ background: #fafafa;
85
+ white-space: pre-wrap;
86
+ word-break: break-word;
87
+ }
88
+
89
+ .u-list {
90
+ margin: 0;
91
+ padding-left: 18px;
92
+ line-height: 1.8;
93
+
94
+ li {
95
+ span {
96
+ margin-right: 8px;
97
+ color: #303133;
98
+ }
99
+
100
+ a {
101
+ color: #409eff;
102
+ word-break: break-all;
103
+ }
104
+ }
105
+ }
106
+
107
+ .u-empty {
108
+ color: #909399;
109
+ }
110
+ }
111
+ </style>
package/.env DELETED
@@ -1,2 +0,0 @@
1
- STATIC_PATH=origin
2
- VUE_APP_DEV_COMPONENT=true
@@ -1,5 +0,0 @@
1
- {
2
- "cSpell.words": [
3
- "wujie"
4
- ]
5
- }
@@ -1,20 +0,0 @@
1
- /* KaTeX 字体修复 */
2
- .katex {
3
- font-family: KaTeX_Main, "Times New Roman", serif !important;
4
- }
5
-
6
- .katex .mord,
7
- .katex .mop {
8
- font-family: KaTeX_Main, "Times New Roman", serif !important;
9
- }
10
-
11
- /* 强制求和符号使用正确字体 */
12
- .katex .mop.op-symbol.large-op {
13
- font-family: KaTeX_Size2, KaTeX_Size1, KaTeX_Main, "Times New Roman", serif !important;
14
- }
15
-
16
- /* 确保数学符号显示 */
17
- .katex .mop:before,
18
- .katex .mop:after {
19
- font-family: KaTeX_Main, "Times New Roman", serif !important;
20
- }
@@ -1,30 +0,0 @@
1
- .c-article-tinymce{
2
- font-size: 1em;
3
- line-height: 1.8;
4
- color: #3d454d;
5
- max-width: 100%;
6
- -webkit-font-smoothing: antialiased !important;
7
- overflow-wrap: break-word;
8
- word-wrap: break-word;
9
- font-family: -apple-system,BlinkMacSystemFont,Segoe UI,"Microsoft YaHei", Trebuchet MS, Calibri,
10
- BlinkMacSystemFont, Segoe UI, Helvetica Neue, Helvetica, sans-serif;
11
- text-rendering: optimizelegibility;
12
-
13
- *{
14
- max-width: 100%;
15
- box-sizing: border-box;
16
- }
17
-
18
- scroll-behavior: smooth;
19
- }
20
- .c-article-editor{
21
- margin:8px;
22
- }
23
- .c-article-origin{
24
- display: none;
25
- }
26
- @media print{
27
- .c-article-tinymce{
28
- -webkit-print-color-adjust: exact;
29
- }
30
- }
@@ -1,30 +0,0 @@
1
- /* 链接 */
2
- .c-article-tinymce{
3
- a {
4
- color: #0366d6;
5
- text-decoration: none;
6
- word-break: break-all;
7
- &:hover {
8
- box-shadow: 0 1px 0 #0366d6;
9
- }
10
- }
11
-
12
- .e-jx3-author{
13
- // padding: 2px 5px;
14
- // border-radius: 3px;
15
- // border: 1px solid #8250df;
16
- color:#8250df;
17
-
18
- &:hover{
19
- box-shadow: 0 1px 0 #8250df;
20
- // background-color: #fafbfc;
21
- }
22
- }
23
- }
24
- // @media print {
25
- // .c-article {
26
- // a::after {
27
- // content: "(" attr(href) ")"; /* 所有链接后显示链接地址 */
28
- // }
29
- // }
30
- // }
@@ -1,111 +0,0 @@
1
- .c-article-tinymce:not(.c-article-editor) {
2
- .w-skill-combo {
3
- .flex;
4
- gap: 20px;
5
- flex-wrap: wrap;
6
- list-style: none;
7
- padding:0;
8
- margin:0;
9
- }
10
- .w-skill-combo-item {
11
- list-style: none;
12
- .pr;
13
- .flex;
14
- flex-direction: column;
15
- align-items: center;
16
- &:not(:last-of-type)::after {
17
- content: "▲";
18
- .pa;
19
- right: -20px;
20
- top: 5px;
21
- transform: rotate(90deg);
22
- }
23
-
24
- img {
25
- border: none;
26
- padding: 0;
27
- margin: 0;
28
- }
29
- .u-skill-icon {
30
- .size(48px);
31
- .x;
32
- .flex;
33
- align-items: center;
34
- justify-content: center;
35
- }
36
-
37
- .u-skill-icon_small {
38
- .size(42px);
39
- }
40
-
41
- .u-gcd-icon {
42
- .pa;
43
- // 左上角
44
- left: -4px;
45
- top: -4px;
46
- background-color: #0366d6;
47
- .size(12px);
48
- .r(50%);
49
- .db;
50
- .none;
51
-
52
- &.is-show {
53
- display: inline-block;
54
- }
55
-
56
- i {
57
- color: #fff;
58
- .fz(12px, 1);
59
- .db;
60
- }
61
- }
62
- .u-skill-name {
63
- .fz(13px,1.5);
64
- width: 56px;
65
- overflow: hidden;
66
- text-overflow: clip;
67
- white-space: pre-wrap;
68
- text-align: center;
69
- }
70
-
71
- .u-skill-name_underline {
72
- text-decoration: underline;
73
- text-underline-offset: 3px;
74
- }
75
-
76
- .u-skill-note {
77
- .fz(12px,1);
78
- width: 56px;
79
- text-overflow: clip;
80
- white-space: pre-wrap;
81
- text-align: center;
82
- margin-bottom: 5px;
83
- }
84
- }
85
- }
86
- .c-article-editor {
87
- .e-skill-combo {
88
- font-size: 14px;
89
- width: 100%;
90
- box-sizing: border-box;
91
- background-color: #f1f8ff;
92
- border: 1px solid #c8e1ff;
93
- color: #62a9ff;
94
- padding: 10px 10px 10px 30px;
95
- font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif;
96
- position: relative;
97
- *zoom: 1;
98
- border-radius: 3px;
99
- }
100
- .e-skill-combo:after {
101
- content: "JX3BOX·连招套路";
102
- position: absolute;
103
- right: 8px;
104
- top: 8px;
105
- background-color: #62a9ff;
106
- color: #fff;
107
- border-radius: 3px;
108
- padding: 2px 8px;
109
- line-height: 21px;
110
- }
111
- }