This commit is contained in:
takeshita
2025-12-02 14:35:09 +08:00
parent 928db10f68
commit 33c583d3cd
55 changed files with 811 additions and 649 deletions

View File

@ -128,6 +128,19 @@ function createWindow(): void {
allowRunningInsecureContent: true allowRunningInsecureContent: true
} }
}) })
mainWindow.webContents.on('before-input-event', (event, input) => {
// 条件:仅按了 Alt 键(无其他键组合、不是组合键、不是重复按键)
if (
input.key === 'Alt' && // 按键是 Alt
!input.ctrl && // 未按 Ctrl
!input.shift && // 未按 Shift
!input.meta && // 未按 MetaWin/Mac
!input.isComposing && // 非输入法组合态
input.type === 'keyDown' // 仅拦截按下事件
) {
event.preventDefault(); // 阻止 Alt 键的默认行为(激活菜单)
}
});
let ymlBatPath = process.env.NODE_ENV === 'development' ? path.resolve(app.getAppPath(), 'resources', 'java', 'app', 'application.yml') : path.join(process.resourcesPath, 'app.asar.unpacked', 'resources', 'java', 'app', 'application.yml') let ymlBatPath = process.env.NODE_ENV === 'development' ? path.resolve(app.getAppPath(), 'resources', 'java', 'app', 'application.yml') : path.join(process.resourcesPath, 'app.asar.unpacked', 'resources', 'java', 'app', 'application.yml')
ymlBatPath = process.platform === 'win32' ? ymlBatPath.replace(/^(\w:)/, '/$1') : ymlBatPath ymlBatPath = process.platform === 'win32' ? ymlBatPath.replace(/^(\w:)/, '/$1') : ymlBatPath
let ymlPath = ymlBatPath.substring(1, 200) let ymlPath = ymlBatPath.substring(1, 200)
@ -389,6 +402,19 @@ function createWindow(): void {
// closeCB(newWindow.id) // closeCB(newWindow.id)
}); });
} }
newWindow.webContents.on('before-input-event', (event, input) => {
// 条件:仅按了 Alt 键(无其他键组合、不是组合键、不是重复按键)
if (
input.key === 'Alt' && // 按键是 Alt
!input.ctrl && // 未按 Ctrl
!input.shift && // 未按 Shift
!input.meta && // 未按 MetaWin/Mac
!input.isComposing && // 非输入法组合态
input.type === 'keyDown' // 仅拦截按下事件
) {
event.preventDefault(); // 阻止 Alt 键的默认行为(激活菜单)
}
});
_winMap.set(id, newWindow.id); _winMap.set(id, newWindow.id);
return _winMap return _winMap
} catch (error) { } catch (error) {
@ -594,7 +620,10 @@ if (!gotTheLock) {
let string = data.toString().trim() let string = data.toString().trim()
// console.log(`批处理输出: ${string}`); // console.log(`批处理输出: ${string}`);
// 临时处理:应用启动失败或项目文档地址出现时,认为服务初始化完成;后续需后端配合 // 临时处理:应用启动失败或项目文档地址出现时,认为服务初始化完成;后续需后端配合
if (string.indexOf('APPLICATION FAILED TO START') !== -1 || string.indexOf('项目文档地址') !== -1) { if (string.indexOf('APPLICATION FAILED TO START') !== -1) {
mainWindow.webContents.send('program-init', '后端服务未正常启动,尝试更换地址或端口')
}
else if (string.indexOf('项目文档地址') !== -1) {
if (!isSeverInit) { if (!isSeverInit) {
isSeverInit = true isSeverInit = true
if (isAppInit) { if (isAppInit) {

View File

@ -178,6 +178,7 @@
color: rgba(var(--color-base1), 1) !important; color: rgba(var(--color-base1), 1) !important;
cursor: pointer; cursor: pointer;
} }
.YJ-custom-base-dialog button:not(button[disabled]):hover svg { .YJ-custom-base-dialog button:not(button[disabled]):hover svg {
fill: rgba(var(--color-base1), 1) !important; fill: rgba(var(--color-base1), 1) !important;
} }
@ -341,7 +342,7 @@
.YJ-custom-base-dialog>.content input, .YJ-custom-base-dialog>.content input,
.YJ-custom-base-dialog>.content textarea { .YJ-custom-base-dialog>.content textarea {
font-size: 16px; font-size: 14px;
background-color: rgba(0, 0, 0, 0.5); background-color: rgba(0, 0, 0, 0.5);
border: 1px solid rgba(var(--color-base1), 0.5); border: 1px solid rgba(var(--color-base1), 0.5);
border-radius: 5px; border-radius: 5px;
@ -2534,8 +2535,8 @@
.YJ-custom-base-dialog.polygon>.content .attribute-content-vr .table .tr .td:nth-child(3), .YJ-custom-base-dialog.polygon>.content .attribute-content-vr .table .tr .td:nth-child(3),
.YJ-custom-base-dialog.polygon>.content .attribute-content-rtmp .table .tr .th:nth-child(3), .YJ-custom-base-dialog.polygon>.content .attribute-content-rtmp .table .tr .th:nth-child(3),
.YJ-custom-base-dialog.polygon>.content .attribute-content-rtmp .table .tr .td:nth-child(3) { .YJ-custom-base-dialog.polygon>.content .attribute-content-rtmp .table .tr .td:nth-child(3) {
flex: 0 0 165px; flex: 0 0 175px;
width: 165px; width: 175px;
justify-content: center; justify-content: center;
} }
@ -2618,8 +2619,8 @@
.YJ-custom-base-dialog.assemble>.content .attribute-content-vr .table .tr .td:nth-child(3), .YJ-custom-base-dialog.assemble>.content .attribute-content-vr .table .tr .td:nth-child(3),
.YJ-custom-base-dialog.assemble>.content .attribute-content-rtmp .table .tr .th:nth-child(3), .YJ-custom-base-dialog.assemble>.content .attribute-content-rtmp .table .tr .th:nth-child(3),
.YJ-custom-base-dialog.assemble>.content .attribute-content-rtmp .table .tr .td:nth-child(3) { .YJ-custom-base-dialog.assemble>.content .attribute-content-rtmp .table .tr .td:nth-child(3) {
flex: 0 0 165px; flex: 0 0 175px;
width: 165px; width: 175px;
justify-content: center; justify-content: center;
} }
@ -2678,8 +2679,8 @@
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-vr .table .tr .td:nth-child(3), .YJ-custom-base-dialog.pincerArrow>.content .attribute-content-vr .table .tr .td:nth-child(3),
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-rtmp .table .tr .th:nth-child(3), .YJ-custom-base-dialog.pincerArrow>.content .attribute-content-rtmp .table .tr .th:nth-child(3),
.YJ-custom-base-dialog.pincerArrow>.content .attribute-content-rtmp .table .tr .td:nth-child(3) { .YJ-custom-base-dialog.pincerArrow>.content .attribute-content-rtmp .table .tr .td:nth-child(3) {
flex: 0 0 165px; flex: 0 0 175px;
width: 165px; width: 175px;
justify-content: center; justify-content: center;
} }
@ -2761,7 +2762,7 @@
/* 折线 */ /* 折线 */
.YJ-custom-base-dialog.polyline>.content { .YJ-custom-base-dialog.polyline>.content {
width: 580px; width: 600px;
} }
.YJ-custom-base-dialog.polyline>.content>div #dashTextureDom { .YJ-custom-base-dialog.polyline>.content>div #dashTextureDom {
@ -3796,7 +3797,7 @@
.yj-custom-icon { .yj-custom-icon {
display: inline-block; display: inline-block;
width: 22px; width: 22px;
height: 10px; height: 18px;
margin-right: 5px; margin-right: 5px;
} }

View File

@ -80,16 +80,16 @@ window.newFuzzySearch = function (
hideAllNode(allNodes) hideAllNode(allNodes)
nodeChildren.forEach((item) => { nodeChildren.forEach((item) => {
if (item.oldname) { if (item.oldname) {
item.sourceName = item.oldname item.sourceName = item.oldname + ''
zTreeObj.updateNode(item) zTreeObj.updateNode(item)
} }
if (contrast) { if (contrast) {
if ((item.sourceName || '').indexOf(contrast) > -1) { if (((item.sourceName || '')+'').indexOf(contrast) > -1) {
console.log('sourceName包含关键字') console.log('sourceName包含关键字')
console.log(item) console.log(item)
console.log(item.sourceName) console.log(item.sourceName)
item.oldname = item.sourceName item.oldname = item.sourceName + ''
item.highlight = true item.highlight = true
let F = new RegExp(contrast, 'gi') let F = new RegExp(contrast, 'gi')
item.sourceName = item.oldname.replace(F, function (h) { item.sourceName = item.oldname.replace(F, function (h) {

View File

@ -263,6 +263,8 @@ export default {
rtmp: 'rtmp', rtmp: 'rtmp',
: '物资', : '物资',
: '编辑内容', : '编辑内容',
: '请输入设备名称进行搜索',
: '请输入物资名称进行搜索',
: '打开文本编辑器', : '打开文本编辑器',
: '添加链接', : '添加链接',
: '名称', : '名称',

View File

@ -47,16 +47,16 @@ export default {
excel: 'Excel' excel: 'Excel'
}, },
firstMenu: { firstMenu: {
measure: 'measure', measure: 'Measure',
tool: 'tool', tool: 'Tool',
effect: 'effect', effect: 'Special effects',
bigData: 'bigData', bigData: 'bigData',
modelLibrary: 'modelLibrary', modelLibrary: 'Model',
situation: 'situationLibrary', situation: 'Scheme',
onlinePictureSource: 'onlinePictureSource', onlinePictureSource: 'onlinePictureSource',
analysis: 'analysis', analysis: 'Analyze',
militaryMark: 'militaryMark', militaryMark: 'militaryMark',
ersanwei: 'two and three-dimensional', ersanwei: '2D/3D',
junbiao3d: '3D military logo' junbiao3d: '3D military logo'
}, },
effect: { effect: {
@ -155,7 +155,8 @@ export default {
authorize: 'Authorization Information', authorize: 'Authorization Information',
setting: 'System settings', setting: 'System settings',
project: 'Engineering Information', project: 'Engineering Information',
device: 'device management', device: 'Device management',
materials: 'Materials management',
modelManage: 'Model management', modelManage: 'Model management',
graphLabelManage: 'Military Icon Management', graphLabelManage: 'Military Icon Management',
photoManage: 'Icon Management', photoManage: 'Icon Management',
@ -262,6 +263,8 @@ export default {
rtmp: 'rtmp', rtmp: 'rtmp',
: 'Materials', : 'Materials',
: 'Edit content', : 'Edit content',
: 'Please enter the device name to search',
: 'Please enter the materials name to search',
: 'Open the editor', : 'Open the editor',
: 'Add Link', : 'Add Link',
: 'Name', : 'Name',

View File

@ -155,6 +155,7 @@ export default {
setting: '系統設置', setting: '系統設置',
project: '工程管理', project: '工程管理',
device: '設備管理', device: '設備管理',
materials: '物資管理',
modelManage: '模型管理', modelManage: '模型管理',
graphLabelManage: '軍標管理', graphLabelManage: '軍標管理',
photoManage: '圖標管理', photoManage: '圖標管理',
@ -261,6 +262,8 @@ export default {
rtmp: 'rtmp', rtmp: 'rtmp',
: '物資', : '物資',
: '編輯內容', : '編輯內容',
: '請輸入設備名稱進行搜索',
: '請輸入物資名稱進行搜索',
: '打開文本編輯器', : '打開文本編輯器',
: '添加鏈接', : '添加鏈接',
: '名稱', : '名稱',

View File

@ -27,6 +27,7 @@ export const TreeApi = {
url: `/source/addOtherSource`, url: `/source/addOtherSource`,
data data
}).then((res) => { }).then((res) => {
ElMessage.closeAll()
ElMessage({ ElMessage({
message: '添加成功', message: '添加成功',
type: 'success' type: 'success'
@ -50,6 +51,7 @@ export const TreeApi = {
url: `/source/update`, url: `/source/update`,
data data
}).then((res) => { }).then((res) => {
ElMessage.closeAll()
ElMessage({ ElMessage({
message: '操作成功', message: '操作成功',
type: 'success' type: 'success'

View File

@ -44,12 +44,12 @@ service.interceptors.request.use(
const key = getRequestKey(config) const key = getRequestKey(config)
// 检查是否有相同请求正在进行 // 检查是否有相同请求正在进行
if (pendingRequests.has(key)) { // if (pendingRequests.has(key)) {
ElMessage({ // ElMessage({
message: '当前请求已存在,请稍后再试', // message: '当前请求已存在,请稍后再试',
type: 'warning' // type: 'warning'
}) // })
} // }
const controller = new AbortController() const controller = new AbortController()
config.signal = controller.signal config.signal = controller.signal

View File

@ -2,12 +2,12 @@ import {TreeApi} from '@/api/tree'
import { useTreeNode } from '../views/components/tree/hooks/treeNode' import { useTreeNode } from '../views/components/tree/hooks/treeNode'
import { initMapData } from './initMapData' import { initMapData } from './initMapData'
export const addMapSource = async ({type, id, sourceName = '未命名对象', opt = {}}) => { export const addMapSource = async ({ type, id, sourceName = '未命名对象', opt = {} }, cd:any = null) => {
const { cusAddNodes } = useTreeNode() const { cusAddNodes } = useTreeNode()
if (!id) { if (!id) {
id = new YJ.Tools().randomString() id = new YJ.Tools().randomString()
} }
let options: any = await initMapData(type, opt, null) let options: any = await initMapData(type, opt, cd)
let selectedNodes = window.treeObj.getSelectedNodes() let selectedNodes = window.treeObj.getSelectedNodes()
let node = selectedNodes && selectedNodes[selectedNodes.length - 1] let node = selectedNodes && selectedNodes[selectedNodes.length - 1]
function getParentId(nd: any) { function getParentId(nd: any) {

View File

@ -20,6 +20,7 @@ export const initMapData = async (type, data, cd) => {
case 'vrImage': case 'vrImage':
console.log(data, 'dataccccc') console.log(data, 'dataccccc')
entityObject = new YJ.Obj.BillboardObject(window.earth, data) entityObject = new YJ.Obj.BillboardObject(window.earth, data)
cd && cd(entityObject)
console.log('entityObject', entityObject) console.log('entityObject', entityObject)
// entityObject.options.billboard.defaultImage = '' // entityObject.options.billboard.defaultImage = ''
break break
@ -62,11 +63,12 @@ export const initMapData = async (type, data, cd) => {
case 'terrain': case 'terrain':
data.host = baseURL data.host = baseURL
entityObject = new YJ.Obj.Terrain(window.earth, data) entityObject = new YJ.Obj.Terrain(window.earth, data)
cd && cd(entityObject)
break break
case 'layer': case 'layer':
data.host = baseURL data.host = baseURL
console.log('layer', data)
entityObject = new YJ.Obj.Layer(window.earth, data) entityObject = new YJ.Obj.Layer(window.earth, data)
cd && cd(entityObject)
break break
case 'gdslImagery': case 'gdslImagery':
data.host = baseURL data.host = baseURL
@ -177,11 +179,14 @@ export const initMapData = async (type, data, cd) => {
break break
case 'geojson': case 'geojson':
entityObject = new YJ.Obj.GeoJson(window.earth, data) entityObject = new YJ.Obj.GeoJson(window.earth, data)
entityObject.on() entityObject.on().then(()=>{
cd && cd(entityObject)
})
break break
case 'vector': case 'vector':
let node = window.treeObj.getNodeByParam("id", data.id, null); let node = window.treeObj.getNodeByParam("id", data.id, null);
entityObject = renderVector(node, false) entityObject = renderVector(node, false)
cd && cd(entityObject)
break break
default: default:
break break

View File

@ -201,8 +201,8 @@ const moveDiv = () => {
newLeft = windowWidth - oMoveDivWidth newLeft = windowWidth - oMoveDivWidth
} }
if (newTop <= 0) { if (newTop <= 97) {
newTop = 0 newTop = 97
} else if (newTop + oMoveDivHeight > windowHeight) { } else if (newTop + oMoveDivHeight > windowHeight) {
newTop = windowHeight - oMoveDivHeight newTop = windowHeight - oMoveDivHeight
} }

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -2,7 +2,8 @@
<div class="bottomMenuBox zIndex9" ref="bottomMenuBox"> <div class="bottomMenuBox zIndex9" ref="bottomMenuBox">
<div class="animate__animated bottomMenu"> <div class="animate__animated bottomMenu">
<div class="bottom_box" v-for="(item, i) of bottomMenuList" :key="i"> <div class="bottom_box" v-for="(item, i) of bottomMenuList" :key="i">
<div class="bottom_box_content" @click="addMarker(item, $event)" :title="t('bottomMenu.' + item.sourceType)"> <div class="bottom_box_content" @click="addMarker(item, $event)">
<el-tooltip :content="t('bottomMenu.' + item.sourceType)" effect="customized" placement="top" :hide-after="0">
<svg class="bottom_box_bg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" <svg class="bottom_box_bg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="117.030029296875" height="44" viewBox="0 0 117.030029296875 44" fill="none" width="117.030029296875" height="44" viewBox="0 0 117.030029296875 44" fill="none"
preserveAspectRatio="none"> preserveAspectRatio="none">
@ -18,6 +19,8 @@
</linearGradient> </linearGradient>
</defs> </defs>
</svg> </svg>
</el-tooltip>
<svg class="bottom_box_bg bottom_box_bg_hover" style="opacity: 0;" xmlns="http://www.w3.org/2000/svg" <svg class="bottom_box_bg bottom_box_bg_hover" style="opacity: 0;" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="118.09130859375" height="45" xmlns:xlink="http://www.w3.org/1999/xlink" width="118.09130859375" height="45"
viewBox="0 0 118.09130859375 45" fill="none" preserveAspectRatio="none"> viewBox="0 0 118.09130859375 45" fill="none" preserveAspectRatio="none">
@ -39,16 +42,16 @@
</div> </div>
</div> </div>
<div class="bottom_children" v-if="item.children" v-show="item.childrenShow"> <div class="bottom_children" v-if="item.children" v-show="item.childrenShow">
<div class="bottom_childre_box" v-for="(item2, m) of item.children" :key="m" <div class="bottom_childre_box" v-for="(item2, m) of item.children" :key="m" @click="addMarker(item2, $event)">
@click="addMarker(item2, $event)" :title="t('bottomMenu.' + item2.sourceType)"> <el-tooltip :content="t('bottomMenu.' + item2.sourceType)" effect="customized" placement="top" :hide-after="0">
<svg class="bottom_childre_box_bg" xmlns="http://www.w3.org/2000/svg" <svg class="bottom_childre_box_bg" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="6vw" height="44.5" viewBox="0 0 119 35.5" fill="none" xmlns:xlink="http://www.w3.org/1999/xlink" width="6vw" height="44.5" viewBox="0 0 119 35.5" fill="none"
preserveAspectRatio="none"> preserveAspectRatio="none">
<path d="M11 0.5L108 0.5L118 35.5L1 35.5L11 0.5Z" stroke="url(#linear_border_2485_3)" stroke-width="1" <path d="M11 0.5L108 0.5L118 35.5L1 35.5L11 0.5Z" stroke="url(#linear_border_2485_3)" stroke-width="1"
fill="#000000" fill-opacity="0.5" /> fill="#000000" fill-opacity="0.5" />
<path d="M118 34.5L1 34.5L0 36.5L119 36.5L118 34.5Z" fill-rule="evenodd" <path d="M118 34.5L1 34.5L0 36.5L119 36.5L118 34.5Z" fill-rule="evenodd" fill="url(#linear_fill_2485_4)" />
fill="url(#linear_fill_2485_4)" />
</svg> </svg>
</el-tooltip>
<svg class="bottom_childre_box_bg bottom_childre_box_bg_hover" style="opacity: 0;" <svg class="bottom_childre_box_bg bottom_childre_box_bg_hover" style="opacity: 0;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="118.32568359375" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="118.32568359375"
height="36" viewBox="0 0 118.32568359375 36" fill="none" preserveAspectRatio="none"> height="36" viewBox="0 0 118.32568359375 36" fill="none" preserveAspectRatio="none">
@ -659,6 +662,14 @@ document.addEventListener('click', (e: any) => {
height: 44px; height: 44px;
bottom: 1em; bottom: 1em;
left: 13vw; left: 13vw;
:deep(.el-tooltip__trigger) {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
pointer-events: all;
}
} }
.bottomMenu { .bottomMenu {

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="set_pup"> <div class="set_pup" :class="{'dialog-en': isEN}">
<el-dialog <el-dialog
v-model="isShowPup" v-model="isShowPup"
:modal="true" :modal="true"
@ -135,10 +135,11 @@ import photoManage from './components/photoManage.vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
const eventBus: any = inject('bus') const eventBus: any = inject('bus')
const { t } = useI18n() const { t, locale } = useI18n()
const tabPosition = ref('left') const tabPosition = ref('left')
const activeName = ref('authorize') const activeName = ref('authorize')
const isShowPup = ref(false) const isShowPup = ref(false)
const isEN = ref(false)
const open = (data) => { const open = (data) => {
isShowPup.value = true isShowPup.value = true
if (data !== 'current') { if (data !== 'current') {
@ -163,6 +164,25 @@ const close = () => {
isShowPup.value = false isShowPup.value = false
} }
onMounted(() => {
// 可以在这里添加初始化逻辑
if(locale.value === 'zh-EN') {
isEN.value = true
}
else {
isEN.value = false
}
})
watch(locale, ()=>{
if(locale.value === 'zh-EN') {
isEN.value = true
}
else {
isEN.value = false
}
})
defineExpose({ defineExpose({
open, open,
close close
@ -182,6 +202,7 @@ defineExpose({
), ),
rgba(0, 0, 0, 0.6); rgba(0, 0, 0, 0.6);
border: 1px solid var(--color-border1); border: 1px solid var(--color-border1);
padding-left: 0px;
// padding-left: 0 !important; // padding-left: 0 !important;
} }
@ -308,14 +329,18 @@ defineExpose({
:deep(.el-tabs__item) { :deep(.el-tabs__item) {
width: 8vw; width: 8vw;
color: #fff !important; color: #fff !important;
font-size: 1.1rem; font-size: 0.9rem;
font-family: 黑体; font-family: SourceHanSansTi;
font-weight: 500; font-weight: 500;
display: flex; line-height: 38px;
display: block;
align-items: center; align-items: center;
justify-content: center; text-align: center;
margin-bottom: 3px; margin-bottom: 3px;
box-sizing: border-box; box-sizing: border-box;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
} }
:deep(.el-tabs__item:hover) { :deep(.el-tabs__item:hover) {
@ -366,4 +391,10 @@ defineExpose({
} }
} }
} }
.set_pup.dialog-en {
:deep(.el-tabs__item) {
text-align: left;
}
}
</style> </style>

View File

@ -2,9 +2,10 @@
<div class="leftBox" ref="leftBoxRef"> <div class="leftBox" ref="leftBoxRef">
<div class="left animate__animated"> <div class="left animate__animated">
<div class="menus"> <div class="menus">
<div class="menus_itemBox" v-for="(item, index) in menuList" :title="t(`firstMenu.${item.name}`)"> <div class="menus_itemBox" v-for="(item, index) in menuList">
<el-tooltip :content="t(`firstMenu.${item.name}`)" effect="customized" placement="top" :hide-after="0">
<div class="item_icon" @click="(e) => { <div class="item_icon" @click="(e) => {
handleClick(item, e) handleClick(item, index, e)
} }
"> ">
<!-- <svg class="item_icon_bg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" <!-- <svg class="item_icon_bg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
@ -56,6 +57,8 @@
{{ t(`firstMenu.${item.name}`) }} {{ t(`firstMenu.${item.name}`) }}
</div> </div>
</div> </div>
</el-tooltip>
</div> </div>
<leftSideSecond class="absolute zIndex99 leftSideSecond" ref="leftSideSecondRef"></leftSideSecond> <leftSideSecond class="absolute zIndex99 leftSideSecond" ref="leftSideSecondRef"></leftSideSecond>
</div> </div>
@ -264,10 +267,12 @@ onMounted(() => {
document.addEventListener('click', handleClickOutside, true); document.addEventListener('click', handleClickOutside, true);
}) })
const leftSideSecondRef = ref() const leftSideSecondRef = ref()
const handleClick = (item: any, e) => { const handleClick = (item: any, index, e) => {
console.log('点击了', item, e) console.log('点击了', item, e, index)
$('.leftSideSecond')[0].style.left = '100%' $('.leftSideSecond')[0].style.left = '100%'
$('.leftSideSecond')[0].style.top = e.layerY - 120 + 'px' // $('.leftSideSecond')[0].style.top = e.layerY + 120 + 'px'
$('.leftSideSecond')[0].style.top = `calc(${index} * 6.32vh)`
$('.leftSideSecond')[0].style.transform = 'translateY(calc(2.6vh - 50%))';
$('.leftSideSecond')[0].style.display = 'none' $('.leftSideSecond')[0].style.display = 'none'
if (item.children.length) { if (item.children.length) {
$('.leftSideSecond')[0].style.display = 'block' $('.leftSideSecond')[0].style.display = 'block'

View File

@ -31,6 +31,7 @@
<attribute :entityOptions="entityOptions"></attribute> <attribute :entityOptions="entityOptions"></attribute>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="空间信息" name="2"> <el-tab-pane label="空间信息" name="2">
<div class="div-item">
<div class="row"> <div class="row">
<div class="col height-mode-box"> <div class="col height-mode-box">
<span class="label" style="flex: 0 0 56px;">高度模式</span> <span class="label" style="flex: 0 0 56px;">高度模式</span>
@ -43,7 +44,8 @@
<div class="col"> <div class="col">
<span class="label">Z值统一增加</span> <span class="label">Z值统一增加</span>
<div class="input-number input-number-unit-1 height-box" :class="{ 'disabled': heightMode == 2 }"> <div class="input-number input-number-unit-1 height-box" :class="{ 'disabled': heightMode == 2 }">
<input class="input height" type="number" title="" min="-9999999" max="999999999" v-model="height" @input="$handleInputLimit"> <input class="input height" type="number" title="" min="-9999999" max="999999999" v-model="height"
@input="$handleInputLimit">
<span class="unit">m</span> <span class="unit">m</span>
<span class="arrow"></span> <span class="arrow"></span>
</div> </div>
@ -66,12 +68,14 @@
<div class="td">圆心坐标</div> <div class="td">圆心坐标</div>
<div class="td lng align-center" @dblclick="inputDblclick($event, 1, 'lng')"> <div class="td lng align-center" @dblclick="inputDblclick($event, 1, 'lng')">
<input class="input" @blur="inputBlurCallBack($event, 1, 'lng', 8)" type="number" <input class="input" @blur="inputBlurCallBack($event, 1, 'lng', 8)" type="number"
v-model="entityOptions.center.lng" min="-180" max="180" v-if="activeTd.index == 1 && activeTd.name == 'lng'" @input="$handleInputLimit"> v-model="entityOptions.center.lng" min="-180" max="180"
v-if="activeTd.index == 1 && activeTd.name == 'lng'" @input="$handleInputLimit">
<span style="pointer-events: none;" v-else>{{ entityOptions.center.lng.toFixed(8) }}</span> <span style="pointer-events: none;" v-else>{{ entityOptions.center.lng.toFixed(8) }}</span>
</div> </div>
<div class="td lat align-center" @dblclick="inputDblclick($event, 1, 'lat')"> <div class="td lat align-center" @dblclick="inputDblclick($event, 1, 'lat')">
<input class="input" @blur="inputBlurCallBack($event, 1, 'lat', 8)" type="number" <input class="input" @blur="inputBlurCallBack($event, 1, 'lat', 8)" type="number"
v-model="entityOptions.center.lat" min="-180" max="180" v-if="activeTd.index == 1 && activeTd.name == 'lat'" @input="$handleInputLimit"> v-model="entityOptions.center.lat" min="-180" max="180"
v-if="activeTd.index == 1 && activeTd.name == 'lat'" @input="$handleInputLimit">
<span style="pointer-events: none;" v-else>{{ entityOptions.center.lat.toFixed(8) }}</span> <span style="pointer-events: none;" v-else>{{ entityOptions.center.lat.toFixed(8) }}</span>
</div> </div>
<div class="td alt align-center" @dblclick="inputDblclick($event, 1, 'alt')"> <div class="td alt align-center" @dblclick="inputDblclick($event, 1, 'alt')">
@ -84,6 +88,7 @@
</div> </div>
</div> </div>
</div> </div>
</div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="面风格" name="3"> <el-tab-pane label="面风格" name="3">
<div class="row"> <div class="row">
@ -98,7 +103,8 @@
<div class="col"> <div class="col">
<span class="label">描边宽度</span> <span class="label">描边宽度</span>
<div class="input-number input-number-unit-2"> <div class="input-number input-number-unit-2">
<input class="input" type="number" title="" min="0" max="99" v-model="entityOptions.lineWidth" @input="$handleInputLimit"> <input class="input" type="number" title="" min="0" max="99" v-model="entityOptions.lineWidth"
@input="$handleInputLimit">
<span class="unit">px</span> <span class="unit">px</span>
<span class="arrow"></span> <span class="arrow"></span>
</div> </div>
@ -124,7 +130,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -378,4 +384,15 @@ defineExpose({
}) })
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss">
.circle.dialog-en {
::v-deep>.content {
.attribute-content-link .table .tr .td.operation button,
.attribute-content-vr .table .tr .td.operation button,
.attribute-content-rtmp .table .tr .td.operation button {
width: 76px !important;
flex: 0 0 76px !important;
}
}
}</style>

View File

@ -15,7 +15,7 @@
<button @click="draw"> <button @click="draw">
<svg class="icon-edit"><use xlink:href="#yj-icon-edit"></use></svg>重新绘制 <svg class="icon-edit"><use xlink:href="#yj-icon-edit"></use></svg>重新绘制
</button> </button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -251,7 +251,7 @@
<span class="custom-divider" style="order: 10; margin-top: 12px"></span> <span class="custom-divider" style="order: 10; margin-top: 12px"></span>
</template> </template>
<template #footer> <template #footer>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -103,7 +103,7 @@
<span class="custom-divider"></span> <span class="custom-divider"></span>
</template> </template>
<template #footer> <template #footer>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -43,7 +43,7 @@
</div> </div>
</template> </template>
<!-- <template #footer> <!-- <template #footer>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> --> </template> -->
</Dialog> </Dialog>
</template> </template>

View File

@ -90,7 +90,7 @@
</button> </button>
</div> </div>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -147,7 +147,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -401,4 +401,15 @@ defineExpose({
}) })
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss">
.attackArrow.dialog-en {
::v-deep>.content {
.attribute-content-link .table .tr .td.operation button,
.attribute-content-vr .table .tr .td.operation button,
.attribute-content-rtmp .table .tr .td.operation button {
width: 76px !important;
flex: 0 0 76px !important;
}
}
}
</style>

View File

@ -47,15 +47,15 @@
</div> </div>
<div class="td" v-else>{{ item.url }}</div> <div class="td" v-else>{{ item.url }}</div>
<div class="td operation" v-if="linkEditActive.index === index"> <div class="td operation" v-if="linkEditActive.index === index">
<button style="width: 76px;flex: 0 0 76px" @click="linkConfirmEdit(index)">{{ <button @click="linkConfirmEdit(index)">{{
t('general.确认') t('general.确认')
}} }}
</button> </button>
<button style="width: 76px;flex: 0 0 76px" @click="linkCancelEdit">{{ t('general.取消') }}</button> <button @click="linkCancelEdit">{{ t('general.取消') }}</button>
</div> </div>
<div class="td operation" v-else> <div class="td operation" v-else>
<button style="width: 76px;flex: 0 0 76px" @click="linkEdit(index, item)">{{ t('general.编辑') }}</button> <button @click="linkEdit(index, item)">{{ t('general.编辑') }}</button>
<button style="width: 76px;flex: 0 0 76px" @click="linkDelete(index)">{{ t('general.删除') }}</button> <button @click="linkDelete(index)">{{ t('general.删除') }}</button>
</div> </div>
</div> </div>
</div> </div>
@ -69,7 +69,7 @@
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<span class="label">{{ t('general.编辑内容') }}</span> <span class="label">{{ t('general.编辑内容') }}</span>
<input class="input" type="text" v-model="cameraParams.keyWord" style="width: 180px;margin-right: 10px;"/> <input class="input" type="text" :placeholder="t('general.请输入设备名称进行搜索')" v-model="cameraParams.keyWord" style="width: 180px;margin-right: 10px;"/>
<button class="select btn" @click="cameraSelect({page: 1, limit: cameraParams.pageSize })"> <button class="select btn" @click="cameraSelect({page: 1, limit: cameraParams.pageSize })">
{{ t('general.搜索') }} {{ t('general.搜索') }}
</button> </button>
@ -244,7 +244,7 @@
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<span class="label">{{ t('general.编辑内容') }}</span> <span class="label">{{ t('general.编辑内容') }}</span>
<input class="input goods-select-input" type="text" placeholder="请输入关键字" style="width: 180px;margin-right: 10px;" <input class="input goods-select-input" type="text" :placeholder="t('general.请输入物资名称进行搜索')" style="width: 180px;margin-right: 10px;"
v-model="goodsKeywords"> v-model="goodsKeywords">
<button class="select btn" @click="goodsFilter">{{ t('general.搜索') }}</button> <button class="select btn" @click="goodsFilter">{{ t('general.搜索') }}</button>
</div> </div>
@ -388,8 +388,8 @@ const cameraSelect = ({page, limit}) => {
if (res.code === 0 || res.code === 200) { if (res.code === 0 || res.code === 200) {
if (res.data) { if (res.data) {
cameraParams.value.total = res.data.total cameraParams.value.total = res.data.total
if (res.data.records && res.data.records.length > 0) {
cameraList.value = res.data.records cameraList.value = res.data.records
if (res.data.records && res.data.records.length > 0) {
for (let i = 0; i < cameraList.value.length; i++) { for (let i = 0; i < cameraList.value.length; i++) {
cameraList.value[i].checked = false cameraList.value[i].checked = false
for (let j = 0; j < props.entityOptions.attributeCamera.length; j++) { for (let j = 0; j < props.entityOptions.attributeCamera.length; j++) {
@ -724,8 +724,8 @@ const changeAttributeCamera = (e) => {
.YJ-custom-base-dialog > .content .attribute-content-vr .table .tr .td:nth-child(1), .YJ-custom-base-dialog > .content .attribute-content-vr .table .tr .td:nth-child(1),
.YJ-custom-base-dialog > .content .attribute-content-rtmp .table .tr .th:nth-child(1), .YJ-custom-base-dialog > .content .attribute-content-rtmp .table .tr .th:nth-child(1),
.YJ-custom-base-dialog > .content .attribute-content-rtmp .table .tr .td:nth-child(1) { .YJ-custom-base-dialog > .content .attribute-content-rtmp .table .tr .td:nth-child(1) {
width: 164px; width: 150px;
flex: 0 0 164px; flex: 0 0 150px;
} }
.YJ-custom-base-dialog > .content .attribute-content-link .table .tr .th:nth-child(2), .YJ-custom-base-dialog > .content .attribute-content-link .table .tr .th:nth-child(2),
@ -744,21 +744,21 @@ const changeAttributeCamera = (e) => {
.YJ-custom-base-dialog > .content .attribute-content-vr .table .tr .td:nth-child(3), .YJ-custom-base-dialog > .content .attribute-content-vr .table .tr .td:nth-child(3),
.YJ-custom-base-dialog > .content .attribute-content-rtmp .table .tr .th:nth-child(3), .YJ-custom-base-dialog > .content .attribute-content-rtmp .table .tr .th:nth-child(3),
.YJ-custom-base-dialog > .content .attribute-content-rtmp .table .tr .td:nth-child(3) { .YJ-custom-base-dialog > .content .attribute-content-rtmp .table .tr .td:nth-child(3) {
flex: 0 0 150px; flex: 0 0 175px;
width: 150px; width: 175px;
justify-content: center; justify-content: center;
} }
.YJ-custom-base-dialog.dialog-en > .content .attribute-content-link .table .tr .th:nth-child(3), // .YJ-custom-base-dialog.dialog-en > .content .attribute-content-link .table .tr .th:nth-child(3),
.YJ-custom-base-dialog.dialog-en > .content .attribute-content-link .table .tr .td:nth-child(3), // .YJ-custom-base-dialog.dialog-en > .content .attribute-content-link .table .tr .td:nth-child(3),
.YJ-custom-base-dialog.dialog-en > .content .attribute-content-vr .table .tr .th:nth-child(3), // .YJ-custom-base-dialog.dialog-en > .content .attribute-content-vr .table .tr .th:nth-child(3),
.YJ-custom-base-dialog.dialog-en > .content .attribute-content-vr .table .tr .td:nth-child(3), // .YJ-custom-base-dialog.dialog-en > .content .attribute-content-vr .table .tr .td:nth-child(3),
.YJ-custom-base-dialog.dialog-en > .content .attribute-content-rtmp .table .tr .th:nth-child(3), // .YJ-custom-base-dialog.dialog-en > .content .attribute-content-rtmp .table .tr .th:nth-child(3),
.YJ-custom-base-dialog.dialog-en > .content .attribute-content-rtmp .table .tr .td:nth-child(3) { // .YJ-custom-base-dialog.dialog-en > .content .attribute-content-rtmp .table .tr .td:nth-child(3) {
flex: 0 0 190px; // flex: 0 0 190px;
width: 190px; // width: 190px;
justify-content: center; // justify-content: center;
} // }
.YJ-custom-base-dialog > .content .attribute-content-link .table .tr .td .input-group .input, .YJ-custom-base-dialog > .content .attribute-content-link .table .tr .td .input-group .input,
.YJ-custom-base-dialog > .content .attribute-content-vr .table .tr .td .input-group .input, .YJ-custom-base-dialog > .content .attribute-content-vr .table .tr .td .input-group .input,

View File

@ -26,11 +26,61 @@
<div class="row coordinate-select-box"> <div class="row coordinate-select-box">
<div class="lable-left-line"> <div class="lable-left-line">
{{ t('dialog.point.转换坐标选择') }} {{ t('dialog.point.转换坐标选择') }}
<el-select class="input input-select coordinate-select" style="width: 155px; margin-left: 20px" <el-select style="width: 155px; margin-left: 20px;" v-model="coordinate" @change="coordinateChange">
<div class="group-header" :class="name_map1.filter((item) => {
return item.epsg == coordinate
}).length > 0
? 'arrowActive'
: ''
" @click="toggleGroup('hot')">
地理坐标系
<svg-icon v-if="isHotGroupOpen" name="arrow2" :size="10" :color="name_map1.filter((item) => {
return item.epsg == coordinate
}).length > 0
? 'rgba(0, 255, 255, 1)'
: 'rgba(255, 255, 255, 1)'
" style="margin-left: 10px"></svg-icon>
<svg-icon v-else name="arrow1" :size="10" :color="name_map1.filter((item) => {
return item.epsg == coordinate
}).length > 0
? 'rgba(0, 255, 255, 1)'
: 'rgba(255, 255, 255, 1)'
" style="margin-left: 10px"></svg-icon>
</div>
<div v-show="isHotGroupOpen">
<el-option v-for="item in name_map1" :key="item.epsg" :label="item.name"
:value="item.epsg"></el-option>
</div>
<div class="group-header" :class="name_map2.filter((item) => {
return item.epsg == coordinate
}).length > 0
? 'arrowActive'
: ''
" @click="toggleGroup('ty')">
投影坐标系
<svg-icon v-if="isHotGroupOpen2" name="arrow2" :size="10" :color="name_map2.filter((item) => {
return item.epsg == coordinate
}).length > 0
? 'rgba(0, 255, 255, 1)'
: 'rgba(255, 255, 255, 1)'
" style="margin-left: 10px"></svg-icon>
<svg-icon v-else name="arrow1" :size="10" :color="name_map2.filter((item) => {
return item.epsg == coordinate
}).length > 0
? 'rgba(0, 255, 255, 1)'
: 'rgba(255, 255, 255, 1)'
" style="margin-left: 10px"></svg-icon>
</div>
<div v-show="isHotGroupOpen2">
<el-option v-for="item in name_map2" :key="item.epsg" :label="item.name"
:value="item.epsg"></el-option>
</div>
</el-select>
<!-- <el-select class="input input-select coordinate-select" style="width: 155px; margin-left: 20px"
v-model="coordinate" @change="coordinateChange" placeholder="请选择"> v-model="coordinate" @change="coordinateChange" placeholder="请选择">
<el-option v-for="item in epsg_map" :key="item.epsg" :label="item.name" :value="item.epsg"> <el-option v-for="item in epsg_map" :key="item.epsg" :label="item.name" :value="item.epsg">
</el-option> </el-option>
</el-select> </el-select> -->
</div> </div>
</div> </div>
</div> </div>
@ -352,7 +402,7 @@
</div> </div>
<button @click="remove">{{ t('general.删除') }}</button> <button @click="remove">{{ t('general.删除') }}</button>
<button @click="confirm">{{ t('general.确定') }}</button> <button @click="confirm">{{ t('general.确定') }}</button>
<button @click="close">{{ t('general.关闭') }}</button> <button @click="close">{{ t('general.取消') }}</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -375,6 +425,31 @@ const { cusUpdateNode, getSelectedNodes, cusRemoveNode } = useTreeNode()
const baseDialog: any = ref(null) const baseDialog: any = ref(null)
const eventBus: any = inject('bus') const eventBus: any = inject('bus')
const name_map: any = ref([])
const name_map1: any = ref([])
const name_map2: any = ref([
{
epsg: 'EPSG:32601',
name: 'WGS84 通用横轴墨卡托投影'
},
{
epsg: 'EPSG:4534',
name: '2000 坐标 3 度不带代号'
},
{
epsg: 'EPSG:4513',
name: '2000 坐标 3 度带代号'
},
{
epsg: 'EPSG:4502',
name: '2000 坐标 6 度不带代号'
},
{
epsg: 'EPSG:4491',
name: '2000 坐标 6 度带代号'
}
])
const epsg_map = ref([ const epsg_map = ref([
{ {
name: 'WGS 84 / UTM zone 3N', name: 'WGS 84 / UTM zone 3N',
@ -390,6 +465,10 @@ for (const [key, value] of window.earth.proj.epsg_map) {
} }
epsg_map.value = array epsg_map.value = array
let tool = new YJ.Tools(window.earth)
name_map.value = Array.from(tool.name_map.values())
name_map1.value = name_map.value.splice(0, 2)
const format1 = ref(true) const format1 = ref(true)
const format2 = ref(false) const format2 = ref(false)
const format3 = ref(false) const format3 = ref(false)
@ -434,6 +513,9 @@ const x = ref()
const y = ref() const y = ref()
const z = ref() const z = ref()
const coordinate = ref('EPSG:4326') const coordinate = ref('EPSG:4326')
const isHotGroupOpen: any = ref(true)
const isHotGroupOpen2: any = ref(false)
const showPosiType: any = ref(false)
const heightMode = ref(0) const heightMode = ref(0)
const labelColorRef = ref(null) const labelColorRef = ref(null)
const sourceType = ref('') const sourceType = ref('')
@ -454,6 +536,13 @@ const open = async (id, type) => {
baseDialog.value?.open() baseDialog.value?.open()
await nextTick() await nextTick()
let data = name_map1.value.filter((item) => item.epsg === coordinate.value)
showPosiType.value = data.length
if (data.length) {
isHotGroupOpen.value = true
} else {
isHotGroupOpen2.value = true
}
let labelColorPicker = new window.YJColorPicker({ let labelColorPicker = new window.YJColorPicker({
el: labelColorRef.value, el: labelColorRef.value,
size: 'mini', //颜色box类型 size: 'mini', //颜色box类型
@ -519,6 +608,11 @@ const closeCallback = () => {
eventBus?.emit('destroyComponent') eventBus?.emit('destroyComponent')
} }
const toggleGroup = (type: string) => {
if (type === 'hot') isHotGroupOpen.value = !isHotGroupOpen.value
if (type === 'ty') isHotGroupOpen2.value = !isHotGroupOpen2.value
}
const changeName = (e) => { const changeName = (e) => {
entityOptions.value.labelText = e.target.value entityOptions.value.labelText = e.target.value
} }
@ -771,7 +865,7 @@ defineExpose({
} }
::v-deep>.content { ::v-deep>.content {
width: 590px; width: 600px;
.title1 { .title1 {
width: 46%; width: 46%;
@ -802,7 +896,7 @@ defineExpose({
.billboard-object.dialog-en { .billboard-object.dialog-en {
::v-deep>.content { ::v-deep>.content {
width: 690px; width: 660px;
.title1 { .title1 {
width: 40%; width: 40%;

View File

@ -103,7 +103,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -64,8 +64,8 @@
<div class="col" style="flex: 0 0 33%"> <div class="col" style="flex: 0 0 33%">
<span class="label">缓冲宽度</span> <span class="label">缓冲宽度</span>
<div class="input-number input-number-unit-1" style="width: 80px"> <div class="input-number input-number-unit-1" style="width: 80px">
<input class="input" type="number" title="" min="0" data-min="0.01" max="999999" <input class="input" type="number" title="" min="0" data-min="0.01" max="999999" @input="$handleInputLimit"
@input="$handleInputLimit" v-model="entityOptions.extendWidth" /> v-model="entityOptions.extendWidth" />
<span class="unit">m</span> <span class="unit">m</span>
<span class="arrow"></span> <span class="arrow"></span>
</div> </div>
@ -190,7 +190,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -554,4 +554,14 @@ defineExpose({
} }
} }
} }
.polyline.dialog-en {
::v-deep>.content {
.attribute-content-link .table .tr .td.operation button,
.attribute-content-vr .table .tr .td.operation button,
.attribute-content-rtmp .table .tr .td.operation button {
width: 76px !important;
flex: 0 0 76px !important;
}
}
}
</style> </style>

View File

@ -56,7 +56,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -36,7 +36,7 @@
</template> </template>
<template #footer> <template #footer>
<button @click="sure">确认</button> <button @click="sure">确认</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -76,7 +76,7 @@
<template #footer> <template #footer>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -194,7 +194,7 @@
<button @click="returnY"><svg-icon name="yaxis" :size="12"></svg-icon>Y轴翻转</button> <button @click="returnY"><svg-icon name="yaxis" :size="12"></svg-icon>Y轴翻转</button>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -74,7 +74,7 @@
</template> </template>
<template #footer> <template #footer>
<button @click="save">保存</button> <button @click="save">保存</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -1,6 +1,5 @@
<template> <template>
<Dialog ref="baseDialog" title="贴地文字属性" left="180px" top="100px" className="ground-text" <Dialog ref="baseDialog" title="贴地文字属性" left="180px" top="100px" className="ground-text" :closeCallback="closeCallback">
:closeCallback="closeCallback">
<template #content> <template #content>
<span class="custom-divider"></span> <span class="custom-divider"></span>
<div class="div-item"> <div class="div-item">
@ -11,8 +10,7 @@
</div> </div>
<div class="col"> <div class="col">
<span class="label">颜色</span> <span class="label">颜色</span>
<div class="color" ref="colorRef" </div> <div class="color" ref="colorRef"></div>
</div>
</div> </div>
</div> </div>
<span class="custom-divider"></span> <span class="custom-divider"></span>
@ -25,7 +23,8 @@
</div> </div>
<div class="col"> <div class="col">
<span class="label">纬度</span> <span class="label">纬度</span>
<input class="input" type="number" title="" min="-90" max="90" v-model="entityOptions.lat" @input="$handleInputLimit"> <input class="input" type="number" title="" min="-90" max="90" v-model="entityOptions.lat"
@input="$handleInputLimit">
</div> </div>
</div> </div>
</div> </div>
@ -37,8 +36,8 @@
<input type="range" max="360" min="0" step="1" v-model="entityOptions.angle"> <input type="range" max="360" min="0" step="1" v-model="entityOptions.angle">
<div class="input-number input-number-unit" <div class="input-number input-number-unit"
style="width: 100px;flex: 0 0 100px;margin-left: 10px;"> style="width: 100px;flex: 0 0 100px;margin-left: 10px;">
<input class="input" type="number" title="" min="0" max="360" step="1" @input="$handleInputLimit" <input class="input" type="number" title="" min="0" max="360" step="1"
v-model="entityOptions.angle"> @input="$handleInputLimit" v-model="entityOptions.angle">
<span class="unit">°</span> <span class="unit">°</span>
<span class="arrow"></span> <span class="arrow"></span>
</div> </div>
@ -60,14 +59,15 @@
<span class="label">滚动速度</span> <span class="label">滚动速度</span>
<input type="range" max="100" min="0" step="1" v-model="entityOptions.speed"> <input type="range" max="100" min="0" step="1" v-model="entityOptions.speed">
<div class="input-number" style="width: 100px;flex: 0 0 100px;margin-left: 10px;"> <div class="input-number" style="width: 100px;flex: 0 0 100px;margin-left: 10px;">
<input class="input" type="number" title="" min="0" max="100" step="1" @input="$handleInputLimit" <input class="input" type="number" title="" min="0" max="100" step="1"
v-model="entityOptions.speed"> @input="$handleInputLimit" v-model="entityOptions.speed">
<span class="arrow"></span> <span class="arrow"></span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<span class="custom-divider"></span> <span class="custom-divider"></span>
</div>
</template> </template>
<template #footer> <template #footer>
<div style="position: absolute; left: 24px; display: flex;"> <div style="position: absolute; left: 24px; display: flex;">
@ -77,7 +77,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -32,7 +32,7 @@
</button> </button>
</div> </div>
<button @click="save">保存</button> <button @click="save">保存</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -38,7 +38,7 @@
<div class="row"></div> <div class="row"></div>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<span class="label">字体样式</span> <span class="label">字体风格</span>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@ -63,7 +63,7 @@
</el-select> </el-select>
</div> </div>
</div> </div>
<div class="row"> <!-- <div class="row">
<div class="col"> <div class="col">
<div class="customized-tip"></div> <div class="customized-tip"></div>
<span class="label" style="flex: none;">{{ t('general.text.style') }}</span> <span class="label" style="flex: none;">{{ t('general.text.style') }}</span>
@ -106,7 +106,7 @@
</div> </div>
</div> </div>
<div class="col"></div> <div class="col"></div>
</div> </div> -->
<span class="custom-divider"></span> <span class="custom-divider"></span>
<div class="row"></div> <div class="row"></div>
<div class="row"> <div class="row">
@ -124,13 +124,6 @@
<div class="labelBackgroundColorStart" ref="labelBackgroundColorStartRef" style="margin-right: 10px;"></div> <div class="labelBackgroundColorStart" ref="labelBackgroundColorStartRef" style="margin-right: 10px;"></div>
<div class="labelBackgroundColorEnd" ref="labelBackgroundColorEndRef"></div> <div class="labelBackgroundColorEnd" ref="labelBackgroundColorEndRef"></div>
</div> </div>
<!-- <div class="col font-select-box">
<span class="label" style="flex: none">字体选择</span>
<el-select class="input input-select font-select" v-model="entityOptions.labelFontFamily">
<el-option v-for="item in fontList" :key="item.key" :label="item.name" :value="item.key">
</el-option>
</el-select>
</div> -->
</div> </div>
<div class="row"> <div class="row">
<div class="col"> <div class="col">

View File

@ -31,7 +31,7 @@
<template #footer> <template #footer>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -524,7 +524,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -74,7 +74,7 @@
</template> </template>
<template #footer> <template #footer>
<button @click="save">保存</button> <button @click="save">保存</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -183,7 +183,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<Dialog ref="baseDialog" :title="title+'属性'" left="180px" top="100px" className="polygon" :closeCallback="closeCallback"> <Dialog ref="baseDialog" :title="title + '属性'" left="180px" top="100px" className="polygon"
:closeCallback="closeCallback">
<template #content> <template #content>
<span class="custom-divider"></span> <span class="custom-divider"></span>
<div class="div-item"> <div class="div-item">
@ -43,7 +44,8 @@
<div class="col"> <div class="col">
<span class="label">Z值统一增加</span> <span class="label">Z值统一增加</span>
<div class="input-number input-number-unit-1 height-box" :class="{ 'disabled': heightMode == 2 }"> <div class="input-number input-number-unit-1 height-box" :class="{ 'disabled': heightMode == 2 }">
<input class="input height" type="number" title="" min="-9999999" max="999999999" v-model="height" @input="$handleInputLimit" /> <input class="input height" type="number" title="" min="-9999999" max="999999999" v-model="height"
@input="$handleInputLimit" />
<span class="unit">m</span> <span class="unit">m</span>
<span class="arrow"></span> <span class="arrow"></span>
</div> </div>
@ -66,15 +68,18 @@
<div class="td">{{ i + 1 }}</div> <div class="td">{{ i + 1 }}</div>
<div class="td lng align-center" @dblclick="inputDblclick($event, i, 'lng')"> <div class="td lng align-center" @dblclick="inputDblclick($event, i, 'lng')">
<input class="input" @blur="inputBlurCallBack($event, i, 'lng', 8)" type="number" <input class="input" @blur="inputBlurCallBack($event, i, 'lng', 8)" type="number"
v-model="item.lng" min="-180" max="180" v-if="activeTd.index == i && activeTd.name == 'lng'" @input="$handleInputLimit" /> v-model="item.lng" min="-180" max="180" v-if="activeTd.index == i && activeTd.name == 'lng'"
@input="$handleInputLimit" />
<span style="pointer-events: none;" v-else>{{ (item.lng).toFixed(8) }}</span> <span style="pointer-events: none;" v-else>{{ (item.lng).toFixed(8) }}</span>
</div> </div>
<div class="td lat align-center" @dblclick="inputDblclick($event, i, 'lat')"> <div class="td lat align-center" @dblclick="inputDblclick($event, i, 'lat')">
<input class="input" @blur="inputBlurCallBack($event, i, 'lat', 8)" type="number" <input class="input" @blur="inputBlurCallBack($event, i, 'lat', 8)" type="number"
v-model="item.lat" min="-180" max="180" v-if="activeTd.index == i && activeTd.name == 'lat'" @input="$handleInputLimit"> v-model="item.lat" min="-180" max="180" v-if="activeTd.index == i && activeTd.name == 'lat'"
@input="$handleInputLimit">
<span style="pointer-events: none;" v-else>{{ (item.lat).toFixed(8) }}</span> <span style="pointer-events: none;" v-else>{{ (item.lat).toFixed(8) }}</span>
</div> </div>
<div class="td alt align-center" @dblclick="inputDblclick($event, i, 'alt')" @input="$handleInputLimit"> <div class="td alt align-center" @dblclick="inputDblclick($event, i, 'alt')"
@input="$handleInputLimit">
<input class="input" @blur="inputBlurCallBack($event, i, 'alt', 2)" type="number" <input class="input" @blur="inputBlurCallBack($event, i, 'alt', 2)" type="number"
v-model="entityOptions.height" min="-9999999" max="999999999" v-model="entityOptions.height" min="-9999999" max="999999999"
v-if="activeTd.index == i && activeTd.name == 'alt'"> v-if="activeTd.index == i && activeTd.name == 'alt'">
@ -98,7 +103,8 @@
<div class="col"> <div class="col">
<span class="label">描边宽度</span> <span class="label">描边宽度</span>
<div class="input-number input-number-unit-2"> <div class="input-number input-number-unit-2">
<input class="input" type="number" title="" min="0" max="99" v-model="entityOptions.lineWidth" @input="$handleInputLimit"> <input class="input" type="number" title="" min="0" max="99" v-model="entityOptions.lineWidth"
@input="$handleInputLimit">
<span class="unit">px</span> <span class="unit">px</span>
<span class="arrow"></span> <span class="arrow"></span>
</div> </div>
@ -124,7 +130,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -376,4 +382,16 @@ defineExpose({
}) })
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss">
.polygon.dialog-en {
::v-deep>.content {
.attribute-content-link .table .tr .td.operation button,
.attribute-content-vr .table .tr .td.operation button,
.attribute-content-rtmp .table .tr .td.operation button {
width: 76px !important;
flex: 0 0 76px !important;
}
}
}
</style>

View File

@ -64,7 +64,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -75,8 +75,8 @@
<div class="col" style="flex: 0 0 33%"> <div class="col" style="flex: 0 0 33%">
<span class="label">缓冲宽度</span> <span class="label">缓冲宽度</span>
<div class="input-number input-number-unit-1" style="width: 80px"> <div class="input-number input-number-unit-1" style="width: 80px">
<input class="input" type="number" title="" min="0" data-min="0.01" max="999999" <input class="input" type="number" title="" min="0" data-min="0.01" max="999999" @input="$handleInputLimit"
@input="$handleInputLimit" v-model="entityOptions.extendWidth" /> v-model="entityOptions.extendWidth" />
<span class="unit">m</span> <span class="unit">m</span>
<span class="arrow"></span> <span class="arrow"></span>
</div> </div>
@ -111,13 +111,13 @@
</div> </div>
</div> </div>
</div> </div>
<div class="div-item">
<div class="row"> <div class="row">
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane label="属性信息" name="1"> <el-tab-pane label="属性信息" name="1">
<attribute :entityOptions="entityOptions"></attribute> <attribute :entityOptions="entityOptions"></attribute>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="空间信息" name="2"> <el-tab-pane label="空间信息" name="2">
<div class="div-item">
<div class="row"> <div class="row">
<div class="col height-mode-box"> <div class="col height-mode-box">
<span class="label" style="flex: 0 0 56px">高度模式</span> <span class="label" style="flex: 0 0 56px">高度模式</span>
@ -176,13 +176,15 @@
</div> </div>
</div> </div>
</div> </div>
</div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="标签风格" name="3"> <el-tab-pane label="标签风格" name="3">
<div class="div-item">
<labelStyle type="线" :entityOptions="entityOptions"></labelStyle> <labelStyle type="线" :entityOptions="entityOptions"></labelStyle>
</div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</div>
<span class="custom-divider"></span> <span class="custom-divider"></span>
</template> </template>
<template #footer> <template #footer>
@ -200,7 +202,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -562,4 +564,16 @@ defineExpose({
} }
} }
} }
.polyline.dialog-en {
::v-deep>.content {
.attribute-content-link .table .tr .td.operation button,
.attribute-content-vr .table .tr .td.operation button,
.attribute-content-rtmp .table .tr .td.operation button {
width: 76px !important;
flex: 0 0 76px !important;
}
}
}
</style> </style>

View File

@ -66,7 +66,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -82,7 +82,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -24,7 +24,7 @@ import { GisApi } from '@/api/gisApi'
const props = defineProps({ const props = defineProps({
}); });
const host = window.location.host const host = localStorage.getItem('ip')
const visible = ref(false) const visible = ref(false)
const baseDialog:any = ref(null); const baseDialog:any = ref(null);
const eventBus:any = inject("bus"); const eventBus:any = inject("bus");

View File

@ -39,7 +39,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -14,7 +14,7 @@
<template #footer> <template #footer>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -49,7 +49,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -233,7 +233,7 @@
<template #footer> <template #footer>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -21,7 +21,7 @@
</template> </template>
<template #footer> <template #footer>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -12,18 +12,18 @@
<div class="div-item" style="display: flex"> <div class="div-item" style="display: flex">
<button @click="importHeader" style="margin-right: 15px"> <button @click="importHeader" style="margin-right: 15px">
<svg class="icon-updateheigh"> <svg class="icon-updateheigh">
<use xlink:href="#icon-importHeader"></use></svg <use xlink:href="#icon-importHeader"></use>
>{{ t('vector.导入表头') }} </svg>{{ t('vector.导入表头') }}
</button> </button>
<button @click="downloadHeader"> <button @click="downloadHeader">
<svg> <svg>
<use xlink:href="#icon-download"></use></svg <use xlink:href="#icon-download"></use>
>{{ t('vector.下载字典模板') }} </svg>{{ t('vector.下载字典模板') }}
</button> </button>
<button @click="exportExcel" style="position: absolute; right: 25px"> <button @click="exportExcel" style="position: absolute; right: 25px">
<svg> <svg>
<use xlink:href="#icon-export"></use></svg <use xlink:href="#icon-export"></use>
>{{ t('vector.导出') }} </svg>{{ t('vector.导出') }}
</button> </button>
</div> </div>
<span class="custom-divider"></span> <span class="custom-divider"></span>
@ -113,9 +113,10 @@ const maxPageNum: any = ref(0)
const filterData: any = ref([]) const filterData: any = ref([])
const title = ref('') const title = ref('')
const closeCallback = () => { const closeCallback = () => {
entityOptions.value.originalOptions = structuredClone(originalOptions) // entityOptions.value.originalOptions = structuredClone(originalOptions)
entityOptions.value.reset() // console.log('entityOptions--------------', entityOptions.value)
eventBus.emit('destroyComponent') // entityOptions.value.reset()
// eventBus.emit('destroyComponent')
} }
const getKeys = () => { const getKeys = () => {
keyData.value = [] keyData.value = []
@ -140,9 +141,8 @@ let features
const open = async (id: any) => { const open = async (id: any) => {
// that = window.earth.entityMap.get(id) // that = window.earth.entityMap.get(id)
node = window.treeObj.getNodeByParam('id', id, null) node = window.treeObj.getNodeByParam('id', id, null)
entityOptions.value.field = JSON.parse(node.params).field
that = getThat(node) that = getThat(node)
console.log(node, that, entityOptions.field, 'yyyyyyyyyyyyyy') entityOptions.value.field = that.field
if (that.options.id === id) { if (that.options.id === id) {
features = that.geojson.features features = that.geojson.features
} else { } else {
@ -157,7 +157,7 @@ const open = async (id: any) => {
let spliceData = arrSplice(arr, pageSize.value) let spliceData = arrSplice(arr, pageSize.value)
maxPageNum.value = spliceData.length maxPageNum.value = spliceData.length
tableData.value = spliceData[pageNum.value - 1] tableData.value = spliceData[pageNum.value - 1]
title.value = node.sourceName title.value = node.title || node.sourceName
getKeys() getKeys()
originalOptions = structuredClone(that.options) originalOptions = structuredClone(that.options)
entityOptions.value = that entityOptions.value = that
@ -227,8 +227,8 @@ const getTableList = ({ page, limit }) => {
tableData.value = spliceData[pageNum.value - 1] tableData.value = spliceData[pageNum.value - 1]
} }
const changeFieId = async (e) => { const changeFieId = async (e) => {
console.log(e, 'eeeeeeeee') let fNode = window.treeObj.getNodeByParam('id', that.options.id, null)
let data = JSON.parse(node.params) let data = JSON.parse(fNode.params)
data.field = e data.field = e
let params2 = { let params2 = {
id: data.id, id: data.id,

View File

@ -98,7 +98,7 @@
</div> </div>
<button @click="remove">删除</button> <button @click="remove">删除</button>
<button @click="confirm">确定</button> <button @click="confirm">确定</button>
<button @click="close">关闭</button> <button @click="close">取消</button>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -31,12 +31,16 @@
<span class="label">材质样式</span> <span class="label">材质样式</span>
<el-select class="input input-select input-select-line-type" v-model="entityOptions.material"> <el-select class="input input-select input-select-line-type" v-model="entityOptions.material">
<template #label="{ label, value }"> <template #label="{ label, value }">
<i class="yj-custom-icon" :class="material[value].icon"></i> <i class="yj-custom-icon" :class="material[value].icon"
:style="`background: url(${material[value].icon}) 100% 100% no-repeat;background-size: 100% 100%;`">
</i>
{{ label }} {{ label }}
</template> </template>
<el-option v-for="item in material" :key="item.key" :label="item.name" :value="item.key"> <el-option v-for="item in material" :key="item.key" :label="item.name" :value="item.key">
<div style="display: flex; align-items: center;"> <div style="display: flex; align-items: center;">
<i class="yj-custom-icon" :class="item.icon"></i> <i class="yj-custom-icon" :class="item.icon"
:style="`background: url(${item.icon}) 100% 100% no-repeat;background-size: 100% 100%;`"
></i>
{{ item.name }} {{ item.name }}
</div> </div>
</el-option> </el-option>
@ -99,25 +103,25 @@ const material = ref([
name: '纯色墙', name: '纯色墙',
value: '纯色墙', value: '纯色墙',
key: 0, key: 0,
icon: 'icon-wall' icon: '../sdk/custom/img/icon-wall.png',
}, },
{ {
name: '上升墙', name: '上升墙',
value: '上升墙', value: '上升墙',
key: 1, key: 1,
icon: 'icon-wall-gradient' icon: '../sdk/custom/img/icon-wall-gradient.png'
}, },
{ {
name: '箭头墙', name: '箭头墙',
value: '箭头墙', value: '箭头墙',
key: 2, key: 2,
icon: 'icon-wall-arrow' icon: '../sdk/img/material/arrow.png'
}, },
{ {
name: '警戒墙', name: '警戒墙',
value: '警戒墙', value: '警戒墙',
key: 3, key: 3,
icon: 'icon-wall-warn' icon: '../sdk/img/material/warn.png'
} }
]) ])
eventBus.on("openStandTextAdd", () => { eventBus.on("openStandTextAdd", () => {

View File

@ -98,6 +98,7 @@ export const useRightOperate = () => {
params.params = JSON.stringify(params.params) params.params = JSON.stringify(params.params)
cusAddNodes(window.treeObj, params.parentId, [params]) cusAddNodes(window.treeObj, params.parentId, [params])
let entityObject = renderVector(params, true); let entityObject = renderVector(params, true);
entityObject.flyTo();
(window as any)._entityMap.set(id, entityObject) (window as any)._entityMap.set(id, entityObject)
} else if (["geojson"].includes(sourceType)) { } else if (["geojson"].includes(sourceType)) {
let baseURL = localStorage.getItem('ip') let baseURL = localStorage.getItem('ip')
@ -113,6 +114,8 @@ export const useRightOperate = () => {
width: 1, width: 1,
color: "rgb(239, 6, 6, 1)", color: "rgb(239, 6, 6, 1)",
} }
}, (entity:any) => {
entity?.flyTo()
}) })
} else { } else {
// 获取最后一个点的位置 // 获取最后一个点的位置
@ -683,7 +686,9 @@ export const useRightOperate = () => {
}) })
for (let i = 0; i < res.data.length; i++) { for (let i = 0; i < res.data.length; i++) {
let item = res.data[i] let item = res.data[i]
initMapData(type, JSON.parse(item.params), null) initMapData(type, JSON.parse(item.params), (entity: any) => {
entity.flyTo()
})
} }
cusAddNodes(window.treeObj, parentId, res.data) cusAddNodes(window.treeObj, parentId, res.data)
} }

View File

@ -595,6 +595,7 @@ export const useTreeNode = () => {
node.sourceName = sourceName; node.sourceName = sourceName;
node.oldname = sourceName; node.oldname = sourceName;
node.params = params; node.params = params;
delete node.title
window.treeObj.updateNode(node); window.treeObj.updateNode(node);
} }

View File

@ -1,13 +1,7 @@
<template> <template>
<div <div class="login-container" style="position: fixed; width: 100vw; height: 100vh; left: 0; top: 0">
class="login-container" <transition name="video-fade" mode="out-in"
style="position: fixed; width: 100vw; height: 100vh; left: 0; top: 0" style="position: fixed; width: 100vw; height: 100vh; left: 0; top: 0; object-fit: cover">
>
<transition
name="video-fade"
mode="out-in"
style="position: fixed; width: 100vw; height: 100vh; left: 0; top: 0; object-fit: cover"
>
<!-- 第一个视频播放一次 --> <!-- 第一个视频播放一次 -->
<!-- <video v-if="!isFirstVideoPlayed" ref="firstVideoRef" key="first-video" muted @ended="onFirstVideoEnded" <!-- <video v-if="!isFirstVideoPlayed" ref="firstVideoRef" key="first-video" muted @ended="onFirstVideoEnded"
src="../../assets/video/login_front.mp4" src="../../assets/video/login_front.mp4"
@ -15,14 +9,8 @@
<!-- 第二个视频循环播放 --> <!-- 第二个视频循环播放 -->
<!-- <video v-else key="second-video" autoplay loop muted src="../../assets/video/login_feature.mp4" <!-- <video v-else key="second-video" autoplay loop muted src="../../assets/video/login_feature.mp4"
style="position: fixed; width: 100vw; height: 100vh; left: 0; top: 0; object-fit: cover"></video> --> style="position: fixed; width: 100vw; height: 100vh; left: 0; top: 0; object-fit: cover"></video> -->
<video <video key="second-video" autoplay loop muted src="../../assets/video/author_video.mp4"
key="second-video" style="position: fixed; width: 100vw; height: 100vh; left: 0; top: 0; object-fit: cover"></video>
autoplay
loop
muted
src="../../assets/video/author_video.mp4"
style="position: fixed; width: 100vw; height: 100vh; left: 0; top: 0; object-fit: cover"
></video>
</transition> </transition>
<!-- 登录页面 --> <!-- 登录页面 -->
<div class="rightBox" v-if="isDesktop"> <div class="rightBox" v-if="isDesktop">
@ -39,95 +27,45 @@
</div> </div>
</div> </div>
</div> </div>
<el-form <el-form class="login-form" autoComplete="on" :model="loginForm" :rules="loginRules" ref="loginFormRef"
class="login-form" label-position="left">
autoComplete="on"
:model="loginForm"
:rules="loginRules"
ref="loginFormRef"
label-position="left"
>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input <el-input name="username" type="text" v-model="loginForm.username" autoComplete="on" placeholder="请输入用户名"
name="username" :prefix-icon="User" />
type="text"
v-model="loginForm.username"
autoComplete="on"
placeholder="请输入用户名"
:prefix-icon="User"
/>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input <el-input type="password" @keyup.enter.native="handleLogin(loginFormRef)" v-model="loginForm.password"
type="password" autoComplete="on" placeholder="请输入密码" :prefix-icon="Unlock" show-password></el-input>
@keyup.enter.native="handleLogin(loginFormRef)"
v-model="loginForm.password"
autoComplete="on"
placeholder="请输入密码"
:prefix-icon="Unlock"
show-password
></el-input>
</el-form-item> </el-form-item>
<el-form-item class="rememberForget"> <el-form-item class="rememberForget">
<!-- justify-content: space-around;align-items: center; --> <!-- justify-content: space-around;align-items: center; -->
<div style="display: flex"> <div style="display: flex">
<svg <svg class="checkbox-svg" v-show="checkboxVModel" style="pointer-events: none"
class="checkbox-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="14"
v-show="checkboxVModel" viewBox="0 0 14 14" fill="none">
style="pointer-events: none" <path fill="rgba(var(--color-base1), 1)"
xmlns="http://www.w3.org/2000/svg" d="M7.34788e-16 2L-2.20436e-15 12C-2.40727e-15 13.1046 0.895431 14 2 14L12 14C13.1046 14 14 13.1046 14 12L14 2C14 0.895431 13.1046 -1.46958e-15 12 -1.46958e-15L2 -1.46958e-15C0.895431 -1.60485e-15 8.02424e-16 0.895431 7.34788e-16 2Z">
xmlns:xlink="http://www.w3.org/1999/xlink" </path>
width="14"
height="14"
viewBox="0 0 14 14"
fill="none"
>
<path
fill="rgba(var(--color-base1), 1)"
d="M7.34788e-16 2L-2.20436e-15 12C-2.40727e-15 13.1046 0.895431 14 2 14L12 14C13.1046 14 14 13.1046 14 12L14 2C14 0.895431 13.1046 -1.46958e-15 12 -1.46958e-15L2 -1.46958e-15C0.895431 -1.60485e-15 8.02424e-16 0.895431 7.34788e-16 2Z"
></path>
<path <path
d="M5.47283 8.3039L3.10764 6.12807C3.06194 6.08647 2.99525 6.08647 2.94955 6.12946L2.04424 6.98093C1.98989 7.03224 1.98495 7.12376 2.03312 7.18201L6.03602 11.9566C6.09778 12.0301 6.20647 12.0065 6.24105 11.9136C7.03644 9.69343 9.25835 5.63439 11.9619 2.69585C11.999 2.65564 12.0101 2.59601 11.9904 2.54331L11.8211 2.08568C11.7915 2.00525 11.7038 1.97474 11.6396 2.02328C8.63587 4.21019 6.45966 6.92546 5.47283 8.3039Z" d="M5.47283 8.3039L3.10764 6.12807C3.06194 6.08647 2.99525 6.08647 2.94955 6.12946L2.04424 6.98093C1.98989 7.03224 1.98495 7.12376 2.03312 7.18201L6.03602 11.9566C6.09778 12.0301 6.20647 12.0065 6.24105 11.9136C7.03644 9.69343 9.25835 5.63439 11.9619 2.69585C11.999 2.65564 12.0101 2.59601 11.9904 2.54331L11.8211 2.08568C11.7915 2.00525 11.7038 1.97474 11.6396 2.02328C8.63587 4.21019 6.45966 6.92546 5.47283 8.3039Z"
fill="#004242" fill="#004242"></path>
></path>
</svg> </svg>
<svg <svg class="checkbox-svg" v-show="!checkboxVModel" style="pointer-events: none"
class="checkbox-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="14"
v-show="!checkboxVModel" viewBox="0 0 14 14" fill="none">
style="pointer-events: none" <path fill-rule="evenodd" fill="url(#linear_border_2442_533_0)"
xmlns="http://www.w3.org/2000/svg" d="M0 12L0 2C0 0.895431 0.895431 0 2 0L12 0C13.1046 0 14 0.895431 14 2L14 12C14 13.1046 13.1046 14 12 14L2 14C0.895431 14 0 13.1046 0 12ZM2 12.5C1.72386 12.5 1.5 12.2761 1.5 12L1.5 2C1.5 1.72386 1.72386 1.5 2 1.5L12 1.5C12.2761 1.5 12.5 1.72386 12.5 2L12.5 12C12.5 12.2761 12.2761 12.5 12 12.5L2 12.5Z">
xmlns:xlink="http://www.w3.org/1999/xlink" </path>
width="14"
height="14"
viewBox="0 0 14 14"
fill="none"
>
<path
fill-rule="evenodd"
fill="url(#linear_border_2442_533_0)"
d="M0 12L0 2C0 0.895431 0.895431 0 2 0L12 0C13.1046 0 14 0.895431 14 2L14 12C14 13.1046 13.1046 14 12 14L2 14C0.895431 14 0 13.1046 0 12ZM2 12.5C1.72386 12.5 1.5 12.2761 1.5 12L1.5 2C1.5 1.72386 1.72386 1.5 2 1.5L12 1.5C12.2761 1.5 12.5 1.72386 12.5 2L12.5 12C12.5 12.2761 12.2761 12.5 12 12.5L2 12.5Z"
></path>
<defs> <defs>
<linearGradient <linearGradient id="linear_border_2442_533_0" x1="0" y1="-0.5574798583984375" x2="12.1173095703125"
id="linear_border_2442_533_0" y2="12.878036499023438" gradientUnits="userSpaceOnUse">
x1="0"
y1="-0.5574798583984375"
x2="12.1173095703125"
y2="12.878036499023438"
gradientUnits="userSpaceOnUse"
>
<stop offset="0.0625" stop-color="rgba(var(--color-base1), 1)" /> <stop offset="0.0625" stop-color="rgba(var(--color-base1), 1)" />
<stop offset="1" stop-color="var(--color-border1)" /> <stop offset="1" stop-color="var(--color-border1)" />
</linearGradient> </linearGradient>
</defs> </defs>
</svg> </svg>
<el-checkbox <el-checkbox :disabled="loading" v-model="checkboxVModel" @change="rememberpwd"
:disabled="loading" label="string">记住密码</el-checkbox>
v-model="checkboxVModel"
@change="rememberpwd"
label="string"
>记住密码</el-checkbox
>
<!-- <div style="cursor: pointer;">忘记密码</div> --> <!-- <div style="cursor: pointer;">忘记密码</div> -->
</div> </div>
</el-form-item> </el-form-item>
@ -150,24 +88,15 @@
<h2 class="greet"><span>欢迎您使用</span>实景三维电子沙盘系统</h2> <h2 class="greet"><span>欢迎您使用</span>实景三维电子沙盘系统</h2>
<div class="serviceContent"> <div class="serviceContent">
<el-tabs v-model="selectedService" class="demo-tabs" @tab-click="handleSelect"> <el-tabs v-model="selectedService" class="demo-tabs" @tab-click="handleSelect">
<el-tab-pane <el-tab-pane v-for="item in serviceOptions" :label="item.name" :name="item.name"></el-tab-pane>
v-for="item in serviceOptions"
:label="item.name"
:name="item.name"
></el-tab-pane>
</el-tabs> </el-tabs>
<div class="tabPanel"> <div class="tabPanel">
<template v-if="selectedService == '接口服务'"> <template v-if="selectedService == '接口服务'">
<div class="item"> <div class="item">
<span class="itemLabel">服务选择</span> <span class="itemLabel">服务选择</span>
<el-select class="select" popper-class="login-select-popper" v-model="servVal"> <el-select class="select" popper-class="login-select-popper" v-model="servVal">
<el-option <el-option size="mini" v-for="item in servOptions" :key="item.value" :label="item.name"
size="mini" :value="item.name">
v-for="item in servOptions"
:key="item.value"
:label="item.name"
:value="item.name"
>
</el-option> </el-option>
</el-select> </el-select>
</div> </div>
@ -214,13 +143,8 @@
<div class="item"> <div class="item">
<span class="itemLabel">串口选择</span> <span class="itemLabel">串口选择</span>
<el-select class="select" popper-class="login-select-popper" v-model="gpsVal"> <el-select class="select" popper-class="login-select-popper" v-model="gpsVal">
<el-option <el-option size="mini" v-for="item in gpsOptions" :key="item.value" :label="item.Product"
size="mini" :value="item.Name">
v-for="item in gpsOptions"
:key="item.value"
:label="item.Product"
:value="item.Name"
>
</el-option> </el-option>
</el-select> </el-select>
</div> </div>
@ -235,14 +159,8 @@
</div> </div>
</div> </div>
<!-- 授权页面 --> <!-- 授权页面 -->
<Dialog <Dialog ref="baseDialog" class="graffiti" title="系统授权" :closeCallback="closeCallBack" left="calc(50vw - 188px)"
ref="baseDialog" top="calc(50vh - 191px)">
class="graffiti"
title="系统授权"
:closeCallback="closeCallBack"
left="calc(50vw - 188px)"
top="calc(50vh - 191px)"
>
<template #content> <template #content>
<div class="auth_info custom_scroll_bar content_h"> <div class="auth_info custom_scroll_bar content_h">
<div class="auth_info_box"> <div class="auth_info_box">
@ -250,12 +168,7 @@
<span class="fankuai"></span> <span class="fankuai"></span>
{{ t('auths.authCode') }} {{ t('auths.authCode') }}
</div> </div>
<div <div class="auth_info_text" @click="copy(authInfo.license_code)" style="cursor: pointer" title="点击可复制">
class="auth_info_text"
@click="copy(authInfo.license_code)"
style="cursor: pointer"
title="点击可复制"
>
{{ authInfo.license_code || '' }} {{ authInfo.license_code || '' }}
<svg-icon name="copy" :size="20" style="margin-left: 30px"></svg-icon> <svg-icon name="copy" :size="20" style="margin-left: 30px"></svg-icon>
</div> </div>
@ -278,22 +191,13 @@
<span class="fankuai"></span> <span class="fankuai"></span>
{{ t('auths.authType') }} {{ t('auths.authType') }}
</div> </div>
<div <div v-if="authInfo.status != null" class="auth_info_text" style="font-size: 16px" :style="{
v-if="authInfo.status != null"
class="auth_info_text"
style="font-size: 16px"
:style="{
color: authInfo.status ? 'rgba(27, 248, 195, 1)' : 'rgba(255, 161, 69, 1)' color: authInfo.status ? 'rgba(27, 248, 195, 1)' : 'rgba(255, 161, 69, 1)'
}" }">
>
{{ authInfo.status ? t('auths.authTempExpire') : t('auths.authexpire') }} {{ authInfo.status ? t('auths.authTempExpire') : t('auths.authexpire') }}
</div> </div>
<!-- <div v-else class="auth_info_text">{{ authInfo.message || '无' }}</div> --> <!-- <div v-else class="auth_info_text">{{ authInfo.message || '无' }}</div> -->
<div <div v-else class="auth_info_text" style="font-size: 16px; color: rgba(241, 108, 85, 1)">
v-else
class="auth_info_text"
style="font-size: 16px; color: rgba(241, 108, 85, 1)"
>
{{ t('auths.noAuthexpire') }} {{ t('auths.noAuthexpire') }}
</div> </div>
</div> </div>
@ -313,6 +217,14 @@
import { User, Unlock, Setting, SwitchButton } from '@element-plus/icons-vue' import { User, Unlock, Setting, SwitchButton } from '@element-plus/icons-vue'
import { useLogin } from './useLogin' import { useLogin } from './useLogin'
import { useSetUp } from './useSetUp' import { useSetUp } from './useSetUp'
import { useI18n } from 'vue-i18n'
import { useRouter } from 'vue-router'
import useClipboard from 'vue-clipboard3'
import { ipcMain } from 'electron'
import { AuthApi } from '@/api/setting/auth'
import Dialog from '@/components/dialog/baseDialog.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { $sendElectronChanel } from '@/utils/communication'
const { const {
loginFormRef, loginFormRef,
@ -371,7 +283,7 @@ onMounted(() => {
} }
} }
else { else {
ipcRenderer.once('program-init', () => { ipcRenderer.once('program-init', (error, e) => {
if (!router.currentRoute.value.query.type) { if (!router.currentRoute.value.query.type) {
getAuthCode() getAuthCode()
getAuthInfo() getAuthInfo()
@ -383,14 +295,6 @@ onMounted(() => {
}) })
//授权判断 //授权判断
import { useI18n } from 'vue-i18n'
import { useRouter } from 'vue-router'
import useClipboard from 'vue-clipboard3'
import { ipcMain } from 'electron'
import { AuthApi } from '@/api/setting/auth'
import Dialog from '@/components/dialog/baseDialog.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { $sendElectronChanel } from '@/utils/communication'
let isAuth = ref(true) let isAuth = ref(true)
@ -1041,8 +945,7 @@ const validatePortRange = (rule, value, callback) => {
z-index: 99; z-index: 99;
background: linear-gradient(0deg, #00ffff33 0%, #00ffff00 100%), rgba(0, 0, 0, 0.6); background: linear-gradient(0deg, #00ffff33 0%, #00ffff00 100%), rgba(0, 0, 0, 0.6);
border: 1.5px solid; border: 1.5px solid;
border-image: linear-gradient(to bottom, rgba(var(--color-base1), 1) 6.25%, rgb(0, 200, 255) 100%) border-image: linear-gradient(to bottom, rgba(var(--color-base1), 1) 6.25%, rgb(0, 200, 255) 100%) 1;
1;
text-align: left; text-align: left;
font-family: 'sy-boldface'; font-family: 'sy-boldface';
} }
@ -1304,8 +1207,7 @@ const validatePortRange = (rule, value, callback) => {
align-items: center; align-items: center;
margin: 15px 0; margin: 15px 0;
.select { .select {}
}
} }
} }
} }
@ -1358,6 +1260,7 @@ const validatePortRange = (rule, value, callback) => {
.el-message-box__headerbtn { .el-message-box__headerbtn {
display: none !important; display: none !important;
} }
.el-message-box__btns { .el-message-box__btns {
.el-button { .el-button {
--el-button-text-color: #fff; --el-button-text-color: #fff;