@jx3box/jx3box-editor 2.2.8 → 2.2.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.
@@ -0,0 +1,5 @@
1
+ {
2
+ "cSpell.words": [
3
+ "wujie"
4
+ ]
5
+ }
@@ -260,17 +260,17 @@
260
260
  cursor: pointer;
261
261
  // .none;
262
262
 
263
- background-color:#c00;
263
+ background-color: #c00;
264
264
  .size(12px);
265
265
  .r(50%);
266
266
  .db;
267
- i{
268
- color:#fff;
267
+ i {
268
+ color: #fff;
269
269
  .fz(12px);
270
270
  .db;
271
271
  }
272
272
  &:hover {
273
- background-color:#f00;
273
+ background-color: #f00;
274
274
  }
275
275
  }
276
276
  .u-remove-icon_small {
@@ -288,8 +288,8 @@
288
288
  .r(50%);
289
289
  .db;
290
290
 
291
- i{
292
- color:#fff;
291
+ i {
292
+ color: #fff;
293
293
  .fz(12px);
294
294
  .db;
295
295
  }
@@ -349,74 +349,107 @@
349
349
 
350
350
  .m-pvp-martial {
351
351
  display: flex;
352
- background: #1a2b22;
353
- padding: 20px;
354
- border-radius: 8px;
355
- flex-direction: column;
356
- .m-martial-skills {
357
- flex: 1;
358
- }
359
- .m-martial-skill {
360
- .u-title {
361
- // 竖体显示
362
- writing-mode: tb-rl;
363
- letter-spacing: 1px;
364
- display: flex;
365
- align-items: center;
366
- justify-content: center;
367
- }
368
- .u-title-name {
369
- z-index: 1;
370
- color: #fff;
371
- font-size: 12px;
372
- }
373
- .u-title-img {
374
- width: 24px;
375
- height: 71px;
376
- position: absolute;
377
- }
378
- margin-bottom: 20px;
352
+ gap: 10px;
353
+
354
+ .u-platform-select {
355
+ .size(30px, 400px);
379
356
  display: flex;
380
- align-items: center;
381
- gap: 20px;
382
- // border: 1px solid rgb(40,107,113);
383
- padding: 4px 0;
384
- position: relative;
357
+ flex-direction: column;
358
+ gap: 10px;
359
+ }
385
360
 
386
- .u-name {
387
- display: block;
388
- color: #fff;
389
- font-size: 12px;
390
- text-align: center;
391
- overflow: hidden;
392
- white-space: nowrap;
393
- width: 48px;
394
- }
361
+ .u-platform-option {
362
+ .pointer;
363
+ flex-grow: 1;
364
+ color: white;
365
+ background-color: #1a2b22;
366
+ writing-mode: vertical-rl; /* 或者使用 vertical-lr */
367
+ text-orientation: upright;
368
+ text-align: center;
369
+ line-height: 32px;
370
+ border-radius: 6px;
371
+ transition: all 0.2s;
395
372
  }
396
- .m-skills {
397
- display: flex;
398
- gap: 20px;
399
- flex-wrap: wrap;
400
- align-items: center;
373
+
374
+ .u-platform-option.is-select {
375
+ background-color: #2a9998;
376
+ flex-grow: 3;
401
377
  }
402
378
 
403
- .m-skill {
404
- position: relative;
405
- display: flex;
406
- justify-content: center;
407
- cursor: pointer;
379
+ .u-skill-list {
380
+ flex-grow: 1;
381
+ width: 0;
408
382
 
409
- .u-skill-icon {
410
- box-sizing: border-box;
411
- border: 2px solid #1a2b22;
383
+ display: flex;
384
+ background: #1a2b22;
385
+ padding: 20px;
386
+ border-radius: 8px;
387
+ flex-direction: column;
388
+ .m-martial-skills {
389
+ flex: 1;
412
390
  }
391
+ .m-martial-skill {
392
+ .u-title {
393
+ // 竖体显示
394
+ writing-mode: tb-rl;
395
+ letter-spacing: 1px;
396
+ display: flex;
397
+ align-items: center;
398
+ justify-content: center;
399
+ }
400
+ .u-title-name {
401
+ z-index: 1;
402
+ color: #fff;
403
+ font-size: 12px;
404
+ }
405
+ .u-title-img {
406
+ width: 24px;
407
+ height: 71px;
408
+ position: absolute;
409
+ }
410
+ margin-bottom: 20px;
411
+ display: flex;
412
+ align-items: center;
413
+ gap: 20px;
414
+ // border: 1px solid rgb(40,107,113);
415
+ padding: 4px 0;
416
+ position: relative;
413
417
 
414
- .u-skill.active {
415
418
  .u-name {
416
- color: #a5ffd0;
417
- text-shadow: 0 0 3px #2ffbb2;
419
+ display: block;
420
+ color: #fff;
421
+ font-size: 12px;
422
+ text-align: center;
423
+ // overflow: hidden;
424
+ white-space: nowrap;
425
+ width: 48px;
418
426
  }
419
427
  }
420
- }
428
+ .m-skills {
429
+ display: flex;
430
+ gap: 20px;
431
+ flex-wrap: wrap;
432
+ align-items: center;
433
+ }
421
434
 
435
+ .m-skill {
436
+ position: relative;
437
+ display: flex;
438
+ flex-direction: column;
439
+ justify-content: center;
440
+ cursor: pointer;
441
+
442
+ .u-skill-icon {
443
+ box-sizing: border-box;
444
+ border: 2px solid #1a2b22;
445
+ }
446
+
447
+ .u-skill.active {
448
+ .u-name {
449
+ color: #a5ffd0;
450
+ text-shadow: 0 0 3px #2ffbb2;
451
+ }
452
+ }
453
+ }
454
+ }
422
455
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jx3box/jx3box-editor",
3
- "version": "2.2.8",
3
+ "version": "2.2.9",
4
4
  "description": "JX3BOX Article & Editor",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/service/node.js CHANGED
@@ -2,19 +2,22 @@ import { $node, axios } from "@jx3box/jx3box-common/js/https";
2
2
 
3
3
  function getSkill(query, params) {
4
4
  let condition = isNaN(query) ? "name" : "id";
5
- return $node().get(`/skill/${condition}/${query}`, {
6
- params: params,
7
- }).then(res => {
8
- return res.data;
9
- }).catch((err) => {
10
- console.log(err);
11
- });
5
+ return $node()
6
+ .get(`/skill/${condition}/${query}`, {
7
+ params: params,
8
+ })
9
+ .then(res => {
10
+ return res.data;
11
+ })
12
+ .catch(err => {
13
+ console.log(err);
14
+ });
12
15
  }
13
16
 
14
17
  function getSkillList(params) {
15
18
  return $node().get(`/skill`, {
16
19
  params: params,
17
- })
20
+ });
18
21
  }
19
22
 
20
23
  import JX3BOX from "@jx3box/jx3box-common/data/jx3box.json";
@@ -39,4 +42,13 @@ async function getTalents2() {
39
42
  return res.data;
40
43
  }
41
44
 
42
- export { getSkill, getSkillList, getSkills, getTalents, getTalents2};
45
+ export function getMobileForceSkillList(force_id) {
46
+ return $node().get("/v2/kungfu/panel", {
47
+ params: {
48
+ mount_id: force_id,
49
+ client: 'wujie'
50
+ },
51
+ });
52
+ }
53
+
54
+ export { getSkill, getSkillList, getSkills, getTalents, getTalents2 };
@@ -1,68 +1,184 @@
1
1
  <template>
2
2
  <div class="m-pvp-martial">
3
- <div v-for="kungfu in kungfus" :key="kungfu" class="m-martial-skill">
4
- <div class="u-title">
5
- <span class="u-title-name">{{ showKungfuName(kungfu) }}</span>
6
- <img src="../../assets/img/skillset.png" class="u-title-img" alt="" />
7
- </div>
8
- <div class="m-skills" v-if="kungfusSkills[kungfu]">
9
- <div class="m-skill" v-for="(skill, index) in formatSkill(kungfusSkills[kungfu])" :key="index" @click="selectSkill(skill)">
10
- <div class="u-skill" v-if="skill && skill.IconID">
3
+ <div class="u-platform-select" v-if="client == 'std'">
4
+ <div
5
+ class="u-platform-option"
6
+ :class="{ 'is-select': platform == 1 }"
7
+ @click="platform = 1"
8
+ >旗舰端</div
9
+ >
10
+ <div
11
+ class="u-platform-option"
12
+ :class="{ 'is-select': platform == 2 }"
13
+ @click="platform = 2"
14
+ >无界端</div
15
+ >
16
+ </div>
17
+ <div class="u-skill-list">
18
+ <!-- 旗舰端技能列表 -->
19
+ <template v-if="platform == 1">
20
+ <div
21
+ v-for="kungfu in kungfus"
22
+ :key="kungfu"
23
+ class="m-martial-skill">
24
+ <div class="u-title">
25
+ <span class="u-title-name">{{
26
+ showKungfuName(kungfu)
27
+ }}</span>
11
28
  <img
12
- class="u-skill-icon"
13
- :src="iconLink(skill.IconID)"
14
- :alt="skill.IconID"
15
- />
16
- <span class="u-name" :title="skill.Name">{{ skill.Name }}</span>
29
+ src="../../assets/img/skillset.png"
30
+ class="u-title-img"
31
+ alt="" />
32
+ </div>
33
+ <div class="m-skills" v-if="kungfusSkills[kungfu]">
34
+ <div
35
+ class="m-skill"
36
+ v-for="(skill, index) in formatSkill(
37
+ kungfusSkills[kungfu]
38
+ )"
39
+ :key="index"
40
+ @click="selectSkill(skill)">
41
+ <div class="u-skill" v-if="skill && skill.IconID">
42
+ <img
43
+ class="u-skill-icon"
44
+ :src="iconLink(skill.IconID)"
45
+ :alt="skill.IconID" />
46
+ <span class="u-name" :title="skill.Name">{{
47
+ skill.Name
48
+ }}</span>
49
+ </div>
50
+ </div>
17
51
  </div>
18
52
  </div>
19
- </div>
20
- </div>
21
- <!-- 奇穴技能 -->
22
- <div class="m-martial-skill" v-if="talentSkills && talentSkills.length">
23
- <div class="u-title">
24
- <span class="u-title-name">奇穴技能</span>
25
- <img src="../../assets/img/skillset.png" class="u-title-img" alt="" />
26
- </div>
27
- <div class="m-skills">
28
- <div class="m-skill" v-for="(skill, index) in talentSkills" :key="index" @click="selectSkill(skill)">
29
- <div class="u-skill" v-if="skill && skill.IconID">
53
+ <!-- 奇穴技能 -->
54
+ <div
55
+ class="m-martial-skill"
56
+ v-if="talentSkills && talentSkills.length">
57
+ <div class="u-title">
58
+ <span class="u-title-name">奇穴技能</span>
30
59
  <img
31
- class="u-skill-icon"
32
- :src="iconLink(skill.IconID)"
33
- :alt="skill.IconID"
34
- />
35
- <span class="u-name" :title="skill.Name">{{ skill.Name }}</span>
60
+ src="../../assets/img/skillset.png"
61
+ class="u-title-img"
62
+ alt="" />
63
+ </div>
64
+ <div class="m-skills">
65
+ <div
66
+ class="m-skill"
67
+ v-for="(skill, index) in talentSkills"
68
+ :key="index"
69
+ @click="selectSkill(skill)">
70
+ <div class="u-skill" v-if="skill && skill.IconID">
71
+ <img
72
+ class="u-skill-icon"
73
+ :src="iconLink(skill.IconID)"
74
+ :alt="skill.IconID" />
75
+ <span class="u-name" :title="skill.Name">{{
76
+ skill.Name
77
+ }}</span>
78
+ </div>
79
+ </div>
36
80
  </div>
37
81
  </div>
38
- </div>
39
- </div>
40
-
41
- <!-- 江湖轻功 -->
42
- <div class="m-martial-skill">
43
- <div class="u-title">
44
- <span class="u-title-name">江湖轻功</span>
45
- <img src="../../assets/img/skillset.png" class="u-title-img" alt="" />
46
- </div>
47
- <div class="m-skills">
48
- <div class="m-skill" v-for="(skill, index) in commonSkills" :key="index" @click="selectSkill(skill)">
49
- <div class="u-skill" v-if="skill && skill.IconID">
82
+ <!-- 江湖轻功 -->
83
+ <div class="m-martial-skill">
84
+ <div class="u-title">
85
+ <span class="u-title-name">江湖轻功</span>
50
86
  <img
51
- class="u-skill-icon"
52
- :src="iconLink(skill.IconID)"
53
- :alt="skill.IconID"
54
- />
55
- <span class="u-name" :title="skill.Name">{{ skill.Name }}</span>
87
+ src="../../assets/img/skillset.png"
88
+ class="u-title-img"
89
+ alt="" />
90
+ </div>
91
+ <div class="m-skills">
92
+ <div
93
+ class="m-skill"
94
+ v-for="(skill, index) in commonSkills"
95
+ :key="index"
96
+ @click="selectSkill(skill)">
97
+ <div class="u-skill" v-if="skill && skill.IconID">
98
+ <img
99
+ class="u-skill-icon"
100
+ :src="iconLink(skill.IconID)"
101
+ :alt="skill.IconID" />
102
+ <span class="u-name" :title="skill.Name">{{
103
+ skill.Name
104
+ }}</span>
105
+ </div>
106
+ </div>
56
107
  </div>
57
108
  </div>
58
- </div>
109
+ </template>
110
+ <!-- 无界端技能列表 -->
111
+ <template v-else-if="platform == 2">
112
+ <!-- 门派技能 -->
113
+ <div class="m-martial-skill" v-if="wujie_data.mount.length">
114
+ <div class="u-title">
115
+ <span class="u-title-name">门派技能</span>
116
+ <img
117
+ src="../../assets/img/skillset.png"
118
+ class="u-title-img"
119
+ alt="" />
120
+ </div>
121
+ <div class="m-skills">
122
+ <div
123
+ class="m-skill"
124
+ v-for="(skill, index) in formatSkill(
125
+ wujie_data.mount
126
+ )"
127
+ :key="index"
128
+ @click="selectSkill(skill)">
129
+ <div class="u-skill" v-if="skill && skill.IconID">
130
+ <img
131
+ class="u-skill-icon"
132
+ :src="iconLink(skill.IconID)"
133
+ :alt="skill.IconID" />
134
+ <span class="u-name" :title="skill.Name">{{
135
+ skill.Name
136
+ }}</span>
137
+ </div>
138
+ </div>
139
+ </div>
140
+ </div>
141
+ <!-- 通用技能 -->
142
+ <div class="m-martial-skill">
143
+ <div class="u-title">
144
+ <span class="u-title-name">通用技能</span>
145
+ <img
146
+ src="../../assets/img/skillset.png"
147
+ class="u-title-img"
148
+ alt="" />
149
+ </div>
150
+ <div class="m-skills">
151
+ <div
152
+ class="m-skill"
153
+ v-for="(skill, index) in formatSkill(
154
+ wujie_data.common
155
+ )"
156
+ :key="index"
157
+ @click="selectSkill(skill)">
158
+ <div class="u-skill" v-if="skill && skill.IconID">
159
+ <img
160
+ class="u-skill-icon"
161
+ :src="iconLink(skill.IconID)"
162
+ :alt="skill.IconID" />
163
+ <span class="u-name" :title="skill.Name">{{
164
+ skill.Name
165
+ }}</span>
166
+ </div>
167
+ </div>
168
+ </div>
169
+ </div>
170
+ </template>
59
171
  </div>
60
172
  </div>
61
173
  </template>
62
174
 
63
175
  <script>
64
176
  import xfmap from "@jx3box/jx3box-data/data/xf/xf.json";
65
- import { getSkills, getTalents } from "../../service/node";
177
+ import {
178
+ getSkills,
179
+ getTalents,
180
+ getMobileForceSkillList,
181
+ } from "../../service/node";
66
182
  import kungfumap_std from "@jx3box/jx3box-data/data/martial/kungfu_std.json";
67
183
  import kungfumap_origin from "@jx3box/jx3box-data/data/martial/kungfu_origin.json";
68
184
  import { flattenDeep, uniqBy } from "lodash";
@@ -83,8 +199,14 @@ export default {
83
199
  emits: [],
84
200
  data() {
85
201
  return {
202
+ platform: 1,
86
203
  talents: [],
87
204
  data: [],
205
+
206
+ wujie_data: {
207
+ common: [],
208
+ mount: [],
209
+ },
88
210
  loading: false,
89
211
  };
90
212
  },
@@ -93,10 +215,16 @@ export default {
93
215
  return xfmap[this.subtype]?.id;
94
216
  },
95
217
  skillIds() {
96
- return flattenDeep(Object.values(this.kungfumap?.[this.mountId]?.["skills"]));
218
+ return flattenDeep(
219
+ Object.values(this.kungfumap?.[this.mountId]?.["skills"])
220
+ );
97
221
  },
98
222
  ids() {
99
- return [...this.skillIds, ...this.talentSkillIds, ...this.commonIds].join(",");
223
+ return [
224
+ ...this.skillIds,
225
+ ...this.talentSkillIds,
226
+ ...this.commonIds,
227
+ ].join(",");
100
228
  },
101
229
  kungfumap() {
102
230
  return this.client == "origin" ? kungfumap_origin : kungfumap_std;
@@ -109,7 +237,9 @@ export default {
109
237
  },
110
238
  // 奇穴id std
111
239
  talentSkillIds() {
112
- return flattenDeep(this.mountId && this.talents?.[this.mountId]) || [];
240
+ return (
241
+ flattenDeep(this.mountId && this.talents?.[this.mountId]) || []
242
+ );
113
243
  },
114
244
  // 手动写死
115
245
  commonIds() {
@@ -119,12 +249,16 @@ export default {
119
249
  // 门派技能数据
120
250
  kungfusSkills: function () {
121
251
  const obj = {};
122
- Object.entries(this.kungfumap[this.mountId]["skills"]).forEach(([key, value]) => {
123
- obj[key] = value.map((SkillID) => {
124
- const currentSkill = this.data.find((d) => d.SkillID == SkillID);
125
- return currentSkill;
126
- });
127
- });
252
+ Object.entries(this.kungfumap[this.mountId]["skills"]).forEach(
253
+ ([key, value]) => {
254
+ obj[key] = value.map(SkillID => {
255
+ const currentSkill = this.data.find(
256
+ d => d.SkillID == SkillID
257
+ );
258
+ return currentSkill;
259
+ });
260
+ }
261
+ );
128
262
  return obj;
129
263
  },
130
264
  // 门派技能套路id
@@ -132,21 +266,34 @@ export default {
132
266
  return this.kungfumap[this.mountId]["kungfus"];
133
267
  },
134
268
  talentSkills() {
135
- return this.talentSkillIds.map((SkillID) => {
136
- const currentSkill = this.data.find((d) => d.SkillID == SkillID);
137
- return currentSkill;
138
- }).filter(item => item && item.IsPassiveSkill == 0);
269
+ return this.talentSkillIds
270
+ .map(SkillID => {
271
+ const currentSkill = this.data.find(
272
+ d => d.SkillID == SkillID
273
+ );
274
+ return currentSkill;
275
+ })
276
+ .filter(item => item && item.IsPassiveSkill == 0);
139
277
  },
140
278
  commonSkills() {
141
- return this.commonIds.map((SkillID) => {
142
- const currentSkill = this.data.find((d) => d.SkillID == SkillID);
143
- return currentSkill;
144
- }).filter(Boolean);
145
- }
279
+ return this.commonIds
280
+ .map(SkillID => {
281
+ const currentSkill = this.data.find(
282
+ d => d.SkillID == SkillID
283
+ );
284
+ return currentSkill;
285
+ })
286
+ .filter(Boolean);
287
+ },
146
288
  },
147
289
  async mounted() {
148
290
  this.talents = await getTalents();
149
291
  await this.loadSkills();
292
+ getMobileForceSkillList(0).then(res => {
293
+ this.wujie_data.common = res.data.data
294
+ ?.map(s => s.skill)
295
+ .filter(Boolean);
296
+ });
150
297
  },
151
298
  watch: {
152
299
  mountId: {
@@ -154,13 +301,39 @@ export default {
154
301
  this.loadSkills();
155
302
  },
156
303
  },
304
+ subtype: {
305
+ handler() {
306
+ if (this.client != "std") return;
307
+ const force_id = xfmap[this.subtype]?.force;
308
+ if (!force_id) return;
309
+ getMobileForceSkillList(force_id).then(res => {
310
+ this.wujie_data.mount = res.data.data
311
+ ?.map(s => s.skill)
312
+ .filter(Boolean);
313
+ });
314
+ },
315
+ immediate: true,
316
+ },
317
+ client(val) {
318
+ if (val == "origin") {
319
+ this.platform = 1;
320
+ return;
321
+ }
322
+ const force_id = xfmap[this.subtype]?.force;
323
+ if (!force_id) return;
324
+ getMobileForceSkillList(force_id).then(res => {
325
+ this.wujie_data.mount = res.data.data
326
+ ?.map(s => s.skill)
327
+ .filter(Boolean);
328
+ });
329
+ },
157
330
  },
158
331
  methods: {
159
332
  iconLink,
160
333
  async loadSkills() {
161
334
  this.loading = true;
162
335
  return getSkills(this.params)
163
- .then((res) => {
336
+ .then(res => {
164
337
  this.data = uniqBy(res.data, "Name");
165
338
  })
166
339
  .finally(() => {
@@ -172,15 +345,13 @@ export default {
172
345
  return kungfus[val];
173
346
  },
174
347
  selectSkill(skill) {
175
- this.$emit('selectSkill', skill);
348
+ this.$emit("selectSkill", skill);
176
349
  },
177
350
  formatSkill(arr) {
178
- return arr.filter(item => item?.SkillID)
179
- }
351
+ return arr.filter(item => item?.SkillID);
352
+ },
180
353
  },
181
354
  };
182
355
  </script>
183
356
 
184
- <style lang="less">
185
-
186
- </style>
357
+ <style lang="less"></style>