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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zydx-plus",
3
- "version": "1.32.182",
3
+ "version": "1.32.184",
4
4
  "description": "Vue.js",
5
5
  "main": "src/index.js",
6
6
  "files": [
@@ -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>【${menusData(data,'numberMenu').text}】</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>{{ item.name }}</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>{{ item.name }}</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>{{ item2.name }}</span>
20
+ <span v-html="item2.name"></span>
21
21
  </label>
22
- <span v-else>{{ item2.name }}</span>
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
- readOnlyPage() {
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('enclosure') + len,
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) this.butData.push(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(r === -1) this.editor.chain().focus().insertContentAt(last,html).run()
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>
@@ -70,6 +70,7 @@ export default {
70
70
  },
71
71
  watch: {
72
72
  actives(val) {
73
+ if(val === -1) return
73
74
  this.active = val
74
75
  }
75
76
  },
@@ -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: flex;
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></span>
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
  },
package/src/index.js CHANGED
@@ -77,7 +77,7 @@ function install(app) {
77
77
  }
78
78
 
79
79
  export default {
80
- version: '1.32.182',
80
+ version: '1.32.184',
81
81
  install,
82
82
  Calendar,
83
83
  Message,