@jx3box/jx3box-editor 1.0.5 → 1.0.9

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 (40) hide show
  1. package/assets/css/article_markdown.less +7 -5
  2. package/assets/css/markdown/_.less +38 -0
  3. package/assets/css/markdown/dialog.less +26 -0
  4. package/assets/css/markdown/macro.less +45 -0
  5. package/assets/css/markdown/talent.less +42 -0
  6. package/assets/css/markdown/video.less +25 -0
  7. package/assets/css/markdown.less +13 -30
  8. package/assets/css/module/buff.less +1 -1
  9. package/assets/css/module/macro.less +3 -2
  10. package/assets/css/module/npc.less +224 -0
  11. package/assets/css/module/qixue.less +2 -1
  12. package/assets/css/module/skill.less +1 -1
  13. package/assets/css/module/video.less +1 -1
  14. package/assets/css/resource.less +4 -0
  15. package/assets/data/markdown_whitelist.json +6 -2
  16. package/assets/img/npc/attack.svg +69 -0
  17. package/assets/img/npc/buff.svg +20 -0
  18. package/assets/img/npc/energy.svg +1 -0
  19. package/assets/img/npc/miss.svg +1 -0
  20. package/assets/img/npc/npc.svg +1 -0
  21. package/assets/img/npc/radar.svg +45 -0
  22. package/assets/img/npc/shield.svg +1 -0
  23. package/assets/img/npc/sight.svg +1 -0
  24. package/assets/img/npc/skull.svg +15 -0
  25. package/assets/img/npc/target.svg +55 -0
  26. package/assets/js/a.js +7 -0
  27. package/package.json +2 -2
  28. package/service/database.js +12 -1
  29. package/src/Article.vue +2 -2
  30. package/src/ArticleMarkdown.vue +10 -2
  31. package/src/Markdown.vue +54 -11
  32. package/src/Npc.vue +214 -0
  33. package/src/Resource.vue +35 -0
  34. package/src/components/markdown/katex.vue +59 -0
  35. package/src/components/markdown/macro.vue +4 -2
  36. package/src/components/markdown/pz.vue +5 -3
  37. package/src/components/markdown/talent.vue +52 -0
  38. package/src/components/markdown/talent2.vue +52 -0
  39. package/src/components/markdown/video.vue +52 -0
  40. package/assets/css/markdown/common.less +0 -13
