This commit is contained in:
fan 2023-10-12 16:39:28 +08:00
commit 64d6132fc1
6 changed files with 239 additions and 14 deletions

@ -1 +1 @@
Subproject commit 608836a62827cb638007e5be46e22644808c0a1e Subproject commit 5604ad84ed5c6af4206937f5bbba9b2debfbfb6f

View File

@ -32,7 +32,6 @@ import { TextContentDraw } from 'src/graphics/textContent/TextContentDrawAssista
import { IbpTextData } from './graphics/IbpTextInteraction'; import { IbpTextData } from './graphics/IbpTextInteraction';
import { MenuItemOptions } from 'src/jl-graphic/ui/Menu'; import { MenuItemOptions } from 'src/jl-graphic/ui/Menu';
import { ContextMenu } from 'src/jl-graphic/ui/ContextMenu'; import { ContextMenu } from 'src/jl-graphic/ui/ContextMenu';
import { savePslDrawToServer } from './pslApp';
let drawApp: IDrawApp | null = null; let drawApp: IDrawApp | null = null;
const UndoOptions: MenuItemOptions = { const UndoOptions: MenuItemOptions = {
@ -107,6 +106,18 @@ export function initIBPDrawApp() {
return drawApp; return drawApp;
} }
//所属集中站
let uniqueIdPrefix = new ibpGraphicData.UniqueIdType();
export function loadUniqueIdPrefix() {
return uniqueIdPrefix;
}
export function setUniqueIdPrefix(
newUniqueIdPrefix: ibpGraphicData.UniqueIdType
) {
uniqueIdPrefix = newUniqueIdPrefix;
}
export function saveIBPDrawToServer(app: IDrawApp) { export function saveIBPDrawToServer(app: IDrawApp) {
const base64 = saveIBPDrawDatas(app); const base64 = saveIBPDrawDatas(app);
const ibpDrawStore = useIBPDrawStore(); const ibpDrawStore = useIBPDrawStore();
@ -123,7 +134,7 @@ export function saveIBPDrawToServer(app: IDrawApp) {
}); });
} }
function saveIBPDrawDatas(app: IDrawApp) { export function saveIBPDrawDatas(app: IDrawApp) {
const storage = new ibpGraphicData.IBPGraphicStorage(); const storage = new ibpGraphicData.IBPGraphicStorage();
const canvasData = app.canvas.saveData(); const canvasData = app.canvas.saveData();
storage.canvas = new graphicData.Canvas({ storage.canvas = new graphicData.Canvas({
@ -145,6 +156,7 @@ function saveIBPDrawDatas(app: IDrawApp) {
storage.IBPTexts.push(g.saveData<IbpTextData>().data); storage.IBPTexts.push(g.saveData<IbpTextData>().data);
} }
}); });
storage.UniqueIdPrefix = uniqueIdPrefix;
const base64 = fromUint8Array(storage.serialize()); const base64 = fromUint8Array(storage.serialize());
return base64; return base64;
} }
@ -176,6 +188,9 @@ async function IBPDrawDataLoader() {
storage.IBPTexts.forEach((ibpText) => { storage.IBPTexts.forEach((ibpText) => {
datas.push(new IbpTextData(ibpText)); datas.push(new IbpTextData(ibpText));
}); });
if (storage.UniqueIdPrefix) {
setUniqueIdPrefix(storage.UniqueIdPrefix);
}
return { return {
canvasProperty: storage.canvas, canvasProperty: storage.canvas,
datas: datas, datas: datas,

View File

@ -167,9 +167,13 @@ export class Platform extends JlGraphic {
minDistanceRefSections.push(section); minDistanceRefSections.push(section);
} }
}); });
const refSection = minDistanceRefSections.reduce((prev, cur) => { if (minDistanceRefSections) {
return distance2(prev.position, this.position) > const refSection = minDistanceRefSections?.reduce((prev, cur) => {
distance2(cur.position, this.position) return distance2(
prev.localToCanvasPoint(prev.getStartPoint()),
this.position
) >
distance2(cur.localToCanvasPoint(prev.getStartPoint()), this.position)
? cur ? cur
: prev; : prev;
}); });
@ -177,6 +181,7 @@ export class Platform extends JlGraphic {
this.relationManage.addRelation(this, refSection); this.relationManage.addRelation(this, refSection);
} }
} }
}
saveRelations() { saveRelations() {
const platformRef = []; const platformRef = [];
const refStation = this.relationManage const refStation = this.relationManage

View File

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, reactive, ref, watch } from 'vue'; import { onMounted, reactive, ref, shallowRef, toRaw, watch } from 'vue';
import { useIBPDrawStore } from '../stores/ibp-draw-store'; import { useIBPDrawStore } from '../stores/ibp-draw-store';
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import { IBPButton } from 'src/graphics/IBPButton/IBPButton'; import { IBPButton } from 'src/graphics/IBPButton/IBPButton';
@ -7,8 +7,15 @@ import { IbpAlarm } from 'src/graphics/ibpAlarm/IbpAlarm';
import { IbpKey } from 'src/graphics/ibpKey/IbpKey'; import { IbpKey } from 'src/graphics/ibpKey/IbpKey';
import { Arrow } from 'src/graphics/arrow/Arrow'; import { Arrow } from 'src/graphics/arrow/Arrow';
import { TextContent } from 'src/graphics/textContent/TextContent'; import { TextContent } from 'src/graphics/textContent/TextContent';
import { getIBPDrawApp, saveIBPDrawToServer } from 'src/drawApp/ibpDrawApp'; import {
getIBPDrawApp,
saveIBPDrawToServer,
loadUniqueIdPrefix,
setUniqueIdPrefix,
saveIBPDrawDatas,
} from 'src/drawApp/ibpDrawApp';
import IbpDrawProperties from 'src/components/draw-app/IbpDrawProperties.vue'; import IbpDrawProperties from 'src/components/draw-app/IbpDrawProperties.vue';
import { ibpGraphicData } from 'src/protos/ibpGraphics';
const ibpDrawStore = useIBPDrawStore(); const ibpDrawStore = useIBPDrawStore();
const route = useRoute(); const route = useRoute();
@ -119,6 +126,20 @@ function saveData() {
saveIBPDrawToServer(app); saveIBPDrawToServer(app);
} }
} }
const isPrefixDialogOpen = ref(false);
const uniqueIdPrefix = ref(new ibpGraphicData.UniqueIdType().toObject());
function openUniqueIdPrefixDialog() {
isPrefixDialogOpen.value = true;
uniqueIdPrefix.value = loadUniqueIdPrefix();
}
function saveUniqueIdPrefix() {
setUniqueIdPrefix(new ibpGraphicData.UniqueIdType(uniqueIdPrefix.value));
isPrefixDialogOpen.value = false;
saveData();
}
function backConfirm() { function backConfirm() {
router.go(-1); router.go(-1);
} }
@ -135,6 +156,13 @@ function backConfirm() {
<QItem clickable @click="saveData" v-close-popup> <QItem clickable @click="saveData" v-close-popup>
<QItemSection>保存</QItemSection> <QItemSection>保存</QItemSection>
</QItem> </QItem>
<QItem
clickable
@click="openUniqueIdPrefixDialog"
v-close-popup
>
<QItemSection>UniqueId配置</QItemSection>
</QItem>
</QList> </QList>
</QMenu> </QMenu>
</QBtn> </QBtn>
@ -170,4 +198,41 @@ function backConfirm() {
<div id="draw-app-container" class="overflow-hidden"></div> <div id="draw-app-container" class="overflow-hidden"></div>
</QPageContainer> </QPageContainer>
</QLayout> </QLayout>
<QDialog
v-model="isPrefixDialogOpen"
persistent
transition-show="scale"
transition-hide="scale"
>
<QCard style="width: 300px">
<QCardSection>
<div class="text-h6">UniqueId配置</div>
</QCardSection>
<QCardSection>
<QInput
outlined
label="所属城市"
v-model="uniqueIdPrefix.city"
:rules="[(val) => val.trim() != '' || '城市不能为空']"
/>
<QInput
outlined
label="线路号"
v-model="uniqueIdPrefix.lineId"
:rules="[(val) => val.trim() != '' || '线路号不能为空']"
/>
<QInput
outlined
label="所属车站"
v-model="uniqueIdPrefix.belongsStation"
:rules="[(val) => val.trim() != '' || '所属车站不能为空']"
/>
</QCardSection>
<QCardActions align="right">
<QBtn color="primary" label="提交" @click="saveUniqueIdPrefix()" />
<QBtn label="取消" v-close-popup />
</QCardActions>
</QCard>
</QDialog>
</template> </template>

View File

@ -15,6 +15,7 @@ export namespace ibpGraphicData {
ibpKeys?: IbpKey[]; ibpKeys?: IbpKey[];
ibpArrows?: IbpArrow[]; ibpArrows?: IbpArrow[];
IBPTexts?: IBPText[]; IBPTexts?: IBPText[];
UniqueIdPrefix?: UniqueIdType;
}) { }) {
super(); super();
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [2, 3, 4, 5, 6], this.#one_of_decls); pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [2, 3, 4, 5, 6], this.#one_of_decls);
@ -37,6 +38,9 @@ export namespace ibpGraphicData {
if ("IBPTexts" in data && data.IBPTexts != undefined) { if ("IBPTexts" in data && data.IBPTexts != undefined) {
this.IBPTexts = data.IBPTexts; this.IBPTexts = data.IBPTexts;
} }
if ("UniqueIdPrefix" in data && data.UniqueIdPrefix != undefined) {
this.UniqueIdPrefix = data.UniqueIdPrefix;
}
} }
} }
get canvas() { get canvas() {
@ -78,6 +82,15 @@ export namespace ibpGraphicData {
set IBPTexts(value: IBPText[]) { set IBPTexts(value: IBPText[]) {
pb_1.Message.setRepeatedWrapperField(this, 6, value); pb_1.Message.setRepeatedWrapperField(this, 6, value);
} }
get UniqueIdPrefix() {
return pb_1.Message.getWrapperField(this, UniqueIdType, 7) as UniqueIdType;
}
set UniqueIdPrefix(value: UniqueIdType) {
pb_1.Message.setWrapperField(this, 7, value);
}
get has_UniqueIdPrefix() {
return pb_1.Message.getField(this, 7) != null;
}
static fromObject(data: { static fromObject(data: {
canvas?: ReturnType<typeof dependency_1.graphicData.Canvas.prototype.toObject>; canvas?: ReturnType<typeof dependency_1.graphicData.Canvas.prototype.toObject>;
ibpButtons?: ReturnType<typeof IBPButton.prototype.toObject>[]; ibpButtons?: ReturnType<typeof IBPButton.prototype.toObject>[];
@ -85,6 +98,7 @@ export namespace ibpGraphicData {
ibpKeys?: ReturnType<typeof IbpKey.prototype.toObject>[]; ibpKeys?: ReturnType<typeof IbpKey.prototype.toObject>[];
ibpArrows?: ReturnType<typeof IbpArrow.prototype.toObject>[]; ibpArrows?: ReturnType<typeof IbpArrow.prototype.toObject>[];
IBPTexts?: ReturnType<typeof IBPText.prototype.toObject>[]; IBPTexts?: ReturnType<typeof IBPText.prototype.toObject>[];
UniqueIdPrefix?: ReturnType<typeof UniqueIdType.prototype.toObject>;
}): IBPGraphicStorage { }): IBPGraphicStorage {
const message = new IBPGraphicStorage({}); const message = new IBPGraphicStorage({});
if (data.canvas != null) { if (data.canvas != null) {
@ -105,6 +119,9 @@ export namespace ibpGraphicData {
if (data.IBPTexts != null) { if (data.IBPTexts != null) {
message.IBPTexts = data.IBPTexts.map(item => IBPText.fromObject(item)); message.IBPTexts = data.IBPTexts.map(item => IBPText.fromObject(item));
} }
if (data.UniqueIdPrefix != null) {
message.UniqueIdPrefix = UniqueIdType.fromObject(data.UniqueIdPrefix);
}
return message; return message;
} }
toObject() { toObject() {
@ -115,6 +132,7 @@ export namespace ibpGraphicData {
ibpKeys?: ReturnType<typeof IbpKey.prototype.toObject>[]; ibpKeys?: ReturnType<typeof IbpKey.prototype.toObject>[];
ibpArrows?: ReturnType<typeof IbpArrow.prototype.toObject>[]; ibpArrows?: ReturnType<typeof IbpArrow.prototype.toObject>[];
IBPTexts?: ReturnType<typeof IBPText.prototype.toObject>[]; IBPTexts?: ReturnType<typeof IBPText.prototype.toObject>[];
UniqueIdPrefix?: ReturnType<typeof UniqueIdType.prototype.toObject>;
} = {}; } = {};
if (this.canvas != null) { if (this.canvas != null) {
data.canvas = this.canvas.toObject(); data.canvas = this.canvas.toObject();
@ -134,6 +152,9 @@ export namespace ibpGraphicData {
if (this.IBPTexts != null) { if (this.IBPTexts != null) {
data.IBPTexts = this.IBPTexts.map((item: IBPText) => item.toObject()); data.IBPTexts = this.IBPTexts.map((item: IBPText) => item.toObject());
} }
if (this.UniqueIdPrefix != null) {
data.UniqueIdPrefix = this.UniqueIdPrefix.toObject();
}
return data; return data;
} }
serialize(): Uint8Array; serialize(): Uint8Array;
@ -152,6 +173,8 @@ export namespace ibpGraphicData {
writer.writeRepeatedMessage(5, this.ibpArrows, (item: IbpArrow) => item.serialize(writer)); writer.writeRepeatedMessage(5, this.ibpArrows, (item: IbpArrow) => item.serialize(writer));
if (this.IBPTexts.length) if (this.IBPTexts.length)
writer.writeRepeatedMessage(6, this.IBPTexts, (item: IBPText) => item.serialize(writer)); writer.writeRepeatedMessage(6, this.IBPTexts, (item: IBPText) => item.serialize(writer));
if (this.has_UniqueIdPrefix)
writer.writeMessage(7, this.UniqueIdPrefix, () => this.UniqueIdPrefix.serialize(writer));
if (!w) if (!w)
return writer.getResultBuffer(); return writer.getResultBuffer();
} }
@ -179,6 +202,9 @@ export namespace ibpGraphicData {
case 6: case 6:
reader.readMessage(message.IBPTexts, () => pb_1.Message.addToRepeatedWrapperField(message, 6, IBPText.deserialize(reader), IBPText)); reader.readMessage(message.IBPTexts, () => pb_1.Message.addToRepeatedWrapperField(message, 6, IBPText.deserialize(reader), IBPText));
break; break;
case 7:
reader.readMessage(message.UniqueIdPrefix, () => message.UniqueIdPrefix = UniqueIdType.deserialize(reader));
break;
default: reader.skipField(); default: reader.skipField();
} }
} }
@ -893,4 +919,117 @@ export namespace ibpGraphicData {
return IbpArrow.deserialize(bytes); return IbpArrow.deserialize(bytes);
} }
} }
export class UniqueIdType extends pb_1.Message {
#one_of_decls: number[][] = [];
constructor(data?: any[] | {
city?: string;
lineId?: string;
belongsStation?: string;
}) {
super();
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
if (!Array.isArray(data) && typeof data == "object") {
if ("city" in data && data.city != undefined) {
this.city = data.city;
}
if ("lineId" in data && data.lineId != undefined) {
this.lineId = data.lineId;
}
if ("belongsStation" in data && data.belongsStation != undefined) {
this.belongsStation = data.belongsStation;
}
}
}
get city() {
return pb_1.Message.getFieldWithDefault(this, 1, "") as string;
}
set city(value: string) {
pb_1.Message.setField(this, 1, value);
}
get lineId() {
return pb_1.Message.getFieldWithDefault(this, 2, "") as string;
}
set lineId(value: string) {
pb_1.Message.setField(this, 2, value);
}
get belongsStation() {
return pb_1.Message.getFieldWithDefault(this, 3, "") as string;
}
set belongsStation(value: string) {
pb_1.Message.setField(this, 3, value);
}
static fromObject(data: {
city?: string;
lineId?: string;
belongsStation?: string;
}): UniqueIdType {
const message = new UniqueIdType({});
if (data.city != null) {
message.city = data.city;
}
if (data.lineId != null) {
message.lineId = data.lineId;
}
if (data.belongsStation != null) {
message.belongsStation = data.belongsStation;
}
return message;
}
toObject() {
const data: {
city?: string;
lineId?: string;
belongsStation?: string;
} = {};
if (this.city != null) {
data.city = this.city;
}
if (this.lineId != null) {
data.lineId = this.lineId;
}
if (this.belongsStation != null) {
data.belongsStation = this.belongsStation;
}
return data;
}
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
const writer = w || new pb_1.BinaryWriter();
if (this.city.length)
writer.writeString(1, this.city);
if (this.lineId.length)
writer.writeString(2, this.lineId);
if (this.belongsStation.length)
writer.writeString(3, this.belongsStation);
if (!w)
return writer.getResultBuffer();
}
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): UniqueIdType {
const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new UniqueIdType();
while (reader.nextField()) {
if (reader.isEndGroup())
break;
switch (reader.getFieldNumber()) {
case 1:
message.city = reader.readString();
break;
case 2:
message.lineId = reader.readString();
break;
case 3:
message.belongsStation = reader.readString();
break;
default: reader.skipField();
}
}
return message;
}
serializeBinary(): Uint8Array {
return this.serialize();
}
static deserializeBinary(bytes: Uint8Array): UniqueIdType {
return UniqueIdType.deserialize(bytes);
}
}
} }

View File

@ -1,6 +1,7 @@
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import { getIBPDrawApp, initIBPDrawApp } from 'src/drawApp/ibpDrawApp'; import { getIBPDrawApp, initIBPDrawApp } from 'src/drawApp/ibpDrawApp';
import { DrawAssistant, IDrawApp, IJlCanvas, JlGraphic } from 'src/jl-graphic'; import { DrawAssistant, IDrawApp, IJlCanvas, JlGraphic } from 'src/jl-graphic';
import { markRaw } from 'vue';
export const useIBPDrawStore = defineStore('ibpDraw', { export const useIBPDrawStore = defineStore('ibpDraw', {
state: () => ({ state: () => ({
@ -60,7 +61,7 @@ export const useIBPDrawStore = defineStore('ibpDraw', {
} }
}); });
app.on('graphicselectedchange', () => { app.on('graphicselectedchange', () => {
this.selectedGraphics = app.selectedGraphics; this.selectedGraphics = markRaw(app.selectedGraphics);
}); });
this.selectedGraphics = []; this.selectedGraphics = [];
return app; return app;