yks-element 1.0.4 → 1.0.41

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.
Files changed (187) hide show
  1. package/lib/theme-chalk/common.css +1 -1
  2. package/lib/theme-chalk/index.css +1 -1
  3. package/lib/yks.js +1 -1
  4. package/package.json +1 -3
  5. package/lib/theme-chalk/topic.css +0 -1
  6. package/packages/Dialog/index.js +0 -8
  7. package/packages/Dialog/src/index.vue +0 -89
  8. package/packages/Multimedia/index.js +0 -8
  9. package/packages/Multimedia/src/index.vue +0 -136
  10. package/packages/Pagination/index.js +0 -8
  11. package/packages/Pagination/src/index.vue +0 -111
  12. package/packages/Scrollbar/index.js +0 -8
  13. package/packages/Scrollbar/src/index.vue +0 -20
  14. package/packages/Select/index.js +0 -8
  15. package/packages/Select/src/index.vue +0 -350
  16. package/packages/Select/src/option.vue +0 -29
  17. package/packages/Table/index.js +0 -8
  18. package/packages/Table/src/index.vue +0 -141
  19. package/packages/Tinymce/index.js +0 -8
  20. package/packages/Tinymce/src/config.js +0 -25
  21. package/packages/Tinymce/src/index.vue +0 -450
  22. package/packages/Topic/index.js +0 -23
  23. package/packages/Topic/src/attachment.vue +0 -114
  24. package/packages/Topic/src/audioFrequency.vue +0 -114
  25. package/packages/Topic/src/clozeFillInBlanks.vue +0 -237
  26. package/packages/Topic/src/compound.vue +0 -191
  27. package/packages/Topic/src/config.js +0 -132
  28. package/packages/Topic/src/fillInBlanks.vue +0 -242
  29. package/packages/Topic/src/indefiniteChoice.vue +0 -0
  30. package/packages/Topic/src/judgment.vue +0 -110
  31. package/packages/Topic/src/matching.vue +0 -0
  32. package/packages/Topic/src/multiple.vue +0 -163
  33. package/packages/Topic/src/pictureAnswer.vue +0 -113
  34. package/packages/Topic/src/shortAnswer.vue +0 -124
  35. package/packages/Topic/src/single.vue +0 -163
  36. package/packages/UploadFile/index.js +0 -8
  37. package/packages/UploadFile/src/index.vue +0 -358
  38. package/packages/Video/index.js +0 -8
  39. package/packages/Video/src/index.vue +0 -204
  40. package/packages/assets/mixins/topic.js +0 -137
  41. package/packages/assets/utils/index.js +0 -83
  42. package/packages/assets/utils/topic.js +0 -132
  43. package/packages/icon/default/icons.js +0 -182
  44. package/packages/icon/default/icons.min.js +0 -1
  45. package/packages/icon/default/index.js +0 -7
  46. package/packages/icon/ks-pdf.png +0 -0
  47. package/packages/icon/ks-ppt.png +0 -0
  48. package/packages/icon/ks-word.png +0 -0
  49. package/packages/icon/ks-xslx.png +0 -0
  50. package/packages/icon/music-bg.png +0 -0
  51. package/packages/icon/video-bg.png +0 -0
  52. package/packages/index.js +0 -221
  53. package/packages/option/index.js +0 -6
  54. package/packages/styles/_mixin.scss +0 -93
  55. package/packages/styles/_variables.scss +0 -40
  56. package/packages/styles/alert.scss +0 -147
  57. package/packages/styles/aside.scss +0 -7
  58. package/packages/styles/autocomplete.scss +0 -80
  59. package/packages/styles/avatar.scss +0 -51
  60. package/packages/styles/backtop.scss +0 -22
  61. package/packages/styles/badge.scss +0 -57
  62. package/packages/styles/base.scss +0 -2
  63. package/packages/styles/breadcrumb-item.scss +0 -0
  64. package/packages/styles/breadcrumb.scss +0 -55
  65. package/packages/styles/button-group.scss +0 -0
  66. package/packages/styles/button.scss +0 -262
  67. package/packages/styles/buttons.scss +0 -59
  68. package/packages/styles/calendar.scss +0 -79
  69. package/packages/styles/card.scss +0 -32
  70. package/packages/styles/carousel-item.scss +0 -50
  71. package/packages/styles/carousel.scss +0 -161
  72. package/packages/styles/cascader-panel.scss +0 -120
  73. package/packages/styles/cascader.scss +0 -182
  74. package/packages/styles/checkbox-button.scss +0 -0
  75. package/packages/styles/checkbox-group.scss +0 -0
  76. package/packages/styles/checkbox.scss +0 -359
  77. package/packages/styles/col.scss +0 -156
  78. package/packages/styles/collapse-item.scss +0 -0
  79. package/packages/styles/collapse.scss +0 -63
  80. package/packages/styles/color-picker.scss +0 -384
  81. package/packages/styles/common/popup.scss +0 -42
  82. package/packages/styles/common/transition.scss +0 -99
  83. package/packages/styles/common/var.scss +0 -1028
  84. package/packages/styles/common.scss +0 -204
  85. package/packages/styles/container.scss +0 -14
  86. package/packages/styles/date-picker/date-picker.scss +0 -97
  87. package/packages/styles/date-picker/date-range-picker.scss +0 -101
  88. package/packages/styles/date-picker/date-table.scss +0 -151
  89. package/packages/styles/date-picker/month-table.scss +0 -82
  90. package/packages/styles/date-picker/picker-panel.scss +0 -117
  91. package/packages/styles/date-picker/picker.scss +0 -197
  92. package/packages/styles/date-picker/time-picker.scss +0 -85
  93. package/packages/styles/date-picker/time-range-picker.scss +0 -31
  94. package/packages/styles/date-picker/time-spinner.scss +0 -110
  95. package/packages/styles/date-picker/year-table.scss +0 -51
  96. package/packages/styles/date-picker.scss +0 -12
  97. package/packages/styles/descriptions-item.scss +0 -42
  98. package/packages/styles/descriptions.scss +0 -111
  99. package/packages/styles/dialog.scss +0 -123
  100. package/packages/styles/display.scss +0 -12
  101. package/packages/styles/divider.scss +0 -47
  102. package/packages/styles/drawer.scss +0 -219
  103. package/packages/styles/dropdown-item.scss +0 -0
  104. package/packages/styles/dropdown-menu.scss +0 -0
  105. package/packages/styles/dropdown.scss +0 -182
  106. package/packages/styles/element-ui.scss +0 -135
  107. package/packages/styles/element-variables.scss +0 -794
  108. package/packages/styles/element.scss +0 -86
  109. package/packages/styles/empty.scss +0 -45
  110. package/packages/styles/fonts/element-icons.ttf +0 -0
  111. package/packages/styles/fonts/element-icons.woff +0 -0
  112. package/packages/styles/fonts/iconfont.ttf +0 -0
  113. package/packages/styles/fonts/iconfont.woff +0 -0
  114. package/packages/styles/footer.scss +0 -8
  115. package/packages/styles/form-item.scss +0 -0
  116. package/packages/styles/form.scss +0 -167
  117. package/packages/styles/header.scss +0 -8
  118. package/packages/styles/icon.scss +0 -1167
  119. package/packages/styles/icons.scss +0 -69
  120. package/packages/styles/image.scss +0 -179
  121. package/packages/styles/index.scss +0 -18
  122. package/packages/styles/infinite-scroll.scss +0 -0
  123. package/packages/styles/infiniteScroll.scss +0 -0
  124. package/packages/styles/input-number.scss +0 -180
  125. package/packages/styles/input.scss +0 -360
  126. package/packages/styles/link.scss +0 -81
  127. package/packages/styles/loading.scss +0 -96
  128. package/packages/styles/main.scss +0 -12
  129. package/packages/styles/menu-item-group.scss +0 -0
  130. package/packages/styles/menu-item.scss +0 -0
  131. package/packages/styles/menu.scss +0 -289
  132. package/packages/styles/message-box.scss +0 -226
  133. package/packages/styles/message.scss +0 -120
  134. package/packages/styles/mixins/_button.scss +0 -81
  135. package/packages/styles/mixins/config.scss +0 -4
  136. package/packages/styles/mixins/function.scss +0 -44
  137. package/packages/styles/mixins/mixins.scss +0 -190
  138. package/packages/styles/mixins/utils.scss +0 -39
  139. package/packages/styles/multimedia.scss +0 -58
  140. package/packages/styles/notification.scss +0 -99
  141. package/packages/styles/option-group.scss +0 -42
  142. package/packages/styles/option.scss +0 -36
  143. package/packages/styles/page-header.scss +0 -41
  144. package/packages/styles/pagination.scss +0 -295
  145. package/packages/styles/paginations.scss +0 -33
  146. package/packages/styles/popconfirm.scss +0 -16
  147. package/packages/styles/popover.scss +0 -40
  148. package/packages/styles/popper.scss +0 -101
  149. package/packages/styles/progress.scss +0 -141
  150. package/packages/styles/radio-button.scss +0 -113
  151. package/packages/styles/radio-group.scss +0 -9
  152. package/packages/styles/radio.scss +0 -199
  153. package/packages/styles/rate.scss +0 -49
  154. package/packages/styles/reset.scss +0 -79
  155. package/packages/styles/result.scss +0 -61
  156. package/packages/styles/row.scss +0 -43
  157. package/packages/styles/scrollbar.scss +0 -72
  158. package/packages/styles/scrollbars.scss +0 -5
  159. package/packages/styles/select-dropdown.scss +0 -62
  160. package/packages/styles/select.scss +0 -152
  161. package/packages/styles/selects.scss +0 -98
  162. package/packages/styles/skeleton-item.scss +0 -84
  163. package/packages/styles/skeleton.scss +0 -40
  164. package/packages/styles/slider.scss +0 -250
  165. package/packages/styles/spinner.scss +0 -44
  166. package/packages/styles/step.scss +0 -317
  167. package/packages/styles/steps.scss +0 -20
  168. package/packages/styles/submenu.scss +0 -0
  169. package/packages/styles/switch.scss +0 -116
  170. package/packages/styles/tab-pane.scss +0 -0
  171. package/packages/styles/table-column.scss +0 -97
  172. package/packages/styles/table.scss +0 -564
  173. package/packages/styles/tables.scss +0 -45
  174. package/packages/styles/tabs.scss +0 -602
  175. package/packages/styles/tag.scss +0 -163
  176. package/packages/styles/time-picker.scss +0 -8
  177. package/packages/styles/time-select.scss +0 -37
  178. package/packages/styles/timeline-item.scss +0 -86
  179. package/packages/styles/timeline.scss +0 -14
  180. package/packages/styles/tinymce.scss +0 -43
  181. package/packages/styles/tooltip.scss +0 -141
  182. package/packages/styles/topic.scss +0 -57
  183. package/packages/styles/transfer.scss +0 -227
  184. package/packages/styles/tree.scss +0 -123
  185. package/packages/styles/upload.scss +0 -603
  186. package/packages/styles/uploadfile.scss +0 -34
  187. package/packages/styles/video.scss +0 -98
