20 changed files with 459 additions and 779 deletions
			
			
		| 
		 After Width: | Height: | Size: 15 KiB  | 
| 
		 After Width: | Height: | Size: 12 KiB  | 
| 
		 After Width: | Height: | Size: 162 KiB  | 
| 
		 After Width: | Height: | Size: 7.3 KiB  | 
| 
		 After Width: | Height: | Size: 5.5 KiB  | 
| 
		 After Width: | Height: | Size: 3.8 KiB  | 
@ -1,34 +0,0 @@ | 
				
			|||||
<!--    | 
					 | 
				
			||||
  *@描述: admin主页构建 | 
					 | 
				
			||||
  *@作者:  | 
					 | 
				
			||||
  *@日期: 9/27 | 
					 | 
				
			||||
  *@版本:1.0 | 
					 | 
				
			||||
  */ | 
					 | 
				
			||||
  --> | 
					 | 
				
			||||
<template> | 
					 | 
				
			||||
    <a-row> | 
					 | 
				
			||||
        <a-col  :span="3"  class="left-com" > | 
					 | 
				
			||||
            <comLeftMenu></comLeftMenu> | 
					 | 
				
			||||
        </a-col> | 
					 | 
				
			||||
        <a-col :span="18" class=" com-setup-center "> | 
					 | 
				
			||||
            <slot></slot> | 
					 | 
				
			||||
        </a-col> | 
					 | 
				
			||||
        <a-col  :span="3" class="right-com"  ><comRightMenu></comRightMenu></a-col> | 
					 | 
				
			||||
    </a-row> | 
					 | 
				
			||||
</template> | 
					 | 
				
			||||
<script setup lang="ts"> | 
					 | 
				
			||||
import comLeftMenu from './leftMenu/index.vue'; | 
					 | 
				
			||||
import comRightMenu from './rightMenu/index.vue'; | 
					 | 
				
			||||
</script> | 
					 | 
				
			||||
<style lang="less" scoped> | 
					 | 
				
			||||
