Squashed commit of the following:
All checks were successful
local-test-CICD / Docker-Build (push) Successful in 2m29s
All checks were successful
local-test-CICD / Docker-Build (push) Successful in 2m29s
commit888bbc83d6
Author: joylink_zhaoerwei <Bob_Engineer@163.com> Date: Thu Sep 26 13:08:07 2024 +0800 用户管理+绘制管理的userName commit320c1e92cc
Author: joylink_zhaoerwei <Bob_Engineer@163.com> Date: Wed Sep 25 14:54:46 2024 +0800 新的ISCS数据结构实现加载赞提 commitdede7f400f
Author: joylink_fanyuhong <18706759286@163.com> Date: Wed Sep 25 10:37:26 2024 +0800 绘图工具调整 commit4adcfacc12
Author: joylink_zhaoerwei <Bob_Engineer@163.com> Date: Tue Sep 24 16:42:11 2024 +0800 增加更多筛选项 commit5888422322
Author: joylink_zhaoerwei <Bob_Engineer@163.com> Date: Tue Sep 24 14:22:31 2024 +0800 Squashed commit of the following: commit27fb1ee4ea
Author: joylink_fanyuhong <18706759286@163.com> Date: Tue Sep 24 14:05:41 2024 +0800 报错调整 commit069615d05d
Author: joylink_fanyuhong <18706759286@163.com> Date: Tue Sep 24 14:04:30 2024 +0800 代码调整 commit66c4ac33b3
Merge:107d8a5
b267859
Author: shengxuqiang <shengxuqiang@joylink.club> Date: Tue Sep 24 12:09:11 2024 +0800 Merge pull request '修改打包目录配置' (#3) from develop into local-test Reviewed-on: joylink/rtss-simulation-app-client#3 commit107d8a50f1
Merge:75797eb
b01ee7c
Author: shengxuqiang <shengxuqiang@joylink.club> Date: Tue Sep 24 11:59:24 2024 +0800 Merge pull request '添加local-test环境打包配置' (#2) from develop into local-test Reviewed-on: joylink/rtss-simulation-app-client#2 commit75797ebc40
Merge:ff65d38
1a4ae38
Author: shengxuqiang <shengxuqiang@joylink.club> Date: Tue Sep 24 11:52:28 2024 +0800 Merge pull request '添加local-test分支CICD配置' (#1) from develop into local-test Reviewed-on: joylink/rtss-simulation-app-client#1 commit4f7ba40f3e
Author: joylink_zhaoerwei <Bob_Engineer@163.com> Date: Tue Sep 24 13:21:29 2024 +0800 目录调整
This commit is contained in:
parent
27fb1ee4ea
commit
6eb65ce531
@ -21,6 +21,14 @@ export const iscsStyleOption = [
|
||||
},
|
||||
];
|
||||
|
||||
export const searchTscsStyleOption = [
|
||||
{
|
||||
label: '全部',
|
||||
value: IscsStyle.UNKNOWN,
|
||||
},
|
||||
...iscsStyleOption,
|
||||
];
|
||||
|
||||
export interface DraftItem {
|
||||
id: number;
|
||||
name: string;
|
||||
@ -33,8 +41,11 @@ export interface DraftItem {
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
defaultReleaseDataName: string;
|
||||
userName: string;
|
||||
}
|
||||
export interface IscsDataOptions {
|
||||
style: IscsStyle;
|
||||
}
|
||||
|
||||
export interface PagingQueryParams {
|
||||
paging: {
|
||||
page: number;
|
||||
@ -42,9 +53,10 @@ export interface PagingQueryParams {
|
||||
};
|
||||
query: {
|
||||
dataType: DraftDataType;
|
||||
userId?: number;
|
||||
options?: IscsDataOptions;
|
||||
name?: string;
|
||||
isShared?: boolean;
|
||||
userId?: number;
|
||||
};
|
||||
}
|
||||
export interface DraftIscsDataDto {
|
||||
@ -52,9 +64,6 @@ export interface DraftIscsDataDto {
|
||||
options: IscsDataOptions;
|
||||
}
|
||||
|
||||
export interface IscsDataOptions {
|
||||
style: IscsStyle;
|
||||
}
|
||||
export async function draftPageQuery(
|
||||
params: PagingQueryParams
|
||||
): Promise<PageDto<DraftIscsDataDto>> {
|
||||
@ -63,7 +72,7 @@ export async function draftPageQuery(
|
||||
userDraftIscsDataPaging(paging: $paging, query: $query) {
|
||||
total
|
||||
items {
|
||||
draftData {id name dataType userId defaultReleaseDataId createdAt updatedAt isShared defaultReleaseDataName}
|
||||
draftData {id name dataType userName defaultReleaseDataId createdAt updatedAt isShared defaultReleaseDataName}
|
||||
options {style}
|
||||
}
|
||||
}
|
||||
@ -84,7 +93,7 @@ export async function sharedDraftPageQuery(
|
||||
sharedDraftIscsDataPaging(paging: $paging, query: $query) {
|
||||
total
|
||||
items {
|
||||
draftData {id name dataType userId defaultReleaseDataId createdAt updatedAt isShared defaultReleaseDataName}
|
||||
draftData {id name dataType userName defaultReleaseDataId createdAt updatedAt isShared defaultReleaseDataName}
|
||||
options {style}
|
||||
}
|
||||
}
|
||||
@ -208,10 +217,7 @@ export function saveDraft(variables: { id: number; data: string }) {
|
||||
* @param variables
|
||||
* @returns
|
||||
*/
|
||||
export async function saveAsDraft(variables: {
|
||||
id: number;
|
||||
name: string;
|
||||
}) {
|
||||
export async function saveAsDraft(variables: { id: number; name: string }) {
|
||||
const mutation = `
|
||||
mutation saveAsNewDraftData($id: Int,$name: String) {
|
||||
saveAsNewDraftData(id: $id,name: $name){
|
||||
|
@ -14,6 +14,7 @@ export interface PublishItem {
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
description: string;
|
||||
userName: string;
|
||||
}
|
||||
|
||||
interface PagingQueryParams {
|
||||
@ -26,6 +27,7 @@ interface PagingQueryParams {
|
||||
userId?: number;
|
||||
name?: string;
|
||||
isPublished?: boolean;
|
||||
options?: IscsDataOptions;
|
||||
};
|
||||
}
|
||||
export interface PublishIscsDataDto {
|
||||
@ -110,7 +112,7 @@ export async function publishPageQuery(
|
||||
releaseIscsDataPaging(page: $page, query: $query) {
|
||||
total
|
||||
items {
|
||||
releaseData {id name dataType usedVersionId userId isPublished createdAt updatedAt description }
|
||||
releaseData {id name dataType usedVersionId userName isPublished createdAt updatedAt description }
|
||||
options {style}
|
||||
}
|
||||
}
|
||||
@ -162,7 +164,7 @@ export async function getPublishHistoryById(variables: {
|
||||
releaseDataVersionPaging(dataId: $dataId, page: $page) {
|
||||
total
|
||||
items {
|
||||
id releaseDataId description userId createdAt
|
||||
id releaseDataId description userName createdAt
|
||||
}
|
||||
}
|
||||
}
|
||||
|
83
src/api/UserApi.ts
Normal file
83
src/api/UserApi.ts
Normal file
@ -0,0 +1,83 @@
|
||||
import { api } from 'src/boot/axios';
|
||||
import { PageDto } from './ApiCommon';
|
||||
|
||||
export interface User {
|
||||
id: string;
|
||||
name: string;
|
||||
mobile: string;
|
||||
email: string;
|
||||
roles: [];
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface PagingQueryParams {
|
||||
page: {
|
||||
page: number;
|
||||
itemsPerPage: number;
|
||||
};
|
||||
query: {
|
||||
id?: string;
|
||||
name?: string;
|
||||
mobile?: string;
|
||||
email?: string;
|
||||
roles?: [];
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询用户信息
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export async function userPageQuery(
|
||||
params: PagingQueryParams
|
||||
): Promise<PageDto<User>> {
|
||||
const query = `
|
||||
query userPaging($page: PageQueryDto, $query: UserQueryDto) {
|
||||
userPaging(page: $page, query: $query) {
|
||||
total
|
||||
items {
|
||||
id name mobile email roles createdAt updatedAt
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
const response = await api.post('', {
|
||||
query,
|
||||
variables: params,
|
||||
});
|
||||
return response.data.data.userPaging;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取获取用户信息
|
||||
*/
|
||||
export async function getLoginUserInfo() {
|
||||
const query = `
|
||||
query loginUserInfo {
|
||||
loginUserInfo{
|
||||
id
|
||||
}
|
||||
}
|
||||
`;
|
||||
const response = await api.post('', {
|
||||
query,
|
||||
});
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步用户
|
||||
*/
|
||||
export async function syncUsersInfo() {
|
||||
const mutation = `
|
||||
mutation syncUser {
|
||||
syncUser
|
||||
}
|
||||
`;
|
||||
const response = await api.post('', {
|
||||
query: mutation,
|
||||
});
|
||||
return response.data.data;
|
||||
}
|
@ -84,7 +84,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { QBar, useDialogPluginComponent } from 'quasar';
|
||||
import { ref, onMounted, onUnmounted, reactive } from 'vue';
|
||||
import { ref, onMounted, onUnmounted, reactive, watch } from 'vue';
|
||||
import ResizableDivWidth from './ResizableDivWidth.vue';
|
||||
import ResizableDivHeight from './ResizableDivHeight.vue';
|
||||
|
||||
@ -121,6 +121,14 @@ const props = withDefaults(
|
||||
}
|
||||
);
|
||||
|
||||
watch(
|
||||
() => props.height,
|
||||
() => {
|
||||
dialogHeight.value = props.height;
|
||||
lastDialogHeight = props.height;
|
||||
}
|
||||
);
|
||||
|
||||
const { dialogRef, onDialogHide /* , onDialogCancel, onDialogOK */ } =
|
||||
useDialogPluginComponent();
|
||||
|
||||
|
@ -57,26 +57,68 @@ export function initIscsDrawApp(): IDrawApp {
|
||||
},
|
||||
})
|
||||
);
|
||||
app.on('destroy', async () => {
|
||||
resetData();
|
||||
});
|
||||
return drawApp;
|
||||
}
|
||||
|
||||
let hasLoadData = false;
|
||||
let base64 = '';
|
||||
export async function loadDrawDatas(): Promise<IGraphicStorage> {
|
||||
const drawStore = useDrawStore();
|
||||
const id = drawStore.draftId;
|
||||
if (!id) {
|
||||
throw new Error('获取数据异常:为获取到草稿地图ID');
|
||||
}
|
||||
const { data: base64 } = await getDraft(id);
|
||||
|
||||
if (!hasLoadData) {
|
||||
base64 = (await getDraft(id)).data;
|
||||
hasLoadData = true;
|
||||
}
|
||||
if (base64) {
|
||||
const storage = iscsGraphicData.IscsGraphicStorage.deserialize(
|
||||
storage = iscsGraphicData.IscsGraphicStorage.deserialize(
|
||||
toUint8Array(base64)
|
||||
);
|
||||
const datas = loadCommonDrawDatas(storage);
|
||||
storage.cctvButtons.forEach((cctvButton) => {
|
||||
datas.push(new CCTVButtonData(cctvButton));
|
||||
});
|
||||
|
||||
let datas = [];
|
||||
let canvasProperty;
|
||||
|
||||
switch (drawStore.selectSubmenuAndStation.submenu) {
|
||||
case '站台报警':
|
||||
for (let i = 0; i < storage.fasPlatformAlarmStorages.length; i++) {
|
||||
const fasPlatformAlarm = storage.fasPlatformAlarmStorages[i];
|
||||
if (
|
||||
fasPlatformAlarm.stationName ==
|
||||
drawStore.selectSubmenuAndStation.station
|
||||
) {
|
||||
canvasProperty = fasPlatformAlarm.canvas;
|
||||
datas = loadCommonDrawDatas(fasPlatformAlarm);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '车站控制':
|
||||
for (let i = 0; i < storage.cctvOfStationControlStorages.length; i++) {
|
||||
const ctvOfStationControl = storage.cctvOfStationControlStorages[i];
|
||||
if (
|
||||
ctvOfStationControl.stationName ==
|
||||
drawStore.selectSubmenuAndStation.station
|
||||
) {
|
||||
canvasProperty = ctvOfStationControl.canvas;
|
||||
datas = loadCommonDrawDatas(ctvOfStationControl);
|
||||
ctvOfStationControl.cctvButtons.forEach((cctvButton) => {
|
||||
datas.push(new CCTVButtonData(cctvButton));
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return {
|
||||
canvasProperty: storage.canvas,
|
||||
canvasProperty,
|
||||
datas: datas,
|
||||
};
|
||||
} else {
|
||||
@ -86,12 +128,69 @@ export async function loadDrawDatas(): Promise<IGraphicStorage> {
|
||||
}
|
||||
}
|
||||
|
||||
const stationOption = ['会展中心', '火车站', '丈八一路'];
|
||||
|
||||
let storage: iscsGraphicData.IscsGraphicStorage;
|
||||
export function saveDrawDatas(app: IDrawApp) {
|
||||
let storage = new iscsGraphicData.IscsGraphicStorage();
|
||||
storage = saveCommonDrawDatas(
|
||||
app,
|
||||
storage
|
||||
) as iscsGraphicData.IscsGraphicStorage;
|
||||
const drawStore = useDrawStore();
|
||||
if (!storage) {
|
||||
storage = new iscsGraphicData.IscsGraphicStorage();
|
||||
}
|
||||
if (!storage?.fasPlatformAlarmStorages.length) {
|
||||
stationOption.forEach((station) =>
|
||||
storage?.fasPlatformAlarmStorages.push(
|
||||
new iscsGraphicData.FASPlatformAlarmStorage({
|
||||
stationName: station,
|
||||
})
|
||||
)
|
||||
);
|
||||
}
|
||||
if (!storage?.cctvOfStationControlStorages.length) {
|
||||
stationOption.forEach((station) =>
|
||||
storage?.cctvOfStationControlStorages.push(
|
||||
new iscsGraphicData.CCTVOfStationControlStorage({
|
||||
stationName: station,
|
||||
})
|
||||
)
|
||||
);
|
||||
}
|
||||
switch (drawStore.selectSubmenuAndStation.submenu) {
|
||||
case '站台报警':
|
||||
for (let i = 0; i < storage.fasPlatformAlarmStorages.length; i++) {
|
||||
const asPlatformAlarm = storage.fasPlatformAlarmStorages[i];
|
||||
if (
|
||||
asPlatformAlarm.stationName ==
|
||||
drawStore.selectSubmenuAndStation.station
|
||||
) {
|
||||
const fasStorage = saveCommonDrawDatas(
|
||||
app,
|
||||
asPlatformAlarm
|
||||
) as iscsGraphicData.FASPlatformAlarmStorage;
|
||||
storage.fasPlatformAlarmStorages[i] = fasStorage;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '车站控制':
|
||||
for (let i = 0; i < storage.cctvOfStationControlStorages.length; i++) {
|
||||
const cctvOfStationControl = storage.cctvOfStationControlStorages[i];
|
||||
if (
|
||||
cctvOfStationControl.stationName ==
|
||||
drawStore.selectSubmenuAndStation.station
|
||||
) {
|
||||
const cctvStorage = saveCommonDrawDatas(
|
||||
app,
|
||||
cctvOfStationControl
|
||||
) as iscsGraphicData.CCTVOfStationControlStorage;
|
||||
storage.cctvOfStationControlStorages[i] = cctvStorage;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
const graphics = app.queryStore.getAllGraphics();
|
||||
/* graphics.forEach((g) => {
|
||||
if (TrackSection.Type === g.type) {
|
||||
@ -102,3 +201,9 @@ export function saveDrawDatas(app: IDrawApp) {
|
||||
const base64 = fromUint8Array(storage.serialize());
|
||||
return base64;
|
||||
}
|
||||
|
||||
function resetData() {
|
||||
storage = new iscsGraphicData.IscsGraphicStorage();
|
||||
hasLoadData = false;
|
||||
base64 = '';
|
||||
}
|
||||
|
@ -35,6 +35,12 @@
|
||||
</q-list>
|
||||
</q-btn-dropdown>
|
||||
</template>
|
||||
<q-btn-toggle
|
||||
v-model="selectStationName"
|
||||
toggle-color="orange"
|
||||
:options="stationOption"
|
||||
@update:model-value="selectedStation"
|
||||
/>
|
||||
</q-toolbar-title>
|
||||
<q-btn square color="purple" style="margin-right: 10px" icon="search">
|
||||
<q-popup-edit
|
||||
@ -103,12 +109,12 @@
|
||||
<draggable-dialog
|
||||
seamless
|
||||
title="绘制工具"
|
||||
:width="230"
|
||||
:height="50"
|
||||
:width="130"
|
||||
:height="drawDialogHeight"
|
||||
v-model="showDrawTool"
|
||||
canNotClose
|
||||
>
|
||||
<q-btn-toggle
|
||||
<!-- <q-btn-toggle
|
||||
v-model="selectUtil"
|
||||
color="brown"
|
||||
text-color="white"
|
||||
@ -116,15 +122,22 @@
|
||||
toggle-text-color="black"
|
||||
:options="utilsOption"
|
||||
@update:model-value="drawSelect"
|
||||
>
|
||||
<template
|
||||
v-for="(ctl, idx) in utilsOption"
|
||||
:key="idx"
|
||||
v-slot:[ctl.value]
|
||||
>
|
||||
<q-tooltip>{{ ctl.tip }}</q-tooltip>
|
||||
> -->
|
||||
<div class="row wrap">
|
||||
<template v-for="(ctl, idx) in utilsOption" :key="idx">
|
||||
<q-btn
|
||||
square
|
||||
style="margin: 4px"
|
||||
color="brown"
|
||||
@click="drawSelect(ctl.value)"
|
||||
:icon="ctl.icon"
|
||||
>
|
||||
</q-btn>
|
||||
</template>
|
||||
</q-btn-toggle>
|
||||
</div>
|
||||
|
||||
<!-- <q-tooltip>{{ ctl.tip }}</q-tooltip> -->
|
||||
<!-- </q-btn-toggle> -->
|
||||
</draggable-dialog>
|
||||
<q-resize-observer @resize="onResize" />
|
||||
</q-layout>
|
||||
@ -132,7 +145,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import DrawProperties from 'src/components/draw-app/IscsDrawProperties.vue';
|
||||
import { onMounted, reactive, ref, watch } from 'vue';
|
||||
import { onMounted, onUnmounted, reactive, ref, watch } from 'vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { useQuasar } from 'quasar';
|
||||
import { useDrawStore } from 'src/stores/draw-store';
|
||||
@ -153,6 +166,7 @@ const router = useRouter();
|
||||
const searchId = ref(0);
|
||||
const drawStore = useDrawStore();
|
||||
const showDrawTool = ref(true);
|
||||
const drawDialogHeight = ref(44);
|
||||
|
||||
watch(
|
||||
() => drawStore.drawMode,
|
||||
@ -192,9 +206,10 @@ function toggleRightDrawer() {
|
||||
//工具栏所用
|
||||
const selectUtil = ref();
|
||||
const utilsOption: ControlItem[] = reactive([]);
|
||||
const drawSelect = (item: string) => {
|
||||
|
||||
function drawSelect(item: string) {
|
||||
drawStore.getDrawApp().interactionPlugin(item).resume();
|
||||
};
|
||||
}
|
||||
class ControlItem {
|
||||
value: string;
|
||||
slot: string;
|
||||
@ -250,6 +265,7 @@ onMounted(() => {
|
||||
);
|
||||
}
|
||||
});
|
||||
drawDialogHeight.value = 44 * Math.ceil(utilsOption.length / 2);
|
||||
});
|
||||
|
||||
const canvasWidth = ref(0);
|
||||
@ -309,11 +325,31 @@ async function saveAs(name: string) {
|
||||
}
|
||||
|
||||
function onTopMenuClick(name: string) {
|
||||
console.log(name);
|
||||
drawStore.clickSubmenuName = name;
|
||||
drawStore.selectSubmenuAndStation.submenu = name;
|
||||
forceReloadDate();
|
||||
}
|
||||
|
||||
function forceReloadDate() {
|
||||
const drawApp = drawStore.getDrawApp();
|
||||
const graphics = drawApp.queryStore.getAllGraphics();
|
||||
graphics.forEach((graphic) => (graphic.visible = false));
|
||||
drawApp.updateSelected();
|
||||
drawApp.forceReload();
|
||||
}
|
||||
|
||||
//车站切换
|
||||
const selectStationName = ref('会展中心');
|
||||
const stationOption = [
|
||||
{ label: '会展中心', value: '会展中心' },
|
||||
{ label: '火车站', value: '火车站' },
|
||||
{ label: '丈八一路', value: '丈八一路' },
|
||||
];
|
||||
function selectedStation(name: string) {
|
||||
drawStore.selectSubmenuAndStation.station = name;
|
||||
forceReloadDate();
|
||||
}
|
||||
|
||||
onUnmounted(() => {
|
||||
drawStore.destroy();
|
||||
});
|
||||
</script>
|
||||
|
@ -126,12 +126,17 @@ import SysMenu from 'src/components/SysMenu.vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { clearJwtToken, saveJwtToken } from 'src/configs/TokenManage';
|
||||
import { Dialog } from 'quasar';
|
||||
import { getLoginUserInfo } from 'src/api/UserApi';
|
||||
import { useAuthStore } from 'src/stores/auth-store';
|
||||
|
||||
const route = useRoute();
|
||||
const authStore = useAuthStore();
|
||||
|
||||
onMounted(() => {
|
||||
onMounted(async () => {
|
||||
if (route.params.token) {
|
||||
saveJwtToken(route.params.token as string);
|
||||
const res = await getLoginUserInfo();
|
||||
authStore.setUserId(res.loginUserInfo.id);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -15,19 +15,35 @@
|
||||
@request="onRequest"
|
||||
>
|
||||
<template v-slot:top-right>
|
||||
<q-input
|
||||
dense
|
||||
debounce="1000"
|
||||
v-model="filter.name"
|
||||
label="名称"
|
||||
></q-input>
|
||||
<q-btn flat round color="primary" icon="search" />
|
||||
<q-btn
|
||||
color="primary"
|
||||
v-if="route.name == 'iscsDraft'"
|
||||
label="新建"
|
||||
@click="createFormShow = true"
|
||||
/>
|
||||
<div class="q-gutter-md q-mt-none row justify-center items-start">
|
||||
<q-input dense debounce="1000" v-model="filter.name" label="名称" />
|
||||
<q-select
|
||||
dense
|
||||
v-model="filter.iscsStyle"
|
||||
:options="searchTscsStyleOption"
|
||||
emit-value
|
||||
map-options
|
||||
options-dense
|
||||
class="ellipsis"
|
||||
label="ISCS风格"
|
||||
style="width: 130px"
|
||||
/>
|
||||
<q-select
|
||||
v-if="route.name == 'iscsDraft'"
|
||||
dense
|
||||
v-model="filter.isShared"
|
||||
:options="isSharedOption"
|
||||
class="ellipsis"
|
||||
label="共享相关"
|
||||
style="width: 130px"
|
||||
/>
|
||||
<q-btn
|
||||
color="primary"
|
||||
v-if="route.name == 'iscsDraft'"
|
||||
label="新建"
|
||||
@click="createFormShow = true"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:header-cell-name="props">
|
||||
<q-th :props="props">
|
||||
@ -249,6 +265,7 @@ import {
|
||||
sharedDraftPageQuery,
|
||||
PagingQueryParams,
|
||||
iscsStyleOption,
|
||||
searchTscsStyleOption,
|
||||
} from '../api/DraftApi';
|
||||
import { ApiError } from 'src/boot/axios';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
@ -261,7 +278,6 @@ import {
|
||||
} from 'src/api/PublishApi';
|
||||
import { useAuthStore } from 'src/stores/auth-store';
|
||||
import { PageDto } from 'src/api/ApiCommon';
|
||||
import { useDrawStore } from 'src/stores/draw-store';
|
||||
|
||||
const $q = useQuasar();
|
||||
const router = useRouter();
|
||||
@ -272,7 +288,6 @@ const props = withDefaults(
|
||||
{ sizeHeight: 500 }
|
||||
);
|
||||
const authStore = useAuthStore();
|
||||
const drawStore = useDrawStore();
|
||||
const route = useRoute();
|
||||
|
||||
const tableHeight = computed(() => {
|
||||
@ -300,9 +315,9 @@ const columnDefs: QTableColumn[] = [
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
name: 'userId',
|
||||
name: 'userName',
|
||||
label: '创建人',
|
||||
field: 'userId',
|
||||
field: 'userName',
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
@ -339,6 +354,8 @@ const tableRef = ref();
|
||||
const rows = reactive([]);
|
||||
const filter = reactive({
|
||||
name: '',
|
||||
iscsStyle: IscsStyle.UNKNOWN,
|
||||
isShared: '全部',
|
||||
});
|
||||
const loading = ref(false);
|
||||
const pagination = ref({
|
||||
@ -353,8 +370,6 @@ const pagination = ref({
|
||||
let allRequestData: DraftIscsDataDto[] = [];
|
||||
async function onRequest(props: any) {
|
||||
const { page, rowsPerPage } = props.pagination;
|
||||
const filter = props.filter;
|
||||
|
||||
loading.value = true;
|
||||
const variables: PagingQueryParams = {
|
||||
paging: {
|
||||
@ -363,9 +378,19 @@ async function onRequest(props: any) {
|
||||
},
|
||||
query: {
|
||||
dataType: DraftDataType.ISCS,
|
||||
name: filter.name,
|
||||
},
|
||||
};
|
||||
if (filter.name) {
|
||||
Object.assign(variables.query, { name: filter.name });
|
||||
}
|
||||
if (filter.iscsStyle) {
|
||||
Object.assign(variables.query, { options: { style: filter.iscsStyle } });
|
||||
}
|
||||
if (filter.isShared !== '全部') {
|
||||
Object.assign(variables.query, {
|
||||
isShared: filter.isShared == '共享' ? true : false,
|
||||
});
|
||||
}
|
||||
try {
|
||||
let response: PageDto<DraftIscsDataDto>;
|
||||
if (route.name == 'iscsDraft') {
|
||||
@ -402,6 +427,9 @@ function getTypeName(row: DraftItem) {
|
||||
return iscsStyleName || '';
|
||||
}
|
||||
|
||||
//查询相关
|
||||
const isSharedOption = ['全部', '共享', '不共享'];
|
||||
|
||||
//新建相关
|
||||
const createFormShow = ref(false);
|
||||
const createForm = reactive({
|
||||
@ -439,7 +467,6 @@ function onCreate() {
|
||||
|
||||
//编辑
|
||||
function goToPath(row: DraftItem) {
|
||||
drawStore.clickSubmenuName = '车站控制';
|
||||
let path = `/iscsPainting/${row.id}`;
|
||||
const iscsStyle = allRequestData.find((item) => item.draftData.id == row.id)
|
||||
.options.style;
|
||||
@ -621,6 +648,7 @@ const draftInfo = ref<DraftItem>({
|
||||
createdAt: '',
|
||||
updatedAt: '',
|
||||
defaultReleaseDataName: '',
|
||||
userName: '',
|
||||
});
|
||||
|
||||
const publishColumnDefs: QTableColumn[] = [
|
||||
|
@ -18,13 +18,28 @@
|
||||
@request="onRequest"
|
||||
>
|
||||
<template v-slot:top-right>
|
||||
<q-input
|
||||
dense
|
||||
debounce="1000"
|
||||
v-model="filter.name"
|
||||
label="名称"
|
||||
></q-input>
|
||||
<q-btn flat round color="primary" icon="search" />
|
||||
<div class="q-gutter-md q-mt-none row justify-center items-start">
|
||||
<q-input dense debounce="1000" v-model="filter.name" label="名称" />
|
||||
<q-select
|
||||
dense
|
||||
v-model="filter.iscsStyle"
|
||||
:options="searchTscsStyleOption"
|
||||
emit-value
|
||||
map-options
|
||||
options-dense
|
||||
class="ellipsis"
|
||||
label="ISCS风格"
|
||||
style="width: 130px"
|
||||
/>
|
||||
<q-select
|
||||
dense
|
||||
v-model="filter.isPublished"
|
||||
:options="isPublishedOption"
|
||||
class="ellipsis"
|
||||
label="上下架"
|
||||
style="width: 130px"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-slot:header-cell-name="props">
|
||||
@ -141,7 +156,12 @@ import {
|
||||
import { useRoute } from 'vue-router';
|
||||
import { ApiError } from 'src/boot/axios';
|
||||
import { nextTick } from 'process';
|
||||
import { DraftDataType, iscsStyleOption } from 'src/api/DraftApi';
|
||||
import {
|
||||
DraftDataType,
|
||||
IscsStyle,
|
||||
iscsStyleOption,
|
||||
searchTscsStyleOption,
|
||||
} from 'src/api/DraftApi';
|
||||
|
||||
const route = useRoute();
|
||||
const $q = useQuasar();
|
||||
@ -186,9 +206,9 @@ const columnDefs: QTableColumn[] = [
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
name: 'userId',
|
||||
name: 'userName',
|
||||
label: '发布人',
|
||||
field: 'userId',
|
||||
field: 'userName',
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
@ -210,6 +230,8 @@ const tableRef = ref();
|
||||
const rows = reactive([]);
|
||||
const filter = reactive({
|
||||
name: '',
|
||||
iscsStyle: IscsStyle.UNKNOWN,
|
||||
isPublished: '全部',
|
||||
});
|
||||
const loading = ref(false);
|
||||
const pagination = ref({
|
||||
@ -234,9 +256,19 @@ async function onRequest(props: any) {
|
||||
},
|
||||
query: {
|
||||
dataType: DraftDataType.ISCS,
|
||||
name: filter.name,
|
||||
},
|
||||
};
|
||||
if (filter.name) {
|
||||
Object.assign(variables.query, { name: filter.name });
|
||||
}
|
||||
if (filter.iscsStyle) {
|
||||
Object.assign(variables.query, { options: { style: filter.iscsStyle } });
|
||||
}
|
||||
if (filter.isPublished !== '全部') {
|
||||
Object.assign(variables.query, {
|
||||
isPublished: filter.isPublished == '上架' ? true : false,
|
||||
});
|
||||
}
|
||||
try {
|
||||
const response = await publishPageQuery(variables);
|
||||
pagination.value.rowsNumber = response.total;
|
||||
@ -268,6 +300,9 @@ function getTypeName(row: PublishItem) {
|
||||
return iscsStyleName || '';
|
||||
}
|
||||
|
||||
//查询相关
|
||||
const isPublishedOption = ['全部', '上架', '下架'];
|
||||
|
||||
//上下架
|
||||
function dataReleaseFn(row: PublishItem) {
|
||||
if (row.isPublished) {
|
||||
@ -402,13 +437,14 @@ const historyInfo = ref<PublishItem>({
|
||||
createdAt: '',
|
||||
updatedAt: '',
|
||||
description: '',
|
||||
userName: '',
|
||||
});
|
||||
|
||||
const historyColumnDefs: QTableColumn[] = [
|
||||
{
|
||||
name: 'userId',
|
||||
name: 'userName',
|
||||
label: '发布人',
|
||||
field: 'userId',
|
||||
field: 'userName',
|
||||
required: true,
|
||||
align: 'center',
|
||||
},
|
||||
|
200
src/pages/UserManage.vue
Normal file
200
src/pages/UserManage.vue
Normal file
@ -0,0 +1,200 @@
|
||||
<template>
|
||||
<div class="q-pa-md">
|
||||
<q-table
|
||||
ref="tableRef"
|
||||
title="用户列表"
|
||||
:style="{ height: tableHeight + 'px' }"
|
||||
class="my-sticky-virtscroll-table"
|
||||
:rows="rows"
|
||||
:columns="columnDefs"
|
||||
row-key="id"
|
||||
v-model:pagination="pagination"
|
||||
:rows-per-page-options="[10, 20, 50, 100]"
|
||||
:loading="loading"
|
||||
:filter="filter"
|
||||
binary-state-sort
|
||||
@request="onRequest"
|
||||
>
|
||||
<template v-slot:top-right>
|
||||
<div class="q-gutter-md q-mt-none row justify-center items-start">
|
||||
<q-input dense debounce="1000" v-model="filter.name" label="名称" />
|
||||
<q-select
|
||||
dense
|
||||
v-model="filter.roles"
|
||||
:options="rolesOptions"
|
||||
multiple
|
||||
emit-value
|
||||
map-options
|
||||
options-dense
|
||||
label="角色"
|
||||
style="min-width: 150px"
|
||||
/>
|
||||
<q-btn
|
||||
:disable="operateDisabled"
|
||||
color="primary"
|
||||
label="同步"
|
||||
@click="syncUsersInfoFn"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-slot:body-cell-roles="props">
|
||||
<q-td :props="props">
|
||||
<div class="q-gutter-sm row justify-center">
|
||||
<q-chip
|
||||
outline
|
||||
size="sm"
|
||||
color="primary"
|
||||
v-for="(item, index) in props.row.roles"
|
||||
:key="index"
|
||||
>
|
||||
{{ getRolesName(item) }}
|
||||
</q-chip>
|
||||
</div>
|
||||
</q-td>
|
||||
</template>
|
||||
</q-table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted, computed } from 'vue';
|
||||
import { useQuasar, type QTableColumn } from 'quasar';
|
||||
import {
|
||||
PagingQueryParams,
|
||||
userPageQuery,
|
||||
syncUsersInfo,
|
||||
} from '../api/UserApi';
|
||||
import { ApiError } from 'src/boot/axios';
|
||||
|
||||
const $q = useQuasar();
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
sizeHeight: number;
|
||||
}>(),
|
||||
{ sizeHeight: 500 }
|
||||
);
|
||||
const tableHeight = computed(() => {
|
||||
return props.sizeHeight - 32;
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tableRef.value.requestServerInteraction();
|
||||
});
|
||||
|
||||
const columnDefs: QTableColumn[] = [
|
||||
{ name: 'id', label: '用户ID', field: 'id', align: 'center' },
|
||||
{
|
||||
name: 'name',
|
||||
label: '用户名',
|
||||
field: 'name',
|
||||
required: true,
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
name: 'roles',
|
||||
label: '角色',
|
||||
field: 'roles',
|
||||
required: true,
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
name: 'mobile',
|
||||
label: '手机号',
|
||||
field: 'mobile',
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
name: 'email',
|
||||
label: '邮箱',
|
||||
field: 'email',
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
name: 'createdAt',
|
||||
label: '创建时间',
|
||||
field: (row) => new Date(row.createdAt).toLocaleString(),
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
name: 'updatedAt',
|
||||
label: '更新时间',
|
||||
field: (row) => new Date(row.updatedAt).toLocaleString(),
|
||||
align: 'center',
|
||||
},
|
||||
];
|
||||
|
||||
const tableRef = ref();
|
||||
const rows = reactive([]);
|
||||
const filter = reactive({
|
||||
name: '',
|
||||
roles: [],
|
||||
});
|
||||
const loading = ref(false);
|
||||
const pagination = ref({
|
||||
sortBy: 'desc',
|
||||
descending: false,
|
||||
page: 1,
|
||||
rowsPerPage: 10,
|
||||
rowsNumber: 10,
|
||||
});
|
||||
|
||||
// eslint-disable-next-line
|
||||
async function onRequest(props: any) {
|
||||
const { page, rowsPerPage } = props.pagination;
|
||||
const filter = props.filter;
|
||||
|
||||
loading.value = true;
|
||||
const variables: PagingQueryParams = {
|
||||
page: {
|
||||
page: page,
|
||||
itemsPerPage: rowsPerPage,
|
||||
},
|
||||
query: {},
|
||||
};
|
||||
if (filter.name) {
|
||||
Object.assign(variables.query, { name: filter.name });
|
||||
}
|
||||
if (filter.roles) {
|
||||
Object.assign(variables.query, { roles: filter.roles });
|
||||
}
|
||||
try {
|
||||
const response = await userPageQuery(variables);
|
||||
pagination.value.rowsNumber = response.total;
|
||||
pagination.value.page = page;
|
||||
pagination.value.rowsPerPage = rowsPerPage;
|
||||
rows.splice(0, rows.length, ...(response.items as []));
|
||||
} catch (err) {
|
||||
const error = err as ApiError;
|
||||
$q.notify({
|
||||
type: 'negative',
|
||||
message: error.title,
|
||||
});
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
const rolesOptions = [
|
||||
{ label: '管理员', value: 'ADMIN' },
|
||||
{ label: '用户', value: 'USER' },
|
||||
];
|
||||
function getRolesName(role: string) {
|
||||
for (let i = 0; i < rolesOptions.length; i++) {
|
||||
if (rolesOptions[i].value == role) {
|
||||
return rolesOptions[i].label;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const operateDisabled = ref(false);
|
||||
async function syncUsersInfoFn() {
|
||||
operateDisabled.value = true;
|
||||
const res = await syncUsersInfo();
|
||||
operateDisabled.value = false;
|
||||
if (res.syncUser) {
|
||||
tableRef.value.requestServerInteraction();
|
||||
}
|
||||
}
|
||||
</script>
|
@ -9,112 +9,55 @@ export namespace iscsGraphicData {
|
||||
export class IscsGraphicStorage extends pb_1.Message {
|
||||
#one_of_decls: number[][] = [];
|
||||
constructor(data?: any[] | {
|
||||
canvas?: dependency_1.common.Canvas;
|
||||
arrows?: Arrow[];
|
||||
iscsTexts?: IscsText[];
|
||||
rects?: Rect[];
|
||||
cctvButtons?: CCTVButton[];
|
||||
cctvOfStationControlStorages?: CCTVOfStationControlStorage[];
|
||||
fasPlatformAlarmStorages?: FASPlatformAlarmStorage[];
|
||||
}) {
|
||||
super();
|
||||
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [2, 3, 4, 5], this.#one_of_decls);
|
||||
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [1, 2], this.#one_of_decls);
|
||||
if (!Array.isArray(data) && typeof data == "object") {
|
||||
if ("canvas" in data && data.canvas != undefined) {
|
||||
this.canvas = data.canvas;
|
||||
if ("cctvOfStationControlStorages" in data && data.cctvOfStationControlStorages != undefined) {
|
||||
this.cctvOfStationControlStorages = data.cctvOfStationControlStorages;
|
||||
}
|
||||
if ("arrows" in data && data.arrows != undefined) {
|
||||
this.arrows = data.arrows;
|
||||
}
|
||||
if ("iscsTexts" in data && data.iscsTexts != undefined) {
|
||||
this.iscsTexts = data.iscsTexts;
|
||||
}
|
||||
if ("rects" in data && data.rects != undefined) {
|
||||
this.rects = data.rects;
|
||||
}
|
||||
if ("cctvButtons" in data && data.cctvButtons != undefined) {
|
||||
this.cctvButtons = data.cctvButtons;
|
||||
if ("fasPlatformAlarmStorages" in data && data.fasPlatformAlarmStorages != undefined) {
|
||||
this.fasPlatformAlarmStorages = data.fasPlatformAlarmStorages;
|
||||
}
|
||||
}
|
||||
}
|
||||
get canvas() {
|
||||
return pb_1.Message.getWrapperField(this, dependency_1.common.Canvas, 1) as dependency_1.common.Canvas;
|
||||
get cctvOfStationControlStorages() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, CCTVOfStationControlStorage, 1) as CCTVOfStationControlStorage[];
|
||||
}
|
||||
set canvas(value: dependency_1.common.Canvas) {
|
||||
pb_1.Message.setWrapperField(this, 1, value);
|
||||
set cctvOfStationControlStorages(value: CCTVOfStationControlStorage[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 1, value);
|
||||
}
|
||||
get has_canvas() {
|
||||
return pb_1.Message.getField(this, 1) != null;
|
||||
get fasPlatformAlarmStorages() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, FASPlatformAlarmStorage, 2) as FASPlatformAlarmStorage[];
|
||||
}
|
||||
get arrows() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, Arrow, 2) as Arrow[];
|
||||
}
|
||||
set arrows(value: Arrow[]) {
|
||||
set fasPlatformAlarmStorages(value: FASPlatformAlarmStorage[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 2, value);
|
||||
}
|
||||
get iscsTexts() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, IscsText, 3) as IscsText[];
|
||||
}
|
||||
set iscsTexts(value: IscsText[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 3, value);
|
||||
}
|
||||
get rects() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, Rect, 4) as Rect[];
|
||||
}
|
||||
set rects(value: Rect[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 4, value);
|
||||
}
|
||||
get cctvButtons() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, CCTVButton, 5) as CCTVButton[];
|
||||
}
|
||||
set cctvButtons(value: CCTVButton[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 5, value);
|
||||
}
|
||||
static fromObject(data: {
|
||||
canvas?: ReturnType<typeof dependency_1.common.Canvas.prototype.toObject>;
|
||||
arrows?: ReturnType<typeof Arrow.prototype.toObject>[];
|
||||
iscsTexts?: ReturnType<typeof IscsText.prototype.toObject>[];
|
||||
rects?: ReturnType<typeof Rect.prototype.toObject>[];
|
||||
cctvButtons?: ReturnType<typeof CCTVButton.prototype.toObject>[];
|
||||
cctvOfStationControlStorages?: ReturnType<typeof CCTVOfStationControlStorage.prototype.toObject>[];
|
||||
fasPlatformAlarmStorages?: ReturnType<typeof FASPlatformAlarmStorage.prototype.toObject>[];
|
||||
}): IscsGraphicStorage {
|
||||
const message = new IscsGraphicStorage({});
|
||||
if (data.canvas != null) {
|
||||
message.canvas = dependency_1.common.Canvas.fromObject(data.canvas);
|
||||
if (data.cctvOfStationControlStorages != null) {
|
||||
message.cctvOfStationControlStorages = data.cctvOfStationControlStorages.map(item => CCTVOfStationControlStorage.fromObject(item));
|
||||
}
|
||||
if (data.arrows != null) {
|
||||
message.arrows = data.arrows.map(item => Arrow.fromObject(item));
|
||||
}
|
||||
if (data.iscsTexts != null) {
|
||||
message.iscsTexts = data.iscsTexts.map(item => IscsText.fromObject(item));
|
||||
}
|
||||
if (data.rects != null) {
|
||||
message.rects = data.rects.map(item => Rect.fromObject(item));
|
||||
}
|
||||
if (data.cctvButtons != null) {
|
||||
message.cctvButtons = data.cctvButtons.map(item => CCTVButton.fromObject(item));
|
||||
if (data.fasPlatformAlarmStorages != null) {
|
||||
message.fasPlatformAlarmStorages = data.fasPlatformAlarmStorages.map(item => FASPlatformAlarmStorage.fromObject(item));
|
||||
}
|
||||
return message;
|
||||
}
|
||||
toObject() {
|
||||
const data: {
|
||||
canvas?: ReturnType<typeof dependency_1.common.Canvas.prototype.toObject>;
|
||||
arrows?: ReturnType<typeof Arrow.prototype.toObject>[];
|
||||
iscsTexts?: ReturnType<typeof IscsText.prototype.toObject>[];
|
||||
rects?: ReturnType<typeof Rect.prototype.toObject>[];
|
||||
cctvButtons?: ReturnType<typeof CCTVButton.prototype.toObject>[];
|
||||
cctvOfStationControlStorages?: ReturnType<typeof CCTVOfStationControlStorage.prototype.toObject>[];
|
||||
fasPlatformAlarmStorages?: ReturnType<typeof FASPlatformAlarmStorage.prototype.toObject>[];
|
||||
} = {};
|
||||
if (this.canvas != null) {
|
||||
data.canvas = this.canvas.toObject();
|
||||
if (this.cctvOfStationControlStorages != null) {
|
||||
data.cctvOfStationControlStorages = this.cctvOfStationControlStorages.map((item: CCTVOfStationControlStorage) => item.toObject());
|
||||
}
|
||||
if (this.arrows != null) {
|
||||
data.arrows = this.arrows.map((item: Arrow) => item.toObject());
|
||||
}
|
||||
if (this.iscsTexts != null) {
|
||||
data.iscsTexts = this.iscsTexts.map((item: IscsText) => item.toObject());
|
||||
}
|
||||
if (this.rects != null) {
|
||||
data.rects = this.rects.map((item: Rect) => item.toObject());
|
||||
}
|
||||
if (this.cctvButtons != null) {
|
||||
data.cctvButtons = this.cctvButtons.map((item: CCTVButton) => item.toObject());
|
||||
if (this.fasPlatformAlarmStorages != null) {
|
||||
data.fasPlatformAlarmStorages = this.fasPlatformAlarmStorages.map((item: FASPlatformAlarmStorage) => item.toObject());
|
||||
}
|
||||
return data;
|
||||
}
|
||||
@ -122,16 +65,10 @@ export namespace iscsGraphicData {
|
||||
serialize(w: pb_1.BinaryWriter): void;
|
||||
serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
|
||||
const writer = w || new pb_1.BinaryWriter();
|
||||
if (this.has_canvas)
|
||||
writer.writeMessage(1, this.canvas, () => this.canvas.serialize(writer));
|
||||
if (this.arrows.length)
|
||||
writer.writeRepeatedMessage(2, this.arrows, (item: Arrow) => item.serialize(writer));
|
||||
if (this.iscsTexts.length)
|
||||
writer.writeRepeatedMessage(3, this.iscsTexts, (item: IscsText) => item.serialize(writer));
|
||||
if (this.rects.length)
|
||||
writer.writeRepeatedMessage(4, this.rects, (item: Rect) => item.serialize(writer));
|
||||
if (this.cctvButtons.length)
|
||||
writer.writeRepeatedMessage(5, this.cctvButtons, (item: CCTVButton) => item.serialize(writer));
|
||||
if (this.cctvOfStationControlStorages.length)
|
||||
writer.writeRepeatedMessage(1, this.cctvOfStationControlStorages, (item: CCTVOfStationControlStorage) => item.serialize(writer));
|
||||
if (this.fasPlatformAlarmStorages.length)
|
||||
writer.writeRepeatedMessage(2, this.fasPlatformAlarmStorages, (item: FASPlatformAlarmStorage) => item.serialize(writer));
|
||||
if (!w)
|
||||
return writer.getResultBuffer();
|
||||
}
|
||||
@ -142,19 +79,10 @@ export namespace iscsGraphicData {
|
||||
break;
|
||||
switch (reader.getFieldNumber()) {
|
||||
case 1:
|
||||
reader.readMessage(message.canvas, () => message.canvas = dependency_1.common.Canvas.deserialize(reader));
|
||||
reader.readMessage(message.cctvOfStationControlStorages, () => pb_1.Message.addToRepeatedWrapperField(message, 1, CCTVOfStationControlStorage.deserialize(reader), CCTVOfStationControlStorage));
|
||||
break;
|
||||
case 2:
|
||||
reader.readMessage(message.arrows, () => pb_1.Message.addToRepeatedWrapperField(message, 2, Arrow.deserialize(reader), Arrow));
|
||||
break;
|
||||
case 3:
|
||||
reader.readMessage(message.iscsTexts, () => pb_1.Message.addToRepeatedWrapperField(message, 3, IscsText.deserialize(reader), IscsText));
|
||||
break;
|
||||
case 4:
|
||||
reader.readMessage(message.rects, () => pb_1.Message.addToRepeatedWrapperField(message, 4, Rect.deserialize(reader), Rect));
|
||||
break;
|
||||
case 5:
|
||||
reader.readMessage(message.cctvButtons, () => pb_1.Message.addToRepeatedWrapperField(message, 5, CCTVButton.deserialize(reader), CCTVButton));
|
||||
reader.readMessage(message.fasPlatformAlarmStorages, () => pb_1.Message.addToRepeatedWrapperField(message, 2, FASPlatformAlarmStorage.deserialize(reader), FASPlatformAlarmStorage));
|
||||
break;
|
||||
default: reader.skipField();
|
||||
}
|
||||
@ -1381,4 +1309,351 @@ export namespace iscsGraphicData {
|
||||
return TemperatureDetector.deserialize(bytes);
|
||||
}
|
||||
}
|
||||
export class CCTVOfStationControlStorage extends pb_1.Message {
|
||||
#one_of_decls: number[][] = [];
|
||||
constructor(data?: any[] | {
|
||||
stationName?: string;
|
||||
canvas?: dependency_1.common.Canvas;
|
||||
arrows?: Arrow[];
|
||||
iscsTexts?: IscsText[];
|
||||
rects?: Rect[];
|
||||
cctvButtons?: CCTVButton[];
|
||||
}) {
|
||||
super();
|
||||
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [3, 4, 5, 6], this.#one_of_decls);
|
||||
if (!Array.isArray(data) && typeof data == "object") {
|
||||
if ("stationName" in data && data.stationName != undefined) {
|
||||
this.stationName = data.stationName;
|
||||
}
|
||||
if ("canvas" in data && data.canvas != undefined) {
|
||||
this.canvas = data.canvas;
|
||||
}
|
||||
if ("arrows" in data && data.arrows != undefined) {
|
||||
this.arrows = data.arrows;
|
||||
}
|
||||
if ("iscsTexts" in data && data.iscsTexts != undefined) {
|
||||
this.iscsTexts = data.iscsTexts;
|
||||
}
|
||||
if ("rects" in data && data.rects != undefined) {
|
||||
this.rects = data.rects;
|
||||
}
|
||||
if ("cctvButtons" in data && data.cctvButtons != undefined) {
|
||||
this.cctvButtons = data.cctvButtons;
|
||||
}
|
||||
}
|
||||
}
|
||||
get stationName() {
|
||||
return pb_1.Message.getFieldWithDefault(this, 1, "") as string;
|
||||
}
|
||||
set stationName(value: string) {
|
||||
pb_1.Message.setField(this, 1, value);
|
||||
}
|
||||
get canvas() {
|
||||
return pb_1.Message.getWrapperField(this, dependency_1.common.Canvas, 2) as dependency_1.common.Canvas;
|
||||
}
|
||||
set canvas(value: dependency_1.common.Canvas) {
|
||||
pb_1.Message.setWrapperField(this, 2, value);
|
||||
}
|
||||
get has_canvas() {
|
||||
return pb_1.Message.getField(this, 2) != null;
|
||||
}
|
||||
get arrows() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, Arrow, 3) as Arrow[];
|
||||
}
|
||||
set arrows(value: Arrow[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 3, value);
|
||||
}
|
||||
get iscsTexts() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, IscsText, 4) as IscsText[];
|
||||
}
|
||||
set iscsTexts(value: IscsText[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 4, value);
|
||||
}
|
||||
get rects() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, Rect, 5) as Rect[];
|
||||
}
|
||||
set rects(value: Rect[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 5, value);
|
||||
}
|
||||
get cctvButtons() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, CCTVButton, 6) as CCTVButton[];
|
||||
}
|
||||
set cctvButtons(value: CCTVButton[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 6, value);
|
||||
}
|
||||
static fromObject(data: {
|
||||
stationName?: string;
|
||||
canvas?: ReturnType<typeof dependency_1.common.Canvas.prototype.toObject>;
|
||||
arrows?: ReturnType<typeof Arrow.prototype.toObject>[];
|
||||
iscsTexts?: ReturnType<typeof IscsText.prototype.toObject>[];
|
||||
rects?: ReturnType<typeof Rect.prototype.toObject>[];
|
||||
cctvButtons?: ReturnType<typeof CCTVButton.prototype.toObject>[];
|
||||
}): CCTVOfStationControlStorage {
|
||||
const message = new CCTVOfStationControlStorage({});
|
||||
if (data.stationName != null) {
|
||||
message.stationName = data.stationName;
|
||||
}
|
||||
if (data.canvas != null) {
|
||||
message.canvas = dependency_1.common.Canvas.fromObject(data.canvas);
|
||||
}
|
||||
if (data.arrows != null) {
|
||||
message.arrows = data.arrows.map(item => Arrow.fromObject(item));
|
||||
}
|
||||
if (data.iscsTexts != null) {
|
||||
message.iscsTexts = data.iscsTexts.map(item => IscsText.fromObject(item));
|
||||
}
|
||||
if (data.rects != null) {
|
||||
message.rects = data.rects.map(item => Rect.fromObject(item));
|
||||
}
|
||||
if (data.cctvButtons != null) {
|
||||
message.cctvButtons = data.cctvButtons.map(item => CCTVButton.fromObject(item));
|
||||
}
|
||||
return message;
|
||||
}
|
||||
toObject() {
|
||||
const data: {
|
||||
stationName?: string;
|
||||
canvas?: ReturnType<typeof dependency_1.common.Canvas.prototype.toObject>;
|
||||
arrows?: ReturnType<typeof Arrow.prototype.toObject>[];
|
||||
iscsTexts?: ReturnType<typeof IscsText.prototype.toObject>[];
|
||||
rects?: ReturnType<typeof Rect.prototype.toObject>[];
|
||||
cctvButtons?: ReturnType<typeof CCTVButton.prototype.toObject>[];
|
||||
} = {};
|
||||
if (this.stationName != null) {
|
||||
data.stationName = this.stationName;
|
||||
}
|
||||
if (this.canvas != null) {
|
||||
data.canvas = this.canvas.toObject();
|
||||
}
|
||||
if (this.arrows != null) {
|
||||
data.arrows = this.arrows.map((item: Arrow) => item.toObject());
|
||||
}
|
||||
if (this.iscsTexts != null) {
|
||||
data.iscsTexts = this.iscsTexts.map((item: IscsText) => item.toObject());
|
||||
}
|
||||
if (this.rects != null) {
|
||||
data.rects = this.rects.map((item: Rect) => item.toObject());
|
||||
}
|
||||
if (this.cctvButtons != null) {
|
||||
data.cctvButtons = this.cctvButtons.map((item: CCTVButton) => item.toObject());
|
||||
}
|
||||
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.stationName.length)
|
||||
writer.writeString(1, this.stationName);
|
||||
if (this.has_canvas)
|
||||
writer.writeMessage(2, this.canvas, () => this.canvas.serialize(writer));
|
||||
if (this.arrows.length)
|
||||
writer.writeRepeatedMessage(3, this.arrows, (item: Arrow) => item.serialize(writer));
|
||||
if (this.iscsTexts.length)
|
||||
writer.writeRepeatedMessage(4, this.iscsTexts, (item: IscsText) => item.serialize(writer));
|
||||
if (this.rects.length)
|
||||
writer.writeRepeatedMessage(5, this.rects, (item: Rect) => item.serialize(writer));
|
||||
if (this.cctvButtons.length)
|
||||
writer.writeRepeatedMessage(6, this.cctvButtons, (item: CCTVButton) => item.serialize(writer));
|
||||
if (!w)
|
||||
return writer.getResultBuffer();
|
||||
}
|
||||
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): CCTVOfStationControlStorage {
|
||||
const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new CCTVOfStationControlStorage();
|
||||
while (reader.nextField()) {
|
||||
if (reader.isEndGroup())
|
||||
break;
|
||||
switch (reader.getFieldNumber()) {
|
||||
case 1:
|
||||
message.stationName = reader.readString();
|
||||
break;
|
||||
case 2:
|
||||
reader.readMessage(message.canvas, () => message.canvas = dependency_1.common.Canvas.deserialize(reader));
|
||||
break;
|
||||
case 3:
|
||||
reader.readMessage(message.arrows, () => pb_1.Message.addToRepeatedWrapperField(message, 3, Arrow.deserialize(reader), Arrow));
|
||||
break;
|
||||
case 4:
|
||||
reader.readMessage(message.iscsTexts, () => pb_1.Message.addToRepeatedWrapperField(message, 4, IscsText.deserialize(reader), IscsText));
|
||||
break;
|
||||
case 5:
|
||||
reader.readMessage(message.rects, () => pb_1.Message.addToRepeatedWrapperField(message, 5, Rect.deserialize(reader), Rect));
|
||||
break;
|
||||
case 6:
|
||||
reader.readMessage(message.cctvButtons, () => pb_1.Message.addToRepeatedWrapperField(message, 6, CCTVButton.deserialize(reader), CCTVButton));
|
||||
break;
|
||||
default: reader.skipField();
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
serializeBinary(): Uint8Array {
|
||||
return this.serialize();
|
||||
}
|
||||
static deserializeBinary(bytes: Uint8Array): CCTVOfStationControlStorage {
|
||||
return CCTVOfStationControlStorage.deserialize(bytes);
|
||||
}
|
||||
}
|
||||
export class FASPlatformAlarmStorage extends pb_1.Message {
|
||||
#one_of_decls: number[][] = [];
|
||||
constructor(data?: any[] | {
|
||||
stationName?: string;
|
||||
canvas?: dependency_1.common.Canvas;
|
||||
arrows?: Arrow[];
|
||||
iscsTexts?: IscsText[];
|
||||
rects?: Rect[];
|
||||
}) {
|
||||
super();
|
||||
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [3, 4, 5], this.#one_of_decls);
|
||||
if (!Array.isArray(data) && typeof data == "object") {
|
||||
if ("stationName" in data && data.stationName != undefined) {
|
||||
this.stationName = data.stationName;
|
||||
}
|
||||
if ("canvas" in data && data.canvas != undefined) {
|
||||
this.canvas = data.canvas;
|
||||
}
|
||||
if ("arrows" in data && data.arrows != undefined) {
|
||||
this.arrows = data.arrows;
|
||||
}
|
||||
if ("iscsTexts" in data && data.iscsTexts != undefined) {
|
||||
this.iscsTexts = data.iscsTexts;
|
||||
}
|
||||
if ("rects" in data && data.rects != undefined) {
|
||||
this.rects = data.rects;
|
||||
}
|
||||
}
|
||||
}
|
||||
get stationName() {
|
||||
return pb_1.Message.getFieldWithDefault(this, 1, "") as string;
|
||||
}
|
||||
set stationName(value: string) {
|
||||
pb_1.Message.setField(this, 1, value);
|
||||
}
|
||||
get canvas() {
|
||||
return pb_1.Message.getWrapperField(this, dependency_1.common.Canvas, 2) as dependency_1.common.Canvas;
|
||||
}
|
||||
set canvas(value: dependency_1.common.Canvas) {
|
||||
pb_1.Message.setWrapperField(this, 2, value);
|
||||
}
|
||||
get has_canvas() {
|
||||
return pb_1.Message.getField(this, 2) != null;
|
||||
}
|
||||
get arrows() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, Arrow, 3) as Arrow[];
|
||||
}
|
||||
set arrows(value: Arrow[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 3, value);
|
||||
}
|
||||
get iscsTexts() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, IscsText, 4) as IscsText[];
|
||||
}
|
||||
set iscsTexts(value: IscsText[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 4, value);
|
||||
}
|
||||
get rects() {
|
||||
return pb_1.Message.getRepeatedWrapperField(this, Rect, 5) as Rect[];
|
||||
}
|
||||
set rects(value: Rect[]) {
|
||||
pb_1.Message.setRepeatedWrapperField(this, 5, value);
|
||||
}
|
||||
static fromObject(data: {
|
||||
stationName?: string;
|
||||
canvas?: ReturnType<typeof dependency_1.common.Canvas.prototype.toObject>;
|
||||
arrows?: ReturnType<typeof Arrow.prototype.toObject>[];
|
||||
iscsTexts?: ReturnType<typeof IscsText.prototype.toObject>[];
|
||||
rects?: ReturnType<typeof Rect.prototype.toObject>[];
|
||||
}): FASPlatformAlarmStorage {
|
||||
const message = new FASPlatformAlarmStorage({});
|
||||
if (data.stationName != null) {
|
||||
message.stationName = data.stationName;
|
||||
}
|
||||
if (data.canvas != null) {
|
||||
message.canvas = dependency_1.common.Canvas.fromObject(data.canvas);
|
||||
}
|
||||
if (data.arrows != null) {
|
||||
message.arrows = data.arrows.map(item => Arrow.fromObject(item));
|
||||
}
|
||||
if (data.iscsTexts != null) {
|
||||
message.iscsTexts = data.iscsTexts.map(item => IscsText.fromObject(item));
|
||||
}
|
||||
if (data.rects != null) {
|
||||
message.rects = data.rects.map(item => Rect.fromObject(item));
|
||||
}
|
||||
return message;
|
||||
}
|
||||
toObject() {
|
||||
const data: {
|
||||
stationName?: string;
|
||||
canvas?: ReturnType<typeof dependency_1.common.Canvas.prototype.toObject>;
|
||||
arrows?: ReturnType<typeof Arrow.prototype.toObject>[];
|
||||
iscsTexts?: ReturnType<typeof IscsText.prototype.toObject>[];
|
||||
rects?: ReturnType<typeof Rect.prototype.toObject>[];
|
||||
} = {};
|
||||
if (this.stationName != null) {
|
||||
data.stationName = this.stationName;
|
||||
}
|
||||
if (this.canvas != null) {
|
||||
data.canvas = this.canvas.toObject();
|
||||
}
|
||||
if (this.arrows != null) {
|
||||
data.arrows = this.arrows.map((item: Arrow) => item.toObject());
|
||||
}
|
||||
if (this.iscsTexts != null) {
|
||||
data.iscsTexts = this.iscsTexts.map((item: IscsText) => item.toObject());
|
||||
}
|
||||
if (this.rects != null) {
|
||||
data.rects = this.rects.map((item: Rect) => item.toObject());
|
||||
}
|
||||
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.stationName.length)
|
||||
writer.writeString(1, this.stationName);
|
||||
if (this.has_canvas)
|
||||
writer.writeMessage(2, this.canvas, () => this.canvas.serialize(writer));
|
||||
if (this.arrows.length)
|
||||
writer.writeRepeatedMessage(3, this.arrows, (item: Arrow) => item.serialize(writer));
|
||||
if (this.iscsTexts.length)
|
||||
writer.writeRepeatedMessage(4, this.iscsTexts, (item: IscsText) => item.serialize(writer));
|
||||
if (this.rects.length)
|
||||
writer.writeRepeatedMessage(5, this.rects, (item: Rect) => item.serialize(writer));
|
||||
if (!w)
|
||||
return writer.getResultBuffer();
|
||||
}
|
||||
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): FASPlatformAlarmStorage {
|
||||
const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new FASPlatformAlarmStorage();
|
||||
while (reader.nextField()) {
|
||||
if (reader.isEndGroup())
|
||||
break;
|
||||
switch (reader.getFieldNumber()) {
|
||||
case 1:
|
||||
message.stationName = reader.readString();
|
||||
break;
|
||||
case 2:
|
||||
reader.readMessage(message.canvas, () => message.canvas = dependency_1.common.Canvas.deserialize(reader));
|
||||
break;
|
||||
case 3:
|
||||
reader.readMessage(message.arrows, () => pb_1.Message.addToRepeatedWrapperField(message, 3, Arrow.deserialize(reader), Arrow));
|
||||
break;
|
||||
case 4:
|
||||
reader.readMessage(message.iscsTexts, () => pb_1.Message.addToRepeatedWrapperField(message, 4, IscsText.deserialize(reader), IscsText));
|
||||
break;
|
||||
case 5:
|
||||
reader.readMessage(message.rects, () => pb_1.Message.addToRepeatedWrapperField(message, 5, Rect.deserialize(reader), Rect));
|
||||
break;
|
||||
default: reader.skipField();
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
serializeBinary(): Uint8Array {
|
||||
return this.serialize();
|
||||
}
|
||||
static deserializeBinary(bytes: Uint8Array): FASPlatformAlarmStorage {
|
||||
return FASPlatformAlarmStorage.deserialize(bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,12 +17,33 @@ const routes: RouteRecordRaw[] = [
|
||||
// children: [{ path: '', component: () => import('pages/IndexPage.vue') }],
|
||||
},
|
||||
|
||||
{
|
||||
path: '/sysManage',
|
||||
name: 'sysManage',
|
||||
component: () => import('layouts/MainLayout.vue'),
|
||||
meta: {
|
||||
label: '系统管理',
|
||||
icon: 'dataset',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: 'user',
|
||||
name: 'user',
|
||||
meta: {
|
||||
label: '用户管理',
|
||||
icon: 'manage_accounts',
|
||||
},
|
||||
component: () => import('pages/UserManage.vue'),
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
path: '/dataManage',
|
||||
name: 'dataManage',
|
||||
component: () => import('layouts/MainLayout.vue'),
|
||||
meta: {
|
||||
label: '数据管理',
|
||||
label: 'ISCS数据管理',
|
||||
icon: 'list_alt',
|
||||
},
|
||||
children: [
|
||||
@ -31,7 +52,7 @@ const routes: RouteRecordRaw[] = [
|
||||
name: 'iscsDraft',
|
||||
component: () => import('pages/IscsDraftManage.vue'),
|
||||
meta: {
|
||||
label: 'iscs草稿管理',
|
||||
label: '草稿数据',
|
||||
icon: 'app_registration',
|
||||
},
|
||||
},
|
||||
@ -40,7 +61,7 @@ const routes: RouteRecordRaw[] = [
|
||||
name: 'iscsSharedDraft',
|
||||
component: () => import('pages/IscsDraftManage.vue'),
|
||||
meta: {
|
||||
label: 'iscs分享草稿管理',
|
||||
label: '共享草稿数据',
|
||||
icon: 'app_registration',
|
||||
},
|
||||
},
|
||||
@ -49,7 +70,7 @@ const routes: RouteRecordRaw[] = [
|
||||
name: 'iscsPublish',
|
||||
component: () => import('pages/IscsPublishManage.vue'),
|
||||
meta: {
|
||||
label: 'iscs发布数据管理',
|
||||
label: '发布数据',
|
||||
icon: 'playlist_add_check',
|
||||
},
|
||||
},
|
||||
|
@ -2,7 +2,7 @@ import { defineStore } from 'pinia';
|
||||
|
||||
export const useAuthStore = defineStore('auth', {
|
||||
state: () => ({
|
||||
userId: 8160 as number | null,
|
||||
userId: null as number | null,
|
||||
}),
|
||||
actions: {
|
||||
setUserId(id: number | null) {
|
||||
|
@ -20,17 +20,13 @@ export const useDrawStore = defineStore('draw', {
|
||||
selectedGraphics: null as JlGraphic[] | null,
|
||||
draftId: null as number | null,
|
||||
drawPictureType: null as PictureType | null,
|
||||
clickSubmenuName: '车站控制',
|
||||
selectSubmenuAndStation: { submenu: '站台报警', station: '会展中心' },
|
||||
}),
|
||||
getters: {
|
||||
drawMode: (state) => state.drawAssistant != null,
|
||||
drawGraphicType: (state) => state.drawAssistant?.type,
|
||||
drawGraphicName: (state) => state.drawAssistant?.description,
|
||||
drawGraphicTemplate: (state) => state.drawAssistant?.graphicTemplate,
|
||||
getApp: () => {
|
||||
const app = getIscsDrawApp();
|
||||
return app;
|
||||
},
|
||||
selectedGraphicType: (state) => {
|
||||
if (state.selectedGraphics) {
|
||||
if (state.selectedGraphics.length === 1) {
|
||||
@ -43,7 +39,7 @@ export const useDrawStore = defineStore('draw', {
|
||||
if (state.selectedGraphics.length == 0) {
|
||||
return '画布';
|
||||
} else if (state.selectedGraphics.length == 1) {
|
||||
const name = this.getApp?.getDrawAssistant(
|
||||
const name = getIscsDrawApp()?.getDrawAssistant(
|
||||
state.selectedGraphics[0].type
|
||||
).description;
|
||||
return name || '';
|
||||
@ -63,7 +59,7 @@ export const useDrawStore = defineStore('draw', {
|
||||
},
|
||||
actions: {
|
||||
getDrawApp(): IDrawApp {
|
||||
const app = this.getApp;
|
||||
const app = getIscsDrawApp();
|
||||
if (app == null) {
|
||||
throw new Error('未初始化app');
|
||||
}
|
||||
@ -104,7 +100,11 @@ export const useDrawStore = defineStore('draw', {
|
||||
// console.log('绘制状态清空,绘制应用销毁');
|
||||
this.drawAssistant = null;
|
||||
this.selectedGraphics = null;
|
||||
destroyIscsDrawApp();
|
||||
(this.selectSubmenuAndStation = {
|
||||
submenu: '站台报警',
|
||||
station: '会展中心',
|
||||
}),
|
||||
destroyIscsDrawApp();
|
||||
},
|
||||
setDraftId(id: number | null) {
|
||||
this.draftId = id;
|
||||
|
Loading…
Reference in New Issue
Block a user