yks-element 1.0.324 → 1.0.792

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 (88) hide show
  1. package/README.md +74 -8
  2. package/lib/theme-chalk/buttons.css +1 -0
  3. package/lib/theme-chalk/common.css +1 -0
  4. package/lib/theme-chalk/dialogs.css +1 -0
  5. package/{packages/Topic/src/indefiniteChoice.vue → lib/theme-chalk/element-variables.css} +0 -0
  6. package/lib/theme-chalk/elements.css +1 -0
  7. package/lib/theme-chalk/enlarge.css +1 -0
  8. package/{packages/styles → lib/theme-chalk}/fonts/element-icons.ttf +0 -0
  9. package/{packages/styles → lib/theme-chalk}/fonts/element-icons.woff +0 -0
  10. package/{packages/styles → lib/theme-chalk}/fonts/iconfont.ttf +0 -0
  11. package/lib/theme-chalk/fonts/iconfont.woff +0 -0
  12. package/lib/theme-chalk/icons.css +1 -0
  13. package/lib/theme-chalk/index.css +1 -0
  14. package/lib/theme-chalk/multimedia.css +1 -0
  15. package/lib/theme-chalk/paginations.css +1 -0
  16. package/lib/theme-chalk/scrollbars.css +1 -0
  17. package/lib/theme-chalk/selects.css +1 -0
  18. package/lib/theme-chalk/tables.css +1 -0
  19. package/lib/theme-chalk/tinymce.css +1 -0
  20. package/lib/theme-chalk/uploadfile.css +1 -0
  21. package/lib/theme-chalk/video.css +1 -0
  22. package/{packages/Topic/src/matching.vue → lib/theme-chalk/videoPlayer.css} +0 -0
  23. package/lib/yks.js +1 -0
  24. package/package.json +42 -12
  25. package/lib/fonts/element-icons.535877f5.woff +0 -0
  26. package/lib/fonts/element-icons.732389de.ttf +0 -0
  27. package/lib/fonts/iconfont.19124b0d.ttf +0 -0
  28. package/lib/fonts/iconfont.3ae3dd4e.woff +0 -0
  29. package/lib/yks.css +0 -1
  30. package/packages/Button/index.js +0 -8
  31. package/packages/Button/src/index.vue +0 -78
  32. package/packages/Dialog/index.js +0 -8
  33. package/packages/Dialog/src/index.vue +0 -103
  34. package/packages/Multimedia/index.js +0 -8
  35. package/packages/Multimedia/src/index.vue +0 -179
  36. package/packages/Pagination/index.js +0 -8
  37. package/packages/Pagination/src/index.vue +0 -149
  38. package/packages/Scrollbar/index.js +0 -8
  39. package/packages/Scrollbar/src/index.vue +0 -27
  40. package/packages/Select/index.js +0 -8
  41. package/packages/Select/src/index.vue +0 -350
  42. package/packages/Select/src/option.vue +0 -29
  43. package/packages/Table/index.js +0 -8
  44. package/packages/Table/src/index.vue +0 -141
  45. package/packages/Tinymce/index.js +0 -8
  46. package/packages/Tinymce/src/config.js +0 -25
  47. package/packages/Tinymce/src/index.vue +0 -500
  48. package/packages/Topic/index.js +0 -23
  49. package/packages/Topic/src/attachment.vue +0 -123
  50. package/packages/Topic/src/audioFrequency.vue +0 -124
  51. package/packages/Topic/src/clozeFillInBlanks.vue +0 -264
  52. package/packages/Topic/src/compound.vue +0 -223
  53. package/packages/Topic/src/config.js +0 -132
  54. package/packages/Topic/src/fillInBlanks.vue +0 -269
  55. package/packages/Topic/src/judgment.vue +0 -138
  56. package/packages/Topic/src/multiple.vue +0 -190
  57. package/packages/Topic/src/pictureAnswer.vue +0 -124
  58. package/packages/Topic/src/shortAnswer.vue +0 -133
  59. package/packages/Topic/src/single.vue +0 -191
  60. package/packages/UploadFile/index.js +0 -8
  61. package/packages/UploadFile/src/index.vue +0 -390
  62. package/packages/Video/index.js +0 -8
  63. package/packages/Video/src/index.vue +0 -351
  64. package/packages/assets/mixins/topic.js +0 -137
  65. package/packages/assets/utils/index.js +0 -83
  66. package/packages/assets/utils/topic.js +0 -132
  67. package/packages/icon/default/icons.js +0 -182
  68. package/packages/icon/default/icons.min.js +0 -1
  69. package/packages/icon/default/index.js +0 -7
  70. package/packages/icon/ks-pdf.png +0 -0
  71. package/packages/icon/ks-ppt.png +0 -0
  72. package/packages/icon/ks-word.png +0 -0
  73. package/packages/icon/ks-xslx.png +0 -0
  74. package/packages/icon/music-bg.png +0 -0
  75. package/packages/icon/video-bg.png +0 -0
  76. package/packages/index.js +0 -223
  77. package/packages/option/index.js +0 -6
  78. package/packages/styles/_mixin.scss +0 -93
  79. package/packages/styles/_variables.scss +0 -40
  80. package/packages/styles/common.scss +0 -200
  81. package/packages/styles/element-ui.scss +0 -135
  82. package/packages/styles/element-variables.scss +0 -794
  83. package/packages/styles/fonts/iconfont.woff +0 -0
  84. package/packages/styles/icon.scss +0 -69
  85. package/packages/styles/index.scss +0 -11
  86. package/packages/styles/select.scss +0 -98
  87. package/packages/styles/table.scss +0 -45
  88. package/packages/styles/topic.scss +0 -26
