Merge branch 'master' of https://git.code.tencent.com/xian-ncc-da/xian-ncc-da-client
This commit is contained in:
commit
73b00b10aa
56
src/api/AlarmTipTimeConfig.ts
Normal file
56
src/api/AlarmTipTimeConfig.ts
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import { api } from 'src/boot/axios';
|
||||||
|
import { PageDto, PageQueryDto } from './ApiCommon';
|
||||||
|
|
||||||
|
const BaseUrl = '/api/alert/tip/time';
|
||||||
|
|
||||||
|
export interface TimeConfigItem {
|
||||||
|
id?: number;
|
||||||
|
timeName: string;
|
||||||
|
startHour: string;
|
||||||
|
endHour: string;
|
||||||
|
timeType: string;
|
||||||
|
publicPeak?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum TipTimeConfig {
|
||||||
|
假期早高峰 = 'HOLIDAYS_MORN_PEAK',
|
||||||
|
假期晚高峰 = 'HOLIDAYS_EVENING_PEAK',
|
||||||
|
早高峰 = 'MORN_PEAK',
|
||||||
|
晚高峰 = 'EVENING_PEARK',
|
||||||
|
低峰 = 'NORMAL_UNPEARK',
|
||||||
|
}
|
||||||
|
export enum ShowTipTimeConfig {
|
||||||
|
HOLIDAYS_MORN_PEAK = '假期早高峰',
|
||||||
|
HOLIDAYS_EVENING_PEAK = '假期晚高峰',
|
||||||
|
MORN_PEAK = '早高峰',
|
||||||
|
EVENING_PEARK = '晚高峰',
|
||||||
|
NORMAL_UNPEARK = '低峰',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建/修改时间配置
|
||||||
|
* @param data
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function creatOrEditTimeConfig(data: TimeConfigItem) {
|
||||||
|
return api.post(`${BaseUrl}`, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
class PageQueryParams extends PageQueryDto {
|
||||||
|
timeName?: string;
|
||||||
|
timeType?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取报警提示时间配置列表
|
||||||
|
* @param params
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export async function alarmTipTimeConfigPageQuery(
|
||||||
|
params: PageQueryParams
|
||||||
|
): Promise<PageDto<TimeConfigItem>> {
|
||||||
|
const response = await api.post(`${BaseUrl}/page`, {
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
return response.data;
|
||||||
|
}
|
@ -4,6 +4,21 @@ import { AlarmInfo } from './DecisionInfo';
|
|||||||
|
|
||||||
const alertUriBase = '/api/alert/mock';
|
const alertUriBase = '/api/alert/mock';
|
||||||
|
|
||||||
|
//故障测试
|
||||||
|
export function mockLocalDemoTestSet(
|
||||||
|
alertType: string,
|
||||||
|
data: {
|
||||||
|
lineId: number;
|
||||||
|
rtuId: number;
|
||||||
|
deviceInfos: { deviceName: string; deviceType: string }[];
|
||||||
|
status: string;
|
||||||
|
groupId?: string;
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
return api.post(`${alertUriBase}/localDemoTest/${alertType}`, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
//故障演练
|
||||||
export function mockAlertSet(data: {
|
export function mockAlertSet(data: {
|
||||||
lineId: number;
|
lineId: number;
|
||||||
alertType: string;
|
alertType: string;
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
import { api } from 'src/boot/axios';
|
import { api } from 'src/boot/axios';
|
||||||
import { PageDto, PageQueryDto } from './ApiCommon';
|
import { PageDto, PageQueryDto } from './ApiCommon';
|
||||||
|
import { TimeConfigItem } from './AlarmTipTimeConfig';
|
||||||
|
|
||||||
const AlertTipUriBase = '/api/alertTip';
|
const AlertTipUriBase = '/api/alertTip';
|
||||||
|
|
||||||
interface AlarmInfoCreateParams {
|
interface AlarmInfoCreateParams {
|
||||||
|
id: number;
|
||||||
alertType: string;
|
alertType: string;
|
||||||
timeType: string;
|
tipTimeIds: string[];
|
||||||
areaConfigId: number;
|
areaConfigId: number;
|
||||||
drivingInfo: string;
|
drivingInfo: string;
|
||||||
submissionInfo: string;
|
submissionInfo: string;
|
||||||
@ -14,13 +16,17 @@ interface AlarmInfoCreateParams {
|
|||||||
export interface AlarmInfoListItem {
|
export interface AlarmInfoListItem {
|
||||||
id: number;
|
id: number;
|
||||||
alertType: string;
|
alertType: string;
|
||||||
timeType: string;
|
timeConfigList: TimeConfigItem[];
|
||||||
areaConfigId: number;
|
areaConfigId: number;
|
||||||
drivingInfo: string;
|
drivingInfo: string;
|
||||||
submissionInfo: string;
|
submissionInfo: string;
|
||||||
areaConfigName?: string;
|
areaConfigName?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface AlarmInfo<T = unknown> {
|
||||||
|
data: T;
|
||||||
|
}
|
||||||
|
|
||||||
export class PagingQueryParams extends PageQueryDto {
|
export class PagingQueryParams extends PageQueryDto {
|
||||||
alertType?: string;
|
alertType?: string;
|
||||||
timeType?: string;
|
timeType?: string;
|
||||||
@ -62,7 +68,7 @@ export function queryAlarmInfoByType(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建决策信息
|
* 创建或编辑决策信息
|
||||||
* @param params
|
* @param params
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
@ -78,19 +84,6 @@ export function deleteAlarmInfo(id: number) {
|
|||||||
return api.delete(`${AlertTipUriBase}/id/${id}`);
|
return api.delete(`${AlertTipUriBase}/id/${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新决策信息
|
|
||||||
* @param data
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
export function updataAlarmInfo(id: number, data: AlarmInfoListItem) {
|
|
||||||
return api.put(`${AlertTipUriBase}/id`, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AlarmInfo<T = unknown> {
|
|
||||||
data: T;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据故障类型获取对应的范围配置
|
* 根据故障类型获取对应的范围配置
|
||||||
* @param id 线路id
|
* @param id 线路id
|
||||||
|
30
src/components/DrawAppFormUtils.ts
Normal file
30
src/components/DrawAppFormUtils.ts
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import { type GraphicDataBase } from 'src/drawApp/graphics/GraphicDataBase';
|
||||||
|
import { IDrawApp, JlGraphic } from 'src/jl-graphic';
|
||||||
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
|
import { onMounted, onUnmounted, reactive } from 'vue';
|
||||||
|
|
||||||
|
const drawStore = useDrawStore();
|
||||||
|
|
||||||
|
export function useFormData<T extends GraphicDataBase>(
|
||||||
|
source: T,
|
||||||
|
app: IDrawApp
|
||||||
|
) {
|
||||||
|
const data = reactive<T>(source);
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
app.bindFormData(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
app.unbindFormData(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
function onUpdate() {
|
||||||
|
const graphic = drawStore.selectedGraphic as JlGraphic;
|
||||||
|
if (graphic) {
|
||||||
|
app.updateGraphicAndRecord(graphic, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { data, onUpdate };
|
||||||
|
}
|
@ -84,6 +84,11 @@ const list = reactive([
|
|||||||
label: '报警故障阈值配置',
|
label: '报警故障阈值配置',
|
||||||
icon: 'format_indent_increase',
|
icon: 'format_indent_increase',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/dataManage/alarmTipTimeConfig',
|
||||||
|
label: '报警提示时间配置',
|
||||||
|
icon: 'access_time',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -19,6 +19,8 @@ export enum showAlertTypeData {
|
|||||||
'道岔大面积失表',
|
'道岔大面积失表',
|
||||||
'列车信号故障',
|
'列车信号故障',
|
||||||
'全线蓝显',
|
'全线蓝显',
|
||||||
|
'联锁区红光带',
|
||||||
|
'联锁区橙光带',
|
||||||
I = 'I类信息',
|
I = 'I类信息',
|
||||||
II = 'II类信息',
|
II = 'II类信息',
|
||||||
III = 'III类信息',
|
III = 'III类信息',
|
||||||
@ -45,6 +47,8 @@ export enum showAlertTypeData {
|
|||||||
SWITCH_LOST_MOST = '道岔大面积失表',
|
SWITCH_LOST_MOST = '道岔大面积失表',
|
||||||
TRAIN_EB_ATP = '列车信号故障',
|
TRAIN_EB_ATP = '列车信号故障',
|
||||||
ALL_LINE_BLUE_DISPLAY = '全线蓝显',
|
ALL_LINE_BLUE_DISPLAY = '全线蓝显',
|
||||||
|
AXLE_LED_RED_INTERLOCK_AREA = '联锁区红光带',
|
||||||
|
AXLE_LED_ORANGE_INTERLOCK_AREA = '联锁区橙光带',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum saveAlertTypeData {
|
export enum saveAlertTypeData {
|
||||||
@ -70,6 +74,8 @@ export enum saveAlertTypeData {
|
|||||||
道岔大面积失表 = 'SWITCH_LOST_MOST',
|
道岔大面积失表 = 'SWITCH_LOST_MOST',
|
||||||
列车信号故障 = 'TRAIN_EB_ATP',
|
列车信号故障 = 'TRAIN_EB_ATP',
|
||||||
全线蓝显 = 'ALL_LINE_BLUE_DISPLAY',
|
全线蓝显 = 'ALL_LINE_BLUE_DISPLAY',
|
||||||
|
联锁区红光带 = 'AXLE_LED_RED_INTERLOCK_AREA',
|
||||||
|
联锁区橙光带 = 'AXLE_LED_ORANGE_INTERLOCK_AREA',
|
||||||
}
|
}
|
||||||
|
|
||||||
export const GuardConfigTypeData = {
|
export const GuardConfigTypeData = {
|
||||||
@ -101,3 +107,10 @@ export const GuardConfigTypeData = {
|
|||||||
deviceType: '信号',
|
deviceType: '信号',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export function isArraysEqual(arr1: string[], arr2: string[]) {
|
||||||
|
if (arr1.length !== arr2.length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return arr1.sort().join(',') === arr2.sort().join(',');
|
||||||
|
}
|
||||||
|
240
src/components/alarm/setAlarmMock.vue
Normal file
240
src/components/alarm/setAlarmMock.vue
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
<template>
|
||||||
|
<draggable-dialog
|
||||||
|
v-if="showsetAlartText"
|
||||||
|
seamless
|
||||||
|
title="设置故障演练"
|
||||||
|
:width="300"
|
||||||
|
:height="0"
|
||||||
|
>
|
||||||
|
<template v-slot:footer>
|
||||||
|
<div>
|
||||||
|
<q-card class="q-gutter-sm q-px-sm q-mt-sm">
|
||||||
|
<q-form ref="myForm" @submit="onSubmit" @reset="onReset">
|
||||||
|
<q-input
|
||||||
|
outlined
|
||||||
|
label="线路ID"
|
||||||
|
v-model.number="setAlartTextData.lineId"
|
||||||
|
type="number"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[(val) => val || '请输入线路ID!']"
|
||||||
|
/>
|
||||||
|
<q-select
|
||||||
|
outlined
|
||||||
|
label="故障类型"
|
||||||
|
v-model="setAlartTextData.alertType"
|
||||||
|
:options="optionsAlertType"
|
||||||
|
:rules="[(val) => val.length > 0 || '请选择故障类型!']"
|
||||||
|
/>
|
||||||
|
<q-list bordered separator class="rounded-borders">
|
||||||
|
<q-item>
|
||||||
|
<q-item-section no-wrap class="q-gutter-y-sm column">
|
||||||
|
<q-item-label> 框选的设备 </q-item-label>
|
||||||
|
<div class="q-gutter-sm row">
|
||||||
|
<q-chip
|
||||||
|
v-for="item in setAlartTextData.deviceCodes"
|
||||||
|
:key="item"
|
||||||
|
square
|
||||||
|
color="primary"
|
||||||
|
text-color="white"
|
||||||
|
removable
|
||||||
|
@remove="removeSelect(item)"
|
||||||
|
>
|
||||||
|
{{ item }}
|
||||||
|
</q-chip>
|
||||||
|
</div>
|
||||||
|
<q-btn
|
||||||
|
v-show="setAlartTextData.deviceCodes.length > 0"
|
||||||
|
style="width: 120px"
|
||||||
|
label="清空框选的设备"
|
||||||
|
color="red"
|
||||||
|
@click="clearSelect"
|
||||||
|
/>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
</q-list>
|
||||||
|
<div class="q-gutter-sm q-pa-md row justify-center">
|
||||||
|
<q-btn
|
||||||
|
label="提交"
|
||||||
|
type="submit"
|
||||||
|
color="primary"
|
||||||
|
class="q-mr-md"
|
||||||
|
/>
|
||||||
|
<q-btn label="重置" type="reset" color="primary" />
|
||||||
|
</div>
|
||||||
|
</q-form>
|
||||||
|
</q-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</draggable-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import DraggableDialog from '../common/DraggableDialog.vue';
|
||||||
|
import { onMounted, ref, watch } from 'vue';
|
||||||
|
import { JlGraphic } from 'src/jl-graphic';
|
||||||
|
import { Station } from 'src/graphics/station/Station';
|
||||||
|
import { useLineStore } from 'src/stores/line-store';
|
||||||
|
import { QForm, useQuasar } from 'quasar';
|
||||||
|
import { ApiError } from 'src/boot/axios';
|
||||||
|
import { mockAlertSet } from 'src/api/AlertMock';
|
||||||
|
import { isArraysEqual, saveAlertTypeData } from './alarmInfoEnum';
|
||||||
|
import { Section, SectionType } from 'src/graphics/section/Section';
|
||||||
|
import { LogicSection } from 'src/graphics/logicSection/LogicSection';
|
||||||
|
|
||||||
|
const lineStore = useLineStore();
|
||||||
|
const setAlartTextData = ref<{
|
||||||
|
lineId: string;
|
||||||
|
alertType: string;
|
||||||
|
deviceCodes: string[];
|
||||||
|
}>({
|
||||||
|
lineId: '',
|
||||||
|
alertType: '',
|
||||||
|
deviceCodes: [],
|
||||||
|
});
|
||||||
|
const optionsAlertType = [
|
||||||
|
'蓝显',
|
||||||
|
'全线蓝显',
|
||||||
|
'整侧站台门无法打开',
|
||||||
|
'整侧站台门无法关闭',
|
||||||
|
'道岔失表',
|
||||||
|
'道岔大面积失表',
|
||||||
|
'计轴红光带',
|
||||||
|
'计轴大面积红光带',
|
||||||
|
'计轴橙光带',
|
||||||
|
'计轴大面积橙光带',
|
||||||
|
'列车信号故障',
|
||||||
|
];
|
||||||
|
const mapAlertType = new Map([
|
||||||
|
['蓝显', ['station']],
|
||||||
|
['全线蓝显', ['station']],
|
||||||
|
['整侧站台门无法打开', ['Platform']],
|
||||||
|
['整侧站台门无法关闭', ['Platform']],
|
||||||
|
['道岔失表', ['Turnout']],
|
||||||
|
['道岔大面积失表', ['Turnout']],
|
||||||
|
['计轴红光带', ['LogicSection', 'Turnout']],
|
||||||
|
['计轴大面积红光带', ['LogicSection', 'Turnout']],
|
||||||
|
['计轴橙光带', ['LogicSection', 'Turnout']],
|
||||||
|
['计轴大面积橙光带', ['LogicSection', 'Turnout']],
|
||||||
|
['列车信号故障', ['LogicSection', 'Turnout']],
|
||||||
|
['联锁区红光带', ['LogicSection', 'Turnout']],
|
||||||
|
['联锁区橙光带', ['LogicSection', 'Turnout']],
|
||||||
|
]);
|
||||||
|
let selectGraphic: JlGraphic[] = [];
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => lineStore.selectedGraphics,
|
||||||
|
(val) => {
|
||||||
|
if (val && val.length > 0) {
|
||||||
|
const selectGraphicId = selectGraphic.map((g) => g.id);
|
||||||
|
const appSelectedGraphicsId = lineStore.selectedGraphics?.map(
|
||||||
|
(g) => g.id
|
||||||
|
);
|
||||||
|
if (
|
||||||
|
appSelectedGraphicsId !== undefined &&
|
||||||
|
isArraysEqual(selectGraphicId, appSelectedGraphicsId)
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const deviceFilter = lineStore.selectedGraphics?.filter((g) => {
|
||||||
|
let select = false;
|
||||||
|
if (
|
||||||
|
g.type == Station.Type &&
|
||||||
|
(g as Station).datas.concentrationStations &&
|
||||||
|
setAlartTextData.value.alertType == '蓝显'
|
||||||
|
) {
|
||||||
|
select = true;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
(g.type !== Station.Type &&
|
||||||
|
mapAlertType
|
||||||
|
.get(setAlartTextData.value.alertType)
|
||||||
|
?.includes(g.type)) ||
|
||||||
|
(g.type == Section.Type &&
|
||||||
|
(g as Section).datas.sectionType === SectionType.TurnoutPhysical &&
|
||||||
|
mapAlertType
|
||||||
|
.get(setAlartTextData.value.alertType)
|
||||||
|
?.includes(LogicSection.Type))
|
||||||
|
) {
|
||||||
|
select = true;
|
||||||
|
}
|
||||||
|
return select;
|
||||||
|
}) as JlGraphic[];
|
||||||
|
if (
|
||||||
|
['道岔失表', '计轴红光带', '计轴橙光带', '列车信号故障'].includes(
|
||||||
|
setAlartTextData.value.alertType
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
selectGraphic = [deviceFilter[0]];
|
||||||
|
} else {
|
||||||
|
selectGraphic.push(...deviceFilter);
|
||||||
|
}
|
||||||
|
selectGraphic = Array.from(new Set(selectGraphic));
|
||||||
|
lineStore.getLineApp().updateSelected(...selectGraphic);
|
||||||
|
setAlartTextData.value.deviceCodes = selectGraphic.map((g) => g.code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
clearSelect();
|
||||||
|
onReset();
|
||||||
|
});
|
||||||
|
|
||||||
|
const myForm = ref<QForm | null>(null);
|
||||||
|
const showsetAlartText = ref(true);
|
||||||
|
const $q = useQuasar();
|
||||||
|
|
||||||
|
async function onSubmit() {
|
||||||
|
myForm.value?.validate().then(async (res) => {
|
||||||
|
if (res) {
|
||||||
|
try {
|
||||||
|
const params = {
|
||||||
|
lineId: +setAlartTextData.value.lineId,
|
||||||
|
alertType: (saveAlertTypeData as never)[
|
||||||
|
setAlartTextData.value.alertType + ''
|
||||||
|
],
|
||||||
|
deviceCodes: setAlartTextData.value.deviceCodes,
|
||||||
|
};
|
||||||
|
await mockAlertSet(params);
|
||||||
|
$q.notify({
|
||||||
|
type: 'positive',
|
||||||
|
message: '设置故障演练成功',
|
||||||
|
});
|
||||||
|
onReset();
|
||||||
|
} catch (err) {
|
||||||
|
const apiErr = err as ApiError;
|
||||||
|
$q.notify({
|
||||||
|
type: 'negative',
|
||||||
|
message: apiErr.title,
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
showsetAlartText.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeSelect(code: string) {
|
||||||
|
const removeIndex = setAlartTextData.value.deviceCodes.findIndex(
|
||||||
|
(item) => item == code
|
||||||
|
);
|
||||||
|
selectGraphic.splice(removeIndex, 1);
|
||||||
|
setAlartTextData.value.deviceCodes.splice(removeIndex, 1);
|
||||||
|
lineStore.getLineApp().updateSelected(...selectGraphic);
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearSelect() {
|
||||||
|
setAlartTextData.value.deviceCodes = [];
|
||||||
|
selectGraphic = [];
|
||||||
|
lineStore.getLineApp().updateSelected();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onReset() {
|
||||||
|
setAlartTextData.value = {
|
||||||
|
lineId: '',
|
||||||
|
alertType: '',
|
||||||
|
deviceCodes: [],
|
||||||
|
};
|
||||||
|
selectGraphic = [];
|
||||||
|
}
|
||||||
|
</script>
|
262
src/components/alarm/setAlarmText.vue
Normal file
262
src/components/alarm/setAlarmText.vue
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
<template>
|
||||||
|
<draggable-dialog
|
||||||
|
v-if="showsetAlartText"
|
||||||
|
seamless
|
||||||
|
title="设置故障测试"
|
||||||
|
:width="300"
|
||||||
|
:height="0"
|
||||||
|
>
|
||||||
|
<template v-slot:footer>
|
||||||
|
<div>
|
||||||
|
<q-card class="q-gutter-sm q-px-sm q-mt-sm">
|
||||||
|
<q-form ref="myForm" @submit="onSubmit" @reset="onReset">
|
||||||
|
<q-input
|
||||||
|
outlined
|
||||||
|
label="线路ID"
|
||||||
|
v-model.number="setAlartTextData.lineId"
|
||||||
|
type="number"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[(val) => val || '请输入线路ID!']"
|
||||||
|
/>
|
||||||
|
<q-input
|
||||||
|
outlined
|
||||||
|
label="集中站ID"
|
||||||
|
v-model.number="setAlartTextData.rtuId"
|
||||||
|
type="number"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[(val) => val || '请输入集中站ID!']"
|
||||||
|
/>
|
||||||
|
<q-select
|
||||||
|
outlined
|
||||||
|
label="故障类型"
|
||||||
|
v-model="setAlartTextData.alertType"
|
||||||
|
:options="optionsAlertType"
|
||||||
|
:rules="[(val) => val.length > 0 || '请选择故障类型!']"
|
||||||
|
/>
|
||||||
|
<q-input
|
||||||
|
v-if="setAlartTextData.alertType == '列车信号故障'"
|
||||||
|
outlined
|
||||||
|
label="车组号"
|
||||||
|
v-model.number="setAlartTextData.groupId"
|
||||||
|
type="number"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[(val) => val || '请输入车组号!']"
|
||||||
|
/>
|
||||||
|
<q-select
|
||||||
|
outlined
|
||||||
|
label="故障测试状态"
|
||||||
|
v-model="setAlartTextData.status"
|
||||||
|
:options="optionsStatus"
|
||||||
|
:rules="[(val) => val.length > 0 || '请选择故障类型!']"
|
||||||
|
map-options
|
||||||
|
emit-value
|
||||||
|
/>
|
||||||
|
<q-list bordered separator class="rounded-borders">
|
||||||
|
<q-item>
|
||||||
|
<q-item-section no-wrap class="q-gutter-y-sm column">
|
||||||
|
<q-item-label> 框选的设备 </q-item-label>
|
||||||
|
<div class="q-gutter-sm row">
|
||||||
|
<q-chip
|
||||||
|
v-for="item in setAlartTextData.deviceInfos"
|
||||||
|
:key="item.deviceName"
|
||||||
|
square
|
||||||
|
color="primary"
|
||||||
|
text-color="white"
|
||||||
|
removable
|
||||||
|
@remove="removeSelect(item)"
|
||||||
|
>
|
||||||
|
{{ item.deviceName }}
|
||||||
|
</q-chip>
|
||||||
|
</div>
|
||||||
|
<q-btn
|
||||||
|
v-show="setAlartTextData.deviceInfos.length > 0"
|
||||||
|
style="width: 120px"
|
||||||
|
label="清空框选的设备"
|
||||||
|
color="red"
|
||||||
|
@click="clearSelect"
|
||||||
|
/>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
</q-list>
|
||||||
|
<div class="q-gutter-sm q-pa-md row justify-center">
|
||||||
|
<q-btn
|
||||||
|
label="提交"
|
||||||
|
type="submit"
|
||||||
|
color="primary"
|
||||||
|
class="q-mr-md"
|
||||||
|
/>
|
||||||
|
<q-btn label="重置" type="reset" color="primary" />
|
||||||
|
</div>
|
||||||
|
</q-form>
|
||||||
|
</q-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</draggable-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import DraggableDialog from '../common/DraggableDialog.vue';
|
||||||
|
import { ref, watch } from 'vue';
|
||||||
|
import { JlGraphic } from 'src/jl-graphic';
|
||||||
|
import { Station } from 'src/graphics/station/Station';
|
||||||
|
import { useLineStore } from 'src/stores/line-store';
|
||||||
|
import { QForm, useQuasar } from 'quasar';
|
||||||
|
import { ApiError } from 'src/boot/axios';
|
||||||
|
import { mockLocalDemoTestSet } from 'src/api/AlertMock';
|
||||||
|
import { isArraysEqual, saveAlertTypeData } from './alarmInfoEnum';
|
||||||
|
|
||||||
|
const lineStore = useLineStore();
|
||||||
|
const setAlartTextData = ref<{
|
||||||
|
lineId: string;
|
||||||
|
rtuId: string;
|
||||||
|
alertType: string;
|
||||||
|
deviceInfos: { deviceName: string; deviceType: string }[];
|
||||||
|
status: string;
|
||||||
|
groupId: string;
|
||||||
|
}>({
|
||||||
|
lineId: '',
|
||||||
|
rtuId: '',
|
||||||
|
alertType: '',
|
||||||
|
deviceInfos: [],
|
||||||
|
status: '',
|
||||||
|
groupId: '',
|
||||||
|
});
|
||||||
|
const optionsAlertType = [
|
||||||
|
'蓝显',
|
||||||
|
'道岔失表',
|
||||||
|
'计轴红光带',
|
||||||
|
'计轴橙光带',
|
||||||
|
'列车信号故障',
|
||||||
|
];
|
||||||
|
const mapAlertType = new Map([
|
||||||
|
['蓝显', ['station']],
|
||||||
|
['道岔失表', ['Turnout']],
|
||||||
|
['计轴红光带', ['LogicSection', 'Turnout']],
|
||||||
|
['计轴橙光带', ['LogicSection', 'Turnout']],
|
||||||
|
['列车信号故障', ['LogicSection', 'Turnout']],
|
||||||
|
]);
|
||||||
|
enum DeviceType {
|
||||||
|
station = 'DEVICE_TYPE_RTU',
|
||||||
|
Turnout = 'DEVICE_TYPE_SWITCH',
|
||||||
|
LogicSection = 'DEVICE_TYPE_TRACK',
|
||||||
|
}
|
||||||
|
const optionsStatus = [
|
||||||
|
{ label: '正常', value: 'NORMAL' },
|
||||||
|
{ label: '设置', value: 'BEGIN' },
|
||||||
|
{ label: '报警', value: 'ALERT' },
|
||||||
|
];
|
||||||
|
let selectGraphic: JlGraphic[] = [];
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => lineStore.selectedGraphics,
|
||||||
|
(val) => {
|
||||||
|
if (val && val.length > 0) {
|
||||||
|
const selectGraphicId = selectGraphic.map((g) => g.id);
|
||||||
|
const appSelectedGraphicsId = lineStore.selectedGraphics?.map(
|
||||||
|
(g) => g.id
|
||||||
|
);
|
||||||
|
if (
|
||||||
|
appSelectedGraphicsId !== undefined &&
|
||||||
|
isArraysEqual(selectGraphicId, appSelectedGraphicsId)
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const deviceFilter = lineStore.selectedGraphics?.filter((g) => {
|
||||||
|
let select = false;
|
||||||
|
if (
|
||||||
|
g.type == Station.Type &&
|
||||||
|
(g as Station).datas.concentrationStations &&
|
||||||
|
setAlartTextData.value.alertType == '蓝显'
|
||||||
|
) {
|
||||||
|
select = true;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
g.type !== Station.Type &&
|
||||||
|
mapAlertType.get(setAlartTextData.value.alertType)?.includes(g.type)
|
||||||
|
) {
|
||||||
|
select = true;
|
||||||
|
}
|
||||||
|
return select;
|
||||||
|
}) as JlGraphic[];
|
||||||
|
if (setAlartTextData.value.alertType !== '列车信号故障') {
|
||||||
|
selectGraphic.push(...deviceFilter);
|
||||||
|
} else {
|
||||||
|
selectGraphic = [deviceFilter[0]];
|
||||||
|
}
|
||||||
|
selectGraphic = Array.from(new Set(selectGraphic));
|
||||||
|
lineStore.getLineApp().updateSelected(...selectGraphic);
|
||||||
|
setAlartTextData.value.deviceInfos = [];
|
||||||
|
selectGraphic.forEach((g) => {
|
||||||
|
setAlartTextData.value.deviceInfos.push({
|
||||||
|
deviceName: g.code,
|
||||||
|
deviceType: (DeviceType as never)[g.type + ''],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const myForm = ref<QForm | null>(null);
|
||||||
|
const showsetAlartText = ref(true);
|
||||||
|
const $q = useQuasar();
|
||||||
|
|
||||||
|
async function onSubmit() {
|
||||||
|
myForm.value?.validate().then(async (res) => {
|
||||||
|
if (res) {
|
||||||
|
try {
|
||||||
|
const params = {
|
||||||
|
lineId: +setAlartTextData.value.lineId,
|
||||||
|
rtuId: +setAlartTextData.value.rtuId,
|
||||||
|
deviceInfos: setAlartTextData.value.deviceInfos,
|
||||||
|
status: setAlartTextData.value.status,
|
||||||
|
groupId: setAlartTextData.value.groupId,
|
||||||
|
};
|
||||||
|
const alertType = (saveAlertTypeData as never)[
|
||||||
|
setAlartTextData.value.alertType + ''
|
||||||
|
];
|
||||||
|
await mockLocalDemoTestSet(alertType, params);
|
||||||
|
$q.notify({
|
||||||
|
type: 'positive',
|
||||||
|
message: '设置故障测试成功',
|
||||||
|
});
|
||||||
|
onReset();
|
||||||
|
} catch (err) {
|
||||||
|
const apiErr = err as ApiError;
|
||||||
|
$q.notify({
|
||||||
|
type: 'negative',
|
||||||
|
message: apiErr.title,
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
showsetAlartText.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeSelect(code: { deviceName: string; deviceType: string }) {
|
||||||
|
const removeIndex = setAlartTextData.value.deviceInfos.findIndex(
|
||||||
|
(item) => item == code
|
||||||
|
);
|
||||||
|
selectGraphic.splice(removeIndex, 1);
|
||||||
|
setAlartTextData.value.deviceInfos.splice(removeIndex, 1);
|
||||||
|
lineStore.getLineApp().updateSelected(...selectGraphic);
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearSelect() {
|
||||||
|
setAlartTextData.value.deviceInfos = [];
|
||||||
|
selectGraphic = [];
|
||||||
|
lineStore.getLineApp().updateSelected();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onReset() {
|
||||||
|
setAlartTextData.value = {
|
||||||
|
lineId: '',
|
||||||
|
rtuId: '',
|
||||||
|
alertType: '',
|
||||||
|
deviceInfos: [],
|
||||||
|
status: '',
|
||||||
|
groupId: '',
|
||||||
|
};
|
||||||
|
selectGraphic = [];
|
||||||
|
}
|
||||||
|
</script>
|
@ -19,9 +19,6 @@
|
|||||||
<template v-if="drawStore.drawGraphicType === Station.Type">
|
<template v-if="drawStore.drawGraphicType === Station.Type">
|
||||||
<station-template></station-template>
|
<station-template></station-template>
|
||||||
</template>
|
</template>
|
||||||
<!-- <template v-if="drawStore.drawGraphicType === Train.Type">
|
|
||||||
<train-template></train-template>
|
|
||||||
</template> -->
|
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
</q-card>
|
</q-card>
|
||||||
</div>
|
</div>
|
||||||
@ -54,9 +51,6 @@
|
|||||||
<station-line-property
|
<station-line-property
|
||||||
v-if="drawStore.selectedGraphicType === StationLine.Type"
|
v-if="drawStore.selectedGraphicType === StationLine.Type"
|
||||||
></station-line-property>
|
></station-line-property>
|
||||||
<!-- <train-property
|
|
||||||
v-if="drawStore.selectedGraphicType === Train.Type"
|
|
||||||
></train-property> -->
|
|
||||||
<iscs-fan-property
|
<iscs-fan-property
|
||||||
v-else-if="drawStore.selectedGraphicType === IscsFan.Type"
|
v-else-if="drawStore.selectedGraphicType === IscsFan.Type"
|
||||||
></iscs-fan-property>
|
></iscs-fan-property>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
style="margin-top: 10px"
|
style="margin-top: 10px"
|
||||||
v-model="kilometerSystem.coordinateSystem"
|
v-model="axleCountingModel.kilometerSystem.coordinateSystem"
|
||||||
:options="CoordinateSystemOptions"
|
:options="CoordinateSystemOptions"
|
||||||
:map-options="true"
|
:map-options="true"
|
||||||
:emit-value="true"
|
:emit-value="true"
|
||||||
@ -29,7 +29,7 @@
|
|||||||
<q-input
|
<q-input
|
||||||
outlined
|
outlined
|
||||||
style="margin-top: 10px"
|
style="margin-top: 10px"
|
||||||
v-model.number="kilometerSystem.kilometer"
|
v-model.number="axleCountingModel.kilometerSystem.kilometer"
|
||||||
type="number"
|
type="number"
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
label="公里标(mm):"
|
label="公里标(mm):"
|
||||||
@ -72,17 +72,19 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { AxleCountingData } from 'src/drawApp/graphics/AxleCountingInteraction';
|
import { AxleCountingData } from 'src/drawApp/graphics/AxleCountingInteraction';
|
||||||
import { AxleCounting } from 'src/graphics/axleCounting/AxleCounting';
|
import { AxleCounting } from 'src/graphics/axleCounting/AxleCounting';
|
||||||
import { Section } from 'src/graphics/section/Section';
|
import { Section } from 'src/graphics/section/Section';
|
||||||
import { Turnout } from 'src/graphics/turnout/Turnout';
|
import { Turnout } from 'src/graphics/turnout/Turnout';
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { computed, onMounted, reactive, watch } from 'vue';
|
import { computed } from 'vue';
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
const axleCountingModel = reactive(new AxleCountingData());
|
const { data: axleCountingModel, onUpdate } = useFormData(
|
||||||
const kilometerSystem = reactive({ coordinateSystem: '', kilometer: 0 });
|
new AxleCountingData(),
|
||||||
|
drawStore.getDrawApp()
|
||||||
|
);
|
||||||
const CoordinateSystemOptions = [
|
const CoordinateSystemOptions = [
|
||||||
{ label: '车辆段', value: 'DEPOT' },
|
{ label: '车辆段', value: 'DEPOT' },
|
||||||
{ label: '停车场', value: 'PARKING_LOT' },
|
{ label: '停车场', value: 'PARKING_LOT' },
|
||||||
@ -90,46 +92,6 @@ const CoordinateSystemOptions = [
|
|||||||
{ label: '换线', value: 'TRANSFER' },
|
{ label: '换线', value: 'TRANSFER' },
|
||||||
];
|
];
|
||||||
|
|
||||||
drawStore.$subscribe;
|
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == AxleCounting.Type) {
|
|
||||||
axleCountingModel.copyFrom(val.saveData() as AxleCountingData);
|
|
||||||
if (axleCountingModel.kilometerSystem) {
|
|
||||||
kilometerSystem.coordinateSystem =
|
|
||||||
axleCountingModel.kilometerSystem.coordinateSystem;
|
|
||||||
kilometerSystem.kilometer = axleCountingModel.kilometerSystem.kilometer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
const axleCounting = drawStore.selectedGraphic as AxleCounting;
|
|
||||||
if (axleCounting) {
|
|
||||||
axleCountingModel.copyFrom(axleCounting.saveData());
|
|
||||||
if (axleCountingModel.kilometerSystem) {
|
|
||||||
kilometerSystem.coordinateSystem =
|
|
||||||
axleCountingModel.kilometerSystem.coordinateSystem;
|
|
||||||
kilometerSystem.kilometer = axleCountingModel.kilometerSystem.kilometer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
const axleCounting = drawStore.selectedGraphic as AxleCounting;
|
|
||||||
axleCountingModel.kilometerSystem = {
|
|
||||||
coordinateSystem: kilometerSystem.coordinateSystem,
|
|
||||||
kilometer: kilometerSystem.kilometer,
|
|
||||||
};
|
|
||||||
if (axleCounting) {
|
|
||||||
drawStore
|
|
||||||
.getDrawApp()
|
|
||||||
.updateGraphicAndRecord(axleCounting, axleCountingModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const sectionRelations = computed(() => {
|
const sectionRelations = computed(() => {
|
||||||
const axleCounting = drawStore.selectedGraphic as AxleCounting;
|
const axleCounting = drawStore.selectedGraphic as AxleCounting;
|
||||||
const sectionRelations =
|
const sectionRelations =
|
||||||
|
@ -59,38 +59,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { LinkData } from 'src/drawApp/graphics/LinkInteraction';
|
import { LinkData } from 'src/drawApp/graphics/LinkInteraction';
|
||||||
import { Link } from 'src/graphics/link/Link';
|
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { onMounted, reactive, watch } from 'vue';
|
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
const linkModel = reactive(new LinkData());
|
const { data: linkModel, onUpdate } = useFormData(
|
||||||
|
new LinkData(),
|
||||||
drawStore.$subscribe;
|
drawStore.getDrawApp()
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == Link.Type) {
|
|
||||||
// console.log('link变更');
|
|
||||||
linkModel.copyFrom(val.saveData() as LinkData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
// console.log('link 属性表单 mounted');
|
|
||||||
const link = drawStore.selectedGraphic as Link;
|
|
||||||
if (link) {
|
|
||||||
linkModel.copyFrom(link.saveData());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
console.log('link 属性更新');
|
|
||||||
const link = drawStore.selectedGraphic as Link;
|
|
||||||
if (link) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(link, linkModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
<template>
|
<template>
|
||||||
<q-form>
|
<q-form>
|
||||||
<q-input outlined readonly v-model="sectionModel.id" label="id" hint="" />
|
|
||||||
<q-input
|
<q-input
|
||||||
outlined
|
outlined
|
||||||
v-model="sectionModel.code"
|
readonly
|
||||||
|
v-model="logicSectionModel.id"
|
||||||
|
label="id"
|
||||||
|
hint=""
|
||||||
|
/>
|
||||||
|
<q-input
|
||||||
|
outlined
|
||||||
|
v-model="logicSectionModel.code"
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
label="编号"
|
label="编号"
|
||||||
/>
|
/>
|
||||||
@ -11,26 +17,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { LogicSectionData } from 'src/drawApp/graphics/LogicSectionInteraction';
|
import { LogicSectionData } from 'src/drawApp/graphics/LogicSectionInteraction';
|
||||||
import { LogicSection } from 'src/graphics/logicSection/LogicSection';
|
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { shallowRef, watchEffect } from 'vue';
|
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
|
const { data: logicSectionModel, onUpdate } = useFormData(
|
||||||
const sectionModel = shallowRef(new LogicSectionData());
|
new LogicSectionData(),
|
||||||
|
drawStore.getDrawApp()
|
||||||
watchEffect(() => {
|
);
|
||||||
const section = drawStore.selectedGraphic;
|
|
||||||
if (section && section instanceof LogicSection) {
|
|
||||||
sectionModel.value = section.saveData();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const onUpdate = () => {
|
|
||||||
const section = drawStore.selectedGraphic as LogicSection;
|
|
||||||
if (section) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(section, sectionModel.value);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -52,24 +52,17 @@
|
|||||||
</q-form>
|
</q-form>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { PathLineData } from 'src/drawApp/graphics/PathLineInteraction';
|
import { PathLineData } from 'src/drawApp/graphics/PathLineInteraction';
|
||||||
import { PathLine } from 'src/graphics/pathLine/PathLine';
|
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { reactive, onMounted, watch } from 'vue';
|
import { reactive, onMounted } from 'vue';
|
||||||
import { getLineList } from 'src/api/LineInfoApi';
|
import { getLineList } from 'src/api/LineInfoApi';
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
const pathLineModel = reactive(new PathLineData());
|
const { data: pathLineModel, onUpdate } = useFormData(
|
||||||
const lineList: { label: string; value: string }[] = reactive([]);
|
new PathLineData(),
|
||||||
|
drawStore.getDrawApp()
|
||||||
drawStore.$subscribe;
|
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == PathLine.Type) {
|
|
||||||
pathLineModel.copyFrom(val.saveData() as PathLineData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
const lineList: { label: string; value: string }[] = reactive([]);
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getLineList()
|
getLineList()
|
||||||
@ -81,16 +74,5 @@ onMounted(() => {
|
|||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.error('获取线路列表失败:' + err.message);
|
console.error('获取线路列表失败:' + err.message);
|
||||||
});
|
});
|
||||||
const pathLine = drawStore.selectedGraphic as PathLine;
|
|
||||||
if (pathLine) {
|
|
||||||
pathLineModel.copyFrom(pathLine.saveData());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
const pathLine = drawStore.selectedGraphic as PathLine;
|
|
||||||
if (pathLine) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(pathLine, pathLineModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -13,23 +13,29 @@
|
|||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
v-model="hasDoor"
|
v-model="platformModel.hasdoor"
|
||||||
:options="optionsDoor"
|
:options="optionsDoor"
|
||||||
label="是否有屏蔽门"
|
label="是否有屏蔽门"
|
||||||
|
map-options
|
||||||
|
emit-value
|
||||||
/>
|
/>
|
||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
v-model="direction"
|
v-model="platformModel.direction"
|
||||||
:options="optionsDirection"
|
:options="optionsDirection"
|
||||||
label="方向"
|
label="方向"
|
||||||
|
map-options
|
||||||
|
emit-value
|
||||||
/>
|
/>
|
||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
v-model="upAndDown"
|
v-model="platformModel.up"
|
||||||
:options="optionsUpAndDown"
|
:options="optionsUpAndDown"
|
||||||
label="上下行"
|
label="上下行"
|
||||||
|
map-options
|
||||||
|
emit-value
|
||||||
/>
|
/>
|
||||||
<q-list bordered separator class="rounded-borders">
|
<q-list bordered separator class="rounded-borders">
|
||||||
<q-item>
|
<q-item>
|
||||||
@ -47,68 +53,35 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { PlatformData } from 'src/drawApp/graphics/PlatformInteraction';
|
import { PlatformData } from 'src/drawApp/graphics/PlatformInteraction';
|
||||||
import { Platform } from 'src/graphics/platform/Platform';
|
import { Platform } from 'src/graphics/platform/Platform';
|
||||||
import { Station } from 'src/graphics/station/Station';
|
import { Station } from 'src/graphics/station/Station';
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { onMounted, reactive, ref, watch } from 'vue';
|
import { onMounted, ref } from 'vue';
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
const platformModel = reactive(new PlatformData());
|
const { data: platformModel, onUpdate } = useFormData(
|
||||||
const hasDoor = ref('是');
|
new PlatformData(),
|
||||||
const optionsDoor = ['是', '否'];
|
drawStore.getDrawApp()
|
||||||
const direction = ref('向上');
|
|
||||||
const upAndDown = ref('');
|
|
||||||
const optionsDirection = ['向上', '向下'];
|
|
||||||
const optionsUpAndDown = ['上行', '下行'];
|
|
||||||
const stationName = ref('');
|
|
||||||
enum showSelect {
|
|
||||||
是 = 'true',
|
|
||||||
否 = 'false',
|
|
||||||
向上 = 'up',
|
|
||||||
向下 = 'down',
|
|
||||||
}
|
|
||||||
enum showUp {
|
|
||||||
上行 = 'true',
|
|
||||||
下行 = 'false',
|
|
||||||
}
|
|
||||||
enum showSelectData {
|
|
||||||
true = '是',
|
|
||||||
false = '否',
|
|
||||||
up = '向上',
|
|
||||||
down = '向下',
|
|
||||||
}
|
|
||||||
enum showUpData {
|
|
||||||
true = '上行',
|
|
||||||
false = '下行',
|
|
||||||
}
|
|
||||||
|
|
||||||
drawStore.$subscribe;
|
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == Platform.Type) {
|
|
||||||
platformModel.copyFrom(val.saveData() as PlatformData);
|
|
||||||
hasDoor.value = (showSelectData as never)[platformModel.hasdoor + ''];
|
|
||||||
direction.value = (showSelectData as never)[platformModel.direction];
|
|
||||||
upAndDown.value = (showUpData as never)[platformModel.up + ''];
|
|
||||||
if (platformModel.refStation) {
|
|
||||||
const refStation = val.queryStore.queryById<Station>(
|
|
||||||
platformModel.refStation
|
|
||||||
) as Station;
|
|
||||||
stationName.value = refStation.datas.name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
const stationName = ref('');
|
||||||
|
const optionsDoor = [
|
||||||
|
{ label: '是', value: true },
|
||||||
|
{ label: '否', value: false },
|
||||||
|
];
|
||||||
|
const optionsDirection = [
|
||||||
|
{ label: '向上', value: 'up' },
|
||||||
|
{ label: '向下', value: 'down' },
|
||||||
|
];
|
||||||
|
const optionsUpAndDown = [
|
||||||
|
{ label: '上行', value: true },
|
||||||
|
{ label: '下行', value: false },
|
||||||
|
];
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
const platform = drawStore.selectedGraphic as Platform;
|
const platform = drawStore.selectedGraphic as Platform;
|
||||||
if (platform) {
|
if (platform) {
|
||||||
platformModel.copyFrom(platform.saveData());
|
|
||||||
hasDoor.value = (showSelectData as never)[platformModel.hasdoor + ''];
|
|
||||||
direction.value = (showSelectData as never)[platformModel.direction];
|
|
||||||
upAndDown.value = (showUpData as never)[platformModel.up + ''];
|
|
||||||
if (platformModel.refStation) {
|
if (platformModel.refStation) {
|
||||||
const refStation = platform.queryStore.queryById<Station>(
|
const refStation = platform.queryStore.queryById<Station>(
|
||||||
platformModel.refStation
|
platformModel.refStation
|
||||||
@ -117,14 +90,4 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
platformModel.hasdoor = JSON.parse((showSelect as never)[hasDoor.value]);
|
|
||||||
platformModel.direction = (showSelect as never)[direction.value];
|
|
||||||
platformModel.up = JSON.parse((showUp as never)[upAndDown.value]);
|
|
||||||
const platform = drawStore.selectedGraphic as Platform;
|
|
||||||
if (platform) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(platform, platformModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -66,35 +66,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { RectData } from 'src/drawApp/graphics/RectInteraction';
|
import { RectData } from 'src/drawApp/graphics/RectInteraction';
|
||||||
import { Rect } from 'src/graphics/rect/Rect';
|
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { onMounted, reactive, watch } from 'vue';
|
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
const rectModel = reactive(new RectData());
|
const { data: rectModel, onUpdate } = useFormData(
|
||||||
|
new RectData(),
|
||||||
drawStore.$subscribe;
|
drawStore.getDrawApp()
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == Rect.Type) {
|
|
||||||
rectModel.copyFrom(val.saveData() as RectData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
const Rect = drawStore.selectedGraphic as Rect;
|
|
||||||
if (Rect) {
|
|
||||||
rectModel.copyFrom(Rect.saveData());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
const Rect = drawStore.selectedGraphic as Rect;
|
|
||||||
if (Rect) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(Rect, rectModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -118,10 +118,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { RunLineData } from 'src/drawApp/graphics/RunLineInteraction';
|
import { RunLineData } from 'src/drawApp/graphics/RunLineInteraction';
|
||||||
import { RunLine } from 'src/graphics/runLine/RunLine';
|
import { RunLine } from 'src/graphics/runLine/RunLine';
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { onMounted, reactive, watch, ref } from 'vue';
|
import { onMounted, reactive } from 'vue';
|
||||||
import { Point } from 'pixi.js';
|
import { Point } from 'pixi.js';
|
||||||
import {
|
import {
|
||||||
IStationLineData,
|
IStationLineData,
|
||||||
@ -130,20 +131,13 @@ import {
|
|||||||
import { getLineList } from 'src/api/LineInfoApi';
|
import { getLineList } from 'src/api/LineInfoApi';
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
const runLineModel = reactive(new RunLineData());
|
const { data: runLineModel, onUpdate } = useFormData(
|
||||||
|
new RunLineData(),
|
||||||
|
useDrawStore().getDrawApp()
|
||||||
|
);
|
||||||
const stationLines: IStationLineData[] = reactive([]);
|
const stationLines: IStationLineData[] = reactive([]);
|
||||||
const lineList: { label: string; value: string }[] = reactive([]);
|
const lineList: { label: string; value: string }[] = reactive([]);
|
||||||
|
|
||||||
drawStore.$subscribe;
|
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == RunLine.Type) {
|
|
||||||
runLineModel.copyFrom(val.saveData() as RunLineData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getLineList()
|
getLineList()
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
@ -154,22 +148,12 @@ onMounted(() => {
|
|||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.error('获取线路列表失败:' + err.message);
|
console.error('获取线路列表失败:' + err.message);
|
||||||
});
|
});
|
||||||
const runLine = drawStore.selectedGraphic as RunLine;
|
|
||||||
const stations = drawStore
|
const stations = drawStore
|
||||||
.getDrawApp()
|
.getDrawApp()
|
||||||
.queryStore.queryByType(StationLine.Type) as StationLine[];
|
.queryStore.queryByType(StationLine.Type) as StationLine[];
|
||||||
stations.forEach((item) => stationLines.push(item.datas));
|
stations.forEach((item) => stationLines.push(item.datas));
|
||||||
if (runLine) {
|
|
||||||
runLineModel.copyFrom(runLine.saveData());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
const runLine = drawStore.selectedGraphic as RunLine;
|
|
||||||
if (runLine) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(runLine, runLineModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function generatePathLine() {
|
function generatePathLine() {
|
||||||
const runLine = drawStore.selectedGraphic as RunLine;
|
const runLine = drawStore.selectedGraphic as RunLine;
|
||||||
if (runLine) {
|
if (runLine) {
|
||||||
@ -180,6 +164,7 @@ function generatePathLine() {
|
|||||||
runLine.generatePathLine(points1);
|
runLine.generatePathLine(points1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateContainSta() {
|
function generateContainSta() {
|
||||||
const runLine = drawStore.selectedGraphic as RunLine;
|
const runLine = drawStore.selectedGraphic as RunLine;
|
||||||
if (runLine) {
|
if (runLine) {
|
||||||
|
@ -73,16 +73,19 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { SectionData } from 'src/drawApp/graphics/SectionInteraction';
|
import { SectionData } from 'src/drawApp/graphics/SectionInteraction';
|
||||||
import { AxleCounting } from 'src/graphics/axleCounting/AxleCounting';
|
import { AxleCounting } from 'src/graphics/axleCounting/AxleCounting';
|
||||||
import { Section, SectionType } from 'src/graphics/section/Section';
|
import { Section, SectionType } from 'src/graphics/section/Section';
|
||||||
import { Turnout } from 'src/graphics/turnout/Turnout';
|
import { Turnout } from 'src/graphics/turnout/Turnout';
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { computed, shallowRef, watchEffect } from 'vue';
|
import { computed } from 'vue';
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
|
const { data: sectionModel, onUpdate } = useFormData(
|
||||||
const sectionModel = shallowRef(new SectionData());
|
new SectionData(),
|
||||||
|
drawStore.getDrawApp()
|
||||||
|
);
|
||||||
|
|
||||||
const sectionRelations = computed(() => {
|
const sectionRelations = computed(() => {
|
||||||
const section = drawStore.selectedGraphic as Section;
|
const section = drawStore.selectedGraphic as Section;
|
||||||
@ -137,17 +140,4 @@ const axleCountingRelations = computed(() => {
|
|||||||
(relation) => relation.getOtherGraphic<AxleCounting>(section).datas.code
|
(relation) => relation.getOtherGraphic<AxleCounting>(section).datas.code
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
watchEffect(() => {
|
|
||||||
const section = drawStore.selectedGraphic;
|
|
||||||
if (section && section instanceof Section) {
|
|
||||||
sectionModel.value = section.saveData();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const onUpdate = () => {
|
|
||||||
const section = drawStore.selectedGraphic as Section;
|
|
||||||
if (section) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(section, sectionModel.value);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -16,13 +16,16 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { SeparatorData } from 'src/drawApp/graphics/SeparatorInteraction';
|
import { SeparatorData } from 'src/drawApp/graphics/SeparatorInteraction';
|
||||||
import { Separator, separatorTypeEnum } from 'src/graphics/separator/Separator';
|
import { separatorTypeEnum } from 'src/graphics/separator/Separator';
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { onMounted, reactive, watch } from 'vue';
|
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
const separatorModel = reactive(new SeparatorData());
|
const { data: separatorModel, onUpdate } = useFormData(
|
||||||
|
new SeparatorData(),
|
||||||
|
drawStore.getDrawApp()
|
||||||
|
);
|
||||||
|
|
||||||
const typeOptions = [
|
const typeOptions = [
|
||||||
{ label: '区段分隔符', value: separatorTypeEnum.section },
|
{ label: '区段分隔符', value: separatorTypeEnum.section },
|
||||||
@ -30,28 +33,4 @@ const typeOptions = [
|
|||||||
{ label: '左断路分隔符', value: separatorTypeEnum.endA },
|
{ label: '左断路分隔符', value: separatorTypeEnum.endA },
|
||||||
{ label: '右断路分隔符', value: separatorTypeEnum.endB },
|
{ label: '右断路分隔符', value: separatorTypeEnum.endB },
|
||||||
];
|
];
|
||||||
|
|
||||||
drawStore.$subscribe;
|
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == Separator.Type) {
|
|
||||||
separatorModel.copyFrom(val.saveData() as SeparatorData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
const Separator = drawStore.selectedGraphic as Separator;
|
|
||||||
if (Separator) {
|
|
||||||
separatorModel.copyFrom(Separator.saveData());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
const Separator = drawStore.selectedGraphic as Separator;
|
|
||||||
if (Separator) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(Separator, separatorModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
style="margin-top: 10px"
|
style="margin-top: 10px"
|
||||||
v-model="kilometerSystem.coordinateSystem"
|
v-model="signalModel.kilometerSystem.coordinateSystem"
|
||||||
:options="CoordinateSystemOptions"
|
:options="CoordinateSystemOptions"
|
||||||
:map-options="true"
|
:map-options="true"
|
||||||
:emit-value="true"
|
:emit-value="true"
|
||||||
@ -20,7 +20,7 @@
|
|||||||
<q-input
|
<q-input
|
||||||
outlined
|
outlined
|
||||||
style="margin-top: 10px"
|
style="margin-top: 10px"
|
||||||
v-model.number="kilometerSystem.kilometer"
|
v-model.number="signalModel.kilometerSystem.kilometer"
|
||||||
type="number"
|
type="number"
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
label="公里标(mm):"
|
label="公里标(mm):"
|
||||||
@ -29,14 +29,15 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { SignalData } from 'src/drawApp/graphics/SignalInteraction';
|
import { SignalData } from 'src/drawApp/graphics/SignalInteraction';
|
||||||
import { Signal } from 'src/graphics/signal/Signal';
|
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { onMounted, reactive, watch } from 'vue';
|
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
const signalModel = reactive(new SignalData());
|
const { data: signalModel, onUpdate } = useFormData(
|
||||||
const kilometerSystem = reactive({ coordinateSystem: '', kilometer: 0 });
|
new SignalData(),
|
||||||
|
drawStore.getDrawApp()
|
||||||
|
);
|
||||||
|
|
||||||
const CoordinateSystemOptions = [
|
const CoordinateSystemOptions = [
|
||||||
{ label: '车辆段', value: 'DEPOT' },
|
{ label: '车辆段', value: 'DEPOT' },
|
||||||
@ -44,42 +45,4 @@ const CoordinateSystemOptions = [
|
|||||||
{ label: '正线', value: 'MAIN_LINE' },
|
{ label: '正线', value: 'MAIN_LINE' },
|
||||||
{ label: '换线', value: 'TRANSFER' },
|
{ label: '换线', value: 'TRANSFER' },
|
||||||
];
|
];
|
||||||
|
|
||||||
drawStore.$subscribe;
|
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == Signal.Type) {
|
|
||||||
signalModel.copyFrom(val.saveData() as SignalData);
|
|
||||||
if (signalModel.kilometerSystem) {
|
|
||||||
kilometerSystem.coordinateSystem =
|
|
||||||
signalModel.kilometerSystem.coordinateSystem;
|
|
||||||
kilometerSystem.kilometer = signalModel.kilometerSystem.kilometer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
const signal = drawStore.selectedGraphic as Signal;
|
|
||||||
if (signal) {
|
|
||||||
signalModel.copyFrom(signal.saveData());
|
|
||||||
if (signalModel.kilometerSystem) {
|
|
||||||
kilometerSystem.coordinateSystem =
|
|
||||||
signalModel.kilometerSystem.coordinateSystem;
|
|
||||||
kilometerSystem.kilometer = signalModel.kilometerSystem.kilometer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
const signal = drawStore.selectedGraphic as Signal;
|
|
||||||
signalModel.kilometerSystem = {
|
|
||||||
coordinateSystem: kilometerSystem.coordinateSystem,
|
|
||||||
kilometer: kilometerSystem.kilometer,
|
|
||||||
};
|
|
||||||
if (signal) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(signal, signalModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -24,64 +24,27 @@
|
|||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
v-model="hasTransfer"
|
v-model="stationLineModel.hasTransfer"
|
||||||
:options="optionsCircle"
|
:options="optionsCircle"
|
||||||
label="是否有换乘"
|
label="是否有换乘"
|
||||||
|
map-options
|
||||||
|
emit-value
|
||||||
/>
|
/>
|
||||||
</q-form>
|
</q-form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { StationLineData } from 'src/drawApp/graphics/StationLineInteraction';
|
import { StationLineData } from 'src/drawApp/graphics/StationLineInteraction';
|
||||||
import { StationLine } from 'src/graphics/stationLine/StationLine';
|
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { onMounted, reactive, ref, watch } from 'vue';
|
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
const stationLineModel = reactive(new StationLineData());
|
const { data: stationLineModel, onUpdate } = useFormData(
|
||||||
const hasTransfer = ref('是');
|
new StationLineData(),
|
||||||
const optionsCircle = ['是', '否'];
|
drawStore.getDrawApp()
|
||||||
enum showSelect {
|
|
||||||
是 = 'true',
|
|
||||||
否 = 'false',
|
|
||||||
}
|
|
||||||
enum showSelectData {
|
|
||||||
true = '是',
|
|
||||||
false = '否',
|
|
||||||
}
|
|
||||||
|
|
||||||
drawStore.$subscribe;
|
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == StationLine.Type) {
|
|
||||||
stationLineModel.copyFrom(val.saveData() as StationLineData);
|
|
||||||
hasTransfer.value = (showSelectData as never)[
|
|
||||||
stationLineModel.hasTransfer + ''
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
const optionsCircle = [
|
||||||
onMounted(() => {
|
{ label: '是', value: true },
|
||||||
const stationLine = drawStore.selectedGraphic as StationLine;
|
{ label: '否', value: false },
|
||||||
if (stationLine) {
|
];
|
||||||
stationLineModel.copyFrom(stationLine.saveData());
|
|
||||||
hasTransfer.value = (showSelectData as never)[
|
|
||||||
stationLineModel.hasTransfer + ''
|
|
||||||
];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
stationLineModel.hasTransfer = JSON.parse(
|
|
||||||
(showSelect as never)[hasTransfer.value]
|
|
||||||
);
|
|
||||||
const stationLine = drawStore.selectedGraphic as StationLine;
|
|
||||||
if (stationLine) {
|
|
||||||
drawStore
|
|
||||||
.getDrawApp()
|
|
||||||
.updateGraphicAndRecord(stationLine, stationLineModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
style="margin-top: 10px"
|
style="margin-top: 10px"
|
||||||
v-model="kilometerSystem.coordinateSystem"
|
v-model="stationModel.kilometerSystem.coordinateSystem"
|
||||||
:options="CoordinateSystemOptions"
|
:options="CoordinateSystemOptions"
|
||||||
:map-options="true"
|
:map-options="true"
|
||||||
:emit-value="true"
|
:emit-value="true"
|
||||||
@ -32,7 +32,7 @@
|
|||||||
<q-input
|
<q-input
|
||||||
outlined
|
outlined
|
||||||
style="margin-top: 10px"
|
style="margin-top: 10px"
|
||||||
v-model.number="kilometerSystem.kilometer"
|
v-model.number="stationModel.kilometerSystem.kilometer"
|
||||||
type="number"
|
type="number"
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
label="公里标(mm):"
|
label="公里标(mm):"
|
||||||
@ -40,40 +40,38 @@
|
|||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
v-model="hasControl"
|
v-model="stationModel.hasControl"
|
||||||
:options="optionsControl"
|
:options="optionsControl"
|
||||||
label="是否有控制"
|
label="是否有控制"
|
||||||
|
map-options
|
||||||
|
emit-value
|
||||||
/>
|
/>
|
||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
v-model="concentrationStations"
|
v-model="stationModel.concentrationStations"
|
||||||
:options="optionsControl"
|
:options="optionsControl"
|
||||||
label="是否集中站"
|
label="是否集中站"
|
||||||
|
map-options
|
||||||
|
emit-value
|
||||||
/>
|
/>
|
||||||
</q-form>
|
</q-form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { StationData } from 'src/drawApp/graphics/StationInteraction';
|
import { StationData } from 'src/drawApp/graphics/StationInteraction';
|
||||||
import { Station } from 'src/graphics/station/Station';
|
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { onMounted, reactive, ref, watch } from 'vue';
|
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
const stationModel = reactive(new StationData());
|
const { data: stationModel, onUpdate } = useFormData(
|
||||||
const hasControl = ref('是');
|
new StationData(),
|
||||||
const concentrationStations = ref('否');
|
drawStore.getDrawApp()
|
||||||
const optionsControl = ['是', '否'];
|
);
|
||||||
enum showSelect {
|
const optionsControl = [
|
||||||
是 = 'true',
|
{ label: '是', value: true },
|
||||||
否 = 'false',
|
{ label: '否', value: false },
|
||||||
}
|
];
|
||||||
enum showSelectData {
|
|
||||||
true = '是',
|
|
||||||
false = '否',
|
|
||||||
}
|
|
||||||
const kilometerSystem = reactive({ coordinateSystem: '', kilometer: 0 });
|
|
||||||
|
|
||||||
const CoordinateSystemOptions = [
|
const CoordinateSystemOptions = [
|
||||||
{ label: '车辆段', value: 'DEPOT' },
|
{ label: '车辆段', value: 'DEPOT' },
|
||||||
@ -81,56 +79,4 @@ const CoordinateSystemOptions = [
|
|||||||
{ label: '正线', value: 'MAIN_LINE' },
|
{ label: '正线', value: 'MAIN_LINE' },
|
||||||
{ label: '换线', value: 'TRANSFER' },
|
{ label: '换线', value: 'TRANSFER' },
|
||||||
];
|
];
|
||||||
|
|
||||||
drawStore.$subscribe;
|
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == Station.Type) {
|
|
||||||
stationModel.copyFrom(val.saveData() as StationData);
|
|
||||||
hasControl.value = (showSelectData as never)[
|
|
||||||
stationModel.hasControl + ''
|
|
||||||
];
|
|
||||||
concentrationStations.value = (showSelectData as never)[
|
|
||||||
stationModel.concentrationStations + ''
|
|
||||||
];
|
|
||||||
if (stationModel.kilometerSystem) {
|
|
||||||
kilometerSystem.coordinateSystem =
|
|
||||||
stationModel.kilometerSystem.coordinateSystem;
|
|
||||||
kilometerSystem.kilometer = stationModel.kilometerSystem.kilometer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
const station = drawStore.selectedGraphic as Station;
|
|
||||||
if (station) {
|
|
||||||
stationModel.copyFrom(station.saveData());
|
|
||||||
hasControl.value = (showSelectData as never)[stationModel.hasControl + ''];
|
|
||||||
concentrationStations.value = (showSelectData as never)[
|
|
||||||
stationModel.concentrationStations + ''
|
|
||||||
];
|
|
||||||
if (stationModel.kilometerSystem) {
|
|
||||||
kilometerSystem.coordinateSystem =
|
|
||||||
stationModel.kilometerSystem.coordinateSystem;
|
|
||||||
kilometerSystem.kilometer = stationModel.kilometerSystem.kilometer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
stationModel.hasControl = JSON.parse((showSelect as never)[hasControl.value]);
|
|
||||||
stationModel.concentrationStations = JSON.parse(
|
|
||||||
(showSelect as never)[concentrationStations.value]
|
|
||||||
);
|
|
||||||
stationModel.kilometerSystem = {
|
|
||||||
coordinateSystem: kilometerSystem.coordinateSystem,
|
|
||||||
kilometer: kilometerSystem.kilometer,
|
|
||||||
};
|
|
||||||
const station = drawStore.selectedGraphic as Station;
|
|
||||||
if (station) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(station, stationModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,84 +0,0 @@
|
|||||||
<template>
|
|
||||||
<q-form>
|
|
||||||
<q-input outlined readonly v-model="trainModel.id" label="id" hint="" />
|
|
||||||
<q-input
|
|
||||||
outlined
|
|
||||||
v-model="trainModel.code"
|
|
||||||
label="车号"
|
|
||||||
hint=""
|
|
||||||
@blur="onUpdate"
|
|
||||||
/>
|
|
||||||
<q-select
|
|
||||||
outlined
|
|
||||||
@blur="onUpdate"
|
|
||||||
v-model="hasBorder"
|
|
||||||
:options="optionsDoor"
|
|
||||||
label="是否有边框"
|
|
||||||
/>
|
|
||||||
<q-select
|
|
||||||
outlined
|
|
||||||
@blur="onUpdate"
|
|
||||||
v-model="trainDirection"
|
|
||||||
:options="optionsDirection"
|
|
||||||
label="行驶方向"
|
|
||||||
/>
|
|
||||||
</q-form>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { TrainData } from 'src/drawApp/graphics/TrainInteraction';
|
|
||||||
import { Train } from 'src/graphics/train/Train';
|
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
|
||||||
import { onMounted, reactive, ref, watch } from 'vue';
|
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
|
||||||
const trainModel = reactive(new TrainData());
|
|
||||||
const hasBorder = ref('是');
|
|
||||||
const optionsDoor = ['是', '否'];
|
|
||||||
const trainDirection = ref('向左');
|
|
||||||
const optionsDirection = ['向左', '向右'];
|
|
||||||
enum showSelect {
|
|
||||||
是 = 'true',
|
|
||||||
否 = 'false',
|
|
||||||
向左 = 'left',
|
|
||||||
向右 = 'right',
|
|
||||||
}
|
|
||||||
enum showSelectData {
|
|
||||||
true = '是',
|
|
||||||
false = '否',
|
|
||||||
left = '向左',
|
|
||||||
right = '向右',
|
|
||||||
}
|
|
||||||
|
|
||||||
drawStore.$subscribe;
|
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == Train.Type) {
|
|
||||||
trainModel.copyFrom(val.saveData() as TrainData);
|
|
||||||
hasBorder.value = (showSelectData as never)[trainModel.hasBorder + ''];
|
|
||||||
trainDirection.value = (showSelectData as never)[
|
|
||||||
trainModel.trainDirection
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
const train = drawStore.selectedGraphic as Train;
|
|
||||||
if (train) {
|
|
||||||
trainModel.copyFrom(train.saveData());
|
|
||||||
hasBorder.value = (showSelectData as never)[trainModel.hasBorder + ''];
|
|
||||||
trainDirection.value = (showSelectData as never)[trainModel.trainDirection];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
trainModel.hasBorder = JSON.parse((showSelect as never)[hasBorder.value]);
|
|
||||||
trainModel.trainDirection = (showSelect as never)[trainDirection.value];
|
|
||||||
const train = drawStore.selectedGraphic as Train;
|
|
||||||
if (train) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(train, trainModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
@ -55,42 +55,20 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { TrainWindowData } from 'src/drawApp/graphics/TrainWindowInteraction';
|
import { TrainWindowData } from 'src/drawApp/graphics/TrainWindowInteraction';
|
||||||
import { LogicSection } from 'src/graphics/logicSection/LogicSection';
|
import { LogicSection } from 'src/graphics/logicSection/LogicSection';
|
||||||
import { Section } from 'src/graphics/section/Section';
|
import { Section } from 'src/graphics/section/Section';
|
||||||
import { TrainWindow } from 'src/graphics/trainWindow/TrainWindow';
|
import { TrainWindow } from 'src/graphics/trainWindow/TrainWindow';
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { computed, onMounted, reactive, watch } from 'vue';
|
import { computed } from 'vue';
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
const trainWindowModel = reactive(new TrainWindowData());
|
const { data: trainWindowModel, onUpdate } = useFormData(
|
||||||
|
new TrainWindowData(),
|
||||||
drawStore.$subscribe;
|
drawStore.getDrawApp()
|
||||||
watch(
|
|
||||||
() => drawStore.selectedGraphic,
|
|
||||||
(val) => {
|
|
||||||
if (val && val.type == TrainWindow.Type) {
|
|
||||||
trainWindowModel.copyFrom(val.saveData() as TrainWindowData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
const trainWindow = drawStore.selectedGraphic as TrainWindow;
|
|
||||||
if (trainWindow) {
|
|
||||||
trainWindowModel.copyFrom(trainWindow.saveData());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function onUpdate() {
|
|
||||||
const trainWindow = drawStore.selectedGraphic as TrainWindow;
|
|
||||||
if (trainWindow) {
|
|
||||||
drawStore
|
|
||||||
.getDrawApp()
|
|
||||||
.updateGraphicAndRecord(trainWindow, trainWindowModel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const relatedLogicSection = computed((): LogicSection[] => {
|
const relatedLogicSection = computed((): LogicSection[] => {
|
||||||
if (
|
if (
|
||||||
drawStore.selectedGraphic &&
|
drawStore.selectedGraphic &&
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
style="margin-top: 10px"
|
style="margin-top: 10px"
|
||||||
v-model="kilometerSystem[0].coordinateSystem"
|
v-model="turnoutModel.kilometerSystem[0].coordinateSystem"
|
||||||
:options="CoordinateSystemOptions"
|
:options="CoordinateSystemOptions"
|
||||||
:map-options="true"
|
:map-options="true"
|
||||||
:emit-value="true"
|
:emit-value="true"
|
||||||
@ -20,7 +20,7 @@
|
|||||||
<q-input
|
<q-input
|
||||||
outlined
|
outlined
|
||||||
style="margin-top: 10px"
|
style="margin-top: 10px"
|
||||||
v-model.number="kilometerSystem[0].kilometer"
|
v-model.number="turnoutModel.kilometerSystem[0].kilometer"
|
||||||
type="number"
|
type="number"
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
label="公里标(mm):"
|
label="公里标(mm):"
|
||||||
@ -28,7 +28,7 @@
|
|||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
style="margin-top: 10px"
|
style="margin-top: 10px"
|
||||||
v-model="kilometerSystem[1].coordinateSystem"
|
v-model="turnoutModel.kilometerSystem[1].coordinateSystem"
|
||||||
:options="CoordinateSystemOptions"
|
:options="CoordinateSystemOptions"
|
||||||
:map-options="true"
|
:map-options="true"
|
||||||
:emit-value="true"
|
:emit-value="true"
|
||||||
@ -38,7 +38,7 @@
|
|||||||
<q-input
|
<q-input
|
||||||
outlined
|
outlined
|
||||||
style="margin-top: 10px"
|
style="margin-top: 10px"
|
||||||
v-model.number="kilometerSystem[1].kilometer"
|
v-model.number="turnoutModel.kilometerSystem[1].kilometer"
|
||||||
type="number"
|
type="number"
|
||||||
@blur="onUpdate"
|
@blur="onUpdate"
|
||||||
label="公里标(mm):"
|
label="公里标(mm):"
|
||||||
@ -71,24 +71,24 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useFormData } from 'src/components/DrawAppFormUtils';
|
||||||
import { TurnoutData } from 'src/drawApp/graphics/TurnoutInteraction';
|
import { TurnoutData } from 'src/drawApp/graphics/TurnoutInteraction';
|
||||||
import { Section } from 'src/graphics/section/Section';
|
import { Section } from 'src/graphics/section/Section';
|
||||||
import { Turnout } from 'src/graphics/turnout/Turnout';
|
import { Turnout } from 'src/graphics/turnout/Turnout';
|
||||||
import { useDrawStore } from 'src/stores/draw-store';
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
import { computed, reactive, shallowRef, watchEffect } from 'vue';
|
import { computed } from 'vue';
|
||||||
|
|
||||||
const drawStore = useDrawStore();
|
const drawStore = useDrawStore();
|
||||||
|
const { data: turnoutModel, onUpdate } = useFormData(
|
||||||
|
new TurnoutData(),
|
||||||
|
drawStore.getDrawApp()
|
||||||
|
);
|
||||||
const CoordinateSystemOptions = [
|
const CoordinateSystemOptions = [
|
||||||
{ label: '车辆段', value: 'DEPOT' },
|
{ label: '车辆段', value: 'DEPOT' },
|
||||||
{ label: '停车场', value: 'PARKING_LOT' },
|
{ label: '停车场', value: 'PARKING_LOT' },
|
||||||
{ label: '正线', value: 'MAIN_LINE' },
|
{ label: '正线', value: 'MAIN_LINE' },
|
||||||
{ label: '换线', value: 'TRANSFER' },
|
{ label: '换线', value: 'TRANSFER' },
|
||||||
];
|
];
|
||||||
const turnoutModel = shallowRef(new TurnoutData());
|
|
||||||
const kilometerSystem = reactive([
|
|
||||||
{ coordinateSystem: '', kilometer: 0 },
|
|
||||||
{ coordinateSystem: '', kilometer: 0 },
|
|
||||||
]);
|
|
||||||
|
|
||||||
const sectionRelations = computed(() => {
|
const sectionRelations = computed(() => {
|
||||||
const turnout = drawStore.selectedGraphic as Turnout;
|
const turnout = drawStore.selectedGraphic as Turnout;
|
||||||
@ -124,29 +124,4 @@ const turnoutRelations = computed(() => {
|
|||||||
}(${relation.getOtherRelationParam(turnout).param})`
|
}(${relation.getOtherRelationParam(turnout).param})`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
watchEffect(() => {
|
|
||||||
const turnout = drawStore.selectedGraphic;
|
|
||||||
if (turnout && turnout instanceof Turnout) {
|
|
||||||
turnoutModel.value = turnout.saveData();
|
|
||||||
if (turnoutModel.value.kilometerSystem.length > 0) {
|
|
||||||
kilometerSystem.forEach((ks, i) => {
|
|
||||||
ks.coordinateSystem =
|
|
||||||
turnoutModel.value.kilometerSystem[i].coordinateSystem;
|
|
||||||
ks.kilometer = turnoutModel.value.kilometerSystem[i].kilometer;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const onUpdate = () => {
|
|
||||||
const turnout = drawStore.selectedGraphic as Turnout;
|
|
||||||
turnoutModel.value.kilometerSystem = kilometerSystem.map((ks) => ({
|
|
||||||
coordinateSystem: ks.coordinateSystem,
|
|
||||||
kilometer: ks.kilometer,
|
|
||||||
}));
|
|
||||||
if (turnout) {
|
|
||||||
drawStore.getDrawApp().updateGraphicAndRecord(turnout, turnoutModel.value);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -130,6 +130,8 @@ const optionsAlertType = [
|
|||||||
'计轴大面积橙光带',
|
'计轴大面积橙光带',
|
||||||
'道岔大面积失表',
|
'道岔大面积失表',
|
||||||
'列车信号故障',
|
'列车信号故障',
|
||||||
|
'联锁区红光带',
|
||||||
|
'联锁区橙光带',
|
||||||
];
|
];
|
||||||
|
|
||||||
enum DeviceType {
|
enum DeviceType {
|
||||||
|
@ -52,28 +52,25 @@ watch(
|
|||||||
const onRequest: QTable['onRequest'] = async (props) => {
|
const onRequest: QTable['onRequest'] = async (props) => {
|
||||||
const { page, rowsPerPage } = props.pagination;
|
const { page, rowsPerPage } = props.pagination;
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
let resp;
|
|
||||||
try {
|
try {
|
||||||
resp = await getDeviceAreaList({
|
const resp = await getDeviceAreaList({
|
||||||
lineId,
|
lineId,
|
||||||
current: page,
|
current: page,
|
||||||
size: rowsPerPage,
|
size: rowsPerPage,
|
||||||
areaName: searchAreaName.value,
|
areaName: searchAreaName.value,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
|
||||||
errorNotify('没有所查区域名称', '');
|
|
||||||
resp = await getDeviceAreaList({
|
|
||||||
lineId,
|
|
||||||
current: page,
|
|
||||||
size: rowsPerPage,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
pagination.value.page = resp.current;
|
pagination.value.page = resp.current;
|
||||||
pagination.value.rowsNumber = resp.total;
|
pagination.value.rowsNumber = resp.total;
|
||||||
pagination.value.rowsPerPage = resp.size;
|
pagination.value.rowsPerPage = resp.size;
|
||||||
|
|
||||||
rows.value = resp.records;
|
rows.value = resp.records;
|
||||||
|
} catch (err) {
|
||||||
|
$q.notify({
|
||||||
|
type: 'negative',
|
||||||
|
message: '无法获取范围列表',
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const onDialogShow = () => {
|
const onDialogShow = () => {
|
||||||
|
@ -13,3 +13,12 @@ export function getHttpBase() {
|
|||||||
export function getWebsocketUrl() {
|
export function getWebsocketUrl() {
|
||||||
return `ws://${getHost()}/ws-default`;
|
return `ws://${getHost()}/ws-default`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getShowSetAlarmTextButton() {
|
||||||
|
let show = false;
|
||||||
|
const host = window.location.hostname;
|
||||||
|
if (process.env.NODE_ENV == 'development' || host == '192.168.3.233') {
|
||||||
|
show = true;
|
||||||
|
}
|
||||||
|
return show;
|
||||||
|
}
|
||||||
|
@ -33,6 +33,9 @@ export class AxleCountingData
|
|||||||
this.data.code = v;
|
this.data.code = v;
|
||||||
}
|
}
|
||||||
get kilometerSystem(): KilometerSystem {
|
get kilometerSystem(): KilometerSystem {
|
||||||
|
if (!this.data.kilometerSystem) {
|
||||||
|
this.data.kilometerSystem = new graphicData.KilometerSystem();
|
||||||
|
}
|
||||||
return this.data.kilometerSystem;
|
return this.data.kilometerSystem;
|
||||||
}
|
}
|
||||||
set kilometerSystem(v: KilometerSystem) {
|
set kilometerSystem(v: KilometerSystem) {
|
||||||
|
@ -6,7 +6,7 @@ import { GraphicDataBase } from './GraphicDataBase';
|
|||||||
import { ContextMenu } from 'src/jl-graphic/ui/ContextMenu';
|
import { ContextMenu } from 'src/jl-graphic/ui/ContextMenu';
|
||||||
import { MenuItemOptions } from 'src/jl-graphic/ui/Menu';
|
import { MenuItemOptions } from 'src/jl-graphic/ui/Menu';
|
||||||
import {
|
import {
|
||||||
GraphicApp,
|
IGraphicApp,
|
||||||
GraphicInteractionPlugin,
|
GraphicInteractionPlugin,
|
||||||
JlGraphic,
|
JlGraphic,
|
||||||
} from 'src/jl-graphic';
|
} from 'src/jl-graphic';
|
||||||
@ -119,12 +119,12 @@ const EpEditMenu: ContextMenu = ContextMenu.init({
|
|||||||
|
|
||||||
export class DrawLinkPlugin extends GraphicInteractionPlugin<Link> {
|
export class DrawLinkPlugin extends GraphicInteractionPlugin<Link> {
|
||||||
static Name = 'link_draw_right_menu';
|
static Name = 'link_draw_right_menu';
|
||||||
constructor(app: GraphicApp) {
|
constructor(app: IGraphicApp) {
|
||||||
super(DrawLinkPlugin.Name, app);
|
super(DrawLinkPlugin.Name, app);
|
||||||
app.registerMenu(LinkEditMenu);
|
app.registerMenu(LinkEditMenu);
|
||||||
app.registerMenu(EpEditMenu);
|
app.registerMenu(EpEditMenu);
|
||||||
}
|
}
|
||||||
static init(app: GraphicApp) {
|
static init(app: IGraphicApp) {
|
||||||
return new DrawLinkPlugin(app);
|
return new DrawLinkPlugin(app);
|
||||||
}
|
}
|
||||||
filter(...grahpics: JlGraphic[]): Link[] | undefined {
|
filter(...grahpics: JlGraphic[]): Link[] | undefined {
|
||||||
|
@ -10,7 +10,7 @@ import { graphicData } from 'src/protos/stationLayoutGraphics';
|
|||||||
import { DisplayObject, FederatedMouseEvent, IPointData } from 'pixi.js';
|
import { DisplayObject, FederatedMouseEvent, IPointData } from 'pixi.js';
|
||||||
import { state } from 'src/protos/device_status';
|
import { state } from 'src/protos/device_status';
|
||||||
import {
|
import {
|
||||||
GraphicApp,
|
IGraphicApp,
|
||||||
GraphicInteractionPlugin,
|
GraphicInteractionPlugin,
|
||||||
JlGraphic,
|
JlGraphic,
|
||||||
} from 'src/jl-graphic';
|
} from 'src/jl-graphic';
|
||||||
@ -81,14 +81,14 @@ const LogicSectionMenu = ContextMenu.init({
|
|||||||
|
|
||||||
export class LogicSectionOperationPlugin extends GraphicInteractionPlugin<LogicSection> {
|
export class LogicSectionOperationPlugin extends GraphicInteractionPlugin<LogicSection> {
|
||||||
static Name = 'logic_section_menu';
|
static Name = 'logic_section_menu';
|
||||||
constructor(app: GraphicApp) {
|
constructor(app: IGraphicApp) {
|
||||||
super(LogicSectionOperationPlugin.Name, app);
|
super(LogicSectionOperationPlugin.Name, app);
|
||||||
app.registerMenu(LogicSectionMenu);
|
app.registerMenu(LogicSectionMenu);
|
||||||
}
|
}
|
||||||
filter(...grahpics: JlGraphic[]): LogicSection[] | undefined {
|
filter(...grahpics: JlGraphic[]): LogicSection[] | undefined {
|
||||||
return grahpics.filter((g): g is LogicSection => g instanceof LogicSection);
|
return grahpics.filter((g): g is LogicSection => g instanceof LogicSection);
|
||||||
}
|
}
|
||||||
static init(app: GraphicApp) {
|
static init(app: IGraphicApp) {
|
||||||
return new LogicSectionOperationPlugin(app);
|
return new LogicSectionOperationPlugin(app);
|
||||||
}
|
}
|
||||||
bind(g: LogicSection): void {
|
bind(g: LogicSection): void {
|
||||||
|
@ -10,7 +10,7 @@ import { state } from 'src/protos/device_status';
|
|||||||
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 {
|
import {
|
||||||
GraphicApp,
|
IGraphicApp,
|
||||||
GraphicInteractionPlugin,
|
GraphicInteractionPlugin,
|
||||||
JlGraphic,
|
JlGraphic,
|
||||||
} from 'src/jl-graphic';
|
} from 'src/jl-graphic';
|
||||||
@ -224,11 +224,11 @@ const PlatformOperateMenu: ContextMenu = ContextMenu.init({
|
|||||||
|
|
||||||
export class PlatformOperateInteraction extends GraphicInteractionPlugin<Platform> {
|
export class PlatformOperateInteraction extends GraphicInteractionPlugin<Platform> {
|
||||||
static Name = 'platform_operate_menu';
|
static Name = 'platform_operate_menu';
|
||||||
constructor(app: GraphicApp) {
|
constructor(app: IGraphicApp) {
|
||||||
super(PlatformOperateInteraction.Name, app);
|
super(PlatformOperateInteraction.Name, app);
|
||||||
app.registerMenu(PlatformOperateMenu);
|
app.registerMenu(PlatformOperateMenu);
|
||||||
}
|
}
|
||||||
static init(app: GraphicApp) {
|
static init(app: IGraphicApp) {
|
||||||
return new PlatformOperateInteraction(app);
|
return new PlatformOperateInteraction(app);
|
||||||
}
|
}
|
||||||
filter(...grahpics: JlGraphic[]): Platform[] | undefined {
|
filter(...grahpics: JlGraphic[]): Platform[] | undefined {
|
||||||
|
@ -4,7 +4,7 @@ import { graphicData } from 'src/protos/stationLayoutGraphics';
|
|||||||
import { GraphicDataBase } from './GraphicDataBase';
|
import { GraphicDataBase } from './GraphicDataBase';
|
||||||
import { DisplayObject, FederatedMouseEvent, IPointData } from 'pixi.js';
|
import { DisplayObject, FederatedMouseEvent, IPointData } from 'pixi.js';
|
||||||
import {
|
import {
|
||||||
GraphicApp,
|
IGraphicApp,
|
||||||
GraphicInteractionPlugin,
|
GraphicInteractionPlugin,
|
||||||
JlGraphic,
|
JlGraphic,
|
||||||
} from 'src/jl-graphic';
|
} from 'src/jl-graphic';
|
||||||
@ -128,12 +128,12 @@ const EpEditMenu: ContextMenu = ContextMenu.init({
|
|||||||
|
|
||||||
export class DrawPolygonPlugin extends GraphicInteractionPlugin<Polygon> {
|
export class DrawPolygonPlugin extends GraphicInteractionPlugin<Polygon> {
|
||||||
static Name = 'polygon_draw_right_menu';
|
static Name = 'polygon_draw_right_menu';
|
||||||
constructor(app: GraphicApp) {
|
constructor(app: IGraphicApp) {
|
||||||
super(DrawPolygonPlugin.Name, app);
|
super(DrawPolygonPlugin.Name, app);
|
||||||
app.registerMenu(PolygonEditMenu);
|
app.registerMenu(PolygonEditMenu);
|
||||||
app.registerMenu(EpEditMenu);
|
app.registerMenu(EpEditMenu);
|
||||||
}
|
}
|
||||||
static init(app: GraphicApp) {
|
static init(app: IGraphicApp) {
|
||||||
return new DrawPolygonPlugin(app);
|
return new DrawPolygonPlugin(app);
|
||||||
}
|
}
|
||||||
filter(...grahpics: JlGraphic[]): Polygon[] | undefined {
|
filter(...grahpics: JlGraphic[]): Polygon[] | undefined {
|
||||||
|
@ -8,7 +8,7 @@ import { graphicData } from 'src/protos/stationLayoutGraphics';
|
|||||||
import { GraphicDataBase } from './GraphicDataBase';
|
import { GraphicDataBase } from './GraphicDataBase';
|
||||||
import {
|
import {
|
||||||
GraphicInteractionPlugin,
|
GraphicInteractionPlugin,
|
||||||
GraphicApp,
|
IGraphicApp,
|
||||||
JlGraphic,
|
JlGraphic,
|
||||||
} from 'src/jl-graphic';
|
} from 'src/jl-graphic';
|
||||||
import { ContextMenu } from 'src/jl-graphic/ui/ContextMenu';
|
import { ContextMenu } from 'src/jl-graphic/ui/ContextMenu';
|
||||||
@ -133,12 +133,12 @@ const EpEditMenu: ContextMenu = ContextMenu.init({
|
|||||||
|
|
||||||
export class DrawRunLinePlugin extends GraphicInteractionPlugin<RunLine> {
|
export class DrawRunLinePlugin extends GraphicInteractionPlugin<RunLine> {
|
||||||
static Name = 'runline_draw_right_menu';
|
static Name = 'runline_draw_right_menu';
|
||||||
constructor(app: GraphicApp) {
|
constructor(app: IGraphicApp) {
|
||||||
super(DrawRunLinePlugin.Name, app);
|
super(DrawRunLinePlugin.Name, app);
|
||||||
app.registerMenu(RunLineEditMenu);
|
app.registerMenu(RunLineEditMenu);
|
||||||
app.registerMenu(EpEditMenu);
|
app.registerMenu(EpEditMenu);
|
||||||
}
|
}
|
||||||
static init(app: GraphicApp) {
|
static init(app: IGraphicApp) {
|
||||||
return new DrawRunLinePlugin(app);
|
return new DrawRunLinePlugin(app);
|
||||||
}
|
}
|
||||||
filter(...grahpics: JlGraphic[]): RunLine[] | undefined {
|
filter(...grahpics: JlGraphic[]): RunLine[] | undefined {
|
||||||
@ -221,11 +221,11 @@ export class DrawRunLinePlugin extends GraphicInteractionPlugin<RunLine> {
|
|||||||
|
|
||||||
export class RunLineOperateInteraction extends GraphicInteractionPlugin<RunLine> {
|
export class RunLineOperateInteraction extends GraphicInteractionPlugin<RunLine> {
|
||||||
static Name = 'runLine_operate_menu';
|
static Name = 'runLine_operate_menu';
|
||||||
constructor(app: GraphicApp) {
|
constructor(app: IGraphicApp) {
|
||||||
super(RunLineOperateInteraction.Name, app);
|
super(RunLineOperateInteraction.Name, app);
|
||||||
app.registerMenu(EpEditMenu);
|
app.registerMenu(EpEditMenu);
|
||||||
}
|
}
|
||||||
static init(app: GraphicApp) {
|
static init(app: IGraphicApp) {
|
||||||
return new RunLineOperateInteraction(app);
|
return new RunLineOperateInteraction(app);
|
||||||
}
|
}
|
||||||
filter(...grahpics: JlGraphic[]): RunLine[] | undefined {
|
filter(...grahpics: JlGraphic[]): RunLine[] | undefined {
|
||||||
|
@ -9,7 +9,7 @@ import { graphicData } from 'src/protos/stationLayoutGraphics';
|
|||||||
import { GraphicDataBase, GraphicStateBase } from './GraphicDataBase';
|
import { GraphicDataBase, GraphicStateBase } from './GraphicDataBase';
|
||||||
import {
|
import {
|
||||||
GraphicInteractionPlugin,
|
GraphicInteractionPlugin,
|
||||||
GraphicApp,
|
IGraphicApp,
|
||||||
JlGraphic,
|
JlGraphic,
|
||||||
} from 'src/jl-graphic';
|
} from 'src/jl-graphic';
|
||||||
import { ContextMenu } from 'src/jl-graphic/ui/ContextMenu';
|
import { ContextMenu } from 'src/jl-graphic/ui/ContextMenu';
|
||||||
@ -48,6 +48,9 @@ export class SignalData extends GraphicDataBase implements ISignalData {
|
|||||||
this.data.mirror = v;
|
this.data.mirror = v;
|
||||||
}
|
}
|
||||||
get kilometerSystem(): KilometerSystem {
|
get kilometerSystem(): KilometerSystem {
|
||||||
|
if (!this.data.kilometerSystem) {
|
||||||
|
this.data.kilometerSystem = new graphicData.KilometerSystem();
|
||||||
|
}
|
||||||
return this.data.kilometerSystem;
|
return this.data.kilometerSystem;
|
||||||
}
|
}
|
||||||
set kilometerSystem(v: KilometerSystem) {
|
set kilometerSystem(v: KilometerSystem) {
|
||||||
@ -283,11 +286,11 @@ const SignalOperateMenu: ContextMenu = ContextMenu.init({
|
|||||||
});
|
});
|
||||||
export class DrawSignalInteraction extends GraphicInteractionPlugin<Signal> {
|
export class DrawSignalInteraction extends GraphicInteractionPlugin<Signal> {
|
||||||
static Name = 'signal_draw_right_menu';
|
static Name = 'signal_draw_right_menu';
|
||||||
constructor(app: GraphicApp) {
|
constructor(app: IGraphicApp) {
|
||||||
super(DrawSignalInteraction.Name, app);
|
super(DrawSignalInteraction.Name, app);
|
||||||
app.registerMenu(SignalEditMenu);
|
app.registerMenu(SignalEditMenu);
|
||||||
}
|
}
|
||||||
static init(app: GraphicApp) {
|
static init(app: IGraphicApp) {
|
||||||
return new DrawSignalInteraction(app);
|
return new DrawSignalInteraction(app);
|
||||||
}
|
}
|
||||||
filter(...grahpics: JlGraphic[]): Signal[] | undefined {
|
filter(...grahpics: JlGraphic[]): Signal[] | undefined {
|
||||||
@ -316,11 +319,11 @@ export class DrawSignalInteraction extends GraphicInteractionPlugin<Signal> {
|
|||||||
|
|
||||||
export class SignalOperateInteraction extends GraphicInteractionPlugin<Signal> {
|
export class SignalOperateInteraction extends GraphicInteractionPlugin<Signal> {
|
||||||
static Name = 'signal_operate_menu';
|
static Name = 'signal_operate_menu';
|
||||||
constructor(app: GraphicApp) {
|
constructor(app: IGraphicApp) {
|
||||||
super(SignalOperateInteraction.Name, app);
|
super(SignalOperateInteraction.Name, app);
|
||||||
app.registerMenu(SignalOperateMenu);
|
app.registerMenu(SignalOperateMenu);
|
||||||
}
|
}
|
||||||
static init(app: GraphicApp) {
|
static init(app: IGraphicApp) {
|
||||||
return new SignalOperateInteraction(app);
|
return new SignalOperateInteraction(app);
|
||||||
}
|
}
|
||||||
filter(...grahpics: JlGraphic[]): Signal[] | undefined {
|
filter(...grahpics: JlGraphic[]): Signal[] | undefined {
|
||||||
|
@ -10,7 +10,7 @@ import { state } from 'src/protos/device_status';
|
|||||||
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 {
|
import {
|
||||||
GraphicApp,
|
IGraphicApp,
|
||||||
GraphicInteractionPlugin,
|
GraphicInteractionPlugin,
|
||||||
JlGraphic,
|
JlGraphic,
|
||||||
} from 'src/jl-graphic';
|
} from 'src/jl-graphic';
|
||||||
@ -42,6 +42,9 @@ export class StationData extends GraphicDataBase implements IStationData {
|
|||||||
this.data.code = v;
|
this.data.code = v;
|
||||||
}
|
}
|
||||||
get kilometerSystem(): KilometerSystem {
|
get kilometerSystem(): KilometerSystem {
|
||||||
|
if (!this.data.kilometerSystem) {
|
||||||
|
this.data.kilometerSystem = new graphicData.KilometerSystem();
|
||||||
|
}
|
||||||
return this.data.kilometerSystem;
|
return this.data.kilometerSystem;
|
||||||
}
|
}
|
||||||
set kilometerSystem(v: KilometerSystem) {
|
set kilometerSystem(v: KilometerSystem) {
|
||||||
@ -160,11 +163,11 @@ const StationOperateMenu: ContextMenu = ContextMenu.init({
|
|||||||
|
|
||||||
export class StationOperateInteraction extends GraphicInteractionPlugin<Station> {
|
export class StationOperateInteraction extends GraphicInteractionPlugin<Station> {
|
||||||
static Name = 'station_operate_menu';
|
static Name = 'station_operate_menu';
|
||||||
constructor(app: GraphicApp) {
|
constructor(app: IGraphicApp) {
|
||||||
super(StationOperateInteraction.Name, app);
|
super(StationOperateInteraction.Name, app);
|
||||||
app.registerMenu(StationOperateMenu);
|
app.registerMenu(StationOperateMenu);
|
||||||
}
|
}
|
||||||
static init(app: GraphicApp) {
|
static init(app: IGraphicApp) {
|
||||||
return new StationOperateInteraction(app);
|
return new StationOperateInteraction(app);
|
||||||
}
|
}
|
||||||
filter(...grahpics: JlGraphic[]): Station[] | undefined {
|
filter(...grahpics: JlGraphic[]): Station[] | undefined {
|
||||||
|
@ -7,7 +7,7 @@ import { train } from 'src/protos/train';
|
|||||||
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 {
|
import {
|
||||||
GraphicApp,
|
IGraphicApp,
|
||||||
GraphicInteractionPlugin,
|
GraphicInteractionPlugin,
|
||||||
JlGraphic,
|
JlGraphic,
|
||||||
VectorText,
|
VectorText,
|
||||||
@ -269,12 +269,12 @@ const TrainOperateMenu: ContextMenu = ContextMenu.init({
|
|||||||
export class TrainOperateInteraction extends GraphicInteractionPlugin<Train> {
|
export class TrainOperateInteraction extends GraphicInteractionPlugin<Train> {
|
||||||
static Name = 'train_operate_menu';
|
static Name = 'train_operate_menu';
|
||||||
hoverLaber: TrainHoverLabel;
|
hoverLaber: TrainHoverLabel;
|
||||||
constructor(app: GraphicApp) {
|
constructor(app: IGraphicApp) {
|
||||||
super(TrainOperateInteraction.Name, app);
|
super(TrainOperateInteraction.Name, app);
|
||||||
this.hoverLaber = new TrainHoverLabel();
|
this.hoverLaber = new TrainHoverLabel();
|
||||||
app.registerMenu(TrainOperateMenu);
|
app.registerMenu(TrainOperateMenu);
|
||||||
}
|
}
|
||||||
static init(app: GraphicApp) {
|
static init(app: IGraphicApp) {
|
||||||
return new TrainOperateInteraction(app);
|
return new TrainOperateInteraction(app);
|
||||||
}
|
}
|
||||||
filter(...grahpics: JlGraphic[]): Train[] | undefined {
|
filter(...grahpics: JlGraphic[]): Train[] | undefined {
|
||||||
|
@ -10,7 +10,7 @@ import { DisplayObject, FederatedMouseEvent, IPointData } from 'pixi.js';
|
|||||||
import { KilometerSystem } from 'src/graphics/signal/Signal';
|
import { KilometerSystem } from 'src/graphics/signal/Signal';
|
||||||
import { state } from 'src/protos/device_status';
|
import { state } from 'src/protos/device_status';
|
||||||
import {
|
import {
|
||||||
GraphicApp,
|
IGraphicApp,
|
||||||
GraphicInteractionPlugin,
|
GraphicInteractionPlugin,
|
||||||
JlGraphic,
|
JlGraphic,
|
||||||
} from 'src/jl-graphic';
|
} from 'src/jl-graphic';
|
||||||
@ -139,14 +139,14 @@ const TurnoutOperateMenu = ContextMenu.init({
|
|||||||
|
|
||||||
export class TurnoutOperationPlugin extends GraphicInteractionPlugin<Turnout> {
|
export class TurnoutOperationPlugin extends GraphicInteractionPlugin<Turnout> {
|
||||||
static Name = 'turnout_operate_menu';
|
static Name = 'turnout_operate_menu';
|
||||||
constructor(app: GraphicApp) {
|
constructor(app: IGraphicApp) {
|
||||||
super(TurnoutOperationPlugin.Name, app);
|
super(TurnoutOperationPlugin.Name, app);
|
||||||
app.registerMenu(TurnoutOperateMenu);
|
app.registerMenu(TurnoutOperateMenu);
|
||||||
}
|
}
|
||||||
filter(...grahpics: JlGraphic[]): Turnout[] | undefined {
|
filter(...grahpics: JlGraphic[]): Turnout[] | undefined {
|
||||||
return grahpics.filter((g): g is Turnout => g instanceof Turnout);
|
return grahpics.filter((g): g is Turnout => g instanceof Turnout);
|
||||||
}
|
}
|
||||||
static init(app: GraphicApp) {
|
static init(app: IGraphicApp) {
|
||||||
return new TurnoutOperationPlugin(app);
|
return new TurnoutOperationPlugin(app);
|
||||||
}
|
}
|
||||||
bind(g: Turnout): void {
|
bind(g: Turnout): void {
|
||||||
@ -314,7 +314,12 @@ export class TurnoutData extends GraphicDataBase implements ITurnoutData {
|
|||||||
this.data.pcRef = ref;
|
this.data.pcRef = ref;
|
||||||
}
|
}
|
||||||
get kilometerSystem(): KilometerSystem[] {
|
get kilometerSystem(): KilometerSystem[] {
|
||||||
return this.data.kilometerSystem;
|
return this.data.kilometerSystem.length > 0
|
||||||
|
? this.data.kilometerSystem
|
||||||
|
: (this.data.kilometerSystem = [
|
||||||
|
new graphicData.KilometerSystem(),
|
||||||
|
new graphicData.KilometerSystem(),
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
set kilometerSystem(value: KilometerSystem[]) {
|
set kilometerSystem(value: KilometerSystem[]) {
|
||||||
this.data.kilometerSystem = value.map(
|
this.data.kilometerSystem = value.map(
|
||||||
|
@ -17,11 +17,18 @@
|
|||||||
<q-toolbar-title> 西安NCC调度辅助决策系统 </q-toolbar-title>
|
<q-toolbar-title> 西安NCC调度辅助决策系统 </q-toolbar-title>
|
||||||
|
|
||||||
<q-btn
|
<q-btn
|
||||||
v-show="route.path.includes('monitor')"
|
v-show="route.path.includes('line/monitor')"
|
||||||
color="info"
|
color="info"
|
||||||
label="故障设置"
|
label="故障演练"
|
||||||
class="q-mr-sm"
|
class="q-mr-sm"
|
||||||
@click="alertSetShow = true"
|
@click="openSetAlarmMockDialog"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
v-if="showSetAlarmTextButton && route.path.includes('line/monitor')"
|
||||||
|
color="info"
|
||||||
|
label="故障测试"
|
||||||
|
class="q-mr-sm"
|
||||||
|
@click="openSetAlarmTextDialog"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="q-gutter-sm row items-center no-wrap">
|
<div class="q-gutter-sm row items-center no-wrap">
|
||||||
@ -84,7 +91,7 @@
|
|||||||
>
|
>
|
||||||
<q-card style="width: 300px" class="q-pa-md">
|
<q-card style="width: 300px" class="q-pa-md">
|
||||||
<q-form ref="myForm" @submit="alarmMockSet" class="q-gutter-md">
|
<q-form ref="myForm" @submit="alarmMockSet" class="q-gutter-md">
|
||||||
<div class="text-h6">设置模拟故障</div>
|
<div class="text-h6">设置故障演练</div>
|
||||||
<q-input
|
<q-input
|
||||||
outlined
|
outlined
|
||||||
label="线路ID"
|
label="线路ID"
|
||||||
@ -119,19 +126,16 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive } from 'vue';
|
import { ref, reactive, onMounted } from 'vue';
|
||||||
import SysMenu from 'src/components/SysMenu.vue';
|
import SysMenu from 'src/components/SysMenu.vue';
|
||||||
import { useRouter, useRoute } from 'vue-router';
|
import { useRouter, useRoute } from 'vue-router';
|
||||||
import { Dialog, useQuasar } from 'quasar';
|
import { Dialog, useQuasar } from 'quasar';
|
||||||
import { clearJwtToken } from 'src/configs/TokenManage';
|
import { clearJwtToken } from 'src/configs/TokenManage';
|
||||||
import {
|
|
||||||
DeviceConfigItem,
|
|
||||||
getDeviceByAlarmType,
|
|
||||||
mockAlertSet,
|
|
||||||
} from 'src/api/AlertMock';
|
|
||||||
import commonAlarm from 'src/components/alarm/commonAlarm.vue';
|
import commonAlarm from 'src/components/alarm/commonAlarm.vue';
|
||||||
import { saveAlertTypeData } from 'src/components/alarm/alarmInfoEnum';
|
import setAlarmText from 'src/components/alarm/setAlarmText.vue';
|
||||||
|
import setAlarmMock from 'src/components/alarm/setAlarmMock.vue';
|
||||||
import NCC from '/logo/NCC_白.png';
|
import NCC from '/logo/NCC_白.png';
|
||||||
|
import { getShowSetAlarmTextButton } from 'src/configs/UrlManage';
|
||||||
|
|
||||||
const leftDrawerOpen = ref(false);
|
const leftDrawerOpen = ref(false);
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@ -147,9 +151,6 @@ function onResize() {
|
|||||||
scrollWidth.value =
|
scrollWidth.value =
|
||||||
window.innerWidth - (leftDrawerOpen.value ? leftDrawerSize.width : 0);
|
window.innerWidth - (leftDrawerOpen.value ? leftDrawerSize.width : 0);
|
||||||
}
|
}
|
||||||
function backConfirm() {
|
|
||||||
router.replace('/monitor');
|
|
||||||
}
|
|
||||||
const headerSize = reactive({} as { width: number; height: number });
|
const headerSize = reactive({} as { width: number; height: number });
|
||||||
function onHeaderResize(size: { width: number; height: number }) {
|
function onHeaderResize(size: { width: number; height: number }) {
|
||||||
headerSize.width = size.width;
|
headerSize.width = size.width;
|
||||||
@ -162,6 +163,27 @@ function onLeftResize(size: { width: number; height: number }) {
|
|||||||
leftDrawerSize.height = size.height;
|
leftDrawerSize.height = size.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
if (getShowSetAlarmTextButton()) {
|
||||||
|
showSetAlarmTextButton.value = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//模拟报警
|
||||||
|
const $q = useQuasar();
|
||||||
|
function openSetAlarmMockDialog() {
|
||||||
|
$q.dialog({
|
||||||
|
component: setAlarmMock,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const showSetAlarmTextButton = ref(false);
|
||||||
|
function openSetAlarmTextDialog() {
|
||||||
|
$q.dialog({
|
||||||
|
component: setAlarmText,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function logOut() {
|
function logOut() {
|
||||||
Dialog.create({
|
Dialog.create({
|
||||||
title: '登出确认',
|
title: '登出确认',
|
||||||
@ -174,61 +196,7 @@ function logOut() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//模拟报警
|
function backConfirm() {
|
||||||
const $q = useQuasar();
|
router.replace('/monitor');
|
||||||
const alertSetShow = ref(false);
|
|
||||||
const alertType = ref('');
|
|
||||||
const lineId = ref();
|
|
||||||
const optionsAlertType = [
|
|
||||||
'蓝显',
|
|
||||||
'全线蓝显',
|
|
||||||
'整侧站台门无法打开',
|
|
||||||
'整侧站台门无法关闭',
|
|
||||||
'道岔失表',
|
|
||||||
'道岔大面积失表',
|
|
||||||
'计轴红光带',
|
|
||||||
'计轴大面积红光带',
|
|
||||||
'计轴橙光带',
|
|
||||||
'计轴大面积橙光带',
|
|
||||||
'列车信号故障',
|
|
||||||
];
|
|
||||||
let optionsAlertDevice = ref<string[]>([]);
|
|
||||||
const alertDevice = ref<string[]>([]);
|
|
||||||
let alertDeviceList: DeviceConfigItem[] = [];
|
|
||||||
|
|
||||||
async function searchAlertDevice() {
|
|
||||||
try {
|
|
||||||
optionsAlertDevice.value = [];
|
|
||||||
alertDevice.value = [];
|
|
||||||
const type = (saveAlertTypeData as never)[alertType.value];
|
|
||||||
alertDeviceList = await getDeviceByAlarmType(3, type);
|
|
||||||
optionsAlertDevice.value = alertDeviceList.map((item) => item.name);
|
|
||||||
} catch (err) {
|
|
||||||
$q.notify({
|
|
||||||
type: 'negative',
|
|
||||||
message: '无法获取指定故障的设备列表',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function alarmMockSet() {
|
|
||||||
try {
|
|
||||||
const type = (saveAlertTypeData as never)[alertType.value];
|
|
||||||
const Id = lineId.value;
|
|
||||||
let deviceCodes: string[] = [];
|
|
||||||
for (let i = 0; i < alertDevice.value.length; i++) {
|
|
||||||
const index = alertDeviceList.findIndex(
|
|
||||||
(item) => item.name == alertDevice.value[i]
|
|
||||||
);
|
|
||||||
deviceCodes.push(alertDeviceList[index].code);
|
|
||||||
}
|
|
||||||
await mockAlertSet({ lineId: Id, alertType: type, deviceCodes });
|
|
||||||
alertSetShow.value = false;
|
|
||||||
} catch (err) {
|
|
||||||
$q.notify({
|
|
||||||
type: 'negative',
|
|
||||||
message: '无法设置模拟故障',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -233,6 +233,8 @@ const optionsAlertType = [
|
|||||||
'计轴大面积橙光带',
|
'计轴大面积橙光带',
|
||||||
'道岔大面积失表',
|
'道岔大面积失表',
|
||||||
'列车信号故障',
|
'列车信号故障',
|
||||||
|
'联锁区红光带',
|
||||||
|
'联锁区橙光带',
|
||||||
];
|
];
|
||||||
function searchDecisionInfo() {
|
function searchDecisionInfo() {
|
||||||
searchDialog.value = false;
|
searchDialog.value = false;
|
||||||
|
261
src/pages/AlarmTipTimeConfig.vue
Normal file
261
src/pages/AlarmTipTimeConfig.vue
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
<template>
|
||||||
|
<div class="q-pa-md">
|
||||||
|
<q-table
|
||||||
|
ref="tableRef"
|
||||||
|
title="报警提示时间配置"
|
||||||
|
:style="{ height: tableHeight + 'px' }"
|
||||||
|
:rows="rows"
|
||||||
|
:columns="columnDefs"
|
||||||
|
row-key="id"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
:rows-per-page-options="[10, 20, 50, 100]"
|
||||||
|
:loading="loading"
|
||||||
|
binary-state-sort
|
||||||
|
@request="onRequest"
|
||||||
|
>
|
||||||
|
<template v-slot:top-right>
|
||||||
|
<q-btn color="primary" label="新建" @click="createFormShow = true" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-slot:body-cell-operations="props">
|
||||||
|
<q-td :props="props">
|
||||||
|
<div class="q-gutter-sm row justify-center">
|
||||||
|
<q-btn
|
||||||
|
color="primary"
|
||||||
|
:disable="operateDisabled"
|
||||||
|
label="编辑"
|
||||||
|
@click="editData(props.row)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</q-td>
|
||||||
|
</template>
|
||||||
|
</q-table>
|
||||||
|
|
||||||
|
<q-dialog
|
||||||
|
v-model="createFormShow"
|
||||||
|
persistent
|
||||||
|
transition-show="scale"
|
||||||
|
transition-hide="scale"
|
||||||
|
>
|
||||||
|
<q-card style="width: 350px">
|
||||||
|
<q-form
|
||||||
|
ref="myForm"
|
||||||
|
@submit="onCreate"
|
||||||
|
@reset="onReset"
|
||||||
|
class="q-gutter-md"
|
||||||
|
>
|
||||||
|
<q-card-section class="q-gutter-sm">
|
||||||
|
<div class="text-h6">
|
||||||
|
{{ creatForm.id ? '编辑时间配置' : '新建时间配置' }}
|
||||||
|
</div>
|
||||||
|
<!-- <q-input
|
||||||
|
outlined
|
||||||
|
label="时间名称"
|
||||||
|
v-model="creatForm.timeName"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[(val) => val.trim() != '' || '时间名称不能为空']"
|
||||||
|
/> -->
|
||||||
|
<q-input
|
||||||
|
outlined
|
||||||
|
label="开始时间"
|
||||||
|
type="number"
|
||||||
|
v-model.number="creatForm.startHour"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[(val) => val != '' || '时间名称不能为空']"
|
||||||
|
/>
|
||||||
|
<q-input
|
||||||
|
outlined
|
||||||
|
label="结束时间"
|
||||||
|
type="number"
|
||||||
|
v-model.number="creatForm.endHour"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[(val) => val != '' || '时间名称不能为空']"
|
||||||
|
/>
|
||||||
|
<q-select
|
||||||
|
outlined
|
||||||
|
label="时间类型"
|
||||||
|
v-model="creatForm.timeType"
|
||||||
|
:options="optionsTimeType"
|
||||||
|
:rules="[(val) => val.trim() != '' || '时间类型不能为空']"
|
||||||
|
/>
|
||||||
|
</q-card-section>
|
||||||
|
|
||||||
|
<q-card-actions align="right">
|
||||||
|
<q-btn color="primary" label="创建" type="submit" />
|
||||||
|
<q-btn label="取消" type="reset" v-close-popup />
|
||||||
|
</q-card-actions>
|
||||||
|
</q-form>
|
||||||
|
</q-card>
|
||||||
|
</q-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, reactive, onMounted, computed } from 'vue';
|
||||||
|
import { useQuasar, type QTableColumn, QForm, QTable } from 'quasar';
|
||||||
|
import {
|
||||||
|
alarmTipTimeConfigPageQuery,
|
||||||
|
TimeConfigItem,
|
||||||
|
creatOrEditTimeConfig,
|
||||||
|
ShowTipTimeConfig,
|
||||||
|
TipTimeConfig,
|
||||||
|
} from '../api/AlarmTipTimeConfig';
|
||||||
|
import { ApiError } from 'src/boot/axios';
|
||||||
|
|
||||||
|
const $q = useQuasar();
|
||||||
|
|
||||||
|
const props = withDefaults(
|
||||||
|
defineProps<{
|
||||||
|
sizeHeight: number;
|
||||||
|
}>(),
|
||||||
|
{ sizeHeight: 500 }
|
||||||
|
);
|
||||||
|
|
||||||
|
const tableHeight = computed(() => {
|
||||||
|
return props.sizeHeight - 32;
|
||||||
|
});
|
||||||
|
|
||||||
|
const columnDefs: QTableColumn[] = [
|
||||||
|
{
|
||||||
|
name: 'id',
|
||||||
|
label: '编号',
|
||||||
|
field: 'id',
|
||||||
|
required: true,
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
/* {
|
||||||
|
name: 'timeName',
|
||||||
|
label: '时间名称',
|
||||||
|
field: 'timeName',
|
||||||
|
align: 'center',
|
||||||
|
}, */
|
||||||
|
{
|
||||||
|
name: 'startHour',
|
||||||
|
label: '开始小时',
|
||||||
|
field: 'startHour',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'endHour',
|
||||||
|
label: '结束小时',
|
||||||
|
field: 'endHour',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'timeType',
|
||||||
|
label: '时间类型',
|
||||||
|
field: (row) => {
|
||||||
|
if (row.timeType) {
|
||||||
|
return (ShowTipTimeConfig as never)[row.timeType + ''];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
|
||||||
|
{ name: 'operations', label: '操作', field: 'operations', align: 'center' },
|
||||||
|
];
|
||||||
|
|
||||||
|
const operateDisabled = ref(false);
|
||||||
|
const tableRef = ref();
|
||||||
|
const rows = reactive([]);
|
||||||
|
const loading = ref(false);
|
||||||
|
const pagination = ref({
|
||||||
|
sortBy: 'desc',
|
||||||
|
descending: false,
|
||||||
|
page: 1,
|
||||||
|
rowsPerPage: 10,
|
||||||
|
rowsNumber: 10,
|
||||||
|
});
|
||||||
|
|
||||||
|
const onRequest: QTable['onRequest'] = async (props) => {
|
||||||
|
const { page, rowsPerPage, sortBy, descending } = props.pagination;
|
||||||
|
loading.value = true;
|
||||||
|
try {
|
||||||
|
let response = await alarmTipTimeConfigPageQuery({
|
||||||
|
current: page,
|
||||||
|
size: rowsPerPage,
|
||||||
|
});
|
||||||
|
|
||||||
|
const pageData = response;
|
||||||
|
pagination.value.rowsNumber = pageData.total;
|
||||||
|
pagination.value.page = page;
|
||||||
|
pagination.value.rowsPerPage = rowsPerPage;
|
||||||
|
pagination.value.sortBy = sortBy;
|
||||||
|
pagination.value.descending = descending;
|
||||||
|
rows.splice(0, rows.length, ...(pageData.records as []));
|
||||||
|
} catch (err) {
|
||||||
|
$q.notify({
|
||||||
|
type: 'negative',
|
||||||
|
message: '无法获取时间配置列表',
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
tableRef.value.requestServerInteraction();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const createFormShow = ref(false);
|
||||||
|
const myForm = ref<QForm | null>(null);
|
||||||
|
const creatForm = reactive({
|
||||||
|
id: '',
|
||||||
|
timeName: '',
|
||||||
|
startHour: '',
|
||||||
|
endHour: '',
|
||||||
|
timeType: '',
|
||||||
|
publicPeak: '',
|
||||||
|
});
|
||||||
|
const optionsTimeType = ['早高峰', '晚高峰', '低峰'];
|
||||||
|
|
||||||
|
function onCreate() {
|
||||||
|
myForm.value?.validate().then(async (res) => {
|
||||||
|
if (res) {
|
||||||
|
operateDisabled.value = true;
|
||||||
|
try {
|
||||||
|
const params = {
|
||||||
|
id: +creatForm.id,
|
||||||
|
timeName: creatForm.timeName,
|
||||||
|
startHour: creatForm.startHour,
|
||||||
|
endHour: creatForm.endHour,
|
||||||
|
timeType: (TipTimeConfig as never)[creatForm.timeType],
|
||||||
|
};
|
||||||
|
await creatOrEditTimeConfig(params);
|
||||||
|
onReset();
|
||||||
|
createFormShow.value = false;
|
||||||
|
tableRef.value.requestServerInteraction(); // 刷新列表
|
||||||
|
} catch (err) {
|
||||||
|
const apiErr = err as ApiError;
|
||||||
|
$q.notify({
|
||||||
|
type: 'negative',
|
||||||
|
message: apiErr.title,
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
operateDisabled.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function editData(row: TimeConfigItem) {
|
||||||
|
creatForm.id = row.id + '';
|
||||||
|
creatForm.timeName = row.timeName;
|
||||||
|
creatForm.startHour = row.startHour;
|
||||||
|
creatForm.endHour = row.endHour;
|
||||||
|
creatForm.timeType = (ShowTipTimeConfig as never)[row.timeType + ''];
|
||||||
|
createFormShow.value = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onReset() {
|
||||||
|
creatForm.id = '';
|
||||||
|
creatForm.timeName = '';
|
||||||
|
creatForm.startHour = '';
|
||||||
|
creatForm.endHour = '';
|
||||||
|
creatForm.timeType = '';
|
||||||
|
creatForm.publicPeak = '';
|
||||||
|
myForm.value?.resetValidation();
|
||||||
|
}
|
||||||
|
</script>
|
@ -31,7 +31,7 @@
|
|||||||
class="q-mr-md"
|
class="q-mr-md"
|
||||||
color="primary"
|
color="primary"
|
||||||
label="查询"
|
label="查询"
|
||||||
@click="searchDialog = true"
|
@click="openSearchDialog"
|
||||||
/>
|
/>
|
||||||
<q-btn color="primary" label="新建" @click="createFormShow = true" />
|
<q-btn color="primary" label="新建" @click="createFormShow = true" />
|
||||||
</template>
|
</template>
|
||||||
@ -81,12 +81,13 @@
|
|||||||
:rules="[(val) => val.length > 0 || '请选择故障类型!']"
|
:rules="[(val) => val.length > 0 || '请选择故障类型!']"
|
||||||
@blur="searchLocationType"
|
@blur="searchLocationType"
|
||||||
/>
|
/>
|
||||||
<!-- <q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
label="时间定义类型"
|
label="时间定义类型"
|
||||||
v-model="creatForm.timeType"
|
v-model="creatForm.tipTimeIds"
|
||||||
|
multiple
|
||||||
:options="optionsTimeType"
|
:options="optionsTimeType"
|
||||||
/> -->
|
/>
|
||||||
<q-select
|
<q-select
|
||||||
outlined
|
outlined
|
||||||
label="地点定义类型"
|
label="地点定义类型"
|
||||||
@ -158,7 +159,6 @@ import {
|
|||||||
alarmInfoPageQuery,
|
alarmInfoPageQuery,
|
||||||
deleteAlarmInfo,
|
deleteAlarmInfo,
|
||||||
createAlarmInfo,
|
createAlarmInfo,
|
||||||
updataAlarmInfo,
|
|
||||||
AlarmInfoListItem,
|
AlarmInfoListItem,
|
||||||
getDeviceAreaByAlarmType,
|
getDeviceAreaByAlarmType,
|
||||||
AreaConfigItem,
|
AreaConfigItem,
|
||||||
@ -167,6 +167,8 @@ import {
|
|||||||
showAlertTypeData,
|
showAlertTypeData,
|
||||||
saveAlertTypeData,
|
saveAlertTypeData,
|
||||||
} from 'src/components/alarm/alarmInfoEnum';
|
} from 'src/components/alarm/alarmInfoEnum';
|
||||||
|
import { ApiError } from 'src/boot/axios';
|
||||||
|
import { ShowTipTimeConfig, TipTimeConfig } from 'src/api/AlarmTipTimeConfig';
|
||||||
|
|
||||||
const $q = useQuasar();
|
const $q = useQuasar();
|
||||||
|
|
||||||
@ -199,12 +201,19 @@ const columnDefs: QTableColumn[] = [
|
|||||||
},
|
},
|
||||||
align: 'center',
|
align: 'center',
|
||||||
},
|
},
|
||||||
/* {
|
{
|
||||||
name: 'timeType',
|
name: 'timeType',
|
||||||
label: '时间定义类型',
|
label: '时间定义类型',
|
||||||
field: 'timeType',
|
field: (row: AlarmInfoListItem) => {
|
||||||
|
if (row.timeConfigList) {
|
||||||
|
const ref = row.timeConfigList.map(
|
||||||
|
(timeConfig) => (ShowTipTimeConfig as never)[timeConfig.timeType + '']
|
||||||
|
);
|
||||||
|
return ref.join('\\');
|
||||||
|
}
|
||||||
|
},
|
||||||
align: 'center',
|
align: 'center',
|
||||||
}, */
|
},
|
||||||
{
|
{
|
||||||
name: 'areaConfigId',
|
name: 'areaConfigId',
|
||||||
label: '地点定义类型',
|
label: '地点定义类型',
|
||||||
@ -284,15 +293,13 @@ const filter = ref({
|
|||||||
alertType: '',
|
alertType: '',
|
||||||
areaConfigName: '',
|
areaConfigName: '',
|
||||||
});
|
});
|
||||||
|
function openSearchDialog() {
|
||||||
|
filter.value = { alertType: '', areaConfigName: '' };
|
||||||
|
searchDialog.value = true;
|
||||||
|
}
|
||||||
function searchDecisionInfo() {
|
function searchDecisionInfo() {
|
||||||
searchDialog.value = false;
|
searchDialog.value = false;
|
||||||
try {
|
|
||||||
tableRef.value.requestServerInteraction();
|
tableRef.value.requestServerInteraction();
|
||||||
} finally {
|
|
||||||
setTimeout(() => {
|
|
||||||
filter.value = { alertType: '', areaConfigName: '' };
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const createFormShow = ref(false);
|
const createFormShow = ref(false);
|
||||||
@ -300,7 +307,7 @@ const myForm = ref<QForm | null>(null);
|
|||||||
const creatForm = reactive({
|
const creatForm = reactive({
|
||||||
id: '',
|
id: '',
|
||||||
alertType: '',
|
alertType: '',
|
||||||
timeType: '',
|
tipTimeIds: [],
|
||||||
areaConfigId: '',
|
areaConfigId: '',
|
||||||
drivingInfo: '',
|
drivingInfo: '',
|
||||||
submissionInfo: '',
|
submissionInfo: '',
|
||||||
@ -323,20 +330,10 @@ const optionsAlertType = [
|
|||||||
'计轴大面积橙光带',
|
'计轴大面积橙光带',
|
||||||
'道岔大面积失表',
|
'道岔大面积失表',
|
||||||
'列车信号故障',
|
'列车信号故障',
|
||||||
|
'联锁区红光带',
|
||||||
|
'联锁区橙光带',
|
||||||
];
|
];
|
||||||
const optionsTimeType = ['CLOCK_7_9', 'CLOCK_7_9_AND_19_21', '无'];
|
|
||||||
let optionsLocationType = ref<string[]>([]);
|
let optionsLocationType = ref<string[]>([]);
|
||||||
|
|
||||||
function onReset() {
|
|
||||||
creatForm.id = '';
|
|
||||||
creatForm.alertType = '';
|
|
||||||
creatForm.timeType = '';
|
|
||||||
creatForm.areaConfigId = '';
|
|
||||||
creatForm.drivingInfo = '';
|
|
||||||
creatForm.submissionInfo = '';
|
|
||||||
myForm.value?.resetValidation();
|
|
||||||
}
|
|
||||||
|
|
||||||
let optionsLocationList: AreaConfigItem[] = [];
|
let optionsLocationList: AreaConfigItem[] = [];
|
||||||
async function searchLocationType() {
|
async function searchLocationType() {
|
||||||
try {
|
try {
|
||||||
@ -354,6 +351,8 @@ async function searchLocationType() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const optionsTimeType = ['早高峰', '晚高峰', '低峰'];
|
||||||
|
|
||||||
function onCreate() {
|
function onCreate() {
|
||||||
myForm.value?.validate().then(async (res) => {
|
myForm.value?.validate().then(async (res) => {
|
||||||
if (res) {
|
if (res) {
|
||||||
@ -366,10 +365,14 @@ function onCreate() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const tipTimeIds: string[] = [];
|
||||||
|
creatForm.tipTimeIds?.forEach((tipTimeId) => {
|
||||||
|
tipTimeIds.push((TipTimeConfig as never)[tipTimeId + '']);
|
||||||
|
});
|
||||||
const params = {
|
const params = {
|
||||||
id: +creatForm.id,
|
id: +creatForm.id,
|
||||||
alertType: (saveAlertTypeData as never)[creatForm.alertType],
|
alertType: (saveAlertTypeData as never)[creatForm.alertType],
|
||||||
timeType: creatForm.timeType,
|
tipTimeIds: tipTimeIds,
|
||||||
areaConfigId: areaConfigId as number,
|
areaConfigId: areaConfigId as number,
|
||||||
drivingInfo: creatForm.drivingInfo,
|
drivingInfo: creatForm.drivingInfo,
|
||||||
submissionInfo: creatForm.submissionInfo,
|
submissionInfo: creatForm.submissionInfo,
|
||||||
@ -380,18 +383,15 @@ function onCreate() {
|
|||||||
if (creatForm.submissionInfo) {
|
if (creatForm.submissionInfo) {
|
||||||
params.submissionInfo = JSON.stringify(creatForm.submissionInfo);
|
params.submissionInfo = JSON.stringify(creatForm.submissionInfo);
|
||||||
}
|
}
|
||||||
if (creatForm.id) {
|
|
||||||
await updataAlarmInfo(+creatForm.id, params);
|
|
||||||
} else {
|
|
||||||
await createAlarmInfo(params);
|
await createAlarmInfo(params);
|
||||||
}
|
|
||||||
onReset();
|
onReset();
|
||||||
createFormShow.value = false;
|
createFormShow.value = false;
|
||||||
tableRef.value.requestServerInteraction(); // 刷新列表
|
tableRef.value.requestServerInteraction(); // 刷新列表
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
const apiErr = err as ApiError;
|
||||||
$q.notify({
|
$q.notify({
|
||||||
type: 'negative',
|
type: 'negative',
|
||||||
message: '创建或修改决策信息错误',
|
message: apiErr.title,
|
||||||
});
|
});
|
||||||
} finally {
|
} finally {
|
||||||
operateDisabled.value = false;
|
operateDisabled.value = false;
|
||||||
@ -403,7 +403,9 @@ function onCreate() {
|
|||||||
function editData(row: AlarmInfoListItem) {
|
function editData(row: AlarmInfoListItem) {
|
||||||
creatForm.id = row.id + '';
|
creatForm.id = row.id + '';
|
||||||
creatForm.alertType = (showAlertTypeData as never)[row.alertType + ''];
|
creatForm.alertType = (showAlertTypeData as never)[row.alertType + ''];
|
||||||
creatForm.timeType = row.timeType || '';
|
creatForm.tipTimeIds = row.timeConfigList?.map(
|
||||||
|
(timeConfig) => (ShowTipTimeConfig as never)[timeConfig.timeType + '']
|
||||||
|
);
|
||||||
creatForm.areaConfigId = row.areaConfigName as string;
|
creatForm.areaConfigId = row.areaConfigName as string;
|
||||||
creatForm.drivingInfo = row.drivingInfo ? JSON.parse(row.drivingInfo) : '';
|
creatForm.drivingInfo = row.drivingInfo ? JSON.parse(row.drivingInfo) : '';
|
||||||
creatForm.submissionInfo = row.submissionInfo
|
creatForm.submissionInfo = row.submissionInfo
|
||||||
@ -434,6 +436,16 @@ async function deleteData(row: AlarmInfoListItem) {
|
|||||||
operateDisabled.value = false;
|
operateDisabled.value = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onReset() {
|
||||||
|
creatForm.id = '';
|
||||||
|
creatForm.alertType = '';
|
||||||
|
creatForm.tipTimeIds = [];
|
||||||
|
creatForm.areaConfigId = '';
|
||||||
|
creatForm.drivingInfo = '';
|
||||||
|
creatForm.submissionInfo = '';
|
||||||
|
myForm.value?.resetValidation();
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
@ -50,6 +50,11 @@ const routes: RouteRecordRaw[] = [
|
|||||||
name: 'thresholdValue',
|
name: 'thresholdValue',
|
||||||
component: () => import('pages/AlarmThresholdValue.vue'),
|
component: () => import('pages/AlarmThresholdValue.vue'),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'alarmTipTimeConfig',
|
||||||
|
name: 'alarmTipTimeConfig',
|
||||||
|
component: () => import('pages/AlarmTipTimeConfig.vue'),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { destroyDrawApp, getDrawApp, initDrawApp } from 'src/drawApp';
|
import { destroyDrawApp, getDrawApp, initDrawApp } from 'src/drawApp';
|
||||||
import { DrawAssistant, IJlCanvas, IDrawApp, JlGraphic } from 'src/jl-graphic';
|
import { DrawAssistant, IJlCanvas, IDrawApp, JlGraphic } from 'src/jl-graphic';
|
||||||
|
import { markRaw } from 'vue';
|
||||||
|
|
||||||
export const useDrawStore = defineStore('draw', {
|
export const useDrawStore = defineStore('draw', {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
@ -65,8 +66,8 @@ export const useDrawStore = defineStore('draw', {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
app.on('graphicselectedchange', () => {
|
app.on('graphicselected', (graphics) => {
|
||||||
this.selectedGraphics = app.selectedGraphics;
|
this.selectedGraphics = markRaw(graphics);
|
||||||
});
|
});
|
||||||
this.selectedGraphics = [];
|
this.selectedGraphics = [];
|
||||||
return app;
|
return app;
|
||||||
|
@ -5,6 +5,7 @@ import {
|
|||||||
getLineNetApp,
|
getLineNetApp,
|
||||||
destroyLineNetApp,
|
destroyLineNetApp,
|
||||||
} from 'src/drawApp/lineNetApp';
|
} from 'src/drawApp/lineNetApp';
|
||||||
|
import { markRaw } from 'vue';
|
||||||
export interface AlarmInfo {
|
export interface AlarmInfo {
|
||||||
id: string;
|
id: string;
|
||||||
level: string;
|
level: string;
|
||||||
@ -57,8 +58,8 @@ export const useLineNetStore = defineStore('lineNet', {
|
|||||||
},
|
},
|
||||||
initLineNetApp() {
|
initLineNetApp() {
|
||||||
const app = initLineNetApp();
|
const app = initLineNetApp();
|
||||||
app.on('graphicselectedchange', () => {
|
app.on('graphicselected', (graphics) => {
|
||||||
this.selectedGraphics = app.selectedGraphics;
|
this.selectedGraphics = markRaw(graphics);
|
||||||
});
|
});
|
||||||
this.selectedGraphics = [];
|
this.selectedGraphics = [];
|
||||||
return app;
|
return app;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { IJlCanvas, JlGraphic, IGraphicApp } from 'src/jl-graphic';
|
import { IJlCanvas, JlGraphic, IGraphicApp } from 'src/jl-graphic';
|
||||||
import { initLineApp, getLineApp, destroyLineApp } from 'src/drawApp/lineApp';
|
import { initLineApp, getLineApp, destroyLineApp } from 'src/drawApp/lineApp';
|
||||||
|
import { markRaw } from 'vue';
|
||||||
|
|
||||||
export const useLineStore = defineStore('line', {
|
export const useLineStore = defineStore('line', {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
@ -39,8 +40,8 @@ export const useLineStore = defineStore('line', {
|
|||||||
initLineApp(lineId: number) {
|
initLineApp(lineId: number) {
|
||||||
this.setLineId(lineId);
|
this.setLineId(lineId);
|
||||||
const app = initLineApp(lineId);
|
const app = initLineApp(lineId);
|
||||||
app.on('graphicselectedchange', () => {
|
app.on('graphicselected', (graphics) => {
|
||||||
this.selectedGraphics = app.selectedGraphics;
|
this.selectedGraphics = markRaw(graphics);
|
||||||
});
|
});
|
||||||
this.selectedGraphics = [];
|
this.selectedGraphics = [];
|
||||||
return app;
|
return app;
|
||||||
|
Loading…
Reference in New Issue
Block a user