From 86856397f6165b8b88a9a3e03686587ee2e4ad81 Mon Sep 17 00:00:00 2001 From: buvta <12312540+buvta@users.noreply.github.com> Date: Sun, 15 Nov 2020 18:05:08 +0800 Subject: [PATCH] =?UTF-8?q?IPTV=E5=AE=9E=E7=8E=B0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E6=87=92=E5=8A=A0=E8=BD=BD=EF=BC=8C=E5=85=B6?= =?UTF-8?q?=E5=AE=83=E5=BE=85=E8=B0=83=E6=95=B4=E4=BB=A5=E9=80=82=E5=BA=94?= =?UTF-8?q?=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/IPTV.vue | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/components/IPTV.vue b/src/components/IPTV.vue index a0528b1..316507c 100644 --- a/src/components/IPTV.vue +++ b/src/components/IPTV.vue @@ -20,6 +20,9 @@ ref="iptvTable" size="mini" fit height="100%" row-key="id" :data="filteredTableData" + lazy + :load="(row, treeNode, resolve) => resolve(row.channels)" + :tree-props="{hasChildren: 'hasChildren'}" @row-click="playEvent" @select="selectionCellClick" @selection-change="handleSelectionChange" @@ -112,6 +115,7 @@ export default { data () { return { iptvList: [], + channelList: [], searchTxt: '', searchRecordList: [], enableBatchEdit: false, @@ -151,13 +155,13 @@ export default { }, filteredTableData () { if (this.searchTxt) { - return this.iptvList.filter(x => x.name.toLowerCase().includes(this.searchTxt.toLowerCase())) + return this.channelList.filter(x => x.name.toLowerCase().includes(this.searchTxt.toLowerCase())) } else { - return this.iptvList + return this.channelList } }, getFilters () { - const groups = [...new Set(this.iptvList.map(iptv => iptv.group))] + const groups = [...new Set(this.channelList.map(iptv => iptv.group))] var filters = [] groups.forEach(g => { var doc = { @@ -369,12 +373,33 @@ export default { }, getChannels () { iptv.all().then(res => { + const resClone = JSON.parse(JSON.stringify(res)) + const uniqueChannelName = {} + for (var i = 0; i < resClone.length; i++) { + var channelName = resClone[i].name.replace(/[- ]?(1080p|蓝光|超清|高清|标清|hd|cq|4k)(\d{1,2})?/i, '') + if (channelName.match(/cctv/i)) channelName = channelName.replace('-', '').trim() + const matchRule = new RegExp(`${channelName}(1080p|4k|(?!\\d))`, 'i') + for (var j = i; j < resClone.length; j++) { + if (resClone[j].name.match(/cctv/i)) { + resClone[j].name = resClone[j].name.replace('-', '') + } + if (matchRule.test(resClone[j].name)) { + if (uniqueChannelName[channelName]) { + !uniqueChannelName[channelName].includes(res[j]) && uniqueChannelName[channelName].push(res[j]) + } else { + uniqueChannelName[channelName] = [res[j]] + } + } + } + } res.forEach(ele => { if (ele.isActive === undefined) { ele.isActive = true } }) this.iptvList = res + let id = res.length // 全部追加到末尾 + this.channelList = Object.keys(uniqueChannelName).map(e => { return { id: ++id, name: e, isActive: uniqueChannelName[e].some(c => c.isActive), group: this.determineGroup(e), hasChildren: uniqueChannelName[e].length > 1, channels: uniqueChannelName[e] } }) }) }, getSearchRecordList () {