yks-element 1.0.0 → 1.0.4

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 (308) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +49 -4
  3. package/lib/theme-chalk/alert.css +1 -0
  4. package/lib/theme-chalk/aside.css +1 -0
  5. package/lib/theme-chalk/autocomplete.css +1 -0
  6. package/lib/theme-chalk/avatar.css +1 -0
  7. package/lib/theme-chalk/backtop.css +1 -0
  8. package/lib/theme-chalk/badge.css +1 -0
  9. package/lib/theme-chalk/base.css +1 -0
  10. package/lib/theme-chalk/breadcrumb-item.css +0 -0
  11. package/lib/theme-chalk/breadcrumb.css +1 -0
  12. package/lib/theme-chalk/button-group.css +0 -0
  13. package/lib/theme-chalk/button.css +1 -0
  14. package/lib/theme-chalk/buttons.css +1 -0
  15. package/lib/theme-chalk/calendar.css +1 -0
  16. package/lib/theme-chalk/card.css +1 -0
  17. package/lib/theme-chalk/carousel-item.css +1 -0
  18. package/lib/theme-chalk/carousel.css +1 -0
  19. package/lib/theme-chalk/cascader-panel.css +1 -0
  20. package/lib/theme-chalk/cascader.css +1 -0
  21. package/lib/theme-chalk/checkbox-button.css +0 -0
  22. package/lib/theme-chalk/checkbox-group.css +0 -0
  23. package/lib/theme-chalk/checkbox.css +1 -0
  24. package/lib/theme-chalk/col.css +1 -0
  25. package/lib/theme-chalk/collapse-item.css +0 -0
  26. package/lib/theme-chalk/collapse.css +1 -0
  27. package/lib/theme-chalk/color-picker.css +1 -0
  28. package/lib/theme-chalk/common.css +1 -0
  29. package/lib/theme-chalk/container.css +1 -0
  30. package/lib/theme-chalk/date-picker.css +1 -0
  31. package/lib/theme-chalk/descriptions-item.css +1 -0
  32. package/lib/theme-chalk/descriptions.css +1 -0
  33. package/lib/theme-chalk/dialog.css +1 -0
  34. package/lib/theme-chalk/display.css +1 -0
  35. package/lib/theme-chalk/divider.css +1 -0
  36. package/lib/theme-chalk/drawer.css +1 -0
  37. package/lib/theme-chalk/dropdown-item.css +0 -0
  38. package/lib/theme-chalk/dropdown-menu.css +0 -0
  39. package/lib/theme-chalk/dropdown.css +1 -0
  40. package/lib/theme-chalk/element-ui.css +1 -0
  41. package/lib/theme-chalk/element-variables.css +0 -0
  42. package/lib/theme-chalk/element.css +1 -0
  43. package/lib/theme-chalk/empty.css +1 -0
  44. package/{dist/fonts/element-icons.732389de.ttf → lib/theme-chalk/fonts/element-icons.ttf} +0 -0
  45. package/{dist/fonts/element-icons.535877f5.woff → lib/theme-chalk/fonts/element-icons.woff} +0 -0
  46. package/lib/theme-chalk/fonts/iconfont.ttf +0 -0
  47. package/lib/theme-chalk/fonts/iconfont.woff +0 -0
  48. package/lib/theme-chalk/footer.css +1 -0
  49. package/lib/theme-chalk/form-item.css +0 -0
  50. package/lib/theme-chalk/form.css +1 -0
  51. package/lib/theme-chalk/header.css +1 -0
  52. package/lib/theme-chalk/icon.css +1 -0
  53. package/lib/theme-chalk/icons.css +1 -0
  54. package/lib/theme-chalk/image.css +1 -0
  55. package/lib/theme-chalk/index.css +1 -0
  56. package/lib/theme-chalk/infinite-scroll.css +0 -0
  57. package/lib/theme-chalk/infiniteScroll.css +0 -0
  58. package/lib/theme-chalk/input-number.css +1 -0
  59. package/lib/theme-chalk/input.css +1 -0
  60. package/lib/theme-chalk/link.css +1 -0
  61. package/lib/theme-chalk/loading.css +1 -0
  62. package/lib/theme-chalk/main.css +1 -0
  63. package/lib/theme-chalk/menu-item-group.css +0 -0
  64. package/lib/theme-chalk/menu-item.css +0 -0
  65. package/lib/theme-chalk/menu.css +1 -0
  66. package/lib/theme-chalk/message-box.css +1 -0
  67. package/lib/theme-chalk/message.css +1 -0
  68. package/lib/theme-chalk/multimedia.css +1 -0
  69. package/lib/theme-chalk/notification.css +1 -0
  70. package/lib/theme-chalk/option-group.css +1 -0
  71. package/lib/theme-chalk/option.css +1 -0
  72. package/lib/theme-chalk/page-header.css +1 -0
  73. package/lib/theme-chalk/pagination.css +1 -0
  74. package/lib/theme-chalk/paginations.css +1 -0
  75. package/lib/theme-chalk/popconfirm.css +1 -0
  76. package/lib/theme-chalk/popover.css +1 -0
  77. package/lib/theme-chalk/popper.css +1 -0
  78. package/lib/theme-chalk/progress.css +1 -0
  79. package/lib/theme-chalk/radio-button.css +1 -0
  80. package/lib/theme-chalk/radio-group.css +1 -0
  81. package/lib/theme-chalk/radio.css +1 -0
  82. package/lib/theme-chalk/rate.css +1 -0
  83. package/lib/theme-chalk/reset.css +1 -0
  84. package/lib/theme-chalk/result.css +1 -0
  85. package/lib/theme-chalk/row.css +1 -0
  86. package/lib/theme-chalk/scrollbar.css +1 -0
  87. package/lib/theme-chalk/scrollbars.css +1 -0
  88. package/lib/theme-chalk/select-dropdown.css +1 -0
  89. package/lib/theme-chalk/select.css +1 -0
  90. package/lib/theme-chalk/selects.css +1 -0
  91. package/lib/theme-chalk/skeleton-item.css +1 -0
  92. package/lib/theme-chalk/skeleton.css +1 -0
  93. package/lib/theme-chalk/slider.css +1 -0
  94. package/lib/theme-chalk/spinner.css +1 -0
  95. package/lib/theme-chalk/step.css +1 -0
  96. package/lib/theme-chalk/steps.css +1 -0
  97. package/lib/theme-chalk/submenu.css +0 -0
  98. package/lib/theme-chalk/switch.css +1 -0
  99. package/lib/theme-chalk/tab-pane.css +0 -0
  100. package/lib/theme-chalk/table-column.css +1 -0
  101. package/lib/theme-chalk/table.css +1 -0
  102. package/lib/theme-chalk/tables.css +1 -0
  103. package/lib/theme-chalk/tabs.css +1 -0
  104. package/lib/theme-chalk/tag.css +1 -0
  105. package/lib/theme-chalk/time-picker.css +1 -0
  106. package/lib/theme-chalk/time-select.css +1 -0
  107. package/lib/theme-chalk/timeline-item.css +1 -0
  108. package/lib/theme-chalk/timeline.css +1 -0
  109. package/lib/theme-chalk/tinymce.css +1 -0
  110. package/lib/theme-chalk/tooltip.css +1 -0
  111. package/lib/theme-chalk/topic.css +1 -0
  112. package/lib/theme-chalk/transfer.css +1 -0
  113. package/lib/theme-chalk/tree.css +1 -0
  114. package/lib/theme-chalk/upload.css +1 -0
  115. package/lib/theme-chalk/uploadfile.css +1 -0
  116. package/lib/theme-chalk/video.css +1 -0
  117. package/lib/yks.js +1 -0
  118. package/package.json +101 -51
  119. package/packages/Dialog/index.js +8 -0
  120. package/packages/Dialog/src/index.vue +89 -0
  121. package/packages/Multimedia/index.js +8 -0
  122. package/packages/Multimedia/src/index.vue +136 -0
  123. package/packages/Pagination/index.js +8 -0
  124. package/packages/Pagination/src/index.vue +111 -0
  125. package/packages/Scrollbar/index.js +8 -0
  126. package/packages/Scrollbar/src/index.vue +20 -0
  127. package/packages/Select/index.js +8 -0
  128. package/packages/Select/src/index.vue +350 -0
  129. package/packages/Select/src/option.vue +29 -0
  130. package/packages/Table/index.js +8 -0
  131. package/packages/Table/src/index.vue +141 -0
  132. package/packages/Tinymce/index.js +8 -0
  133. package/packages/Tinymce/src/config.js +25 -0
  134. package/packages/Tinymce/src/index.vue +450 -0
  135. package/packages/Topic/index.js +23 -0
  136. package/packages/Topic/src/attachment.vue +114 -0
  137. package/packages/Topic/src/audioFrequency.vue +114 -0
  138. package/packages/Topic/src/clozeFillInBlanks.vue +237 -0
  139. package/packages/Topic/src/compound.vue +191 -0
  140. package/packages/Topic/src/config.js +132 -0
  141. package/packages/Topic/src/fillInBlanks.vue +242 -0
  142. package/packages/Topic/src/indefiniteChoice.vue +0 -0
  143. package/packages/Topic/src/judgment.vue +110 -0
  144. package/packages/Topic/src/matching.vue +0 -0
  145. package/packages/Topic/src/multiple.vue +163 -0
  146. package/packages/Topic/src/pictureAnswer.vue +113 -0
  147. package/packages/Topic/src/shortAnswer.vue +124 -0
  148. package/packages/Topic/src/single.vue +163 -0
  149. package/packages/UploadFile/index.js +8 -0
  150. package/packages/UploadFile/src/index.vue +358 -0
  151. package/packages/Video/index.js +8 -0
  152. package/packages/Video/src/index.vue +204 -0
  153. package/packages/assets/mixins/topic.js +137 -0
  154. package/packages/assets/utils/index.js +83 -0
  155. package/packages/assets/utils/topic.js +132 -0
  156. package/packages/icon/default/icons.js +182 -0
  157. package/packages/icon/default/icons.min.js +1 -0
  158. package/packages/icon/default/index.js +7 -0
  159. package/packages/icon/ks-pdf.png +0 -0
  160. package/packages/icon/ks-ppt.png +0 -0
  161. package/packages/icon/ks-word.png +0 -0
  162. package/packages/icon/ks-xslx.png +0 -0
  163. package/packages/icon/music-bg.png +0 -0
  164. package/packages/icon/video-bg.png +0 -0
  165. package/packages/index.js +221 -0
  166. package/packages/option/index.js +6 -0
  167. package/packages/styles/_mixin.scss +93 -0
  168. package/packages/styles/_variables.scss +40 -0
  169. package/packages/styles/alert.scss +147 -0
  170. package/packages/styles/aside.scss +7 -0
  171. package/packages/styles/autocomplete.scss +80 -0
  172. package/packages/styles/avatar.scss +51 -0
  173. package/packages/styles/backtop.scss +22 -0
  174. package/packages/styles/badge.scss +57 -0
  175. package/packages/styles/base.scss +2 -0
  176. package/packages/styles/breadcrumb-item.scss +0 -0
  177. package/packages/styles/breadcrumb.scss +55 -0
  178. package/packages/styles/button-group.scss +0 -0
  179. package/packages/styles/button.scss +262 -0
  180. package/packages/styles/buttons.scss +59 -0
  181. package/packages/styles/calendar.scss +79 -0
  182. package/packages/styles/card.scss +32 -0
  183. package/packages/styles/carousel-item.scss +50 -0
  184. package/packages/styles/carousel.scss +161 -0
  185. package/packages/styles/cascader-panel.scss +120 -0
  186. package/packages/styles/cascader.scss +182 -0
  187. package/packages/styles/checkbox-button.scss +0 -0
  188. package/packages/styles/checkbox-group.scss +0 -0
  189. package/packages/styles/checkbox.scss +359 -0
  190. package/packages/styles/col.scss +156 -0
  191. package/packages/styles/collapse-item.scss +0 -0
  192. package/packages/styles/collapse.scss +63 -0
  193. package/packages/styles/color-picker.scss +384 -0
  194. package/packages/styles/common/popup.scss +42 -0
  195. package/packages/styles/common/transition.scss +99 -0
  196. package/packages/styles/common/var.scss +1028 -0
  197. package/packages/styles/common.scss +204 -0
  198. package/packages/styles/container.scss +14 -0
  199. package/packages/styles/date-picker/date-picker.scss +97 -0
  200. package/packages/styles/date-picker/date-range-picker.scss +101 -0
  201. package/packages/styles/date-picker/date-table.scss +151 -0
  202. package/packages/styles/date-picker/month-table.scss +82 -0
  203. package/packages/styles/date-picker/picker-panel.scss +117 -0
  204. package/packages/styles/date-picker/picker.scss +197 -0
  205. package/packages/styles/date-picker/time-picker.scss +85 -0
  206. package/packages/styles/date-picker/time-range-picker.scss +31 -0
  207. package/packages/styles/date-picker/time-spinner.scss +110 -0
  208. package/packages/styles/date-picker/year-table.scss +51 -0
  209. package/packages/styles/date-picker.scss +12 -0
  210. package/packages/styles/descriptions-item.scss +42 -0
  211. package/packages/styles/descriptions.scss +111 -0
  212. package/packages/styles/dialog.scss +123 -0
  213. package/packages/styles/display.scss +12 -0
  214. package/packages/styles/divider.scss +47 -0
  215. package/packages/styles/drawer.scss +219 -0
  216. package/packages/styles/dropdown-item.scss +0 -0
  217. package/packages/styles/dropdown-menu.scss +0 -0
  218. package/packages/styles/dropdown.scss +182 -0
  219. package/packages/styles/element-ui.scss +135 -0
  220. package/packages/styles/element-variables.scss +794 -0
  221. package/packages/styles/element.scss +86 -0
  222. package/packages/styles/empty.scss +45 -0
  223. package/packages/styles/fonts/element-icons.ttf +0 -0
  224. package/packages/styles/fonts/element-icons.woff +0 -0
  225. package/packages/styles/fonts/iconfont.ttf +0 -0
  226. package/packages/styles/fonts/iconfont.woff +0 -0
  227. package/packages/styles/footer.scss +8 -0
  228. package/packages/styles/form-item.scss +0 -0
  229. package/packages/styles/form.scss +167 -0
  230. package/packages/styles/header.scss +8 -0
  231. package/packages/styles/icon.scss +1167 -0
  232. package/packages/styles/icons.scss +69 -0
  233. package/packages/styles/image.scss +179 -0
  234. package/packages/styles/index.scss +18 -0
  235. package/packages/styles/infinite-scroll.scss +0 -0
  236. package/packages/styles/infiniteScroll.scss +0 -0
  237. package/packages/styles/input-number.scss +180 -0
  238. package/packages/styles/input.scss +360 -0
  239. package/packages/styles/link.scss +81 -0
  240. package/packages/styles/loading.scss +96 -0
  241. package/packages/styles/main.scss +12 -0
  242. package/packages/styles/menu-item-group.scss +0 -0
  243. package/packages/styles/menu-item.scss +0 -0
  244. package/packages/styles/menu.scss +289 -0
  245. package/packages/styles/message-box.scss +226 -0
  246. package/packages/styles/message.scss +120 -0
  247. package/packages/styles/mixins/_button.scss +81 -0
  248. package/packages/styles/mixins/config.scss +4 -0
  249. package/packages/styles/mixins/function.scss +44 -0
  250. package/packages/styles/mixins/mixins.scss +190 -0
  251. package/packages/styles/mixins/utils.scss +39 -0
  252. package/packages/styles/multimedia.scss +58 -0
  253. package/packages/styles/notification.scss +99 -0
  254. package/packages/styles/option-group.scss +42 -0
  255. package/packages/styles/option.scss +36 -0
  256. package/packages/styles/page-header.scss +41 -0
  257. package/packages/styles/pagination.scss +295 -0
  258. package/packages/styles/paginations.scss +33 -0
  259. package/packages/styles/popconfirm.scss +16 -0
  260. package/packages/styles/popover.scss +40 -0
  261. package/packages/styles/popper.scss +101 -0
  262. package/packages/styles/progress.scss +141 -0
  263. package/packages/styles/radio-button.scss +113 -0
  264. package/packages/styles/radio-group.scss +9 -0
  265. package/packages/styles/radio.scss +199 -0
  266. package/packages/styles/rate.scss +49 -0
  267. package/packages/styles/reset.scss +79 -0
  268. package/packages/styles/result.scss +61 -0
  269. package/packages/styles/row.scss +43 -0
  270. package/packages/styles/scrollbar.scss +72 -0
  271. package/packages/styles/scrollbars.scss +5 -0
  272. package/packages/styles/select-dropdown.scss +62 -0
  273. package/packages/styles/select.scss +152 -0
  274. package/packages/styles/selects.scss +98 -0
  275. package/packages/styles/skeleton-item.scss +84 -0
  276. package/packages/styles/skeleton.scss +40 -0
  277. package/packages/styles/slider.scss +250 -0
  278. package/packages/styles/spinner.scss +44 -0
  279. package/packages/styles/step.scss +317 -0
  280. package/packages/styles/steps.scss +20 -0
  281. package/packages/styles/submenu.scss +0 -0
  282. package/packages/styles/switch.scss +116 -0
  283. package/packages/styles/tab-pane.scss +0 -0
  284. package/packages/styles/table-column.scss +97 -0
  285. package/packages/styles/table.scss +564 -0
  286. package/packages/styles/tables.scss +45 -0
  287. package/packages/styles/tabs.scss +602 -0
  288. package/packages/styles/tag.scss +163 -0
  289. package/packages/styles/time-picker.scss +8 -0
  290. package/packages/styles/time-select.scss +37 -0
  291. package/packages/styles/timeline-item.scss +86 -0
  292. package/packages/styles/timeline.scss +14 -0
  293. package/packages/styles/tinymce.scss +43 -0
  294. package/packages/styles/tooltip.scss +141 -0
  295. package/packages/styles/topic.scss +57 -0
  296. package/packages/styles/transfer.scss +227 -0
  297. package/packages/styles/tree.scss +123 -0
  298. package/packages/styles/upload.scss +603 -0
  299. package/packages/styles/uploadfile.scss +34 -0
  300. package/packages/styles/video.scss +98 -0
  301. package/types/index.d.ts +4 -0
  302. package/dist/demo.html +0 -10
  303. package/dist/yks.common.js +0 -64801
  304. package/dist/yks.css +0 -1
  305. package/dist/yks.umd.js +0 -64811
  306. package/dist/yks.umd.min.js +0 -15
  307. package/packages/button/index.vue +0 -16
  308. package/packages/index.ts +0 -12
