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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zydx-plus",
3
- "version": "1.31.176",
3
+ "version": "1.32.177",
4
4
  "description": "Vue.js",
5
5
  "main": "src/index.js",
6
6
  "files": [
@@ -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,6 @@
1
+ import main from './src/question';
2
+
3
+ main.install = function(Vue) {
4
+ Vue.component(main.name, main);
5
+ };
6
+ export default main;
@@ -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
- margin: 5px 5px 0 0;
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 data">
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
- </div>
12
- <div class="subject-but" v-if="butShow">
13
- <button class="but" @click="modify(item)">修改</button>
14
- <button class="but" @click="del(item)">删除</button>
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: this.data,
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
- deep: true
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.31.176',
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