.com-setup-center { | 
					 | 
				
			||||
    height: 100vh; | 
					 | 
				
			||||
    width: 100%; | 
					 | 
				
			||||
    flex-wrap: nowrap; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
.left-com,.right-com{ | 
					 | 
				
			||||
    position:relative; | 
					 | 
				
			||||
    z-index:8; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
</style> | 
					 | 
				
			||||
@ -1,124 +0,0 @@ | 
				
			|||||
<!--    | 
					 | 
				
			||||
  *@描述: 左侧组件 | 
					 | 
				
			||||
  *@作者:  | 
					 | 
				
			||||
  *@日期: 9/27 | 
					 | 
				
			||||
  *@版本:1.0 | 
					 | 
				
			||||
  */ | 
					 | 
				
			||||
  --> | 
					 | 
				
			||||
<template> | 
					 | 
				
			||||
    <a-row class="com-left-menu-header"> | 
					 | 
				
			||||
        <span>工具栏</span> | 
					 | 
				
			||||
    </a-row> | 
					 | 
				
			||||
    <hr style="border:1px solid #00ffe4;" width="100%" /> | 
					 | 
				
			||||
    <a-row class="com-left-menu"> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        <a-tabs v-model:activeKey="activeKey" :tab-position="'left'"> | 
					 | 
				
			||||
            <a-tab-pane key="1"> | 
					 | 
				
			||||
                <template #tab> | 
					 | 
				
			||||
                    <!-- <span class="icon iconfont icon-gongneng iconfontsize"></span> --> | 
					 | 
				
			||||
                    <div class="menu-title"> | 
					 | 
				
			||||
                        功能 | 
					 | 
				
			||||
                    </div> | 
					 | 
				
			||||
                </template> | 
					 | 
				
			||||
                <Basic /> | 
					 | 
				
			||||
            </a-tab-pane> | 
					 | 
				
			||||
            <a-tab-pane key="2"> | 
					 | 
				
			||||
                <template #tab> | 
					 | 
				
			||||
                    <!-- <span class="icon iconfont icon-chanpinmoxing iconfontsize"></span> --> | 
					 | 
				
			||||
                    <div class="menu-title"> | 
					 | 
				
			||||
                        3D模型 | 
					 | 
				
			||||
                    </div> | 
					 | 
				
			||||
                </template> | 
					 | 
				
			||||
                <Models3D /> | 
					 | 
				
			||||
            </a-tab-pane> | 
					 | 
				
			||||
            <a-tab-pane key="3"> | 
					 | 
				
			||||
                <template #tab> | 
					 | 
				
			||||
                    <!-- <span class="icon iconfont icon-chanpinmoxing iconfontsize"></span> --> | 
					 | 
				
			||||
                    <div class="menu-title"> | 
					 | 
				
			||||
                        图片<br />模型 | 
					 | 
				
			||||
                    </div> | 
					 | 
				
			||||
                </template> | 
					 | 
				
			||||
                <ModelsImages /> | 
					 | 
				
			||||
            </a-tab-pane> | 
					 | 
				
			||||
            <a-tab-pane key="4"> | 
					 | 
				
			||||
                <template #tab> | 
					 | 
				
			||||
                    <!-- <span class="icon iconfont icon-shengchan iconfontsize"></span> --> | 
					 | 
				
			||||
                    <div class="menu-title"> | 
					 | 
				
			||||
                        工具 | 
					 | 
				
			||||
                    </div> | 
					 | 
				
			||||
                </template> | 
					 | 
				
			||||
                <Tools /> | 
					 | 
				
			||||
            </a-tab-pane> | 
					 | 
				
			||||
            <a-tab-pane key="5"> | 
					 | 
				
			||||
                <template #tab> | 
					 | 
				
			||||
                    <!-- <span class="icon iconfont icon-shezhi1 iconfontsize"></span> --> | 
					 | 
				
			||||
                    <div class="menu-title"> | 
					 | 
				
			||||
                        系统<br />设置 | 
					 | 
				
			||||
                    </div> | 
					 | 
				
			||||
                </template> | 
					 | 
				
			||||
                <SytemComponent /> | 
					 | 
				
			||||
            </a-tab-pane> | 
					 | 
				
			||||
        </a-tabs> | 
					 | 
				
			||||
    </a-row> | 
					 | 
				
			||||
</template> | 
					 | 
				
			||||
<script lang="ts" setup> | 
					 | 
				
			||||
import { ref } from "vue"; | 
					 | 
				
			||||
import Basic from "./leftMenuItem/basic.vue"; | 
					 | 
				
			||||
import ModelsImages from "./leftMenuItem/modelsimages.vue"; | 
					 | 
				
			||||
import Models3D from "./leftMenuItem/models3d.vue"; | 
					 | 
				
			||||
import SytemComponent from "./leftMenuItem/sytemcomponent.vue"; | 
					 | 
				
			||||
import Tools from "./leftMenuItem/tools.vue"; | 
					 | 
				
			||||
let activeKey = ref('1') | 
					 | 
				
			||||
</script> | 
					 | 
				
			||||
<style lang="less" scoped> | 
					 | 
				
			||||
.com-left-menu { | 
					 | 
				
			||||
    user-select: none; | 
					 | 
				
			||||
    height: 100vh; | 
					 | 
				
			||||
    background-color: #001529; | 
					 | 
				
			||||
    >div,:deep(.ant-tabs-tab-btn) { | 
					 | 
				
			||||
        width: 100%; | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
    .menu-title{ | 
					 | 
				
			||||
        text-align: center; | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
.com-left-menu-header { | 
					 | 
				
			||||
    padding-top: 10px; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    user-select: none; | 
					 | 
				
			||||
    height: 40px; | 
					 | 
				
			||||
    background-color: #001529; | 
					 | 
				
			||||
    text-align: center; | 
					 | 
				
			||||
    width: 100%; | 
					 | 
				
			||||
    border-width: 2px; | 
					 | 
				
			||||
    border-bottom: #fff; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    span { | 
					 | 
				
			||||
        margin-left: 40px; | 
					 | 
				
			||||
        width: 100%; | 
					 | 
				
			||||
        color: #fff; | 
					 | 
				
			||||
        font-size: 18px; | 
					 | 
				
			||||
        text-align: left; | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
:deep(.ant-tabs-tab) { | 
					 | 
				
			||||
    text-align: center !important; | 
					 | 
				
			||||
    padding: 12px 0 !important; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
:deep(.ant-tabs-left-bar) { | 
					 | 
				
			||||
    width: calc(6 / 24 * 100%); | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
:deep(.ant-tabs-left-content.ant-tabs-content.ant-tabs-content-animated), | 
					 | 
				
			||||
:deep(.ant-tabs-tabpane) { | 
					 | 
				
			||||
    padding-left: 0 !important; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
.iconfontsize { | 
					 | 
				
			||||
    font-size: 28px; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
</style> | 
					 | 
				
			||||
@ -1,78 +0,0 @@ | 
				
			|||||
<template> | 
					 | 
				
			||||
    <div class="left-com-content"> | 
					 | 
				
			||||
        <a-row> | 
					 | 
				
			||||
            <a-col class="content-item" title="添加标签" @click="addLabel"> | 
					 | 
				
			||||
                <a class="btn btnColor"> | 
					 | 
				
			||||
                    <i class="fa"> | 
					 | 
				
			||||
                        <span class="icon iconfont icon-biaoqian"></span> | 
					 | 
				
			||||
                    </i> | 
					 | 
				
			||||
                </a> | 
					 | 
				
			||||
                <div class="item-text">添加标签</div> | 
					 | 
				
			||||
            </a-col> | 
					 | 
				
			||||
            <div style="background: aqua; height: 50%"> | 
					 | 
				
			||||
                <a-tree style="background: aqua;" :tree-data="treeData" @select="selectTreeNode" /> | 
					 | 
				
			||||
            </div> | 
					 | 
				
			||||
        </a-row> | 
					 | 
				
			||||
    </div> | 
					 | 
				
			||||
</template> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
<script setup lang='ts'> | 
					 | 
				
			||||
import { audio } from "@/utils/audio"; | 
					 | 
				
			||||
import { useStore } from '@/store/index'; | 
					 | 
				
			||||
import {storeToRefs} from 'pinia'; | 
					 | 
				
			||||
import type { TreeProps } from 'ant-design-vue'; | 
					 | 
				
			||||
import * as cameraApi from '@/axios/cameraBase/cameraApi'; | 
					 | 
				
			||||
import { ref,onMounted } from 'vue'; | 
					 | 
				
			||||
let piniaStore = useStore(); | 
					 | 
				
			||||
let cameraMap = new Map<string, any>() | 
					 | 
				
			||||
let treeData = ref<TreeProps['treeData']>([]) | 
					 | 
				
			||||
let curSelectKey=storeToRefs(piniaStore).curSelectKey | 
					 | 
				
			||||
function loadTreeData() { | 
					 | 
				
			||||
    cameraApi.GetList().then((res: any) => { | 
					 | 
				
			||||
        let list: Array<any> = res.data.data; | 
					 | 
				
			||||
        console.log(list); | 
					 | 
				
			||||
             | 
					 | 
				
			||||
        cameraMap = piniaStore.addCameraMap(list) | 
					 | 
				
			||||
        treeData.value=piniaStore.treeData | 
					 | 
				
			||||
        console.log(cameraMap); | 
					 | 
				
			||||
    }); | 
					 | 
				
			||||
} | 
					 | 
				
			||||
onMounted(()=>{ | 
					 | 
				
			||||
    loadTreeData() | 
					 | 
				
			||||
}) | 
					 | 
				
			||||
function selectTreeNode(selectedKeys: any, e: any) { | 
					 | 
				
			||||
      if (!e.selected) return; | 
					 | 
				
			||||
      let key = selectedKeys[0]; | 
					 | 
				
			||||
      if (curSelectKey.value !== key) { | 
					 | 
				
			||||
        piniaStore.updateCurSelectKey(key) | 
					 | 
				
			||||
      } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
//播放音效 | 
					 | 
				
			||||
function playAudio(): void { | 
					 | 
				
			||||
    audio.click(); | 
					 | 
				
			||||
} | 
					 | 
				
			||||
//添加标签 | 
					 | 
				
			||||
function addLabel(e: string) { | 
					 | 
				
			||||
    piniaStore.updateIsAddLabel({labelType:"",isAddLabel: true}) | 
					 | 
				
			||||
    playAudio(); | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
</script> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
<style lang='less'> | 
					 | 
				
			||||
.left-com-content { | 
					 | 
				
			||||
    .content-item { | 
					 | 
				
			||||
        cursor: pointer; | 
					 | 
				
			||||
        text-align: center; | 
					 | 
				
			||||
        padding: 5px 0; | 
					 | 
				
			||||
        margin: 1%; | 
					 | 
				
			||||
        width: 48%; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        .fa span { | 
					 | 
				
			||||
            font-size: 25px; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
</style> | 
					 | 
				
			||||
@ -1,128 +0,0 @@ | 
				
			|||||
<template> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    <div class="left-com-content"> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        <a-collapse v-model:activeKey="activeKey" accordion> | 
					 | 
				
			||||
            <a-collapse-panel v-for="item in header" :key="item.id" :header="item.group_name"> | 
					 | 
				
			||||
                <div class="img-box"> | 
					 | 
				
			||||
                    <div class="img" v-for="ele in item.itemArr" @click="addModelFn(ele.url,ele.oldUrl)"> | 
					 | 
				
			||||
                        <img draggable="false" class="collapse-panel-img" width="36" height="36" :src="ele.dis_img" | 
					 | 
				
			||||
                            :alt="ele.model_name"> | 
					 | 
				
			||||
                    </div> | 
					 | 
				
			||||
                </div> | 
					 | 
				
			||||
            </a-collapse-panel> | 
					 | 
				
			||||
        </a-collapse> | 
					 | 
				
			||||
    </div> | 
					 | 
				
			||||
</template> | 
					 | 
				
			||||
<script setup lang="ts"> | 
					 | 
				
			||||
import { ref } from 'vue'; | 
					 | 
				
			||||
import api from "@/axios/api"; | 
					 | 
				
			||||
import { useStore } from '@/store/index'; | 
					 | 
				
			||||
let piniaStore = useStore(); | 
					 | 
				
			||||
const activeKey = ref([]); | 
					 | 
				
			||||
let header: any = ref([]) | 
					 | 
				
			||||
//图片基础路径 | 
					 | 
				
			||||
let baseUrl = process.env.VUE_APP_API_BASE_URL + "/sys/common/static/";// api base_urll | 
					 | 
				
			||||
let p1 = api.modelsinfo.getModels3DGroup( ).then(res => | 
					 | 
				
			||||
{ | 
					 | 
				
			||||
    return res.data; | 
					 | 
				
			||||
}) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
let p2 = api.modelsinfo.getModels3D().then(res => | 
					 | 
				
			||||
{ | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    return res.data; | 
					 | 
				
			||||
}) | 
					 | 
				
			||||
Promise.all([p1, p2]).then(res => | 
					 | 
				
			||||
{ | 
					 | 
				
			||||
    let headerArr = res[0] | 
					 | 
				
			||||
    let itemArr = res[1] | 
					 | 
				
			||||
    //循环折叠标题数组 | 
					 | 
				
			||||
    headerArr.forEach((element: any, index: number) => | 
					 | 
				
			||||
    { | 
					 | 
				
			||||
        //每个折叠标题添加一个存储子元素的数组 | 
					 | 
				
			||||
        element.itemArr = [] | 
					 | 
				
			||||
        header.value.push(element) | 
					 | 
				
			||||
        itemArr?.forEach((item: any) => | 
					 | 
				
			||||
        { | 
					 | 
				
			||||
             | 
					 | 
				
			||||
            //判断图片是否为该标题所属 | 
					 | 
				
			||||
            if (element.group_name == item.model_group_name) | 
					 | 
				
			||||
            { | 
					 | 
				
			||||
                item.oldUrl = item.url | 
					 | 
				
			||||
                item.url = baseUrl+item.url | 
					 | 
				
			||||
                item.dis_img = baseUrl + item.previewurl | 
					 | 
				
			||||
                header.value[index].itemArr.push(item) | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
    }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
}) | 
					 | 
				
			||||
let cus: any = null; | 
					 | 
				
			||||
function addModelFn (url: string,img:string): void | 
					 | 
				
			||||
{ | 
					 | 
				
			||||
    cus.creating = true | 
					 | 
				
			||||
    cus.img = img | 
					 | 
				
			||||
    piniaStore.editType = 30; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
</script> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
<style scoped lang='less'> | 
					 | 
				
			||||
.left-com-content { | 
					 | 
				
			||||
    .content-item { | 
					 | 
				
			||||
        cursor: pointer; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        padding: 5px 0; | 
					 | 
				
			||||
        margin: 1%; | 
					 | 
				
			||||
        width: 48%; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        .fa span { | 
					 | 
				
			||||
            font-size: 25px; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
:deep(.ant-collapse-content-box) { | 
					 | 
				
			||||
    padding: 16px 10px; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
.img-box { | 
					 | 
				
			||||
    text-align: left; | 
					 | 
				
			||||
    display: flex; | 
					 | 
				
			||||
    flex-wrap: wrap; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    .img { | 
					 | 
				
			||||
        flex-basis: 1 / 3 * 100%; | 
					 | 
				
			||||
        text-align: center; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        .collapse-panel-img { | 
					 | 
				
			||||
            padding: 2px; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            &:hover { | 
					 | 
				
			||||
                border: 1px solid #001529; | 
					 | 
				
			||||
                cursor: pointer; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
:deep(.ant-collapse) { | 
					 | 
				
			||||
    background-color: #001529; | 
					 | 
				
			||||
    border: #fff; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    .ant-collapse-item { | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        .ant-collapse-header { | 
					 | 
				
			||||
            color: #fff !important; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            span { | 
					 | 
				
			||||
                color: #fff; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
} | 
					 | 
				
			||||
</style> | 
					 | 
				
			||||
@ -1,118 +0,0 @@ | 
				
			|||||
<template> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    <div class="left-com-content"> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        <a-collapse v-model:activeKey="activeKey" accordion> | 
					 | 
				
			||||
            <a-collapse-panel v-for="item in header" :key="item.id" :header="item.group_name"> | 
					 | 
				
			||||
                <div class="img-box"> | 
					 | 
				
			||||
                    <div class="img" v-for="ele in item.itemArr" @click="addImage(ele.dis_img,ele.url)"> | 
					 | 
				
			||||
                        <img draggable="false" class="collapse-panel-img" width="36" height="36" :src="ele.dis_img" | 
					 | 
				
			||||
                            :alt="ele.model_name"> | 
					 | 
				
			||||
                    </div> | 
					 | 
				
			||||
                </div> | 
					 | 
				
			||||
            </a-collapse-panel> | 
					 | 
				
			||||
        </a-collapse> | 
					 | 
				
			||||
    </div> | 
					 | 
				
			||||
</template> | 
					 | 
				
			||||
<script setup lang="ts"> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
import { ref } from 'vue'; | 
					 | 
				
			||||
import api from "@/axios/api"; | 
					 | 
				
			||||
import { useStore } from '@/store/index'; | 
					 | 
				
			||||
let piniaStore = useStore(); | 
					 | 
				
			||||
const activeKey = ref([]); | 
					 | 
				
			||||
let header: any = ref([]) | 
					 | 
				
			||||
//图片基础路径 | 
					 | 
				
			||||
let baseUrl = process.env.VUE_APP_API_BASE_URL + "/sys/common/static/"; // api base_urll | 
					 | 
				
			||||
let p1 = api.modelsinfo.getModelsImageGroup().then(res => { | 
					 | 
				
			||||
    return res.data; | 
					 | 
				
			||||
}) | 
					 | 
				
			||||
let p2 = api.modelsinfo.getModelsImage().then(res => { | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    return res.data; | 
					 | 
				
			||||
}) | 
					 | 
				
			||||
Promise.all([p1, p2]).then(res => { | 
					 | 
				
			||||
    let headerArr = res[0] | 
					 | 
				
			||||
    let itemArr = res[1] | 
					 | 
				
			||||
    //循环折叠标题数组 | 
					 | 
				
			||||
    headerArr.forEach((element: any, index: number) => { | 
					 | 
				
			||||
        //每个折叠标题添加一个存储子元素的数组 | 
					 | 
				
			||||
        element.itemArr = [] | 
					 | 
				
			||||
        header.value.push(element) | 
					 | 
				
			||||
        itemArr?.forEach((item: any) => { | 
					 | 
				
			||||
            //判断图片是否为该标题所属 | 
					 | 
				
			||||
            if (element.group_name == item.model_group_name) { | 
					 | 
				
			||||
                item.dis_img = baseUrl + item.url | 
					 | 
				
			||||
                header.value[index].itemArr.push(item) | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        }) | 
					 | 
				
			||||
    }); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
}) | 
					 | 
				
			||||
let cus: any = null; | 
					 | 
				
			||||
function addImage(imgstr: string,img:string): void { | 
					 | 
				
			||||
    cus.creating = true | 
					 | 
				
			||||
    cus.img = img | 
					 | 
				
			||||
    piniaStore.editType = 2; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
</script> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
<style scoped lang='less'> | 
					 | 
				
			||||
.left-com-content { | 
					 | 
				
			||||
    .content-item { | 
					 | 
				
			||||
        cursor: pointer; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        padding: 5px 0; | 
					 | 
				
			||||
        margin: 1%; | 
					 | 
				
			||||
        width: 48%; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        .fa span { | 
					 | 
				
			||||
            font-size: 25px; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
:deep(.ant-collapse-content-box) { | 
					 | 
				
			||||
    padding: 16px 10px; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
.img-box { | 
					 | 
				
			||||
    text-align: left; | 
					 | 
				
			||||
    display: flex; | 
					 | 
				
			||||
    flex-wrap: wrap; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    .img { | 
					 | 
				
			||||
        flex-basis: 1 / 3 * 100%; | 
					 | 
				
			||||
        text-align: center; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        .collapse-panel-img { | 
					 | 
				
			||||
            padding: 2px; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            &:hover { | 
					 | 
				
			||||
                border: 1px solid #001529; | 
					 | 
				
			||||
                cursor: pointer; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
:deep(.ant-collapse) { | 
					 | 
				
			||||
    background-color: #001529; | 
					 | 
				
			||||
    border: #fff; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    .ant-collapse-item { | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        .ant-collapse-header { | 
					 | 
				
			||||
            color: #fff !important; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            span { | 
					 | 
				
			||||
                color: #fff; | 
					 | 
				
			||||
            } | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
} | 
					 | 
				
			||||
</style> | 
					 | 
				
			||||
@ -1,73 +0,0 @@ | 
				
			|||||
<template> | 
					 | 
				
			||||
    <div class="left-com-content"> | 
					 | 
				
			||||
        <a-row> | 
					 | 
				
			||||
            <a-col class="content-item" @click="haplochromatizationListEvent" title="单体化列表"> | 
					 | 
				
			||||
                <a class="btn btnColor"> | 
					 | 
				
			||||
                    <i class="fa"> | 
					 | 
				
			||||
                        <span class="icon iconfont icon-moxing-miaobian"></span> | 
					 | 
				
			||||
                    </i> | 
					 | 
				
			||||
                </a> | 
					 | 
				
			||||
                <div class="item-text">用户管理</div> | 
					 | 
				
			||||
            </a-col> | 
					 | 
				
			||||
            <a-col class="content-item" @click="addhaplochromatization" title="单体化"> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
                <a class="btn btnColor"> | 
					 | 
				
			||||
                    <i class="fa"> | 
					 | 
				
			||||
                        <span class="icon iconfont icon-sanweimoxing"></span> | 
					 | 
				
			||||
                    </i> | 
					 | 
				
			||||
                </a> | 
					 | 
				
			||||
                <div class="item-text">相机配置</div> | 
					 | 
				
			||||
            </a-col> | 
					 | 
				
			||||
        </a-row> | 
					 | 
				
			||||
    </div> | 
					 | 
				
			||||
</template> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
<script setup lang='ts'> | 
					 | 
				
			||||
import { useStore } from '@/store/index'; | 
					 | 
				
			||||
import { audio } from "@/utils/audio"; | 
					 | 
				
			||||
let piniaStore = useStore(); | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
function haplochromatizationListEvent(): void { | 
					 | 
				
			||||
    playAudio(); | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
function addhaplochromatization(): void { | 
					 | 
				
			||||
    piniaStore.editType = 501 | 
					 | 
				
			||||
} | 
					 | 
				
			||||
function fenceListFn() { | 
					 | 
				
			||||
    playAudio(); | 
					 | 
				
			||||
} | 
					 | 
				
			||||
//防区 | 
					 | 
				
			||||
function addDefenceArea(): void { | 
					 | 
				
			||||
    playAudio(); | 
					 | 
				
			||||
    piniaStore.editType = 502 | 
					 | 
				
			||||
} | 
					 | 
				
			||||
//播放音效 | 
					 | 
				
			||||
function playAudio(): void { | 
					 | 
				
			||||
    audio.click(); | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
</script> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
<style scoped lang='less'> | 
					 | 
				
			||||
.left-com-content { | 
					 | 
				
			||||
    .content-item { | 
					 | 
				
			||||
        cursor: pointer; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        padding: 5px 0; | 
					 | 
				
			||||
        margin: 1%; | 
					 | 
				
			||||
        width: 48%; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        .fa span { | 
					 | 
				
			||||
            font-size: 25px; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
</style> | 
					 | 
				
			||||
@ -1,100 +0,0 @@ | 
				
			|||||
<template> | 
					 | 
				
			||||
    <div class="left-com-content"> | 
					 | 
				
			||||
        <a-row> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            <a-col class="content-item" title="位置测量" @click="measureMent('POINT')"> | 
					 | 
				
			||||
                <a class="btn btnColor"> | 
					 | 
				
			||||
                    <i class="fa"> | 
					 | 
				
			||||
                        <span class="icon iconfont icon-31dingwei"></span> | 
					 | 
				
			||||
                    </i> | 
					 | 
				
			||||
                </a> | 
					 | 
				
			||||
                <div class="item-text">位置测量</div> | 
					 | 
				
			||||
            </a-col> | 
					 | 
				
			||||
            <a-col class="content-item" title="距离测量" @click="measureMent('SPACE_DISTANCE')"> | 
					 | 
				
			||||
                <a class="btn btnColor"> | 
					 | 
				
			||||
                    <i class="fa"> | 
					 | 
				
			||||
                        <span class="icon iconfont icon-chizi"></span> | 
					 | 
				
			||||
                    </i> | 
					 | 
				
			||||
                </a> | 
					 | 
				
			||||
                <div class="item-text">距离测量</div> | 
					 | 
				
			||||
            </a-col> | 
					 | 
				
			||||
            <a-col class="content-item" title="三角测量" @click="measureMent('TRIANGLE_DISTANCE')"> | 
					 | 
				
			||||
                <a class="btn btnColor"> | 
					 | 
				
			||||
                    <i class="fa"> | 
					 | 
				
			||||
                        <span class="icon iconfont icon-celiangleixing"></span> | 
					 | 
				
			||||
                    </i> | 
					 | 
				
			||||
                </a> | 
					 | 
				
			||||
                <div class="item-text">三角测量</div> | 
					 | 
				
			||||
            </a-col> | 
					 | 
				
			||||
            <a-col class="content-item" title="面积测量" @click="measureMent('SPACE_AREA')"> | 
					 | 
				
			||||
                <a class="btn btnColor"> | 
					 | 
				
			||||
                    <i class="fa" style="font-size:35px"> | 
					 | 
				
			||||
                        <span class="icon iconfont icon-mianjiceliang"></span> | 
					 | 
				
			||||
                    </i> | 
					 | 
				
			||||
                </a> | 
					 | 
				
			||||
                <div class="item-text">面积测量</div> | 
					 | 
				
			||||
            </a-col> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
            <a-col class="content-item" title="属性设置" @click="setProperties"> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
                <a class="btn btnColor"> | 
					 | 
				
			||||
                    <i class="fa"> | 
					 | 
				
			||||
                        <span class="icon iconfont  icon-shezhi"></span> | 
					 | 
				
			||||
                    </i> | 
					 | 
				
			||||
                </a> | 
					 | 
				
			||||
                <div class="item-text">属性设置</div> | 
					 | 
				
			||||
            </a-col> | 
					 | 
				
			||||
            <a-col class="content-item" title="清空测量结果" @click="clearResults"> | 
					 | 
				
			||||
                <a class="btn btnColor"> | 
					 | 
				
			||||
                    <i class="fa"> | 
					 | 
				
			||||
                        <span class="icon iconfont icon-Eliminate" style="color: #D35400;"></span> | 
					 | 
				
			||||
                    </i> | 
					 | 
				
			||||
                </a> | 
					 | 
				
			||||
                <div class="item-text" style="color: #D35400;">清空测量</div> | 
					 | 
				
			||||
            </a-col> | 
					 | 
				
			||||
        </a-row> | 
					 | 
				
			||||
    </div> | 
					 | 
				
			||||
</template> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
<script setup lang='ts'> | 
					 | 
				
			||||
import { ref, h, onMounted, getCurrentInstance, ComponentInternalInstance } from "vue"; | 
					 | 
				
			||||
import { audio } from "@/utils/audio"; | 
					 | 
				
			||||
let measureMentType = ref("NONE"); | 
					 | 
				
			||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance; | 
					 | 
				
			||||
onMounted(() => { | 
					 | 
				
			||||
}) | 
					 | 
				
			||||
 | 
					 | 
				
			||||
//播放音效 | 
					 | 
				
			||||
function playAudio(): void { | 
					 | 
				
			||||
    audio.click(); | 
					 | 
				
			||||
} | 
					 | 
				
			||||
//属性设置 | 
					 | 
				
			||||
function setProperties(): void { | 
					 | 
				
			||||
    playAudio(); | 
					 | 
				
			||||
} | 
					 | 
				
			||||
 | 
					 | 
				
			||||
//清除测量结果 | 
					 | 
				
			||||
function clearResults(): void { | 
					 | 
				
			||||
    measureMentType.value = "NONE"; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
function measureMent(Type: string) { | 
					 | 
				
			||||
    measureMentType.value = Type; | 
					 | 
				
			||||
} | 
					 | 
				
			||||
</script> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
<style scoped lang='less'> | 
					 | 
				
			||||
.left-com-content { | 
					 | 
				
			||||
    .content-item { | 
					 | 
				
			||||
        cursor: pointer; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        padding: 5px 0; | 
					 | 
				
			||||
        margin: 1%; | 
					 | 
				
			||||
        width: 48%; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        .fa span { | 
					 | 
				
			||||
            font-size: 25px; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
</style> | 
					 | 
				
			||||
@ -1,42 +0,0 @@ | 
				
			|||||
<!--    | 
					 | 
				
			||||
  *@描述: 右侧面板 基本信息-数据绑定 | 
					 | 
				
			||||
  *@作者:  | 
					 | 
				
			||||
  *@日期:  | 
					 | 
				
			||||
  *@版本:1.0 | 
					 | 
				
			||||
  */ | 
					 | 
				
			||||
  --> | 
					 | 
				
			||||
<template> | 
					 | 
				
			||||
    <div class="rightMenu-class"> | 
					 | 
				
			||||
        <a-tabs v-model:activeKey="activeKey"> | 
					 | 
				
			||||
            <a-tab-pane key="1" tab="首页"> | 
					 | 
				
			||||
                 | 
					 | 
				
			||||
                <VideoControl></VideoControl> | 
					 | 
				
			||||
            </a-tab-pane> | 
					 | 
				
			||||
            <a-tab-pane key="2" tab="首页2"> | 
					 | 
				
			||||
                暂无信息2 | 
					 | 
				
			||||
            </a-tab-pane> | 
					 | 
				
			||||
        </a-tabs> | 
					 | 
				
			||||
    </div> | 
					 | 
				
			||||
</template> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
<script lang="ts" setup> | 
					 | 
				
			||||
import VideoControl from '@/views/page/VideoControl/VideoControl.vue'; | 
					 | 
				
			||||
import { ref } from 'vue' | 
					 | 
				
			||||
let activeKey = ref('1') | 
					 | 
				
			||||
</script> | 
					 | 
				
			||||
 | 
					 | 
				
			||||
<style lang="less" scoped> | 
					 | 
				
			||||
.rightMenu-class { | 
					 | 
				
			||||
    user-select: none; | 
					 | 
				
			||||
    overflow: auto; | 
					 | 
				
			||||
    height: 100vh; | 
					 | 
				
			||||
    background-color: #001529; | 
					 | 
				
			||||
    :deep(.ant-tabs-nav-list) { | 
					 | 
				
			||||
        margin: 0 auto; | 
					 | 
				
			||||
        padding: 0 20px; | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
    :deep(.ant-tabs-tabpane){ | 
					 | 
				
			||||
        text-align: center; | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
</style> | 
					 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue