zydx-plus 1.31.176 → 1.32.177
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/dragPopup/src/dragPopup.vue +5 -1
- package/src/components/editor/src/butJson.js +1 -1
- package/src/components/question/index.js +6 -0
- package/src/components/question/src/question.vue +259 -0
- package/src/components/word/src/word.css +11 -1
- package/src/components/word/src/word.vue +47 -9
- package/src/index.js +6 -3
package/package.json
CHANGED
|
@@ -101,7 +101,7 @@ export default {
|
|
|
101
101
|
return `transform: translate(${this.x}px, ${this.y}px);width:${this.footRightOffset}px;height:${this.footDownOffset}px;`;
|
|
102
102
|
},
|
|
103
103
|
},
|
|
104
|
-
emits: ['dragStatus','close'],
|
|
104
|
+
emits: ['dragStatus','close','enlarge'],
|
|
105
105
|
methods: {
|
|
106
106
|
disconnect() {
|
|
107
107
|
this.$emit('dragStatus')
|
|
@@ -149,6 +149,7 @@ export default {
|
|
|
149
149
|
this.isMove = false;
|
|
150
150
|
},
|
|
151
151
|
enlarge() {
|
|
152
|
+
let state = false
|
|
152
153
|
let clientWidth = document.documentElement.clientWidth;
|
|
153
154
|
let clientHeight = document.documentElement.clientHeight;
|
|
154
155
|
if(clientWidth === this.footRightOffset && clientHeight === this.footDownOffset) {
|
|
@@ -156,12 +157,15 @@ export default {
|
|
|
156
157
|
this.y = clientHeight / 2 - this.height / 2;
|
|
157
158
|
this.footDownOffset = this.height;
|
|
158
159
|
this.footRightOffset = this.width;
|
|
160
|
+
state = false
|
|
159
161
|
}else {
|
|
160
162
|
this.x = 0;
|
|
161
163
|
this.y = 0;
|
|
162
164
|
this.footDownOffset = clientHeight;
|
|
163
165
|
this.footRightOffset = clientWidth;
|
|
166
|
+
state = true
|
|
164
167
|
}
|
|
168
|
+
this.$emit('enlarge', state)
|
|
165
169
|
},
|
|
166
170
|
close() {
|
|
167
171
|
this.isMove = false
|
|
@@ -116,7 +116,7 @@ function numSort(editor) {
|
|
|
116
116
|
let num = 1
|
|
117
117
|
const data = editor.getJSON().content
|
|
118
118
|
data.forEach((item, index) => {
|
|
119
|
-
const id = item.attrs.signId
|
|
119
|
+
const id = item.attrs === undefined? null :item.attrs.signId
|
|
120
120
|
if(id) {
|
|
121
121
|
let arr = item.attrs.signId.split('-')[1]
|
|
122
122
|
num = Number(arr) + 1 > num ? Number(arr) + 1 : num
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="question">
|
|
3
|
+
<table border="0" cellspacing="0" cellpadding="0">
|
|
4
|
+
<tr>
|
|
5
|
+
<th>题序</th>
|
|
6
|
+
<th>题型</th>
|
|
7
|
+
<th>易</th>
|
|
8
|
+
<th>中</th>
|
|
9
|
+
<th>难</th>
|
|
10
|
+
<th>合计题量</th>
|
|
11
|
+
<th>合计分值</th>
|
|
12
|
+
<th v-if="!readOnly">操作</th>
|
|
13
|
+
</tr>
|
|
14
|
+
<tbody v-for="(item,index) in question" :key="index">
|
|
15
|
+
<tr>
|
|
16
|
+
<td rowspan="2">{{ toChineseNum(index + 1) }}</td>
|
|
17
|
+
<td rowspan="2">{{ item.quesName }}</td>
|
|
18
|
+
<td>
|
|
19
|
+
<div class="qu-input" :style="{'margin-left': readOnly?'0px':'-10px'}">
|
|
20
|
+
<span v-if="readOnly">{{ item.easy }}</span>
|
|
21
|
+
<input v-else type="number" placeholder="题量" :value="item.easy" @input="totalQuestions($event,1,index)" @keypress="isNumberKey($event,1)" />
|
|
22
|
+
</div>
|
|
23
|
+
</td>
|
|
24
|
+
<td>
|
|
25
|
+
<div class="qu-input" :style="{'margin-left': readOnly?'0px':'-10px'}">
|
|
26
|
+
<span v-if="readOnly">{{ item.hard }}</span>
|
|
27
|
+
<input v-else type="number" placeholder="题量" :value="item.hard" @input="totalQuestions($event,2,index)" @keypress="isNumberKey($event,1)" />
|
|
28
|
+
</div>
|
|
29
|
+
</td>
|
|
30
|
+
<td>
|
|
31
|
+
<div class="qu-input" :style="{'margin-left': readOnly?'0px':'-10px'}">
|
|
32
|
+
<span v-if="readOnly">{{ item.mid }}</span>
|
|
33
|
+
<input v-else type="number" placeholder="题量" :value="item.mid" @input="totalQuestions($event,3,index)" @keypress="isNumberKey($event,1)" />
|
|
34
|
+
</div>
|
|
35
|
+
</td>
|
|
36
|
+
<td rowspan="2">{{ item.count }}</td>
|
|
37
|
+
<td rowspan="2">{{ item.allScore }}</td>
|
|
38
|
+
<td rowspan="2" v-if="!readOnly">
|
|
39
|
+
<button class="but" @click="cancel(index)">撤销选择</button>
|
|
40
|
+
</td>
|
|
41
|
+
</tr>
|
|
42
|
+
<tr>
|
|
43
|
+
<td>
|
|
44
|
+
<div class="qu-input" :style="{'margin-left': readOnly?'0px':'-10px'}">
|
|
45
|
+
<span v-if="readOnly">{{ item.easyScore }}</span>
|
|
46
|
+
<input v-else type="number" placeholder="分值" :value="item.easyScore" @input="totalQuestions($event,4,index)" @keypress="isNumberKey($event,2)" />
|
|
47
|
+
</div>
|
|
48
|
+
</td>
|
|
49
|
+
<td>
|
|
50
|
+
<div class="qu-input" :style="{'margin-left': readOnly?'0px':'-10px'}">
|
|
51
|
+
<span v-if="readOnly">{{ item.hardScore }}</span>
|
|
52
|
+
<input v-else type="number" placeholder="分值" :value="item.hardScore" @input="totalQuestions($event,5,index)" @keypress="isNumberKey($event,2)" />
|
|
53
|
+
</div>
|
|
54
|
+
</td>
|
|
55
|
+
<td>
|
|
56
|
+
<div class="qu-input" :style="{'margin-left': readOnly?'0px':'-10px'}">
|
|
57
|
+
<span v-if="readOnly">{{ item.midScore }}</span>
|
|
58
|
+
<input v-else type="number" placeholder="分值" :value="item.midScore" @input="totalQuestions($event,6,index)" @keypress="isNumberKey($event,2)" />
|
|
59
|
+
</div>
|
|
60
|
+
</td>
|
|
61
|
+
</tr>
|
|
62
|
+
</tbody>
|
|
63
|
+
<tr>
|
|
64
|
+
<td colspan="2">合计分值</td>
|
|
65
|
+
<td>{{ easyNum === 0? '-': easyNum }}</td>
|
|
66
|
+
<td>{{ hardNum === 0? '-': hardNum }}</td>
|
|
67
|
+
<td>{{ midNum === 0? '-': midNum }}</td>
|
|
68
|
+
<td>试卷总分</td>
|
|
69
|
+
<td :colspan="readOnly? 1: 2">{{ totalNum === 0? '-': totalNum }}</td>
|
|
70
|
+
</tr>
|
|
71
|
+
</table>
|
|
72
|
+
</div>
|
|
73
|
+
</template>
|
|
74
|
+
|
|
75
|
+
<script>
|
|
76
|
+
import TableHead from "@/components/data_table/src/table_head.vue";
|
|
77
|
+
|
|
78
|
+
export default {
|
|
79
|
+
name: "zydx-question",
|
|
80
|
+
components: {TableHead},
|
|
81
|
+
data() {
|
|
82
|
+
return {
|
|
83
|
+
question: [],
|
|
84
|
+
easyNum: 0,
|
|
85
|
+
hardNum: 0,
|
|
86
|
+
midNum: 0,
|
|
87
|
+
totalNum: 0
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
props: {
|
|
91
|
+
data: {
|
|
92
|
+
type: Array,
|
|
93
|
+
default: []
|
|
94
|
+
},
|
|
95
|
+
readOnly: {
|
|
96
|
+
type: Boolean,
|
|
97
|
+
default: false
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
watch: {
|
|
101
|
+
data: {
|
|
102
|
+
handler(val) {
|
|
103
|
+
this.getQuestionReadOnly(val)
|
|
104
|
+
},
|
|
105
|
+
immediate: true
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
emits: ['cancel'],
|
|
109
|
+
methods: {
|
|
110
|
+
getQuestionReadOnly(v) {
|
|
111
|
+
let arr = []
|
|
112
|
+
v.forEach(item => {
|
|
113
|
+
arr.push({
|
|
114
|
+
quesType: item.quesType,
|
|
115
|
+
quesName: item.quesName,
|
|
116
|
+
easyScore: item.easyScore? item.easyScore: '',
|
|
117
|
+
hardScore: item.hardScore? item.hardScore: '',
|
|
118
|
+
midScore: item.midScore? item.midScore: '',
|
|
119
|
+
easy: item.easy? item.easy: '',
|
|
120
|
+
hard: item.hard? item.hard: '',
|
|
121
|
+
mid: item.mid? item.mid: '',
|
|
122
|
+
allScore: item.allScore? item.allScore: '-',
|
|
123
|
+
count: item.count? item.count: '-',
|
|
124
|
+
})
|
|
125
|
+
})
|
|
126
|
+
this.question = arr
|
|
127
|
+
this.totalScore()
|
|
128
|
+
},
|
|
129
|
+
getContent() {
|
|
130
|
+
return {
|
|
131
|
+
data: this.question,
|
|
132
|
+
total: this.totalNum,
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
// 添加数据
|
|
136
|
+
addData(v) {
|
|
137
|
+
this.question.push({
|
|
138
|
+
quesType: v.quesType,
|
|
139
|
+
quesName: v.quesName,
|
|
140
|
+
easyScore:'',
|
|
141
|
+
hardScore:'',
|
|
142
|
+
midScore: '',
|
|
143
|
+
easy: '',
|
|
144
|
+
hard: '',
|
|
145
|
+
mid: '',
|
|
146
|
+
allScore: '-',
|
|
147
|
+
count: '-',
|
|
148
|
+
})
|
|
149
|
+
},
|
|
150
|
+
cancel(i) {
|
|
151
|
+
this.$emit('cancel',this.question[i])
|
|
152
|
+
this.question.splice(i,1)
|
|
153
|
+
this.totalScore()
|
|
154
|
+
},
|
|
155
|
+
totalQuestions(v,i,n) {
|
|
156
|
+
const value = Number(v.target.value);
|
|
157
|
+
if(i === 1) this.question[n].easy = value === 0? '' : value
|
|
158
|
+
if(i === 2) this.question[n].hard = value === 0? '' : value
|
|
159
|
+
if(i === 3) this.question[n].mid = value === 0? '' : value
|
|
160
|
+
if(i === 4) this.question[n].easyScore = value === 0? '' : value
|
|
161
|
+
if(i === 5) this.question[n].hardScore = value === 0? '' : value
|
|
162
|
+
if(i === 6) this.question[n].midScore = value === 0? '' : value
|
|
163
|
+
const total = (this.question[n].easy === ''? 0: this.question[n].easy) + (this.question[n].hard === ''? 0: this.question[n].hard) + (this.question[n].mid === ''? 0: this.question[n].mid)
|
|
164
|
+
this.question[n].count = (total === 0)? '-' : total
|
|
165
|
+
const total2 = (this.question[n].easyScore === ''? 0: this.question[n].easyScore) + (this.question[n].hardScore === ''? 0: this.question[n].hardScore) + (this.question[n].midScore === ''? 0: this.question[n].midScore)
|
|
166
|
+
this.question[n].allScore = (total2 === 0)? '-' : total2
|
|
167
|
+
this.totalScore()
|
|
168
|
+
},
|
|
169
|
+
totalScore() {
|
|
170
|
+
this.easyNum = 0
|
|
171
|
+
this.hardNum = 0
|
|
172
|
+
this.midNum = 0
|
|
173
|
+
this.question.forEach(x => {
|
|
174
|
+
this.easyNum += x.easyScore === '' ? 0: Number(x.easyScore)
|
|
175
|
+
this.hardNum += x.hardScore === '' ? 0: Number(x.hardScore)
|
|
176
|
+
this.midNum += x.midScore === '' ? 0: Number(x.midScore)
|
|
177
|
+
})
|
|
178
|
+
this.totalNum = this.easyNum + this.hardNum + this.midNum
|
|
179
|
+
},
|
|
180
|
+
// 数字转大写
|
|
181
|
+
toChineseNum(num) {
|
|
182
|
+
const chnNumChar = ["零","一","二","三","四","五","六","七","八","九"];
|
|
183
|
+
if(num >= 10) {
|
|
184
|
+
if(num === 10) {
|
|
185
|
+
return "十"
|
|
186
|
+
}else {
|
|
187
|
+
return "十" + chnNumChar[num % 10]
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return chnNumChar[num];
|
|
191
|
+
},
|
|
192
|
+
isNumberKey(event,num) {
|
|
193
|
+
const charCode = (event.which) ? event.which : event.keyCode;
|
|
194
|
+
const val = event.target.value;
|
|
195
|
+
if(val.length > 2) event.preventDefault();
|
|
196
|
+
if(num === 1) {
|
|
197
|
+
if (charCode > 31 && (charCode < 48 || charCode > 57)) event.preventDefault();
|
|
198
|
+
}else {
|
|
199
|
+
if (charCode === 46) {
|
|
200
|
+
if (val.indexOf('.') !== -1)
|
|
201
|
+
event.preventDefault();
|
|
202
|
+
else
|
|
203
|
+
return true;
|
|
204
|
+
} else if (charCode > 31 && (charCode < 48 || charCode > 57))
|
|
205
|
+
event.preventDefault();
|
|
206
|
+
}
|
|
207
|
+
if (this.valueState(event.target.value) && String.fromCharCode(charCode) === '0') event.preventDefault();
|
|
208
|
+
},
|
|
209
|
+
valueState(v) {
|
|
210
|
+
return v === '' || v === undefined || v === null;
|
|
211
|
+
},
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
</script>
|
|
215
|
+
|
|
216
|
+
<style scoped>
|
|
217
|
+
.question {
|
|
218
|
+
width: 100%;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.question table {
|
|
222
|
+
width: 100%;
|
|
223
|
+
border-top: 1px solid #ccc;
|
|
224
|
+
border-left: 1px solid #ccc;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.question table th, .question table td {
|
|
228
|
+
font-size: 14px;
|
|
229
|
+
text-align: center;
|
|
230
|
+
padding: 5px 0;
|
|
231
|
+
border-bottom: 1px solid #ccc;
|
|
232
|
+
border-right: 1px solid #ccc;
|
|
233
|
+
font-weight: 400;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.qu-input {
|
|
237
|
+
width: 60px;
|
|
238
|
+
display: inline-block;
|
|
239
|
+
overflow: hidden;
|
|
240
|
+
}
|
|
241
|
+
.qu-input input{
|
|
242
|
+
border: 0;
|
|
243
|
+
outline: none;
|
|
244
|
+
text-align: center;
|
|
245
|
+
width: 80px;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.but {
|
|
249
|
+
margin-left: 1px;
|
|
250
|
+
font-size: 12px;
|
|
251
|
+
background-color: transparent;
|
|
252
|
+
border: 1px solid #000;
|
|
253
|
+
border-radius: 3px;
|
|
254
|
+
padding: 2px 5px;
|
|
255
|
+
cursor: pointer;
|
|
256
|
+
min-width: 60px;
|
|
257
|
+
height: 21px;
|
|
258
|
+
}
|
|
259
|
+
</style>
|
|
@@ -88,6 +88,8 @@
|
|
|
88
88
|
}
|
|
89
89
|
.subject-title{
|
|
90
90
|
flex: 1;
|
|
91
|
+
text-indent: 2em;
|
|
92
|
+
position: relative;
|
|
91
93
|
}
|
|
92
94
|
.subject-title label{
|
|
93
95
|
display: flex;
|
|
@@ -138,5 +140,13 @@
|
|
|
138
140
|
input[name='check'] {
|
|
139
141
|
width: 15px;
|
|
140
142
|
height: 15px;
|
|
141
|
-
|
|
143
|
+
position: absolute;
|
|
144
|
+
top: 5px;
|
|
145
|
+
left: 0;
|
|
146
|
+
}
|
|
147
|
+
.subject-but{
|
|
148
|
+
position: absolute;
|
|
149
|
+
bottom: 2px;
|
|
150
|
+
right: 0;
|
|
151
|
+
z-index: 1;
|
|
142
152
|
}
|
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div :class="{paper: borderShow}">
|
|
3
3
|
<div class="parer-cont" ref="parer">
|
|
4
|
-
<div class="paper-choice" :class="{'array-ch': !styleText(item.testKey)}" v-for="(item,index) in
|
|
4
|
+
<div class="paper-choice" :class="{'array-ch': !styleText(item.testKey)}" v-for="(item,index) in value">
|
|
5
5
|
<div class="subject">
|
|
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
9
|
<span>{{ item.order }}.<em v-html="item.title"></em></span>
|
|
10
10
|
</label>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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>
|
|
15
22
|
</div>
|
|
16
23
|
</div>
|
|
17
24
|
<div class="choice" v-if="item.testKey">
|
|
@@ -33,8 +40,9 @@ export default {
|
|
|
33
40
|
name: "zydx-seek",
|
|
34
41
|
data() {
|
|
35
42
|
return {
|
|
36
|
-
value:
|
|
37
|
-
multipleShow: this.multiple
|
|
43
|
+
value: [],
|
|
44
|
+
multipleShow: this.multiple,
|
|
45
|
+
choiceState: true
|
|
38
46
|
}
|
|
39
47
|
},
|
|
40
48
|
props: {
|
|
@@ -57,14 +65,26 @@ export default {
|
|
|
57
65
|
borderShow: {
|
|
58
66
|
type: Boolean,
|
|
59
67
|
default: true
|
|
68
|
+
},
|
|
69
|
+
replace: {
|
|
70
|
+
type: Boolean,
|
|
71
|
+
default: false
|
|
72
|
+
},
|
|
73
|
+
choice: {
|
|
74
|
+
type: Boolean,
|
|
75
|
+
default: false
|
|
60
76
|
}
|
|
61
77
|
},
|
|
62
78
|
watch: {
|
|
63
79
|
data: {
|
|
64
80
|
handler: function (val, oldVal) {
|
|
65
81
|
this.value = val
|
|
82
|
+
this.value.map((item,index) => {
|
|
83
|
+
item.choice = true
|
|
84
|
+
return item
|
|
85
|
+
})
|
|
66
86
|
},
|
|
67
|
-
|
|
87
|
+
immediate: true,
|
|
68
88
|
},
|
|
69
89
|
multiple: {
|
|
70
90
|
handler: function (val, oldVal) {
|
|
@@ -73,7 +93,7 @@ export default {
|
|
|
73
93
|
deep: true
|
|
74
94
|
}
|
|
75
95
|
},
|
|
76
|
-
emits: ['change','modify','del','changeAll'],
|
|
96
|
+
emits: ['change','modify','del','changeAll','replaceData','choiceData'],
|
|
77
97
|
methods: {
|
|
78
98
|
checkboxChange(e,index) {
|
|
79
99
|
this.value[index].checked = e.target.checked
|
|
@@ -102,6 +122,24 @@ export default {
|
|
|
102
122
|
}
|
|
103
123
|
return false
|
|
104
124
|
},
|
|
125
|
+
replaceTap(v,i) {
|
|
126
|
+
this.$emit('replaceData', {
|
|
127
|
+
data: v,
|
|
128
|
+
index: i
|
|
129
|
+
})
|
|
130
|
+
},
|
|
131
|
+
choiceTap(v,i) {
|
|
132
|
+
this.value.map((item,index) => {
|
|
133
|
+
item.choice = !this.choiceState;
|
|
134
|
+
return item
|
|
135
|
+
})
|
|
136
|
+
this.value[i].choice = true
|
|
137
|
+
this.choiceState = !this.choiceState
|
|
138
|
+
this.$emit('choiceData', {
|
|
139
|
+
data: v,
|
|
140
|
+
index: i
|
|
141
|
+
})
|
|
142
|
+
}
|
|
105
143
|
}
|
|
106
144
|
}
|
|
107
145
|
</script>
|
package/src/index.js
CHANGED
|
@@ -31,6 +31,7 @@ import sketchpad from './components/sketchpad/index';
|
|
|
31
31
|
import pictureViewer from './components/pictureViewer/index';
|
|
32
32
|
import lessonTemplate from './components/lesson_template/index';
|
|
33
33
|
import paper from './components/word2/index';
|
|
34
|
+
import question from './components/question/index';
|
|
34
35
|
|
|
35
36
|
const components = [
|
|
36
37
|
Calendar,
|
|
@@ -63,7 +64,8 @@ const components = [
|
|
|
63
64
|
sketchpad,
|
|
64
65
|
pictureViewer,
|
|
65
66
|
lessonTemplate,
|
|
66
|
-
paper
|
|
67
|
+
paper,
|
|
68
|
+
question
|
|
67
69
|
];
|
|
68
70
|
|
|
69
71
|
function install(app) {
|
|
@@ -75,7 +77,7 @@ function install(app) {
|
|
|
75
77
|
}
|
|
76
78
|
|
|
77
79
|
export default {
|
|
78
|
-
version: '1.
|
|
80
|
+
version: '1.32.177',
|
|
79
81
|
install,
|
|
80
82
|
Calendar,
|
|
81
83
|
Message,
|
|
@@ -109,6 +111,7 @@ export default {
|
|
|
109
111
|
sketchpad,
|
|
110
112
|
pictureViewer,
|
|
111
113
|
lessonTemplate,
|
|
112
|
-
paper
|
|
114
|
+
paper,
|
|
115
|
+
question
|
|
113
116
|
};
|
|
114
117
|
|