From 8afb1cbbeeccc488b43d33da8ca83f4e3ff1f2b4 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Wed, 08 Feb 2023 16:50:20 +0800
Subject: [PATCH] 视频监控树结构更改,地图添加影像服务

---
 src/views/video/list.vue |  298 ++++++++++++++++++++++++-----------------------------------
 1 files changed, 123 insertions(+), 175 deletions(-)

diff --git a/src/views/video/list.vue b/src/views/video/list.vue
index ad6d526..7f6a657 100644
--- a/src/views/video/list.vue
+++ b/src/views/video/list.vue
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2022-08-18 16:18:17
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2023-01-12 17:08:15
+ * @LastEditTime: 2023-02-08 11:21:57
  * @FilePath: \srs-police-affairs\src\views\video\list.vue
  * @Description: 辖区管理
  * 
@@ -14,13 +14,7 @@
         <div v-show="boxShow" class="container-content">
             <div class="search-box">
                 点位名称:
-                <input
-                    v-model="searchValue"
-                    @input="searchChange"
-                    type="text"
-                    placeholder="请输入搜索条件"
-                />
-                <button @click="searchClick" class="el-icon-search"></button>
+                <input v-model="searchValue" @input="searchChange" type="text" placeholder="请输入搜索条件" />
             </div>
 
             <div class="draw-btn">
@@ -37,79 +31,49 @@
                 <button @click="changeRange" class="btn">确定</button>
             </div>
             <div v-show="searchValBoxShow" class="search-val-box">
-                <div
-                    @click="searchVlaClick(item)"
-                    v-for="(item, index) in searchArray"
-                    :key="index"
-                >{{ item.name }}</div>
+                <div @click="searchVlaClick(item)" v-for="(item, index) in searchArray" :key="index">{{ item.name }}
+                </div>
             </div>
 
             <div class="down-tree">
                 <el-scrollbar>
-                    <el-tree :props="props" :load="loadNode" lazy @node-click="treeClick"></el-tree>
+                    <el-tree v-show="searchLazyFlag" :props="props" :load="loadNode" lazy
+                        @node-click="treeClick"></el-tree>
+
+                    <el-tree v-show="searchLazyFlag == false" :data="searchTreeData" :props="defaultProps"
+                        :default-expand-all="true" @node-click="treeClick"></el-tree>
                 </el-scrollbar>
             </div>
 
             <div class="list-show" v-if="false">
                 <div class="car-list">
                     <div class="list-box">
-                        <el-table
-                            :data="monitoringList"
-                            style="width: 100%"
+                        <el-table :data="monitoringList" style="width: 100%"
                             :header-cell-style="{ 'text-align': 'center', 'background-color': 'rgba(9, 40, 199, 0.5)', 'borderColor': '#324e75' }"
-                            :cell-style="{ 'text-align': 'center', 'borderColor': '#324e75' }"
-                            @cell-click="rowClick"
-                        >
-                            <el-table-column
-                                :show-overflow-tooltip="true"
-                                prop="name"
-                                label="点位名称"
-                                min-width="35%"
-                            ></el-table-column>
-                            <el-table-column
-                                :show-overflow-tooltip="true"
-                                prop="pTZTypeText"
-                                label="点位类型"
-                                min-width="35%"
-                            ></el-table-column>
-                            <el-table-column
-                                :show-overflow-tooltip="true"
-                                prop="status"
-                                label="状态"
-                                min-width="30%"
-                            >
+                            :cell-style="{ 'text-align': 'center', 'borderColor': '#324e75' }" @cell-click="rowClick">
+                            <el-table-column :show-overflow-tooltip="true" prop="name" label="点位名称"
+                                min-width="35%"></el-table-column>
+                            <el-table-column :show-overflow-tooltip="true" prop="pTZTypeText" label="点位类型"
+                                min-width="35%"></el-table-column>
+                            <el-table-column :show-overflow-tooltip="true" prop="status" label="状态" min-width="30%">
                                 <template slot-scope="scope">
-                                    <div
-                                        class="state-box"
-                                        :class="{ online: scope.row.status == '1' }"
-                                    ></div>
+                                    <div class="state-box" :class="{ online: scope.row.status == '1' }"></div>
                                 </template>
                             </el-table-column>
                         </el-table>
                     </div>
                     <div class="pages">
-                        <el-pagination
-                            background
-                            layout="prev, pager, next"
-                            :page-size="pagesize"
-                            :page-count="pagesCount"
-                            :current-page="currentPage"
-                            pager-count="5"
-                            @current-change="handleCurrentChange"
-                        ></el-pagination>
+                        <el-pagination background layout="prev, pager, next" :page-size="pagesize"
+                            :page-count="pagesCount" :current-page="currentPage" pager-count="5"
+                            @current-change="handleCurrentChange"></el-pagination>
                     </div>
                 </div>
             </div>
         </div>
 
         <div class="search-content">
