刘妍 3 months ago
commit d8c9935e13

@ -0,0 +1,43 @@
# Whether to open mock
VITE_USE_MOCK = true
# public path
VITE_PUBLIC_PATH = /
# Whether to enable gzip or brotli compression
# Optional: gzip | brotli | none
# If you need multiple forms, you can use `,` to separate
VITE_BUILD_COMPRESS = 'none'
# Basic interface address SPA
# 天空地项目
VITE_GLOB_API_URL=http://175.27.168.120:6001
VITE_GLOB_INFO_IMAGE_URL=http://175.27.168.120:6079
# File upload address optional
# It can be forwarded by nginx or write the actual address directly
VITE_GLOB_UPLOAD_URL=http://175.27.168.120:6079
# Interface prefix
VITE_GLOB_API_URL_PREFIX=
VITE_GLOB_APP_TITLE = 天网慧眼低空态势感知平台
VITE_GLOB_APP_EN_TITLE = The Information System of Lanling County Natural Resources and Planning Bureau
VITE_GLOB_APP_LOGO = /logo.png
VITE_GLOB_APP_MANAGEMENT_UNIT = 管理单位:天网慧眼低空态势感知平台
VITE_GLOB_APP_TECHINICAL_SUPPORT = 技术⽀持:天网慧眼低空态势感知平台
VITE_GLOB_APP_VERSIONS = 系统版本V1.0
VITE_GLOB_YINGXIANG_SERVER = http://192.168.31.205:8080/geoserver/ne/wms?service=WMS&version=1.1.0&request=GetMap&layers=ne:linyitif&styles=&bbox={bbox-epsg-3857}&width=256&height=256&srs=EPSG:3857&format=image/png&TRANSPARENT=TRUE
VITE_GLOB_FILE_PREVIEW = http://120.222.154.7:6081

@ -0,0 +1,7 @@
{
"i18n-ally.localesPaths": [
"src/locales",
"src/locales/lang",
"public/resource/tinymce/langs"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

@ -20,7 +20,7 @@ const dashboard: AppRouteModule = {
meta: {
title: t('routes.dashboard.analysis'),
},
component: () => import('@/views/home/index.vue'),
component: () => import('@/views/demo/workmanagement/workplan/index.vue'),
},
],
};