@@ -1,242 +0,0 @@
1
- <template>
2
- <div class="yks-topics">
3
- <div class="topic-stem__label required__label">题干</div>
4
- <yks-tinymce
5
- ref="stemTinymceEdit"
6
- key="itemContent"
7
- v-model="fromData.itemContent"
8
- :toolbar="toolbar"
9
- :plugins="plugins"
10
- :charLimit="topicDataExtent.itemContentLength || 20000"
11
- :fileParams="getFileTypes('stem', fromData.stemAttrs)"
12
- :uploadFileToHwCloud="uploadFileToHwCloud"
13
- :uploadFileFunction="uploadFileFunction"
14
- menubar=""
15
- height="200px"
16
- @change="($event) => getTinymceEdit($event, 'stem')"
17
- @delte="($event) => handleDelteAttrs($event, 'stem', fromData.stemAttrs)"
18
- />
19
- <div class="yks-flex yks-mt10">
20
- <el-button type="primary" class="yks-mr10" @click="handleFillInBlanks"
21
- >插入填空符</el-button
22
- >
23
- <span class="yks-fs-12 info">请在题干中你需要的位置插入填空符,并在下方编辑对应答案</span>
24
- </div>
25
-
26
- <div class="yks-flex cloze-single">
27
- <span class="single-single__label required__label">答案</span>
28
- <span class="yks-fs-12 yks-info">考生需要在每个空内输入正确的答案</span>
29
- </div>
30
- <div
31
- v-for="(item, index) in fromData.itemList"
32
- :key="`itemList${index}`"
33
- class="yks-flex yks-mb10 v-start"
34
- >
35
- <span class="yks-w_60 yks-mr10">填空{{ index + 1 }}</span>
36
- <yks-tinymce
37
- key="content"
38
- v-model="item.content"
39
- :toolbar="toolbarSpare"
40
- :plugins="plugins"
41
- :charLimit="topicDataExtent.answerLength || 5000"
42
- :fileParams="getFileTypes('option', item.optionAttrs)"
43
- :uploadFileToHwCloud="uploadFileToHwCloud"
44
- :uploadFileFunction="uploadFileFunction"
45
- inline
46
- height="60px"
47
- menubar=""
48
- class="flex-1 radio-tinymce"
49
- @change="($event) => changeItem($event, item)"
50
- @delte="($event) => handleDelteAttrs($event, 'option', item.optionAttrs, item)"
51
- />
52
- <el-input-number
53
- v-model="item.score"
54
- controls-position="right"
55
- placeholder="分值"
56
- class="yks-mr10"
57
- size="large"
58
- :min="0"
59
- :step="0.5"
60
- :max="100"
61
- ></el-input-number>
62
- <el-button type="text" class="yks-danger" @click="handleDelte(index)">删除</el-button>
63
- </div>
64
-
65
- <div class="fill__other">
66
- <div class="text__warning">
67
- 1、如果勾选考生端开启数学公式编辑器,在PC端考生答题页面,本题答题区域考生可以使用数据公式编辑器。
68
- <br />
69
- 2、如果勾选按答案自动判分,需要考生填写内容须跟答案完全相同,才能得分,录入答案时,请不要加多余的空格标点符号等干扰字符,考生考后系统自动出分。
70
- <br />
71
- 3、如果没有勾选按答案自动判分,考生答卷需等待管理员后台手工判分。
72
- </div>
73
- <div class="yks-mt10">
74
- <el-checkbox v-model="fromData.mathematical"
75
- >开启数学公式编辑器(只适用于PC端答题)</el-checkbox
76
- >
77
- <div class="yks-mt10">
78
- <el-checkbox v-model="fromData.automaticScoring" true-label="1" false-label="0"
79
- >按答案自动判分</el-checkbox
80
- >
81
- </div>
82
- <div v-if="fromData.automaticScoring === '1'" class="yks-mt10">
83
- <el-checkbox v-model="fromData.outOfOrder" true-label="1" false-label="0"
84
- >允许考生答案与参考答案顺序不一致</el-checkbox
85
- >
86
- <el-checkbox v-model="fromData.neglect" true-label="1" false-label="0"
87
- >忽略大小写</el-checkbox
88
- >
89
- </div>
90
- </div>
91
- </div>
92
-
93
- <div class="topic-stem__label">答案解析</div>
94
- <yks-tinymce
95
- key="description"
96
- v-model="fromData.description"
97
- :toolbar="toolbar"
98
- :plugins="plugins"
99
- :charLimit="topicDataExtent.descriptionLength || 20000"
100
- :fileParams="getFileTypes('analysis', fromData.descriptionAttrs)"
101
- :uploadFileToHwCloud="uploadFileToHwCloud"
102
- :uploadFileFunction="uploadFileFunction"
103
- menubar=""
104
- height="200px"
105
- @change="($event) => getTinymceEdit($event, 'analysis')"
106
- @delte="($event) => handleDelteAttrs($event, 'analysis', fromData.descriptionAttrs)"
107
- />
108
- </div>
109
- </template>
110
- <script>
111
- import TopicMixins from 'yks/assets/mixins/topic'
112
- import { stemItemType, optionItemType, analysisItemType } from './config'
113
-
114
- export default {
115
- name: 'YksFillinblanks',
116
- mixins: [TopicMixins],
117
- methods: {
118
- /**
119
- * data 富文本数据
120
- * field 对象名
121
- * type 类型
122
- */
123
- getTinymceEdit(data, type) {
124
- switch (type) {
125
- case 'stem':
126
- data.itemAttr.type = stemItemType[data.itemAttr.type]
127
- if (data.itemAttr.type && data.itemAttr.content) {
128
- this.fromData.stemAttrs.push(data.itemAttr)
129
- }
130
- // eslint-disable-next-line no-case-declarations
131
- const list = data.value.match(/<input ([^>|]+)>/g, '') || []
132
- // eslint-disable-next-line no-case-declarations
133
- const editor = this.$refs.stemTinymceEdit
134
- if ((this.fromData.itemList || []).length !== list.length && !this.processing) {
135
- const { itemContent } = this.fromData
136
- this.$message.error('请从下方填空符删除!')
137
- this.fromData.itemContent = itemContent.replace(
138
- /<input ([^>|]+)\/>/g,
139
- (all, value) => {
140
- const attributes = value.replace('disabled="disabled"', '')
141
- return `<input ${attributes} disabled="disabled" />`
142
- }
143
- )
144
- this.$nextTick(() => {
145
- editor.keepLastIndex()
146
- })
147
- } else {
148
- this.fromData.itemContent = data.value
149
- }
150
- break
151
- case 'analysis':
152
- data.itemAttr.type = analysisItemType[data.itemAttr.type]
153
- this.fromData.description = data.value
154
- if (data.itemAttr.type && data.itemAttr.content) {
155
- this.fromData.descriptionAttrs.push(data.itemAttr)
156
- }
157
- break
158
- default:
159
- break
160
- }
161
- this.$emit('change', this.fromData)
162
- },
163
-
164
- changeItem(data, row) {
165
- data.itemAttr.type = optionItemType[data.itemAttr.type]
166
- if (data.itemAttr.type && data.itemAttr.content) {
167
- row.optionAttrs.push(data.itemAttr)
168
- this.$set(row, 'optionAttrs', row.optionAttrs)
169
- }
170
- this.$set(row, 'content', data.value)
171
- this.$emit('change', this.fromData)
172
- },
173
-
174
- handleDelte(index) {
175
- const list = this.fromData.itemContent.match(/<input ([^>|]+)>/g, '') || []
176
- const classId = this.fromData.itemList[index].classId
177
- if (classId) {
178
- const subIndex = list.findIndex((v) => v.search(classId) !== -1)
179
- this.fromData.itemList.splice(index, 1)
180
- const editor = this.$refs.stemTinymceEdit
181
- editor.deleFillItem(subIndex)
182
- } else {
183
- this.fromData.itemList.splice(index, 1)
184
- const editor = this.$refs.stemTinymceEdit
185
- editor.deleFillItem(index)
186
- }
187
-
188
- this.$emit('change', this.fromData)
189
- },
190
-
191
- handleFillInBlanks() {
192
- if (this.fromData.itemList.length >= 40) {
193
- return
194
- }
195
- const value = Date.now()
196
- this.processing = true
197
- const editor = this.$refs.stemTinymceEdit
198
- editor.handleFillInBlanks(this.fromData.itemList.length, value)
199
- const { itemContent } = this.fromData
200
- let index = 0
201
- this.fromData.itemContent = itemContent.replace(/<input ([^>|]+)\/>/g, (all, value) => {
202
- index += 1
203
- return `<input value="${index}" ${value} />`
204
- })
205
- const list = this.fromData.itemContent.match(/<input ([^>|]+)>/g, '') || []
206
- const subIndex = list.findIndex((v) => v.search(value) !== -1)
207
- this.fromData.itemList.splice(subIndex, 0, {
208
- optionName: '',
209
- content: '',
210
- score: '',
211
- optionAttrs: [],
212
- classId: value
213
- })
214
- this.$nextTick(() => {
215
- editor.keepLastIndex()
216
- this.$emit('change', this.fromData)
217
- })
218
- this.processing = false
219
- },
220
-
221
- handleDelteAttrs(data, type, list, row = {}) {
222
- const listAttrs = list
223
- listAttrs.splice(data.index, 1)
224
- switch (type) {
225
- case 'stem':
226
- this.fromData.stemAttrs = listAttrs
227
- break
228
- case 'option':
229
- this.$set(row, 'optionAttrs', listAttrs)
230
- break
231
- case 'analysis':
232
- this.fromData.descriptionAttrs = listAttrs
233
- break
234
- default:
235
- break
236
- }
237
- this.$emit('change', this.fromData)
238
- }
239
- }
240
- }
241
- </script>
242
-
File without changes
@@ -1,110 +0,0 @@
1
- <template>
2
- <div class="yks-topics">
3
- <div class="topic-stem__label required__label">题干</div>
4
- <yks-tinymce
5
- key="itemContent"
6
- v-model="fromData.itemContent"
7
- :toolbar="toolbar"
8
- :plugins="plugins"
9
- :charLimit="topicDataExtent.itemContentLength || 20000"
10
- :fileParams="getFileTypes('stem', fromData.stemAttrs)"
11
- :uploadFileToHwCloud="uploadFileToHwCloud"
12
- :uploadFileFunction="uploadFileFunction"
13
- menubar=""
14
- height="200px"
15
- @change="($event) => getTinymceEdit($event, 'stem')"
16
- @delte="($event) => handleDelteAttrs($event, 'stem', fromData.stemAttrs)"
17
- />
18
-
19
- <div class="yks-flex cloze-single">
20
- <span class="single-single__label required__label">选项</span>
21
- <span class="yks-fs-12 yks-info">请选择正确的判断项</span>
22
- </div>
23
- <el-radio-group v-model="fromData.answer">
24
- <el-radio label="1">对</el-radio>
25
- <el-radio label="0">错</el-radio>
26
- </el-radio-group>
27
- <div class="topic-stem__label">答案解析</div>
28
- <yks-tinymce
29
- key="description"
30
- v-model="fromData.description"
31
- :toolbar="toolbar"
32
- :plugins="plugins"
33
- :charLimit="topicDataExtent.descriptionLength || 20000"
34
- :fileParams="getFileTypes('analysis', fromData.descriptionAttrs)"
35
- :uploadFileToHwCloud="uploadFileToHwCloud"
36
- :uploadFileFunction="uploadFileFunction"
37
- menubar=""
38
- height="200px"
39
- @change="($event) => getTinymceEdit($event, 'analysis')"
40
- @delte="($event) => handleDelteAttrs($event, 'analysis', fromData.descriptionAttrs)"
41
- />
42
- </div>
43
- </template>
44
- <script>
45
- import TopicMixins from 'yks/assets/mixins/topic'
46
- import { letter, stemItemType, analysisItemType } from './config'
47
-
48
- export default {
49
- name: 'YksJudgment',
50
- mixins: [TopicMixins],
51
- methods: {
52
- /**
53
- * data 富文本数据
54
- * field 对象名
55
- * type 类型
56
- */
57
- getTinymceEdit(data, type) {
58
- switch (type) {
59
- case 'stem':
60
- data.itemAttr.type = stemItemType[data.itemAttr.type]
61
- this.fromData.itemContent = data.value
62
- if (data.itemAttr.type && data.itemAttr.content) {
63
- this.fromData.stemAttrs.push(data.itemAttr)
64
- }
65
- break
66
- case 'analysis':
67
- data.itemAttr.type = analysisItemType[data.itemAttr.type]
68
- this.fromData.description = data.value
69
- if (data.itemAttr.type && data.itemAttr.content) {
70
- this.fromData.descriptionAttrs.push(data.itemAttr)
71
- }
72
- break
73
- default:
74
- break
75
- }
76
- this.$emit('change', this.fromData)
77
- },
78
-
79
- handleAddItem() {
80
- const { itemList } = this.fromData
81
- this.fromData.itemList.push({
82
- optionName: letter[itemList.length],
83
- content: '',
84
- optionAttrs: []
85
- })
86
-
87
- this.$emit('change', this.fromData)
88
- },
89
-
90
- handleDelteAttrs(data, type, list, row = {}) {
91
- const listAttrs = list
92
- listAttrs.splice(data.index, 1)
93
- switch (type) {
94
- case 'stem':
95
- this.fromData.stemAttrs = listAttrs
96
- break
97
- case 'option':
98
- this.$set(row, 'optionAttrs', listAttrs)
99
- break
100
- case 'analysis':
101
- this.fromData.descriptionAttrs = listAttrs
102
- break
103
- default:
104
- break
105
- }
106
- this.$emit('change', this.fromData)
107
- }
108
- }
109
- }
110
- </script>
File without changes
@@ -1,163 +0,0 @@
1
- <template>
2
- <div class="yks-topics">
3
- <div class="topic-stem__label required__label">题干</div>
4
- <yks-tinymce
5
- key="itemContent"
6
- v-model="fromData.itemContent"
7
- :toolbar="toolbar"
8
- :plugins="plugins"
9
- :charLimit="topicDataExtent.itemContentLength || 20000"
10
- :fileParams="getFileTypes('stem', fromData.stemAttrs)"
11
- :uploadFileToHwCloud="uploadFileToHwCloud"
12
- :uploadFileFunction="uploadFileFunction"
13
- menubar=""
14
- height="200px"
15
- @change="($event) => getTinymceEdit($event, 'stem')"
16
- @delte="($event) => handleDelteAttrs($event, 'stem', fromData.stemAttrs)"
17
- />
18
-
19
- <div class="yks-flex cloze-single">
20
- <span class="single-single__label required__label">选项</span>
21
- <span class="yks-fs-12 yks-info">请在编辑完选项后选择正确的答案(至少两个)</span>
22
- </div>
23
- <el-checkbox-group v-model="fromData.answer">
24
- <div
25
- v-for="(item, index) in fromData.itemList"
26
- :key="`itemList${index}`"
27
- class="yks-flex v-start yks-mb10"
28
- >
29
- <el-checkbox :label="item.optionName" class="yks-w_60 yks-mr10"></el-checkbox>
30
- <yks-tinymce
31
- :key="`itemList${index}`"
32
- v-model="item.content"
33
- :toolbar="toolbar"
34
- :plugins="plugins"
35
- :charLimit="topicDataExtent.answerLength || 5000"
36
- :fileParams="getFileTypes('option', item.optionAttrs)"
37
- :uploadFileToHwCloud="uploadFileToHwCloud"
38
- :uploadFileFunction="uploadFileFunction"
39
- inline
40
- height="80px"
41
- menubar=""
42
- class="flex-1 radio-tinymce"
43
- @change="($event) => changeItem($event, item)"
44
- @delte="($event) => handleDelteAttrs($event, 'option', item.optionAttrs, item)"
45
- />
46
- <el-button
47
- v-if="fromData.itemList.length > 2"
48
- type="text"
49
- class="yks-danger"
50
- @click="handleDelte(index)"
51
- >删除</el-button
52
- >
53
- </div>
54
- </el-checkbox-group>
55
- <el-button v-if="fromData.itemList.length < 14" type="primary" @click="handleAddItem"
56
- >新增选项</el-button
57
- >
58
- <div class="topic-stem__label">答案解析</div>
59
- <yks-tinymce
60
- key="description"
61
- v-model="fromData.description"
62
- :toolbar="toolbar"
63
- :plugins="plugins"
64
- :charLimit="topicDataExtent.descriptionLength || 20000"
65
- :fileParams="getFileTypes('analysis', fromData.descriptionAttrs)"
66
- :uploadFileToHwCloud="uploadFileToHwCloud"
67
- :uploadFileFunction="uploadFileFunction"
68
- menubar=""
69
- height="200px"
70
- @change="($event) => getTinymceEdit($event, 'analysis')"
71
- @delte="($event) => handleDelteAttrs($event, 'analysis', fromData.descriptionAttrs)"
72
- />
73
- </div>
74
- </template>
75
- <script>
76
- import TopicMixins from 'yks/assets/mixins/topic'
77
- import { letter, stemItemType, optionItemType, analysisItemType } from './config'
78
-
79
- export default {
80
- name: 'YksMultiple',
81
- mixins: [TopicMixins],
82
- methods: {
83
- /**
84
- * data 富文本数据
85
- * field 对象名
86
- * type 类型
87
- */
88
- getTinymceEdit(data, type) {
89
- switch (type) {
90
- case 'stem':
91
- data.itemAttr.type = stemItemType[data.itemAttr.type]
92
- this.fromData.itemContent = data.value
93
- if (data.itemAttr.type && data.itemAttr.content) {
94
- this.fromData.stemAttrs.push(data.itemAttr)
95
- }
96
- break
97
- case 'analysis':
98
- data.itemAttr.type = analysisItemType[data.itemAttr.type]
99
- this.fromData.description = data.value
100
- if (data.itemAttr.type && data.itemAttr.content) {
101
- this.fromData.descriptionAttrs.push(data.itemAttr)
102
- }
103
- break
104
- default:
105
- break
106
- }
107
- this.$emit('change', this.fromData)
108
- },
109
-
110
- changeItem(data, row) {
111
- data.itemAttr.type = optionItemType[data.itemAttr.type]
112
- if (data.itemAttr.type && data.itemAttr.content) {
113
- row.optionAttrs.push(data.itemAttr)
114
- this.$set(row, 'optionAttrs', row.optionAttrs)
115
- }
116
- this.$set(row, 'content', data.value)
117
- this.$emit('change', this.fromData)
118
- },
119
-
120
- handleDelte(index) {
121
- this.fromData.itemList.splice(index, 1)
122
- this.fromData.itemList = this.fromData.itemList.map((v, index) => {
123
- return {
124
- ...v,
125
- optionName: letter[index]
126
- }
127
- })
128
- this.$emit('change', this.fromData)
129
- },
130
-
131
- handleAddItem() {
132
- const { itemList } = this.fromData
133
- this.fromData.itemList.push({
134
- optionName: letter[itemList.length],
135
- content: '',
136
- optionAttrs: []
137
- })
138
-
139
- this.$emit('change', this.fromData)
140
- },
141
-
142
- handleDelteAttrs(data, type, list, row = {}) {
143
- const listAttrs = list
144
- listAttrs.splice(data.index, 1)
145
- switch (type) {
146
- case 'stem':
147
- this.fromData.stemAttrs = listAttrs
148
- break
149
- case 'option':
150
- this.$set(row, 'optionAttrs', listAttrs)
151
- break
152
- case 'analysis':
153
- this.fromData.descriptionAttrs = listAttrs
154
- break
155
- default:
156
- break
157
- }
158
- this.$emit('change', this.fromData)
159
- }
160
- }
161
- }
162
- </script>
163
-
@@ -1,113 +0,0 @@
1
- <template>
2
- <div>
3
- <div class="topic-stem__label required__label">题干</div>
4
- <yks-tinymce
5
- key="itemContent"
6
- v-model="fromData.itemContent"
7
- :toolbar="toolbar"
8
- :plugins="plugins"
9
- :charLimit="topicDataExtent.itemContentLength || 20000"
10
- :fileParams="getFileTypes('stem', fromData.stemAttrs)"
11
- :uploadFileToHwCloud="uploadFileToHwCloud"
12
- :uploadFileFunction="uploadFileFunction"
13
- menubar=""
14
- height="200px"
15
- @change="($event) => getTinymceEdit($event, 'stem')"
16
- @delte="($event) => handleDelteAttrs($event, 'stem', fromData.stemAttrs)"
17
- />
18
- <div class="topic-stem__label required__label">标准答案</div>
19
- <yks-tinymce
20
- key="answer"
21
- v-model="fromData.answer"
22
- :toolbar="toolbar"
23
- :plugins="plugins"
24
- :charLimit="topicDataExtent.answerLength || 5000"
25
- :fileParams="getFileTypes('answer', fromData.answerAttrs)"
26
- :uploadFileToHwCloud="uploadFileToHwCloud"
27
- :uploadFileFunction="uploadFileFunction"
28
- menubar=""
29
- height="200px"
30
- @change="($event) => getTinymceEdit($event, 'answer')"
31
- @delte="($event) => handleDelteAttrs($event, 'answer', fromData.answerAttrs)"
32
- />
33
- <div class="topic-stem__label">答案解析</div>
34
- <yks-tinymce
35
- key="description"
36
- v-model="fromData.description"
37
- :toolbar="toolbar"
38
- :plugins="plugins"
39
- :charLimit="topicDataExtent.descriptionLength || 20000"
40
- :fileParams="getFileTypes('analysis', fromData.descriptionAttrs)"
41
- :uploadFileToHwCloud="uploadFileToHwCloud"
42
- :uploadFileFunction="uploadFileFunction"
43
- menubar=""
44
- height="200px"
45
- @change="($event) => getTinymceEdit($event, 'analysis')"
46
- @delte="($event) => handleDelteAttrs($event, 'analysis', fromData.descriptionAttrs)"
47
- />
48
- </div>
49
- </template>
50
- <script>
51
- import TopicMixins from 'yks/assets/mixins/topic'
52
- import { stemItemType, shortItemType, analysisItemType } from './config'
53
-
54
- export default {
55
- name: 'YksPictureanswer',
56
- mixins: [TopicMixins],
57
- methods: {
58
- /**
59
- * data 富文本数据
60
- * field 对象名
61
- * type 类型
62
- */
63
- getTinymceEdit(data, type) {
64
- switch (type) {
65
- case 'stem':
66
- data.itemAttr.type = stemItemType[data.itemAttr.type]
67
- this.fromData.itemContent = data.value
68
- if (data.itemAttr.type && data.itemAttr.content) {
69
- this.fromData.stemAttrs.push(data.itemAttr)
70
- }
71
- break
72
- case 'answer':
73
- data.itemAttr.type = shortItemType[data.itemAttr.type]
74
- this.fromData.answer = data.value
75
- if (data.itemAttr.type && data.itemAttr.content) {
76
- this.fromData.answerAttrs.push(data.itemAttr)
77
- }
78
- break
79
- case 'analysis':
80
- data.itemAttr.type = analysisItemType[data.itemAttr.type]
81
- this.fromData.description = data.value
82
-
83
- if (data.itemAttr.type && data.itemAttr.content) {
84
- this.fromData.descriptionAttrs.push(data.itemAttr)
85
- }
86
- break
87
- default:
88
- break
89
- }
90
- this.$emit('change', this.fromData)
91
- },
92
-
93
- handleDelteAttrs(data, type, list, row = {}) {
94
- const listAttrs = list
95
- listAttrs.splice(data.index, 1)
96
- switch (type) {
97
- case 'stem':
98
- this.fromData.stemAttrs = listAttrs
99
- break
100
- case 'answer':
101
- this.fromData.answerAttrs = listAttrs
102
- break
103
- case 'analysis':
104
- this.fromData.descriptionAttrs = listAttrs
105
- break
106
- default:
107
- break
108
- }
109
- this.$emit('change', this.fromData)
110
- }
111
- }
112
- }
113
- </script>