newtv-ui-revision 0.0.1

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 (52) hide show
  1. package/README.md +67 -0
  2. package/lib/demo.html +10 -0
  3. package/lib/newtv-ui.common.js +77384 -0
  4. package/lib/newtv-ui.common.js.map +1 -0
  5. package/lib/newtv-ui.css +1 -0
  6. package/lib/newtv-ui.umd.js +77394 -0
  7. package/lib/newtv-ui.umd.js.map +1 -0
  8. package/lib/newtv-ui.umd.min.js +25 -0
  9. package/lib/newtv-ui.umd.min.js.map +1 -0
  10. package/npm-shrinkwrap.json +24519 -0
  11. package/package.json +50 -0
  12. package/packages/assets/.DS_Store +0 -0
  13. package/packages/assets/css/.DS_Store +0 -0
  14. package/packages/assets/css/SourceHanSansCN-Normal.otf +0 -0
  15. package/packages/assets/css/UIRevision.css +784 -0
  16. package/packages/assets/css/UIRevision.less +829 -0
  17. package/packages/assets/css/header.css +0 -0
  18. package/packages/assets/css/header.less +514 -0
  19. package/packages/assets/css/iconfont.css +0 -0
  20. package/packages/assets/css/iconfont.less +520 -0
  21. package/packages/assets/css/newtv.css +1439 -0
  22. package/packages/assets/css/newtv.css.map +1 -0
  23. package/packages/assets/css/newtv.less +292 -0
  24. package/packages/dashboard/index.js +11 -0
  25. package/packages/dashboard/src/newtvDashboard.vue +125 -0
  26. package/packages/form/index.js +11 -0
  27. package/packages/form/src/newtvForm.vue +475 -0
  28. package/packages/header/index.js +11 -0
  29. package/packages/header/src/newtvHeader.vue +285 -0
  30. package/packages/index.js +49 -0
  31. package/packages/leftMenu/index.js +11 -0
  32. package/packages/leftMenu/src/newtvLeftMenu.vue +171 -0
  33. package/packages/list/index.js +10 -0
  34. package/packages/list/src/newtvList.vue +77 -0
  35. package/packages/notFount/index.js +11 -0
  36. package/packages/notFount/src/newtvNotFount.vue +28 -0
  37. package/packages/secondNav/index.js +11 -0
  38. package/packages/secondNav/src/newtvSecondNav.vue +157 -0
  39. package/packages/table/index.js +11 -0
  40. package/packages/table/src/newtvTable.vue +421 -0
  41. package/packages/videoBar/index.js +7 -0
  42. package/packages/videoBar/src/videoBar.vue +75 -0
  43. package/types/component.d.ts +7 -0
  44. package/types/dashboard.d.ts +10 -0
  45. package/types/form.d.ts +12 -0
  46. package/types/header.d.ts +10 -0
  47. package/types/index.d.ts +4 -0
  48. package/types/leftMenu.d.ts +14 -0
  49. package/types/list.d.ts +8 -0
  50. package/types/newtv-ui.d.ts +23 -0
  51. package/types/secondNav.d.ts +13 -0
  52. package/types/table.d.ts +14 -0
