@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
package/src/Skill.vue
CHANGED
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="w-skill" v-if="data">
|
|
3
3
|
<div class="w-skill-wrapper">
|
|
4
|
-
<img
|
|
5
|
-
class="w-skill-icon"
|
|
6
|
-
:src="iconLink(data.IconID || 13)"
|
|
7
|
-
:alt="data.Name"
|
|
8
|
-
/>
|
|
4
|
+
<img class="w-skill-icon" :src="iconLink(data.IconID || 13)" :alt="data.Name" />
|
|
9
5
|
<div class="w-skill-content">
|
|
10
|
-
<el-button
|
|
11
|
-
type="text"
|
|
12
|
-
class="w-skill-switch-parse"
|
|
13
|
-
@click="show_parse = !show_parse"
|
|
14
|
-
>
|
|
6
|
+
<el-button link class="w-skill-switch-parse" @click="show_parse = !show_parse">
|
|
15
7
|
<i class="el-icon-refresh"></i>
|
|
16
8
|
</el-button>
|
|
17
9
|
<span class="w-skill-name">{{ data.Name }}</span>
|
|
@@ -26,28 +18,42 @@
|
|
|
26
18
|
</template>
|
|
27
19
|
|
|
28
20
|
<script>
|
|
29
|
-
import { getSkill } from "
|
|
21
|
+
import { getSkill } from "./service/database.js";
|
|
30
22
|
import { iconLink } from "@jx3box/jx3box-common/js/utils";
|
|
31
23
|
export default {
|
|
32
24
|
name: "Skill",
|
|
33
|
-
props:
|
|
25
|
+
props: {
|
|
26
|
+
client: {
|
|
27
|
+
type: String,
|
|
28
|
+
default: "std",
|
|
29
|
+
},
|
|
30
|
+
id: {
|
|
31
|
+
type: [String, Number],
|
|
32
|
+
default: "",
|
|
33
|
+
},
|
|
34
|
+
level: {
|
|
35
|
+
type: [String, Number],
|
|
36
|
+
default: "",
|
|
37
|
+
},
|
|
38
|
+
},
|
|
34
39
|
data: () => ({
|
|
35
40
|
data: null,
|
|
36
41
|
show_parse: true,
|
|
42
|
+
requestVersion: 0,
|
|
37
43
|
}),
|
|
38
44
|
computed: {
|
|
39
45
|
params: function () {
|
|
40
46
|
return [this.client, this.id, this.level];
|
|
41
47
|
},
|
|
42
48
|
desc: function () {
|
|
43
|
-
if (this.data
|
|
49
|
+
if (this.data?.parse && this.show_parse) {
|
|
44
50
|
const result = this.data.parse.desc;
|
|
45
51
|
return result.replace(/\\n/g, "\n");
|
|
46
52
|
}
|
|
47
53
|
return this.data?.Desc;
|
|
48
54
|
},
|
|
49
55
|
talent_desc: function () {
|
|
50
|
-
if (this.data
|
|
56
|
+
if (this.data?.parse && this.show_parse) {
|
|
51
57
|
return this.data.parse.talent_desc;
|
|
52
58
|
}
|
|
53
59
|
return "";
|
|
@@ -56,32 +62,36 @@ export default {
|
|
|
56
62
|
watch: {
|
|
57
63
|
params: {
|
|
58
64
|
immediate: true,
|
|
59
|
-
deep: true,
|
|
60
65
|
handler(val) {
|
|
66
|
+
this.requestVersion += 1;
|
|
67
|
+
const currentVersion = this.requestVersion;
|
|
68
|
+
|
|
61
69
|
if (val) {
|
|
62
70
|
let [client, id, level] = val;
|
|
71
|
+
if (!id) {
|
|
72
|
+
this.data = null;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
63
75
|
// 读取本地数据
|
|
64
|
-
const cache = sessionStorage.getItem(
|
|
65
|
-
`skill-${client}-${id}-${level}`
|
|
66
|
-
);
|
|
76
|
+
const cache = sessionStorage.getItem(`skill-${client}-${id}-${level}`);
|
|
67
77
|
if (cache) {
|
|
68
78
|
try {
|
|
69
79
|
this.data = JSON.parse(cache);
|
|
70
80
|
return;
|
|
71
|
-
} catch {
|
|
81
|
+
} catch (e) {
|
|
82
|
+
console.log(e, "[Skill]无法解析本地缓存");
|
|
83
|
+
}
|
|
72
84
|
// 没有缓存则发起请求获取数据
|
|
73
85
|
}
|
|
74
|
-
|
|
75
|
-
|
|
86
|
+
getSkill(client, id, level).then((res) => {
|
|
87
|
+
if (currentVersion !== this.requestVersion) return;
|
|
88
|
+
|
|
76
89
|
let data = res.data?.list?.[0];
|
|
77
90
|
if (!data) data = null;
|
|
78
91
|
this.data = data;
|
|
79
92
|
|
|
80
93
|
// 将数据放入 sessionStorage
|
|
81
|
-
sessionStorage.setItem(
|
|
82
|
-
`skill-${client}-${id}-${level}`,
|
|
83
|
-
JSON.stringify(data)
|
|
84
|
-
);
|
|
94
|
+
sessionStorage.setItem(`skill-${client}-${id}-${level}`, JSON.stringify(data));
|
|
85
95
|
});
|
|
86
96
|
}
|
|
87
97
|
},
|
|
@@ -96,5 +106,5 @@ export default {
|
|
|
96
106
|
</script>
|
|
97
107
|
|
|
98
108
|
<style lang="less">
|
|
99
|
-
@import "
|
|
109
|
+
@import "./assets/css/module/skill.less";
|
|
100
110
|
</style>
|
package/src/Tinymce.vue
CHANGED
|
@@ -3,17 +3,28 @@
|
|
|
3
3
|
<slot name="prepend"></slot>
|
|
4
4
|
|
|
5
5
|
<div class="c-editor-header">
|
|
6
|
+
<!-- 上传附件 -->
|
|
6
7
|
<Upload v-if="attachmentEnable" @insert="insertAttachments" />
|
|
8
|
+
<!-- 剑三资源库 -->
|
|
7
9
|
<Resource v-if="resourceEnable" @insert="insertResource" />
|
|
10
|
+
<!-- 魔盒资源库 -->
|
|
8
11
|
<BoxResource v-if="resourceEnable" @insert="insertResource" :subtype="subtype" />
|
|
9
12
|
</div>
|
|
10
|
-
|
|
13
|
+
|
|
14
|
+
<Emotion v-if="emotionEnable" class="c-editor-emotion" @selected="emotionSelected"></Emotion>
|
|
11
15
|
|
|
12
16
|
<slot></slot>
|
|
13
17
|
|
|
14
|
-
<editor
|
|
18
|
+
<editor
|
|
19
|
+
id="tinymce"
|
|
20
|
+
v-model="data"
|
|
21
|
+
:init="init"
|
|
22
|
+
class="c-tinymce"
|
|
23
|
+
placeholder="✔ 图片可右键粘贴或拖拽至编辑器内自动上传 ✔ 支持word/excel内容一键粘贴"
|
|
24
|
+
/>
|
|
15
25
|
<el-alert class="u-tutorial" type="warning" show-icon
|
|
16
|
-
>进入特殊区域(代码块,折叠块等等)脱离或使用工具栏触发后,请使用键盘方向 → ↓
|
|
26
|
+
>进入特殊区域(代码块,折叠块等等)脱离或使用工具栏触发后,请使用键盘方向 → ↓
|
|
27
|
+
键进行脱离,回车只是正常在区块内换行。去掉样式点击第二行第一个<清除格式>即可复位。<a
|
|
17
28
|
href="/collection/31"
|
|
18
29
|
target="_blank"
|
|
19
30
|
>[编辑器使用指南]</a
|
|
@@ -25,29 +36,75 @@
|
|
|
25
36
|
</template>
|
|
26
37
|
|
|
27
38
|
<script>
|
|
28
|
-
import
|
|
29
|
-
import
|
|
30
|
-
|
|
39
|
+
import GlobalConf from "../config/global.js";
|
|
40
|
+
import JX3BOX from "@jx3box/jx3box-common/data/jx3box.json";
|
|
41
|
+
const { __cdn, __imgPath, __cms } = JX3BOX;
|
|
42
|
+
// 开发环境走 devServer proxy,避免跨域导致粘贴图片上传“看起来没反应”
|
|
43
|
+
const apiUrl = process.env.NODE_ENV === "development" ? "/api/cms/upload/tinymce" : __cms + "api/cms/upload/tinymce";
|
|
44
|
+
|
|
31
45
|
import Upload from "./Upload";
|
|
32
46
|
import Resource from "./Resource";
|
|
33
47
|
import BoxResource from "./BoxResource";
|
|
34
|
-
import { __cms } from "@jx3box/jx3box-common/data/jx3box.json";
|
|
35
|
-
import { __imgPath } from "@jx3box/jx3box-common/data/jx3box.json";
|
|
36
48
|
import Emotion from "@jx3box/jx3box-emotion/src/Emotion.vue";
|
|
37
|
-
import hljs_languages from "../assets/js/item/hljs_languages.js";
|
|
38
|
-
const API_Root = process.env.NODE_ENV === "production" ? __cms : "/";
|
|
39
|
-
const API = API_Root + "api/cms/upload/tinymce";
|
|
40
49
|
|
|
41
|
-
|
|
42
|
-
import
|
|
43
|
-
|
|
50
|
+
import axios from "axios";
|
|
51
|
+
import Editor from "@tinymce/tinymce-vue";
|
|
52
|
+
import hljs_languages from "./assets/js/item/hljs_languages.js";
|
|
53
|
+
// TODO:请求代理问题
|
|
44
54
|
|
|
45
55
|
export default {
|
|
46
56
|
name: "Tinymce",
|
|
47
|
-
|
|
57
|
+
components: {
|
|
58
|
+
Editor,
|
|
59
|
+
Upload,
|
|
60
|
+
Resource,
|
|
61
|
+
BoxResource,
|
|
62
|
+
Emotion,
|
|
63
|
+
},
|
|
64
|
+
props: {
|
|
65
|
+
// Vue3 默认 v-model
|
|
66
|
+
modelValue: {
|
|
67
|
+
type: String,
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
// 内容 兼容旧用法
|
|
71
|
+
content: {
|
|
72
|
+
type: String,
|
|
73
|
+
default: "",
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
// 默认高度
|
|
77
|
+
height: {
|
|
78
|
+
type: Number,
|
|
79
|
+
default: 800,
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
// 是否启用附件上传
|
|
83
|
+
attachmentEnable: {
|
|
84
|
+
type: Boolean,
|
|
85
|
+
default: true,
|
|
86
|
+
},
|
|
87
|
+
// 是否启用资源插入
|
|
88
|
+
resourceEnable: {
|
|
89
|
+
type: Boolean,
|
|
90
|
+
default: true,
|
|
91
|
+
},
|
|
92
|
+
// 是否启用表情插入
|
|
93
|
+
emotionEnable: {
|
|
94
|
+
type: Boolean,
|
|
95
|
+
default: true,
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
// 心法(技能连招使用)
|
|
99
|
+
subtype: {
|
|
100
|
+
type: String,
|
|
101
|
+
default: "通用",
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
emits: ["update:modelValue", "update:content", "update"],
|
|
48
105
|
data: function () {
|
|
49
106
|
return {
|
|
50
|
-
data: this.content,
|
|
107
|
+
data: this.modelValue ?? this.content ?? "",
|
|
51
108
|
init: {
|
|
52
109
|
// 选择器
|
|
53
110
|
selector: "#tinymce",
|
|
@@ -59,9 +116,10 @@ export default {
|
|
|
59
116
|
convert_urls: false,
|
|
60
117
|
|
|
61
118
|
// 样式
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
119
|
+
content_css:
|
|
120
|
+
process.env.VUE_APP_TINYMCE_DEV === "true"
|
|
121
|
+
? `http://localhost:5120/skins/content/default/content.min.css`
|
|
122
|
+
: `${__cdn}/static/tinymce/skins/content/default/content.min.css`,
|
|
65
123
|
body_class: "c-article c-article-editor c-article-tinymce",
|
|
66
124
|
height: this.height || 800,
|
|
67
125
|
autosave_ask_before_unload: false,
|
|
@@ -72,125 +130,70 @@ export default {
|
|
|
72
130
|
menubar: false,
|
|
73
131
|
branding: false,
|
|
74
132
|
contextmenu: "",
|
|
75
|
-
plugins:
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
"image emoticons media videox macro qixue talent2",
|
|
79
|
-
"code fullscreen wordcount powerpaste pagebreak printpage pz audiox", // template anchor jx3icon autosave
|
|
80
|
-
],
|
|
81
|
-
toolbar: [
|
|
82
|
-
"undo | formatselect | fontsizeselect | forecolor backcolor | bold italic underline strikethrough superscript subscript | link unlink | fullscreen code", //anchor restoredraft
|
|
83
|
-
"removeformat | hr alignleft aligncenter alignright alignjustify indent outdent | bullist numlist checklist table blockquote foldtext codeinline codesample latex | emoticons image media videox audiox | macro pz qixue talent2 pagebreak printpage", // template anchor jx3icon
|
|
84
|
-
],
|
|
85
|
-
mobile: {
|
|
86
|
-
toolbar_drawer: true,
|
|
87
|
-
toolbar: [
|
|
88
|
-
"undo emoticons bold italic underline strikethrough superscript subscript link unlink forecolor backcolor removeformat pagebreak fullscreen code",
|
|
89
|
-
"hr alignleft aligncenter alignright alignjustify indent outdent bullist numlist checklist table blockquote foldtext codeinline codesample latex macro pz qixue talent2 media videox audiox",
|
|
90
|
-
],
|
|
91
|
-
},
|
|
133
|
+
plugins: GlobalConf.plugins,
|
|
134
|
+
toolbar: GlobalConf.toolbar,
|
|
135
|
+
mobile: GlobalConf.mobile,
|
|
92
136
|
block_formats: "段落=p;一级标题=h1;二级标题=h2;三级标题=h3;四级标题=h4;五级标题=h5;六级标题=h6;",
|
|
93
137
|
fontsize_formats: "12px 14px 16px 18px 22px 24px 26px 28px 32px 48px 72px",
|
|
94
|
-
color_map:
|
|
95
|
-
"FF99CC",
|
|
96
|
-
"浅粉",
|
|
97
|
-
"FF3399",
|
|
98
|
-
"深粉",
|
|
99
|
-
"FF0000",
|
|
100
|
-
"正红",
|
|
101
|
-
"CC99FF",
|
|
102
|
-
"紫色",
|
|
103
|
-
"9933ff",
|
|
104
|
-
"深紫",
|
|
105
|
-
"FFFF99",
|
|
106
|
-
"浅黄",
|
|
107
|
-
"FFFF00",
|
|
108
|
-
"金黄",
|
|
109
|
-
"FFCC00",
|
|
110
|
-
"亮黄",
|
|
111
|
-
"FFCC99",
|
|
112
|
-
"浅桃",
|
|
113
|
-
"FF6600",
|
|
114
|
-
"橘色",
|
|
115
|
-
"CCFFCC",
|
|
116
|
-
"浅绿",
|
|
117
|
-
"9bf915",
|
|
118
|
-
"荧光绿",
|
|
119
|
-
"00FF00",
|
|
120
|
-
"辣眼绿",
|
|
121
|
-
"49c10f",
|
|
122
|
-
"深绿",
|
|
123
|
-
"008080",
|
|
124
|
-
"深青",
|
|
125
|
-
"CCFFFF",
|
|
126
|
-
"浅蓝",
|
|
127
|
-
"00FFFF",
|
|
128
|
-
"参考线",
|
|
129
|
-
"00CCFF",
|
|
130
|
-
"天蓝",
|
|
131
|
-
"99CCFF",
|
|
132
|
-
"蔚蓝",
|
|
133
|
-
"0000FF",
|
|
134
|
-
"辣眼蓝",
|
|
135
|
-
"CC0000",
|
|
136
|
-
"深红",
|
|
137
|
-
"000000",
|
|
138
|
-
"黑色",
|
|
139
|
-
],
|
|
138
|
+
color_map: GlobalConf.color_map,
|
|
140
139
|
|
|
141
140
|
codesample_languages: hljs_languages,
|
|
142
141
|
|
|
143
142
|
// Image
|
|
144
143
|
image_advtab: true,
|
|
145
|
-
// paste_data_images: true,
|
|
146
144
|
file_picker_types: "file image",
|
|
145
|
+
// images_upload_url: this.uploadUrl,
|
|
147
146
|
automatic_uploads: true,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
// Hook
|
|
153
|
-
// setup: this.setup,
|
|
154
|
-
// init_instance_callback: this.ready,
|
|
155
|
-
|
|
156
|
-
// Template
|
|
157
|
-
// templates: [
|
|
158
|
-
// {
|
|
159
|
-
// title: "剑三宏",
|
|
160
|
-
// description: "",
|
|
161
|
-
// content: `
|
|
162
|
-
// <pre class="e-jx3macro-area w-jx3macro">/cast 自绝经脉</pre>
|
|
163
|
-
// `,
|
|
164
|
-
// },
|
|
165
|
-
// ],
|
|
147
|
+
// 允许直接粘贴图片(会以 blob 形式触发 images_upload_handler)
|
|
148
|
+
paste_data_images: true,
|
|
149
|
+
// images_upload_credentials: true,
|
|
150
|
+
images_upload_handler: this.imagesUploadHandler,
|
|
166
151
|
valid_children: "+body[style]",
|
|
167
152
|
},
|
|
168
153
|
mode: "tinymce",
|
|
169
|
-
style: "",
|
|
170
154
|
};
|
|
171
155
|
},
|
|
172
|
-
model: {
|
|
173
|
-
prop: "content",
|
|
174
|
-
event: "update",
|
|
175
|
-
},
|
|
176
156
|
watch: {
|
|
177
|
-
data: function (
|
|
178
|
-
this.$emit("update",
|
|
157
|
+
data: function (val) {
|
|
158
|
+
this.$emit("update:modelValue", val);
|
|
159
|
+
this.$emit("update:content", val);
|
|
160
|
+
this.$emit("update", val);
|
|
179
161
|
},
|
|
180
|
-
|
|
181
|
-
|
|
162
|
+
modelValue: {
|
|
163
|
+
immediate: true,
|
|
164
|
+
handler: function (val) {
|
|
165
|
+
// 当外部未使用默认 v-model(modelValue 未传入)时,走 :content / v-model:content
|
|
166
|
+
if (val !== undefined && val !== this.data) this.data = val ?? "";
|
|
167
|
+
},
|
|
182
168
|
},
|
|
183
|
-
|
|
184
|
-
|
|
169
|
+
content: {
|
|
170
|
+
immediate: true,
|
|
171
|
+
handler: function (val) {
|
|
172
|
+
if (this.modelValue === undefined && val !== this.data) this.data = val ?? "";
|
|
173
|
+
},
|
|
185
174
|
},
|
|
186
175
|
},
|
|
187
176
|
methods: {
|
|
188
|
-
|
|
177
|
+
setup(editor) {
|
|
178
|
+
console.log("ID为: " + editor.id + " 的编辑器即将初始化.");
|
|
179
|
+
},
|
|
180
|
+
ready(editor) {
|
|
181
|
+
console.log("ID为: " + editor.id + " 的编辑器已初始化完成.");
|
|
182
|
+
},
|
|
183
|
+
insertAttachments(data) {
|
|
184
|
+
// eslint-disable-next-line no-undef
|
|
185
|
+
tinyMCE.editors["tinymce"].insertContent(data.html);
|
|
186
|
+
},
|
|
187
|
+
insertResource(data) {
|
|
188
|
+
// eslint-disable-next-line no-undef
|
|
189
|
+
tinyMCE.editors["tinymce"].insertContent(data);
|
|
190
|
+
},
|
|
191
|
+
imagesUploadHandler(blobInfo, success, failure, progress) {
|
|
189
192
|
let fdata = new FormData();
|
|
190
193
|
fdata.append("file", blobInfo.blob(), blobInfo.filename());
|
|
191
194
|
|
|
192
195
|
axios
|
|
193
|
-
.post(
|
|
196
|
+
.post(apiUrl, fdata, {
|
|
194
197
|
headers: {
|
|
195
198
|
"Content-Type": "multipart/form-data",
|
|
196
199
|
},
|
|
@@ -228,23 +231,13 @@ export default {
|
|
|
228
231
|
success(url);
|
|
229
232
|
})
|
|
230
233
|
.catch((err) => {
|
|
231
|
-
const message =
|
|
234
|
+
const message =
|
|
235
|
+
(err.response && err.response.data && (err.response.data.msg || err.response.data.message)) ||
|
|
236
|
+
"图片上传请求异常";
|
|
232
237
|
failure(message);
|
|
233
238
|
});
|
|
234
239
|
},
|
|
235
|
-
|
|
236
|
-
// console.log("ID为: " + editor.id + " 的编辑器即将初始化.");
|
|
237
|
-
},
|
|
238
|
-
ready: function (editor) {
|
|
239
|
-
// console.log("ID为: " + editor.id + " 的编辑器已初始化完成.");
|
|
240
|
-
},
|
|
241
|
-
insertAttachments: function (data) {
|
|
242
|
-
tinyMCE.editors["tinymce"].insertContent(data.html);
|
|
243
|
-
},
|
|
244
|
-
insertResource: function (data) {
|
|
245
|
-
tinyMCE.editors["tinymce"].insertContent(data);
|
|
246
|
-
},
|
|
247
|
-
emotionSelected: function (emotion) {
|
|
240
|
+
emotionSelected(emotion) {
|
|
248
241
|
let src = emotion.filename;
|
|
249
242
|
if (!emotion.filename.startsWith("http")) {
|
|
250
243
|
src = `${__imgPath}emotion/output/${emotion.filename}`;
|
|
@@ -253,18 +246,12 @@ export default {
|
|
|
253
246
|
tinyMCE.editors["tinymce"].insertContent(IMAGE);
|
|
254
247
|
},
|
|
255
248
|
},
|
|
256
|
-
mounted
|
|
257
|
-
|
|
258
|
-
Editor,
|
|
259
|
-
Upload,
|
|
260
|
-
Resource,
|
|
261
|
-
Emotion,
|
|
262
|
-
BoxResource,
|
|
249
|
+
mounted() {
|
|
250
|
+
// console.log(process.env.VUE_APP_TINYMCE_DEV)
|
|
263
251
|
},
|
|
264
252
|
};
|
|
265
253
|
</script>
|
|
266
254
|
|
|
267
255
|
<style lang="less">
|
|
268
|
-
@import "
|
|
269
|
-
@import "../assets/css/tinymce/combo.less";
|
|
256
|
+
@import "./assets/css/tinymce.less";
|
|
270
257
|
</style>
|