@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/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
  }
@@ -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
@@ -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>