psl暂提
This commit is contained in:
parent
767cf32a9f
commit
01a518f3e7
47
src/drawApp/graphics/ArrowInteraction.ts
Normal file
47
src/drawApp/graphics/ArrowInteraction.ts
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import * as pb_1 from 'google-protobuf';
|
||||||
|
import { IArrowData, Arrow } from 'src/graphics/arrow/Arrow';
|
||||||
|
import { pslGraphicData } from 'src/protos/pslGraphics';
|
||||||
|
import { GraphicDataBase } from './GraphicDataBase';
|
||||||
|
import { IPointData } from 'pixi.js';
|
||||||
|
|
||||||
|
export class ArrowData extends GraphicDataBase implements IArrowData {
|
||||||
|
constructor(data?: pslGraphicData.PslKey) {
|
||||||
|
let arrow;
|
||||||
|
if (data) {
|
||||||
|
arrow = data;
|
||||||
|
} else {
|
||||||
|
arrow = new pslGraphicData.PslKey({
|
||||||
|
common: GraphicDataBase.defaultCommonInfo(Arrow.Type),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
super(arrow);
|
||||||
|
}
|
||||||
|
|
||||||
|
public get data(): pslGraphicData.PslKey {
|
||||||
|
return this.getData<pslGraphicData.PslKey>();
|
||||||
|
}
|
||||||
|
|
||||||
|
get code(): string {
|
||||||
|
return this.data.code;
|
||||||
|
}
|
||||||
|
set code(v: string) {
|
||||||
|
this.data.code = v;
|
||||||
|
}
|
||||||
|
get points(): IPointData[] {
|
||||||
|
return this.data.points;
|
||||||
|
}
|
||||||
|
set points(points: IPointData[]) {
|
||||||
|
this.data.points = points.map(
|
||||||
|
(p) => new pslGraphicData.Point({ x: p.x, y: p.y })
|
||||||
|
);
|
||||||
|
}
|
||||||
|
clone(): ArrowData {
|
||||||
|
return new ArrowData(this.data.cloneMessage());
|
||||||
|
}
|
||||||
|
copyFrom(data: ArrowData): void {
|
||||||
|
pb_1.Message.copyInto(data.data, this.data);
|
||||||
|
}
|
||||||
|
eq(other: ArrowData): boolean {
|
||||||
|
return pb_1.Message.equals(this.data, other.data);
|
||||||
|
}
|
||||||
|
}
|
38
src/drawApp/graphics/IbpAlarmInteraction.ts
Normal file
38
src/drawApp/graphics/IbpAlarmInteraction.ts
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import * as pb_1 from 'google-protobuf';
|
||||||
|
import { IIbpAlarmData, IbpAlarm } from 'src/graphics/ibpAlarm/IbpAlarm';
|
||||||
|
import { pslGraphicData } from 'src/protos/pslGraphics';
|
||||||
|
import { GraphicDataBase } from './GraphicDataBase';
|
||||||
|
|
||||||
|
export class IbpAlarmData extends GraphicDataBase implements IIbpAlarmData {
|
||||||
|
constructor(data?: pslGraphicData.PslKey) {
|
||||||
|
let ibpAlram;
|
||||||
|
if (data) {
|
||||||
|
ibpAlram = data;
|
||||||
|
} else {
|
||||||
|
ibpAlram = new pslGraphicData.PslKey({
|
||||||
|
common: GraphicDataBase.defaultCommonInfo(IbpAlarm.Type),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
super(ibpAlram);
|
||||||
|
}
|
||||||
|
|
||||||
|
public get data(): pslGraphicData.PslKey {
|
||||||
|
return this.getData<pslGraphicData.PslKey>();
|
||||||
|
}
|
||||||
|
|
||||||
|
get code(): string {
|
||||||
|
return this.data.code;
|
||||||
|
}
|
||||||
|
set code(v: string) {
|
||||||
|
this.data.code = v;
|
||||||
|
}
|
||||||
|
clone(): IbpAlarmData {
|
||||||
|
return new IbpAlarmData(this.data.cloneMessage());
|
||||||
|
}
|
||||||
|
copyFrom(data: IbpAlarmData): void {
|
||||||
|
pb_1.Message.copyInto(data.data, this.data);
|
||||||
|
}
|
||||||
|
eq(other: IbpAlarmData): boolean {
|
||||||
|
return pb_1.Message.equals(this.data, other.data);
|
||||||
|
}
|
||||||
|
}
|
38
src/drawApp/graphics/IbpKeyInteraction.ts
Normal file
38
src/drawApp/graphics/IbpKeyInteraction.ts
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import * as pb_1 from 'google-protobuf';
|
||||||
|
import { IIbpKeyData, IbpKey } from 'src/graphics/ibpKey/IbpKey';
|
||||||
|
import { pslGraphicData } from 'src/protos/pslGraphics';
|
||||||
|
import { GraphicDataBase } from './GraphicDataBase';
|
||||||
|
|
||||||
|
export class IbpKeyData extends GraphicDataBase implements IIbpKeyData {
|
||||||
|
constructor(data?: pslGraphicData.PslKey) {
|
||||||
|
let ibpKey;
|
||||||
|
if (data) {
|
||||||
|
ibpKey = data;
|
||||||
|
} else {
|
||||||
|
ibpKey = new pslGraphicData.PslKey({
|
||||||
|
common: GraphicDataBase.defaultCommonInfo(IbpKey.Type),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
super(ibpKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public get data(): pslGraphicData.PslKey {
|
||||||
|
return this.getData<pslGraphicData.PslKey>();
|
||||||
|
}
|
||||||
|
|
||||||
|
get code(): string {
|
||||||
|
return this.data.code;
|
||||||
|
}
|
||||||
|
set code(v: string) {
|
||||||
|
this.data.code = v;
|
||||||
|
}
|
||||||
|
clone(): IbpKeyData {
|
||||||
|
return new IbpKeyData(this.data.cloneMessage());
|
||||||
|
}
|
||||||
|
copyFrom(data: IbpKeyData): void {
|
||||||
|
pb_1.Message.copyInto(data.data, this.data);
|
||||||
|
}
|
||||||
|
eq(other: IbpKeyData): boolean {
|
||||||
|
return pb_1.Message.equals(this.data, other.data);
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
import { GraphicData, IGraphicApp, IGraphicStorage } from 'src/jl-graphic';
|
import { GraphicData, IGraphicApp, IGraphicStorage } from 'src/jl-graphic';
|
||||||
import { getPublishMapInfoByLineId } from 'src/api/PublishApi';
|
import { getPublishMapInfoByLineId } from 'src/api/PublishApi';
|
||||||
import { useLineStore } from 'src/stores/line-store';
|
import { usePslStore } from 'src/stores/psl-store';
|
||||||
import { toUint8Array } from 'js-base64';
|
import { toUint8Array } from 'js-base64';
|
||||||
import { PslKeyTemplate } from 'src/graphics/pslKey/pslKey';
|
import { PslKeyTemplate } from 'src/graphics/pslKey/pslKey';
|
||||||
import { PslKeyData } from './graphics/PslKeyInteraction';
|
import { PslKeyData } from './graphics/PslKeyInteraction';
|
||||||
@ -33,9 +33,9 @@ export function initPslScene(lineApp: IGraphicApp, sceneName: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function loadPslDatas(): Promise<IGraphicStorage> {
|
async function loadPslDatas(): Promise<IGraphicStorage> {
|
||||||
const lineStore = useLineStore();
|
const pslStore = usePslStore();
|
||||||
const mapId = lineStore.mapId;
|
const mapId = pslStore.mapId;
|
||||||
const simulationId = lineStore.simulationId;
|
const simulationId = pslStore.simulationId;
|
||||||
if (!mapId || !simulationId) {
|
if (!mapId || !simulationId) {
|
||||||
throw new Error('获取数据异常:未获取到地图ID或仿真ID');
|
throw new Error('获取数据异常:未获取到地图ID或仿真ID');
|
||||||
}
|
}
|
||||||
|
@ -43,12 +43,26 @@
|
|||||||
<q-page-container>
|
<q-page-container>
|
||||||
<div id="line-app-container" class="overflow-hidden"></div>
|
<div id="line-app-container" class="overflow-hidden"></div>
|
||||||
</q-page-container>
|
</q-page-container>
|
||||||
|
<q-dialog v-model="pslDialog">
|
||||||
|
<q-page-container style="width: 510px; height: 650px; background: #fff">
|
||||||
|
<div id="psl-app-container" class="overflow-hidden"></div>
|
||||||
|
</q-page-container>
|
||||||
|
</q-dialog>
|
||||||
</q-layout>
|
</q-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, ref, computed, onUnmounted, watch, reactive } from 'vue';
|
import {
|
||||||
|
onMounted,
|
||||||
|
ref,
|
||||||
|
computed,
|
||||||
|
onUnmounted,
|
||||||
|
watch,
|
||||||
|
reactive,
|
||||||
|
nextTick,
|
||||||
|
} from 'vue';
|
||||||
import { useLineStore } from 'src/stores/line-store';
|
import { useLineStore } from 'src/stores/line-store';
|
||||||
|
import { usePslStore } from 'src/stores/psl-store.ts';
|
||||||
import { useRoute, useRouter } from 'vue-router';
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
import { destroySimulation } from 'src/api/Simulation';
|
import { destroySimulation } from 'src/api/Simulation';
|
||||||
import StateProperties from 'src/components/line-app/StateProperties.vue';
|
import StateProperties from 'src/components/line-app/StateProperties.vue';
|
||||||
@ -67,6 +81,7 @@ const headerHeight = ref(0);
|
|||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const lineStore = useLineStore();
|
const lineStore = useLineStore();
|
||||||
|
const pslDialog = ref(false);
|
||||||
const simulationId = (route.query.simulationId as string) || '';
|
const simulationId = (route.query.simulationId as string) || '';
|
||||||
const projectId = (route.query.projectId as string) || '';
|
const projectId = (route.query.projectId as string) || '';
|
||||||
const defaultMapId = (route.query.defaultMapId as string) || '';
|
const defaultMapId = (route.query.defaultMapId as string) || '';
|
||||||
@ -107,6 +122,7 @@ onMounted(async () => {
|
|||||||
try {
|
try {
|
||||||
if (projectId) {
|
if (projectId) {
|
||||||
const res = await getProjectLinkInfo(+projectId);
|
const res = await getProjectLinkInfo(+projectId);
|
||||||
|
console.log(res, '====');
|
||||||
projectInfo.name = res.name;
|
projectInfo.name = res.name;
|
||||||
projectInfo.pid = res.pid + '';
|
projectInfo.pid = res.pid + '';
|
||||||
projectInfo.mapInfoLinks = res.mapInfoLinks;
|
projectInfo.mapInfoLinks = res.mapInfoLinks;
|
||||||
@ -136,6 +152,9 @@ onMounted(async () => {
|
|||||||
lineStore.setSimulationId(null);
|
lineStore.setSimulationId(null);
|
||||||
}
|
}
|
||||||
drawerRight.value = false;
|
drawerRight.value = false;
|
||||||
|
// setTimeout(() => {
|
||||||
|
// pslShow();
|
||||||
|
// }, 5000);
|
||||||
});
|
});
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
if (dialogInstance.value && lineStore.showLayerDialog) {
|
if (dialogInstance.value && lineStore.showLayerDialog) {
|
||||||
@ -198,6 +217,32 @@ function switchScene(val: MapInfo) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function pslShow() {
|
||||||
|
pslDialog.value = true;
|
||||||
|
nextTick(() => {
|
||||||
|
const dom = document.getElementById('psl-app-container');
|
||||||
|
if (dom) {
|
||||||
|
const pslApp = usePslStore().initLineApp();
|
||||||
|
usePslStore().addAllScene([{ type: 1, id: 145 }]);
|
||||||
|
pslApp.bindDom(dom);
|
||||||
|
usePslStore().setMapId(145);
|
||||||
|
usePslStore().setSimulationId(simulationId);
|
||||||
|
sceneName = getSceneNameFn({ type: 1, id: 145 });
|
||||||
|
usePslStore().setSceneName(sceneName);
|
||||||
|
scene = pslApp.getScene(sceneName);
|
||||||
|
scene.reload();
|
||||||
|
dom.style.width = '500px';
|
||||||
|
dom.style.height = '600px';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function pslHide() {
|
||||||
|
pslApp.unbindDom();
|
||||||
|
pslApp.destroy();
|
||||||
|
pslDialog.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
interface LinkParams extends Omit<LinkInfo, 'pid' | 'code'> {
|
interface LinkParams extends Omit<LinkInfo, 'pid' | 'code'> {
|
||||||
name: string;
|
name: string;
|
||||||
pid: string;
|
pid: string;
|
||||||
|
102
src/stores/psl-store.ts
Normal file
102
src/stores/psl-store.ts
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
import { defineStore } from 'pinia';
|
||||||
|
import {
|
||||||
|
IJlCanvas,
|
||||||
|
JlGraphic,
|
||||||
|
IGraphicApp,
|
||||||
|
GraphicState,
|
||||||
|
} from 'src/jl-graphic';
|
||||||
|
import {
|
||||||
|
initLineApp,
|
||||||
|
getLineApp,
|
||||||
|
destroyLineApp,
|
||||||
|
addSceneList,
|
||||||
|
ISceneName,
|
||||||
|
} from 'src/drawApp/lineApp';
|
||||||
|
import { markRaw } from 'vue';
|
||||||
|
import { MapInfo } from 'src/api/ProjectLinkApi';
|
||||||
|
|
||||||
|
export const usePslStore = defineStore('psl', {
|
||||||
|
state: () => ({
|
||||||
|
selectedGraphics: null as JlGraphic[] | null,
|
||||||
|
lineId: null as number | null,
|
||||||
|
lineName: null as string | null,
|
||||||
|
simulationId: null as string | null,
|
||||||
|
socketStates: null as GraphicState[] | null,
|
||||||
|
stateProCount: 0,
|
||||||
|
showLayer: [] as string[], // 显示的图层(草稿和发布图公用)
|
||||||
|
showLayerDialog: false, // 显示图层控制弹窗(草稿和发布图公用)
|
||||||
|
mapId: null as number | null,
|
||||||
|
sceneName: '', // 场景名称
|
||||||
|
}),
|
||||||
|
getters: {
|
||||||
|
selectedGraphicType: (state) => {
|
||||||
|
if (state.selectedGraphics) {
|
||||||
|
if (state.selectedGraphics.length === 1) {
|
||||||
|
return state.selectedGraphics[0].type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
getLineApp(): IGraphicApp {
|
||||||
|
const app = getLineApp();
|
||||||
|
if (app == null) {
|
||||||
|
throw new Error('未初始化app');
|
||||||
|
}
|
||||||
|
return app;
|
||||||
|
},
|
||||||
|
getJlCanvas(): IJlCanvas {
|
||||||
|
return this.getLineApp().canvas;
|
||||||
|
},
|
||||||
|
initLineApp() {
|
||||||
|
const app = initLineApp();
|
||||||
|
app.on('graphicselected', () => {
|
||||||
|
this.selectedGraphics = markRaw(
|
||||||
|
app.getScene(this.sceneName).selectedGraphics
|
||||||
|
);
|
||||||
|
});
|
||||||
|
this.selectedGraphics = [];
|
||||||
|
return app;
|
||||||
|
},
|
||||||
|
addAllScene(list: MapInfo[]) {
|
||||||
|
const arr: ISceneName[] = list.map((item) => {
|
||||||
|
return { type: item.type, id: item.id };
|
||||||
|
});
|
||||||
|
addSceneList(arr);
|
||||||
|
},
|
||||||
|
appCurrentScene() {
|
||||||
|
return this.getLineApp().getScene(this.sceneName);
|
||||||
|
},
|
||||||
|
destroy() {
|
||||||
|
this.selectedGraphics = null;
|
||||||
|
destroyLineApp();
|
||||||
|
},
|
||||||
|
setLineId(id: number | null) {
|
||||||
|
this.lineId = id;
|
||||||
|
},
|
||||||
|
setLineName(name: string | null) {
|
||||||
|
this.lineName = name;
|
||||||
|
},
|
||||||
|
setSimulationId(id: string | null) {
|
||||||
|
this.simulationId = id;
|
||||||
|
},
|
||||||
|
setSocketStates(v: GraphicState[] | null) {
|
||||||
|
this.socketStates = v;
|
||||||
|
},
|
||||||
|
stateProCountIncrease() {
|
||||||
|
this.stateProCount++;
|
||||||
|
},
|
||||||
|
setShowLayer(v: string[]) {
|
||||||
|
this.showLayer = v;
|
||||||
|
},
|
||||||
|
setShowLayerDialog(v: boolean) {
|
||||||
|
this.showLayerDialog = v;
|
||||||
|
},
|
||||||
|
setMapId(id: number | null) {
|
||||||
|
this.mapId = id;
|
||||||
|
},
|
||||||
|
setSceneName(sceneName: string) {
|
||||||
|
this.sceneName = sceneName;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user