From 72c1b36d6d2ece497e032c8434641d6576590f9d Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期日, 03 七月 2022 00:44:36 +0800 Subject: [PATCH] 优化对讲逻辑 --- web_src/src/components/channelList.vue | 171 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 91 insertions(+), 80 deletions(-) diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue index 7e0637c..d27e62b 100644 --- a/web_src/src/components/channelList.vue +++ b/web_src/src/components/channelList.vue @@ -2,10 +2,10 @@ <div id="channelList" style="width: 100%"> <div class="page-header"> <div class="page-title"> - <el-button icon="el-icon-arrow-left" size="mini" style="margin-right: 1rem;" type="primary" @click="showDevice"> - 杩斿洖 - </el-button> - 閫氶亾鍒楄〃({{ parentChannelId == 0 ? deviceId : parentChannelId }})</div> + <el-button icon="el-icon-back" size="mini" style="font-size: 20px; color: #000;" type="text" @click="showDevice" ></el-button> + <el-divider direction="vertical"></el-divider> + 閫氶亾鍒楄〃 + </div> <div class="page-header-btn"> 鎼滅储: <el-input @input="search" style="margin-right: 1rem; width: auto;" size="mini" placeholder="鍏抽敭瀛�" @@ -25,84 +25,85 @@ <el-option label="鍦ㄧ嚎" value="true"></el-option> <el-option label="绂荤嚎" value="false"></el-option> </el-select> - <el-checkbox size="mini" v-model="autoList" @change="autoListChange"> - 鑷姩鍒锋柊 - </el-checkbox> + <el-button icon="el-icon-refresh-right" circle size="mini" @click="refresh()"></el-button> </div> </div> <devicePlayer ref="devicePlayer" v-loading="isLoging"></devicePlayer> <!--璁惧鍒楄〃--> - <el-table ref="channelListTable" :data="deviceChannelList" :height="winHeight" border style="width: 100%"> - <el-table-column prop="channelId" label="閫氶亾缂栧彿" width="200"> + <el-table ref="channelListTable" :data="deviceChannelList" :height="winHeight" style="width: 100%" header-row-class-name="table-header"> + <el-table-column prop="channelId" label="閫氶亾缂栧彿" min-width="200"> </el-table-column> - <el-table-column prop="name" label="閫氶亾鍚嶇О"> + <el-table-column prop="deviceId" label="璁惧缂栧彿" min-width="200"> </el-table-column> - <el-table-column label="蹇収" width="80" align="center"> - <template slot-scope="scope"> - <img style="max-height: 3rem;max-width: 4rem;" - v-if="scope.row.subCount === 0 && scope.row.parental === 0" - :id="scope.row.deviceId + '_' + scope.row.channelId" - :src="getSnap(scope.row)" - @error="getSnapErrorEvent($event.target.id)" - alt=""> - <!-- <el-image--> - <!-- :id="'snapImg_' + scope.row.deviceId + '_' + scope.row.channelId"--> - <!-- :src="getSnap(scope.row)"--> - <!-- @error="getSnapErrorEvent($event, scope.row)"--> - <!-- :fit="'contain'">--> - <!-- <div slot="error" class="image-slot">--> - <!-- <i class="el-icon-picture-outline"></i>--> - <!-- </div>--> - <!-- </el-image>--> + <el-table-column prop="name" label="閫氶亾鍚嶇О" min-width="200"> + </el-table-column> + <el-table-column label="蹇収" min-width="120"> + <template v-slot:default="scope"> + <el-image + :src="getSnap(scope.row)" + :preview-src-list="getBigSnap(scope.row)" + @error="getSnapErrorEvent(scope.row.deviceId, scope.row.channelId)" + :fit="'contain'" + style="width: 60px"> + <div slot="error" class="image-slot"> + <i class="el-icon-picture-outline"></i> + </div> + </el-image> </template> </el-table-column> - <el-table-column prop="subCount" label="瀛愯妭鐐规暟"> + <el-table-column prop="subCount" label="瀛愯妭鐐规暟" min-width="120"> </el-table-column> - <el-table-column prop="manufacture" label="鍘傚"> + <el-table-column prop="manufacture" label="鍘傚" min-width="120"> </el-table-column> - <el-table-column label="浣嶇疆淇℃伅" align="center"> + <el-table-column label="浣嶇疆淇℃伅" min-width="200"> <template slot-scope="scope"> - <span>{{ scope.row.longitude }},{{ scope.row.latitude }}</span> + <span v-if="scope.row.longitude*scope.row.latitude > 0">{{ scope.row.longitude }},<br>{{ scope.row.latitude }}</span> + <span v-if="scope.row.longitude*scope.row.latitude === 0">鏃�</span> </template> </el-table-column> - <el-table-column prop="ptztypeText" label="浜戝彴绫诲瀷"/> - <el-table-column label="寮�鍚煶棰�" align="center"> + <el-table-column prop="ptztypeText" label="浜戝彴绫诲瀷" min-width="120"/> + <el-table-column label="寮�鍚煶棰�" min-width="120"> <template slot-scope="scope"> <el-switch @change="updateChannel(scope.row)" v-model="scope.row.hasAudio" active-color="#409EFF"> </el-switch> </template> </el-table-column> - <el-table-column label="鐘舵��" width="180" align="center"> + <el-table-column label="鐘舵��" min-width="120"> <template slot-scope="scope"> <div slot="reference" class="name-wrapper"> - <el-tag size="medium" v-if="scope.row.status == 1">寮�鍚�</el-tag> - <el-tag size="medium" type="info" v-if="scope.row.status == 0">鍏抽棴</el-tag> + <el-tag size="medium" v-if="scope.row.status === 1">鍦ㄧ嚎</el-tag> + <el-tag size="medium" type="info" v-if="scope.row.status === 0">绂荤嚎</el-tag> </div> </template> </el-table-column> - <el-table-column label="鎿嶄綔" width="280" align="center" fixed="right"> + <el-table-column label="鎿嶄綔" min-width="280" fixed="right"> <template slot-scope="scope"> - <el-button-group> - <!-- <el-button size="mini" icon="el-icon-video-play" v-if="scope.row.parental == 0" @click="sendDevicePush(scope.row)">鎾斁</el-button> --> - <el-button size="mini" icon="el-icon-video-play" @click="sendDevicePush(scope.row)">鎾斁</el-button> - <el-button size="mini" icon="el-icon-switch-button" type="danger" v-if="!!scope.row.streamId" - @click="stopDevicePush(scope.row)">鍋滄 - </el-button> - <el-button size="mini" icon="el-icon-s-open" type="primary" v-if="scope.row.subCount > 0 || scope.row.parental === 1" - @click="changeSubchannel(scope.row)">鏌ョ湅 - </el-button> - <el-button size="mini" icon="el-icon-video-camera" type="primary" @click="queryRecords(scope.row)">璁惧褰曞儚 - </el-button> - <!-- <el-button size="mini" @click="sendDevicePush(scope.row)">褰曞儚鏌ヨ</el-button> --> - </el-button-group> + <!-- <el-button size="mini" icon="el-icon-video-play" v-if="scope.row.parental == 0" @click="sendDevicePush(scope.row)">鎾斁</el-button> --> + <el-button size="medium" icon="el-icon-video-play" type="text" @click="sendDevicePush(scope.row)">鎾斁</el-button> + <el-button size="medium" icon="el-icon-switch-button" type="text" style="color: #f56c6c" v-if="!!scope.row.streamId" + @click="stopDevicePush(scope.row)">鍋滄 + </el-button> + <el-divider direction="vertical"></el-divider> + <el-button size="medium" icon="el-icon-s-open" type="text" v-if="scope.row.subCount > 0 || scope.row.parental === 1" + @click="changeSubchannel(scope.row)">鏌ョ湅 + </el-button> + <el-divider v-if="scope.row.subCount > 0 || scope.row.parental === 1" direction="vertical"></el-divider> + <el-button size="medium" icon="el-icon-video-camera" type="text" @click="queryRecords(scope.row)">璁惧褰曞儚 + </el-button> </template> </el-table-column> </el-table> - <el-pagination style="float: right" @size-change="handleSizeChange" @current-change="currentChange" - :current-page="currentPage" :page-size="count" :page-sizes="[15, 20, 30, 50]" - layout="total, sizes, prev, pager, next" :total="total"> + <el-pagination + style="float: right" + @size-change="handleSizeChange" + @current-change="currentChange" + :current-page="currentPage" + :page-size="count" + :page-sizes="[15, 25, 35, 50]" + layout="total, sizes, prev, pager, next" + :total="total"> </el-pagination> </div> </template> @@ -111,6 +112,8 @@ import devicePlayer from './dialog/devicePlayer.vue' import uiHeader from '../layout/UiHeader.vue' import moment from "moment"; +import DviceService from "./service/DeviceService"; +import DeviceService from "./service/DeviceService"; export default { name: 'channelList', @@ -120,6 +123,8 @@ }, data() { return { + deviceService: new DeviceService(), + device: null, deviceId: this.$route.params.deviceId, parentChannelId: this.$route.params.parentChannelId, deviceChannelList: [], @@ -135,16 +140,21 @@ total: 0, beforeUrl: "/deviceList", isLoging: false, - autoList: true, loadSnap: {} }; }, mounted() { - this.initData(); - if (this.autoList) { - this.updateLooper = setInterval(this.initData, 5000); + if (this.deviceId) { + this.deviceService.getDevice(this.deviceId, (result)=>{ + this.device = result; + + }, (error)=>{ + console.log("鑾峰彇璁惧淇℃伅澶辫触") + console.error(error) + }) } + this.initData(); }, destroyed() { @@ -177,12 +187,8 @@ }) }, handleSizeChange: function (val) { - var url = `/${this.$router.currentRoute.name}/${this.$router.params.deviceId}/${this.$router.params.parentChannelId}/${val}/1` - this.$router.push(url).then(() => { - this.initParam(); - this.initData(); - }) - + this.count = val; + this.getDeviceChannelList(); }, getDeviceChannelList: function () { let that = this; @@ -220,13 +226,14 @@ method: 'get', url: '/api/play/start/' + deviceId + '/' + channelId }).then(function (res) { + console.log(res) that.isLoging = false; if (res.data.code === 0) { setTimeout(() => { let snapId = deviceId + "_" + channelId; - that.loadSnap[snapId] = 0; + that.loadSnap[deviceId + channelId] = 0; that.getSnapErrorEvent(snapId) }, 5000) that.$refs.devicePlayer.openDialog("media", deviceId, channelId, { @@ -237,14 +244,17 @@ that.initData(); }, 1000) - } else { + }else{ that.$message.error(res.data.msg); } }).catch(function (e) { + console.error(e) + that.isLoging = false; + // that.$message.error("璇锋眰瓒呮椂"); }); }, queryRecords: function (itemData) { - var format = moment().format("YYYY-M-D"); + var format = moment().format("yyyy-MM-DD"); let deviceId = this.deviceId; let channelId = itemData.channelId; this.$refs.devicePlayer.openDialog("record", deviceId, channelId, {date: format}) @@ -265,19 +275,24 @@ }); }, getSnap: function (row) { - return '/static/snap/' + row.deviceId + '_' + row.channelId + '.jpg' + let url = (process.env.NODE_ENV === 'development'? "debug": "") + '/api/device/query/snap/' + row.deviceId + '/' + row.channelId + return url }, - getSnapErrorEvent: function (id) { + getBigSnap: function (row) { + return [this.getSnap(row)] + }, + getSnapErrorEvent: function (deviceId, channelId) { - if (typeof (this.loadSnap[id]) != "undefined") { - console.log("涓嬭浇鎴浘" + this.loadSnap[id]) - if (this.loadSnap[id] > 5) { - delete this.loadSnap[id]; + if (typeof (this.loadSnap[deviceId + channelId]) != "undefined") { + console.log("涓嬭浇鎴浘" + this.loadSnap[deviceId + channelId]) + if (this.loadSnap[deviceId + channelId] > 5) { + delete this.loadSnap[deviceId + channelId]; return; } setTimeout(() => { - this.loadSnap[id]++ - document.getElementById(id).setAttribute("src", '/static/snap/' + id + '.jpg?' + new Date().getTime()) + let url = (process.env.NODE_ENV === 'development'? "debug": "") + '/api/device/query/snap/' + deviceId + '/' + channelId + this.loadSnap[deviceId + channelId]++ + document.getElementById(deviceId + channelId).setAttribute("src", url + '?' + new Date().getTime()) }, 1000) } @@ -338,12 +353,8 @@ console.log(JSON.stringify(res)); }); }, - autoListChange: function () { - if (this.autoList) { - this.updateLooper = setInterval(this.initData, 1500); - } else { - window.clearInterval(this.updateLooper); - } + refresh: function () { + this.initData(); } } -- Gitblit v1.8.0