@@ -0,0 +1,45 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
5
+ <g>
6
+ <g>
7
+ <path d="M256,0C114.848,0,0,114.848,0,256s114.848,256,256,256s256-114.848,256-256S397.152,0,256,0z M256,320
8
+ c11.84,0,22.784-3.456,32.288-9.088l45.76,45.76C312.416,373.568,285.536,384,256,384c-70.592,0-128-57.408-128-128
9
+ s57.408-128,128-128c29.536,0,56.384,10.464,78.08,27.296l-45.792,45.76C278.784,195.456,267.84,192,256,192
10
+ c-35.296,0-64,28.704-64,64C192,291.296,220.704,320,256,320z M256,96c-88.224,0-160,71.776-160,160s71.776,160,160,160
11
+ c38.336,0,73.088-14.112,100.672-36.672l45.76,45.76C363.136,459.2,312,480,256,480C132.48,480,32,379.488,32,256
12
+ C32,132.48,132.48,32,256,32c56,0,107.136,20.8,146.464,54.912l-45.792,45.76C329.088,110.112,294.336,96,256,96z"/>
13
+ </g>
14
+ </g>
15
+ <g>
16
+ </g>
17
+ <g>
18
+ </g>
19
+ <g>
20
+ </g>
21
+ <g>
22
+ </g>
23
+ <g>
24
+ </g>
25
+ <g>
26
+ </g>
27
+ <g>
28
+ </g>
29
+ <g>
30
+ </g>
31
+ <g>
32
+ </g>
33
+ <g>
34
+ </g>
35
+ <g>
36
+ </g>
37
+ <g>
38
+ </g>
39
+ <g>
40
+ </g>
41
+ <g>
42
+ </g>
43
+ <g>
44
+ </g>
45
+ </svg>
@@ -0,0 +1 @@
1
+ <svg id="Capa_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><g><path d="m121.472 166.116c2.024 24.213 6.672 57.38 17.189 92.205 22.336 73.956 61.794 126.543 117.339 156.427 55.545-29.884 95.003-82.471 117.338-156.427 10.517-34.822 15.164-67.99 17.19-92.205l-134.528-67.264z"/><path d="m481.854 119.657c-.28-5.394-3.44-10.221-8.271-12.636l-210.875-105.438c-4.223-2.111-9.193-2.111-13.416 0l-210.875 105.438c-4.831 2.415-7.991 7.242-8.271 12.636-.16 3.07-3.628 76.168 21.273 161.035 14.734 50.214 36.406 94.071 64.414 130.354 35.295 45.722 80.659 79.357 134.832 99.973 1.719.653 3.526.98 5.335.98s3.616-.327 5.335-.98c54.173-20.615 99.537-54.251 134.832-99.973 28.008-36.283 49.68-80.141 64.414-130.354 24.901-84.867 21.433-157.965 21.273-161.035zm-219.206 325.414c-2.095 1.036-4.372 1.554-6.648 1.554s-4.554-.518-6.648-1.554c-66.792-33.024-113.696-92.938-139.408-178.076-12.86-42.583-17.503-82.709-19.133-108.871-.375-6.008 2.879-11.657 8.263-14.349l150.219-75.109c4.223-2.11 9.193-2.111 13.416 0l150.22 75.109c5.384 2.691 8.638 8.342 8.263 14.35-1.631 26.164-6.274 66.291-19.134 108.87-25.714 85.137-72.618 145.051-139.41 178.076z"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg id="Capa_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><g><path d="m256 303.221c24.951 0 45.25-20.299 45.25-45.25s-20.299-45.25-45.25-45.25-45.25 20.299-45.25 45.25 20.299 45.25 45.25 45.25zm0-60.25c8.409 0 14.636 6.873 15 15 .363 8.101-7.154 15-15 15-8.409 0-14.636-6.873-15-15-.363-8.101 7.154-15 15-15z"/><path d="m508.175 247.964c-1.15-1.284-28.674-31.804-73.237-62.585-59.58-41.155-121.456-62.908-178.938-62.908s-119.357 21.753-178.938 62.908c-44.563 30.782-72.087 61.301-73.237 62.585-5.1 5.696-5.1 14.316 0 20.013 1.15 1.284 28.674 31.804 73.237 62.585 59.581 41.155 121.457 62.908 178.938 62.908s119.357-21.753 178.938-62.908c44.563-30.782 72.087-61.301 73.237-62.585 5.1-5.696 5.1-14.316 0-20.013zm-252.175-65.243c41.493 0 75.25 33.757 75.25 75.25s-33.757 75.25-75.25 75.25-75.25-33.757-75.25-75.25 33.757-75.25 75.25-75.25z"/><path d="m256 100.221c8.284 0 15-6.716 15-15v-50.25c0-8.284-6.716-15-15-15s-15 6.716-15 15v50.25c0 8.284 6.716 15 15 15z"/><path d="m151.813 106.585c2.894 4.318 7.64 6.651 12.474 6.651 2.871 0 5.773-.823 8.337-2.541 6.882-4.612 8.722-13.929 4.11-20.811l-28.774-42.935c-4.611-6.881-13.93-8.722-20.811-4.11-6.882 4.612-8.722 13.929-4.11 20.811z"/><path d="m339.376 110.695c2.564 1.719 5.466 2.541 8.337 2.541 4.834 0 9.581-2.333 12.475-6.651l28.773-42.935c4.611-6.882 2.771-16.199-4.11-20.811-6.882-4.613-16.199-2.772-20.812 4.11l-28.773 42.935c-4.612 6.882-2.772 16.199 4.11 20.811z"/><path d="m256 411.779c-8.284 0-15 6.716-15 15v50.25c0 8.284 6.716 15 15 15s15-6.716 15-15v-50.25c0-8.284-6.716-15-15-15z"/><path d="m360.187 405.415c-4.612-6.882-13.931-8.722-20.812-4.11-6.882 4.612-8.722 13.929-4.11 20.811l28.773 42.935c2.894 4.318 7.64 6.651 12.475 6.651 2.871 0 5.773-.823 8.337-2.541 6.882-4.612 8.722-13.929 4.11-20.811z"/><path d="m172.624 401.305c-6.881-4.612-16.198-2.772-20.811 4.11l-28.774 42.935c-4.612 6.882-2.772 16.199 4.11 20.811 2.564 1.719 5.466 2.541 8.337 2.541 4.834 0 9.581-2.333 12.474-6.651l28.774-42.935c4.613-6.882 2.772-16.199-4.11-20.811z"/></g></svg>
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 833.7 833.7" style="enable-background:new 0 0 833.7 833.7;" xml:space="preserve">
5
+ <g>
6
+ <path d="M415.5,88.8C252.9,88.8,121,220.7,121,383.4v138.8c0,7.3,3.4,14.2,9.3,18.7L256.9,637v79.2c0,13,10.5,23.4,23.4,23.4h18.8
7
+ c13,0,23.4-10.5,23.4-23.4v-32.2c0-8.2,6.6-14.8,14.8-14.8l0,0c8.2,0,14.8,6.6,14.8,14.8v32.2c0,13,10.5,23.4,23.4,23.4h0.8
8
+ c13,0,23.4-10.5,23.4-23.4v-32.2c0-8.2,6.6-14.8,14.8-14.8h1.6c8.2,0,14.8,6.6,14.8,14.8v32.2c0,13,10.5,23.4,23.4,23.4h0.8
9
+ c13,0,23.4-10.5,23.4-23.4v-32.2c0-8.2,6.6-14.8,14.8-14.8l0,0c8.2,0,14.8,6.6,14.8,14.8v32.2c0,13,10.5,23.4,23.4,23.4h18.9
10
+ c13,0,23.4-10.5,23.4-23.4v-79.3l126.6-96.1c5.9-4.5,9.3-11.3,9.3-18.7V383.4C710,220.7,578.1,88.8,415.5,88.8z M292.4,524.5
11
+ c-44.8,0-81.2-36.4-81.2-81.2c0-44.8,36.4-81.2,81.2-81.2s81.2,36.4,81.2,81.2C373.6,488.2,337.2,524.5,292.4,524.5z M438.6,584.2
12
+ h-46.1c-10.7,0-17.5-11.5-12.3-20.8l23.1-41.9c5.3-9.7,19.3-9.7,24.6,0l23.1,41.9C456,572.8,449.2,584.2,438.6,584.2z M538.6,524.5
13
+ c-44.8,0-81.2-36.4-81.2-81.2c0-44.8,36.4-81.2,81.2-81.2c44.8,0,81.2,36.4,81.2,81.2C619.8,488.2,583.5,524.5,538.6,524.5z"/>
14
+ </g>
15
+ </svg>
@@ -0,0 +1,55 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="953px" height="953px" viewBox="0 0 953 953" style="enable-background:new 0 0 953 953;" xml:space="preserve">
6
+ <g>
7
+ <g>
8
+ <path d="M430.589,953c236.6,0,428.401-191.801,428.401-428.4c0-72.799-18.102-141.299-50.102-201.299c-3.5,0.5-7.1,0.7-10.6,0.7
9
+ c-2,0-4.1-0.1-6.199-0.2l-54.5-4.2l-39.201,39.2c29.9,48.2,47.201,105,47.201,165.799c0,173.9-141,314.9-314.901,314.9
10
+ c-173.899,0-315-141-315-314.9c0-173.899,141-314.899,314.9-314.899c60.901,0,117.7,17.3,165.799,47.2l35.5-35.5l-4.799-62.5
11
+ c-0.4-5-0.301-10,0.199-14.9c-58.9-30.5-125.799-47.8-196.799-47.8c-236.5,0-428.3,191.8-428.3,428.399S193.989,953,430.589,953z"
12
+ />
13
+ <path d="M430.589,413.9c2.8,0,5.6,0.101,8.4,0.3l79.1-79.1l1.699-1.7c-27.1-12.7-57.299-19.8-89.2-19.8
14
+ c-116.5,0-210.9,94.4-210.9,210.9c0,116.5,94.4,211,210.9,211c116.5,0,210.901-94.4,210.901-210.9
15
+ c0-31.9-7.102-62.099-19.801-89.2l-1.699,1.7l-79.102,79.099c0.201,2.801,0.301,5.602,0.301,8.4
16
+ c0,61.1-49.5,110.701-110.7,110.701c-61.2,0-110.601-49.602-110.601-110.701C319.889,463.5,369.489,413.9,430.589,413.9z"/>
17
+ <path d="M872.089,142.6l25.4-25.4c11.6-11.6,11.6-30.3,0-41.9l-17.602-17.7c-5.799-5.8-13.398-8.7-20.898-8.7
18
+ s-15.201,2.9-20.9,8.7l-29.1,29.1l-6-77.5c-0.4-5.7-5.102-9.2-10-9.2c-2.5,0-5,0.9-7,2.9l-114.5,114.5
19
+ c-10.301,10.3-15.602,24.6-14.5,39.2l0.299,4.5l5.5,71.7l-41.4,41.4l-74.5,74.5l-1.699,1.7l-72.1,72.101l-32,32
20
+ c-4.2,4.199-6.8,9.8-7.2,15.699l-2,25.101c-1.2,14.6,10.4,27,24.9,27c0.399,0,0.8,0,1.3,0l26.5-1.301
21
+ c6.199-0.301,12.1-2.9,16.4-7.301L532.689,482l72.1-72.1l1.701-1.7l74.5-74.5l45-45l65.398,5l2.9,0.2c1.301,0.1,2.6,0.1,3.801,0.1
22
+ c13.199,0,25.9-5.2,35.4-14.6L947.888,165c6-6,2.201-16.4-6.299-17L872.089,142.6z"/>
23
+ </g>
24
+ </g>
25
+ <g>
26
+ </g>
27
+ <g>
28
+ </g>
29
+ <g>
30
+ </g>
31
+ <g>
32
+ </g>
33
+ <g>
34
+ </g>
35
+ <g>
36
+ </g>
37
+ <g>
38
+ </g>
39
+ <g>
40
+ </g>
41
+ <g>
42
+ </g>
43
+ <g>
44
+ </g>
45
+ <g>
46
+ </g>
47
+ <g>
48
+ </g>
49
+ <g>
50
+ </g>
51
+ <g>
52
+ </g>
53
+ <g>
54
+ </g>
55
+ </svg>
package/assets/js/a.js CHANGED
@@ -18,11 +18,18 @@ function formatLink(str){
18
18
  href = resolveImagePath(href)
19
19
  }
