zydx-plus 1.32.182 → 1.32.184
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/package.json +1 -1
- package/src/components/editor/src/butJson.js +19 -5
- package/src/components/editor/src/editor.vue +44 -11
- package/src/components/editor/src/extend/title-id.js +33 -0
- package/src/components/question/src/question.vue +7 -7
- package/src/components/treeList/src/treeList.vue +1 -0
- package/src/components/word/src/word.css +21 -4
- package/src/components/word/src/word.vue +39 -13
- package/src/index.js +1 -1
package/package.json
CHANGED
|
@@ -18,10 +18,10 @@ export function butJson (editor,data) {
|
|
|
18
18
|
{name: '(左)黑体5号', key: 'blackLeft5'},
|
|
19
19
|
],
|
|
20
20
|
html: {
|
|
21
|
-
blackCenter4: `<p data-signId="title" style="text-align: center;"><span style="font-weight: 700;color: rgb(0, 0, 0);font-size: 16px;font-family: SimHei">${menusData(data,'titleMenu').text}</span></p>`,
|
|
22
|
-
blackLeft4: `<p data-signId="title" style="text-align: left;"><span style="font-weight: 700;color: rgb(0, 0, 0);font-size: 16px;font-family: SimHei">${menusData(data,'titleMenu').text}</span></p>`,
|
|
23
|
-
blackCenter5: `<p data-signId="title" style="text-align: center;"><span style="font-weight: 700;color: rgb(0, 0, 0);font-size: 14px;font-family: SimHei">${menusData(data,'titleMenu').text}</span></p>`,
|
|
24
|
-
blackLeft5: `<p data-signId="title" style="text-align: left;"><span style="font-weight: 700;color: rgb(0, 0, 0);font-size: 14px;font-family: SimHei">${menusData(data,'titleMenu').text}</span></p>`,
|
|
21
|
+
blackCenter4: `<p data-signId="title-1" id="${randomId()}" style="text-align: center;"><span style="font-weight: 700;color: rgb(0, 0, 0);font-size: 16px;font-family: SimHei">${menusData(data,'titleMenu').text}</span></p>`,
|
|
22
|
+
blackLeft4: `<p data-signId="title-2" id="${randomId()}" style="text-align: left;"><span style="font-weight: 700;color: rgb(0, 0, 0);font-size: 16px;font-family: SimHei">${menusData(data,'titleMenu').text}</span></p>`,
|
|
23
|
+
blackCenter5: `<p data-signId="title-3" id="${randomId()}" style="text-align: center;"><span style="font-weight: 700;color: rgb(0, 0, 0);font-size: 14px;font-family: SimHei">${menusData(data,'titleMenu').text}</span></p>`,
|
|
24
|
+
blackLeft5: `<p data-signId="title-4" id="${randomId()}" style="text-align: left;"><span style="font-weight: 700;color: rgb(0, 0, 0);font-size: 14px;font-family: SimHei">${menusData(data,'titleMenu').text}</span></p>`,
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
textMenu: {
|
|
@@ -64,7 +64,7 @@ export function butJson (editor,data) {
|
|
|
64
64
|
name: '标注编号',
|
|
65
65
|
key: 'numberMenu',
|
|
66
66
|
menuKeys: [],
|
|
67
|
-
html: `<sup
|
|
67
|
+
html: `<sup>[${menusData(data,'numberMenu').text}]</sup>`
|
|
68
68
|
},
|
|
69
69
|
keywordMenu: {
|
|
70
70
|
name: '关键词',
|
|
@@ -95,6 +95,15 @@ export function butJson (editor,data) {
|
|
|
95
95
|
],
|
|
96
96
|
index: numSort(editor)
|
|
97
97
|
},
|
|
98
|
+
ackMenu: {
|
|
99
|
+
name: '致谢',
|
|
100
|
+
key: 'ackMenu',
|
|
101
|
+
menuKeys: [],
|
|
102
|
+
html: [
|
|
103
|
+
`<p data-signId="ack" contenteditable="false" style="text-align: center;"><span style="color: rgb(0, 0, 0);font-size: 24px;font-weight: bold;">致谢</span></p>`,
|
|
104
|
+
`<p><span style="color: rgb(0, 0, 0);font-size: 14px;">致谢内容...</span></p>`
|
|
105
|
+
]
|
|
106
|
+
},
|
|
98
107
|
'group-image': {
|
|
99
108
|
name: '上传图片',
|
|
100
109
|
key: 'group-image',
|
|
@@ -133,6 +142,11 @@ function menusData(data,key) {
|
|
|
133
142
|
return arr
|
|
134
143
|
}
|
|
135
144
|
|
|
145
|
+
// 随机id
|
|
146
|
+
function randomId() {
|
|
147
|
+
return Math.random().toString(36).substr(2)
|
|
148
|
+
}
|
|
149
|
+
|
|
136
150
|
// 时间
|
|
137
151
|
function getTime() {
|
|
138
152
|
let date = new Date()
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
<div class="editor-but-name" v-if="item.key === 'group-upload'">
|
|
6
6
|
<label>
|
|
7
7
|
<input type="file" @change="upload($event,item.key)" accept=".docx,.pptx,.pdf,.xlsx" style="display: none;">
|
|
8
|
-
<span
|
|
8
|
+
<span v-html="item.name"></span>
|
|
9
9
|
</label>
|
|
10
10
|
</div>
|
|
11
11
|
<div v-else class="editor-but-name" @click="butTap(item,0)">
|
|
12
|
-
<span
|
|
12
|
+
<span v-html="item.name"></span>
|
|
13
13
|
<img v-if="item.menuKeys.length > 0" src="data:image/png;base64,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" alt="" />
|
|
14
14
|
</div>
|
|
15
15
|
<div class="editor-but-down" v-if="item.menuKeys.length > 0">
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
<li @click="butTap(item,item2)" v-for="(item2,index2) in item.menuKeys">
|
|
18
18
|
<label v-if="item2.key === 'uploadImage'">
|
|
19
19
|
<input type="file" @change="upload($event,item2.key)" accept="image/*" style="display: none;">
|
|
20
|
-
<span
|
|
20
|
+
<span v-html="item2.name"></span>
|
|
21
21
|
</label>
|
|
22
|
-
<span v-else
|
|
22
|
+
<span v-else v-html="item2.name"></span>
|
|
23
23
|
</li>
|
|
24
24
|
</ul>
|
|
25
25
|
</div>
|
|
@@ -75,6 +75,7 @@ import Link from "@tiptap/extension-link";
|
|
|
75
75
|
import { FontSize } from "./extend/font-size";
|
|
76
76
|
import { signId } from "./extend/sign-id";
|
|
77
77
|
import { Contenteditable } from "./extend/contenteditable";
|
|
78
|
+
import { titleId } from "./extend/title-id";
|
|
78
79
|
|
|
79
80
|
export default {
|
|
80
81
|
name: 'zydx-editor',
|
|
@@ -181,6 +182,7 @@ export default {
|
|
|
181
182
|
StarterKit, // 基础
|
|
182
183
|
TextStyle, // 文本样式
|
|
183
184
|
Superscript, // 上标
|
|
185
|
+
titleId, // 标题id
|
|
184
186
|
Link.configure({
|
|
185
187
|
HTMLAttributes: {
|
|
186
188
|
class: 'custom-link',
|
|
@@ -219,7 +221,7 @@ export default {
|
|
|
219
221
|
},
|
|
220
222
|
emits: ['confirm','enclosure'],
|
|
221
223
|
methods: {
|
|
222
|
-
|
|
224
|
+
readOnlyPage() {
|
|
223
225
|
this.htmlArr = []
|
|
224
226
|
const data = document.querySelectorAll('.editing-cont')[0].childNodes[0].childNodes
|
|
225
227
|
let max = 1123
|
|
@@ -227,6 +229,11 @@ export default {
|
|
|
227
229
|
let html = ''
|
|
228
230
|
for (let i = 0; i < data.length; i++) {
|
|
229
231
|
let text = data[i].offsetHeight
|
|
232
|
+
if(data[i].dataset?.signid === 'ack') {
|
|
233
|
+
this.htmlArr.push(html)
|
|
234
|
+
pHeight = 0
|
|
235
|
+
html = ''
|
|
236
|
+
}
|
|
230
237
|
if((pHeight + text) > max) {
|
|
231
238
|
// console.log(this.rows(data[i],(pHeight + text) - max))
|
|
232
239
|
this.htmlArr.push(html)
|
|
@@ -277,7 +284,7 @@ export default {
|
|
|
277
284
|
}
|
|
278
285
|
}
|
|
279
286
|
},
|
|
280
|
-
upSort(editor) {
|
|
287
|
+
upSort(editor,v) {
|
|
281
288
|
const data = editor.state.selection.$anchor.path[0].content.content
|
|
282
289
|
let num = 1
|
|
283
290
|
let len = 0
|
|
@@ -292,7 +299,7 @@ export default {
|
|
|
292
299
|
}
|
|
293
300
|
})
|
|
294
301
|
return {
|
|
295
|
-
len: this.selectionPath(
|
|
302
|
+
len: this.selectionPath(v) + len,
|
|
296
303
|
num: num
|
|
297
304
|
}
|
|
298
305
|
},
|
|
@@ -311,12 +318,12 @@ export default {
|
|
|
311
318
|
if(b === -1) {
|
|
312
319
|
const last = this.editor.state.selection.$anchor.path[0].content.size
|
|
313
320
|
if(t === -1) this.editor.chain().focus().insertContentAt(last,html).run()
|
|
314
|
-
const num = this.upSort(this.editor)
|
|
321
|
+
const num = this.upSort(this.editor,'enclosure')
|
|
315
322
|
const html2 = `<p contenteditable="false" data-signId="u-${num.num}"><a href="${url}" ><span>${num.num}. ${name}</span></a></p>`
|
|
316
323
|
this.editor.chain().focus().insertContentAt(num.len,html2).run()
|
|
317
324
|
}else {
|
|
318
325
|
if(t === -1) this.editor.chain().focus().insertContentAt(this.selectionPath('paragraph',b - 1),html).run()
|
|
319
|
-
const num = this.upSort(this.editor)
|
|
326
|
+
const num = this.upSort(this.editor,'enclosure')
|
|
320
327
|
const html2 = `<p contenteditable="false" data-signId="u-${num.num}"><a href="${url}" ><span>${num.num}. ${name}</span></a></p>`
|
|
321
328
|
this.editor.chain().focus().insertContentAt(num.len,html2).run()
|
|
322
329
|
}
|
|
@@ -383,7 +390,17 @@ export default {
|
|
|
383
390
|
organizeButton() {
|
|
384
391
|
this.toolbar.forEach(item => {
|
|
385
392
|
let obj = butJson(this.editor,this.menusText)[item.key === undefined? item : item.key]
|
|
386
|
-
if (obj)
|
|
393
|
+
if (obj) {
|
|
394
|
+
if(item.key === undefined) {
|
|
395
|
+
this.butData.push(obj)
|
|
396
|
+
}else {
|
|
397
|
+
this.butData.push({
|
|
398
|
+
key: item.key,
|
|
399
|
+
menuKeys: obj.menuKeys,
|
|
400
|
+
name: item.title
|
|
401
|
+
})
|
|
402
|
+
}
|
|
403
|
+
}
|
|
387
404
|
})
|
|
388
405
|
},
|
|
389
406
|
async butTap(data,key) {
|
|
@@ -434,8 +451,14 @@ export default {
|
|
|
434
451
|
if(data.key === 'paragraphMenu') {
|
|
435
452
|
const html = butJson(this.editor,this.menusText)[data.key].html
|
|
436
453
|
const last = this.editor.state.selection.$anchor.path[0].content.size
|
|
454
|
+
const b = await this.signIdData('ack')
|
|
437
455
|
const r = await this.signIdData('paragraph')
|
|
438
|
-
if(
|
|
456
|
+
if(b === -1) {
|
|
457
|
+
if(r === -1) this.editor.chain().focus().insertContentAt(last,html).run()
|
|
458
|
+
}else {
|
|
459
|
+
const num = this.upSort(this.editor,'ack')
|
|
460
|
+
if(r === -1) this.editor.chain().focus().insertContentAt(num.len-3,html).run()
|
|
461
|
+
}
|
|
439
462
|
}
|
|
440
463
|
// 标注编号
|
|
441
464
|
if(data.key === 'numberMenu') {
|
|
@@ -452,6 +475,16 @@ export default {
|
|
|
452
475
|
const html = butJson(this.editor,this.menusText)[data.key].html
|
|
453
476
|
this.editor.chain().focus().insertContentAt(this.selection(),html).run()
|
|
454
477
|
}
|
|
478
|
+
// 致谢
|
|
479
|
+
if(data.key === 'ackMenu') {
|
|
480
|
+
const html = butJson(this.editor,this.menusText)[data.key].html
|
|
481
|
+
const last = this.editor.state.selection.$anchor.path[0].content.size
|
|
482
|
+
const r = await this.signIdData('ack')
|
|
483
|
+
if(r === -1) {
|
|
484
|
+
this.editor.chain().focus().insertContentAt(last,html[0]).run()
|
|
485
|
+
this.editor.chain().focus().insertContentAt(last+3,html[1]).run()
|
|
486
|
+
}
|
|
487
|
+
}
|
|
455
488
|
// 文献
|
|
456
489
|
if(data.key === 'literatureMenu') {
|
|
457
490
|
const html = butJson(this.editor,this.menusText)[data.key].html
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Extension } from '@tiptap/core'
|
|
2
|
+
|
|
3
|
+
export const titleId = Extension.create({
|
|
4
|
+
name: 'titleId',
|
|
5
|
+
|
|
6
|
+
addOptions() {
|
|
7
|
+
return {
|
|
8
|
+
types: ['heading', 'paragraph'],
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
|
|
12
|
+
addGlobalAttributes() {
|
|
13
|
+
return [
|
|
14
|
+
{
|
|
15
|
+
types: this.options.types,
|
|
16
|
+
attributes: {
|
|
17
|
+
titleId: {
|
|
18
|
+
default: null,
|
|
19
|
+
parseHTML: element => element.getAttribute('class'),
|
|
20
|
+
renderHTML: attributes => {
|
|
21
|
+
if (!attributes.titleId) {
|
|
22
|
+
return {}
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
'class': attributes.titleId,
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
})
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<span>{{ item.easy }}</span>
|
|
21
21
|
</div>
|
|
22
22
|
<div v-else class="qu-input" :style="{'margin-left': readOnlys?'0px':'-10px'}">
|
|
23
|
-
<span v-if="readOnlys">{{ item.easy }}</span>
|
|
23
|
+
<span v-if="readOnlys">{{ item.easy === ''? '-': item.easy }}</span>
|
|
24
24
|
<input v-else type="number" placeholder="题量" :value="item.easy" @input="totalQuestions($event,1,index)" @keypress="isNumberKey($event,1)" />
|
|
25
25
|
</div>
|
|
26
26
|
</td>
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<span>{{ item.hard }}</span>
|
|
30
30
|
</div>
|
|
31
31
|
<div v-else class="qu-input" :style="{'margin-left': readOnlys?'0px':'-10px'}">
|
|
32
|
-
<span v-if="readOnlys">{{ item.hard }}</span>
|
|
32
|
+
<span v-if="readOnlys">{{ item.hard === ''? '-': item.hard }}</span>
|
|
33
33
|
<input v-else type="number" placeholder="题量" :value="item.hard" @input="totalQuestions($event,2,index)" @keypress="isNumberKey($event,1)" />
|
|
34
34
|
</div>
|
|
35
35
|
</td>
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
<span>{{ item.mid }}</span>
|
|
39
39
|
</div>
|
|
40
40
|
<div v-else class="qu-input" :style="{'margin-left': readOnlys?'0px':'-10px'}">
|
|
41
|
-
<span v-if="readOnlys">{{ item.mid }}</span>
|
|
41
|
+
<span v-if="readOnlys">{{ item.mid === ''? '-': item.mid }}</span>
|
|
42
42
|
<input v-else type="number" placeholder="题量" :value="item.mid" @input="totalQuestions($event,3,index)" @keypress="isNumberKey($event,1)" />
|
|
43
43
|
</div>
|
|
44
44
|
</td>
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
<span>{{ item.easyScore }}</span>
|
|
56
56
|
</div>
|
|
57
57
|
<div v-else class="qu-input" :style="{'margin-left': readOnlys?'0px':'-10px'}">
|
|
58
|
-
<span v-if="readOnlys">{{ item.easyScore }}</span>
|
|
58
|
+
<span v-if="readOnlys">{{ item.easyScore === ''? '-': item.easyScore }}</span>
|
|
59
59
|
<input v-else type="number" placeholder="分值" :value="item.easyScore" @input="totalQuestions($event,4,index)" @keypress="isNumberKey($event,2)" />
|
|
60
60
|
</div>
|
|
61
61
|
</td>
|
|
@@ -64,16 +64,16 @@
|
|
|
64
64
|
<span>{{ item.hardScore }}</span>
|
|
65
65
|
</div>
|
|
66
66
|
<div v-else class="qu-input" :style="{'margin-left': readOnlys?'0px':'-10px'}">
|
|
67
|
-
<span v-if="readOnlys">{{ item.hardScore }}</span>
|
|
67
|
+
<span v-if="readOnlys">{{ item.hardScore === ''? '-': item.hardScore }}</span>
|
|
68
68
|
<input v-else type="number" placeholder="分值" :value="item.hardScore" @input="totalQuestions($event,5,index)" @keypress="isNumberKey($event,2)" />
|
|
69
69
|
</div>
|
|
70
70
|
</td>
|
|
71
71
|
<td>
|
|
72
72
|
<div v-if="empty" class="qu-input" :style="{'margin-left': '0px'}">
|
|
73
|
-
<span>{{ item.midScore }}</span>
|
|
73
|
+
<span>{{ item.midScore === ''? '-': item.midScore }}</span>
|
|
74
74
|
</div>
|
|
75
75
|
<div v-else class="qu-input" :style="{'margin-left': readOnlys?'0px':'-10px'}">
|
|
76
|
-
<span v-if="readOnlys">{{ item.midScore }}</span>
|
|
76
|
+
<span v-if="readOnlys">{{ item.midScore === ''? '-': item.midScore }}</span>
|
|
77
77
|
<input v-else type="number" placeholder="分值" :value="item.midScore" @input="totalQuestions($event,6,index)" @keypress="isNumberKey($event,2)" />
|
|
78
78
|
</div>
|
|
79
79
|
</td>
|
|
@@ -88,11 +88,20 @@
|
|
|
88
88
|
}
|
|
89
89
|
.subject-title{
|
|
90
90
|
flex: 1;
|
|
91
|
-
text-indent: 2em;
|
|
92
91
|
position: relative;
|
|
93
92
|
}
|
|
94
93
|
.subject-title label{
|
|
95
|
-
display:
|
|
94
|
+
display: inline-block;
|
|
95
|
+
}
|
|
96
|
+
.subject-title label input{
|
|
97
|
+
position: absolute;
|
|
98
|
+
top: 5px;
|
|
99
|
+
left: 0;
|
|
100
|
+
z-index: 1;
|
|
101
|
+
}
|
|
102
|
+
.subject span{
|
|
103
|
+
text-align: justify;
|
|
104
|
+
padding-left: 2em;
|
|
96
105
|
}
|
|
97
106
|
.subject span em{
|
|
98
107
|
font-style: normal;
|
|
@@ -145,8 +154,16 @@ input[name='check'] {
|
|
|
145
154
|
left: 0;
|
|
146
155
|
}
|
|
147
156
|
.subject-but{
|
|
157
|
+
position: relative;
|
|
158
|
+
}
|
|
159
|
+
.subject-but b{
|
|
148
160
|
position: absolute;
|
|
149
|
-
bottom: 2px;
|
|
150
|
-
right: 0;
|
|
151
161
|
z-index: 1;
|
|
162
|
+
display: flex;
|
|
163
|
+
}
|
|
164
|
+
.subject-html{
|
|
165
|
+
margin: 2px 0;
|
|
166
|
+
}
|
|
167
|
+
.subject-html :deep(p){
|
|
168
|
+
margin: 2px 0;
|
|
152
169
|
}
|
|
@@ -6,21 +6,31 @@
|
|
|
6
6
|
<div class="subject-title">
|
|
7
7
|
<label>
|
|
8
8
|
<input v-if="multipleShow" type="checkbox" :checked="item.checked" @change="checkboxChange($event,index)" name="check" />
|
|
9
|
-
<span>{{ item.order }}.<em v-html="item.title"></em
|
|
9
|
+
<span>{{ item.order }}.<em v-html="item.title"></em>
|
|
10
|
+
<i class="subject-but" ref="subject">
|
|
11
|
+
<b :style="{right: -item.right + 'px', top: item.top + 'px'}" v-if="butShow" ref="b">
|
|
12
|
+
<button class="but" @click="modify(item)">修改</button>
|
|
13
|
+
<button class="but" @click="del(item)">删除</button>
|
|
14
|
+
</b>
|
|
15
|
+
<b :style="{right: -item.right + 'px', top: item.top + 'px'}" v-if="replace" ref="b">
|
|
16
|
+
<button class="but" @click="replaceTap(item,index)">替换题目</button>
|
|
17
|
+
</b>
|
|
18
|
+
<b :style="{right: -item.right + 'px', top: item.top + 'px'}" v-if="choice" ref="b">
|
|
19
|
+
<button class="but"
|
|
20
|
+
@click="choiceTap(item,index)"
|
|
21
|
+
:disabled="!item.choice"
|
|
22
|
+
:style="{border: !item.choice?'1px solid #ccc': '1px solid #000'}">
|
|
23
|
+
{{ choiceState? '选择题目' : item.choice?'撤销选择': '选择题目' }}
|
|
24
|
+
</button>
|
|
25
|
+
</b>
|
|
26
|
+
</i>
|
|
27
|
+
</span>
|
|
10
28
|
</label>
|
|
11
|
-
<div class="subject-but">
|
|
12
|
-
<button class="but" v-if="butShow" @click="modify(item)">修改</button>
|
|
13
|
-
<button class="but" v-if="butShow" @click="del(item)">删除</button>
|
|
14
|
-
<button class="but" v-if="replace" @click="replaceTap(item,index)">替换题目</button>
|
|
15
|
-
<button class="but" v-if="choice"
|
|
16
|
-
@click="choiceTap(item,index)"
|
|
17
|
-
:disabled="!item.choice"
|
|
18
|
-
:style="{border: !item.choice?'1px solid #ccc': '1px solid #000'}">
|
|
19
|
-
{{ choiceState? '选择题目' : item.choice?'撤销选择': '选择题目' }}
|
|
20
|
-
</button>
|
|
21
|
-
</div>
|
|
22
29
|
</div>
|
|
23
30
|
</div>
|
|
31
|
+
<div v-if="item.alist" class="subject-html">
|
|
32
|
+
<div v-for="(item,index) in item.alist" v-html="item.amexontet"></div>
|
|
33
|
+
</div>
|
|
24
34
|
<div class="choice" v-if="item.testKey">
|
|
25
35
|
<div class="choice-box" v-for="(ts,ind) in JSON.parse(item.testKey)">
|
|
26
36
|
<label>
|
|
@@ -35,7 +45,7 @@
|
|
|
35
45
|
</template>
|
|
36
46
|
|
|
37
47
|
<script>
|
|
38
|
-
|
|
48
|
+
import { html2json, json2html } from 'html2json'
|
|
39
49
|
export default {
|
|
40
50
|
name: "zydx-seek",
|
|
41
51
|
data() {
|
|
@@ -81,8 +91,24 @@ export default {
|
|
|
81
91
|
this.value = val
|
|
82
92
|
this.value.map((item,index) => {
|
|
83
93
|
item.choice = true
|
|
94
|
+
item.right = 0
|
|
95
|
+
item.top = 0
|
|
96
|
+
if(item.alist) {
|
|
97
|
+
item.alist.map(x => {
|
|
98
|
+
x.amexontet = json2html({node: "root",child: JSON.parse(x.amexontet)})
|
|
99
|
+
return x
|
|
100
|
+
})
|
|
101
|
+
}
|
|
84
102
|
return item
|
|
85
103
|
})
|
|
104
|
+
this.$nextTick(() => {
|
|
105
|
+
const w = this.$refs.parer.offsetWidth
|
|
106
|
+
for(let i = 0; i< this.$refs.subject.length; i++) {
|
|
107
|
+
this.value[i].right = w - this.$refs.subject[i].offsetLeft
|
|
108
|
+
if(this.value[i].right < this.$refs.b[i].offsetWidth) this.value[i].top = 25
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
console.log(this.value)
|
|
86
112
|
},
|
|
87
113
|
immediate: true,
|
|
88
114
|
},
|