工程合并导入和物资管理

This commit is contained in:
2025-10-31 10:08:36 +08:00
parent 422986070c
commit 677590fd4d
15 changed files with 1887 additions and 972 deletions

View File

@ -20096,8 +20096,8 @@
var testing =
'<div class="compass" title="拖动外圈:旋转视图,' +
'拖动内陀螺仪:自由轨道,' +
'双击:重置视图' +
'提示您还可以按住CTRL键并拖动地图来释放轨道." data-bind="visible: showCompass, event: { mousedown: handleMouseDown, dblclick: handleDoubleClick }">' +
'双击:重置视图' +
'" data-bind="visible: showCompass, event: { mousedown: handleMouseDown, dblclick: handleDoubleClick }">' +
'<div class="compass-outer-ring-background"></div>' +
" <div class=\"compass-rotation-marker\" data-bind=\"visible: isOrbiting, style: { transform: 'rotate(-' + orbitCursorAngle + 'rad)', '-webkit-transform': 'rotate(-' + orbitCursorAngle + 'rad)', opacity: orbitCursorOpacity }, cesiumSvgPath: { path: svgCompassRotationMarker, width: 145, height: 145 }\"></div>" +
" <div class=\"compass-outer-ring\" title=\"单击并拖动以旋转相机\" data-bind=\"style: { transform: 'rotate(-' + heading + 'rad)', '-webkit-transform': 'rotate(-' + heading + 'rad)' }, cesiumSvgPath: { path: svgCompassOuterRing, width: 145, height: 145 }\"></div>" +

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
export default {
title: '实景三维电子沙盘系统',
week: ['星期日', '星期一', '星期二','星期三', '星期四','星期五', '星期六'],
week: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
tree: {
title: '图层指挥舱',
// title: "综合信息",
@ -147,6 +147,7 @@ export default {
setting: '系统设置',
project: '工程信息',
device: '设备管理',
materials: '物资管理',
modelManage: '模型管理',
graphLabelManage: '军标管理',
photoManage: '图标管理',

View File

@ -0,0 +1,31 @@
//路径规划
import request from '@/axios/request'
export const MaterialApi = {
//获取地图列表
getList: async (data) => {
return await request.post({
url: `/matter/list`,
data: data
})
},
add: async (data) => {
return await request.post({
url: `/matter/add`,
data
})
},
//添加路网数据
update: async (data: any) => {
return await request.post({
url: `/matter/update`,
data,
})
},
//启用路网数据
del: async (data: any) => {
return await request.post({
url: `/matter/deletes`,
data,
})
}
}

View File

@ -42,4 +42,10 @@ export const PoiApi = {
data,
})
},
importProjectConfig: async (data: any) => {
return await request.post({
url: `/systemService/importProjectConfig`,
data,
})
},
}

View File

