Merge remote-tracking branch 'origin/develop' into local-test
All checks were successful
local-test分支构建发布 / Docker-Build (push) Successful in 2m2s
All checks were successful
local-test分支构建发布 / Docker-Build (push) Successful in 2m2s
This commit is contained in:
commit
328e70e188
186
src/components/common/SelectConfigUtils.vue
Normal file
186
src/components/common/SelectConfigUtils.vue
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
<template>
|
||||||
|
<q-list bordered separator class="rounded-borders">
|
||||||
|
<q-expansion-item
|
||||||
|
bordered
|
||||||
|
expand-separator
|
||||||
|
v-for="(configItem, index) in selectConfig"
|
||||||
|
:key="configItem"
|
||||||
|
v-model="configItem.expanded"
|
||||||
|
:label="configItem.code"
|
||||||
|
@click="toggleItem(index)"
|
||||||
|
>
|
||||||
|
<q-card>
|
||||||
|
<q-item no-wrap class="q-gutter-y-sm column">
|
||||||
|
<q-input
|
||||||
|
v-if="props.ableAdd"
|
||||||
|
outlined
|
||||||
|
v-model="configItem.code"
|
||||||
|
label="配置项类型"
|
||||||
|
lazy-rules
|
||||||
|
/>
|
||||||
|
<div class="q-gutter-sm row">
|
||||||
|
<q-chip
|
||||||
|
v-for="(item, selectIndex) in configItem.refDevicesCode"
|
||||||
|
:key="item"
|
||||||
|
square
|
||||||
|
color="primary"
|
||||||
|
text-color="white"
|
||||||
|
removable
|
||||||
|
@remove="removeSelect(selectIndex)"
|
||||||
|
clickable
|
||||||
|
@click="clickSelectCenter(selectIndex)"
|
||||||
|
>
|
||||||
|
{{ item }}
|
||||||
|
</q-chip>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<q-btn
|
||||||
|
v-show="configItem.refDevicesCode.length > 0"
|
||||||
|
style="width: 100px"
|
||||||
|
label="清空选择"
|
||||||
|
color="red"
|
||||||
|
class="q-mr-md"
|
||||||
|
@click="clearAllSelect(index)"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
v-if="props.ableAdd"
|
||||||
|
label="删除配置项"
|
||||||
|
color="secondary"
|
||||||
|
@click="deleteSelectConfig(index)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</q-item>
|
||||||
|
</q-card>
|
||||||
|
</q-expansion-item>
|
||||||
|
</q-list>
|
||||||
|
<q-btn
|
||||||
|
v-if="props.ableAdd"
|
||||||
|
class="q-mt-md"
|
||||||
|
label="增加配置项"
|
||||||
|
color="secondary"
|
||||||
|
@click="addSelectConfig"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { inject, ref, watch } from 'vue';
|
||||||
|
import { IDrawApp, JlGraphic } from 'jl-graphic';
|
||||||
|
|
||||||
|
const props = withDefaults(
|
||||||
|
defineProps<{
|
||||||
|
drawStore: {
|
||||||
|
selectedGraphics: JlGraphic[];
|
||||||
|
getDrawApp(): IDrawApp;
|
||||||
|
};
|
||||||
|
ableAdd?: boolean;
|
||||||
|
}>(),
|
||||||
|
{ ableAdd: false }
|
||||||
|
);
|
||||||
|
|
||||||
|
const selectConfig = ref<
|
||||||
|
{
|
||||||
|
code: string;
|
||||||
|
refDevices: number[];
|
||||||
|
refDevicesCode: string[];
|
||||||
|
expanded: boolean;
|
||||||
|
}[]
|
||||||
|
>([
|
||||||
|
{
|
||||||
|
code: '配置项模版',
|
||||||
|
refDevices: [],
|
||||||
|
refDevicesCode: [],
|
||||||
|
expanded: false,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
let selectGraphic: JlGraphic[] = [];
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
selectConfig,
|
||||||
|
selectGraphic,
|
||||||
|
});
|
||||||
|
|
||||||
|
interface GraphicData {
|
||||||
|
datas: { code: string };
|
||||||
|
}
|
||||||
|
|
||||||
|
const filterSelect = inject('filter') as (g: JlGraphic) => boolean;
|
||||||
|
watch(
|
||||||
|
() => props.drawStore.selectedGraphics,
|
||||||
|
(val) => {
|
||||||
|
if (val && val.length > 0 && clickIndex !== null) {
|
||||||
|
const selectFilter = props.drawStore.selectedGraphics?.filter(
|
||||||
|
filterSelect
|
||||||
|
) as JlGraphic[];
|
||||||
|
selectGraphic.push(...selectFilter);
|
||||||
|
selectGraphic = Array.from(new Set(selectGraphic));
|
||||||
|
props.drawStore.getDrawApp().updateSelected(...selectGraphic);
|
||||||
|
selectConfig.value[clickIndex].refDevicesCode = selectGraphic.map((g) =>
|
||||||
|
(g as JlGraphic & GraphicData).datas.code == ''
|
||||||
|
? g.id + ''
|
||||||
|
: (g as JlGraphic & GraphicData).datas.code
|
||||||
|
);
|
||||||
|
selectConfig.value[clickIndex].refDevices = selectGraphic.map(
|
||||||
|
(g) => g.id
|
||||||
|
) as number[];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
let clickIndex: null | number = null;
|
||||||
|
function toggleItem(index: number) {
|
||||||
|
const drawApp = props.drawStore.getDrawApp();
|
||||||
|
selectGraphic = [];
|
||||||
|
drawApp.updateSelected();
|
||||||
|
if (selectConfig.value[index].expanded == true) {
|
||||||
|
clickIndex = index;
|
||||||
|
const select: JlGraphic[] = [];
|
||||||
|
selectConfig.value[index].refDevices.forEach((id: number) => {
|
||||||
|
const g = drawApp.queryStore.queryById(id);
|
||||||
|
select.push(g);
|
||||||
|
});
|
||||||
|
drawApp.updateSelected(...select);
|
||||||
|
} else {
|
||||||
|
clickIndex = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeSelect(removeIndex: number) {
|
||||||
|
const clickTarget = selectConfig.value[clickIndex as number];
|
||||||
|
selectGraphic.splice(removeIndex, 1);
|
||||||
|
clickTarget.refDevicesCode.splice(removeIndex, 1);
|
||||||
|
clickTarget.refDevices.splice(removeIndex, 1);
|
||||||
|
props.drawStore.getDrawApp().updateSelected(...selectGraphic);
|
||||||
|
}
|
||||||
|
|
||||||
|
function clickSelectCenter(index: number) {
|
||||||
|
const drawApp = props.drawStore.getDrawApp();
|
||||||
|
const clickTarget = selectConfig.value[clickIndex as number];
|
||||||
|
const clickGraphic = drawApp.queryStore.queryById(
|
||||||
|
clickTarget.refDevices[index]
|
||||||
|
);
|
||||||
|
drawApp.makeGraphicCenterShow(clickGraphic);
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearAllSelect(index: number) {
|
||||||
|
selectConfig.value[index].refDevices = [];
|
||||||
|
selectConfig.value[index].refDevicesCode = [];
|
||||||
|
selectGraphic = [];
|
||||||
|
props.drawStore.getDrawApp().updateSelected();
|
||||||
|
}
|
||||||
|
|
||||||
|
function addSelectConfig() {
|
||||||
|
selectConfig.value.push({
|
||||||
|
code: '配置项模版',
|
||||||
|
refDevices: [],
|
||||||
|
refDevicesCode: [],
|
||||||
|
expanded: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteSelectConfig(index: number) {
|
||||||
|
selectConfig.value.splice(index, 1);
|
||||||
|
selectGraphic = [];
|
||||||
|
props.drawStore.getDrawApp().updateSelected();
|
||||||
|
}
|
||||||
|
</script>
|
183
src/components/draw-app/properties/AxleCountingConfig.vue
Normal file
183
src/components/draw-app/properties/AxleCountingConfig.vue
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<template>
|
||||||
|
<q-card class="q-gutter-sm q-pa-sm">
|
||||||
|
<q-card-section>
|
||||||
|
<div class="text-h6">一键生成计轴配置</div>
|
||||||
|
</q-card-section>
|
||||||
|
<q-form ref="myForm">
|
||||||
|
<selectConfig-utils ref="selectConfigUtils" :drawStore="drawStore" />
|
||||||
|
<div class="q-mt-md q-gutter-md">
|
||||||
|
<q-btn label="确认修改" color="primary" @click="onSubmit" />
|
||||||
|
<q-btn label="返回" color="red" @click="goBack" />
|
||||||
|
<q-btn label="生成计轴" color="primary" @click="generateAxleCounting" />
|
||||||
|
</div>
|
||||||
|
<div class="q-mt-md q-gutter-md">
|
||||||
|
<q-btn
|
||||||
|
label="检查计轴"
|
||||||
|
color="primary"
|
||||||
|
@click="showErrorAxleCounting"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
v-if="showCheck"
|
||||||
|
label="上一个"
|
||||||
|
color="primary"
|
||||||
|
@click="clickSelectCenter(-1)"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
v-if="showCheck"
|
||||||
|
label="下一个"
|
||||||
|
color="primary"
|
||||||
|
@click="clickSelectCenter(1)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</q-form>
|
||||||
|
</q-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { onMounted, ref, provide } from 'vue';
|
||||||
|
import { QForm, useQuasar } from 'quasar';
|
||||||
|
import { JlGraphic } from 'jl-graphic';
|
||||||
|
import { useDrawStore } from 'src/stores/draw-store';
|
||||||
|
import { graphicData } from 'src/protos/stationLayoutGraphics';
|
||||||
|
import { Turnout } from 'src/graphics/turnout/Turnout';
|
||||||
|
import {
|
||||||
|
loadGenerateAxleCountingConfig,
|
||||||
|
setGenerateAxleCountingConfig,
|
||||||
|
} from 'src/drawApp';
|
||||||
|
import SelectConfigUtils from 'src/components/common/SelectConfigUtils.vue';
|
||||||
|
import { OneClickGenerate } from 'src/graphics/trainWindow/oneClickDrawAssistant';
|
||||||
|
import { AxleCounting } from 'src/graphics/axleCounting/AxleCounting';
|
||||||
|
|
||||||
|
//供公共选择组件使用
|
||||||
|
const filterSelect = (g: JlGraphic) => g instanceof Turnout;
|
||||||
|
const selectConfigUtils = ref<InstanceType<typeof SelectConfigUtils> | null>(
|
||||||
|
null
|
||||||
|
);
|
||||||
|
provide('filter', filterSelect);
|
||||||
|
|
||||||
|
const emit = defineEmits(['close']);
|
||||||
|
|
||||||
|
const drawStore = useDrawStore();
|
||||||
|
const $q = useQuasar();
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
selectConfigUtils.value.selectConfig = [
|
||||||
|
{
|
||||||
|
code: 'bb连接的道岔',
|
||||||
|
refDevices: [],
|
||||||
|
refDevicesCode: [],
|
||||||
|
expanded: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: '不生成计轴的道岔组',
|
||||||
|
refDevices: [],
|
||||||
|
refDevicesCode: [],
|
||||||
|
expanded: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const generateAxleCountingConfig = loadGenerateAxleCountingConfig();
|
||||||
|
if (generateAxleCountingConfig !== undefined) {
|
||||||
|
selectConfigUtils.value.selectConfig.forEach(
|
||||||
|
(generate: {
|
||||||
|
code: string;
|
||||||
|
refDevices: number[];
|
||||||
|
refDevicesCode: string[];
|
||||||
|
}) => {
|
||||||
|
if (generate.code == 'bb连接的道岔') {
|
||||||
|
generate.refDevices = generateAxleCountingConfig.bbConnect;
|
||||||
|
generateAxleCountingConfig.bbConnect.forEach((id) => {
|
||||||
|
const g = drawStore.getDrawApp().queryStore.queryById(id);
|
||||||
|
generate.refDevicesCode.push(g.code);
|
||||||
|
});
|
||||||
|
} else if (generate.code == '不生成计轴的道岔组') {
|
||||||
|
generate.refDevices = generateAxleCountingConfig.noGenerateGroup;
|
||||||
|
generateAxleCountingConfig.noGenerateGroup.forEach((id) => {
|
||||||
|
const g = drawStore.getDrawApp().queryStore.queryById(id);
|
||||||
|
generate.refDevicesCode.push(g.code);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const myForm = ref<QForm | null>(null);
|
||||||
|
async function onSubmit() {
|
||||||
|
myForm.value?.validate().then(async (res) => {
|
||||||
|
if (res) {
|
||||||
|
try {
|
||||||
|
const generateAxleCountingConfig =
|
||||||
|
new graphicData.GenerateAxleCountingConfig();
|
||||||
|
selectConfigUtils.value.selectConfig.forEach(
|
||||||
|
(generate: { code: string; refDevices: number[] }) => {
|
||||||
|
if (generate.code == 'bb连接的道岔') {
|
||||||
|
generateAxleCountingConfig.bbConnect = generate.refDevices;
|
||||||
|
} else if (generate.code == '不生成计轴的道岔组') {
|
||||||
|
generateAxleCountingConfig.noGenerateGroup = generate.refDevices;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
setGenerateAxleCountingConfig(generateAxleCountingConfig);
|
||||||
|
$q.notify({
|
||||||
|
type: 'positive',
|
||||||
|
message: '更新成功',
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
$q.notify({
|
||||||
|
type: 'negative',
|
||||||
|
message: '更新失败',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function goBack() {
|
||||||
|
emit('close');
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateAxleCounting() {
|
||||||
|
drawStore.oneClickType = 'AxleCounting';
|
||||||
|
drawStore.getDrawApp().interactionPlugin(OneClickGenerate.Type).resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
const selectConfig = ref<
|
||||||
|
{
|
||||||
|
axleCountingId: number;
|
||||||
|
axleCountingCode: string;
|
||||||
|
}[]
|
||||||
|
>([]);
|
||||||
|
function showErrorAxleCounting() {
|
||||||
|
showCheck.value = true;
|
||||||
|
const axleCountings = drawStore
|
||||||
|
.getDrawApp()
|
||||||
|
.queryStore.queryByType<AxleCounting>(AxleCounting.Type);
|
||||||
|
const erroeAxleCountings = axleCountings
|
||||||
|
.filter((g) => g.datas.axleCountingRef.length < 2)
|
||||||
|
.sort((a, b) => a.position.x - b.position.x);
|
||||||
|
erroeAxleCountings.forEach((axleCounting) => {
|
||||||
|
selectConfig.value.push({
|
||||||
|
axleCountingId: axleCounting.id,
|
||||||
|
axleCountingCode: axleCounting.datas.code,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const currentIndex = ref(-1);
|
||||||
|
const showCheck = ref(false);
|
||||||
|
function clickSelectCenter(add: number) {
|
||||||
|
if (
|
||||||
|
currentIndex.value + add < 0 ||
|
||||||
|
currentIndex.value + add >= selectConfig.value.length
|
||||||
|
)
|
||||||
|
return;
|
||||||
|
currentIndex.value = currentIndex.value + add;
|
||||||
|
const target = drawStore
|
||||||
|
.getDrawApp()
|
||||||
|
.queryStore.queryById(
|
||||||
|
selectConfig.value[currentIndex.value].axleCountingId
|
||||||
|
);
|
||||||
|
drawStore.getDrawApp().makeGraphicCenterShow(target);
|
||||||
|
drawStore.getDrawApp().updateSelected(target);
|
||||||
|
}
|
||||||
|
</script>
|
@ -289,6 +289,9 @@ export function initDrawApp(): IDrawApp {
|
|||||||
if (app.drawing) return;
|
if (app.drawing) return;
|
||||||
handleRIghtClick(e);
|
handleRIghtClick(e);
|
||||||
});
|
});
|
||||||
|
app.on('destroy', () => {
|
||||||
|
generateAxleCountingConfig = new graphicData.GenerateAxleCountingConfig();
|
||||||
|
});
|
||||||
app.addKeyboardListener(
|
app.addKeyboardListener(
|
||||||
new KeyListener({
|
new KeyListener({
|
||||||
value: 'KeyS',
|
value: 'KeyS',
|
||||||
@ -299,99 +302,99 @@ export function initDrawApp(): IDrawApp {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
// KeyA 用于区段复制--控制生成的区段位置
|
// KeyA 用于区段复制--控制生成的区段位置
|
||||||
const graphicCopyPlugin = app.app.graphicCopyPlugin;
|
const graphicCopyPlugin = app.app.graphicCopyPlugin;
|
||||||
const copySectionListener = new KeyListener({
|
const copySectionListener = new KeyListener({
|
||||||
value: 'KeyA',
|
value: 'KeyA',
|
||||||
global: true,
|
global: true,
|
||||||
onPress: () => {
|
onPress: () => {
|
||||||
graphicCopyPlugin.updateMoveLimit('sectionPointLimit');
|
graphicCopyPlugin.updateMoveLimit('sectionPointLimit');
|
||||||
|
},
|
||||||
|
});
|
||||||
|
graphicCopyPlugin.addGraphicControlers([
|
||||||
|
{
|
||||||
|
controlerList: [copySectionListener],
|
||||||
|
check: () => {
|
||||||
|
if (
|
||||||
|
graphicCopyPlugin.copys.length == 1 &&
|
||||||
|
graphicCopyPlugin.copys[0].type == Section.Type
|
||||||
|
)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
},
|
},
|
||||||
});
|
moveLimitOption: {
|
||||||
graphicCopyPlugin.addGraphicControlers([
|
moveLimitName: 'sectionPointLimit',
|
||||||
{
|
moveLimit: (e) => {
|
||||||
controlerList: [copySectionListener],
|
const mousePos = app.toCanvasCoordinates(e.global);
|
||||||
check: () => {
|
const selectSection = app.selectedGraphics[0] as Section;
|
||||||
if (
|
let selectSectionLeft = selectSection.localToCanvasPoint(
|
||||||
graphicCopyPlugin.copys.length == 1 &&
|
selectSection.getStartPoint()
|
||||||
graphicCopyPlugin.copys[0].type == Section.Type
|
);
|
||||||
)
|
let selectSectionRight = selectSection.localToCanvasPoint(
|
||||||
return true;
|
selectSection.getEndPoint()
|
||||||
return false;
|
);
|
||||||
},
|
[selectSectionLeft, selectSectionRight] =
|
||||||
moveLimitOption: {
|
selectSectionLeft.x < selectSectionRight.x
|
||||||
moveLimitName: 'sectionPointLimit',
|
? [selectSectionLeft, selectSectionRight]
|
||||||
moveLimit: (e) => {
|
: [selectSectionRight, selectSectionLeft];
|
||||||
const mousePos = app.toCanvasCoordinates(e.global);
|
//要移动到目标位的区段
|
||||||
const selectSection = app.selectedGraphics[0] as Section;
|
const sections = app.queryStore.queryByType<Section>(Section.Type);
|
||||||
let selectSectionLeft = selectSection.localToCanvasPoint(
|
const minDistanceSection = sections.reduce((prev, cur) => {
|
||||||
selectSection.getStartPoint()
|
const prevDistance = calculateDistanceFromPointToLine(
|
||||||
|
prev.localToCanvasPoint(prev.getStartPoint()),
|
||||||
|
prev.localToCanvasPoint(prev.getEndPoint()),
|
||||||
|
mousePos
|
||||||
);
|
);
|
||||||
let selectSectionRight = selectSection.localToCanvasPoint(
|
const curDistance = calculateDistanceFromPointToLine(
|
||||||
selectSection.getEndPoint()
|
cur.localToCanvasPoint(cur.getStartPoint()),
|
||||||
|
cur.localToCanvasPoint(cur.getEndPoint()),
|
||||||
|
mousePos
|
||||||
);
|
);
|
||||||
[selectSectionLeft, selectSectionRight] =
|
return prevDistance > curDistance ||
|
||||||
selectSectionLeft.x < selectSectionRight.x
|
(prevDistance == curDistance &&
|
||||||
? [selectSectionLeft, selectSectionRight]
|
distance2(
|
||||||
: [selectSectionRight, selectSectionLeft];
|
prev.localToCanvasPoint(prev.getStartPoint()),
|
||||||
//要移动到目标位的区段
|
mousePos
|
||||||
const sections = app.queryStore.queryByType<Section>(Section.Type);
|
) >
|
||||||
const minDistanceSection = sections.reduce((prev, cur) => {
|
|
||||||
const prevDistance = calculateDistanceFromPointToLine(
|
|
||||||
prev.localToCanvasPoint(prev.getStartPoint()),
|
|
||||||
prev.localToCanvasPoint(prev.getEndPoint()),
|
|
||||||
mousePos
|
|
||||||
);
|
|
||||||
const curDistance = calculateDistanceFromPointToLine(
|
|
||||||
cur.localToCanvasPoint(cur.getStartPoint()),
|
|
||||||
cur.localToCanvasPoint(cur.getEndPoint()),
|
|
||||||
mousePos
|
|
||||||
);
|
|
||||||
return prevDistance > curDistance ||
|
|
||||||
(prevDistance == curDistance &&
|
|
||||||
distance2(
|
|
||||||
prev.localToCanvasPoint(prev.getStartPoint()),
|
|
||||||
mousePos
|
|
||||||
) >
|
|
||||||
distance2(
|
distance2(
|
||||||
cur.localToCanvasPoint(cur.getStartPoint()),
|
cur.localToCanvasPoint(cur.getStartPoint()),
|
||||||
mousePos
|
mousePos
|
||||||
))
|
))
|
||||||
? cur
|
? cur
|
||||||
: prev;
|
: prev;
|
||||||
});
|
});
|
||||||
const minDistanceRefSectionsPos =
|
const minDistanceRefSectionsPos =
|
||||||
minDistanceSection.localToCanvasPoint(
|
minDistanceSection.localToCanvasPoint(
|
||||||
getRectangleCenter(
|
getRectangleCenter(
|
||||||
minDistanceSection.lineGraphic.getLocalBounds()
|
minDistanceSection.lineGraphic.getLocalBounds()
|
||||||
)
|
)
|
||||||
);
|
|
||||||
let minDistanceSectionLeft = minDistanceSection.localToCanvasPoint(
|
|
||||||
minDistanceSection.getStartPoint()
|
|
||||||
);
|
);
|
||||||
let minDistanceSectionRight = minDistanceSection.localToCanvasPoint(
|
let minDistanceSectionLeft = minDistanceSection.localToCanvasPoint(
|
||||||
minDistanceSection.getEndPoint()
|
minDistanceSection.getStartPoint()
|
||||||
);
|
);
|
||||||
[minDistanceSectionLeft, minDistanceSectionRight] =
|
let minDistanceSectionRight = minDistanceSection.localToCanvasPoint(
|
||||||
minDistanceSectionLeft.x < minDistanceSectionRight.x
|
minDistanceSection.getEndPoint()
|
||||||
? [minDistanceSectionLeft, minDistanceSectionRight]
|
);
|
||||||
: [minDistanceSectionRight, minDistanceSectionLeft];
|
[minDistanceSectionLeft, minDistanceSectionRight] =
|
||||||
|
minDistanceSectionLeft.x < minDistanceSectionRight.x
|
||||||
|
? [minDistanceSectionLeft, minDistanceSectionRight]
|
||||||
|
: [minDistanceSectionRight, minDistanceSectionLeft];
|
||||||
|
|
||||||
if (mousePos.x > minDistanceRefSectionsPos.x) {
|
if (mousePos.x > minDistanceRefSectionsPos.x) {
|
||||||
graphicCopyPlugin.container.position.x =
|
graphicCopyPlugin.container.position.x =
|
||||||
minDistanceSectionRight.x - selectSectionLeft.x;
|
minDistanceSectionRight.x - selectSectionLeft.x;
|
||||||
graphicCopyPlugin.container.position.y =
|
graphicCopyPlugin.container.position.y =
|
||||||
minDistanceSectionRight.y - selectSectionLeft.y;
|
minDistanceSectionRight.y - selectSectionLeft.y;
|
||||||
} else {
|
} else {
|
||||||
graphicCopyPlugin.container.position.x =
|
graphicCopyPlugin.container.position.x =
|
||||||
minDistanceSectionLeft.x - selectSectionRight.x;
|
minDistanceSectionLeft.x - selectSectionRight.x;
|
||||||
graphicCopyPlugin.container.position.y =
|
graphicCopyPlugin.container.position.y =
|
||||||
minDistanceSectionLeft.y - selectSectionRight.y;
|
minDistanceSectionLeft.y - selectSectionRight.y;
|
||||||
}
|
}
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
]);
|
},
|
||||||
|
]);
|
||||||
return drawApp;
|
return drawApp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -557,6 +560,7 @@ export function saveDrawDatas(app: IDrawApp) {
|
|||||||
// item.pcRef.nid = +item.pcRef.id;
|
// item.pcRef.nid = +item.pcRef.id;
|
||||||
// }
|
// }
|
||||||
// });
|
// });
|
||||||
|
storage.generateAxleCountingConfig = generateAxleCountingConfig;
|
||||||
const base64 = fromUint8Array(storage.serialize());
|
const base64 = fromUint8Array(storage.serialize());
|
||||||
console.log('保存数据', storage);
|
console.log('保存数据', storage);
|
||||||
// localStorage.setItem(StorageKey, base64);
|
// localStorage.setItem(StorageKey, base64);
|
||||||
@ -579,6 +583,7 @@ export async function loadDrawDatas(): Promise<IGraphicStorage> {
|
|||||||
);
|
);
|
||||||
console.log('加载数据', storage);
|
console.log('加载数据', storage);
|
||||||
const datas: GraphicData[] = [];
|
const datas: GraphicData[] = [];
|
||||||
|
generateAxleCountingConfig = storage.generateAxleCountingConfig;
|
||||||
storage.links.forEach((link) => {
|
storage.links.forEach((link) => {
|
||||||
datas.push(new LinkData(link));
|
datas.push(new LinkData(link));
|
||||||
});
|
});
|
||||||
@ -642,3 +647,15 @@ export async function loadDrawDatas(): Promise<IGraphicStorage> {
|
|||||||
datas: [],
|
datas: [],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//一键生成计轴配置
|
||||||
|
let generateAxleCountingConfig = new graphicData.GenerateAxleCountingConfig();
|
||||||
|
export function loadGenerateAxleCountingConfig() {
|
||||||
|
return generateAxleCountingConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setGenerateAxleCountingConfig(
|
||||||
|
newScreenDoorConfig: graphicData.GenerateAxleCountingConfig
|
||||||
|
) {
|
||||||
|
generateAxleCountingConfig = newScreenDoorConfig;
|
||||||
|
}
|
||||||
|
@ -20,6 +20,7 @@ import { Turnout, TurnoutPort } from '../turnout/Turnout';
|
|||||||
import { IRelatedRefData, createRelatedRefProto } from '../CommonGraphics';
|
import { IRelatedRefData, createRelatedRefProto } from '../CommonGraphics';
|
||||||
import { Signal } from '../signal/Signal';
|
import { Signal } from '../signal/Signal';
|
||||||
import { graphicData } from 'src/protos/stationLayoutGraphics';
|
import { graphicData } from 'src/protos/stationLayoutGraphics';
|
||||||
|
import { loadGenerateAxleCountingConfig } from 'src/drawApp';
|
||||||
|
|
||||||
export interface IAxleCountingDrawOptions {
|
export interface IAxleCountingDrawOptions {
|
||||||
newData: () => IAxleCountingData;
|
newData: () => IAxleCountingData;
|
||||||
@ -80,6 +81,21 @@ export class AxleCountingDraw extends GraphicDrawAssistant<
|
|||||||
refGraphic: Section | Turnout,
|
refGraphic: Section | Turnout,
|
||||||
refPort: TurnoutPort | SectionPort
|
refPort: TurnoutPort | SectionPort
|
||||||
) {
|
) {
|
||||||
|
const generateAxleCountingConfig = loadGenerateAxleCountingConfig();
|
||||||
|
if (generateAxleCountingConfig?.noGenerateGroup !== undefined) {
|
||||||
|
const noGenerateGroup = generateAxleCountingConfig.noGenerateGroup;
|
||||||
|
for (let i = 0; i < noGenerateGroup.length; i++) {
|
||||||
|
if (
|
||||||
|
noGenerateGroup[i] == graphic.id &&
|
||||||
|
((i % 2 == 0 && refGraphic.id == noGenerateGroup[i + 1]) ||
|
||||||
|
(i % 2 == 1 && refGraphic.id == noGenerateGroup[i - 1]))
|
||||||
|
) {
|
||||||
|
map.set(`${graphic.id}-${port}`, 1);
|
||||||
|
map.set(`${refGraphic.id}-${refPort}`, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
graphic.type == 'Turnout' &&
|
graphic.type == 'Turnout' &&
|
||||||
reftype == 'Turnout' &&
|
reftype == 'Turnout' &&
|
||||||
@ -163,7 +179,7 @@ export class AxleCountingDraw extends GraphicDrawAssistant<
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
this.app.deleteGraphics(...needDelete);
|
this.app.deleteGraphics(...needDelete);
|
||||||
const axleCountingRefs: IRelatedRefData[] = [];
|
const axleCountingRefs: IRelatedRefData[] = [];
|
||||||
axleCountings.forEach((axleCounting) => {
|
axleCountings.forEach((axleCounting) => {
|
||||||
axleCountingRefs.push(...axleCounting.datas.axleCountingRef);
|
axleCountingRefs.push(...axleCounting.datas.axleCountingRef);
|
||||||
|
@ -122,8 +122,11 @@
|
|||||||
|
|
||||||
<q-drawer show-if-above bordered v-model="rightDrawerOpen" side="right">
|
<q-drawer show-if-above bordered v-model="rightDrawerOpen" side="right">
|
||||||
<q-resize-observer @resize="onRightResize" />
|
<q-resize-observer @resize="onRightResize" />
|
||||||
<!-- drawer content -->
|
<axleCounting-config
|
||||||
<draw-properties></draw-properties>
|
v-if="showGenerateAxleCountingConfig"
|
||||||
|
@close="closeGenerateAxleCountingConfig"
|
||||||
|
/>
|
||||||
|
<draw-properties v-else></draw-properties>
|
||||||
</q-drawer>
|
</q-drawer>
|
||||||
|
|
||||||
<q-page-container>
|
<q-page-container>
|
||||||
@ -189,6 +192,7 @@ import {
|
|||||||
findContainDevice,
|
findContainDevice,
|
||||||
handleCentralizedStationsData,
|
handleCentralizedStationsData,
|
||||||
} from 'src/graphics/concentrationDividingLine/ConcentrationDividingLineUtils';
|
} from 'src/graphics/concentrationDividingLine/ConcentrationDividingLineUtils';
|
||||||
|
import AxleCountingConfig from 'src/components/draw-app/properties/AxleCountingConfig.vue';
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@ -358,10 +362,14 @@ function oneClickSeparator() {
|
|||||||
.getDrawAssistant(Separator.Type) as SeparatorDraw;
|
.getDrawAssistant(Separator.Type) as SeparatorDraw;
|
||||||
separatorDraw.oneGenerates();
|
separatorDraw.oneGenerates();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const showGenerateAxleCountingConfig = ref(false);
|
||||||
|
const closeGenerateAxleCountingConfig = () => {
|
||||||
|
showGenerateAxleCountingConfig.value = false;
|
||||||
|
};
|
||||||
function oneClickAxleCounting() {
|
function oneClickAxleCounting() {
|
||||||
//一键生成计轴
|
//一键生成计轴
|
||||||
drawStore.oneClickType = 'AxleCounting';
|
showGenerateAxleCountingConfig.value = true;
|
||||||
drawStore.getDrawApp().interactionPlugin(OneClickGenerate.Type).resume();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function oneClickTurnoutSection() {
|
function oneClickTurnoutSection() {
|
||||||
|
@ -44,6 +44,13 @@
|
|||||||
lazy-rules
|
lazy-rules
|
||||||
:rules="[(val) => val >= 0 || '请选择线路ID!']"
|
:rules="[(val) => val >= 0 || '请选择线路ID!']"
|
||||||
/>
|
/>
|
||||||
|
<q-select
|
||||||
|
dense
|
||||||
|
label="线路类型"
|
||||||
|
v-model="filter.lineType"
|
||||||
|
:options="searchOptionsLineType"
|
||||||
|
style="width: 100px"
|
||||||
|
/>
|
||||||
<q-input
|
<q-input
|
||||||
dense
|
dense
|
||||||
v-model="filter.beginDateTime"
|
v-model="filter.beginDateTime"
|
||||||
@ -344,7 +351,11 @@ async function onRequest(props: any) {
|
|||||||
lineId: filter.value.lineId,
|
lineId: filter.value.lineId,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (filter.value.lineType !== '全部') {
|
||||||
|
Object.assign(params, {
|
||||||
|
lineType: filter.value.lineType,
|
||||||
|
});
|
||||||
|
}
|
||||||
if (filter.value.alertType !== '全部') {
|
if (filter.value.alertType !== '全部') {
|
||||||
Object.assign(params, {
|
Object.assign(params, {
|
||||||
alertType: (saveAlertTypeData as never)[filter.value.alertType],
|
alertType: (saveAlertTypeData as never)[filter.value.alertType],
|
||||||
@ -436,6 +447,7 @@ function batchHandle() {
|
|||||||
const filter = ref({
|
const filter = ref({
|
||||||
alertType: '全部',
|
alertType: '全部',
|
||||||
lineId: 0,
|
lineId: 0,
|
||||||
|
lineType: '全部',
|
||||||
beginDateTime: '',
|
beginDateTime: '',
|
||||||
endDateTime: '',
|
endDateTime: '',
|
||||||
alertStatus: 999,
|
alertStatus: 999,
|
||||||
@ -444,6 +456,7 @@ const filter = ref({
|
|||||||
const optionsLineId = ref<{ label: string; value: number }[]>([
|
const optionsLineId = ref<{ label: string; value: number }[]>([
|
||||||
{ label: '全部', value: 0 },
|
{ label: '全部', value: 0 },
|
||||||
]);
|
]);
|
||||||
|
const searchOptionsLineType = ['全部', 'NCC', 'OCC'];
|
||||||
async function queryLineInfo() {
|
async function queryLineInfo() {
|
||||||
try {
|
try {
|
||||||
let response = await pageQuery({
|
let response = await pageQuery({
|
||||||
|
@ -27,13 +27,48 @@
|
|||||||
</q-td>
|
</q-td>
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:top-right>
|
<template v-slot:top-right>
|
||||||
<q-btn
|
<q-form ref="myForm" @submit="searchDecisionInfo" style="width: 100%">
|
||||||
class="q-mr-md"
|
<div class="q-gutter-md q-mt-none row justify-center items-start">
|
||||||
color="primary"
|
<q-select
|
||||||
label="查询"
|
dense
|
||||||
@click="openSearchDialog"
|
v-model="filter.lineId"
|
||||||
/>
|
:options="searchOptionsLineId"
|
||||||
<q-btn color="primary" label="新建" @click="createFormShow = true" />
|
emit-value
|
||||||
|
map-options
|
||||||
|
options-dense
|
||||||
|
label="线路ID"
|
||||||
|
style="width: 75px"
|
||||||
|
no-error-icon
|
||||||
|
lazy-rules
|
||||||
|
:rules="[(val) => val >= 0 || '请选择线路ID!']"
|
||||||
|
/>
|
||||||
|
<q-select
|
||||||
|
dense
|
||||||
|
label="线路类型"
|
||||||
|
v-model="filter.lineType"
|
||||||
|
:options="searchOptionsLineType"
|
||||||
|
style="width: 100px"
|
||||||
|
/>
|
||||||
|
<q-select
|
||||||
|
dense
|
||||||
|
label="故障类型"
|
||||||
|
v-model="filter.alertType"
|
||||||
|
:options="searchOptionsAlertType"
|
||||||
|
style="width: 130px"
|
||||||
|
/>
|
||||||
|
<q-input
|
||||||
|
dense
|
||||||
|
v-model="filter.areaConfigName"
|
||||||
|
label="区域名称"
|
||||||
|
></q-input>
|
||||||
|
<q-btn color="primary" label="查询" type="submit" />
|
||||||
|
<q-btn
|
||||||
|
color="primary"
|
||||||
|
label="新建"
|
||||||
|
@click="createFormShow = true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</q-form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-slot:body-cell-operations="props">
|
<template v-slot:body-cell-operations="props">
|
||||||
@ -134,38 +169,6 @@
|
|||||||
</q-form>
|
</q-form>
|
||||||
</q-card>
|
</q-card>
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
|
|
||||||
<q-dialog
|
|
||||||
v-model="searchDialog"
|
|
||||||
persistent
|
|
||||||
transition-show="scale"
|
|
||||||
transition-hide="scale"
|
|
||||||
>
|
|
||||||
<q-card style="width: 300px">
|
|
||||||
<q-card-section>
|
|
||||||
<div class="text-h6">查询决策信息</div>
|
|
||||||
</q-card-section>
|
|
||||||
<q-card-section>
|
|
||||||
<q-select
|
|
||||||
outlined
|
|
||||||
label="故障类型"
|
|
||||||
v-model="filter.alertType"
|
|
||||||
:options="optionsAlertType"
|
|
||||||
class="q-mb-md"
|
|
||||||
/>
|
|
||||||
<q-input
|
|
||||||
outlined
|
|
||||||
v-model="filter.areaConfigName"
|
|
||||||
label="区域名称"
|
|
||||||
></q-input>
|
|
||||||
</q-card-section>
|
|
||||||
|
|
||||||
<q-card-actions align="right">
|
|
||||||
<q-btn color="primary" label="确定" @click="searchDecisionInfo()" />
|
|
||||||
<q-btn label="取消" v-close-popup />
|
|
||||||
</q-card-actions>
|
|
||||||
</q-card>
|
|
||||||
</q-dialog>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -287,16 +290,42 @@ const pagination = ref({
|
|||||||
rowsNumber: 10,
|
rowsNumber: 10,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const filter = ref({
|
||||||
|
alertType: '全部',
|
||||||
|
areaConfigName: '',
|
||||||
|
lineId: 0,
|
||||||
|
lineType: '全部',
|
||||||
|
});
|
||||||
|
|
||||||
const onRequest: QTable['onRequest'] = async (props) => {
|
const onRequest: QTable['onRequest'] = async (props) => {
|
||||||
const { page, rowsPerPage, sortBy, descending } = props.pagination;
|
const { page, rowsPerPage, sortBy, descending } = props.pagination;
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
try {
|
try {
|
||||||
let response = await alarmInfoPageQuery({
|
const params = {
|
||||||
current: page,
|
current: page,
|
||||||
size: rowsPerPage,
|
size: rowsPerPage,
|
||||||
alertType: (saveAlertTypeData as never)[filter.value.alertType],
|
};
|
||||||
areaConfigName: filter.value.areaConfigName,
|
if (filter.value.lineId !== 0) {
|
||||||
});
|
Object.assign(params, {
|
||||||
|
lineId: filter.value.lineId,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (filter.value.lineType !== '全部') {
|
||||||
|
Object.assign(params, {
|
||||||
|
lineType: filter.value.lineType,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (filter.value.alertType !== '全部') {
|
||||||
|
Object.assign(params, {
|
||||||
|
alertType: (saveAlertTypeData as never)[filter.value.alertType],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (filter.value.areaConfigName) {
|
||||||
|
Object.assign(params, {
|
||||||
|
areaConfigName: filter.value.areaConfigName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let response = await alarmInfoPageQuery(params);
|
||||||
const pageData = response;
|
const pageData = response;
|
||||||
pagination.value.rowsNumber = pageData.total;
|
pagination.value.rowsNumber = pageData.total;
|
||||||
pagination.value.page = page;
|
pagination.value.page = page;
|
||||||
@ -321,17 +350,7 @@ onMounted(() => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const searchDialog = ref(false);
|
|
||||||
const filter = ref({
|
|
||||||
alertType: '',
|
|
||||||
areaConfigName: '',
|
|
||||||
});
|
|
||||||
function openSearchDialog() {
|
|
||||||
filter.value = { alertType: '', areaConfigName: '' };
|
|
||||||
searchDialog.value = true;
|
|
||||||
}
|
|
||||||
function searchDecisionInfo() {
|
function searchDecisionInfo() {
|
||||||
searchDialog.value = false;
|
|
||||||
tableRef.value.requestServerInteraction();
|
tableRef.value.requestServerInteraction();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,6 +368,9 @@ const creatForm = reactive({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const optionsLineId = ref<{ label: string; value: number }[]>([]);
|
const optionsLineId = ref<{ label: string; value: number }[]>([]);
|
||||||
|
const searchOptionsLineId = ref<{ label: string; value: number }[]>([
|
||||||
|
{ label: '全部', value: 0 },
|
||||||
|
]);
|
||||||
async function queryLineInfo() {
|
async function queryLineInfo() {
|
||||||
try {
|
try {
|
||||||
let response = await pageQuery({
|
let response = await pageQuery({
|
||||||
@ -357,6 +379,7 @@ async function queryLineInfo() {
|
|||||||
});
|
});
|
||||||
response.records.forEach((info) => {
|
response.records.forEach((info) => {
|
||||||
optionsLineId.value.push({ label: info.name, value: info.lineId });
|
optionsLineId.value.push({ label: info.name, value: info.lineId });
|
||||||
|
searchOptionsLineId.value.push({ label: info.name, value: info.lineId });
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
const error = err as ApiError;
|
const error = err as ApiError;
|
||||||
@ -367,6 +390,7 @@ async function queryLineInfo() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const optionsLineType = ['NCC', 'OCC'];
|
const optionsLineType = ['NCC', 'OCC'];
|
||||||
|
const searchOptionsLineType = ['全部', ...optionsLineType];
|
||||||
const optionsAlertType = [
|
const optionsAlertType = [
|
||||||
'蓝显',
|
'蓝显',
|
||||||
'全线蓝显',
|
'全线蓝显',
|
||||||
@ -388,6 +412,7 @@ const optionsAlertType = [
|
|||||||
'联锁区橙光带',
|
'联锁区橙光带',
|
||||||
'联锁区失表',
|
'联锁区失表',
|
||||||
];
|
];
|
||||||
|
const searchOptionsAlertType = ['全部', ...optionsAlertType];
|
||||||
let optionsLocationType = ref<string[]>([]);
|
let optionsLocationType = ref<string[]>([]);
|
||||||
let optionsLocationList: AreaConfigItem[] = [];
|
let optionsLocationList: AreaConfigItem[] = [];
|
||||||
async function searchLocationType() {
|
async function searchLocationType() {
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
v-model="filter.name"
|
v-model="filter.name"
|
||||||
label="名称"
|
label="名称"
|
||||||
></q-input>
|
></q-input>
|
||||||
<q-btn flat round color="primary" icon="search" />
|
<q-btn flat round color="primary" icon="search" @click="searchQuery" />
|
||||||
<q-btn color="primary" label="新建" @click="createFormShow = true" />
|
<q-btn color="primary" label="新建" @click="createFormShow = true" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -362,4 +362,7 @@ async function deleteData(row: any) {
|
|||||||
operateDisabled.value = false;
|
operateDisabled.value = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
function searchQuery() {
|
||||||
|
tableRef.value.requestServerInteraction();
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
v-model="filter.name"
|
v-model="filter.name"
|
||||||
label="名称"
|
label="名称"
|
||||||
></q-input>
|
></q-input>
|
||||||
<q-btn flat round color="primary" icon="search" />
|
<q-btn flat round color="primary" icon="search" @click="searchQuery" />
|
||||||
<q-btn color="primary" label="新建" @click="createFormShow = true" />
|
<q-btn color="primary" label="新建" @click="createFormShow = true" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -267,4 +267,7 @@ function editData(row: any) {
|
|||||||
editInfo.config = row.config || '';
|
editInfo.config = row.config || '';
|
||||||
createFormShow.value = true;
|
createFormShow.value = true;
|
||||||
}
|
}
|
||||||
|
function searchQuery() {
|
||||||
|
tableRef.value.requestServerInteraction();
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
v-model:pagination="pagination"
|
v-model:pagination="pagination"
|
||||||
:rows-per-page-options="[10, 20, 50, 100]"
|
:rows-per-page-options="[10, 20, 50, 100]"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
:filter="filter"
|
|
||||||
binary-state-sort
|
binary-state-sort
|
||||||
@request="onRequest"
|
@request="onRequest"
|
||||||
>
|
>
|
||||||
@ -104,13 +103,14 @@
|
|||||||
with-seconds
|
with-seconds
|
||||||
>
|
>
|
||||||
<div class="row items-center justify-end">
|
<div class="row items-center justify-end">
|
||||||
<q-btn v-close-popup label="Close" color="primary" flat />
|
<q-btn v-close-popup label="关闭" color="primary" flat />
|
||||||
</div>
|
</div>
|
||||||
</q-time>
|
</q-time>
|
||||||
</q-popup-proxy>
|
</q-popup-proxy>
|
||||||
</q-icon>
|
</q-icon>
|
||||||
</template>
|
</template>
|
||||||
</q-input>
|
</q-input>
|
||||||
|
<q-btn flat round color="primary" icon="search" @click="searchQuery" />
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:body-cell-subEventType="props">
|
<template v-slot:body-cell-subEventType="props">
|
||||||
<q-td :props="props">
|
<q-td :props="props">
|
||||||
@ -285,4 +285,8 @@ function getSubEventType(type: string) {
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function searchQuery() {
|
||||||
|
tableRef.value.requestServerInteraction();
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
v-model:pagination="pagination"
|
v-model:pagination="pagination"
|
||||||
:rows-per-page-options="[10, 20, 50, 100]"
|
:rows-per-page-options="[10, 20, 50, 100]"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
:filter="filter"
|
|
||||||
binary-state-sort
|
binary-state-sort
|
||||||
@request="onRequest"
|
@request="onRequest"
|
||||||
>
|
>
|
||||||
@ -104,13 +103,14 @@
|
|||||||
with-seconds
|
with-seconds
|
||||||
>
|
>
|
||||||
<div class="row items-center justify-end">
|
<div class="row items-center justify-end">
|
||||||
<q-btn v-close-popup label="Close" color="primary" flat />
|
<q-btn v-close-popup label="关闭" color="primary" flat />
|
||||||
</div>
|
</div>
|
||||||
</q-time>
|
</q-time>
|
||||||
</q-popup-proxy>
|
</q-popup-proxy>
|
||||||
</q-icon>
|
</q-icon>
|
||||||
</template>
|
</template>
|
||||||
</q-input>
|
</q-input>
|
||||||
|
<q-btn flat round color="primary" icon="search" @click="searchQuery" />
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:body-cell-subEventType="props">
|
<template v-slot:body-cell-subEventType="props">
|
||||||
<q-td :props="props">
|
<q-td :props="props">
|
||||||
@ -269,6 +269,10 @@ async function onRequest(props: any) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function searchQuery() {
|
||||||
|
tableRef.value.requestServerInteraction();
|
||||||
|
}
|
||||||
|
|
||||||
function getSubEventType(type: string) {
|
function getSubEventType(type: string) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'LOGIN':
|
case 'LOGIN':
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
v-model="filter.name"
|
v-model="filter.name"
|
||||||
label="名称"
|
label="名称"
|
||||||
></q-input>
|
></q-input>
|
||||||
<q-btn flat round color="primary" icon="search" />
|
<q-btn flat round color="primary" icon="search" @click="searchQuery" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-slot:body-cell-operations="props">
|
<template v-slot:body-cell-operations="props">
|
||||||
@ -183,4 +183,7 @@ async function deleteData(row: any) {
|
|||||||
operateDisabled.value = false;
|
operateDisabled.value = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
function searchQuery() {
|
||||||
|
tableRef.value.requestServerInteraction();
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
v-model="filter.name"
|
v-model="filter.name"
|
||||||
label="用户名"
|
label="用户名"
|
||||||
></q-input>
|
></q-input>
|
||||||
<q-btn flat round color="primary" icon="search" />
|
<q-btn flat round color="primary" icon="search" @click="searchQuery" />
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:body-cell-roles="props">
|
<template v-slot:body-cell-roles="props">
|
||||||
<q-td :props="props">
|
<q-td :props="props">
|
||||||
@ -289,4 +289,8 @@ function onReset() {
|
|||||||
userInfo.Rids = [];
|
userInfo.Rids = [];
|
||||||
myForm.value?.resetValidation();
|
myForm.value?.resetValidation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function searchQuery() {
|
||||||
|
tableRef.value.requestServerInteraction();
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -28,6 +28,7 @@ export namespace graphicData {
|
|||||||
separators?: Separator[];
|
separators?: Separator[];
|
||||||
logicSections?: LogicSection[];
|
logicSections?: LogicSection[];
|
||||||
concentrationDividingLines?: ConcentrationDividingLine[];
|
concentrationDividingLines?: ConcentrationDividingLine[];
|
||||||
|
generateAxleCountingConfig?: GenerateAxleCountingConfig;
|
||||||
}) {
|
}) {
|
||||||
super();
|
super();
|
||||||
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], this.#one_of_decls);
|
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], this.#one_of_decls);
|
||||||
@ -92,6 +93,9 @@ export namespace graphicData {
|
|||||||
if ("concentrationDividingLines" in data && data.concentrationDividingLines != undefined) {
|
if ("concentrationDividingLines" in data && data.concentrationDividingLines != undefined) {
|
||||||
this.concentrationDividingLines = data.concentrationDividingLines;
|
this.concentrationDividingLines = data.concentrationDividingLines;
|
||||||
}
|
}
|
||||||
|
if ("generateAxleCountingConfig" in data && data.generateAxleCountingConfig != undefined) {
|
||||||
|
this.generateAxleCountingConfig = data.generateAxleCountingConfig;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
get canvas() {
|
get canvas() {
|
||||||
@ -217,6 +221,15 @@ export namespace graphicData {
|
|||||||
set concentrationDividingLines(value: ConcentrationDividingLine[]) {
|
set concentrationDividingLines(value: ConcentrationDividingLine[]) {
|
||||||
pb_1.Message.setRepeatedWrapperField(this, 20, value);
|
pb_1.Message.setRepeatedWrapperField(this, 20, value);
|
||||||
}
|
}
|
||||||
|
get generateAxleCountingConfig() {
|
||||||
|
return pb_1.Message.getWrapperField(this, GenerateAxleCountingConfig, 21) as GenerateAxleCountingConfig;
|
||||||
|
}
|
||||||
|
set generateAxleCountingConfig(value: GenerateAxleCountingConfig) {
|
||||||
|
pb_1.Message.setWrapperField(this, 21, value);
|
||||||
|
}
|
||||||
|
get has_generateAxleCountingConfig() {
|
||||||
|
return pb_1.Message.getField(this, 21) != null;
|
||||||
|
}
|
||||||
static fromObject(data: {
|
static fromObject(data: {
|
||||||
canvas?: ReturnType<typeof Canvas.prototype.toObject>;
|
canvas?: ReturnType<typeof Canvas.prototype.toObject>;
|
||||||
links?: ReturnType<typeof Link.prototype.toObject>[];
|
links?: ReturnType<typeof Link.prototype.toObject>[];
|
||||||
@ -238,6 +251,7 @@ export namespace graphicData {
|
|||||||
separators?: ReturnType<typeof Separator.prototype.toObject>[];
|
separators?: ReturnType<typeof Separator.prototype.toObject>[];
|
||||||
logicSections?: ReturnType<typeof LogicSection.prototype.toObject>[];
|
logicSections?: ReturnType<typeof LogicSection.prototype.toObject>[];
|
||||||
concentrationDividingLines?: ReturnType<typeof ConcentrationDividingLine.prototype.toObject>[];
|
concentrationDividingLines?: ReturnType<typeof ConcentrationDividingLine.prototype.toObject>[];
|
||||||
|
generateAxleCountingConfig?: ReturnType<typeof GenerateAxleCountingConfig.prototype.toObject>;
|
||||||
}): RtssGraphicStorage {
|
}): RtssGraphicStorage {
|
||||||
const message = new RtssGraphicStorage({});
|
const message = new RtssGraphicStorage({});
|
||||||
if (data.canvas != null) {
|
if (data.canvas != null) {
|
||||||
@ -300,6 +314,9 @@ export namespace graphicData {
|
|||||||
if (data.concentrationDividingLines != null) {
|
if (data.concentrationDividingLines != null) {
|
||||||
message.concentrationDividingLines = data.concentrationDividingLines.map(item => ConcentrationDividingLine.fromObject(item));
|
message.concentrationDividingLines = data.concentrationDividingLines.map(item => ConcentrationDividingLine.fromObject(item));
|
||||||
}
|
}
|
||||||
|
if (data.generateAxleCountingConfig != null) {
|
||||||
|
message.generateAxleCountingConfig = GenerateAxleCountingConfig.fromObject(data.generateAxleCountingConfig);
|
||||||
|
}
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
toObject() {
|
toObject() {
|
||||||
@ -324,6 +341,7 @@ export namespace graphicData {
|
|||||||
separators?: ReturnType<typeof Separator.prototype.toObject>[];
|
separators?: ReturnType<typeof Separator.prototype.toObject>[];
|
||||||
logicSections?: ReturnType<typeof LogicSection.prototype.toObject>[];
|
logicSections?: ReturnType<typeof LogicSection.prototype.toObject>[];
|
||||||
concentrationDividingLines?: ReturnType<typeof ConcentrationDividingLine.prototype.toObject>[];
|
concentrationDividingLines?: ReturnType<typeof ConcentrationDividingLine.prototype.toObject>[];
|
||||||
|
generateAxleCountingConfig?: ReturnType<typeof GenerateAxleCountingConfig.prototype.toObject>;
|
||||||
} = {};
|
} = {};
|
||||||
if (this.canvas != null) {
|
if (this.canvas != null) {
|
||||||
data.canvas = this.canvas.toObject();
|
data.canvas = this.canvas.toObject();
|
||||||
@ -385,6 +403,9 @@ export namespace graphicData {
|
|||||||
if (this.concentrationDividingLines != null) {
|
if (this.concentrationDividingLines != null) {
|
||||||
data.concentrationDividingLines = this.concentrationDividingLines.map((item: ConcentrationDividingLine) => item.toObject());
|
data.concentrationDividingLines = this.concentrationDividingLines.map((item: ConcentrationDividingLine) => item.toObject());
|
||||||
}
|
}
|
||||||
|
if (this.generateAxleCountingConfig != null) {
|
||||||
|
data.generateAxleCountingConfig = this.generateAxleCountingConfig.toObject();
|
||||||
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
serialize(): Uint8Array;
|
serialize(): Uint8Array;
|
||||||
@ -431,6 +452,8 @@ export namespace graphicData {
|
|||||||
writer.writeRepeatedMessage(19, this.logicSections, (item: LogicSection) => item.serialize(writer));
|
writer.writeRepeatedMessage(19, this.logicSections, (item: LogicSection) => item.serialize(writer));
|
||||||
if (this.concentrationDividingLines.length)
|
if (this.concentrationDividingLines.length)
|
||||||
writer.writeRepeatedMessage(20, this.concentrationDividingLines, (item: ConcentrationDividingLine) => item.serialize(writer));
|
writer.writeRepeatedMessage(20, this.concentrationDividingLines, (item: ConcentrationDividingLine) => item.serialize(writer));
|
||||||
|
if (this.has_generateAxleCountingConfig)
|
||||||
|
writer.writeMessage(21, this.generateAxleCountingConfig, () => this.generateAxleCountingConfig.serialize(writer));
|
||||||
if (!w)
|
if (!w)
|
||||||
return writer.getResultBuffer();
|
return writer.getResultBuffer();
|
||||||
}
|
}
|
||||||
@ -500,6 +523,9 @@ export namespace graphicData {
|
|||||||
case 20:
|
case 20:
|
||||||
reader.readMessage(message.concentrationDividingLines, () => pb_1.Message.addToRepeatedWrapperField(message, 20, ConcentrationDividingLine.deserialize(reader), ConcentrationDividingLine));
|
reader.readMessage(message.concentrationDividingLines, () => pb_1.Message.addToRepeatedWrapperField(message, 20, ConcentrationDividingLine.deserialize(reader), ConcentrationDividingLine));
|
||||||
break;
|
break;
|
||||||
|
case 21:
|
||||||
|
reader.readMessage(message.generateAxleCountingConfig, () => message.generateAxleCountingConfig = GenerateAxleCountingConfig.deserialize(reader));
|
||||||
|
break;
|
||||||
default: reader.skipField();
|
default: reader.skipField();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5241,4 +5267,94 @@ export namespace graphicData {
|
|||||||
return Separator.deserialize(bytes);
|
return Separator.deserialize(bytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
export class GenerateAxleCountingConfig extends pb_1.Message {
|
||||||
|
#one_of_decls: number[][] = [];
|
||||||
|
constructor(data?: any[] | {
|
||||||
|
bbConnect?: number[];
|
||||||
|
noGenerateGroup?: number[];
|
||||||
|
}) {
|
||||||
|
super();
|
||||||
|
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [1, 2], this.#one_of_decls);
|
||||||
|
if (!Array.isArray(data) && typeof data == "object") {
|
||||||
|
if ("bbConnect" in data && data.bbConnect != undefined) {
|
||||||
|
this.bbConnect = data.bbConnect;
|
||||||
|
}
|
||||||
|
if ("noGenerateGroup" in data && data.noGenerateGroup != undefined) {
|
||||||
|
this.noGenerateGroup = data.noGenerateGroup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
get bbConnect() {
|
||||||
|
return pb_1.Message.getFieldWithDefault(this, 1, []) as number[];
|
||||||
|
}
|
||||||
|
set bbConnect(value: number[]) {
|
||||||
|
pb_1.Message.setField(this, 1, value);
|
||||||
|
}
|
||||||
|
get noGenerateGroup() {
|
||||||
|
return pb_1.Message.getFieldWithDefault(this, 2, []) as number[];
|
||||||
|
}
|
||||||
|
set noGenerateGroup(value: number[]) {
|
||||||
|
pb_1.Message.setField(this, 2, value);
|
||||||
|
}
|
||||||
|
static fromObject(data: {
|
||||||
|
bbConnect?: number[];
|
||||||
|
noGenerateGroup?: number[];
|
||||||
|
}): GenerateAxleCountingConfig {
|
||||||
|
const message = new GenerateAxleCountingConfig({});
|
||||||
|
if (data.bbConnect != null) {
|
||||||
|
message.bbConnect = data.bbConnect;
|
||||||
|
}
|
||||||
|
if (data.noGenerateGroup != null) {
|
||||||
|
message.noGenerateGroup = data.noGenerateGroup;
|
||||||
|
}
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
toObject() {
|
||||||
|
const data: {
|
||||||
|
bbConnect?: number[];
|
||||||
|
noGenerateGroup?: number[];
|
||||||
|
} = {};
|
||||||
|
if (this.bbConnect != null) {
|
||||||
|
data.bbConnect = this.bbConnect;
|
||||||
|
}
|
||||||
|
if (this.noGenerateGroup != null) {
|
||||||
|
data.noGenerateGroup = this.noGenerateGroup;
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
serialize(): Uint8Array;
|
||||||
|
serialize(w: pb_1.BinaryWriter): void;
|
||||||
|
serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
|
||||||
|
const writer = w || new pb_1.BinaryWriter();
|
||||||
|
if (this.bbConnect.length)
|
||||||
|
writer.writePackedUint32(1, this.bbConnect);
|
||||||
|
if (this.noGenerateGroup.length)
|
||||||
|
writer.writePackedUint32(2, this.noGenerateGroup);
|
||||||
|
if (!w)
|
||||||
|
return writer.getResultBuffer();
|
||||||
|
}
|
||||||
|
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): GenerateAxleCountingConfig {
|
||||||
|
const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new GenerateAxleCountingConfig();
|
||||||
|
while (reader.nextField()) {
|
||||||
|
if (reader.isEndGroup())
|
||||||
|
break;
|
||||||
|
switch (reader.getFieldNumber()) {
|
||||||
|
case 1:
|
||||||
|
message.bbConnect = reader.readPackedUint32();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
message.noGenerateGroup = reader.readPackedUint32();
|
||||||
|
break;
|
||||||
|
default: reader.skipField();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
serializeBinary(): Uint8Array {
|
||||||
|
return this.serialize();
|
||||||
|
}
|
||||||
|
static deserializeBinary(bytes: Uint8Array): GenerateAxleCountingConfig {
|
||||||
|
return GenerateAxleCountingConfig.deserialize(bytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 4f9012b0795f62bf352b078ebbc1b1fffa86849d
|
Subproject commit 91cfbc3ee5574419615ae177661239cdc0d7d53e
|
Loading…
Reference in New Issue
Block a user