yks-element 1.0.4 → 1.0.5

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 (190) hide show
  1. package/README.md +7 -3
  2. package/lib/theme-chalk/common.css +1 -1
  3. package/lib/theme-chalk/index.css +1 -1
  4. package/lib/theme-chalk/paginations.css +1 -1
  5. package/lib/theme-chalk/selects.css +1 -1
  6. package/lib/yks.js +1 -1
  7. package/package.json +1 -3
  8. package/lib/theme-chalk/topic.css +0 -1
  9. package/packages/Dialog/index.js +0 -8
  10. package/packages/Dialog/src/index.vue +0 -89
  11. package/packages/Multimedia/index.js +0 -8
  12. package/packages/Multimedia/src/index.vue +0 -136
  13. package/packages/Pagination/index.js +0 -8
  14. package/packages/Pagination/src/index.vue +0 -111
  15. package/packages/Scrollbar/index.js +0 -8
  16. package/packages/Scrollbar/src/index.vue +0 -20
  17. package/packages/Select/index.js +0 -8
  18. package/packages/Select/src/index.vue +0 -350
  19. package/packages/Select/src/option.vue +0 -29
  20. package/packages/Table/index.js +0 -8
  21. package/packages/Table/src/index.vue +0 -141
  22. package/packages/Tinymce/index.js +0 -8
  23. package/packages/Tinymce/src/config.js +0 -25
  24. package/packages/Tinymce/src/index.vue +0 -450
  25. package/packages/Topic/index.js +0 -23
  26. package/packages/Topic/src/attachment.vue +0 -114
  27. package/packages/Topic/src/audioFrequency.vue +0 -114
  28. package/packages/Topic/src/clozeFillInBlanks.vue +0 -237
  29. package/packages/Topic/src/compound.vue +0 -191
  30. package/packages/Topic/src/config.js +0 -132
  31. package/packages/Topic/src/fillInBlanks.vue +0 -242
  32. package/packages/Topic/src/indefiniteChoice.vue +0 -0
  33. package/packages/Topic/src/judgment.vue +0 -110
  34. package/packages/Topic/src/matching.vue +0 -0
  35. package/packages/Topic/src/multiple.vue +0 -163
  36. package/packages/Topic/src/pictureAnswer.vue +0 -113
  37. package/packages/Topic/src/shortAnswer.vue +0 -124
  38. package/packages/Topic/src/single.vue +0 -163
  39. package/packages/UploadFile/index.js +0 -8
  40. package/packages/UploadFile/src/index.vue +0 -358
  41. package/packages/Video/index.js +0 -8
  42. package/packages/Video/src/index.vue +0 -204
  43. package/packages/assets/mixins/topic.js +0 -137
  44. package/packages/assets/utils/index.js +0 -83
  45. package/packages/assets/utils/topic.js +0 -132
  46. package/packages/icon/default/icons.js +0 -182
  47. package/packages/icon/default/icons.min.js +0 -1
  48. package/packages/icon/default/index.js +0 -7
  49. package/packages/icon/ks-pdf.png +0 -0
  50. package/packages/icon/ks-ppt.png +0 -0
  51. package/packages/icon/ks-word.png +0 -0
  52. package/packages/icon/ks-xslx.png +0 -0
  53. package/packages/icon/music-bg.png +0 -0
  54. package/packages/icon/video-bg.png +0 -0
  55. package/packages/index.js +0 -221
  56. package/packages/option/index.js +0 -6
  57. package/packages/styles/_mixin.scss +0 -93
  58. package/packages/styles/_variables.scss +0 -40
  59. package/packages/styles/alert.scss +0 -147
  60. package/packages/styles/aside.scss +0 -7
  61. package/packages/styles/autocomplete.scss +0 -80
  62. package/packages/styles/avatar.scss +0 -51
  63. package/packages/styles/backtop.scss +0 -22
  64. package/packages/styles/badge.scss +0 -57
  65. package/packages/styles/base.scss +0 -2
  66. package/packages/styles/breadcrumb-item.scss +0 -0
  67. package/packages/styles/breadcrumb.scss +0 -55
  68. package/packages/styles/button-group.scss +0 -0
  69. package/packages/styles/button.scss +0 -262
  70. package/packages/styles/buttons.scss +0 -59
  71. package/packages/styles/calendar.scss +0 -79
  72. package/packages/styles/card.scss +0 -32
  73. package/packages/styles/carousel-item.scss +0 -50
  74. package/packages/styles/carousel.scss +0 -161
  75. package/packages/styles/cascader-panel.scss +0 -120
  76. package/packages/styles/cascader.scss +0 -182
  77. package/packages/styles/checkbox-button.scss +0 -0
  78. package/packages/styles/checkbox-group.scss +0 -0
  79. package/packages/styles/checkbox.scss +0 -359
  80. package/packages/styles/col.scss +0 -156
  81. package/packages/styles/collapse-item.scss +0 -0
  82. package/packages/styles/collapse.scss +0 -63
  83. package/packages/styles/color-picker.scss +0 -384
  84. package/packages/styles/common/popup.scss +0 -42
  85. package/packages/styles/common/transition.scss +0 -99
  86. package/packages/styles/common/var.scss +0 -1028
  87. package/packages/styles/common.scss +0 -204
  88. package/packages/styles/container.scss +0 -14
  89. package/packages/styles/date-picker/date-picker.scss +0 -97
  90. package/packages/styles/date-picker/date-range-picker.scss +0 -101
  91. package/packages/styles/date-picker/date-table.scss +0 -151
  92. package/packages/styles/date-picker/month-table.scss +0 -82
  93. package/packages/styles/date-picker/picker-panel.scss +0 -117
  94. package/packages/styles/date-picker/picker.scss +0 -197
  95. package/packages/styles/date-picker/time-picker.scss +0 -85
  96. package/packages/styles/date-picker/time-range-picker.scss +0 -31
  97. package/packages/styles/date-picker/time-spinner.scss +0 -110
  98. package/packages/styles/date-picker/year-table.scss +0 -51
  99. package/packages/styles/date-picker.scss +0 -12
  100. package/packages/styles/descriptions-item.scss +0 -42
  101. package/packages/styles/descriptions.scss +0 -111
  102. package/packages/styles/dialog.scss +0 -123
  103. package/packages/styles/display.scss +0 -12
  104. package/packages/styles/divider.scss +0 -47
  105. package/packages/styles/drawer.scss +0 -219
  106. package/packages/styles/dropdown-item.scss +0 -0
  107. package/packages/styles/dropdown-menu.scss +0 -0
  108. package/packages/styles/dropdown.scss +0 -182
  109. package/packages/styles/element-ui.scss +0 -135
  110. package/packages/styles/element-variables.scss +0 -794
  111. package/packages/styles/element.scss +0 -86
  112. package/packages/styles/empty.scss +0 -45
  113. package/packages/styles/fonts/element-icons.ttf +0 -0
  114. package/packages/styles/fonts/element-icons.woff +0 -0
  115. package/packages/styles/fonts/iconfont.ttf +0 -0
  116. package/packages/styles/fonts/iconfont.woff +0 -0
  117. package/packages/styles/footer.scss +0 -8
  118. package/packages/styles/form-item.scss +0 -0
  119. package/packages/styles/form.scss +0 -167
  120. package/packages/styles/header.scss +0 -8
  121. package/packages/styles/icon.scss +0 -1167
  122. package/packages/styles/icons.scss +0 -69
  123. package/packages/styles/image.scss +0 -179
  124. package/packages/styles/index.scss +0 -18
  125. package/packages/styles/infinite-scroll.scss +0 -0
  126. package/packages/styles/infiniteScroll.scss +0 -0
  127. package/packages/styles/input-number.scss +0 -180
  128. package/packages/styles/input.scss +0 -360
  129. package/packages/styles/link.scss +0 -81
  130. package/packages/styles/loading.scss +0 -96
  131. package/packages/styles/main.scss +0 -12
  132. package/packages/styles/menu-item-group.scss +0 -0
  133. package/packages/styles/menu-item.scss +0 -0
  134. package/packages/styles/menu.scss +0 -289
  135. package/packages/styles/message-box.scss +0 -226
  136. package/packages/styles/message.scss +0 -120
  137. package/packages/styles/mixins/_button.scss +0 -81
  138. package/packages/styles/mixins/config.scss +0 -4
  139. package/packages/styles/mixins/function.scss +0 -44
  140. package/packages/styles/mixins/mixins.scss +0 -190
  141. package/packages/styles/mixins/utils.scss +0 -39
  142. package/packages/styles/multimedia.scss +0 -58
  143. package/packages/styles/notification.scss +0 -99
  144. package/packages/styles/option-group.scss +0 -42
  145. package/packages/styles/option.scss +0 -36
  146. package/packages/styles/page-header.scss +0 -41
  147. package/packages/styles/pagination.scss +0 -295
  148. package/packages/styles/paginations.scss +0 -33
  149. package/packages/styles/popconfirm.scss +0 -16
  150. package/packages/styles/popover.scss +0 -40
  151. package/packages/styles/popper.scss +0 -101
  152. package/packages/styles/progress.scss +0 -141
  153. package/packages/styles/radio-button.scss +0 -113
  154. package/packages/styles/radio-group.scss +0 -9
  155. package/packages/styles/radio.scss +0 -199
  156. package/packages/styles/rate.scss +0 -49
  157. package/packages/styles/reset.scss +0 -79
  158. package/packages/styles/result.scss +0 -61
  159. package/packages/styles/row.scss +0 -43
  160. package/packages/styles/scrollbar.scss +0 -72
  161. package/packages/styles/scrollbars.scss +0 -5
  162. package/packages/styles/select-dropdown.scss +0 -62
  163. package/packages/styles/select.scss +0 -152
  164. package/packages/styles/selects.scss +0 -98
  165. package/packages/styles/skeleton-item.scss +0 -84
  166. package/packages/styles/skeleton.scss +0 -40
  167. package/packages/styles/slider.scss +0 -250
  168. package/packages/styles/spinner.scss +0 -44
  169. package/packages/styles/step.scss +0 -317
  170. package/packages/styles/steps.scss +0 -20
  171. package/packages/styles/submenu.scss +0 -0
  172. package/packages/styles/switch.scss +0 -116
  173. package/packages/styles/tab-pane.scss +0 -0
  174. package/packages/styles/table-column.scss +0 -97
  175. package/packages/styles/table.scss +0 -564
  176. package/packages/styles/tables.scss +0 -45
  177. package/packages/styles/tabs.scss +0 -602
  178. package/packages/styles/tag.scss +0 -163
  179. package/packages/styles/time-picker.scss +0 -8
  180. package/packages/styles/time-select.scss +0 -37
  181. package/packages/styles/timeline-item.scss +0 -86
  182. package/packages/styles/timeline.scss +0 -14
  183. package/packages/styles/tinymce.scss +0 -43
  184. package/packages/styles/tooltip.scss +0 -141
  185. package/packages/styles/topic.scss +0 -57
  186. package/packages/styles/transfer.scss +0 -227
  187. package/packages/styles/tree.scss +0 -123
  188. package/packages/styles/upload.scss +0 -603
  189. package/packages/styles/uploadfile.scss +0 -34
  190. package/packages/styles/video.scss +0 -98