-            <input
-                v-model="searchExtensivelyValue"
-                @input="searchExtensivelyChange"
-                @focus="searchExtensivelyFocus"
-                type="text"
-                placeholder="请输入搜索条件"
-            />
+            <input v-model="searchExtensivelyValue" @input="searchExtensivelyChange" @focus="searchExtensivelyFocus"
+                type="text" placeholder="请输入搜索条件" />
             <div class="clear" v-show="isShowClearBtn" @click="clearSearchValue" title="清空">
                 <img src="../../../public/img/icon/clear.png" alt />
             </div>
@@ -117,39 +81,17 @@
         </div>
         <div v-show="searchExtensivelyValBoxShow" class="searchExtensively-val-box">
             <div>
-                <div
-                    @click="searchExtensivelyVlaClick(item)"
-                    v-for="(item, index) in searchExtensivelyArray"
-                    :key="index"
-                >{{ item.name }}</div>
+                <div @click="searchExtensivelyVlaClick(item)" v-for="(item, index) in searchExtensivelyArray"
+                    :key="index">{{ item.name }}</div>
             </div>
         </div>
 
-        <el-dialog
-            :title="dialogTitle"
-            :modal="false"
-            :visible.sync="dialogVisible"
-            :before-close="dialogBeforeClose"
-            :close-on-click-modal="true"
-            class="car-video-box"
-        >
-            <video
-                id="videoElement"
-                autoplay
-                controls
-                width="100%"
-                height="100%"
-                style="object-fit: fill"
-            ></video>
+        <el-dialog :title="dialogTitle" :modal="false" :visible.sync="dialogVisible" :before-close="dialogBeforeClose"
+            :close-on-click-modal="true" class="car-video-box">
+            <video id="videoElement" autoplay controls width="100%" height="100%" style="object-fit: fill"></video>
         </el-dialog>
-        <el-dialog
-            :title="drawDialogTitle"
-            :modal="false"
-            :visible.sync="drawDialogVisible"
-            :before-close="drawDialogBeforeClose"
-            :close-on-click-modal="true"
-            class="video-draw-box"
-        >
+        <el-dialog :title="drawDialogTitle" :modal="false" :visible.sync="drawDialogVisible"
+            :before-close="drawDialogBeforeClose" :close-on-click-modal="true" class="video-draw-box">
             <input type="text" v-model="drawName" placeholder="请输入绘制线或面的名称" />
             <button @click="saveDrawInfo">保存</button>
         </el-dialog>
@@ -159,13 +101,15 @@
 <script>
 import EntityDraw from "@/utils/EntityDraw.js"
 import { listQuery, accurateSearch } from "@/utils/search.js"
-import { getVideoList, getDevices, getRegionList, insertRegionSaveList, getTreeDevices } from '@/api/video/index.js'
+import { getVideoList, getDevices, getRegionList, insertRegionSaveList, getTreeDevices, getSearchTreeDevices } from '@/api/video/index.js'
 import { getSearchExtensively } from '@/api/dept/index.js'
 import flvjs from 'flv.js'
 
 let graphicLayer = null
 
 export default {
+    inject: ['userInfo'],
+
     data () {
         return {
             currentPage: 1,
@@ -195,12 +139,16 @@
             props: {
                 label: 'name',
                 children: 'zones',
-                isLeaf: (data, node) => {
-                    if (data.parent == false) {
-                        return true
-                    }
-                }
+                isLeaf: 'leaf'
             },
+
+            defaultProps: {
+                children: "children", //代表children为子级
+                label: "name", //根据name渲染tree列表
+            },
+
+            searchLazyFlag: true,
+            searchTreeData: []
         }
     },
 
@@ -325,31 +273,21 @@
             this.drawName = ''
         },
 
