@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.
- package/config/global.js +79 -0
- package/config/global.less +16 -0
- package/index.js +21 -8
- package/package.json +64 -63
- package/readme.md +25 -99
- package/src/Article.vue +96 -57
- package/src/ArticleMarkdown.vue +54 -47
- package/src/BoxResource.vue +67 -42
- package/src/Buff.vue +18 -7
- package/src/GameText.vue +32 -45
- package/src/Item.vue +143 -235
- package/src/ItemSimple.vue +27 -37
- package/src/Markdown.vue +362 -210
- package/src/Npc.vue +51 -30
- package/src/Resource.vue +296 -252
- package/src/Skill.vue +36 -26
- package/src/Tinymce.vue +124 -137
- package/src/Upload.vue +238 -155
- package/src/UploadAlbum.vue +189 -118
- package/{assets → src/assets}/css/article.less +1 -0
- package/src/assets/css/markdown.less +4 -0
- package/{assets → src/assets}/css/module/author.less +4 -3
- package/{assets → src/assets}/css/module/directory.less +23 -32
- package/{assets → src/assets}/css/module/talent.less +2 -2
- package/{assets → src/assets}/css/resource.less +56 -22
- package/src/assets/css/tinymce/_.less +28 -0
- package/src/assets/css/tinymce/a.less +21 -0
- package/{assets → src/assets}/css/tinymce/code.less +1 -1
- package/{assets/css → src/assets/css/tinymce}/combo.less +123 -18
- package/{assets → src/assets}/css/tinymce/fold.less +3 -6
- package/src/assets/css/tinymce/h.less +90 -0
- package/{assets → src/assets}/css/tinymce/latex.less +14 -14
- package/{assets → src/assets}/css/tinymce/macro.less +3 -3
- package/{assets → src/assets}/css/tinymce/pz.less +2 -2
- package/{assets → src/assets}/css/tinymce/table.less +5 -10
- package/{assets → src/assets}/css/tinymce.less +8 -4
- package/src/assets/css/upload.less +195 -0
- package/src/assets/css/upload_album.less +164 -0
- package/src/assets/css/var.less +2 -0
- package/src/assets/img/other/qr-code.svg +1 -0
- package/{assets → src/assets}/js/audio.js +2 -2
- package/{assets → src/assets}/js/directory.js +51 -23
- package/src/assets/js/hljs_languages.js +177 -0
- package/src/assets/js/katex.js +211 -0
- package/src/assets/js/renderImgPreview.js +49 -0
- package/{assets → src/assets}/js/xss.js +48 -5
- package/src/components/Author.vue +32 -13
- package/src/components/Avatar.vue +22 -3
- package/src/components/Combo.vue +118 -72
- package/src/components/PostAuthor.vue +13 -11
- package/src/components/QRcode.vue +136 -0
- package/src/components/SkillMartial.vue +13 -12
- package/src/pages/article.js +14 -0
- package/src/pages/index.js +5 -0
- package/src/pages/markdown.js +14 -0
- package/src/pages/tinymce.js +49 -0
- package/src/pages/upload.js +14 -0
- package/{service → src/service}/author.js +2 -2
- package/{service → src/service}/cms.js +5 -3
- package/{service → src/service}/database.js +4 -2
- package/{service → src/service}/item.js +1 -1
- package/{service → src/service}/node.js +1 -1
- package/{service → src/service}/resource.js +1 -1
- package/src/views/article.vue +72 -0
- package/src/views/index.vue +11 -0
- package/src/views/markdown.vue +58 -0
- package/src/views/tinymce.vue +58 -0
- package/src/views/upload.vue +111 -0
- package/.env +0 -2
- package/.vscode/settings.json +0 -5
- package/assets/css/katex-fix.css +0 -20
- package/assets/css/tinymce/_.less +0 -30
- package/assets/css/tinymce/a.less +0 -30
- package/assets/css/tinymce/combo.less +0 -111
- package/assets/css/tinymce/h.less +0 -58
- package/assets/css/upload.less +0 -105
- package/assets/js/katex.js +0 -191
- package/assets/js/renderImgPreview.js +0 -25
- package/babel.config.js +0 -3
- package/docs/markdown.md +0 -16
- package/jsconfig.json +0 -9
- package/public/article.html +0 -15
- package/public/css/article.css +0 -2481
- package/public/css/article.less +0 -3
- package/public/favicon.ico +0 -0
- package/public/tinymce.html +0 -33
- package/src/Equip.vue +0 -301
- package/src/components/LetterDemo.vue +0 -93
- package/src/components/medal.vue +0 -43
- package/test-audio.html +0 -121
- package/vue.config.js +0 -147
- /package/{assets → src/assets}/css/markdown/_.less +0 -0
- /package/{assets → src/assets}/css/markdown/macro.less +0 -0
- /package/{assets/css/article_markdown.less → src/assets/css/markdown/markdown-article.less} +0 -0
- /package/{assets/css/markdown.less → src/assets/css/markdown/markdown-editor.less} +0 -0
- /package/{assets → src/assets}/css/markdown/talent.less +0 -0
- /package/{assets → src/assets}/css/markdown/video.less +0 -0
- /package/{assets → src/assets}/css/module/buff.less +0 -0
- /package/{assets → src/assets}/css/module/icon.less +0 -0
- /package/{assets → src/assets}/css/module/item.less +0 -0
- /package/{assets → src/assets}/css/module/item_simple.less +0 -0
- /package/{assets → src/assets}/css/module/jx3_element.less +0 -0
- /package/{assets → src/assets}/css/module/macro.less +0 -0
- /package/{assets → src/assets}/css/module/npc.less +0 -0
- /package/{assets → src/assets}/css/module/resource.less +0 -0
- /package/{assets → src/assets}/css/module/skill.less +0 -0
- /package/{assets → src/assets}/css/tinymce/hr.less +0 -0
- /package/{assets → src/assets}/css/tinymce/img.less +0 -0
- /package/{assets → src/assets}/css/tinymce/imgpreview.less +0 -0
- /package/{assets → src/assets}/css/tinymce/list.less +0 -0
- /package/{assets → src/assets}/css/tinymce/nextpage.less +0 -0
- /package/{assets → src/assets}/css/tinymce/p.less +0 -0
- /package/{assets → src/assets}/css/tinymce/plugin.less +0 -0
- /package/{assets → src/assets}/css/tinymce/qixue.less +0 -0
- /package/{assets → src/assets}/css/tinymce/quote.less +0 -0
- /package/{assets → src/assets}/css/tinymce/video.less +0 -0
- /package/{assets → src/assets}/css/tinymce/voice.less +0 -0
- /package/{assets → src/assets}/data/detach_type.json +0 -0
- /package/{assets → src/assets}/data/game_font.json +0 -0
- /package/{assets → src/assets}/data/markdown_whitelist.json +0 -0
- /package/{assets → src/assets}/data/weapon_type.json +0 -0
- /package/{assets → src/assets}/img/buff.svg +0 -0
- /package/{assets → src/assets}/img/equip_bg.png +0 -0
- /package/{assets → src/assets}/img/file.svg +0 -0
- /package/{assets → src/assets}/img/icons.svg +0 -0
- /package/{assets → src/assets}/img/item/pve.png +0 -0
- /package/{assets → src/assets}/img/item/pvp.png +0 -0
- /package/{assets → src/assets}/img/item/pvx.png +0 -0
- /package/{assets → src/assets}/img/item/std.png +0 -0
- /package/{assets → src/assets}/img/item/wujie.png +0 -0
- /package/{assets → src/assets}/img/item.svg +0 -0
- /package/{assets → src/assets}/img/jx3.svg +0 -0
- /package/{assets → src/assets}/img/jx3box.svg +0 -0
- /package/{assets → src/assets}/img/npc/attack.svg +0 -0
- /package/{assets → src/assets}/img/npc/buff.svg +0 -0
- /package/{assets → src/assets}/img/npc/energy.svg +0 -0
- /package/{assets → src/assets}/img/npc/miss.svg +0 -0
- /package/{assets → src/assets}/img/npc/npc.svg +0 -0
- /package/{assets → src/assets}/img/npc/radar.svg +0 -0
- /package/{assets → src/assets}/img/npc/shield.svg +0 -0
- /package/{assets → src/assets}/img/npc/sight.svg +0 -0
- /package/{assets → src/assets}/img/npc/skull.svg +0 -0
- /package/{assets → src/assets}/img/npc/target.svg +0 -0
- /package/{assets → src/assets}/img/skill.svg +0 -0
- /package/{assets → src/assets}/img/skillset.png +0 -0
- /package/{assets → src/assets}/js/a.js +0 -0
- /package/{assets → src/assets}/js/code.js +0 -0
- /package/{assets → src/assets}/js/combo.js +0 -0
- /package/{assets → src/assets}/js/drag.js +0 -0
- /package/{assets → src/assets}/js/filter2.js +0 -0
- /package/{assets → src/assets}/js/fold.js +0 -0
- /package/{assets → src/assets}/js/gallery.js +0 -0
- /package/{assets → src/assets}/js/iframe.js +0 -0
- /package/{assets → src/assets}/js/img.js +0 -0
- /package/{assets → src/assets}/js/item/attribute_percent.js +0 -0
- /package/{assets → src/assets}/js/item/bind.js +0 -0
- /package/{assets → src/assets}/js/item/border.js +0 -0
- /package/{assets → src/assets}/js/item/border_quest.js +0 -0
- /package/{assets → src/assets}/js/item/color.js +0 -0
- /package/{assets → src/assets}/js/item/hljs_languages.js +0 -0
- /package/{assets → src/assets}/js/item/icon_url.js +0 -0
- /package/{assets → src/assets}/js/item/second_format.js +0 -0
- /package/{assets → src/assets}/js/jx3_element.js +0 -0
- /package/{assets → src/assets}/js/macro.js +0 -0
- /package/{assets → src/assets}/js/nextpage.js +0 -0
- /package/{assets → src/assets}/js/pswp.js +0 -0
- /package/{assets → src/assets}/js/pswp_template.js +0 -0
- /package/{assets → src/assets}/js/pz_iframe.js +0 -0
- /package/{assets → src/assets}/js/qixue.js +0 -0
- /package/{assets → src/assets}/js/script.js +0 -0
- /package/{assets → src/assets}/js/talent2.js +0 -0
- /package/{assets → src/assets}/js/tex-mml-chtml.js +0 -0
- /package/{service → src/service}/enum/CollectionPublic.js +0 -0
- /package/{service → src/service}/enum/EquipPosition.js +0 -0
- /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/
|
|
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/
|
|
1
|
+
import { $cms } from "@jx3box/jx3box-common/js/api";
|
|
2
2
|
import axios from "axios";
|
|
3
|
-
import
|
|
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
|
|
3
|
-
import { $node } from "@jx3box/jx3box-common/js/
|
|
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) {
|
|
@@ -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
package/.vscode/settings.json
DELETED
package/assets/css/katex-fix.css
DELETED
|
@@ -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
|
-
}
|