@ -413,9 +413,9 @@ const mergeProject = () => {
$sendElectronChanel('open-directory-dialog', option)
$recvElectronChanel('selectedItem', (e, path) => {
if (path.length) {
RouteApi.loadRoute({
path: path[0]
}).then((res) => {
let formData = new FormData()
formData.append('path', path[0])
PoiApi.importProjectConfig(formData).then((res) => {
if (res.code === 200) {
setTimeout(() => {
ElMessage({

View File

@ -66,6 +66,12 @@
<el-button type="primary" size="small" @click="delFun(scope.row)">删除</el-button>
</template>
</el-table-column>
<template #empty>
<div class="custom-empty">
<img src="@/assets/images/noData.png" alt="暂无数据" />
<div class="noData">暂无数据</div>
</div>
</template>
</el-table>
</div>
<div>
@ -266,7 +272,8 @@ const downloadTemp = async () => {
<style lang="scss">
::v-deep .addDevice {
background:
linear-gradient(180deg, rgba(var(--color-base1), 0.2) 0%, rgba(var(--color-base1), 0) 100%), rgba(0, 0, 0, 1) !important;
linear-gradient(180deg, rgba(var(--color-base1), 0.2) 0%, rgba(var(--color-base1), 0) 100%),
rgba(0, 0, 0, 1) !important;
.el-dialog__title {
color: #fff !important;
}
@ -461,5 +468,16 @@ const downloadTemp = async () => {
--el-button-hover-bg-color: rgba(var(--color-base1), 0.2) !important;
border: 1px solid rgba(var(--color-base1), 0.5) !important;
}
.custom-empty {
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
flex-direction: column;
height: 300px;
}
.custom-empty img {
display: block;
width: 130px;
}
}
</style>

View File

@ -0,0 +1,385 @@
<template>
<div class="equipment">
<div class="equipment_title">
<el-button
color="#004b4b"
style="border: 1px solid rgba(var(--color-base1), 0.5)"
@click="edit('添加物资', 0)"
>
<template #icon>
<svg-icon name="leading_in" />
</template>
<span>添加物资</span>
</el-button>
<el-input
v-model="input3"
style="max-width: 250px"
placeholder="请输入物资名称进行搜索"
class="input-with-select"
:suffix-icon="Search"
@input="getTableList()"
>
</el-input>
</div>
<div class="nav_table">
<el-table :data="tableData" height="40vh" style="width: 100%">
<el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column prop="name" label="名称" />
<el-table-column prop="num" label="总计数量" width="120" />
<el-table-column fixed="right" label="操作" width="160">
<template #default="scope">
<el-button type="primary" size="small" @click="edit('编辑物资', scope.row)">
编辑
</el-button>
<el-button type="primary" size="small" @click="delFun(scope.row)">删除</el-button>
</template>
</el-table-column>
<template #empty>
<div class="custom-empty">
<img src="@/assets/images/noData.png" alt="暂无数据" />
<div class="noData">暂无数据</div>
</div>
</template>
</el-table>
</div>
<div>
<Pagination
:total="total"
v-model:page="pages.pageNum"
v-model:limit="pages.pageSize"
@pagination="getTableList"
/>
</div>
</div>
</template>
<script setup lang="ts">
import { Search } from '@element-plus/icons-vue'
import { MaterialApi } from '@/api/material/index'
import Dialog from '@/components/dialog/baseDialog.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import {
$sendElectronChanel,
$recvElectronChanel,
$removeElectronChanel
} from '@/utils/communication'
const eventBus: any = inject('bus')
const input3 = ref('')
const tableData: any = ref([])
const total = ref(100)
// 页码
let pages: any = reactive({
pageNum: 1,
pageSize: 10
})
// 使用循环生成10条数据
// for (let i = 0; i < 10; i++) {
// tableData.value.push({
// cameraName: '123',
// type: (i % 3) + '',
// state: ['California', 'New York', 'Texas'][i % 3],
// city: ['Los Angeles', 'New York', 'Houston'][i % 3],
// address: `No. ${i + 1}00, Main St`,
// zip: ['CA 90036', 'NY 10001', 'TX 77002'][i % 3],
// tag: ['Home', 'Work', 'Other'][i % 3]
// })
// }
// var statusTrans = (id) => {
// switch (id) {
// case '1':
// return '海康'
// case '2':
// return '大华'
// case '3':
// return '手动录入'
// }
// }
const getTableList = async () => {
let formData = new FormData()
formData.append('pageNum', pages.pageNum)
formData.append('pageSize', pages.pageSize)
formData.append('name', input3.value)
const res = await MaterialApi.getList(formData)
// if (res.code === 50) {
// ElMessage.warning(res.message)
// return
// }
if (res.code === 200) {
tableData.value = res.data.records
total.value = res.data.total
}
}
getTableList()
eventBus.on('addOptionResuit2', () => {
getTableList()
})
//------------------添加--------------------
const baseDialog: any = ref(null)
var peopleFormRef: any = ref('')
const peopleRules: any = reactive({
cameraName: [{ required: true, message: '请输入名称', trigger: 'blur' }],
ip: [{ required: true, message: '请输入ip', trigger: 'blur' }],
port: [{ required: true, message: '请输入设备端口号', trigger: 'blur' }],
username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
type: [{ required: true, message: '请选择设备类型', trigger: 'blur' }]
})
var close = () => {
baseDialog.value?.close()
// baseDialog.value = false
}
var edit = (type, row) => {
let addForm
if (row) {
addForm = JSON.parse(JSON.stringify(row))
// addForm.areaId = +row.areaId
}
eventBus.emit('openAddMaterial', { title: type, data: addForm })
}
var delFun = (row) => {
ElMessageBox.confirm(
`删除物资将在系统中永久消失,且添加到场景展示区的数据也将删除,您确定要执行删除操作吗?`,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
)
.then(() => {
// let formData = new FormData()
// formData.append('id', row.id)
MaterialApi.del({ id: row.id }).then((res) => {
if (res.code === 200) {
ElMessage.success('删除成功')
getTableList()
}
})
})
.catch(() => {})
}
</script>
<style lang="scss">
::v-deep .addDevice {
background:
linear-gradient(180deg, rgba(var(--color-base1), 0.2) 0%, rgba(var(--color-base1), 0) 100%),
rgba(0, 0, 0, 1) !important;
.el-dialog__title {
color: #fff !important;
}
}
</style>
<style scoped lang="scss">
::v-deep .el-form-item--label-right .el-form-item__label {
color: #fff !important;
}
::v-deep .el-form-item .el-input__wrapper {
background-color: transparent !important;
box-shadow: 0 0 0 0.5px rgba(var(--color-base1), 1) inset !important; /* 新增此行 */
}
::v-deep .el-form-item .el-select__wrapper {
background-color: transparent !important;
box-shadow: 0 0 0 0.5px rgba(var(--color-base1), 1) inset !important; /* 新增此行 */
}
::v-deep .el-form-item .el-input__inner {
color: #fff !important;
}
::v-deep .el-form-item .el-select__placeholder {
color: #fff !important;
}
.equipment {
width: 100%;
height: 100%;
.equipment_title {
width: 100%;
display: flex;
justify-content: space-between;
padding-bottom: 20px;
:deep(.el-input__wrapper) {
background-color: transparent !important;
// border: 0.2px solid rgba(var(--color-base1), 0.5) !important;
box-shadow: 0 0 0 0.5px rgba(var(--color-base1), 1) inset !important; /* 新增此行 */
}
:deep(.el-input__inner) {
color: #fff;
}
:deep(.el-select__wrapper) {
background-color: transparent;
border: 0.2px solid rgba(var(--color-base1), 0.5);
box-shadow: 0 0 0 0.2px rgba(var(--color-base1), 1) inset !important; /* 新增此行 */
}
:deep(.el-select__placeholder),
:deep(.el-select__tags-text) {
color: #fff !important;
}
:deep(.el-input-group__append) {
border: none !important;
background-color: rgba(var(--color-base1), 0.2);
box-shadow: 0 0 0 0.2px rgba(var(--color-base1), 1) inset !important; /* 新增此行 */
}
:deep(.el-icon) {
color: #fff !important; /* 将#00ffff替换为你想用的颜色 */
font-size: 14px; /* 可选:调整图标大小 */
}
}
.input-with-select {
margin-left: 10px;
}
.nav_table {
width: 100%;
// height: 40vh;
// box-sizing: border-box;
overflow-y: auto; /* 垂直方向超出时显示滚动条 */
:deep(.el-table, .el-table__expanded-cell) {
background: rgba(0, 0, 0, 0);
color: #fff;
}
:deep(.el-table tr) {
background: rgba(0, 0, 0, 0);
// border: 1px solid rgba(var(--color-base1), 0.5) !important;
}
:deep(.el-table th.el-table__cell) {
background: #004b4b;
color: #fff;
border-bottom: 1px solid rgba(var(--color-base1), 0.5) !important;
border-right: 1px solid rgba(var(--color-base1), 0.5) !important;
}
:deep(.el-table--enable-row-transition .el-table__body td.el-table__cell) {
border-right: 1px solid rgba(var(--color-base1), 0.5) !important;
border-bottom: 1px solid rgba(var(--color-base1), 0.5) !important;
// background: #004b4b;
}
// :deep(.el-table__header-wrapper tr th.el-table-fixed-column--left) {
// background-color: #004b4b !important;
// }
// :deep(.el-table__header-wrapper tr th.el-table-fixed-column--right) {
// background-color: rgba(0, 255, 255, 0.2) !important;
// z-index: 1000;
// }
// :deep(.el-table__body tr td.el-table-fixed-column--right) {
// background-color: rgba(0, 255, 255, 0.2) !important;
// z-index: 1000;
// }
:deep(.el-table__body tr:hover > td) {
background-color: rgba(40, 75, 91, 0.9) !important;
}
/* 表格边框颜色 */
:deep(
.el-table,
.el-table__header-wrapper,
.el-table__body-wrapper,
.el-table__footer-wrapper,
.el-table th,
.el-table td
) {
border: 1px solid rgba(var(--color-base1), 0.5) !important;
}
:deep(.el-table__inner-wrapper:before) {
background-color: transparent !important;
}
/* 固定列的边框 */
:deep(.el-table__fixed, .el-table__fixed-right) {
border: 1px solid rgba(var(--color-base1), 0.5) !important;
}
:deep(.el-table__body-wrapper::-webkit-scrollbar) {
width: 4px;
height: 10px;
}
:deep(.el-table__body-wrapper::-webkit-scrollbar-thumb) {
-webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
opacity: 0.2;
background: #00c0ff;
}
:deep(.el-table__body-wrapper::-webkit-scrollbar-track) {
-webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
border-radius: 0;
background: rgba(220, 228, 245, 0.8);
}
:deep(.el-icon-arrow-right:before) {
color: rgba(var(--color-base1), 1);
font-weight: bold;
font-size: 16px;
}
}
// 滚动条优化
.nav_table::-webkit-scrollbar {
width: 5px;
height: 5px;
}
.nav_table::-webkit-scrollbar-thumb {
background-color: rgba(var(--color-base1), 1);
border-radius: 5px;
}
.nav_table::-webkit-scrollbar-track {
background-color: rgba(var(--color-base1), 0.2);
}
.deviceType {
display: inline-block;
width: 8px;
height: 8px;
border-radius: 4px;
background: red;
margin-right: 10px;
}
::v-deep .el-select__wrapper {
background-color: unset !important;
}
::v-deep .el-select__placeholder {
color: #fff !important;
}
::v-deep .el-select__wrapper.is-focused {
box-shadow: 0 0 0 1px #fff inset !important;
}
::v-deep .el-input__wrapper {
background-color: unset !important;
}
::v-deep .el-input__inner {
color: #fff !important;
}
::v-deep .el-input__wrapper.is-focus {
box-shadow: 0 0 0 1px #fff inset !important;
}
::v-deep .el-pager li * {
color: rgba(var(--color-base1), 1) !important;
}
::v-deep .el-pager li.is-active {
color: rgba(var(--color-base1), 1) !important;
}
::v-deep .el-button--primary {
--el-button-bg-color: rgba(var(--color-base1), 0.2) !important;
--el-button-hover-bg-color: rgba(var(--color-base1), 0.2) !important;
border: 1px solid rgba(var(--color-base1), 0.5) !important;
}
.custom-empty {
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
flex-direction: column;
height: 300px;
}
.custom-empty img {
display: block;
width: 130px;
}
}
</style>

View File

@ -551,7 +551,6 @@ concurrentcode.value = localStorage.getItem('concurrentcode') || 10
//系统坐标系
let tool = new YJ.Tools(window.earth)
name_map.value = Array.from(tool.name_map.values())
console.log(name_map.value, 'ooooooo')
name_map1.value = name_map.value.splice(0, 2)
const sysChange = async () => {

View File

@ -1,43 +1,74 @@
<template>
<div class="set_pup">
<el-dialog v-model="isShowPup" :modal="false" draggable :close-on-click-modal="false" :destroy-on-close="true">
<el-dialog
v-model="isShowPup"
:modal="false"
draggable
:close-on-click-modal="false"
:destroy-on-close="true"
>
<template #header>
<div class="set_pup_header">
<div class="system_title">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="229" height="35"
viewBox="0 0 229 35" fill="none" preserveAspectRatio="none">
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="229"
height="35"
viewBox="0 0 229 35"
fill="none"
preserveAspectRatio="none"
>
<path
d="M74 34L85 34L99.5 6L88.5 6L74 34ZM92 34L103 34L117.5 6L106.5 6L92 34ZM111 34L122 34L136.5 6L125.5 6L111 34ZM140 34L129 34L143.5 6L154.5 6L140 34ZM148 34L159 34L173.5 6L162.5 6L148 34ZM177 34L166 34L180.5 6L191.5 6L177 34ZM185 34L196 34L210.5 6L199.5 6L185 34ZM214 34L203 34L217.5 6L228.5 6L214 34ZM0 34L11 34L25.5 6.5L14.5 6.5L0 34ZM18 34L29 34L43.5 6.5L32.5 6.5L18 34ZM37 34L48 34L62.5 6.5L51.5 6.5L37 34ZM66 34L55 34L69.5 6.5L80.5 6.5L66 34Z"
fill-rule="evenodd" fill="url(#linear_fill_2442_1053)" />
fill-rule="evenodd"
fill="url(#linear_fill_2442_1053)"
/>
<rect x="0" y="0" width="229" height="34" fill="url(#linear_fill_2442_1054)" />
<g clip-path="url(#clip-path-2442_1055)">
<path
d="M10.3993 32.7333L10.666 33L10.666 21L9.33267 22.3333L4.66602 27L5.66602 28L10.3993 32.7333ZM9.33267 29.6667L6.73267 27L9.33267 24.3333L9.33267 29.6667Z"
fill="rgb(var(--color-base1))" />
fill="rgb(var(--color-base1))"
/>
<g opacity="0.5">
<path
d="M7.39934 32.7333L7.66602 33L7.66602 21L6.33267 22.3333L1.66602 27L2.66602 28L7.39934 32.7333ZM6.33267 29.6667L3.73267 27L6.33267 24.3333L6.33267 29.6667Z"
fill="rgb(var(--color-base1))" />
fill="rgb(var(--color-base1))"
/>
</g>
</g>
<g clip-path="url(#clip-path-2442_1059)">
<path
d="M218.601 32.7333L218.334 33L218.334 21L219.667 22.3333L224.334 27L223.334 28L218.601 32.7333ZM219.667 29.6667L222.267 27L219.667 24.3333L219.667 29.6667Z"
fill="rgb(var(--color-base1))" />
fill="rgb(var(--color-base1))"
/>
<g opacity="0.5">
<path
d="M221.601 32.7333L221.334 33L221.334 21L222.667 22.3333L227.334 27L226.334 28L221.601 32.7333ZM222.667 29.6667L225.267 27L222.667 24.3333L222.667 29.6667Z"
fill="rgb(var(--color-base1))" />
fill="rgb(var(--color-base1))"
/>
</g>
</g>
<defs>
<linearGradient id="linear_fill_2442_1053" x1="119.1239013671875" y1="33.99998474121094"
x2="119.1231689453125" y2="6" gradientUnits="userSpaceOnUse">
<linearGradient
id="linear_fill_2442_1053"
x1="119.1239013671875"
y1="33.99998474121094"
x2="119.1231689453125"
y2="6"
gradientUnits="userSpaceOnUse"
>
<stop offset="0" stop-color="rgb(var(--color-base1))" stop-opacity="0.2" />
<stop offset="1" stop-color="rgb(var(--color-base1))" stop-opacity="0" />
</linearGradient>
<linearGradient id="linear_fill_2442_1054" x1="0" y1="17" x2="229" y2="17"
gradientUnits="userSpaceOnUse">
<linearGradient
id="linear_fill_2442_1054"
x1="0"
y1="17"
x2="229"
y2="17"
gradientUnits="userSpaceOnUse"
>
<stop offset="0" stop-color="rgb(var(--color-base1))" stop-opacity="0" />
<stop offset="0.4891" stop-color="rgb(var(--color-base1))" stop-opacity="0.4" />
<stop offset="1" stop-color="rgb(var(--color-base1))" stop-opacity="0" />
@ -68,6 +99,9 @@
<el-tab-pane :label="t('system.device')" name="device">
<equipment></equipment>
</el-tab-pane>
<el-tab-pane :label="t('system.materials')" name="materials">
<materials></materials>
</el-tab-pane>
<el-tab-pane :label="t('system.modelManage')" name="modelManage">
<modelManage></modelManage>
</el-tab-pane>
@ -91,6 +125,7 @@ import authorize from './components/authorize.vue'
import sett from './components/setting.vue'
import engineering from './components/engineering.vue'
import equipment from './components/equipment.vue'
import materials from './components/materials.vue'
import version from './components/version.vue'
import modelManage from './components/modelManage.vue'
import graphLabelManage from './components/graphLabelManage.vue'
@ -178,7 +213,7 @@ defineExpose({
position: relative;
z-index: 1;
>svg {
> svg {
position: absolute;
top: 0;
left: 0;
@ -193,19 +228,23 @@ defineExpose({
box-sizing: border-box;
// height: 50vh;
:deep(.el-tabs--left .el-tabs__active-bar.is-left,
:deep(
.el-tabs--left .el-tabs__active-bar.is-left,
.el-tabs--left .el-tabs__active-bar.is-right,
.el-tabs--right .el-tabs__active-bar.is-left,
.el-tabs--right .el-tabs__active-bar.is-right) {
.el-tabs--right .el-tabs__active-bar.is-right
) {
width: 3px;
background: rgba(var(--color-base1), 1);
height: 40px !important;
}
:deep(.el-tabs--left .el-tabs__nav-wrap.is-left::after,
:deep(
.el-tabs--left .el-tabs__nav-wrap.is-left::after,
.el-tabs--left .el-tabs__nav-wrap.is-right::after,
.el-tabs--right .el-tabs__nav-wrap.is-left::after,
.el-tabs--right .el-tabs__nav-wrap.is-right::after) {
.el-tabs--right .el-tabs__nav-wrap.is-right::after
) {
width: 3px;
}
@ -262,29 +301,39 @@ defineExpose({
}
:deep(.el-tabs__item:hover) {
background: linear-gradient(90deg,
rgba(var(--color-base1), 0) 0%,
rgba(var(--color-base1), 0.5) 48.91%,
rgba(var(--color-base1), 0) 100%);
background: linear-gradient(
90deg,
rgba(var(--color-base1), 0) 0%,
rgba(var(--color-base1), 0.5) 48.91%,
rgba(var(--color-base1), 0) 100%
);
border: 1px solid;
box-sizing: border-box;
border-image: linear-gradient(90deg,
border-image: linear-gradient(
90deg,
rgba(var(--color-base1), 0) 0%,
rgba(var(--color-base1), 1) 55.55%,
rgba(var(--color-base1), 0) 100%) 1;
rgba(var(--color-base1), 0) 100%
)
1;
}
:deep(.el-tabs__item.is-active) {
background: linear-gradient(90deg,
rgba(var(--color-base1), 0) 0%,
rgba(var(--color-base1), 0.5) 48.91%,
rgba(var(--color-base1), 0) 100%) !important;
background: linear-gradient(
90deg,
rgba(var(--color-base1), 0) 0%,
rgba(var(--color-base1), 0.5) 48.91%,
rgba(var(--color-base1), 0) 100%
) !important;
border: 0.1px solid;
// box-sizing: border-box;
border-image: linear-gradient(90deg,
border-image: linear-gradient(
90deg,
rgba(var(--color-base1), 0) 0%,
rgba(var(--color-base1), 1) 55.55%,
rgba(var(--color-base1), 0) 100%) 1 !important;
rgba(var(--color-base1), 0) 100%
)
1 !important;
}
:deep(.el-tabs__header) {

View File

@ -22,10 +22,13 @@
<div class="div-item">
<div class="row">
<div class="col">
<span class="label">实时天气</span>
<span class="label">实时光照</span>
<el-switch
v-model="weatherData.currWeather"
style="--el-switch-on-color: rgba(var(--color-base1), 1); --el-switch-off-color: rgba(var(--color-base1), 0.2)"
style="
--el-switch-on-color: rgba(var(--color-base1), 1);
--el-switch-off-color: rgba(var(--color-base1), 0.2);
"
@change="weatherChange"
>
</el-switch>
@ -63,7 +66,10 @@
<span class="label">阴影优化</span>
<el-switch
v-model="weatherData.softShadow"
style="--el-switch-on-color: rgba(var(--color-base1), 1); --el-switch-off-color: rgba(var(--color-base1), 0.2)"
style="
--el-switch-on-color: rgba(var(--color-base1), 1);
--el-switch-off-color: rgba(var(--color-base1), 0.2);
"
@change="shadowChange"
>
</el-switch>
@ -227,6 +233,7 @@ onMounted(() => {
weatherData.currWeather = false
sunshine.timeBar = item
})
console.log(timeline, 'klklkl')
// timeline.updateTime()
// timeline.setCurrBar()
})

View File

@ -3,6 +3,7 @@
ref="baseDialog"
class="addDevice"
:title="addTitle"
style="z-index: 1000"
left="calc(50% - 160px)"
top="calc(50% - 120px)"
>

View File

@ -0,0 +1,150 @@
<template>
<Dialog
ref="baseDialog"
class="addDevice"
:title="addTitle"
style="z-index: 1000"
left="calc(50% - 160px)"
top="calc(50% - 120px)"
>
<template #content>
<el-form
label-width="0px"
style="width: 300px"
:model="addForm"
:rules="peopleRules"
ref="peopleFormRef"
>
<el-form-item label="" prop="name">
<el-input v-model="addForm.name" placeholder="请输入物资名称" clearable />
</el-form-item>
</el-form>
</template>
<template #footer>
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="submitProtal"> 确定 </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { inject } from 'vue'
import { TreeApi } from '@/api/tree'
import Dialog from '@/components/dialog/baseDialog.vue'
import { initMapData } from '../../../common/initMapData'
import { useTreeNode } from '../tree/hooks/treeNode'
import { MaterialApi } from '@/api/material/index'
import { ElMessage, ElMessageBox } from 'element-plus'
const { cusAddNodes } = useTreeNode()
const baseDialog: any = ref(null)
const eventBus: any = inject('bus')
var addTitle = ref('')
var peopleFormRef: any = ref('')
var addForm: any = ref({
name: ''
})
const peopleRules: any = reactive({
name: [{ required: true, message: '请输入名称', trigger: 'blur' }]
})
var cancel = () => {
// pDialogVisible.value = false
baseDialog.value?.close()
addForm.value = {
name: ''
}
}
var submitProtal = () => {
peopleFormRef.value.validate(async (valid) => {
if (valid) {
if (addTitle.value == '添加物资') {
const res = await MaterialApi.add(addForm.value)
if (res.code === 200) {
ElMessage.success('操作成功')
eventBus.emit('addOptionResuit2')
}
} else {
const res = await MaterialApi.update(addForm.value)
if (res.code === 200) {
ElMessage.success('操作成功')
eventBus.emit('addOptionResuit2')
}
}
baseDialog.value?.close()
return true
} else {
console.log('error submit!!')
return false
}
})
}
eventBus.on('openAddMaterial', (params) => {
addTitle.value = params.title
if (addTitle.value != '添加物资') {
addForm.value.name = params.data.name
addForm.value.id = params.data.id
} else {
addForm.value = {
name: ''
}
}
baseDialog.value?.open()
})
const open = () => {
baseDialog.value?.open()
}
const confirm = () => {
baseDialog.value?.close()
}
defineExpose({
open
})
</script>
<style lang="scss">
.YJ-custom-base-dialog.addDevice > .content input,
.YJ-custom-base-dialog.addDevice > .content textarea {
background-color: transparent !important;
border: unset !important;
}
</style>
<style scoped lang="scss">
::v-deep .el-form-item--label-right .el-form-item__label {
color: #fff !important;
}
::v-deep .el-form-item .el-input__wrapper {
background-color: rgba(0, 0, 0, 0.5) !important;
box-shadow: 0 0 0 0.5px rgba(var(--color-base1), 1) inset !important; /* 新增此行 */
}
::v-deep .el-form-item .el-select__wrapper {
background-color: rgba(0, 0, 0, 0.5) !important;
box-shadow: 0 0 0 0.5px rgba(var(--color-base1), 1) inset !important; /* 新增此行 */
:deep(input) {
background-color: transparent !important;
border: unset !important;
}
}
::v-deep .el-form-item .el-input__inner {
color: #fff !important;
}
::v-deep .el-form-item .el-select__placeholder {
color: #fff !important;
}
::v-deep .el-input__wrapper {
padding: 0px !important;
}
::v-deep .el-button:hover {
background-color: rgba(var(--color-base1), 0.2) !important;
color: rgba(var(--color-base1), 1) !important;
}
// ::v-deep .el-form-item__content {
// margin-left: 0px !important;
// }
</style>

View File

@ -395,7 +395,18 @@ export const useTreeNode = () => {
rightMenus: [
'edit',
'del',
'setView',
'setView',
'resetView'
]
// render: renderFlyLine,
// detailFun: get_detail_flyLine,
// allowChildren: false,
},
folder: {
rightMenus: [
'edit',
'del',
'setView',
'resetView'
]
// render: renderFlyLine,
@ -440,7 +451,7 @@ export const useTreeNode = () => {
const cusNodeIcon = async (node) => {
let availablePort = await ipcRenderer.invoke('get-available-port');
let type
if(node.sourcePath || node.sourceType === 'vector') {
if (node.sourcePath || node.sourceType === 'vector') {
let path = node.sourcePath ? node.sourcePath : JSON.parse(node.params).path
// 获取最后一个点的位置
const lastDotIndex = path.lastIndexOf('.');
@ -468,10 +479,10 @@ export const useTreeNode = () => {
if (type == "road" && node.detail.imageType == "arrowRoad")
name = "lineDrawing";
let strokeWidth = 0.1
if(type === 'ellipse') {
strokeWidth = 1.5;
}
let strokeWidth = 0.1
if (type === 'ellipse') {
strokeWidth = 1.5;
}
// return (type === 'directory' || type === 'FeatureCollection') ? undefined : `http://localhost:${availablePort}/icon/${name}.png`;
return (type === 'directory' || type === 'FeatureCollection') ? undefined : `
@ -538,7 +549,7 @@ export const useTreeNode = () => {
allNodes = allNodes.concat(treeObj.transformToArray(node))
})
allNodes.forEach((node: any) => {
if(node.sourceType !== 'FeatureCollection' && node.sourceType !== 'Feature') {
if (node.sourceType !== 'FeatureCollection' && node.sourceType !== 'Feature') {
_idSet.add(node.id)
}
treeObj.removeNode(node)
@ -636,7 +647,7 @@ export const useTreeNode = () => {
}
}
}
return arr
}

View File

@ -11,8 +11,14 @@
<firstMenu class="absolute zIndex9" ref="firstMenuRef"></firstMenu>
<!--底部菜单-->
<bottomMenu class="absolute zIndex9" ref="bottomMenuRef"></bottomMenu>
<input type="file" id="fileInputlink" style="display: none" multiple accept=".jpeg,.png,.jpg,.mp4,.pdf"
@input="uploadFile" />
<input
type="file"
id="fileInputlink"
style="display: none"
multiple
accept=".jpeg,.png,.jpg,.mp4,.pdf"
@input="uploadFile"
/>
<!-- 多点视线分析 -->
<!-- <Visibility ref="visibility"></Visibility> -->
@ -45,6 +51,7 @@
<modelObject ref="modelobject"></modelObject>
<graphObject ref="graphobject"></graphObject>
<addDevice ref="adddevice"></addDevice>
<addMaterials ref="addmaterials"></addMaterials>
</template>
<script setup lang="ts">
@ -121,9 +128,10 @@ import graph from '../components/propertyBox/graph.vue'
import graphSetting from '../components/propertyBox/graphSetting.vue'
import photo from '../components/propertyBox/photo.vue'
import addDevice from '../components/propertyBox/addDevice.vue'
import addMaterials from '../components/propertyBox/addMaterials.vue'
import { GisApi } from '@/api/gisApi'
import { sysChange as utilsSysChange } from "@/utils/sysChange";
import { sysChange as utilsSysChange } from '@/utils/sysChange'
const { rightMenus } = useRightOperate()
const firstMenuRef = ref(null)
@ -532,9 +540,9 @@ const getStatus = (time) => {
const currentTimestamp = Date.now()
if (timestamp > currentTimestamp) {
; (window as any).checkAuthIsValid = true
;(window as any).checkAuthIsValid = true
} else {
; (window as any).checkAuthIsValid = false
;(window as any).checkAuthIsValid = false
}
}