-        searchChange () {
-            if (this.searchValue == '') {
-                this.searchValBoxShow = false
-                this.searchArray = []
-                this.getVideoList(this.currentPage, this.pagesize, this.searchValue)
-                this.$message({
-                    message: '请输入搜索内容',
-                    type: 'warning'
-                })
-            } else {
-                this.searchArray = listQuery(this.monitoringSaveList, this.searchValue, 'name')
-                this.searchValBoxShow = true
-                this.getVideoList(this.currentPage, this.pagesize, this.searchValue)
-            }
-        },
+        searchChange (e) {
+            if (e.target.value.trim() != '') {
+                this.searchLazyFlag = false
 
-        searchClick () {
-            if (this.searchValue != '') {
-                this.searchValBoxShow = false
-                this.getVideoList(this.currentPage, this.pagesize, this.searchValue)
-            } else {
-                this.$message({
-                    message: '请输入搜索内容',
-                    type: 'warning'
+                this.searchTreeData = []
+                getSearchTreeDevices({
+                    deviceId: '36110000002009999000',
+                    parentId: '361102',
+                    deptId: this.userInfo.dept_id,
+                    name: this.searchValue.trim()
+                }).then(res => {
+                    this.searchTreeData = res.data.data
                 })
+            } else {
+                this.searchLazyFlag = true
             }
         },
 
@@ -592,62 +530,71 @@
         },
 
         async loadNode (node, resolve) {
-            if (node.level === 0) {
-                return resolve([{ name: '信州分局' }])
+            let type = Number(node.level) + 1
+
+            let data = null
+
+            let parentId = null
+
+            if (type == 1 || type == 2) {
+                parentId = 361102
+            } else {
+                parentId = node.data.id
             }
-            if (node.level === 1) {
-                let data = []
-                await getTreeDevices({ page: 1, count: 100, parentId: 361102, onlyCatalog: false }).then(res => {
-                    data = res.data.data.list
-                })
-                return resolve(data)
-            }
-            if (node.level > 1) {
-                let data = []
-                await getTreeDevices({ page: 1, count: 100, parentId: node.data.id, onlyCatalog: false }).then(res => {
-                    data = res.data.data.list
-                })
-                return resolve(data)
-            }
+
+            await getTreeDevices({
+                deviceId: '36110000002009999000',
+                parentId,
+                deptId: this.userInfo.dept_id,
+                type,
+                sourceId: type == 4 ? '' : '36110202',
+            }).then(res => {
+                data = res.data.data
+
+                data.forEach(item => item.leaf = !item.parent)
+            })
+
+            return resolve(data)
         },
 
         async treeClick (node) {
-            if (node.parent == false) {
-                console.log(node, node.name, node.id, node.basicData.channelId, node.basicData.longitude, node.basicData.latitude)
-                this.$EventBus.$emit('toPosition', {
-                    siteJd: node.basicData.longitude,
-                    siteWd: node.basicData.latitude,
-                    siteGd: 600,
-                })
-                this.$EventBus.$emit('mapClearLayer', {
-                    layerName: 'searchLayer',
-                    type: 'VectorLayer'
-                })
-                this.$EventBus.$emit('layerPointAdd', {
-                    layerName: 'searchLayer',
-                    type: 'label',
-                    params: {
-                        lng: node.basicData.longitude,
-                        lat: node.basicData.latitude,
-                        alt: 0,
-                        text: node.name
-                    }
-                })
-                this.$EventBus.$emit('layerPointAdd', {
-                    layerName: 'searchLayer',
-                    type: "billboard",
-                    params: {
-                        name: node.name,
-                        lng: node.basicData.longitude,
-                        lat: node.basicData.latitude,
-                        alt: 100,
-                        url: '/img/icon/video.png',
-                        channelId: node.id
-                    },
-                    incident: this.siteClick
-                })
+            if (node.parent == true) return
 
-            }
+            this.$EventBus.$emit('toPosition', {
+                siteJd: node.longitude,
+                siteWd: node.latitude,
+                siteGd: 600,
+            })
+
+            this.$EventBus.$emit('mapClearLayer', {
+                layerName: 'searchLayer',
+                type: 'VectorLayer'
+            })
+
+            this.$EventBus.$emit('layerPointAdd', {
+                layerName: 'searchLayer',
+                type: 'label',
+                params: {
+                    lng: node.longitude,
+                    lat: node.latitude,
+                    alt: 0,
+                    text: node.name
+                }
+            })
+
+            this.$EventBus.$emit('layerPointAdd', {
+                layerName: 'searchLayer',
+                type: "billboard",
+                params: {
+                    name: node.name,
+                    lng: node.longitude,
+                    lat: node.latitude,
+                    alt: 100,
+                    url: '/img/icon/video.png',
+                    channelId: node.id
+                },
+                incident: this.siteClick
+            })
         },
     },
 
@@ -699,14 +646,12 @@
 
             input {
                 flex: 1;
-                height: 100%;
-                font-size: 18px;
+                font-size: 16px;
                 text-indent: 1em;
                 color: #ffffff;
                 background-color: rgba(24, 79, 202, 0.6);
                 // border: 1px solid rgb(0, 92, 169);
                 border: 1px solid rgb(24, 79, 202);
-                border-radius: 20px 0 0 20px;
             }
 
             input:focus {
@@ -750,7 +695,7 @@
             border-radius: 10px;
             overflow-y: auto;
 
-            & > div {
+            &>div {
                 height: 100%;
                 padding: 0 10px;
                 line-height: 36px;
@@ -824,7 +769,7 @@
         .list-show {
             flex: 1;
 
-            & > div {
+            &>div {
                 height: 100%;
                 display: flex;
                 flex-direction: column;
@@ -858,12 +803,15 @@
         }
 
         .down-tree {
-            height: 100%;
+            flex: 1;
+            overflow: hidden;
+
             :deep(.el-tree-node.is-expanded > .el-tree-node__children) {
                 display: inline;
             }
+
             :deep(.el-scrollbar) {
-                height: calc(100% - 80px);
+                height: 100%;
             }
         }
     }
@@ -944,7 +892,7 @@
         border-radius: 10px;
         overflow: hidden;
 
-        & > div {
+        &>div {
             height: 100%;
             overflow-y: auto;
 

--
Gitblit v1.9.3