@ -0,0 +1,332 @@
<template>
<div class="container">
<div class="title">
<LeftOutlined @click="checkAriLine(null)" /> &nbsp; 选择航线
</div>
<div class="filter-container">
<div>
<a-select
ref="select"
style="width: 185px"
placeholder="全部机型"
>
<a-select-option value="jack">全部机型</a-select-option>
<a-select-option value="lucy">经纬 M30 系列</a-select-option>
<a-select-option value="disabled">Mavic 3 行业系列</a-select-option>
<a-select-option value="Yiminghe">Matrice 3D 系列</a-select-option>
</a-select>
</div>
<div>
<a-select
ref="select"
style="width: 185px"
placeholder="时间排序"
>
<a-select-option value="jack">时间倒序</a-select-option>
<a-select-option value="lucy">时间正序</a-select-option>
</a-select>
</div>
<div class="filter-buttons">
<div class="filter-button">
<svg t="1749104723424" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7226" width="24" height="24"><path d="M784 454.4c-28.8 0-54.4 12.8-70.4 35.2L326.4 352l188.8-134.4c12.8 6.4 25.6 12.8 41.6 12.8 48 0 86.4-38.4 86.4-86.4S608 64 560 64s-86.4 38.4-86.4 86.4c0 9.6 3.2 16 3.2 25.6l-179.2 128c-12.8-19.2-35.2-28.8-57.6-28.8-48 0-86.4 38.4-86.4 86.4S192 448 240 448c25.6 0 51.2-12.8 67.2-32l352 124.8L320 608c-12.8-32-41.6-57.6-80-57.6-48 0-86.4 38.4-86.4 86.4s38.4 86.4 86.4 86.4c35.2 0 64-19.2 76.8-51.2l396.8-83.2c16 22.4 41.6 38.4 70.4 38.4 48 0 86.4-38.4 86.4-86.4 0-48-38.4-86.4-86.4-86.4z m-224-342.4c19.2 0 35.2 16 35.2 35.2s-16 35.2-35.2 35.2c-19.2 0-35.2-16-35.2-35.2s16-35.2 35.2-35.2z m-320 284.8c-19.2 0-35.2-16-35.2-35.2s16-35.2 35.2-35.2 35.2 16 35.2 35.2-16 35.2-35.2 35.2z m0 275.2c-19.2 0-35.2-16-35.2-35.2s16-35.2 35.2-35.2 35.2 16 35.2 35.2S259.2 672 240 672z m544-92.8c-19.2 0-35.2-16-35.2-35.2 0-19.2 16-35.2 35.2-35.2 19.2 0 35.2 16 35.2 35.2 0 16-16 35.2-35.2 35.2z m-246.4 182.4l-150.4-51.2c-35.2-12.8-67.2 22.4-57.6 57.6l51.2 150.4c12.8 38.4 67.2 41.6 83.2 3.2l25.6-54.4 54.4-25.6c35.2-16 35.2-67.2-6.4-80z m-76.8 57.6c-9.6 3.2-19.2 12.8-22.4 22.4l-12.8 32-35.2-102.4 102.4 35.2-32 12.8z" p-id="7227" fill="#ffffff"></path></svg>
</div>
<div class="filter-button">
<svg t="1749104746320" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7498" width="24" height="24"><path d="M918.485333 261.930667L857.813333 208.64a20.992 20.992 0 0 0-27.008 0L770.133333 261.973333a15.36 15.36 0 0 0 0 23.68 20.48 20.48 0 0 0 13.482667 4.906667 20.48 20.48 0 0 0 13.525333-4.906667l15.36-13.482666v141.994666c0 15.402667 14.250667 27.904 31.786667 27.904 17.578667 0 31.829333-12.501333 31.829333-27.904V272.128l15.36 13.482667a20.48 20.48 0 0 0 13.482667 4.906666 20.48 20.48 0 0 0 13.525333-4.906666 15.36 15.36 0 0 0 0-23.68z m-277.461333 159.146666c0 15.445333 14.250667 27.946667 31.829333 27.946667s31.829333-12.501333 31.829334-27.946667V346.325333c0-31.786667-11.349333-61.952-31.914667-84.906666a115.328 115.328 0 0 0-85.632-38.698667c-32.426667 0-63.573333 14.08-85.632 38.698667a126.848 126.848 0 0 0-31.914667 84.906666v335.530667c0 36.693333-24.704 67.754667-53.888 67.754667-29.226667 0-53.930667-31.061333-53.930666-67.754667V355.498667l0.469333-7.68 0.042667-1.493334c0-31.786667-11.306667-61.952-31.914667-84.906666a115.328 115.328 0 0 0-85.632-38.698667c-32.384 0-63.573333 14.08-85.632 38.698667a126.848 126.848 0 0 0-31.914667 84.906666v138.496c0 15.402667 14.250667 27.904 31.829334 27.904s31.829333-12.501333 31.829333-27.904V346.325333c0-36.693333 24.704-67.754667 53.888-67.754666 29.013333 0 53.589333 30.634667 53.930667 67.072l-0.512 8.405333v327.808c0 31.786667 11.306667 61.952 31.914666 84.906667a115.328 115.328 0 0 0 85.632 38.698666c32.384 0 63.573333-14.08 85.632-38.698666a126.848 126.848 0 0 0 31.914667-84.906667V346.325333c0-36.693333 24.661333-67.754667 53.888-67.754666 29.226667 0 53.888 31.018667 53.888 67.754666V421.12z" p-id="7499" fill="#ffffff"></path><path d="M858.453333 786.432l72.106667-122.624a27.861333 27.861333 0 0 0 0-28.288l-72.106667-122.624a28.928 28.928 0 0 0-24.96-14.165333h-144.128a28.928 28.928 0 0 0-24.96 14.165333l-72.106666 122.624a27.861333 27.861333 0 0 0 0 28.288l72.106666 122.624c5.12 8.746667 14.634667 14.165333 24.96 14.165333h144.128a28.928 28.928 0 0 0 24.96-14.165333z m-152.32-231.04h110.805334l55.466666 94.293333-55.466666 94.293334H706.133333l-55.424-94.293334 55.466667-94.293333z" p-id="7500" fill="#ffffff"></path><path d="M703.786667 650.410667a57.173333 57.173333 0 0 0 57.642666 56.618666 57.173333 57.173333 0 0 0 57.642667-56.618666 57.173333 57.173333 0 0 0-57.642667-56.618667 57.173333 57.173333 0 0 0-57.642666 56.618667z m57.6 14.165333q1.408 0 2.816-0.298667 1.408-0.256 2.688-0.810666 1.322667-0.512 2.517333-1.28 1.194667-0.768 2.176-1.749334 1.024-1.024 1.792-2.133333 0.810667-1.194667 1.322667-2.474667 0.554667-1.28 0.853333-2.645333 0.256-1.365333 0.256-2.773333t-0.256-2.773334q-0.298667-1.365333-0.853333-2.645333-0.512-1.28-1.28-2.432-0.853333-1.194667-1.834667-2.133333-0.981333-1.024-2.176-1.792-1.194667-0.768-2.517333-1.28-1.28-0.554667-2.688-0.853334-1.408-0.256-2.816-0.256t-2.816 0.256q-1.365333 0.298667-2.688 0.853334-1.28 0.512-2.517334 1.28-1.152 0.768-2.133333 1.749333-1.024 0.981333-1.834667 2.133333-0.768 1.194667-1.322666 2.474667-0.554667 1.28-0.853334 2.645333-0.256 1.365333-0.256 2.773334t0.298667 2.773333q0.256 1.365333 0.810667 2.645333t1.322666 2.432q0.810667 1.152 1.792 2.133334 1.024 1.024 2.176 1.792 1.194667 0.768 2.517334 1.28 1.28 0.554667 2.688 0.853333 1.408 0.256 2.816 0.256z" p-id="7501" fill="#ffffff"></path><path d="M162.389333 510.464a43.690667 43.690667 0 1 1 0 87.381333 43.690667 43.690667 0 0 1 0-87.381333z m0-37.632c-44.8 0-81.322667 36.48-81.322666 81.322667 0 44.8 36.48 81.322667 81.322666 81.322666s81.322667-36.48 81.322667-81.322666-36.48-81.322667-81.322667-81.322667z" p-id="7502" fill="#ffffff"></path><path d="M234.112 554.154667q0-29.653333-21.034667-50.688t-50.688-21.034667q-29.653333 0-50.688 21.034667-20.992 21.034667-20.992 50.688t20.992 50.645333q21.034667 21.034667 50.688 21.034667t50.688-21.034667q21.034667-20.992 21.034667-50.645333z m19.2 0q0 37.589333-26.666667 64.256-26.624 26.666667-64.256 26.666666-37.589333 0-64.256-26.666666t-26.666666-64.256q0-37.632 26.666666-64.256 26.666667-26.666667 64.256-26.666667 37.632 0 64.256 26.666667 26.666667 26.624 26.666667 64.256z m-144.213333 0q0-22.101333 15.616-37.717334t37.674666-15.616q22.101333 0 37.717334 15.616t15.616 37.717334q0 22.058667-15.616 37.674666t-37.717334 15.616q-22.058667 0-37.674666-15.616t-15.616-37.674666z m19.2 0q0 14.08 9.984 24.106666 9.984 9.984 24.106666 9.984 14.122667 0 24.106667-9.984 9.984-9.984 9.984-24.106666 0-14.122667-9.984-24.106667-9.984-9.984-24.106667-9.984-14.08 0-24.106666 9.984-9.984 9.984-9.984 24.106667z" p-id="7503" fill="#ffffff"></path></svg>
</div>
<div class="filter-button">
<svg t="1749104685102" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6766" width="24" height="24"><path d="M712.313523 0.469118v51.176544c-208.544417 0-446.600641 148.795802-446.600641 279.040107 0 41.197118 9.552955 70.367748 31.68681 107.342801l7.25001 11.600017 17.314731 27.422098 3.497064 5.714714c31.729457 53.820666 34.075049 100.007497-2.004415 164.959061-51.38978 92.458956-145.682562 173.914956-282.281288 244.965057l-18.039731 9.211778L0.234559 856.098288c137.920786-68.960393 230.507684-146.919329 278.485694-233.237099 26.867686-48.404481 25.502978-75.314814 2.644122-114.123694l-21.579443-34.20299-6.22648-10.107367c-26.611803-44.438299-39.022115-81.882471-39.022114-133.741369 0-162.059056 255.669485-324.629878 485.878638-330.088709L712.313523 0.469118z m49.470659 185.514973l22.901504 45.717712-18.892674 9.638249-16.845613 9.083837c-68.661863 38.126525-82.053059 63.288326-72.329516 121.757528 3.539711 21.110324 17.442672 42.775061 44.566241 71.092749l8.316188 8.529424 9.595602 9.425014 31.089751 29.852984c59.876557 57.744201 90.3266 98.514847 104.058973 153.231102 20.129441 80.645704 21.408854 148.326684 2.857357 203.000292l-3.966182 10.747074-47.508892-19.020616c18.039732-45.120653 18.039732-105.850152-1.066178-182.316438-10.022073-40.088293-33.307401-72.926575-80.219233-119.411936l-42.34859-40.813294-12.282371-12.154429a601.06851 601.06851 0 0 1-5.458831-5.62942c-33.648578-35.141227-52.498605-64.525093-58.128025-98.131023-14.926492-89.644246 14.07355-130.628129 114.592812-183.809088l21.067677-10.832368zM574.904502 797.970264v50.579484h-29.852984v-50.622131h29.852984z m0-136.513432v85.29424h-29.852984v-85.29424h29.852984z m-25.161801-139.882554c14.627962 30.492691 23.072092 58.767731 24.863271 87.511891l-29.852984 1.833826c-1.450002-24.479447-8.827954-49.172129-21.92062-76.466286z m-68.278039-119.028112l7.505893 14.286786 35.269168 58.213318-25.588272 15.352964-31.302986-51.517721a446.856524 446.856524 0 0 1-12.538253-22.858857l26.65445-13.47649zM458.264629 268.719504l25.75886 15.09708a192.082629 192.082629 0 0 0-15.99267 34.927991c-4.264712 12.836783-5.117654 24.820624-2.985298 37.955937l-29.426513 4.861772a106.191329 106.191329 0 0 1 4.136771-52.370663c4.776477-14.07355 11.002957-27.55004 18.50885-40.472117z m104.186914-99.282496l15.011786 25.844155a284.712174 284.712174 0 0 0-64.013327 49.641248l-21.707384-20.513265a314.351922 314.351922 0 0 1 70.708925-54.972138z m131.011953-51.261838l7.25001 29.000041a533.515472 533.515472 0 0 0-78.811878 26.014744l-11.642663-27.507393c25.588272-10.875016 53.436841-20.044146 83.161884-27.507392z" fill="#ffffff" p-id="6767"></path></svg>
</div>
<div class="filter-button">
<svg t="1749104905772" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8872" width="24" height="24"><path d="M618.282667 150.570667a33.578667 33.578667 0 1 0-22.357334-63.317334L193.066667 229.461333A33.578667 33.578667 0 0 0 170.666667 261.12v189.568c0 18.56 15.018667 33.578667 33.578666 33.578667h369.322667v75.050666h-78.336v-50.346666a22.4 22.4 0 0 0-44.8 0v50.346666h-246.186667a33.578667 33.578667 0 0 0-33.578666 33.578667v165.888c0 13.610667 8.192 25.856 20.778666 31.061333L594.346667 955.733333a33.493333 33.493333 0 0 0 46.336-31.061333 33.578667 33.578667 0 0 0-20.821334-31.061333l-382.037333-157.312v-109.824h369.28a33.578667 33.578667 0 0 0 33.578667-33.578667v-142.208a33.578667 33.578667 0 0 0-33.578667-33.578667h-111.872V329.941333a22.4 22.4 0 1 0-44.8 0v87.168H237.866667v-132.266666L618.24 150.613333z m235.093333 113.92v-89.6a22.4 22.4 0 1 0-44.8 0v89.6a22.4 22.4 0 1 0 44.8 0z m-103.850667-100.821334l-86.058666 24.576a22.4 22.4 0 1 0 12.288 43.050667l86.101333-24.618667a22.4 22.4 0 0 0-12.330667-43.008z m-172.16 49.194667l-86.058666 24.576a22.4 22.4 0 0 0 12.288 43.050667l86.058666-24.618667a22.4 22.4 0 1 0-12.288-43.008zM853.333333 443.52V353.962667a22.4 22.4 0 1 0-44.757333 0v89.557333a22.4 22.4 0 1 0 44.8 0z m0 179.072v-89.557333a22.4 22.4 0 1 0-44.757333 0v89.514666a22.357333 22.357333 0 1 0 44.8 0z m-386.645333 176.512l2.986667 0.853333a22.4 22.4 0 0 0 25.685333-32.426666l-0.128-0.213334v-79.274666a22.4 22.4 0 1 0-44.8 0v89.557333c0 9.984 6.656 18.773333 16.256 21.504z m386.645333 2.56v-89.6a22.4 22.4 0 1 0-44.757333 0v89.6a22.357333 22.357333 0 1 0 44.8 0z m-297.6 22.912l86.101334 24.576a22.4 22.4 0 0 0 12.288-43.050667l-86.101334-24.576a22.4 22.4 0 1 0-12.288 43.050667z m172.16 49.152l86.101334 24.618667a22.4 22.4 0 1 0 12.288-43.050667l-86.058667-24.576a22.4 22.4 0 0 0-12.330667 43.050667z" p-id="8873" fill="#ffffff"></path></svg>
</div>
</div>
</div>
<div class="search-container">
<a-input-search
placeholder="输入路线名称"
/>
</div>
<div class="routers-container">
<div class="file-container">
<div class="tip">
<div class="info">文件夹</div>
<div>
<FileAddOutlined />
</div>
</div>
<div>
<a-directory-tree
multiple
:tree-data="treeData"
:defaultExpandAll="true"
></a-directory-tree>
</div>
</div>
<div class="routers-list">
<div class="tip">
<div class="info">航线</div>
<div>
<ImportOutlined />
&nbsp;
<PlusOutlined />
</div>
</div>
<div class="ari-line" v-for="(item,index) in ariLineList" :key="index" @click="checkAriLine(item)">
<div class="title">
<div style="flex:1;">
{{item.name}}
</div>
<div style="">
<EditOutlined />
&nbsp;
<MoreOutlined />
</div>
</div>
<div class="type" >
<img src="/public/iocn/uav.png" alt="">
{{item.uav}}
</div>
<div class="time">更新时间{{item.updateTime}}</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { PlusOutlined,FileAddOutlined,LeftOutlined,ImportOutlined,MoreOutlined,EditOutlined } from '@ant-design/icons-vue';
import {ref,defineEmits} from 'vue'
const emit = defineEmits(["checkAriLine"])
const checkAriLine = (item)=> {
emit("checkAriLine",item);
}
const expandedKeys = ref<string[]>(['0-0', '0-1']);
const selectedKeys = ref<string[]>([]);
const treeData = ref(
[
{
title: '默认文件夹',
key: '1',
children: [
{
title: '文件夹1',
key: '2',
isLeaf: true,
},
{
title: '文件夹2',
key: '3',
isLeaf: true,
},
],
}
]
)
const ariLineList = ref([
{
name:"航线1",
uav:"Matrice 3TD",
updateTime:"2025-06-03 17:01:47"
},
{
name:"航线1",
uav:"Matrice 3TD",
updateTime:"2025-06-03 17:01:47"
},
{
name:"航线1",
uav:"Matrice 3TD",
updateTime:"2025-06-03 17:01:47"
},
{
name:"航线1",
uav:"Matrice 3TD",
updateTime:"2025-06-03 17:01:47"
}
])
</script>
<style scoped>
.container{
width:100%;
height:100%;
}
.title{
padding:15px;
color:#fff;
}
.filter-container{
padding:0px 15px;
display:flex;
gap:8px;
}
.search-container{
width: calc( 100% - 30px);
border-radius: 3px;
margin: 15px;
border:1px solid #3a57e890;
}
.filter-buttons{
display:flex;
gap:8px;
text-align: center;
}
.filter-button{
width:32px;
height:32px;
border-radius: 3px;
padding-top:4px;
background: #3F4150;
cursor:pointer;
}
.routers-container{
display:flex;
gap:10px;
font-size:14px;
border-top:1px solid rgba(204, 204, 204, 0.219) ;
height: 100%;
}
.file-container{
width:220px;
border-right: 1px solid rgba(204, 204, 204, 0.227) ;
padding:15px
}
.file-container .tip{
display: flex;
color:#fff;
padding:8px 0px;
}
.file-container .tip .info{
flex:1;
}
.routers-list{
flex:1;
padding:15px;
}
.routers-list .tip{
display: flex;
color:#fff;
padding:8px 0px;
}
.routers-list .tip .info{
flex:1;
}
.ari-line{
background:#3F4150;
color:#fff;
padding:5px 10px;
margin-bottom:10px;
position:relative;
font-size: 13px;
border-radius: 3px;
}
.ari-line::before{
content:"";
width:2px;
height:18px;
position:absolute;
top:12px;
left:0px;
background:#3A57E8;
}
.ari-line .title{
width: 100%;
line-height: 28px;
padding:2px 0px;
border-bottom:1px solid #4E5778;
display: flex;
}
.ari-line .type{
padding:12px 0px;
}
.ari-line .type img{
width:16px;
}
.ari-line .time{
font-size: 12px;
color:#ccc;
}
::v-deep .ant-select-selector{
border:none!important;
color:#fff!important;
background:#3F4150!important ;
border-radius: 3px!important;
}
::v-deep .ant-select-selection-placeholder {
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-select-arrow {
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-select-selection-search-input::placeholder{
color:rgba(255, 255, 255, 0.933)!important;
}
::v-deep .ant-tree {
background:none!important;
color:#fff!important;
}
::v-deep .ant-tree-treenode-selected{
background:#3a57e877!important;
}
::v-deep .ant-tree-treenode-selected::before{
background:none!important;
}
::v-deep .ant-tree-treenode-selected::after{
content:"";
height:28px;
width:4px;
background:#3A57E8;
position:absolute;
top:0px;
left:0px;
}
::v-deep .ant-input{
background:none!important;
border:none!important;
border-top-left-radius: 3px !important;
border-bottom-left-radius: 3px !important;
}
::v-deep .ant-input::placeholder{
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-btn-default{
background:none!important;
border:none!important;
outline:none!important;
color:#fff!important;
height:30px !important;
background:#29305477!important;
}
</style>

@ -0,0 +1,288 @@
<template>
<div>
<div class="title">
<div style="flex:1;">
<LeftOutlined @click="checkAriLine(null);"/> &nbsp; 选择飞行器
</div>
<div>
<PlusOutlined @click="createWorkPlan" />
</div>
</div>
<div class="filter-container">
<div>
<a-select
ref="select"
style="width: 140px"
placeholder="全部机型"
>
<a-select-option value="jack">全部机型</a-select-option>
<a-select-option value="lucy">经纬 M30 系列</a-select-option>
<a-select-option value="disabled">Mavic 3 行业系列</a-select-option>
<a-select-option value="Yiminghe">Matrice 3D 系列</a-select-option>
</a-select>
</div>
<div class="filter-buttons">
<a-input-search
placeholder="输入飞行器名称"
/>
</div>
</div>
<div class="routers-container">
<div class="routers-list">
<div class="ari-line" v-for="(item,index) in ariLineList" :key="index" @click="checkAriLine(item)">
<div class="title">
<div style="flex:1;">
{{item.name}}
</div>
<div style="">
<EditOutlined />
&nbsp;
<MoreOutlined />
</div>
</div>
<div class="type" >
<img src="/public/iocn/uav.png" alt="">
{{item.uav}}
</div>
<div class="time">更新时间{{item.updateTime}}</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { PlusOutlined,FileAddOutlined,LeftOutlined,ImportOutlined,MoreOutlined,EditOutlined } from '@ant-design/icons-vue';
import {ref,defineEmits} from 'vue'
const emit = defineEmits(["checkAriLine"])
const checkAriLine = (item)=> {
emit("checkAriLine",item);
}
const expandedKeys = ref<string[]>(['0-0', '0-1']);
const selectedKeys = ref<string[]>([]);
const treeData = ref(
[
{
title: '默认文件夹',
key: '1',
children: [
{
title: '文件夹1',
key: '2',
isLeaf: true,
},
{
title: '文件夹2',
key: '3',
isLeaf: true,
},
],
}
]
)
const ariLineList = ref([
{
name:"航线1",
uav:"Matrice 3TD",
updateTime:"2025-06-03 17:01:47"
},
{
name:"航线1",
uav:"Matrice 3TD",
updateTime:"2025-06-03 17:01:47"
},
{
name:"航线1",
uav:"Matrice 3TD",
updateTime:"2025-06-03 17:01:47"
},
{
name:"航线1",
uav:"Matrice 3TD",
updateTime:"2025-06-03 17:01:47"
}
])
</script>
<style scoped>
.title{
padding:15px;
color:#fff;
font-size:14px;
display:flex;
}
.filter-container{
padding:0px 15px;
display:flex;
gap:8px;
}
.search-container{
width: calc( 100% - 30px);
border-radius: 3px;
margin: 15px;
border:1px solid #3a57e890;
}
.filter-buttons{
display:flex;
gap:8px;
text-align: center;
}
.filter-button{
width:32px;
height:32px;
border-radius: 3px;
padding-top:4px;
background: #3F4150;
cursor:pointer;
}
.routers-container{
display:flex;
gap:10px;
font-size:14px;
}
.file-container{
width:220px;
border-right: 1px solid rgba(204, 204, 204, 0.496) ;
padding:15px
}
.file-container .tip{
display: flex;
color:#fff;
padding:8px 0px;
}
.file-container .tip .info{
flex:1;
}
.routers-list{
flex:1;
padding:15px;
}
.routers-list .tip{
display: flex;
color:#fff;
padding:8px 0px;
}
.routers-list .tip .info{
flex:1;
}
.ari-line{
background:#3F4150;
color:#fff;
padding:5px 10px;
margin-bottom:10px;
position:relative;
font-size: 13px;
border-radius: 3px;
}
.ari-line::before{
content:"";
width:2px;
height:18px;
position:absolute;
top:10px;
left:0px;
background:#3A57E8;
}
.ari-line .title{
width: 100%;
line-height: 28px;
padding:2px 0px;
border-bottom:1px solid #4E5778;
display: flex;
}
.ari-line .type{
padding:12px 0px;
}
.ari-line .type img{
width:16px;
}
.ari-line .time{
font-size: 12px;
color:#ccc;
}
::v-deep .ant-select-selector{
border:none!important;
color:#fff!important;
background:#3F4150!important ;
border-radius: 3px!important;
}
::v-deep .ant-select-selection-placeholder {
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-select-arrow {
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-select-selection-search-input::placeholder{
color:rgba(255, 255, 255, 0.933)!important;
}
::v-deep .ant-tree {
background:none!important;
color:#fff!important;
}
::v-deep .ant-tree-treenode-selected{
background:#3a57e877!important;
}
::v-deep .ant-tree-treenode-selected::before{
background:none!important;
}
::v-deep .ant-tree-treenode-selected::after{
content:"";
height:28px;
width:4px;
background:#3A57E8;
position:absolute;
top:0px;
left:0px;
}
::v-deep .ant-input{
background:#3F4150!important ;
border:none!important;
border-top-left-radius: 3px !important;
border-bottom-left-radius: 3px !important;
}
::v-deep .ant-input::placeholder{
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-btn-default{
background:none!important;
border:none!important;
outline:none!important;
color:#fff!important;
height:30px !important;
background:#3F4150!important ;
}
</style>

@ -0,0 +1,350 @@
<template>
<div ref="vChartRef" id="mars3d-container" class="mars3d-container"></div>
</template>
<script lang="ts" setup>
import {ref,onMounted} from 'vue'
import * as mars3d from "mars3d";
let map: mars3d.Map; //
let graphicLayer = null;
const vChartRef = ref<HTMLElement>()
onMounted(()=>{
initMap();
})
const initMap = ()=>{
map = new mars3d.Map(vChartRef.value,
{
"scene": {
"center": {
"lat": 35.362625,
"lng": 118.033886,
"alt": 8306.3,
"heading": 360,
"pitch": -45
},
"scene3DOnly": false,
"shadows": false,
"removeDblClick": true,
"sceneMode": 3,
"showSun": true,
"showMoon": true,
"showSkyBox": true,
"showSkyAtmosphere": true,
"fog": true,
"fxaa": true,
"requestRenderMode": true,
"contextOptions": {
"requestWebgl1": false,
"webgl": {
"preserveDrawingBuffer": true,
"alpha": false,
"stencil": true,
"powerPreference": "high-performance"
}
},
"globe": {
"depthTestAgainstTerrain": false,
"baseColor": "#546a53",
"showGroundAtmosphere": true,
"enableLighting": false
},
"cameraController": {
"zoomFactor": 3,
"minimumZoomDistance": 1,
"maximumZoomDistance": 50000000,
"enableRotate": true,
"enableTranslate": true,
"enableTilt": true,
"enableZoom": true,
"enableCollisionDetection": true,
"minimumCollisionTerrainHeight": 15000
}
},
"control": {
"homeButton": true,
"baseLayerPicker": false,
"sceneModePicker": true,
"vrButton": false,
"fullscreenButton": true,
"navigationHelpButton": true,
"animation": false,
"timeline": false,
"infoBox": false,
"geocoder": false,
"selectionIndicator": false,
"showRenderLoopErrors": true,
"contextmenu": {
"hasDefault": true
},
"mouseDownView": true,
"zoom": {
"insertIndex": 1
},
"compass": {
"bottom": "toolbar",
"left": "5px",
"rotation": true
},
"distanceLegend": {
"left": "10px",
"bottom": "2px"
},
"locationBar": {
"crs": "CGCS2000_GK_Zone_3",
"crsDecimal": 0,
"template": "<div>经度:{lng}</div> <div>纬度:{lat}</div> <div class='hide1000'>横{crsx} 纵{crsy}</div> <div>海拔:{alt}米</div> <div class='hide700'>层级:{level}</div><div>方向:{heading}°</div> <div>俯仰角:{pitch}°</div><div class='hide700'>视高:{cameraHeight}米</div>",
"cacheTime": 50
}
},
"method": {
"templateValues": {
"dataServer": "//data.mars3d.cn",
"gltfServerUrl": "//data.mars3d.cn/gltf"
}
},
"terrain": {
"url": "//data.mars3d.cn/terrain",
"show": true,
"clip": true
},
"basemaps": [
{
"id": 10,
"name": "地图底图",
"type": "group",
"opacity": 1
},
{
"id": 2021,
"pid": 10,
"name": "天地图影像",
"icon": "https://data.mars3d.cn/img/thumbnail/basemap/tdt_img.png",
"type": "group",
"layers": [
{
"name": "底图",
"type": "tdt",
"layer": "img_d",
"eventParent": {
"id": 2021,
"pid": 10,
"name": "天地图影像",
"icon": "https://data.mars3d.cn/img/thumbnail/basemap/tdt_img.png",
"type": "group",
"layers": [
{
"name": "底图",
"type": "tdt",
"layer": "img_d",
"show": true
},
{
"name": "注记",
"type": "tdt",
"layer": "img_z",
"show": true
}
],
"show": true
},
"private": false,
"id": "m-770c35e7-9054-4259-b5ee-c15f108becd0",
"opacity": 1,
"pid": 2021,
"parent": {
"id": 2021,
"pid": 10,
"name": "天地图影像",
"icon": "https://data.mars3d.cn/img/thumbnail/basemap/tdt_img.png",
"type": "group",
"layers": [
{
"name": "底图",
"type": "tdt",
"layer": "img_d",
"show": true
},
{
"name": "注记",
"type": "tdt",
"layer": "img_z",
"show": true
}
],
"show": true
},
"zIndex": 1
},
{
"name": "注记",
"type": "tdt",
"layer": "img_z",
"eventParent": {
"id": 2021,
"pid": 10,
"name": "天地图影像",
"icon": "https://data.mars3d.cn/img/thumbnail/basemap/tdt_img.png",
"type": "group",
"layers": [
{
"name": "底图",
"type": "tdt",
"layer": "img_d",
"show": true
},
{
"name": "注记",
"type": "tdt",
"layer": "img_z",
"show": true
}
],
"show": true
},
"private": false,
"id": "m-3b881368-574b-48a5-88b2-8b3c2c48fd62",
"opacity": 1,
"pid": 2021,
"parent": {
"id": 2021,
"pid": 10,
"name": "天地图影像",
"icon": "https://data.mars3d.cn/img/thumbnail/basemap/tdt_img.png",
"type": "group",
"layers": [
{
"name": "底图",
"type": "tdt",
"layer": "img_d",
"show": true
},
{
"name": "注记",
"type": "tdt",
"layer": "img_z",
"show": true
}
],
"show": true
},
"zIndex": 2
}
],
"show": true,
"opacity": 1
}
],
"layers": []
});
map.on(mars3d.EventType.load, function (event) {
graphicLayer = new mars3d.layer.GraphicLayer({
isAutoEditing: true //
})
map.addLayer(graphicLayer);
graphicLayer.on(mars3d.EventType.editStop, function (e) {
console.log("停止编辑", e.graphic.options.position)
})
graphicLayer.on(mars3d.EventType.editMovePoint, function (e) {
console.log("编辑修改了点", e.graphic.options.position)
})
bindLayerContextMenu();
drawPint();
})
}
//
const bindLayerContextMenu =()=> {
graphicLayer.bindContextMenu([
{
text: "删除对象",
icon: "fa fa-trash-o",
show: (event) => {
const graphic = event.graphic
if (!graphic || graphic.isDestroy || graphic.isPrivate || graphic.graphicIds) {
return false
} else {
return true
}
},
callback: (e) => {
const graphic = e.graphic
if (!graphic) {
return
}
const parent = graphic.parent //
graphicLayer.removeGraphic(graphic)
if (parent) {
graphicLayer.removeGraphic(parent)
}
}
},
{
text: "停止编辑对象",
icon: "fa fa-edit",
show: function (e) {
const graphic = e.graphic
if (!graphic || !graphic.hasEdit) {
return false
}
return graphic.isEditing
},
callback: (e) => {
const graphic = e.graphic
if (!graphic) {
return false
}
if (graphic) {
graphic.stopEditing()
}
}
},
])
}
const drawPint = async ()=>{
const graphic = await graphicLayer.startDraw({
type: "polylineP",
style: {
pixelSize: 12,
color: "#3388ff",
label: {
// label
text: "可以同时支持文字",
font_size: 20,
color: "#ffffff",
outline: true,
outlineColor: "#000000",
pixelOffsetY: -20
}
}
})
console.log("标绘完成", graphic.toJSON())
}
</script>
<style scoped>
.mars3d-container{
width:100%;
height:100%;
background:red;
}
</style>

@ -0,0 +1,321 @@
<template>
<div>
<div class="title">
<div style="flex:1;">
工作计划
</div>
<div>
<PlusOutlined @click="createWorkPlan" />
</div>
</div>
<div class="filter-container">
<div>
<a-select
ref="select"
style="width: 140px"
placeholder="计划状态"
>
<a-select-option value="jack">全部</a-select-option>
<a-select-option value="lucy">进行中</a-select-option>
<a-select-option value="disabled">已完结</a-select-option>
</a-select>
</div>
<div class="filter-buttons">
<a-input-search
placeholder="输入计划名称"
/>
</div>
</div>
<div class="routers-container">
<div class="routers-list">
<div class="ari-line" v-for="(item,index) in ariLineList" :key="index" @click="checkAriLine(item)">
<div class="title">
<div class="state">
进行中
</div>
<div style="flex:1;">
{{item.name}}
</div>
<div>
<a-dropdown>
<MoreOutlined />
<template #overlay>
<a-menu>
<a-menu-item>
<a href="javascript:;">编辑</a>
</a-menu-item>
<a-menu-item>
<a href="javascript:;">删除</a>
</a-menu-item>
</a-menu>
</template>
</a-dropdown>
</div>
</div>
<div class="type" >
{{item.description}}
</div>
<div class="time">更新时间{{item.createTime}}</div>
<div class="username"><UserOutlined />&nbsp;{{item.createUserName}}</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { UserOutlined,PlusOutlined,FileAddOutlined,LeftOutlined,ImportOutlined,MoreOutlined,EditOutlined } from '@ant-design/icons-vue';
import {ref,defineEmits} from 'vue'
const emit = defineEmits(["checkAriLine","createWorkPlan"])
const createWorkPlan = () => {
emit("createWorkPlan");
}
const checkAriLine = (item)=> {
emit("checkAriLine",item);
}
const expandedKeys = ref<string[]>(['0-0', '0-1']);
const selectedKeys = ref<string[]>([]);
const treeData = ref(
[
{
title: '默认文件夹',
key: '1',
children: [
{
title: '文件夹1',
key: '2',
isLeaf: true,
},
{
title: '文件夹2',
key: '3',
isLeaf: true,
},
],
}
]
)
const ariLineList = ref([
{
name:"工作计划1",
state:"进行中",
description:" 预置航线、照片、模型和地图标注等辅助了解司空2 功能。",
createUserName:"17861857725",
createTime:"2025-06-03 17:01:47"
},
{
name:"工作计划1",
state:"进行中",
description:" 预置航线、照片、模型和地图标注等辅助了解司空2 功能。",
createUserName:"17861857725",
createTime:"2025-06-03 17:01:47"
},
{
name:"工作计划1",
state:"进行中",
description:" 预置航线、照片、模型和地图标注等辅助了解司空2 功能。",
createUserName:"17861857725",
createTime:"2025-06-03 17:01:47"
},
{
name:"工作计划1",
state:"进行中",
description:" 预置航线、照片、模型和地图标注等辅助了解司空2 功能。",
createUserName:"17861857725",
createTime:"2025-06-03 17:01:47"
}
])
</script>
<style scoped>
.title{
padding:30px 15px;
color:#fff;
font-size:16px;
display:flex;
}
.filter-container{
padding:0px 15px;
display:flex;
gap:8px;
}
.search-container{
width: calc( 100% - 30px);
border-radius: 3px;
margin: 15px;
border:1px solid #3a57e890;
}
.filter-buttons{
display:flex;
gap:8px;
text-align: center;
}
.filter-button{
width:32px;
height:32px;
border-radius: 3px;
padding-top:4px;
background: #3F4150;
cursor:pointer;
}
.routers-container{
display:flex;
gap:10px;
font-size:14px;
}
.file-container{
width:220px;
border-right: 1px solid rgba(204, 204, 204, 0.496) ;
padding:15px
}
.file-container .tip{
display: flex;
color:#fff;
padding:8px 0px;
}
.file-container .tip .info{
flex:1;
}
.routers-list{
flex:1;
padding:15px;
}
.routers-list .tip{
display: flex;
color:#fff;
padding:8px 0px;
}
.routers-list .tip .info{
flex:1;
}
.ari-line{
background:#3F4150;
color:#fff;
padding:5px 10px;
margin-bottom:10px;
position:relative;
font-size: 13px;
border-radius: 3px;
}
.ari-line .title{
width: 100%;
line-height: 28px;
padding:2px 0px;
border-bottom:1px solid #4E5778;
display: flex;
gap:8px;
}
.ari-line .state{
border:1px solid green;
color:green;
font-size:12px;
height:24px;
line-height:20px;
padding:0px 4px;
position:relative;
top:2px;
}
.ari-line .type{
padding:12px 0px;
}
.ari-line .type img{
width:16px;
}
.ari-line .time{
font-size: 12px;
color:#ccc;
}
.ari-line .username{
margin-top:10px;
color:#ccc;
}
::v-deep .ant-select-selector{
border:none!important;
color:#fff!important;
background:#3F4150!important ;
border-radius: 3px!important;
}
::v-deep .ant-select-selection-placeholder {
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-select-arrow {
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-select-selection-search-input::placeholder{
color:rgba(255, 255, 255, 0.933)!important;
}
::v-deep .ant-tree {
background:none!important;
color:#fff!important;
}
::v-deep .ant-tree-treenode-selected{
background:#3a57e877!important;
}
::v-deep .ant-tree-treenode-selected::before{
background:none!important;
}
::v-deep .ant-tree-treenode-selected::after{
content:"";
height:28px;
width:4px;
background:#3A57E8;
position:absolute;
top:0px;
left:0px;
}
::v-deep .ant-input{
background:#3F4150!important ;
border:none!important;
border-top-left-radius: 3px !important;
border-bottom-left-radius: 3px !important;
}
::v-deep .ant-input::placeholder{
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-btn-default{
background:none!important;
border:none!important;
outline:none!important;
color:#fff!important;
height:30px !important;
background:#3F4150!important ;
}
</style>

@ -0,0 +1,233 @@
<template>
<div class="container">
<div class="title">
新建计划
</div>
<a-form
ref="formRef"
:layout="'vertical'"
:model="submitForm"
:rules="rules"
:label-col="labelCol"
:wrapper-col="wrapperCol"
:size="'middle'"
>
<a-form-item ref="name" label="计划名称" name="name">
<a-input v-model:value="submitForm.name" />
</a-form-item>
<a-form-item ref="name" label="任务类型" name="name">
<a-radio-group v-model:value="submitForm.type" button-style="solid">
<a-radio-button :value="1">普通任务</a-radio-button>
<a-radio-button :value="2">蛙跳任务</a-radio-button>
</a-radio-group>
</a-form-item>
<a-form-item ref="name" label="选择航线" name="name">
<a-button type="primary" style="width:100%;" @click="selectAriLine">
<PlusOutlined />
选择航线
</a-button>
</a-form-item>
<a-form-item ref="name" label="选择设备" name="name">
<a-button type="primary" style="width:100%;" @click="selectAircraft">
<PlusOutlined />
选择设备
</a-button>
</a-form-item>
<a-form-item ref="accuracy" label="任务精度" name="accuracy">
<a-radio-group v-model:value="submitForm.accuracy" button-style="solid">
<a-radio-button :value="1">高精度RTK</a-radio-button>
<a-radio-button :value="2">GNSS</a-radio-button>
</a-radio-group>
</a-form-item>
<a-form-item ref="accuracy" label="任务策略" name="accuracy">
<a-radio-group v-model:value="submitForm.strategy" button-style="solid">
<a-radio-button :value="1">立即</a-radio-button>
<a-radio-button :value="2">单次定时</a-radio-button>
<a-radio-button :value="3">重复定时</a-radio-button>
<a-radio-button :value="4">继续执行</a-radio-button>
</a-radio-group>
</a-form-item>
<div style="display:flex;margin-bottom:12px;color:#fff;font-size:12px;">
<div style="flex:1;">智能最佳返航路线</div>
<div>
<a-switch v-model:checked="submitForm.breakFly" />
</div>
</div>
<a-form-item ref="outOfContact" label="航线飞行中失联" name="outOfContact">
<a-radio-group v-model:value="submitForm.outOfContact" button-style="solid">
<a-radio-button :value="1">返航</a-radio-button>
<a-radio-button :value="2">继续执行</a-radio-button>
</a-radio-group>
</a-form-item>
<a-form-item ref="outOfContact" label="完成动作" name="outOfContact">
<a-radio-group v-model:value="submitForm.outOfContact" button-style="solid">
<a-radio-button :value="1">返航</a-radio-button>
<a-radio-button :value="2">继续执行</a-radio-button>
</a-radio-group>
</a-form-item>
<div style="display:flex;margin-bottom:12px;color:#fff;font-size:12px;">
<div style="flex:1;">自动断点续飞</div>
<div>
<a-switch v-model:checked="submitForm.breakFly" />
</div>
</div>
<a-form-item :wrapper-col="{ span: 24, offset: 0 }">
<a-button @click="resetForm" style="width:44%;">取消</a-button>
<a-button style="margin-left: 10px;width:44%;" type="primary" @click="onSubmit"></a-button>
</a-form-item>
</a-form>
</div>
</template>
<script lang="ts" setup>
import { ref, defineEmits } from "vue";
import { PlusOutlined,LeftOutlined } from '@ant-design/icons-vue';
const formRef = ref();
const labelCol = { span: 24 };
const wrapperCol = { span: 24 };
const submitForm = ref({
name:"工作计划1",
type:1,
airline:1,
device:1,
accuracy:1,
strategy:1,
outOfContact:1,
completeAction:1,
breakFly:1,
})
const emit = defineEmits(['selectAriLine','cancleCraete',"selectAircraft"]);
const selectAriLine = ()=> {
emit("selectAriLine",true)
}
const selectAircraft = ()=>{
emit("selectAircraft",true)
}
const rules = {
};
const onSubmit = () => {
formRef.value
.validate()
.then(() => {
})
.catch(error => {
console.log('error', error);
});
};
const resetForm = () => {
emit("cancleCraete");
formRef.value.resetFields();
};
</script>
<style scoped>
.container{
padding:10px 20px;
}
.title{
padding:15px 0px;
color:#fff;
}
.ant-form-item{
margin-bottom:12px;
}
::v-deep .ant-form-item-label > label{
color:#ffffff!important;
font-size:12px;
}
::v-deep .ant-select-selector{
border:none!important;
color:#fff!important;
background:#3F4150!important ;
border-radius: 3px!important;
}
::v-deep .ant-select-selection-placeholder {
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-select-arrow {
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-select-selection-search-input::placeholder{
color:rgba(255, 255, 255, 0.933)!important;
}
::v-deep .ant-tree {
background:none!important;
color:#fff!important;
}
::v-deep .ant-tree-treenode-selected{
background:#3a57e877!important;
}
::v-deep .ant-tree-treenode-selected::before{
background:none!important;
}
::v-deep .ant-tree-treenode-selected::after{
content:"";
height:28px;
width:4px;
background:#3A57E8;
position:absolute;
top:0px;
left:0px;
}
::v-deep .ant-input{
background:#3B4154!important;
border:none!important;
border-radius: 3px !important;
color:#fff!important;
}
::v-deep .ant-input::placeholder{
color:rgba(255, 255, 255, 0.533)!important;
}
::v-deep .ant-btn-default{
background:none!important;
border:none!important;
outline:none!important;
color:#fff!important;
height:30px !important;
background:#29305477!important;
}
::v-deep .ant-btn-primary{
background:#3A57E8!important;
border-radius:3px!important;
}
::v-deep .ant-radio-button-wrapper-checked{
background:#3A57E8!important;
}
::v-deep .ant-radio-button-wrapper{
border-radius: 2px !important;
}
</style>

@ -0,0 +1,68 @@
<template>
<div>
<div style="width:100%;height: calc( 100vh - 80px);" >
<Map></Map>
</div>
<!-- 工作计划列表 -->
<div v-if="planListShow" style="width:360px;background:#0d0e15c1 ;position:absolute;top:0px;left:0px;z-index:1;height: calc( 100vh - 104px);overflow-y:hidden;">
<planList @createWorkPlan="createWorkPlan" ></planList>
</div>
<!-- 创建计划弹窗 -->
<div v-if="workPlanFormShow" style="width:380px;background:#0d0e15ce ;position:absolute;top:30px;left:30px;z-index:1;height: calc( 100vh - 164px);overflow-y:hidden;">
<WorkPlanForm @cancleCraete="cancleCraete" @selectAircraft="selectAircraft" @selectAriLine="selectAriLine"></WorkPlanForm>
</div>
<!-- 航线库 -->
<div v-if="ariLineShow" style="width:566px;background:#0d0e15c1 ;position:absolute;top:30px;left:440px;z-index:1;height: calc( 100vh - 164px);overflow-y:hidden;">
<airLineList @checkAriLine="checkAriLine" ></airLineList>
</div>
<!-- 飞行器 -->
<div v-if="aircraftShow" style="width:340px;background:#0d0e15c1 ;position:absolute;top:30px;left:440px;z-index:1;height: calc( 100vh - 164px);overflow-y:hidden;">
<aircraft @checkAriLine="checkAriLine" ></aircraft>
</div>
</div>
</template>
<script lang="ts" setup>
import {ref} from 'vue';
import planList from './components/planList.vue';
import airLineList from './components/airLineList.vue';
import aircraft from './components/aircraft.vue';
import WorkPlanForm from './components/workPlanForm.vue';
import Map from './components/map.vue'
const planListShow = ref(true);
const workPlanFormShow = ref(false);
const ariLineShow = ref(false);
const aircraftShow = ref(false);
const selectAriLine = ()=> {
ariLineShow.value = true;
aircraftShow.value = false;
}
const selectAircraft = ()=>{
aircraftShow.value = true;
ariLineShow.value = false;
}
const cancleCraete = ()=>{
workPlanFormShow.value = false;
ariLineShow.value = false;
aircraftShow.value = false;
planListShow.value = true;
}
const checkAriLine = (item)=>{
if(item){
ariLineShow.value = false;
}
}
const createWorkPlan = ()=> {
planListShow.value = false;
workPlanFormShow.value = true;
}
</script>

@ -1,4 +1,5 @@
import { defineApplicationConfig } from '@vben/vite-config';
import { mars3dPlugin } from "vite-plugin-mars3d"
export default defineApplicationConfig({
overrides: {
@ -56,6 +57,10 @@ export default defineApplicationConfig({
},
},
},
plugins: [],
plugins: [
mars3dPlugin()
],
},
});

Loading…
Cancel
Save