@@ -0,0 +1,157 @@
1
+ <template>
2
+ <el-container class="newtv-second-nav">
3
+ <el-aside class="newtv-second-nav-aside" :style="{width: asideWidth}">
4
+ <el-scrollbar style="height:100%">
5
+ <h3 v-if="title" class="newtv-second-nav-title">{{title}}</h3>
6
+ <el-input
7
+ v-if="filter"
8
+ class="second-nav-search"
9
+ placeholder="输入关键字进行过滤"
10
+ v-model="filterText"
11
+ size="mini"
12
+ />
13
+ <el-tree
14
+ ref="secondNav"
15
+ :data="treeData"
16
+ :props="props"
17
+ default-expand-all
18
+ highlight-current
19
+ :expand-on-click-node="false"
20
+ :indent="10"
21
+ :node-key="nodeKey"
22
+ :current-node-key="currentNodeKey"
23
+ :filter-node-method="filterNode"
24
+ @node-click="nodeClick"
25
+ >
26
+ <span class="second-nav-node" slot-scope="{ node, data }">
27
+ <el-tooltip class="title" effect="dark" :content="data[props.label || 'label']" placement="top-start" :open-delay="500" :disabled="!tooltip">
28
+ <span>{{data[props.label || 'label']}}</span>
29
+ </el-tooltip>
30
+ </span>
31
+ </el-tree>
32
+ </el-scrollbar>
33
+ </el-aside>
34
+ <el-main class="second-nav-content" ref="secondNavContent">
35
+ <slot />
36
+ </el-main>
37
+ </el-container>
38
+ </template>
39
+
40
+ <script>
41
+ export default {
42
+ name: "newtvSecondNav",
43
+ props: {
44
+ title: {
45
+ type: String,
46
+ default: ''
47
+ },
48
+ data: {
49
+ type: Array,
50
+ default: () => []
51
+ },
52
+ props: {
53
+ type: Object,
54
+ default: () => {}
55
+ },
56
+ nodeKey: {
57
+ type: String,
58
+ default: ''
59
+ },
60
+ currentNodeKey: {
61
+ type: [String, Number],
62
+ default: ''
63
+ },
64
+ tooltip: {
65
+ type: Boolean,
66
+ default: false
67
+ },
68
+ filter: {
69
+ type: Boolean,
70
+ default: false
71
+ },
72
+ filterNodeMethod: {
73
+ type: Function,
74
+ default: null
75
+ },
76
+ asideWidth: {
77
+ type: String,
78
+ default: '96px'
79
+ },
80
+ },
81
+ data() {
82
+ return {
83
+ treeData: [],
84
+ filterText: ''
85
+ }
86
+ },
87
+ created() {
88
+ this.treeData = JSON.parse(JSON.stringify(this.data));
89
+ this.filterText = '';
90
+ },
91
+ activated(){
92
+ this.treeData = JSON.parse(JSON.stringify(this.data));
93
+ this.filterText = '';
94
+ },
95
+ watch: {
96
+ data() {
97
+ this.treeData = JSON.parse(JSON.stringify(this.data));
98
+ },
99
+ filterText(val) {
100
+ if (this.filterNodeMethod) {
101
+ this.filterNodeMethod && this.filterNodeMethod(val, (params) => {
102
+ if (params) {
103
+ this.treeData = params
104
+ return
105
+ }
106
+ this.treeData = []
107
+ })
108
+ } else {
109
+ this.$refs.secondNav.filter(val)
110
+ }
111
+ }
112
+ },
113
+ methods: {
114
+ filterNode(value, data) {
115
+ if (!value) return true;
116
+ return data[this.props.label || 'label'].indexOf(value) !== -1;
117
+ },
118
+ nodeClick(data, node, nodeSelf) {
119
+ this.$emit('click', data, node, nodeSelf)
120
+ }
121
+ }
122
+ }
123
+ </script>
124
+
125
+ <style lang="less">
126
+ .newtv-second-nav {
127
+ height: 100%;
128
+ .newtv-second-nav-aside {
129
+ background: #fff;
130
+ }
131
+ .newtv-second-nav-title {
132
+ height: 30px;
133
+ line-height: 30px;
134
+ background: #ebeef5;
135
+ text-align: center;
136
+ color: #9a9daf;
137
+ }
138
+ .second-nav-search {
139
+ margin-bottom: 10px;
140
+ }
141
+ .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
142
+ background: transparent;
143
+ color: #56a2f7;
144
+ }
145
+ .el-tree-node__content>.el-tree-node__expand-icon{
146
+ padding: 0px;
147
+ }
148
+ .second-nav-node {
149
+ text-overflow: ellipsis;
150
+ white-space: nowrap;
151
+ overflow: hidden;
152
+ }
153
+ .second-nav-content {
154
+ padding: 0 0 0 10px;
155
+ }
156
+ }
157
+ </style>
@@ -0,0 +1,11 @@
1
+
2
+ // 导入组件,组件必须声明 name
3
+ import newtvTable from './src/newtvTable'
4
+
5
+ // 为组件提供 install 安装方法,供按需引入
6
+ newtvTable.install = function (Vue) {
7
+ Vue.component(newtvTable.name, newtvTable)
8
+ }
9
+
10
+ // 默认导出组件
11
+ export default newtvTable
@@ -0,0 +1,421 @@
1
+ <template>
2
+ <div class="newtv-table-body" :class="{ 'newtv-table-body--revision': UIRevision, 'dialog-table-container': dialogTableContainer}">
3
+ <el-table
4
+ ref="table"
5
+ :data="tableData"
6
+ :height="height"
7
+ :stripe="stripe"
8
+ :border="border"
9
+ :row-class-name="rowClassName"
10
+ :default-sort="defaultSort"
11
+ :show-header="showHeader"
12
+ @row-click="rowClick"
13
+ @row-dblclick="rowDblclick"
14
+ @select="select"
15
+ @select-all="selectAll"
16
+ @selection-change="selectionChange"
17
+ :span-method="spanMethod"
18
+ @sort-change="sortChange"
19
+ @expand-change="expandChange"
20
+ :row-key="rowKey"
21
+ :expand-row-keys="expandRowKeys"
22
+ :empty-text="empty"
23
+ >
24
+ <template v-for="(col,index) in tableCols">
25
+ <el-table-column
26
+ v-if="col.type === 'slot' || col.type == 'expand'"
27
+ :key="index"
28
+ :align="col.align || 'center'"
29
+ :header-align="col['header-align'] || 'center'"
30
+ :show-overflow-tooltip="showOverflowTooltip"
31
+ :label="col.label"
32
+ :width="col.width"
33
+ :fixed="col.fixed"
34
+ :formatter="col.formatter"
35
+ :type="col.type == 'slot'? '' : col.type "
36
+ :sortable="col.sortable || false"
37
+ :sort-method="col.sortMethod"
38
+ :sort-by="col.sortBy"
39
+ :sort-orders="col.sortOrders || ['ascending', 'descending', null]"
40
+ :reserve-selection="reserveSelection"
41
+ >
42
+ <template slot-scope="scope">
43
+ <slot :name="col.prop" :row="scope.row" :$index="scope.$index"></slot>
44
+ </template>
45
+ </el-table-column>
46
+ <el-table-column
47
+ v-else-if="col.type === 'spbtn'"
48
+ :key="index"
49
+ :align="col.align || 'center'"
50
+ :header-align="col['header-align'] || 'center'"
51
+ :show-overflow-tooltip="showOverflowTooltip"
52
+ :label="col.label"
53
+ :width="col.width"
54
+ :fixed="col.fixed"
55
+ :formatter="col.formatter"
56
+ >
57
+ <template slot-scope="scope">
58
+ <template v-if="col.groups.filter(group => typeof group.isShow === 'boolean' ? group.isShow : group.isShow(scope.row)).length > 3">
59
+ <template v-for="(item, index) in col.groups.filter(group => typeof group.isShow === 'boolean' ? group.isShow : group.isShow(scope.row)).splice(0,2)">
60
+ <el-tooltip v-if="!col.hideTitle && index < 3" :key="`btn${index}`" :disabled="!col.openTooltip" class="item" :effect="col.effect || 'dark'" :content="typeof item.title === 'function' ? item.title(scope.row) : item.title" placement="top-start">
61
+ <el-button
62
+ :type="item.type"
63
+ :size="col.size || 'small'"
64
+ :icon="item.icon"
65
+ :style="item.style"
66
+ @click="() => item.clickHandler && item.clickHandler(scope.row)"
67
+ :circle="col.shape === 'circle'"
68
+ :plain="col.shape === 'plain'"
69
+ :round="col.shape === 'round'"
70
+ :disabled="typeof item.disabled === 'function' ? item.disabled(scope.row) : item.disabled"
71
+ >
72
+ {{typeof item.title === 'function' ? item.title(scope.row) : item.title}}
73
+ </el-button>
74
+ </el-tooltip>
75
+ <el-tooltip v-else-if="col.hideTitle && index < 3" :key="`btn${index}`" :disabled="!col.openTooltip" class="item" :effect="col.effect || 'dark'" :content="typeof item.title === 'function' ? item.title(scope.row) : item.title" placement="top-start">
76
+ <el-button
77
+ :type="item.type"
78
+ :size="col.size || 'small'"
79
+ :icon="item.icon"
80
+ :style="item.style"
81
+ @click="() => item.clickHandler && item.clickHandler(scope.row)"
82
+ :circle="col.shape === 'circle'"
83
+ :plain="col.shape === 'plain'"
84
+ :round="col.shape === 'round'"
85
+ :disabled="typeof item.disabled === 'function' ? item.disabled(scope.row) : item.disabled"
86
+ />
87
+ </el-tooltip>
88
+ </template>
89
+ <el-dropdown style="margin-left: 10px" :trigger="col.dropdownTrigger || 'hover'" @command="handleCommand">
90
+ <el-tooltip :disabled="col.dropdownTrigger == null || col.dropdownTrigger === 'hover'" class="item" :effect="col.effect || 'dark'" content="更多" placement="top-start">
91
+ <el-button
92
+ type="primary"
93
+ :size="col.size || 'small'"
94
+ :circle="col.shape === 'circle'"
95
+ :plain="col.shape === 'plain'"
96
+ :round="col.shape === 'round'"
97
+ > ... </el-button>
98
+ </el-tooltip>
99
+ <el-dropdown-menu slot="dropdown">
100
+ <el-dropdown-item v-for="(list, index) in col.groups.filter(group => typeof group.isShow === 'boolean' ? group.isShow : group.isShow(scope.row)).slice(2)" :key="`drop${index}`" :command="{fn: list.clickHandler, row: scope.row}">{{typeof list.title === 'function' ? list.title(scope.row) : list.title}}</el-dropdown-item>
101
+ </el-dropdown-menu>
102
+ </el-dropdown>
103
+ </template>
104
+ <template v-else>
105
+ <template v-for="(item, index) in col.groups.filter(group => typeof group.isShow === 'boolean' ? group.isShow : group.isShow(scope.row))">
106
+ <el-tooltip v-if="!col.hideTitle" :key="`btn${index}`" :disabled="!col.openTooltip" class="item" :effect="col.effect || 'dark'" :content="typeof item.title === 'function' ? item.title(scope.row) : item.title" placement="top-start">
107
+ <el-button
108
+ :type="item.type"
109
+ :size="col.size || 'small'"
110
+ :icon="item.icon"
111
+ :style="item.style"
112
+ @click="() => item.clickHandler && item.clickHandler(scope.row)"
113
+ :circle="col.shape === 'circle'"
114
+ :plain="col.shape === 'plain'"
115
+ :round="col.shape === 'round'"
116
+ :disabled="typeof item.disabled === 'function' ? item.disabled(scope.row) : item.disabled"
117
+ >
118
+ {{typeof item.title === 'function' ? item.title(scope.row) : item.title}}
119
+ </el-button>
120
+ </el-tooltip>
121
+ <el-tooltip v-else :key="`btn${index}`" :disabled="!col.openTooltip" class="item" :effect="col.effect || 'dark'" :content="typeof item.title === 'function' ? item.title(scope.row) : item.title" placement="top-start">
122
+ <el-button
123
+ :type="item.type"
124
+ :size="col.size || 'small'"
125
+ :icon="item.icon"
126
+ :style="item.style"
127
+ @click="() => item.clickHandler && item.clickHandler(scope.row)"
128
+ :circle="col.shape === 'circle'"
129
+ :plain="col.shape === 'plain'"
130
+ :round="col.shape === 'round'"
131
+ :disabled="typeof item.disabled === 'function' ? item.disabled(scope.row) : item.disabled"
132
+ />
133
+ </el-tooltip>
134
+ </template>
135
+ </template>
136
+ </template>
137
+ </el-table-column>
138
+ <el-table-column
139
+ v-else-if="col.type === 'selection'"
140
+ :key="index"
141
+ :prop="col.prop"
142
+ :label="col.label"
143
+ :width="col.width"
144
+ :align="col.align || 'center'"
145
+ :header-align="col['header-align'] || 'center'"
146
+ :type="col.type || ''"
147
+ :show-overflow-tooltip="showOverflowTooltip"
148
+ :formatter="col.formatter"
149
+ :fixed="col.fixed"
150
+ :sortable="col.sortable || false"
151
+ :sort-method="col.sortMethod"
152
+ :sort-by="col.sortBy"
153
+ :sort-orders="col.sortOrders || ['ascending', 'descending', null]"
154
+ :reserve-selection="reserveSelection"
155
+ :selectable="col.selectable"
156
+ >
157
+ </el-table-column>
158
+ <el-table-column
159
+ v-else-if="col.type === 'multilevel' && col.children"
160
+ :key="index"
161
+ :prop="col.prop"
162
+ :label="col.label"
163
+ :width="col.width"
164
+ :align="col.align || 'center'"
165
+ :header-align="col['header-align'] || 'center'"
166
+ :type="col.type || ''"
167
+ :show-overflow-tooltip="showOverflowTooltip"
168
+ :formatter="col.formatter"
169
+ :fixed="col.fixed"
170
+ :sortable="col.sortable || false"
171
+ :sort-method="col.sortMethod"
172
+ :sort-by="col.sortBy"
173
+ :sort-orders="col.sortOrders || ['ascending', 'descending', null]"
174
+ >
175
+ <el-table-column
176
+ v-for="(item,index) of col.children"
177
+ :key="index"
178
+ :prop="item.prop"
179
+ :label="item.label"
180
+ :align="item.align || 'center'"
181
+ :width="item.width"
182
+ >
183
+ </el-table-column>
184
+ </el-table-column>
185
+
186
+ <el-table-column
187
+ v-else-if="col.type === 'tooltip'"
188
+ :key="index"
189
+ :prop="col.prop"
190
+ :label="col.label"
191
+ :width="col.width"
192
+ :align="col.align || 'center'"
193
+ :header-align="col['header-align'] || 'center'"
194
+ :type="''"
195
+ :show-overflow-tooltip="showOverflowTooltip"
196
+ :formatter="col.formatter"
197
+ :fixed="col.fixed"
198
+ :sortable="col.sortable || false"
199
+ :sort-method="col.sortMethod"
200
+ :sort-by="col.sortBy"
201
+ :sort-orders="col.sortOrders || ['ascending', 'descending', null]"
202
+ :render-header="col.renderHeader"
203
+ >
204
+ </el-table-column>
205
+
206
+ <el-table-column
207
+ v-else
208
+ :key="index"
209
+ :prop="col.prop"
210
+ :label="col.label"
211
+ :width="col.width"
212
+ :align="col.align || 'center'"
213
+ :header-align="col['header-align'] || 'center'"
214
+ :type="col.type || ''"
215
+ :show-overflow-tooltip="showOverflowTooltip"
216
+ :formatter="col.formatter"
217
+ :fixed="col.fixed"
218
+ :sortable="col.sortable || false"
219
+ :sort-method="col.sortMethod"
220
+ :sort-by="col.sortBy"
221
+ :sort-orders="col.sortOrders || ['ascending', 'descending', null]"
222
+ >
223
+ </el-table-column>
224
+ </template>
225
+ </el-table>
226
+ <div class="footer-pagination" v-if="showPagination">
227
+ <el-pagination
228
+ :small="pageOptions['small']"
229
+ :page-sizes="pageOptions['page-sizes']"
230
+ :page-size="pageOptions['page-size']"
231
+ :total="pageOptions['total']"
232
+ :pager-count="pageOptions['pager-count']"
233
+ :current-page="pageOptions['current-page']"
234
+ :layout="pageOptions['layout']"
235
+ :popper-class="pageOptions['popper-class']"
236
+ :prev-text="pageOptions['prev-text']"
237
+ :next-text="pageOptions['next-text']"
238
+ :disabled="pageOptions['disabled']"
239
+ :hide-on-single-page="pageOptions['hide-on-single-page']"
240
+ @size-change="handleSizeChange"
241
+ @current-change="handleCurrentChange"
242
+ @prev-click="handlePrevClick"
243
+ @next-click="handleNextClick"
244
+ >
245
+ <slot name="pagination"></slot>
246
+ </el-pagination>
247
+ </div>
248
+ </div>
249
+ </template>
250
+
251
+ <script>
252
+ export default {
253
+ name: "newtvTable",
254
+ props: {
255
+ defaultSort: {
256
+ type: Object,
257
+ default: () => {}
258
+ },
259
+ tableCols: {
260
+ type: Array,
261
+ default: () => []
262
+ },
263
+ tableData: {
264
+ type: Array,
265
+ default: () => []
266
+ },
267
+ showHeader: {
268
+ type: Boolean,
269
+ default: true
270
+ },
271
+ reserveSelection: {
272
+ type: Boolean,
273
+ default: false
274
+ },
275
+ rowClassName: {
276
+ type: Function,
277
+ default: () => {}
278
+ },
279
+ expandRowKeys: {
280
+ type: Array,
281
+ default: () => []
282
+ },
283
+ height: {
284
+ type: Number || null,
285
+ default: null
286
+ },
287
+ stripe: {
288
+ type: Boolean,
289
+ default: true
290
+ },
291
+ UIRevision: {
292
+ type: Boolean,
293
+ default: false
294
+ },
295
+ dialogTableContainer: {
296
+ type: Boolean,
297
+ default: false
298
+ },
299
+ border: {
300
+ type: Boolean,
301
+ default: true
302
+ },
303
+ showOverflowTooltip: {
304
+ type: Boolean,
305
+ default: true
306
+ },
307
+ showPagination: {
308
+ type: Boolean,
309
+ default: true
310
+ },
311
+ paginationOption: {
312
+ type: Object,
313
+ default: () => {}
314
+ },
315
+ spanMethod: {
316
+ type: Function,
317
+ default: () => {}
318
+ },
319
+ rowKey: {
320
+ type: [Function, String],
321
+ default: 'id'
322
+ },
323
+ empty: {
324
+ type: String,
325
+ default: '暂无数据'
326
+ }
327
+ },
328
+ data() {
329
+ return {
330
+ pageOptions: {
331
+ 'small': false,
332
+ 'background': false,
333
+ 'page-sizes': [10, 20, 50, 100],
334
+ 'page-size': 10,
335
+ 'total': 10,
336
+ 'pager-count': 7,
337
+ 'current-page': 1,
338
+ 'layout': 'total, sizes, prev, pager, next, jumper',
339
+ 'popper-class': null,
340
+ 'prev-text': null,
341
+ 'next-text': null,
342
+ 'disabled': false,
343
+ 'hide-on-single-page': false
344
+ }
345
+ }
346
+ },
347
+ mounted() {},
348
+ methods: {
349
+ rowClick(row, column, event) {
350
+ this.$emit('row-click', row, column, event)
351
+ },
352
+ // 双击表格
353
+ rowDblclick(row, column, event) {
354
+ this.$emit('row-dblclick', row, column, event)
355
+ },
356
+ //rowCellClick
357
+ rowCellClick(row, column, cell, event) {
358
+ this.$emit('cell-click', row, column, cell, event)
359
+ },
360
+ expandChange(row, expandedRows) {
361
+ this.$emit('expand-change', row, expandedRows)
362
+ },
363
+ select(selection, row) {
364
+ this.$emit('select', selection, row)
365
+ },
366
+ selectAll(selection, row) {
367
+ this.$emit('select-all', selection, row)
368
+ },
369
+ selectionChange(selection) {
370
+ this.$emit('selection-change', selection)
371
+ },
372
+ sortChange({ column, prop, order }) {
373
+ this.$emit('sort-change', { column, prop, order })
374
+ },
375
+ clearSelection() {
376
+ this.$refs.table.clearSelection()
377
+ },
378
+ toggleRowSelection(row, selected) {
379
+ this.$refs.table.toggleRowSelection(row, selected)
380
+ },
381
+ toggleAllSelection() {
382
+ this.$refs.table.toggleAllSelection()
383
+ },
384
+ // pageSize 改变时会触发
385
+ handleSizeChange(val) {
386
+ this.pageOptions = {
387
+ ...this.pageOptions,
388
+ 'current-page': 1
389
+ }
390
+ this.$emit('size-change', val)
391
+ },
392
+ // currentPage 改变时会触发
393
+ handleCurrentChange(val) {
394
+ this.$emit('current-change', val)
395
+ },
396
+ // 用户点击上一页按钮改变当前页后触发
397
+ handlePrevClick(val) {
398
+ this.$emit('prev-click', val)
399
+ },
400
+ // 用户点击下一页按钮改变当前页后触发
401
+ handleNextClick(val) {
402
+ this.$emit('next-click', val)
403
+ },
404
+ handleCommand(command) {
405
+ console.log(command)
406
+ command.fn && command.fn(command.row)
407
+ }
408
+ },
409
+ watch: {
410
+ paginationOption () {
411
+ this.pageOptions = {...this.pageOptions, ...this.paginationOption}
412
+ }
413
+ }
414
+ }
415
+ </script>
416
+
417
+ <style lang="less" scoped>
418
+ .footer-pagination {
419
+ padding-top: 10px;
420
+ }
421
+ </style>
@@ -0,0 +1,7 @@
1
+ import videoBar from "./src/videoBar";
2
+
3
+ videoBar.install = function (Vue) {
4
+ Vue.component(videoBar.name,videoBar)
5
+ }
6
+
7
+ export default videoBar
@@ -0,0 +1,75 @@
1
+ <template>
2
+ <div class="newtv-video-bar">
3
+ <div class="video-bar-content" :style="styleBar">
4
+ <div class="bar-item" v-for="(videoPoint,index) in computeVideoList"
5
+ :style="videoPoint.style"
6
+ :key="index"
7
+ @click="playVideo(videoPoint.from,index)"
8
+ ></div>
9
+ </div>
10
+ </div>
11
+ </template>
12
+
13
+ <script>
14
+ export default {
15
+ name: 'videoBar',
16
+ props: {
17
+ width: {
18
+ type: String,
19
+ default: '100%'
20
+ },
21
+ height: {
22
+ type: String,
23
+ default: '5'
24
+ },
25
+ videoList: {
26
+ type: Array,
27
+ default: ()=>[],
28
+ },
29
+ videoTotal: {
30
+ type: Number,
31
+ default: 0
32
+ },
33
+ barStyle: {
34
+ type: Object,
35
+ default: () => {
36
+ return {
37
+ bgColor: '#ffffff',
38
+ itemBgColor: '#f00'
39
+ }
40
+ }
41
+ }
42
+ },
43
+ methods: {
44
+ playVideo(t,index) {
45
+ this.$emit('playVideo',t,index);
46
+ }
47
+ },
48
+ computed: {
49
+ computeVideoList() {
50
+ return this.videoList.map(item=>{
51
+ item.width = Math.ceil(((item.to - item.from <=0) ? 1 : (item.to - item.from))/this.videoTotal*100);
52
+ item.left = Math.ceil(item.from/this.videoTotal*100);
53
+ item.style = `left:${item.left}%;width: ${item.width}%;height: ${this.height}px;borderRadius:${this.height/2}px;backgroundColor: ${this.barStyle.itemBgColor};`;
54
+ return item;
55
+ });
56
+ },
57
+ styleBar() {
58
+ return `height: ${this.height}px;borderRadius: ${this.height/2}px;backgroundColor: ${this.barStyle.bgColor};`
59
+ }
60
+ },
61
+ };
62
+ </script>
63
+
64
+ <style scoped>
65
+ .video-bar-content{
66
+ width: 100%;
67
+ overflow: hidden;
68
+ position: relative;
69
+ }
70
+ .bar-item{
71
+ float: left;
72
+ position: absolute;
73
+ top: 0;
74
+ }
75
+ </style>
@@ -0,0 +1,7 @@
1
+ import Vue from 'vue'
2
+
3
+ /** ElementUI component common definition */
4
+ export declare class NewtvUIComponent extends Vue {
5
+ /** Install component into Vue */
6
+ static install (vue: typeof Vue): any
7
+ }
@@ -0,0 +1,10 @@
1
+ import { NewtvUIComponent } from './component'
2
+
3
+ export declare class newtvDashboard extends NewtvUIComponent {
4
+ title: string
5
+ height: string
6
+ fillet: string
7
+ center: boolean
8
+ isIcon: boolean
9
+ data: []
10
+ }