<template> <div id="chooseChannelForGb" v-loading="loading"> <div style="font-size: 17px; color: #606060; white-space: nowrap; line-height: 30px; font-family: monospace;"> <span v-if="catalogId == null">{{catalogName}}的国标通道</span> <span v-if="catalogId != null">{{catalogName}}({{catalogId}})的国标通道</span> </div> <div style="background-color: #FFFFFF; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;"> 搜索: <el-input @input="search" style="margin-right: 1rem; width: auto;" size="mini" placeholder="关键字" prefix-icon="el-icon-search" v-model="searchSrt" clearable> </el-input> 通道类型: <el-select size="mini" @change="search" style="margin-right: 1rem; width:6rem" v-model="channelType" placeholder="请选择" default-first-option> <el-option label="全部" value=""></el-option> <el-option label="设备" value="false"></el-option> <el-option label="子目录" value="true"></el-option> </el-select> 在线状态: <el-select size="mini" style="margin-right: 1rem; width:6rem" @change="search" v-model="online" placeholder="请选择" default-first-option> <el-option label="全部" value=""></el-option> <el-option label="在线" value="true"></el-option> <el-option label="离线" value="false"></el-option> </el-select> <el-button v-if="catalogId !== null" icon="el-icon-delete" size="mini" :disabled="gbChannels.length === 0 || multipleSelection.length === 0" type="danger" @click="batchDel">批量移除</el-button> <el-button v-if="catalogId === null" icon="el-icon-plus" size="mini" :disabled="gbChannels.length === 0 || multipleSelection.length === 0" @click="batchAdd">批量添加</el-button> <el-button v-if="catalogId === null" icon="el-icon-plus" size="mini" @click="add()">全部添加</el-button> <el-button v-if="catalogId !== null" type="danger" icon="el-icon-delete" size="mini" @click="remove()">全部移除</el-button> </div> <el-table ref="gbChannelsTable" :data="gbChannels" border style="width: 100%" :height="winHeight" :row-key="(row)=> row.deviceId + row.channelId" @selection-change="handleSelectionChange"> <el-table-column align="center" type="selection" :reserve-selection="true" width="55"> </el-table-column> <el-table-column prop="channelId" label="通道编号" width="180" align="center"> </el-table-column> <el-table-column prop="name" label="通道名称" show-overflow-tooltip align="center"> </el-table-column> <el-table-column prop="deviceId" label="设备编号" width="180" align="center"> </el-table-column> <el-table-column label="设备地址" width="180" align="center"> <template slot-scope="scope"> <div slot="reference" class="name-wrapper"> <el-tag size="medium">{{ scope.row.hostAddress }}</el-tag> </div> </template> </el-table-column> <el-table-column prop="manufacturer" label="厂家" align="center"> </el-table-column> <el-table-column label="操作" width="100" align="center" fixed="right"> <template slot-scope="scope"> <el-button-group> <el-button size="mini" icon="el-icon-plus" v-if="catalogId === null" @click="add(scope.row)">添加</el-button> <el-button size="mini" icon="el-icon-delete" v-if="catalogId !== null" type="danger" @click="remove(scope.row)">移除</el-button> </el-button-group> </template> </el-table-column> </el-table> <el-pagination style="float: right;margin-top: 1rem;" @size-change="handleSizeChange" @current-change="currentChange" :current-page="currentPage" :page-size="count" :page-sizes="[10, 20, 30, 50]" layout="total, sizes, prev, pager, next" :total="total"> </el-pagination> <getCatalog ref="getCatalog" :platformId="platformId" ></getCatalog> </div> </template> <script> import getCatalog from './getCatalog' export default { name: 'chooseChannelForGb', computed: { // getPlayerShared: function () { // return { // sharedUrl: window.location.host + '/' + this.videoUrl, // sharedIframe: '<iframe src="' + window.location.host + '/' + this.videoUrl + '"></iframe>', // sharedRtmp: this.videoUrl // }; // } }, props: ['platformId','catalogId', 'catalogName'], created() { this.initData(); }, components: { getCatalog, }, data() { return { loading: false, gbChannels: [], gbChoosechannel:{}, searchSrt: "", channelType: "", online: "", choosed: "", currentPage: 1, count: 10, total: 0, eventEnable: false, multipleSelection: [], winHeight: window.innerHeight - 400, }; }, watch:{ platformId(newData, oldData){ console.log(newData) this.getChannelList() }, catalogId(newData, oldData){ this.getChannelList() }, }, methods: { initData: function() { this.getChannelList(); }, currentChange: function (val) { this.currentPage = val; this.initData(); }, handleSizeChange: function (val) { this.count = val; console.log(val) this.initData(); }, add: function (row) { let all = typeof(row) === "undefined" this.getCatalogFromUser((catalogId)=> { let task = null; this.$axios({ method:"post", url:"/api/platform/update_channel_for_gb", data:{ platformId: this.platformId, all: all, channelReduces: all?[]:[row], catalogId: catalogId } }).then((res)=>{ console.log("保存成功") window.clearTimeout(task); this.loading = false; this.getChannelList(); }).catch((error)=> { window.clearTimeout(task); this.loading = false; console.log(error); }); task= setTimeout(()=>{ this.loading = true; }, 200) }) }, remove: function (row) { let all = typeof(row) === "undefined" this.$confirm(`确定移除${all?"所有通道":""}吗?`, '提示', { dangerouslyUseHTMLString: true, confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { console.log(row) this.$axios({ method:"delete", url:"/api/platform/del_channel_for_gb", data:{ platformId: this.platformId, all: all, channelReduces: all?[]:[row], } }).then((res)=>{ console.log("移除成功") this.getChannelList(); }).catch(function (error) { console.log(error); }); }).catch(() => { }); }, // checkedChange: function (val) { // let that = this; // if (!that.eventEnable) { // return; // } // let newData = {}; // let addData = []; // let delData = []; // if (val.length > 0) { // for (let i = 0; i < val.length; i++) { // const element = val[i]; // let key = element.deviceId + "_" + element.channelId; // newData[key] = element; // if (!!!that.gbChoosechannel[key]){ // addData.push(element) // }else{ // delete that.gbChoosechannel[key] // } // } // // let oldKeys = Object.keys(that.gbChoosechannel); // if (oldKeys.length > 0) { // for (let i = 0; i < oldKeys.length; i++) { // const key = oldKeys[i]; // delData.push(that.gbChoosechannel[key]) // } // } // // }else{ // let oldKeys = Object.keys(that.gbChoosechannel); // if (oldKeys.length > 0) { // for (let i = 0; i < oldKeys.length; i++) { // const key = oldKeys[i]; // delData.push(that.gbChoosechannel[key]) // } // } // } // // that.gbChoosechannel = newData; // if (Object.keys(addData).length >0) { // that.$axios({ // method:"post", // url:"/api/platform/update_channel_for_gb", // data:{ // platformId: that.platformId, // channelReduces: addData, // catalogId: that.catalogId // } // }).then((res)=>{ // console.log("保存成功") // }).catch(function (error) { // console.log(error); // }); // } // if (delData.length >0) { // that.$axios({ // method:"delete", // url:"/api/platform/del_channel_for_gb", // data:{ // platformId: that.platformId, // channelReduces: delData // } // }).then((res)=>{ // console.log("移除成功") // let nodeIds = new Array(); // for (let i = 0; i < delData.length; i++) { // nodeIds.push(delData[i].channelId) // } // }).catch(function (error) { // console.log(error); // }); // } // }, // shareAllCheckedChange: function (val) { // // }, getChannelList: function () { let that = this; this.$axios({ method:"get", url:`/api/platform/channel_list`, params: { page: that.currentPage, count: that.count, query: that.searchSrt, online: that.online, catalogId: that.catalogId, platformId: that.platformId, channelType: that.channelType } }) .then(function (res) { if (res.data.code === 0 ) { that.total = res.data.data.total; that.gbChannels = res.data.data.list; that.gbChoosechannel = {}; } // 防止出现表格错位 that.$nextTick(() => { that.$refs.gbChannelsTable.doLayout(); that.eventEnable = true; }) }) .catch(function (error) { console.log(error); }); }, search: function() { this.initData(); }, handleGBSelectionChange: function() { this.initData(); }, batchDel: function() { this.$confirm(`确认这${this.multipleSelection.length}个通道吗?`, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.$axios({ method:"delete", url:"/api/platform/del_channel_for_gb", data:{ platformId: this.platformId, channelReduces: this.multipleSelection } }).then((res)=>{ console.log("移除成功") this.$refs.gbChannelsTable.clearSelection() this.getChannelList(); }).catch(function (error) { console.log(error); }); }).catch(() => { }); }, batchAdd: function() { this.getCatalogFromUser((catalogId)=> { this.$axios({ method: "post", url: "/api/platform/update_channel_for_gb", data: { platformId: this.platformId, channelReduces: this.multipleSelection, catalogId: catalogId, } }).then((res) => { console.log("保存成功") this.$refs.gbChannelsTable.clearSelection() this.getChannelList(); }).catch(function (error) { console.log(error); }); }); }, handleSelectionChange: function (val) { this.multipleSelection = val; }, getCatalogFromUser(callback){ this.$refs.getCatalog.openDialog(callback) }, } }; </script> <style> </style>