Compare commits
2 Commits
259d3518bb
...
dbed83df26
Author | SHA1 | Date | |
---|---|---|---|
|
dbed83df26 | ||
|
5bddef10cd |
@ -96,4 +96,8 @@
|
|||||||
<symbol id="icon-flood-gate" viewBox="0 0 129 139" fill="none">
|
<symbol id="icon-flood-gate" viewBox="0 0 129 139" fill="none">
|
||||||
<path fill-rule="evenodd" stroke="rgba(255, 255, 255, 1)" stroke-width="5" d="M0 1.5L61.5 1.5M61.5 1.5L123 1.5M61.5 1.5L61.5 137.5L0 137.5L123 137.5"/>
|
<path fill-rule="evenodd" stroke="rgba(255, 255, 255, 1)" stroke-width="5" d="M0 1.5L61.5 1.5M61.5 1.5L123 1.5M61.5 1.5L61.5 137.5L0 137.5L123 137.5"/>
|
||||||
</symbol>
|
</symbol>
|
||||||
|
<symbol id="icon-fas-failure-control-host" viewBox="0 0 1024 1024" fill="none" width="24" height="24">
|
||||||
|
<path d="M876.606061 62.060606a62.060606 62.060606 0 0 0-62.060606-62.060606H209.454545a62.060606 62.060606 0 0 0-62.060606 62.060606v899.878788a62.060606 62.060606 0 0 0 62.060606 62.060606h605.09091a62.060606 62.060606 0 0 0 62.060606-62.060606V62.060606z m-62.060606 929.093818zM209.454545 62.060606h599.272728l-0.093091 899.878788H209.454545V62.060606z m543.030303 77.575758a31.030303 31.030303 0 0 0-31.030303-31.030303H287.030303a31.030303 31.030303 0 0 0-31.030303 31.030303v108.60606a31.030303 31.030303 0 0 0 31.030303 31.030303h434.424242a31.030303 31.030303 0 0 0 31.030303-31.030303V139.636364z m-62.060606 77.575757H318.060606v-46.545454h372.363636v46.545454z m62.060606 139.636364a31.030303 31.030303 0 0 0-31.030303-31.030303H287.030303a31.030303 31.030303 0 0 0-31.030303 31.030303v108.60606a31.030303 31.030303 0 0 0 31.030303 31.030303h434.424242a31.030303 31.030303 0 0 0 31.030303-31.030303v-108.60606z m-62.060606 77.575757H318.060606v-46.545454h372.363636v46.545454z m-65.427394 244.363637a130.59103 130.59103 0 1 0-130.59103 130.59103 130.730667 130.730667 0 0 0 130.59103-130.59103z m-130.59103 68.530424a68.530424 68.530424 0 1 1 68.530424-68.530424 68.608 68.608 0 0 1-68.530424 68.530424zM442.181818 837.818182h-77.575757a31.030303 31.030303 0 0 0 0 62.060606h77.575757a31.030303 31.030303 0 0 0 0-62.060606z m201.69697 0h-77.575758a31.030303 31.030303 0 0 0 0 62.060606h77.575758a31.030303 31.030303 0 0 0 0-62.060606z" fill="#ffffff" p-id="4368"></path>
|
||||||
|
</symbol>
|
||||||
|
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
44
src/drawApp/graphics/FAS/FasFailureControlHostInteraction.ts
Normal file
44
src/drawApp/graphics/FAS/FasFailureControlHostInteraction.ts
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import * as pb_1 from 'google-protobuf';
|
||||||
|
import { GraphicDataBase } from '../GraphicDataBase';
|
||||||
|
import {
|
||||||
|
FasFailureControlHost,
|
||||||
|
IFasFailureControlHostData,
|
||||||
|
} from 'src/graphics/FAS/fireFailureControlHost/FasFailureControlHost';
|
||||||
|
import { iscsGraphicData } from 'src/protos/iscs_graphic_data';
|
||||||
|
|
||||||
|
export class FasFailureControlHostData
|
||||||
|
extends GraphicDataBase
|
||||||
|
implements IFasFailureControlHostData
|
||||||
|
{
|
||||||
|
constructor(data?: iscsGraphicData.FasFailureControlHost) {
|
||||||
|
let cctvButton;
|
||||||
|
if (data) {
|
||||||
|
cctvButton = data;
|
||||||
|
} else {
|
||||||
|
cctvButton = new iscsGraphicData.FasFailureControlHost({
|
||||||
|
common: GraphicDataBase.defaultCommonInfo(FasFailureControlHost.Type),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
super(cctvButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
public get data(): iscsGraphicData.FasFailureControlHost {
|
||||||
|
return this.getData<iscsGraphicData.FasFailureControlHost>();
|
||||||
|
}
|
||||||
|
|
||||||
|
get code(): string {
|
||||||
|
return this.data.code;
|
||||||
|
}
|
||||||
|
set code(v: string) {
|
||||||
|
this.data.code = v;
|
||||||
|
}
|
||||||
|
clone(): FasFailureControlHostData {
|
||||||
|
return new FasFailureControlHostData(this.data.cloneMessage());
|
||||||
|
}
|
||||||
|
copyFrom(data: FasFailureControlHostData): void {
|
||||||
|
pb_1.Message.copyInto(data.data, this.data);
|
||||||
|
}
|
||||||
|
eq(other: FasFailureControlHostData): boolean {
|
||||||
|
return pb_1.Message.equals(this.data, other.data);
|
||||||
|
}
|
||||||
|
}
|
@ -26,6 +26,12 @@ import { getWebsocketUrl } from 'src/configs/UrlManage';
|
|||||||
import { sync_data_message } from 'src/protos/sync_data_message';
|
import { sync_data_message } from 'src/protos/sync_data_message';
|
||||||
import { useAuthStore } from 'src/stores/auth-store';
|
import { useAuthStore } from 'src/stores/auth-store';
|
||||||
import { common } from 'src/protos/common';
|
import { common } from 'src/protos/common';
|
||||||
|
import {
|
||||||
|
FasFailureControlHost,
|
||||||
|
FasFailureControlHostTemplate,
|
||||||
|
} from 'src/graphics/FAS/fireFailureControlHost/FasFailureControlHost';
|
||||||
|
import { FasFailureControlHostData } from './graphics/FAS/FasFailureControlHostInteraction';
|
||||||
|
import { FasFailureControlHostDraw } from 'src/graphics/FAS/fireFailureControlHost/FasFailureContorlHostAssistant';
|
||||||
// import { getOnlyToken } from 'src/configs/TokenManage';
|
// import { getOnlyToken } from 'src/configs/TokenManage';
|
||||||
|
|
||||||
let drawApp: IDrawApp | null = null;
|
let drawApp: IDrawApp | null = null;
|
||||||
@ -60,6 +66,11 @@ export function initIscsDrawApp(): IDrawApp {
|
|||||||
|
|
||||||
const app = drawApp;
|
const app = drawApp;
|
||||||
initCommonDrawApp(app);
|
initCommonDrawApp(app);
|
||||||
|
new FasFailureControlHostDraw(
|
||||||
|
app,
|
||||||
|
new FasFailureControlHostTemplate(new FasFailureControlHostData())
|
||||||
|
);
|
||||||
|
|
||||||
app.addKeyboardListener(
|
app.addKeyboardListener(
|
||||||
new KeyListener({
|
new KeyListener({
|
||||||
value: 'KeyS',
|
value: 'KeyS',
|
||||||
@ -217,6 +228,13 @@ export async function loadDrawDatas(): Promise<IGraphicStorage> {
|
|||||||
) {
|
) {
|
||||||
canvasProperty = fasOfPlatformAlarm.canvas;
|
canvasProperty = fasOfPlatformAlarm.canvas;
|
||||||
datas = loadCommonDrawDatas(fasOfPlatformAlarm);
|
datas = loadCommonDrawDatas(fasOfPlatformAlarm);
|
||||||
|
fasOfPlatformAlarm.fasFailureControlHosts.forEach(
|
||||||
|
(fasFailureControlHost) => {
|
||||||
|
datas.push(
|
||||||
|
new FasFailureControlHostData(fasFailureControlHost)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -298,6 +316,14 @@ export function saveDrawDatas(app: IDrawApp) {
|
|||||||
app,
|
app,
|
||||||
fasOfPlatformAlarm
|
fasOfPlatformAlarm
|
||||||
) as iscsGraphicData.FASOfPlatformAlarmStorage;
|
) as iscsGraphicData.FASOfPlatformAlarmStorage;
|
||||||
|
graphics.forEach((g) => {
|
||||||
|
if (g instanceof FasFailureControlHost) {
|
||||||
|
const fasFailureControlHostData = g.saveData();
|
||||||
|
fasStorage.fasFailureControlHosts.push(
|
||||||
|
(fasFailureControlHostData as FasFailureControlHostData).data
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
storage.fasOfPlatformAlarmStorages[i] = fasStorage;
|
storage.fasOfPlatformAlarmStorages[i] = fasStorage;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,131 @@
|
|||||||
|
import { DisplayObject, FederatedMouseEvent, Point } from 'pixi.js';
|
||||||
|
import {
|
||||||
|
AbsorbableLine,
|
||||||
|
AbsorbablePosition,
|
||||||
|
GraphicDrawAssistant,
|
||||||
|
GraphicInteractionPlugin,
|
||||||
|
GraphicTransformEvent,
|
||||||
|
IDrawApp,
|
||||||
|
JlGraphic,
|
||||||
|
} from 'jl-graphic';
|
||||||
|
import {
|
||||||
|
IFasFailureControlHostData,
|
||||||
|
FasFailureControlHost,
|
||||||
|
FasFailureControlHostTemplate,
|
||||||
|
} from './FasFailureControlHost';
|
||||||
|
|
||||||
|
export class FasFailureControlHostDraw extends GraphicDrawAssistant<
|
||||||
|
FasFailureControlHostTemplate,
|
||||||
|
IFasFailureControlHostData
|
||||||
|
> {
|
||||||
|
_fasFailureControlHost: FasFailureControlHost | null = null;
|
||||||
|
constructor(app: IDrawApp, template: FasFailureControlHostTemplate) {
|
||||||
|
super(
|
||||||
|
app,
|
||||||
|
template,
|
||||||
|
'svguse:../drawIcon.svg#icon-fas-failure-control-host',
|
||||||
|
'火灾故障控制主机'
|
||||||
|
);
|
||||||
|
FasFailureControlHostInteraction.init(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
bind(): void {
|
||||||
|
super.bind();
|
||||||
|
if (!this._fasFailureControlHost) {
|
||||||
|
this._fasFailureControlHost = this.graphicTemplate.new();
|
||||||
|
this.container.addChild(this._fasFailureControlHost);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public get fasFailureControlHost(): FasFailureControlHost {
|
||||||
|
if (!this._fasFailureControlHost) {
|
||||||
|
this._fasFailureControlHost = this.graphicTemplate.new();
|
||||||
|
this.container.addChild(this._fasFailureControlHost);
|
||||||
|
}
|
||||||
|
return this._fasFailureControlHost;
|
||||||
|
}
|
||||||
|
|
||||||
|
redraw(cp: Point): void {
|
||||||
|
this.fasFailureControlHost.position.copyFrom(cp);
|
||||||
|
}
|
||||||
|
onLeftUp(e: FederatedMouseEvent): void {
|
||||||
|
this.fasFailureControlHost.position.copyFrom(
|
||||||
|
this.toCanvasCoordinates(e.global)
|
||||||
|
);
|
||||||
|
this.createAndStore(true);
|
||||||
|
}
|
||||||
|
prepareData(data: IFasFailureControlHostData): boolean {
|
||||||
|
data.transform = this.fasFailureControlHost.saveTransform();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
onEsc(): void {
|
||||||
|
this.finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建吸附线
|
||||||
|
* @param fasFailureControlHost
|
||||||
|
*/
|
||||||
|
function buildAbsorbablePositions(
|
||||||
|
fasFailureControlHost: FasFailureControlHost
|
||||||
|
): AbsorbablePosition[] {
|
||||||
|
const aps: AbsorbablePosition[] = [];
|
||||||
|
const fasFailureControlHosts =
|
||||||
|
fasFailureControlHost.queryStore.queryByType<FasFailureControlHost>(
|
||||||
|
FasFailureControlHost.Type
|
||||||
|
);
|
||||||
|
const canvas = fasFailureControlHost.getCanvas();
|
||||||
|
fasFailureControlHosts.forEach((item) => {
|
||||||
|
if (item.id === fasFailureControlHost.id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const ala = new AbsorbableLine(
|
||||||
|
new Point(item.x, 0),
|
||||||
|
new Point(item.x, canvas.height)
|
||||||
|
);
|
||||||
|
const alb = new AbsorbableLine(
|
||||||
|
new Point(0, item.y),
|
||||||
|
new Point(canvas.width, item.y)
|
||||||
|
);
|
||||||
|
aps.push(ala);
|
||||||
|
aps.push(alb);
|
||||||
|
});
|
||||||
|
|
||||||
|
return aps;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class FasFailureControlHostInteraction extends GraphicInteractionPlugin<FasFailureControlHost> {
|
||||||
|
static Name = 'fas_failure_control_host_transform';
|
||||||
|
constructor(app: IDrawApp) {
|
||||||
|
super(FasFailureControlHostInteraction.Name, app);
|
||||||
|
}
|
||||||
|
static init(app: IDrawApp) {
|
||||||
|
return new FasFailureControlHostInteraction(app);
|
||||||
|
}
|
||||||
|
filter(...grahpics: JlGraphic[]): FasFailureControlHost[] | undefined {
|
||||||
|
return grahpics
|
||||||
|
.filter((g) => g.type === FasFailureControlHost.Type)
|
||||||
|
.map((g) => g as FasFailureControlHost);
|
||||||
|
}
|
||||||
|
bind(g: FasFailureControlHost): void {
|
||||||
|
g.eventMode = 'static';
|
||||||
|
g.cursor = 'pointer';
|
||||||
|
g.scalable = true;
|
||||||
|
g.rotatable = true;
|
||||||
|
g.on('transformstart', this.transformstart, this);
|
||||||
|
}
|
||||||
|
unbind(g: FasFailureControlHost): void {
|
||||||
|
g.eventMode = 'none';
|
||||||
|
g.scalable = false;
|
||||||
|
g.rotatable = false;
|
||||||
|
g.off('transformstart', this.transformstart, this);
|
||||||
|
}
|
||||||
|
transformstart(e: GraphicTransformEvent) {
|
||||||
|
const target = e.target as DisplayObject;
|
||||||
|
const fasFailureControlHost = target.getGraphic() as FasFailureControlHost;
|
||||||
|
fasFailureControlHost.getGraphicApp().setOptions({
|
||||||
|
absorbablePositions: buildAbsorbablePositions(fasFailureControlHost),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"frames": {
|
||||||
|
"normal.png": {
|
||||||
|
"frame": { "x": 0, "y": 0, "w": 32, "h": 53 },
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"spriteSourceSize": { "x": 0, "y": 0, "w": 32, "h": 53 },
|
||||||
|
"sourceSize": { "w": 32, "h": 53 },
|
||||||
|
"anchor": { "x": 0.5, "y": 0.5 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "1.1",
|
||||||
|
"image": "FasFailureControlHost.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": { "w": 32, "h": 53 },
|
||||||
|
"scale": "1",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:e7620bd2d73cc0b3e2deea9704e7eefc:f129a1d9e4b9ba57720b3861c22b155b:eb2d421f7759984b7713aa4aa5354134$"
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
@ -0,0 +1,70 @@
|
|||||||
|
import { GraphicData, JlGraphic, JlGraphicTemplate } from 'jl-graphic';
|
||||||
|
import { Assets, Sprite, Spritesheet, Texture } from 'pixi.js';
|
||||||
|
// import { iscsGraphicData } from 'src/protos/iscs_graphic_data';
|
||||||
|
import FasFailureControlHostJson from './FasFailureControlHost.json';
|
||||||
|
import FasFailureControlHostAssets from './FasFailureControlHost.png';
|
||||||
|
|
||||||
|
export interface IFasFailureControlHostData extends GraphicData {
|
||||||
|
get code(): string;
|
||||||
|
set code(v: string);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface FasFailureControlHostTextures {
|
||||||
|
normal: Texture;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class FasFailureControlHost extends JlGraphic {
|
||||||
|
static Type = 'FasFailureControlHost';
|
||||||
|
_fasFailureControlHost: Sprite;
|
||||||
|
fasFailureControlHostTextures: FasFailureControlHostTextures;
|
||||||
|
__state = 0;
|
||||||
|
|
||||||
|
constructor(fasFailureControlHostTextures: FasFailureControlHostTextures) {
|
||||||
|
super(FasFailureControlHost.Type);
|
||||||
|
this._fasFailureControlHost = new Sprite();
|
||||||
|
this.fasFailureControlHostTextures = fasFailureControlHostTextures;
|
||||||
|
this._fasFailureControlHost.anchor.set(0.5);
|
||||||
|
this.addChild(this._fasFailureControlHost);
|
||||||
|
this._fasFailureControlHost.texture =
|
||||||
|
this.fasFailureControlHostTextures.normal;
|
||||||
|
}
|
||||||
|
get code(): string {
|
||||||
|
return this.datas.code;
|
||||||
|
}
|
||||||
|
get datas(): IFasFailureControlHostData {
|
||||||
|
return this.getDatas<IFasFailureControlHostData>();
|
||||||
|
}
|
||||||
|
|
||||||
|
doRepaint(): void {
|
||||||
|
// this._fasFailureControlHost.texture =
|
||||||
|
// this.fasFailureControlHostTextures.normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class FasFailureControlHostTemplate extends JlGraphicTemplate<FasFailureControlHost> {
|
||||||
|
fasFailureControlHostTextures?: FasFailureControlHostTextures;
|
||||||
|
constructor(dataTemplate: IFasFailureControlHostData) {
|
||||||
|
super(FasFailureControlHost.Type, { dataTemplate });
|
||||||
|
this.loadAssets();
|
||||||
|
}
|
||||||
|
new(): FasFailureControlHost {
|
||||||
|
if (this.fasFailureControlHostTextures) {
|
||||||
|
const g = new FasFailureControlHost(this.fasFailureControlHostTextures);
|
||||||
|
g.loadData(this.datas);
|
||||||
|
return g;
|
||||||
|
}
|
||||||
|
throw new Error('资源未加载/加载失败');
|
||||||
|
}
|
||||||
|
async loadAssets(): Promise<FasFailureControlHostTextures> {
|
||||||
|
const texture = await Assets.load(FasFailureControlHostAssets);
|
||||||
|
const fasFailureControlHostSheet = new Spritesheet(
|
||||||
|
texture,
|
||||||
|
FasFailureControlHostJson
|
||||||
|
);
|
||||||
|
const result = await fasFailureControlHostSheet.parse();
|
||||||
|
this.fasFailureControlHostTextures = {
|
||||||
|
normal: result['normal.png'],
|
||||||
|
};
|
||||||
|
return this.fasFailureControlHostTextures as FasFailureControlHostTextures;
|
||||||
|
}
|
||||||
|
}
|
@ -306,6 +306,7 @@ import { Circle } from 'src/graphics/circle/Circle';
|
|||||||
import IscsBottomAlarm from 'src/components/Iscs/IscsBottomAlarm.vue';
|
import IscsBottomAlarm from 'src/components/Iscs/IscsBottomAlarm.vue';
|
||||||
import CCTVMonitoring from 'src/components/Iscs/CCTVMonitoring.vue';
|
import CCTVMonitoring from 'src/components/Iscs/CCTVMonitoring.vue';
|
||||||
import FASPlaneGraph from 'src/components/Iscs/FASPlaneGraph.vue';
|
import FASPlaneGraph from 'src/components/Iscs/FASPlaneGraph.vue';
|
||||||
|
import { FasFailureControlHost } from 'src/graphics/FAS/fireFailureControlHost/FasFailureControlHost';
|
||||||
|
|
||||||
const $q = useQuasar();
|
const $q = useQuasar();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
@ -389,6 +390,9 @@ function handleUtilsOption() {
|
|||||||
case '监控布局图':
|
case '监控布局图':
|
||||||
//drawAssistantsTypes.push(CCTVButton.Type);
|
//drawAssistantsTypes.push(CCTVButton.Type);
|
||||||
break;
|
break;
|
||||||
|
case '火灾报警平面图':
|
||||||
|
drawAssistantsTypes.push(FasFailureControlHost.Type);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
drawAssistantsTypes.forEach((type) => {
|
drawAssistantsTypes.forEach((type) => {
|
||||||
const drawAssistant = drawStore.getDrawApp().getDrawAssistant(type);
|
const drawAssistant = drawStore.getDrawApp().getDrawAssistant(type);
|
||||||
@ -567,19 +571,16 @@ const showComponent = reactive({
|
|||||||
});
|
});
|
||||||
|
|
||||||
function onHeaderResize(size: { height: number; width: number }) {
|
function onHeaderResize(size: { height: number; width: number }) {
|
||||||
console.log(size, '11111');
|
|
||||||
headerHeight.value = size.height;
|
headerHeight.value = size.height;
|
||||||
onResize();
|
onResize();
|
||||||
}
|
}
|
||||||
|
|
||||||
function onFooterResize(size: { height: number; width: number }) {
|
function onFooterResize(size: { height: number; width: number }) {
|
||||||
console.log(size, '----');
|
|
||||||
footerHeight.value = size.height;
|
footerHeight.value = size.height;
|
||||||
onResize();
|
onResize();
|
||||||
}
|
}
|
||||||
|
|
||||||
function onRightResize(size: { height: number; width: number }) {
|
function onRightResize(size: { height: number; width: number }) {
|
||||||
console.log(size, '===');
|
|
||||||
rightWidth.value = size.width;
|
rightWidth.value = size.width;
|
||||||
onResize();
|
onResize();
|
||||||
}
|
}
|
||||||
@ -684,6 +685,11 @@ const subMenuOption = ref<
|
|||||||
>([]);
|
>([]);
|
||||||
function selectedSubMenu(subName: string) {
|
function selectedSubMenu(subName: string) {
|
||||||
drawStore.selectSubmenuAndStation.submenu = subName;
|
drawStore.selectSubmenuAndStation.submenu = subName;
|
||||||
|
if (drawStore.selectSubmenuAndStation.submenu === '火灾报警平面图') {
|
||||||
|
drawStore.selectSubmenuAndStation.partition = '设备分区一';
|
||||||
|
} else {
|
||||||
|
drawStore.selectSubmenuAndStation.partition = '';
|
||||||
|
}
|
||||||
subMenuDisplayForm.value = subMenuOption.value.find(
|
subMenuDisplayForm.value = subMenuOption.value.find(
|
||||||
(subMenu) => subMenu.value == subName
|
(subMenu) => subMenu.value == subName
|
||||||
).displayForm;
|
).displayForm;
|
||||||
|
Loading…
Reference in New Issue
Block a user