@ebiz/designer-components 0.1.62 → 0.1.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/designer-components.css +1 -1
- package/dist/index.mjs +13618 -13230
- package/package.json +1 -1
- package/src/components/EbizVideo.vue +554 -0
- package/src/components/senior/EbizSDialog/index.vue +7 -15
- package/src/components/senior/EbizSForm/item.vue +44 -2
- package/src/index.js +4 -1
- package/src/router/index.js +8 -3
- package/src/views/Home.vue +3 -2
- package/src/views/VideoDemo.vue +246 -0
package/src/index.js
CHANGED
|
@@ -101,6 +101,7 @@ import EbizDetailView from './components/EbizDetailView.vue'
|
|
|
101
101
|
import EbizDetailItem from './components/EbizDetailItem.vue'
|
|
102
102
|
import EbizPdfViewer from './components/EbizPdfViewer.vue'
|
|
103
103
|
import EbizRichTextEditor from './components/EbizRichTextEditor.vue'
|
|
104
|
+
import EbizVideo from './components/EbizVideo.vue'
|
|
104
105
|
|
|
105
106
|
// 导出组件
|
|
106
107
|
export {
|
|
@@ -245,5 +246,7 @@ export {
|
|
|
245
246
|
// PDF预览组件
|
|
246
247
|
EbizPdfViewer,
|
|
247
248
|
// 富文本编辑器组件
|
|
248
|
-
EbizRichTextEditor
|
|
249
|
+
EbizRichTextEditor,
|
|
250
|
+
// 视频播放器组件
|
|
251
|
+
EbizVideo
|
|
249
252
|
}
|
package/src/router/index.js
CHANGED
|
@@ -395,11 +395,16 @@ const routes = [
|
|
|
395
395
|
component: () => import('../views/EbizDetailViewDemo.vue'),
|
|
396
396
|
meta: { title: 'Ebiz详情页组件示例' }
|
|
397
397
|
},
|
|
398
|
-
{
|
|
399
|
-
path: '/pdf-viewer-demo',
|
|
398
|
+
{ path: '/pdf-viewer-demo',
|
|
400
399
|
name: 'PdfViewerDemo',
|
|
401
400
|
component: () => import('../views/PdfViewerDemo.vue'),
|
|
402
401
|
meta: { title: 'EbizPdfViewer PDF预览器示例' }
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
path: '/video-demo',
|
|
405
|
+
name: 'VideoDemo',
|
|
406
|
+
component: () => import('../views/VideoDemo.vue'),
|
|
407
|
+
meta: { title: 'Ebiz视频播放器组件示例' }
|
|
403
408
|
}
|
|
404
409
|
]
|
|
405
410
|
|
|
@@ -408,4 +413,4 @@ const router = createRouter({
|
|
|
408
413
|
routes
|
|
409
414
|
})
|
|
410
415
|
|
|
411
|
-
export default router
|
|
416
|
+
export default router
|
package/src/views/Home.vue
CHANGED
|
@@ -98,7 +98,8 @@ export default {
|
|
|
98
98
|
{ path: '/mobile-meeting-room-selector', title: 'Ebiz移动端会议室选择器组件示例' },
|
|
99
99
|
{ path: '/file-list-demo', title: '文件列表demo' },
|
|
100
100
|
{ path: '/detail-view-demo', title: 'Ebiz详情页组件示例' },
|
|
101
|
-
{ path: '/pdf-viewer-demo', title: 'EbizPdfViewer PDF预览器示例' }
|
|
101
|
+
{ path: '/pdf-viewer-demo', title: 'EbizPdfViewer PDF预览器示例' },
|
|
102
|
+
{ path: '/video-demo', title: 'Ebiz视频播放器组件示例' }
|
|
102
103
|
]
|
|
103
104
|
|
|
104
105
|
return {
|
|
@@ -150,4 +151,4 @@ export default {
|
|
|
150
151
|
.component-item:hover {
|
|
151
152
|
background-color: #e6e6e6;
|
|
152
153
|
}
|
|
153
|
-
</style>
|
|
154
|
+
</style>
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="video-demo-container">
|
|
3
|
+
<h1>视频播放器组件示例</h1>
|
|
4
|
+
|
|
5
|
+
<div class="demo-section">
|
|
6
|
+
<h2>基础用法</h2>
|
|
7
|
+
<div class="demo-box">
|
|
8
|
+
<EbizVideo src="https://media.w3.org/2010/05/sintel/trailer.mp4"
|
|
9
|
+
poster="https://media.w3.org/2010/05/sintel/poster.png" title="Sintel Trailer" height="360px" />
|
|
10
|
+
</div>
|
|
11
|
+
<div class="code-box">
|
|
12
|
+
<pre><code>{{ basicUsageCode }}</code></pre>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<div class="demo-section">
|
|
17
|
+
<h2>自动播放(需要静音)</h2>
|
|
18
|
+
<div class="demo-box">
|
|
19
|
+
<EbizVideo src="https://media.w3.org/2010/05/sintel/trailer.mp4"
|
|
20
|
+
poster="https://media.w3.org/2010/05/sintel/poster.png" title="自动播放示例" height="360px" autoplay muted />
|
|
21
|
+
</div>
|
|
22
|
+
<div class="code-box">
|
|
23
|
+
<pre><code>{{ autoplayCode }}</code></pre>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div class="demo-section">
|
|
28
|
+
<h2>循环播放</h2>
|
|
29
|
+
<div class="demo-box">
|
|
30
|
+
<EbizVideo src="https://media.w3.org/2010/05/sintel/trailer.mp4"
|
|
31
|
+
poster="https://media.w3.org/2010/05/sintel/poster.png" title="循环播放示例" height="360px" loop />
|
|
32
|
+
</div>
|
|
33
|
+
<div class="code-box">
|
|
34
|
+
<pre><code>{{ loopCode }}</code></pre>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div class="demo-section">
|
|
39
|
+
<h2>使用原生控制栏</h2>
|
|
40
|
+
<div class="demo-box">
|
|
41
|
+
<EbizVideo src="https://media.w3.org/2010/05/sintel/trailer.mp4"
|
|
42
|
+
poster="https://media.w3.org/2010/05/sintel/poster.png" title="原生控制栏示例" height="360px" showNativeControls />
|
|
43
|
+
</div>
|
|
44
|
+
<div class="code-box">
|
|
45
|
+
<pre><code>{{ nativeControlsCode }}</code></pre>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<div class="demo-section">
|
|
50
|
+
<h2>事件监听</h2>
|
|
51
|
+
<div class="demo-box">
|
|
52
|
+
<EbizVideo src="https://media.w3.org/2010/05/sintel/trailer.mp4"
|
|
53
|
+
poster="https://media.w3.org/2010/05/sintel/poster.png" title="事件监听示例" height="360px" @play="onPlay"
|
|
54
|
+
@pause="onPause" @ended="onEnded" @timeupdate="onTimeUpdate" />
|
|
55
|
+
<div class="event-log">
|
|
56
|
+
<h3>事件日志:</h3>
|
|
57
|
+
<div class="log-content">
|
|
58
|
+
<div v-for="(log, index) in eventLogs" :key="index" class="log-item">
|
|
59
|
+
{{ log }}
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
<button @click="clearLogs" class="clear-btn">清除日志</button>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
<div class="code-box">
|
|
66
|
+
<pre><code>{{ eventsCode }}</code></pre>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</template>
|
|
71
|
+
|
|
72
|
+
<script setup>
|
|
73
|
+
import { ref } from 'vue';
|
|
74
|
+
import EbizVideo from '../components/EbizVideo.vue';
|
|
75
|
+
|
|
76
|
+
// 示例代码
|
|
77
|
+
const basicUsageCode = `<EbizVideo
|
|
78
|
+
src="https://media.w3.org/2010/05/sintel/trailer.mp4"
|
|
79
|
+
poster="https://media.w3.org/2010/05/sintel/poster.png"
|
|
80
|
+
title="Sintel Trailer"
|
|
81
|
+
height="360px"
|
|
82
|
+
/>`;
|
|
83
|
+
|
|
84
|
+
const autoplayCode = `<EbizVideo
|
|
85
|
+
src="https://media.w3.org/2010/05/sintel/trailer.mp4"
|
|
86
|
+
poster="https://media.w3.org/2010/05/sintel/poster.png"
|
|
87
|
+
title="自动播放示例"
|
|
88
|
+
height="360px"
|
|
89
|
+
autoplay
|
|
90
|
+
muted
|
|
91
|
+
/>`;
|
|
92
|
+
|
|
93
|
+
const loopCode = `<EbizVideo
|
|
94
|
+
src="https://media.w3.org/2010/05/sintel/trailer.mp4"
|
|
95
|
+
poster="https://media.w3.org/2010/05/sintel/poster.png"
|
|
96
|
+
title="循环播放示例"
|
|
97
|
+
height="360px"
|
|
98
|
+
loop
|
|
99
|
+
/>`;
|
|
100
|
+
|
|
101
|
+
const nativeControlsCode = `<EbizVideo
|
|
102
|
+
src="https://media.w3.org/2010/05/sintel/trailer.mp4"
|
|
103
|
+
poster="https://media.w3.org/2010/05/sintel/poster.png"
|
|
104
|
+
title="原生控制栏示例"
|
|
105
|
+
height="360px"
|
|
106
|
+
showNativeControls
|
|
107
|
+
/>`;
|
|
108
|
+
|
|
109
|
+
const eventsCode = `<template>
|
|
110
|
+
<EbizVideo
|
|
111
|
+
src="https://media.w3.org/2010/05/sintel/trailer.mp4"
|
|
112
|
+
poster="https://media.w3.org/2010/05/sintel/poster.png"
|
|
113
|
+
title="事件监听示例"
|
|
114
|
+
height="360px"
|
|
115
|
+
@play="onPlay"
|
|
116
|
+
@pause="onPause"
|
|
117
|
+
@ended="onEnded"
|
|
118
|
+
@timeupdate="onTimeUpdate"
|
|
119
|
+
/>
|
|
120
|
+
<div class="event-log">
|
|
121
|
+
<h3>事件日志:</h3>
|
|
122
|
+
<div class="log-content">
|
|
123
|
+
<div v-for="(log, index) in eventLogs" :key="index" class="log-item">
|
|
124
|
+
{{ log }}
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
<button @click="clearLogs">清除日志</button>
|
|
128
|
+
</div>
|
|
129
|
+
`;
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
const eventLogs = ref([]);
|
|
133
|
+
|
|
134
|
+
const onPlay = () => {
|
|
135
|
+
eventLogs.value.push(`播放事件触发: ${new Date().toLocaleTimeString()}`);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
const onPause = () => {
|
|
139
|
+
eventLogs.value.push(`暂停事件触发: ${new Date().toLocaleTimeString()}`);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const onEnded = () => {
|
|
143
|
+
eventLogs.value.push(`结束事件触发: ${new Date().toLocaleTimeString()}`);
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const onTimeUpdate = (data) => {
|
|
147
|
+
// 只在整秒时记录,避免日志过多
|
|
148
|
+
if (Math.floor(data.currentTime) !== Math.floor(data.currentTime - 0.1)) {
|
|
149
|
+
eventLogs.value.push(
|
|
150
|
+
`时间更新事件: ${Math.floor(data.currentTime)}秒 / ${Math.floor(data.duration)}秒`
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const clearLogs = () => {
|
|
156
|
+
eventLogs.value = [];
|
|
157
|
+
};
|
|
158
|
+
</script>
|
|
159
|
+
|
|
160
|
+
<style scoped>
|
|
161
|
+
.video-demo-container {
|
|
162
|
+
max-width: 1200px;
|
|
163
|
+
margin: 0 auto;
|
|
164
|
+
padding: 20px;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
h1 {
|
|
168
|
+
font-size: 28px;
|
|
169
|
+
margin-bottom: 30px;
|
|
170
|
+
color: #333;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
h2 {
|
|
174
|
+
font-size: 20px;
|
|
175
|
+
margin-bottom: 16px;
|
|
176
|
+
color: #333;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.demo-section {
|
|
180
|
+
margin-bottom: 40px;
|
|
181
|
+
border: 1px solid #eee;
|
|
182
|
+
border-radius: 8px;
|
|
183
|
+
padding: 20px;
|
|
184
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.demo-box {
|
|
188
|
+
margin-bottom: 20px;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.code-box {
|
|
192
|
+
background-color: #f5f7fa;
|
|
193
|
+
padding: 16px;
|
|
194
|
+
border-radius: 4px;
|
|
195
|
+
overflow: auto;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
pre {
|
|
199
|
+
margin: 0;
|
|
200
|
+
white-space: pre-wrap;
|
|
201
|
+
font-family: 'Courier New', Courier, monospace;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
code {
|
|
205
|
+
color: #476582;
|
|
206
|
+
font-size: 14px;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.event-log {
|
|
210
|
+
margin-top: 20px;
|
|
211
|
+
padding: 16px;
|
|
212
|
+
background-color: #f9f9f9;
|
|
213
|
+
border-radius: 4px;
|
|
214
|
+
border: 1px solid #eee;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.log-content {
|
|
218
|
+
max-height: 200px;
|
|
219
|
+
overflow-y: auto;
|
|
220
|
+
margin-bottom: 10px;
|
|
221
|
+
padding: 10px;
|
|
222
|
+
background-color: #fff;
|
|
223
|
+
border: 1px solid #eee;
|
|
224
|
+
border-radius: 4px;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.log-item {
|
|
228
|
+
padding: 4px 0;
|
|
229
|
+
border-bottom: 1px dashed #eee;
|
|
230
|
+
font-size: 14px;
|
|
231
|
+
color: #666;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.clear-btn {
|
|
235
|
+
padding: 6px 12px;
|
|
236
|
+
background-color: #0052d9;
|
|
237
|
+
color: white;
|
|
238
|
+
border: none;
|
|
239
|
+
border-radius: 4px;
|
|
240
|
+
cursor: pointer;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.clear-btn:hover {
|
|
244
|
+
background-color: #0045b3;
|
|
245
|
+
}
|
|
246
|
+
</style>
|