20
20
 
21
+
21
22
  let skip = ''
22
23
  if(!whiteHost.test(to.hostname)){
23
24
  skip = 'target="_blank"'
24
25
  }
25
26
 
27
+ // markdown中的锚点跳转
28
+ let isHashAnchor = href.startsWith('#')
29
+ if(isHashAnchor){
30
+ skip = 'target="_self"'
31
+ }
32
+
26
33
  let suffix = item[3]
27
34
  let text = item[4]
28
35
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jx3box/jx3box-editor",
3
- "version": "1.0.5",
3
+ "version": "1.0.9",
4
4
  "description": "JX3BOX Article & Editor",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -36,7 +36,7 @@
36
36
  "@jx3box/jx3box-emotion": "^1.0.10",
37
37
  "@jx3box/jx3box-macro": "^1.0.1",
38
38
  "@jx3box/jx3box-talent": "^1.1.2",
39
- "@jx3box/markdown": "^0.1.4",
39
+ "@jx3box/markdown": "^0.1.5",
40
40
  "@tinymce/tinymce-vue": "^3.2.2",
41
41
  "axios": "^0.19.2",
42
42
  "core-js": "^3.6.5",
@@ -94,4 +94,15 @@ function getSkill(client = "std", id, level) {
94
94
  });
95
95
  }