@@ -1,124 +0,0 @@
1
- <template>
2
- <div class="single">
3
- <div class="single-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="single-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="single-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 YksTinymce from '../../Tinymce/index'
52
- import TopicMixins from '../../assets/mixins/topic'
53
- import { stemItemType, shortItemType, analysisItemType } from './config'
54
-
55
- export default {
56
- name: 'YksAudiofrequency',
57
- components: { YksTinymce },
58
- mixins: [TopicMixins],
59
- methods: {
60
- /**
61
- * data 富文本数据
62
- * field 对象名
63
- * type 类型
64
- */
65
- getTinymceEdit(data, type) {
66
- switch (type) {
67
- case 'stem':
68
- data.itemAttr.type = stemItemType[data.itemAttr.type]
69
- this.fromData.itemContent = data.value
70
- if (data.itemAttr.type && data.itemAttr.content) {
71
- this.fromData.stemAttrs.push(data.itemAttr)
72
- }
73
- break
74
- case 'answer':
75
- data.itemAttr.type = shortItemType[data.itemAttr.type]
76
- this.fromData.answer = data.value
77
- if (data.itemAttr.type && data.itemAttr.content) {
78
- this.fromData.answerAttrs.push(data.itemAttr)
79
- }
80
- break
81
- case 'analysis':
82
- data.itemAttr.type = analysisItemType[data.itemAttr.type]
83
- this.fromData.description = data.value
84
-
85
- if (data.itemAttr.type && data.itemAttr.content) {
86
- this.fromData.descriptionAttrs.push(data.itemAttr)
87
- }
88
- break
89
- default:
90
- break
91
- }
92
- this.$emit('change', this.fromData)
93
- },
94
-
95
- handleDelteAttrs(data, type, list, row = {}) {
96
- const listAttrs = list
97
- listAttrs.splice(data.index, 1)
98
- switch (type) {
99
- case 'stem':
100
- this.fromData.stemAttrs = listAttrs
101
- break
102
- case 'answer':
103
- this.fromData.answerAttrs = listAttrs
104
- break
105
- case 'analysis':
106
- this.fromData.descriptionAttrs = listAttrs
107
- break
108
- default:
109
- break
110
- }
111
- this.$emit('change', this.fromData)
112
- }
113
- }
114
- }
115
- </script>
116
-
117
- <style lang="scss" scoped>
118
-
119
- .single-stem__label {
120
- margin: 30px 0;
121
- font-size: 18px;
122
- font-weight: 700;
123
- }
124
- </style>
@@ -1,264 +0,0 @@
1
- <template>
2
- <div class="single">
3
- <div class="single-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
- menubar=""
13
- height="200px"
14
- @change="($event) => getTinymceEdit($event, 'stem')"
15
- @delte="($event) => handleDelteAttrs($event, 'stem', fromData.stemAttrs)"
16
- />
17
- <div class="yks-flex yks-mt10">
18
- <el-button type="primary" class="yks-mr10" @click="handleFillInBlanks"
19
- >插入填空符</el-button
20
- >
21
- <span class="yks-fs-12 yks-info">请在题干中你需要的位置插入填空符,并在下方编辑对应答案</span>
22
- </div>
23
-
24
- <div class="yks-flex single-single">
25
- <span class="single-single__label required__label">答案</span>
26
- <span class="yks-fs-12 yks-info">考生需要在每个空内输入正确的答案</span>
27
- </div>
28
- <div
29
- v-for="(item, index) in fromData.itemList"
30
- :key="`itemList${index}`"
31
- class="yks-flex yks-mb10 v-start"
32
- >
33
- <span class="yks-w_60 yks-mr10">填空{{ index + 1 }}</span>
34
- <yks-tinymce
35
- key="content"
36
- v-model="item.content"
37
- :toolbar="toolbarSpare"
38
- :plugins="plugins"
39
- :charLimit="topicDataExtent.answerLength || 5000"
40
- :fileParams="getFileTypes('option', item.optionAttrs)"
41
- inline
42
- height="60px"
43
- menubar=""
44
- class="flex-1 radio-tinymce"
45
- @change="($event) => changeItem($event, item)"
46
- @delte="($event) => handleDelteAttrs($event, 'option', item.optionAttrs, item)"
47
- />
48
- <el-input-number
49
- v-model="item.score"
50
- controls-position="right"
51
- placeholder="分值"
52
- class="yks-mr10"
53
- size="large"
54
- :min="0"
55
- :step="0.5"
56
- :max="100"
57
- ></el-input-number>
58
- <el-button type="text" class="yks-danger" @click="handleDelte(index)">删除</el-button>
59
- </div>
60
-
61
- <div class="fill__other">
62
- <div class="text__warning">
63
- 1、如果勾选考生端开启数学公式编辑器,在PC端考生答题页面,本题答题区域考生可以使用数据公式编辑器。
64
- <br />
65
- 2、如果勾选按答案自动判分,需要考生填写内容须跟答案完全相同,才能得分,录入答案时,请不要加多余的空格标点符号等干扰字符,考生考后系统自动出分。
66
- <br />
67
- 3、如果没有勾选按答案自动判分,考生答卷需等待管理员后台手工判分。
68
- </div>
69
- <div class="yks-mt10">
70
- <el-checkbox v-model="fromData.mathematical"
71
- >开启数学公式编辑器(只适用于PC端答题)</el-checkbox
72
- >
73
- <div class="yks-mt10">
74
- <el-checkbox v-model="fromData.automaticScoring" true-label="1" false-label="0"
75
- >按答案自动判分</el-checkbox
76
- >
77
- </div>
78
- <div v-if="fromData.automaticScoring === '1'" class="yks-mt10">
79
- <el-checkbox v-model="fromData.outOfOrder" true-label="1" false-label="0"
80
- >允许考生答案与参考答案顺序不一致</el-checkbox
81
- >
82
- <el-checkbox v-model="fromData.neglect" true-label="1" false-label="0"
83
- >忽略大小写</el-checkbox
84
- >
85
- </div>
86
- </div>
87
- </div>
88
-
89
- <div class="single-stem__label">答案解析</div>
90
- <yks-tinymce
91
- key="description"
92
- v-model="fromData.description"
93
- :toolbar="toolbar"
94
- :plugins="plugins"
95
- :charLimit="topicDataExtent.descriptionLength || 20000"
96
- :fileParams="getFileTypes('analysis', fromData.descriptionAttrs)"
97
- menubar=""
98
- height="200px"
99
- @change="($event) => getTinymceEdit($event, 'analysis')"
100
- @delte="($event) => handleDelteAttrs($event, 'analysis', fromData.descriptionAttrs)"
101
- />
102
- </div>
103
- </template>
104
- <script>
105
- import YksTinymce from '../../Tinymce/index'
106
- import TopicMixins from '../../assets/mixins/topic'
107
- import { stemItemType, optionItemType, analysisItemType } from './config'
108
-
109
- export default {
110
- name: 'YksClozefillinblanks',
111
- components: { YksTinymce },
112
- mixins: [TopicMixins],
113
- methods: {
114
- /**
115
- * data 富文本数据
116
- * field 对象名
117
- * type 类型
118
- */
119
- getTinymceEdit(data, type) {
120
- switch (type) {
121
- case 'stem':
122
- data.itemAttr.type = stemItemType[data.itemAttr.type]
123
- if (data.itemAttr.type && data.itemAttr.content) {
124
- this.fromData.stemAttrs.push(data.itemAttr)
125
- }
126
- // eslint-disable-next-line no-case-declarations
127
- const list = data.value.match(/<input ([^>|]+)>/g, '') || []
128
- // eslint-disable-next-line no-case-declarations
129
- const editor = this.$refs.stemTinymceEdit
130
- if ((this.fromData.itemList || []).length !== list.length && !this.processing) {
131
- const { itemContent } = this.fromData
132
- this.$message.error('请从下方填空符删除!')
133
- this.fromData.itemContent = itemContent.replace(
134
- /<input ([^>|]+)\/>/g,
135
- (all, value) => {
136
- const attributes = value.replace('disabled="disabled"', '')
137
- return `<input ${attributes} disabled="disabled" />`
138
- }
139
- )
140
- this.$nextTick(() => {
141
- editor.keepLastIndex()
142
- })
143
- } else {
144
- this.fromData.itemContent = data.value
145
- }
146
- break
147
- case 'analysis':
148
- data.itemAttr.type = analysisItemType[data.itemAttr.type]
149
- this.fromData.description = data.value
150
- if (data.itemAttr.type && data.itemAttr.content) {
151
- this.fromData.descriptionAttrs.push(data.itemAttr)
152
- }
153
- break
154
- default:
155
- break
156
- }
157
- this.$emit('change', this.fromData)
158
- },
159
-
160
- changeItem(data, row) {
161
- data.itemAttr.type = optionItemType[data.itemAttr.type]
162
- if (data.itemAttr.type && data.itemAttr.content) {
163
- row.optionAttrs.push(data.itemAttr)
164
- this.$set(row, 'optionAttrs', row.optionAttrs)
165
- }
166
- this.$set(row, 'content', data.value)
167
- this.$emit('change', this.fromData)
168
- },
169
-
170
- handleDelte(index) {
171
- const list = this.fromData.itemContent.match(/<input ([^>|]+)>/g, '') || []
172
- const classId = this.fromData.itemList[index].classId
173
- if (classId) {
174
- const subIndex = list.findIndex((v) => v.search(classId) !== -1)
175
- this.fromData.itemList.splice(index, 1)
176
- const editor = this.$refs.stemTinymceEdit
177
- editor.deleFillItem(subIndex)
178
- } else {
179
- this.fromData.itemList.splice(index, 1)
180
- const editor = this.$refs.stemTinymceEdit
181
- editor.deleFillItem(index)
182
- }
183
-
184
- this.$emit('change', this.fromData)
185
- },
186
-
187
- handleFillInBlanks() {
188
- if (this.fromData.itemList.length >= 40) {
189
- return
190
- }
191
-
192
- const value = Date.now()
193
- this.processing = true
194
- const editor = this.$refs.stemTinymceEdit
195
- editor.handleFillInBlanks(this.fromData.itemList.length, value)
196
- const { itemContent } = this.fromData
197
- let index = 0
198
- this.fromData.itemContent = itemContent.replace(/<input ([^>|]+)\/>/g, (all, value) => {
199
- index += 1
200
- return `<input value="${index}" ${value} />`
201
- })
202
- const list = this.fromData.itemContent.match(/<input ([^>|]+)>/g, '') || []
203
- const subIndex = list.findIndex((v) => v.search(value) !== -1)
204
- this.fromData.itemList.splice(subIndex, 0, {
205
- optionName: '',
206
- content: '',
207
- score: '',
208
- optionAttrs: [],
209
- classId: value
210
- })
211
- this.$nextTick(() => {
212
- editor.keepLastIndex()
213
- this.$emit('change', this.fromData)
214
- })
215
- this.processing = false
216
- },
217
-
218
- handleDelteAttrs(data, type, list, row = {}) {
219
- const listAttrs = list
220
- listAttrs.splice(data.index, 1)
221
- switch (type) {
222
- case 'stem':
223
- this.fromData.stemAttrs = listAttrs
224
- break
225
- case 'option':
226
- this.$set(row, 'optionAttrs', listAttrs)
227
- break
228
- case 'analysis':
229
- this.fromData.descriptionAttrs = listAttrs
230
- break
231
- default:
232
- break
233
- }
234
- this.$emit('change', this.fromData)
235
- }
236
- }
237
- }
238
- </script>
239
-
240
- <style lang="scss" scoped>
241
- .single-single {
242
- margin: 30px 0;
243
- .single-single__label {
244
- font-weight: 700;
245
- font-size: 18px;
246
- width: 100px;
247
- }
248
- }
249
- .single-stem__label {
250
- font-weight: 700;
251
- font-size: 18px;
252
- margin: 30px 0;
253
- }
254
- .radio-tinymce {
255
- font-size: 14px;
256
- margin-right: 20px;
257
- }
258
-
259
- ::v-deep {
260
- .el-radio-group {
261
- display: block;
262
- }
263
- }
264
- </style>
@@ -1,223 +0,0 @@
1
- <template>
2
- <div class="single">
3
- <div class="single-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
20
- v-for="(item, index) in fromData.compoundList"
21
- :key="`compoundList${index}`"
22
- class="yks-ml10"
23
- >
24
- <div class="yks-flex single-single">
25
- <span class="single-single__label required__label"
26
- >{{ index + 1 }}) {{ topic[item.componentId] }}</span
27
- >
28
- <span class="yks-fs-12 yks-mr10">分值</span>
29
- <span class="flex-1">
30
- <el-input-number
31
- v-model="item.score"
32
- :min="0"
33
- :step="0.5"
34
- :max="100"
35
- ></el-input-number>
36
- <el-button
37
- v-if="index > 0"
38
- type="text"
39
- class="yks-ml10"
40
- @click="handleShiftItem('up', index)"
41
- >上移题目</el-button
42
- >
43
- <el-button
44
- v-if="
45
- index + 1 !== fromData.compoundList.length &&
46
- fromData.compoundList.length > 0
47
- "
48
- type="text"
49
- class="yks-ml10"
50
- @click="handleShiftItem('down', index)"
51
- >下移题目</el-button
52
- >
53
- </span>
54
- <el-button
55
- v-if="fromData.compoundList.length > 1"
56
- type="text"
57
- class="yks-danger"
58
- @click="handleDelte(index)"
59
- >删除</el-button
60
- >
61
- </div>
62
- <component
63
- :is="getComponentId(item.componentId)"
64
- v-model="item.itemContentList"
65
- :topicDataExtent="topicDataExtent"
66
- :uploadFileToHwCloud="uploadFileToHwCloud"
67
- ></component>
68
- </div>
69
-
70
- <div class="yks-flex h-between compound-button">
71
- <el-button type="primary" @click="handleAddItem('single')">添加单选题</el-button>
72
- <el-button type="primary" @click="handleAddItem('judgment')">添加判断题</el-button>
73
- <el-button type="primary" @click="handleAddItem('multiple')">添加多选题</el-button>
74
- <el-button type="primary" @click="handleAddItem('short_answer')">添加简答题</el-button>
75
- </div>
76
- </div>
77
- </template>
78
- <script>
79
- import YksTinymce from '../../Tinymce/index'
80
- import TopicMixins from '../../assets/mixins/topic'
81
- import { analysisItemType, stemItemType, itemDataLists } from './config'
82
- import Single from './single'
83
- import Multiple from './multiple'
84
- import Judgment from './judgment'
85
- import ShortAnswer from './shortAnswer'
86
-
87
- export default {
88
- name: 'YksCompound',
89
- components: { YksTinymce, Single, Multiple, Judgment, ShortAnswer },
90
- mixins: [TopicMixins],
91
- methods: {
92
- handleDelte(index) {
93
- this.fromData.compoundList.splice(index, 1)
94
- this.$emit('change', this.fromData)
95
- },
96
-
97
- handleAddItem(value) {
98
- const params = {
99
- itemContentList: {
100
- answer: '',
101
- itemContent: '',
102
- itemList: itemDataLists(),
103
- stemAttrs: [],
104
- answerAttrs: [],
105
- descriptionAttrs: [],
106
- description: ''
107
- },
108
- score: 0,
109
- componentId: value
110
- }
111
-
112
- switch (value) {
113
- case 'multiple':
114
- params.itemContentList.answer = []
115
- break
116
- case 'judgment':
117
- params.itemContentList.itemList = []
118
- break
119
- case 'short_answer':
120
- params.itemContentList.itemList = []
121
- break
122
- }
123
- this.fromData.compoundList.push(params)
124
- this.$emit('change', this.fromData)
125
- },
126
-
127
- /**
128
- * data 富文本数据
129
- * field 对象名
130
- * type 类型
131
- */
132
- getTinymceEdit(data, type) {
133
- switch (type) {
134
- case 'stem':
135
- data.itemAttr.type = stemItemType[data.itemAttr.type]
136
- this.fromData.itemContent = data.value
137
- if (data.itemAttr.type && data.itemAttr.content) {
138
- this.fromData.stemAttrs.push(data.itemAttr)
139
- }
140
- break
141
- case 'analysis':
142
- data.itemAttr.type = analysisItemType[data.itemAttr.type]
143
- this.fromData.description = data.value
144
- if (data.itemAttr.type && data.itemAttr.content) {
145
- this.fromData.descriptionAttrs.push(data.itemAttr)
146
- }
147
- break
148
- default:
149
- break
150
- }
151
- this.$emit('change', this.fromData)
152
- },
153
-
154
- handleShiftItem(type, index) {
155
- const { compoundList } = this.fromData
156
- if (type === 'up') {
157
- compoundList[index] = compoundList.splice(index - 1, 1, compoundList[index])[0]
158
- } else {
159
- compoundList[index] = compoundList.splice(index + 1, 1, compoundList[index])[0]
160
- }
161
- this.fromData.compoundList = compoundList
162
- this.$emit('change', this.fromData)
163
- },
164
-
165
- getComponentId(value) {
166
- if (value === 'short_answer') {
167
- return 'shortAnswer'
168
- }
169
- return value
170
- },
171
-
172
- handleDelteAttrs(data, type, list, row = {}) {
173
- const listAttrs = list
174
- listAttrs.splice(data.index, 1)
175
- switch (type) {
176
- case 'stem':
177
- this.fromData.stemAttrs = listAttrs
178
- break
179
- case 'option':
180
- this.$set(row, 'optionAttrs', listAttrs)
181
- break
182
- case 'analysis':
183
- this.fromData.descriptionAttrs = listAttrs
184
- break
185
- default:
186
- break
187
- }
188
- this.$emit('change', this.fromData)
189
- }
190
- }
191
- }
192
- </script>
193
-
194
- <style lang="scss" scoped>
195
- .single-single {
196
- margin: 30px 0;
197
- .single-single__label {
198
- font-weight: 700;
199
- font-size: 18px;
200
- margin-right: 20px;
201
- }
202
- }
203
- .single-stem__label {
204
- font-weight: 700;
205
- font-size: 18px;
206
- margin: 30px 0;
207
- }
208
- .radio-tinymce {
209
- font-size: 14px;
210
- margin-right: 20px;
211
- }
212
-
213
- .compound-button {
214
- margin: 20px auto;
215
- width: 60%;
216
- }
217
-
218
- ::v-deep {
219
- .el-radio-group {
220
- display: block;
221
- }
222
- }
223
- </style>