@@ -1,124 +0,0 @@
1
- <template>
2
- <div class="single">
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="fill__other">
34
- <div class="text__warning">
35
- 如果勾选考生端开启数学公式编辑器,在PC端考生答题页面,本题答题区域考生可以使用数据公式编辑器。
36
- </div>
37
- <div class="yks-mt10">
38
- <el-checkbox v-model="fromData.mathematical"
39
- >考生端开启数学公式编辑器(只适用于PC端答题)</el-checkbox
40
- >
41
- </div>
42
- </div>
43
- <div class="topic-stem__label">答案解析</div>
44
- <yks-tinymce
45
- key="description"
46
- v-model="fromData.description"
47
- :toolbar="toolbar"
48
- :plugins="plugins"
49
- :charLimit="topicDataExtent.descriptionLength || 20000"
50
- :fileParams="getFileTypes('analysis', fromData.descriptionAttrs)"
51
- :uploadFileToHwCloud="uploadFileToHwCloud"
52
- :uploadFileFunction="uploadFileFunction"
53
- menubar=""
54
- height="200px"
55
- @change="($event) => getTinymceEdit($event, 'analysis')"
56
- @delte="($event) => handleDelteAttrs($event, 'analysis', fromData.descriptionAttrs)"
57
- />
58
- </div>
59
- </template>
60
- <script>
61
- import TopicMixins from 'yks/assets/mixins/topic'
62
- import { stemItemType, shortItemType, analysisItemType } from './config'
63
-
64
- export default {
65
- name: 'YksShortanswer',
66
- mixins: [TopicMixins],
67
- methods: {
68
- /**
69
- * data 富文本数据
70
- * field 对象名
71
- * type 类型
72
- */
73
- getTinymceEdit(data, type) {
74
- switch (type) {
75
- case 'stem':
76
- data.itemAttr.type = stemItemType[data.itemAttr.type]
77
- this.fromData.itemContent = data.value
78
- if (data.itemAttr.type && data.itemAttr.content) {
79
- this.fromData.stemAttrs.push(data.itemAttr)
80
- }
81
- break
82
- case 'answer':
83
- data.itemAttr.type = shortItemType[data.itemAttr.type]
84
- this.fromData.answer = data.value
85
- if (data.itemAttr.type && data.itemAttr.content) {
86
- this.fromData.answerAttrs.push(data.itemAttr)
87
- }
88
- break
89
- case 'analysis':
90
- data.itemAttr.type = analysisItemType[data.itemAttr.type]
91
- this.fromData.description = data.value
92
-
93
- if (data.itemAttr.type && data.itemAttr.content) {
94
- this.fromData.descriptionAttrs.push(data.itemAttr)
95
- }
96
- break
97
- default:
98
- break
99
- }
100
- this.$emit('change', this.fromData)
101
- },
102
-
103
- handleDelteAttrs(data, type, list, row = {}) {
104
- const listAttrs = list
105
- listAttrs.splice(data.index, 1)
106
- switch (type) {
107
- case 'stem':
108
- this.fromData.stemAttrs = listAttrs
109
- break
110
- case 'answer':
111
- this.fromData.answerAttrs = listAttrs
112
- break
113
- case 'analysis':
114
- this.fromData.descriptionAttrs = listAttrs
115
- break
116
- default:
117
- break
118
- }
119
- this.$emit('change', this.fromData)
120
- }
121
- }
122
- }
123
- </script>
124
-
@@ -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-radio-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-radio :label="item.optionName" class="yks-w_60 yks-mr10"></el-radio>
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-radio-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: 'YksSingle',
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
- const { itemList } = this.fromData
122
- itemList.splice(index, 1)
123
- this.fromData.itemList = itemList.map((v, index) => {
124
- return {
125
- ...v,
126
- optionName: letter[index]
127
- }
128
- })
129
- this.$emit('change', this.fromData)
130
- },
131
-
132
- handleDelteAttrs(data, type, list, row = {}) {
133
- const listAttrs = list
134
- listAttrs.splice(data.index, 1)
135
- switch (type) {
136
- case 'stem':
137
- this.fromData.stemAttrs = listAttrs
138
- break
139
- case 'option':
140
- this.$set(row, 'optionAttrs', listAttrs)
141
- break
142
- case 'analysis':
143
- this.fromData.descriptionAttrs = listAttrs
144
- break
145
- default:
146
- break
147
- }
148
- this.$emit('change', this.fromData)
149
- },
150
-
151
- handleAddItem() {
152
- const { itemList } = this.fromData
153
- this.fromData.itemList.push({
154
- optionName: letter[itemList.length],
155
- content: '',
156
- optionAttrs: []
157
- })
158
-
159
- this.$emit('change', this.fromData)
160
- }
161
- }
162
- }
163
- </script>
@@ -1,8 +0,0 @@
1
- import YksUploadfile from './src/index';
2
-
3
- /* istanbul ignore next */
4
- YksUploadfile.install = function(Vue) {
5
- Vue.component(YksUploadfile.name, YksUploadfile);
6
- };
7
-
8
- export default YksUploadfile;
@@ -1,358 +0,0 @@
1
- <template>
2
- <yks-dialog
3
- :before-close="onClose"
4
- :close-on-click-modal="false"
5
- :destroy-on-close="true"
6
- :title="title"
7
- :show.sync="show"
8
- append-to-body
9
- width="600px"
10
- height="300px"
11
- @close="onClose"
12
- @sure="onSure"
13
- >
14
- <div v-if="fileData.fileType === 'recording'" class="upload-dialog yks-tc">
15
- <h1 class="dialog-title">{{ formatTimes(timestamp) }}</h1>
16
- <div class="dialog-recording yks-flex h-center" @click="onRecord">
17
- <i :class="['icon-recording', iconName]"></i>
18
- </div>
19
- <div class="yks-mt10 yks-fs-12 info">
20
- 语音录入时长限制{{ (fileData.fileSize / 60).toFixed(2) }}分钟
21
- </div>
22
- <audio
23
- ref="audioS"
24
- :src="fileSrc"
25
- class="dialog-audio"
26
- @timeupdate="onTimeupdate"
27
- ></audio>
28
- </div>
29
- <div v-else class="upload-dialog yks-tc">
30
- <Upload
31
- ref="uploadFile"
32
- drag
33
- action=""
34
- show-file-list
35
- :multiple="false"
36
- :accept="accept"
37
- :auto-upload="false"
38
- :limit="1"
39
- :on-change="beforeUpload"
40
- >
41
- <i class="el-icon-upload"></i>
42
- <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
43
- <div slot="tip" class="el-upload__tip">{{ tipsMsg }}</div>
44
- </Upload>
45
- </div>
46
- <template slot="footer">
47
- <div v-if="$slots.footer">
48
- <slot name="footer" :row="fileDataRow"> </slot>
49
- </div>
50
- <div v-else>
51
- <el-button
52
- type="primary"
53
- icon="el-icon-upload"
54
- :disabled="!fileSrc || loading"
55
- :loading="loading"
56
- @click="handleUpload"
57
- >上传文件</el-button
58
- >
59
- <el-button
60
- type="danger"
61
- icon="el-icon-delete"
62
- :disabled="!fileSrc"
63
- @click="hanleDelete"
64
- >删除文件</el-button
65
- >
66
- </div>
67
- </template>
68
- </yks-dialog>
69
- </template>
70
-
71
- <script>
72
- import { Upload, Message, MessageBox } from 'element-ui'
73
-
74
- import { formatTime } from 'yks/assets/utils/index'
75
-
76
- if (navigator.mediaDevices === undefined) {
77
- navigator.mediaDevices = {}
78
- }
79
-
80
- if (navigator.mediaDevices.getUserMedia === undefined) {
81
- navigator.mediaDevices.getUserMedia = function (constraints) {
82
- const getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia
83
- if (!getUserMedia) {
84
- return Promise.reject(new Error('getUserMedia is not implemented in this browser'))
85
- }
86
- return new Promise(function (resolve, reject) {
87
- getUserMedia.call(navigator, constraints, resolve, reject)
88
- })
89
- }
90
- }
91
-
92
- export default {
93
- name: 'YksUploadfile',
94
- components: {
95
- Upload
96
- },
97
- props: {
98
- show: {
99
- type: Boolean,
100
- default: false
101
- },
102
- title: {
103
- type: String,
104
- default: ''
105
- },
106
- /* 上传函数 */
107
- uploadFileFunction: {
108
- type: Function
109
- },
110
- /*
111
- fileType: 上传类型
112
- typeList: 文件类型
113
- fileSize: 文件大小
114
- */
115
- fileData: {
116
- type: Object,
117
- default: () => {
118
- return {}
119
- }
120
- }
121
- },
122
- data() {
123
- return {
124
- /* 录音状态 */
125
- playStatus: false,
126
-
127
- /* 播放状态 */
128
- playing: false,
129
-
130
- /* 媒体流 */
131
- mediaRecorder: null,
132
-
133
- /* 录音文件地址 */
134
- fileSrc: '',
135
-
136
- /* 录音时长 */
137
- timestamp: 0,
138
-
139
- /* 记录录音时长 */
140
- recordTimestamp: 0,
141
-
142
- /* 定时器 */
143
- interval: null,
144
-
145
- /* 文件信息 */
146
- data: null,
147
-
148
- loading: false
149
- }
150
- },
151
- computed: {
152
- accept() {
153
- const { typeList } = this.fileData
154
- if (typeList && typeList.length > 0) {
155
- return '.' + typeList.join(',.')
156
- }
157
- return ''
158
- },
159
- tipsMsg() {
160
- let msg = ''
161
- let type = ''
162
- const { typeList, fileSize } = this.fileData
163
- if (typeList && typeList.length > 0) {
164
- type = typeList.join('、')
165
- msg = `只能上传${type}文件`
166
- if (fileSize) {
167
- return `${msg},且不超过${fileSize}MB`
168
- }
169
- }
170
- if (fileSize) {
171
- msg += `文件大小不超过${fileSize}MB`
172
- }
173
- return msg
174
- },
175
- iconName() {
176
- if (this.fileSrc && !this.playing) {
177
- return 'el-icon-caret-right'
178
- }
179
- if (this.playStatus || this.playing) {
180
- return 'icon-pause'
181
- }
182
- return 'el-icon-microphone'
183
- },
184
- fileDataRow() {
185
- return this.data || {}
186
- }
187
- },
188
- watch: {
189
- timestamp(val) {
190
- if (val <= 0.2) {
191
- clearInterval(this.interval)
192
- this.playing = false
193
- this.timestamp = this.recordTimestamp
194
- }
195
- },
196
- show(val) {
197
- if (val) {
198
- this.resetData()
199
- }
200
- }
201
- },
202
- created() {
203
- console.log(this.$slots.footer)
204
- },
205
- methods: {
206
- formatTimes(value) {
207
- return formatTime(value)
208
- },
209
- resetData() {
210
- this.fileSrc = ''
211
- this.data = ''
212
- this.timestamp = 0
213
- this.recordTimestamp = 0
214
- this.playStatus = false
215
- this.playing = false
216
- },
217
-
218
- beforeUpload(file) {
219
- const name = file.name.substr(file.name.lastIndexOf('.') + 1).toLowerCase()
220
- const { typeList, fileSize } = this.fileData
221
- const isLt2M = file.size / 1024 / 1024 > fileSize
222
- const isType = typeList.includes(name)
223
- const type = typeList.join('、')
224
- if (fileSize && isLt2M) {
225
- Message.error(`上传文件大小不能超过 ${fileSize}MB!`)
226
- this.$refs.uploadFile.clearFiles()
227
- return false
228
- }
229
- if (typeList && !isType) {
230
- Message.error(`只能上传${type}文件!`)
231
- this.$refs.uploadFile.clearFiles()
232
- return false
233
- }
234
- this.fileSrc = file
235
- this.data = file
236
- return true
237
- },
238
-
239
- async handleUpload() {
240
- this.loading = true
241
- try {
242
- const data = await this.uploadFileFunction({
243
- file: this.data,
244
- fileData: this.fileData,
245
- fileSrc: this.fileSrc
246
- })
247
- this.$emit('sure', data)
248
- this.onClose()
249
- } catch (error) {
250
- console.log(error)
251
- }
252
- this.loading = false
253
- },
254
-
255
- onTimeupdate(el) {
256
- this.timestamp = this.recordTimestamp - el.target.currentTime
257
- },
258
-
259
- hanleDelete() {
260
- MessageBox.confirm('是否删除当前文件?', '提示', {
261
- confirmButtonText: '确定',
262
- cancelButtonText: '取消',
263
- type: 'warning'
264
- })
265
- .then(() => {
266
- this.fileSrc = ''
267
- this.data = ''
268
- this.timestamp = 0
269
- this.recordTimestamp = 0
270
- this.$refs.uploadFile.clearFiles()
271
- })
272
- .catch(() => {
273
- //
274
- })
275
- },
276
-
277
- /* 录音 */
278
- async onRecord() {
279
- if (this.fileSrc) {
280
- if (this.playing) {
281
- this.$refs.audioS.pause()
282
- this.playing = false
283
- } else {
284
- this.$refs.audioS.play()
285
- this.playing = true
286
- }
287
- return
288
- }
289
- try {
290
- if (this.playStatus) {
291
- this.mediaRecorder.stop()
292
- this.playStatus = false
293
- this.mediaRecorder = ''
294
- clearInterval(this.interval)
295
- this.interval = null
296
- this.recordTimestamp = this.timestamp
297
- } else {
298
- this.interval = setInterval(() => {
299
- this.timestamp += 1
300
- if (this.fileData.fileSize <= this.timestamp) {
301
- this.onRecord()
302
- }
303
- }, 1000)
304
- const audio = await navigator.mediaDevices.getUserMedia({
305
- audio: true,
306
- video: false
307
- })
308
- this.mediaRecorder = new MediaRecorder(audio)
309
- this.mediaRecorder.start()
310
- this.playStatus = true
311
- this.mediaRecorder.addEventListener('dataavailable', (el) => {
312
- this.fileSrc = URL.createObjectURL(el.data)
313
- this.data = el
314
- })
315
- }
316
- } catch (error) {
317
- const params = error
318
- this.playStatus = false
319
- this.mediaRecorder = ''
320
- clearInterval(this.interval)
321
- this.interval = null
322
- this.recordTimestamp = 0
323
- this.timestamp = 0
324
- let errorMessage
325
- switch (params.name) {
326
- case 'NotAllowedError':
327
- errorMessage = '用户拒绝,请在浏览器打开录音权限!'
328
- break
329
- case 'PermissionDeniedError':
330
- errorMessage = '用户已禁止网页调用录音设备'
331
- break
332
- case 'NotFoundError':
333
- errorMessage = '没接入录音设备'
334
- break
335
- case 'DevicesNotFoundError':
336
- errorMessage = '录音设备未找到'
337
- break
338
- case 'NotSupportedError':
339
- errorMessage = '不支持录音功能'
340
- break
341
- default:
342
- errorMessage = '录音调用错误'
343
- break
344
- }
345
- Message.error(errorMessage)
346
- }
347
- },
348
-
349
- onClose() {
350
- this.$emit('update:show', false)
351
- },
352
-
353
- onSure() {
354
- this.onClose()
355
- }
356
- }
357
- }
358
- </script>
@@ -1,8 +0,0 @@
1
- import YksVideo from './src/index';
2
-
3
- /* istanbul ignore next */
4
- YksVideo.install = function(Vue) {
5
- Vue.component(YksVideo.name, YksVideo);
6
- };
7
-
8
- export default YksVideo;