96
96
 
97
- export { loadResource, loadStat, getIcons, getBuff, getSkill };
97
+ function getNpc(client = 'std', id) {
98
+ return $node().get('/npc/id/' + id, {
99
+ params: {
100
+ client,
101
+ strict: 0,
102
+ per: 10,
103
+ page: 1
104
+ }
105
+ })
106
+ }
107
+
108
+ export { loadResource, loadStat, getIcons, getBuff, getSkill, getNpc };
package/src/Article.vue CHANGED
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="c-article-box">
2
+ <div class="c-article-tinymce c-article-box">
3
3
  <!-- <div id="c-article-origin" class="c-article-origin" ref="origin"><slot></slot></div> -->
4
4
  <div id="c-article" class="c-article" ref="article" v-if="pageable">
5
5
  <div
@@ -202,7 +202,7 @@ export default {
202
202
  target = "#c-article";
203
203
  }
204
204
  let dir = renderDirectory(target, this.directorybox);
205
- if (dir) this.$emit("directoryRendered");
205
+ this.$emit("directoryRendered",dir);
206
206
  },
207
207
  changePage: function (i) {
208
208
  this.page = i;
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <div class="c-article-markdown">
3
- <markdown-render id="c-article" class="c-markdown" ref="article" v-model="origin" @change="updateOrigin" :preRender="doReg"></markdown-render>
3
+ <markdown-render id="c-article" class="c-markdown c-article" ref="article" v-model="origin" @change="updateOrigin" :preRender="doReg" :xssOptions="xssOptions"></markdown-render>
4
4
  <div class="w-jx3-element-pop" :style="jx3_element.style">
5
5
  <jx3-item :item_id="item.id" :jx3ClientType="item.client" v-show="jx3_element.type == 'item'" />
6
6
  <jx3-buff :client="buff.client" :id="buff.id" :level="buff.level" v-show="jx3_element.type == 'buff'" />
7
7
  <jx3-skill :client="skill.client" :id="skill.id" :level="skill.level" v-show="jx3_element.type == 'skill'" />
8
+ <jx3-npc :client="npc.client" :id="npc.id" v-show="jx3_element.type === 'npc'"></jx3-npc>
8
9
  </div>
9
10
  </div>
10
11
  </template>
@@ -30,6 +31,7 @@ import renderCode from "../assets/js/code";
30
31
  import Item from "./Item";
31
32
  import Buff from "./Buff";
32
33
  import Skill from "./Skill";
34
+ import Npc from "./Npc";
33
35
  import renderJx3Element from "../assets/js/jx3_element";
34
36
 
35
37
  import {xssOptions} from '../assets/data/markdown_whitelist.json'
@@ -64,6 +66,11 @@ export default {
64
66
  id: "",
65
67
  level: "",
66
68
  },
69
+ // NPC
70
+ npc: {
71
+ client: 'std',
72
+ id: ""
73
+ },
67
74
  jx3_element: {
68
75
  style: {
69
76
  top: 0,
@@ -107,7 +114,7 @@ export default {
107
114
  doDir: function() {
108
115
  let target = "#c-article";
109
116
  let dir = renderDirectory(target, this.directorybox);
110
- if (dir) this.$emit("directoryRendered");
117
+ this.$emit("directoryRendered",dir);
111
118
  },
112
119
  updateOrigin : function (md,html){
113
120
  this.html = html
@@ -141,6 +148,7 @@ export default {
141
148
  "jx3-item": Item,
142
149
  "jx3-buff": Buff,
143
150
  "jx3-skill": Skill,
151
+ "jx3-npc": Npc,
144
152
  markdownRender,
145
153
  },
146
154
  };
package/src/Markdown.vue CHANGED
@@ -5,17 +5,21 @@
5
5
 
6
6
  <div class="c-editor-header">
7
7
  <Upload v-if="attachmentEnable" @insert="insertAttachments" :enable="true" />
8
- <Resource v-if="resourceEnable" @insert="insertResource" :enable="false" />
8
+ <Resource v-if="resourceEnable" @insert="insertResource" :enable="true" />
9
9
  </div>
10
10
 
11
11
  <slot></slot>
12
12
 
13
- <markdown-editor class="c-markdown" ref="md" v-model="data" @change="updateData" :subfield="false">
13
+ <markdown-editor class="c-markdown c-article" ref="md" v-model="data" @change="updateData" :subfield="false" :xssOptions="xssOptions">
14
14
  <template slot="left-toolbar-after">
15
+ <markdown-katex @insert="insertKatex" />
15
16
  <span class="c-markdown-toolbar-image c-markdown-toolbar-item" title="上传图片" @click="selectImages"><i class="el-icon-picture-outline-round"></i></span>
16
17
  <span class="c-markdown-toolbar-file c-markdown-toolbar-item" title="上传附件" @click="selectFiles"><i class="el-icon-paperclip"></i></span>
17
- <!-- <macro @insert="insertMacro" /> -->
18
- <!-- <pz @insert="insertPz" /> -->
18
+ <markdown-video @insert="insertVideo" />
19
+ <markdown-macro @insert="insertMacro" />
20
+ <markdown-pz @insert="insertPz" />
21
+ <markdown-talent @insert="insertTalent" />
22
+ <markdown-talent2 @insert="insertTalent2" />
19
23
  </template>
20
24
  </markdown-editor>
21
25
  <input class="c-markdown-store-item" id="c-markdown-store-images" type="file" @change="uploadImages" ref="markdownImages" multiple :accept="allow_image_types" />
@@ -35,9 +39,12 @@ import Upload from "./Upload";
35
39
  import Resource from "./Resource";
36
40
 
37
41
  // jx3
38
- // import macro from './components/markdown/macro.vue'
39
- // import pz from './components/markdown/pz.vue'
40
-
42
+ import markdownMacro from './components/markdown/macro.vue'
43
+ import markdownPz from './components/markdown/pz.vue'
44
+ import markdownKatex from './components/markdown/katex.vue'
45
+ import markdownTalent from './components/markdown/talent.vue'
46
+ import markdownTalent2 from './components/markdown/talent2.vue'
47
+ import markdownVideo from './components/markdown/video.vue'
41
48
 
42
49
  export default {
43
50
  name: "Markdown",
@@ -67,8 +74,12 @@ export default {
67
74
  Upload,
68
75
  Resource,
69
76
 
70
- // macro,
71
- // pz,
77
+ markdownMacro,
78
+ markdownPz,
79
+ markdownKatex,
80
+ markdownTalent,
81
+ markdownTalent2,
82
+ markdownVideo,
72
83
  },
73
84
  data: function() {
74
85
  return {
@@ -207,8 +218,12 @@ export default {
207
218
  }
208
219
  },
209
220
  insertResource: function(data) {
210
- // TODO:
211
- // tinyMCE.editors["tinymce"].insertContent(data);
221
+ console.log(data)
222
+ this.$md.insertText(this.$md.getTextareaDom(), {
223
+ prefix: data,
224
+ subfix: "",
225
+ str: "",
226
+ });
212
227
  },
213
228
  insertMacro(data) {
214
229
  this.$md.insertText(this.$md.getTextareaDom(), {
@@ -223,6 +238,34 @@ export default {
223
238
  subfix: "",
224
239
  str: "",
225
240
  });
241
+ },
242
+ insertKatex(data) {
243
+ this.$md.insertText(this.$md.getTextareaDom(), {
244
+ prefix: data,
245
+ subfix: "",
246
+ str: "",
247
+ });
248
+ },
249
+ insertTalent(data) {
250
+ this.$md.insertText(this.$md.getTextareaDom(), {
251
+ prefix: data,
252
+ subfix: "",
253
+ str: "",
254
+ });
255
+ },
256
+ insertTalent2(data) {
257
+ this.$md.insertText(this.$md.getTextareaDom(), {
258
+ prefix: data,
259
+ subfix: "",
260
+ str: "",
261
+ });
262
+ },
263
+ insertVideo(data) {
264
+ this.$md.insertText(this.$md.getTextareaDom(), {
265
+ prefix: data,
266
+ subfix: "",
267
+ str: "",
268
+ });
226
269
  }
227
270
  },
228
271
  filters: {},
package/src/Npc.vue ADDED
@@ -0,0 +1,214 @@
1
+ <template>
2
+ <div class="w-npc" v-if="data">
3
+ <div class="w-npc-wrapper">
4
+ <div class="w-npc-content">
5
+ <div class="u-npc">
6
+ <div class="u-title">
7
+ <span class="u-name">{{ data.Name }}</span>
8
+ <span class="u-name-add">
9
+ <span v-if="data.Title || data.Level">&lt;</span>
10
+ <span class="u-nick" v-if="data.Title">
11
+ {{ data.Title }}
12
+ </span>
13
+ <span v-if="data.Title && data.Level">·</span>
14
+ <b class="u-level" v-if="data.Level">{{ data.Level }}</b>
15
+ <span v-if="data.Title || data.Level">&gt;</span>
16
+ </span>
17
+ <div class="u-base">
18
+ <span class="u-atmap" v-if="data.MapName">
19
+ {{ data.MapName }}
20
+ </span>
21
+ <span class="u-intensity" v-if="data.Intensity">
22
+ 强度
23
+ {{ data.Intensity }}
24
+ </span>
25
+ </div>
26
+ </div>
27
+ <div class="u-primary">
28
+ <div class="u-life">
29
+ <img class="u-descicon u-descicon-life" svg-inline src="../assets/img/npc/energy.svg" />
30
+ <b>血量</b>
31
+ <em>MaxLife</em>
32
+ <strong>{{ data.MaxLife }}</strong>
33
+ </div>
34
+ <div class="u-mana">
35
+ <img class="u-descicon u-descicon-mana" svg-inline src="../assets/img/npc/energy.svg" />
36
+ <b>内力</b>
37
+ <em>MaxMana</em>
38
+ <strong>{{ data.MaxMana }}</strong>
39
+ </div>
40
+ <div class="u-touch" v-if="data.TouchRange">
41
+ <img class="u-descicon u-descicon-touch" svg-inline src="../assets/img/npc/radar.svg" />
42
+ <b>范围</b>
43
+ <em>TouchRange</em>
44
+ <strong>{{ data.TouchRange }}</strong>
45
+ </div>
46
+ <div class="u-sense" v-if="data.Sense">
47
+ <img class="u-descicon u-descicon-sense" svg-inline src="../assets/img/npc/sight.svg" />
48
+ <b>识破</b>
49
+ <em>Sense</em>
50
+ <strong>{{ data.Sense }}</strong>
51
+ </div>
52
+ <div class="u-dodge" v-if="data.Dodge">
53
+ <img class="u-descicon u-descicon-dodge" svg-inline src="../assets/img/npc/miss.svg" />
54
+ <b>闪避</b>
55
+ <em>Dodge</em>
56
+ <strong>{{ data.Dodge }}</strong>
57
+ </div>
58
+ <div class="u-dodge" v-if="data.Parry">
59
+ <img class="u-descicon u-descicon-dodge" svg-inline src="../assets/img/npc/miss.svg" />
60
+ <b>招架</b>
61
+ <em>Parry</em>
62
+ <strong>{{ data.ParryValue }}</strong>
63
+ </div>
64
+ <div class="u-shield">
65
+ <img class="u-descicon u-descicon-shield" svg-inline src="../assets/img/npc/shield.svg" />
66
+ <b>防御</b>
67
+ <em>Shield</em>
68
+ <span class="u-sitem">
69
+ 外功防御
70
+ <em>PhysicsShieldBase</em>
71
+ <span class="u-value">{{ ~~data.PhysicsShieldBase }}</span>
72
+ </span>
73
+ <span class="u-sitem">
74
+ 混元防御
75
+ <em>NeutralMagicDefence</em>
76
+ <span class="u-value">{{ ~~data.NeutralMagicDefence }}</span>
77
+ </span>
78
+ <span class="u-sitem">
79
+ 阳性防御
80
+ <em>SolarMagicDefence</em>
81
+ <span class="u-value">{{ ~~data.SolarMagicDefence }}</span>
82
+ </span>
83
+ <span class="u-sitem">
84
+ 阴性防御
85
+ <em>LunarMagicDefence</em>
86
+ <span class="u-value">{{ ~~data.LunarMagicDefence }}</span>
87
+ </span>
88
+ <span class="u-sitem">
89
+ 毒性防御
90
+ <em>PoisonMagicDefence</em>
91
+ <span class="u-value">{{ ~~data.PoisonMagicDefence }}</span>
92
+ </span>
93
+ </div>
94
+ <div class="u-critical">
95
+ <img class="u-descicon u-descicon-attack" svg-inline src="../assets/img/npc/attack.svg" />
96
+ <b>会心</b>
97
+ <em>Critical</em>
98
+ <span class="u-sitem">
99
+ 外功会心
100
+ <em>PhysicsCriticalStrike</em>
101
+ <span class="u-value">{{ ~~data.PhysicsCriticalStrike }}</span>
102
+ </span>
103
+ <span class="u-sitem">
104
+ 混元会心
105
+ <em>NeutralCriticalStrike</em>
106
+ <span class="u-value">{{ ~~data.NeutralCriticalStrike }}</span>
107
+ </span>
108
+ <span class="u-sitem">
109
+ 阳性会心
110
+ <em>SolarCriticalStrike</em>
111
+ <span class="u-value">{{ ~~data.SolarCriticalStrike }}</span>
112
+ </span>
113
+ <span class="u-sitem">
114
+ 阴性会心
115
+ <em>LunarCriticalStrike</em>
116
+ <span class="u-value">{{ ~~data.LunarCriticalStrike }}</span>
117
+ </span>
118
+ <span class="u-sitem">
119
+ 毒性会心
120
+ <em>PoisonCriticalStrike</em>
121
+ <span class="u-value">{{ ~~data.PoisonCriticalStrike }}</span>
122
+ </span>
123
+ </div>
124
+ <div class="u-attack">
125
+ <img class="u-descicon u-descicon-attack" svg-inline src="../assets/img/npc/target.svg" />
126
+ <b>命中</b>
127
+ <em>Attack</em>
128
+ <span class="u-sitem">
129
+ 外功命中
130
+ <em>PhysicsAttackHit</em>
131
+ <span class="u-value">{{ ~~data.PhysicsAttackHit }}</span>
132
+ </span>
133
+ <span class="u-sitem">
134
+ 混元命中
135
+ <em>NeutralMagicHit</em>
136
+ <span class="u-value">{{ ~~data.NeutralMagicHit }}</span>
137
+ </span>
138
+ <span class="u-sitem">
139
+ 阳性命中
140
+ <em>SolarMagicHit</em>
141
+ <span class="u-value">{{ ~~data.SolarMagicHit }}</span>
142
+ </span>
143
+ <span class="u-sitem">
144
+ 阴性命中
145
+ <em>LunarMagicHit</em>
146
+ <span class="u-value">{{ ~~data.LunarMagicHit }}</span>
147
+ </span>
148
+ <span class="u-sitem">
149
+ 毒性命中
150
+ <em>PoisonMagicHit</em>
151
+ <span class="u-value">{{ ~~data.PoisonMagicHit }}</span>
152
+ </span>
153
+ </div>
154
+ </div>
155
+ <div class="u-id">
156
+ ID : {{id}}
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </div>
162
+ </template>
163
+
164
+ <script>
165
+ import { getNpc } from "../service/database.js";
166
+ import { iconLink } from "@jx3box/jx3box-common/js/utils";
167
+ export default {
168
+ name: "Npc",
169
+ props: ["client", "id"],
170
+ data: () => ({
171
+ data: null,
172
+ }),
173
+ computed: {
174
+ params: function() {
175
+ return [this.client, this.id];
176
+ },
177
+ },
178
+ watch: {
179
+ params: {
180
+ immediate: true,
181
+ deep: true,
182
+ handler(val) {
183
+ if (val) {
184
+ let [client, id] = val;
185
+ // 读取本地数据
186
+ const cache = sessionStorage.getItem(`npc-${client}-${id}`);
187
+ if (cache) {
188
+ this.data = JSON.parse(cache);
189
+ // 没有缓存则发起请求获取数据
190
+ } else {
191
+ id &&
192
+ getNpc(...this.params).then((res) => {
193
+ let data = res.data?.list?.[0];
194
+ this.data = data;
195
+
196
+ // 将数据放入 sessionStorage
197
+ sessionStorage.setItem(`npc-${client}-${id}`, JSON.stringify(data));
198
+ });
199
+ }
200
+ }
201
+ },
202
+ },
203
+ },
204
+ methods: {
205
+ iconLink: function(id) {
206
+ return iconLink(id, this.client);
207
+ },
208
+ },
209
+ };
210
+ </script>
211
+
212
+ <style scoped lang="less">
213
+ @import "../assets/css/module/npc.less";
214
+ </style>
package/src/Resource.vue CHANGED
@@ -109,6 +109,35 @@
109
109
  </ul>
110
110
  <el-alert v-if="!item.length && done" title="没有找到相关条目" type="info" show-icon></el-alert>
111
111
  </el-tab-pane>
112
+ <el-tab-pane label="Npc" name="npc">
113
+ <span slot="label">
114
+ <img class="u-icon" svg-inline src="../assets/img/npc/skull.svg" />
115
+ <b>Npc</b>
116
+ <em class="u-count">{{ stat.npc }}</em>
117
+ </span>
118
+ <p v-if="npc.length && done" class="m-resource-count">
119
+ <i class="el-icon-s-data"></i> 共找到 <b>{{ npc.length }}</b> 条记录
120
+ </p>
121
+ <ul class="m-resource-list" v-if="npc.length">
122
+ <li v-for="(o, i) in npc" :key="i" class="u-item" :class="{ on: o.isSelected }" @click="selectNpc(o, i)" ref="item">
123
+ <span class="u-id">ID:{{ o.ID }}</span>
124
+ <img class="u-pic" :title="'IconID:' + o.IconID" :src="iconURL(o.IconID)" />
125
+ <span class="u-name">
126
+ {{ o.Name }}
127
+ <em v-if="o.Level">(等级:{{ o.Level }})</em>
128
+ </span>
129
+ <span class="u-content">
130
+ <span class="u-map">地图:{{ o.MapName }}</span>
131
+ <span class="u-life">血量:{{ o.MaxLife }}</span>
132
+ <span class="u-mana">内力:{{ o.MaxMana }}</span>
133
+ </span>
134
+ <span class="u-remark">
135
+ {{ o.Requirement }}
136
+ </span>
137
+ </li>
138
+ </ul>
139
+ <el-alert v-if="!npc.length && done" title="没有找到相关条目" type="info" show-icon></el-alert>
140
+ </el-tab-pane>
112
141
  <el-tab-pane label="图标" name="icon">
113
142
  <span slot="label">
114
143
  <img class="u-icon" svg-inline src="../assets/img/icons.svg" />
@@ -192,6 +221,7 @@ export default {
192
221
  buff: [],
193
222
  item: [],
194
223
  icon: [],
224
+ npc: [],
195
225
 
196
226
  stat: {
197
227
  skill: 0,
@@ -370,6 +400,11 @@ export default {
370
400
  o.isSelected = true;
371
401
  this.html = `<img class="e-jx3-icon" src="${__iconPath}${this.iconDir}/${o.iconID}.png" alt="${o.iconID}"/>`;
372
402
  },
403
+ selectNpc: function (o, i){
404
+ this.resetItems()
405
+ o.isSelected = true
406
+ this.html = `<a data-type="npc" class="e-jx3-npc w-jx3-element" data-mode="" data-id="${o.ID}" data-client="${this.client}" target="_blank" href="${this.getLink("npc", this.client, o.ID, '')}">[${o.Name}]</a>`
407
+ },
373
408
  resetItems: function() {
374
409
  let data = this[this.type];
375
410
  data.forEach((item) => {