@@ -0,0 +1,204 @@
1
+ <template>
2
+ <div class="yks-multimedia__video">
3
+ <div
4
+ class="yks-stem__videos yks-flex h-center v-center"
5
+ :class="{ 'yks-dialog-pause': playing }"
6
+ >
7
+ <video
8
+ :ref="videoId"
9
+ :width="width"
10
+ :height="height"
11
+ :src="src"
12
+ :poster="musicBgs"
13
+ playsinline
14
+ webkit-playsinline
15
+ preload="auto"
16
+ class="yks-file__videos"
17
+ @timeupdate="durationUpdate"
18
+ @canplay="getDuration"
19
+ ></video>
20
+ <div v-if="!isInfinity" class="yks-slider-video">
21
+ <i class="el-icon-video-pause video-icon_mini" @click.stop="handlePause"></i>
22
+ <Slider
23
+ v-model="musicDuration"
24
+ :max="musicAllDuration"
25
+ height="2px"
26
+ :show-tooltip="false"
27
+ class="slider__value"
28
+ @change="changeMusicDuration"
29
+ @mousedown.native="isChange = true"
30
+ @mouseup.native="isChange = false"
31
+ ></Slider>
32
+ <span class="slider__text video-icon_mini">{{ formatTime(musicAllDuration) }}</span>
33
+ <i
34
+ v-if="fileType === '3'"
35
+ class="el-icon-full-screen video-icon_mini"
36
+ @click.stop="handleFullScreen"
37
+ ></i>
38
+ </div>
39
+ <div
40
+ v-if="!playing || isInfinity"
41
+ class="yks-dialog-playing yks-flex h-center v-center"
42
+ @click.stop="handlePlaying"
43
+ >
44
+ <i :class="[`yks-icon-recording ${playingIcon}`]"></i>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ </template>
49
+ <script>
50
+ import videoBg from 'yks/icon/video-bg.png'
51
+ import musicBg1 from 'yks/icon/music-bg.png'
52
+ import { Slider } from 'element-ui'
53
+ import { formatTimeMin } from 'yks/assets/utils/index'
54
+ export default {
55
+ name: 'YksVideo',
56
+ components: {
57
+ Slider
58
+ },
59
+ props: {
60
+ src: { type: String, require: true },
61
+ width: { type: Number, default: 160 },
62
+ height: { type: Number, default: 90 }
63
+ },
64
+ data() {
65
+ return {
66
+ /* 播放状态 */
67
+ playing: false,
68
+ /* 歌曲总时长 */
69
+ musicAllDuration: 0,
70
+ /* 歌曲当前时长 */
71
+ musicDuration: 0,
72
+ /* 判断是否被拖动 */
73
+ isChange: false,
74
+ /* 判断是否为Infinity */
75
+ isInfinity: false
76
+ }
77
+ },
78
+ computed: {
79
+ playingIcon() {
80
+ if (this.playing) {
81
+ return 'el-icon-video-pause'
82
+ } else {
83
+ return 'el-icon-video-play'
84
+ }
85
+ },
86
+ /* 播放背景图 */
87
+ musicBgs() {
88
+ if (this.fileType === '3') {
89
+ return videoBg
90
+ }
91
+ if (this.playing) {
92
+ return 'https://pub-static.yks365.net/assets/image/music-bg.gif'
93
+ } else {
94
+ return musicBg1
95
+ }
96
+ },
97
+ /* 获取文件后缀 */
98
+ fileNameType() {
99
+ const url = this.src
100
+ return url.substr(url.lastIndexOf('.') + 1).toLowerCase()
101
+ },
102
+ /* 获取文件类型 */
103
+ fileType() {
104
+ if (['mp3'].includes(this.fileNameType)) {
105
+ return '2'
106
+ }
107
+ if (['mp4'].includes(this.fileNameType)) {
108
+ return '3'
109
+ }
110
+ return false
111
+ },
112
+ /* 播放图标 */
113
+ iconName() {
114
+ if (!this.playing) {
115
+ return 'el-icon-video-play'
116
+ } else {
117
+ return 'el-icon-video-pause'
118
+ }
119
+ },
120
+ /* 组件key */
121
+ videoId() {
122
+ return `video${Date.now()}${(Math.random() * 1000).toFixed(0)}`
123
+ }
124
+ },
125
+ created() {
126
+ /* 监听播放状态 */
127
+ this.$nextTick(() => {
128
+ if (this.fileType === '2' || this.fileType === '3') {
129
+ const video = this.$refs[this.videoId]
130
+ video.addEventListener('play', () => {
131
+ this.playing = true
132
+ })
133
+ video.addEventListener('pause', () => {
134
+ this.playing = false
135
+ })
136
+ }
137
+ })
138
+ },
139
+ methods: {
140
+ handleFullScreen() {
141
+ const video = this.$refs[this.videoId]
142
+ const requestMethod =
143
+ video.requestFullScreen ||
144
+ video.webkitRequestFullScreen ||
145
+ video.mozRequestFullScreen ||
146
+ video.msRequestFullScreen
147
+ if (requestMethod) {
148
+ requestMethod.call(video)
149
+ } else if (typeof window.ActiveXObject !== 'undefined') {
150
+ // eslint-disable-next-line no-undef
151
+ const wscript = new ActiveXObject('WScript.Shell')
152
+ if (wscript !== null) {
153
+ wscript.SendKeys('{F11}')
154
+ }
155
+ }
156
+ },
157
+ /* 进度时间转换 */
158
+ formatTime(time) {
159
+ return formatTimeMin(time)
160
+ },
161
+ /* 进度条时间定位 */
162
+ changeMusicDuration() {
163
+ if (this.musicAllDuration !== 0) {
164
+ const video = this.$refs[this.videoId]
165
+ video.currentTime = this.musicDuration
166
+ }
167
+ },
168
+ /* 获取音视频时长 */
169
+ getDuration() {
170
+ const video = this.$refs[this.videoId]
171
+
172
+ if (!Number.isFinite(video.duration)) {
173
+ this.musicAllDuration = 300
174
+ this.isInfinity = true
175
+ } else {
176
+ this.isInfinity = false
177
+ this.musicAllDuration = video.duration
178
+ }
179
+ },
180
+ /* 获取音视频播放当前时间 */
181
+ durationUpdate() {
182
+ if (!this.isChange) {
183
+ const video = this.$refs[this.videoId]
184
+ this.musicDuration = video.currentTime
185
+ }
186
+ },
187
+ /* 播放 */
188
+ handlePlaying() {
189
+ if (!this.playing) {
190
+ this.$refs[this.videoId].play()
191
+ } else {
192
+ this.handlePause()
193
+ }
194
+ },
195
+ /* 暂停 */
196
+ handlePause() {
197
+ if (this.playing) {
198
+ this.$refs[this.videoId].pause()
199
+ }
200
+ }
201
+ }
202
+ }
203
+ </script>
204
+
@@ -0,0 +1,137 @@
1
+ import { toolbar, plugins, toolbarSpare } from '../utils/topic'
2
+
3
+ export default {
4
+ model: {
5
+ prop: 'fromData',
6
+ event: 'change'
7
+ },
8
+ props: {
9
+ topicDataExtent: {
10
+ type: Object,
11
+ default: () => {
12
+ return {}
13
+ }
14
+ },
15
+ uploadFileCloud: {
16
+ required: true,
17
+ type: Function
18
+ },
19
+ fromData: {
20
+ required: true,
21
+ type: Object,
22
+ default: () => {
23
+ return {}
24
+ }
25
+ }
26
+ },
27
+ data() {
28
+ return {
29
+ pageLoading: false,
30
+ processing: false,
31
+ toolbar: toolbar,
32
+ toolbarSpare: toolbarSpare,
33
+ plugins: plugins,
34
+ topic: {
35
+ single: '单项选择题',
36
+ multiple: '多项选择题',
37
+ judgment: '判断题',
38
+ short_answer: '简答题'
39
+ }
40
+ }
41
+ },
42
+ methods: {
43
+ /**
44
+ * 获取题类型
45
+ * @param {string} type
46
+ * @return {Object}
47
+ */
48
+ getFileType(type, data) {
49
+ if (data) {
50
+ let params = {}
51
+ switch (type) {
52
+ case 'stem':
53
+ params = {
54
+ stem_voiceRecord: 'recording',
55
+ stem_video: 'video',
56
+ stem_audio: 'audio',
57
+ stem_document: 'file'
58
+ }
59
+ break
60
+ case 'answer':
61
+ params = {
62
+ answer_voiceRecord: 'recording',
63
+ answer_video: 'video',
64
+ answer_audio: 'audio',
65
+ answer_document: 'file'
66
+ }
67
+ break
68
+ case 'option':
69
+ params = {
70
+ option_voiceRecord: 'recording',
71
+ option_video: 'video',
72
+ option_audio: 'audio',
73
+ option_document: 'file'
74
+ }
75
+ break
76
+ case 'analysis':
77
+ params = {
78
+ description_voiceRecord: 'recording',
79
+ description_video: 'video',
80
+ description_audio: 'audio',
81
+ description_document: 'file'
82
+ }
83
+ break
84
+ }
85
+ const fileType = params[data.type]
86
+
87
+ return {
88
+ ...data,
89
+ fileType
90
+ }
91
+ }
92
+ return false
93
+ },
94
+ getFileTypes(type, list) {
95
+ return (list || []).map((v) => this.getFileType(type, v))
96
+ },
97
+ async uploadFileToHwCloud(file) {
98
+ try {
99
+ const fileData = new FormData()
100
+ fileData.append('fileType', 'stem')
101
+ fileData.append('file', file.blob())
102
+ const { data, code } = await this.uploadFileCloud(fileData)
103
+ if (code === 20000) {
104
+ return data
105
+ } else {
106
+ return ''
107
+ }
108
+ } catch (error) {
109
+ console.log(error)
110
+ return ''
111
+ }
112
+ },
113
+ async uploadFileFunction({ file, fileData }) {
114
+ try {
115
+ const fileDatas = new FormData()
116
+ if (fileData.fileType === 'recording') {
117
+ const fileNmae = Date.now() + '.mp3'
118
+ const files = new File([file.data], fileNmae)
119
+ fileDatas.append('fileType', 'multimediaFile')
120
+ fileDatas.append('file', files)
121
+ } else {
122
+ fileDatas.append('fileType', 'multimediaFile')
123
+ fileDatas.append('file', file.raw)
124
+ }
125
+ const { data, code } = await this.uploadFileCloud(fileDatas)
126
+ if (code === 20000) {
127
+ return data
128
+ } else {
129
+ return Promise.reject(new Error('出错了'))
130
+ }
131
+ } catch (error) {
132
+ console.log(error)
133
+ return Promise.reject(error)
134
+ }
135
+ }
136
+ }
137
+ }
@@ -0,0 +1,83 @@
1
+
2
+ /**
3
+ * @param {string} time
4
+ * @returns {string}
5
+ */
6
+ export function formatTime(time) {
7
+ if (!time) {
8
+ return '00:00:00'
9
+ }
10
+ const value = parseInt(time, 10)
11
+ let HH
12
+ let MM
13
+ let SS
14
+ switch (true) {
15
+ case value < 60:
16
+ if (value < 10) {
17
+ SS = '0' + value
18
+ } else {
19
+ SS = value
20
+ }
21
+ return `00:00:${SS}`
22
+ case value >= 60 && value < 3600:
23
+ MM = parseInt((value / 60).toString(), 10)
24
+ SS = parseInt((value % 60).toString(), 10)
25
+ if (MM < 10) {
26
+ MM = '0' + MM
27
+ }
28
+ if (SS < 10) {
29
+ SS = '0' + SS
30
+ }
31
+ return `00:${MM}:${SS}`
32
+ case value >= 3600:
33
+ HH = parseInt((value / 3600).toString(), 10)
34
+ MM = parseInt((value / 60).toString(), 10) - HH * 60
35
+ SS = parseInt((value % 60).toString(), 10)
36
+ if (SS < 10) {
37
+ SS = '0' + SS
38
+ }
39
+ if (MM < 10) {
40
+ MM = '0' + MM
41
+ }
42
+ if (SS < 10) {
43
+ SS = '0' + SS
44
+ }
45
+ return `${HH}:${MM}:${SS}`
46
+ default:
47
+ throw new Error('Val data is abnormal, please check the data!')
48
+ }
49
+ }
50
+
51
+ /**
52
+ * @param {string} time
53
+ * @returns {string}
54
+ */
55
+ export function formatTimeMin(time) {
56
+ if (!time) {
57
+ return '00:00'
58
+ }
59
+ const value = parseInt(time, 10)
60
+ let MM
61
+ let SS
62
+ switch (true) {
63
+ case value < 60:
64
+ if (value < 10) {
65
+ SS = '0' + value
66
+ } else {
67
+ SS = value
68
+ }
69
+ return `00:${SS}`
70
+ case value >= 60:
71
+ MM = parseInt((value / 60).toString(), 10)
72
+ SS = parseInt((value % 60).toString(), 10)
73
+ if (MM < 10) {
74
+ MM = '0' + MM
75
+ }
76
+ if (SS < 10) {
77
+ SS = '0' + SS
78
+ }
79
+ return `${MM}:${SS}`
80
+ default:
81
+ throw new Error('Val data is abnormal, please check the data!')
82
+ }
83
+ }
@@ -0,0 +1,132 @@
1
+ /**
2
+ * uploadRecording 录音
3
+ * uploadVideo 视频
4
+ * uploadAudio 音频
5
+ * uploadFile 文件
6
+ */
7
+
8
+ export const toolbar = [
9
+ 'bold underline italic strikethrough | kityformula-editor subscript superscript charmap | link image | table | removeformat | uploadRecording uploadVideo uploadAudio uploadFile'
10
+ ]
11
+
12
+ /* 选项、填空等 */
13
+ export const toolbarSpare = ['kityformula-editor subscript superscript charmap']
14
+
15
+ /* 插件 */
16
+ export const plugins = ['kityformula-editor powerpaste lists image media table charmap imagetools']
17
+
18
+ /* 选项字符 */
19
+ export const letter = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']
20
+
21
+ /* 自定义添加菜单项(录音、上传视频、上传音乐、上传文件):题干 / 标题 - 类型 */
22
+ export const stemItemType = {
23
+ recording: 'stem_voiceRecord',
24
+ video: 'stem_video',
25
+ audio: 'stem_audio',
26
+ file: 'stem_document'
27
+ }
28
+
29
+ /* 自定义添加菜单项(录音、上传视频、上传音乐、上传文件): 标准答案 - 类型 */
30
+ export const shortItemType = {
31
+ recording: 'answer_voiceRecord',
32
+ video: 'answer_video',
33
+ audio: 'answer_audio',
34
+ file: 'answer_document'
35
+ }
36
+
37
+ /* 自定义添加菜单项(录音、上传视频、上传音乐、上传文件): 选项 - 类型 */
38
+ export const optionItemType = {
39
+ recording: 'option_voiceRecord',
40
+ video: 'option_video',
41
+ audio: 'option_audio',
42
+ file: 'option_document'
43
+ }
44
+
45
+ /* 自定义添加菜单项(录音、上传视频、上传音乐、上传文件): 答案解析 - 类型 */
46
+ export const analysisItemType = {
47
+ recording: 'description_voiceRecord',
48
+ video: 'description_video',
49
+ audio: 'description_audio',
50
+ file: 'description_document'
51
+ }
52
+
53
+ /**
54
+ * 获取题类型
55
+ * @param {string} type
56
+ * @return {Object}
57
+ */
58
+ export const getFileType = (type, data) => {
59
+ if (data) {
60
+ let params = {}
61
+ switch (type) {
62
+ case 'stem':
63
+ params = {
64
+ stem_voiceRecord: 'recording',
65
+ stem_video: 'video',
66
+ stem_audio: 'audio',
67
+ stem_document: 'file'
68
+ }
69
+ break
70
+ case 'answer':
71
+ params = {
72
+ answer_voiceRecord: 'recording',
73
+ answer_video: 'video',
74
+ answer_audio: 'audio',
75
+ answer_document: 'file'
76
+ }
77
+ break
78
+ case 'option':
79
+ params = {
80
+ option_voiceRecord: 'recording',
81
+ option_video: 'video',
82
+ option_audio: 'audio',
83
+ option_document: 'file'
84
+ }
85
+ break
86
+ case 'analysis':
87
+ params = {
88
+ description_voiceRecord: 'recording',
89
+ description_video: 'video',
90
+ description_audio: 'audio',
91
+ description_document: 'file'
92
+ }
93
+ break
94
+ }
95
+ const fileType = params[data.type]
96
+
97
+ return {
98
+ ...data,
99
+ fileType
100
+ }
101
+ }
102
+ return false
103
+ }
104
+
105
+ export const itemDataLists = () => {
106
+ return [
107
+ {
108
+ optionName: 'A',
109
+ content: '',
110
+ optionAttrs: [],
111
+ score: ''
112
+ },
113
+ {
114
+ optionName: 'B',
115
+ content: '',
116
+ optionAttrs: [],
117
+ score: ''
118
+ },
119
+ {
120
+ optionName: 'C',
121
+ content: '',
122
+ optionAttrs: [],
123
+ score: ''
124
+ },
125
+ {
126
+ optionName: 'D',
127
+ content: '',
128
+ optionAttrs: [],
129
+ score: ''
130
+ }
131
+ ]
132
+ }