完成模式功能
This commit is contained in:
parent
470724fb57
commit
3c028a87b9
|
@ -1,3 +1,4 @@
|
||||||
|
import { ModeEntity } from "src/entities/ModeEntity";
|
||||||
import NormalWindowRequestEntity from "src/entities/NormalWindowRequestEntity";
|
import NormalWindowRequestEntity from "src/entities/NormalWindowRequestEntity";
|
||||||
import { SignalSourceEntity } from "src/entities/SignalSourceEntity";
|
import { SignalSourceEntity } from "src/entities/SignalSourceEntity";
|
||||||
import { Protocol } from "src/entities/WSProtocol";
|
import { Protocol } from "src/entities/WSProtocol";
|
||||||
|
@ -251,6 +252,80 @@ export default class ClientConnection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async getModes() {
|
||||||
|
try {
|
||||||
|
return await this.doRpc<Protocol.GetModesResponseEntity>(
|
||||||
|
new Protocol.GetModesRequestEntity()
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async addModeGroup(group_uuid: string, name: string) {
|
||||||
|
try {
|
||||||
|
return await this.doRpc<Protocol.AddModeGroupResponseEntity>(
|
||||||
|
new Protocol.AddModeGroupRequestEntity(0, group_uuid, name)
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async editModeGroup(uuid: string, name: string) {
|
||||||
|
try {
|
||||||
|
return await this.doRpc<Protocol.EditModeGroupResponseEntity>(
|
||||||
|
new Protocol.EditModeGroupRequestEntity(0, uuid, name)
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async deleteModeGroup(uuid: string) {
|
||||||
|
try {
|
||||||
|
return await this.doRpc<Protocol.DeleteModeGroupResponseEntity>(
|
||||||
|
new Protocol.DeleteModeGroupRequestEntity(0, uuid)
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async addMode(group_uuid?: string, name?: string) {
|
||||||
|
try {
|
||||||
|
return await this.doRpc<Protocol.AddModeResponseEntity>(
|
||||||
|
new Protocol.AddModeRequestEntity(0, name, group_uuid)
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async editMode(uuid?: string, name?: string) {
|
||||||
|
try {
|
||||||
|
return await this.doRpc<Protocol.EditModeResponseEntity>(
|
||||||
|
new Protocol.EditModeRequestEntity(0, name, uuid)
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async deleteMode(uuid: string) {
|
||||||
|
try {
|
||||||
|
return await this.doRpc<Protocol.DeleteModeResponseEntity>(
|
||||||
|
new Protocol.DeleteModeRequestEntity(0, uuid)
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public callMode(uuid: string) {
|
||||||
|
this.ws?.send(JSON.stringify(new Protocol.CallModeRequestEntity(uuid)));
|
||||||
|
}
|
||||||
|
|
||||||
public async getApplicationSettins() {
|
public async getApplicationSettins() {
|
||||||
try {
|
try {
|
||||||
return await this.doRpc<Protocol.GetApplicationConfigResponseEntity>(
|
return await this.doRpc<Protocol.GetApplicationConfigResponseEntity>(
|
||||||
|
@ -308,8 +383,8 @@ export default class ClientConnection {
|
||||||
|
|
||||||
public async addSignalSourceGroup(parent_uuid: string, name: string) {
|
public async addSignalSourceGroup(parent_uuid: string, name: string) {
|
||||||
try {
|
try {
|
||||||
return await this.doRpc<Protocol.AddSignalSourcesGroupResponseEntity>(
|
return await this.doRpc<Protocol.AddSignalSourceGroupResponseEntity>(
|
||||||
new Protocol.AddSignalSourcesGroupRequestEntity(0, parent_uuid, name)
|
new Protocol.AddSignalSourceGroupRequestEntity(0, parent_uuid, name)
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
@ -318,8 +393,8 @@ export default class ClientConnection {
|
||||||
|
|
||||||
public async editSignalSourceGroup(uuid: string, name: string) {
|
public async editSignalSourceGroup(uuid: string, name: string) {
|
||||||
try {
|
try {
|
||||||
return await this.doRpc<Protocol.EditSignalSourcesGroupResponseEntity>(
|
return await this.doRpc<Protocol.EditSignalSourceGroupResponseEntity>(
|
||||||
new Protocol.EditSignalSourcesGroupRequestEntity(0, uuid, name)
|
new Protocol.EditSignalSourceGroupRequestEntity(0, uuid, name)
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
@ -328,8 +403,8 @@ export default class ClientConnection {
|
||||||
|
|
||||||
public async deleteSignalSourceGroup(uuid: string) {
|
public async deleteSignalSourceGroup(uuid: string) {
|
||||||
try {
|
try {
|
||||||
return await this.doRpc<Protocol.DeleteSignalSourcesGroupResponseEntity>(
|
return await this.doRpc<Protocol.DeleteSignalSourceGroupResponseEntity>(
|
||||||
new Protocol.DeleteSignalSourcesGroupRequestEntity(0, uuid)
|
new Protocol.DeleteSignalSourceGroupRequestEntity(0, uuid)
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
@ -338,8 +413,8 @@ export default class ClientConnection {
|
||||||
|
|
||||||
public async addSignalSource(item: SignalSourceEntity) {
|
public async addSignalSource(item: SignalSourceEntity) {
|
||||||
try {
|
try {
|
||||||
return await this.doRpc<Protocol.AddSignalSourcesResponseEntity>(
|
return await this.doRpc<Protocol.AddSignalSourceResponseEntity>(
|
||||||
new Protocol.AddSignalSourcesRequestEntity(0, item)
|
new Protocol.AddSignalSourceRequestEntity(0, item)
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
@ -348,8 +423,8 @@ export default class ClientConnection {
|
||||||
|
|
||||||
public async editSignalSource(item: SignalSourceEntity) {
|
public async editSignalSource(item: SignalSourceEntity) {
|
||||||
try {
|
try {
|
||||||
return await this.doRpc<Protocol.EditSignalSourcesResponseEntity>(
|
return await this.doRpc<Protocol.EditSignalSourceResponseEntity>(
|
||||||
new Protocol.EditSignalSourcesRequestEntity(0, item)
|
new Protocol.EditSignalSourceRequestEntity(0, item)
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
@ -358,8 +433,8 @@ export default class ClientConnection {
|
||||||
|
|
||||||
public async deleteSignalSource(uuid: string) {
|
public async deleteSignalSource(uuid: string) {
|
||||||
try {
|
try {
|
||||||
return await this.doRpc<Protocol.DeleteSignalSourcesResponseEntity>(
|
return await this.doRpc<Protocol.DeleteSignalSourceResponseEntity>(
|
||||||
new Protocol.DeleteSignalSourcesRequestEntity(0, uuid)
|
new Protocol.DeleteSignalSourceRequestEntity(0, uuid)
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { SessionStorage } from "quasar";
|
import { SessionStorage } from "quasar";
|
||||||
import ApplicationConfigEntity from "src/entities/ApplicationConfigEntity";
|
import ApplicationConfigEntity from "src/entities/ApplicationConfigEntity";
|
||||||
import { HttpProtocol } from "src/entities/HttpProtocol";
|
import { HttpProtocol } from "src/entities/HttpProtocol";
|
||||||
|
import { ModeEntity } from "src/entities/ModeEntity";
|
||||||
import { SignalSourceEntity } from "src/entities/SignalSourceEntity";
|
import { SignalSourceEntity } from "src/entities/SignalSourceEntity";
|
||||||
import ClientConnection from "./ClientConnection";
|
import ClientConnection from "./ClientConnection";
|
||||||
import EventBus, { EventNamesDefine } from "./EventBus";
|
import EventBus, { EventNamesDefine } from "./EventBus";
|
||||||
|
@ -54,6 +55,16 @@ export default class GlobalData {
|
||||||
this._signal_sources = sources;
|
this._signal_sources = sources;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_modes: ModeEntity[] = [];
|
||||||
|
|
||||||
|
public get modes() {
|
||||||
|
return this._modes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set modes(modes: ModeEntity[]) {
|
||||||
|
this._modes = modes;
|
||||||
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
const url: string | null = SessionStorage.getItem("url");
|
const url: string | null = SessionStorage.getItem("url");
|
||||||
let name: string | null = SessionStorage.getItem("name");
|
let name: string | null = SessionStorage.getItem("name");
|
||||||
|
|
|
@ -595,7 +595,7 @@ export default defineComponent({
|
||||||
resetData() {
|
resetData() {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
files.value = [];
|
files.value = [];
|
||||||
path.value = "";
|
path.value = default_path.value;
|
||||||
status.value = "normal";
|
status.value = "normal";
|
||||||
upload_url.value = "";
|
upload_url.value = "";
|
||||||
if (resolve) {
|
if (resolve) {
|
||||||
|
|
|
@ -0,0 +1,265 @@
|
||||||
|
<template>
|
||||||
|
<q-dialog persistent v-model="show_dialog" @before-hide="resetData">
|
||||||
|
<q-card class="overflow-hidden" style="overflow-y: scroll; max-width: 45vw">
|
||||||
|
<q-form @submit="onSubmit">
|
||||||
|
<q-card-section class="q-ma-none q-pa-sm">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-auto text-h6">
|
||||||
|
{{
|
||||||
|
type == 1
|
||||||
|
? $t("add mode")
|
||||||
|
: type == 2
|
||||||
|
? $t("edit mode")
|
||||||
|
: type == 3
|
||||||
|
? $t("delete mode")
|
||||||
|
: "add"
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
<q-space />
|
||||||
|
<div>
|
||||||
|
<q-btn
|
||||||
|
:loading="loading"
|
||||||
|
flat
|
||||||
|
round
|
||||||
|
icon="close"
|
||||||
|
color="red"
|
||||||
|
v-close-popup
|
||||||
|
>
|
||||||
|
<q-tooltip>
|
||||||
|
{{ $t("close") }}
|
||||||
|
</q-tooltip>
|
||||||
|
</q-btn>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</q-card-section>
|
||||||
|
|
||||||
|
<q-separator />
|
||||||
|
|
||||||
|
<q-card-section style="max-height: 50vh; width: 45vw" class="scroll">
|
||||||
|
<q-list>
|
||||||
|
<q-item>
|
||||||
|
<q-item-label>{{ $t("parent group") }}:</q-item-label>
|
||||||
|
</q-item>
|
||||||
|
<q-item class="q-pa-none q-ma-none">
|
||||||
|
<q-item-section style="padding-right: 10px">
|
||||||
|
<q-tree
|
||||||
|
ref="tree"
|
||||||
|
class="scroll"
|
||||||
|
:class="loading ? 'disable_tree' : ''"
|
||||||
|
v-model:selected="selected"
|
||||||
|
:nodes="tree_nodes"
|
||||||
|
default-expand-all
|
||||||
|
node-key="uuid"
|
||||||
|
labelKey="name"
|
||||||
|
filter="group filter"
|
||||||
|
:filter-method="treeNodesFilter"
|
||||||
|
>
|
||||||
|
<template v-slot:default-header="prop">
|
||||||
|
<q-item
|
||||||
|
class="full-width"
|
||||||
|
:class="
|
||||||
|
prop.tree.selected == prop.key ? 'item-selected-bg' : ''
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-item-section avatar>
|
||||||
|
<q-icon
|
||||||
|
:name="'img:source_icon/group.png'"
|
||||||
|
color="orange"
|
||||||
|
size="28px"
|
||||||
|
class="q-mr-sm"
|
||||||
|
/>
|
||||||
|
</q-item-section>
|
||||||
|
<q-item-section>
|
||||||
|
<div class="text-weight-bold text-primary">
|
||||||
|
{{ prop.node.name }}
|
||||||
|
</div>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
</template>
|
||||||
|
</q-tree>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
<q-item>
|
||||||
|
<q-item-section>
|
||||||
|
<q-input
|
||||||
|
autofocus
|
||||||
|
:loading="loading"
|
||||||
|
:disable="loading"
|
||||||
|
filled
|
||||||
|
v-model="name"
|
||||||
|
:label="$t('mode name')"
|
||||||
|
:hint="$t('please input mode name')"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[
|
||||||
|
(val) =>
|
||||||
|
(val && val.length > 0) || $t('Please type something'),
|
||||||
|
]"
|
||||||
|
@keydown="
|
||||||
|
(evt) => {
|
||||||
|
if (evt.keyCode == 13) {
|
||||||
|
$refs?.accept?.click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<template v-if="name" v-slot:append>
|
||||||
|
<q-icon
|
||||||
|
name="cancel"
|
||||||
|
@click.stop="name = null"
|
||||||
|
class="cursor-pointer"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
</q-list>
|
||||||
|
</q-card-section>
|
||||||
|
|
||||||
|
<q-separator />
|
||||||
|
|
||||||
|
<q-card-actions align="right">
|
||||||
|
<q-btn
|
||||||
|
:loading="loading"
|
||||||
|
flat
|
||||||
|
:label="$t('Cancel')"
|
||||||
|
color="primary"
|
||||||
|
v-close-popup
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
ref="accept"
|
||||||
|
flat
|
||||||
|
:label="$t('Accept')"
|
||||||
|
:loading="loading"
|
||||||
|
type="submit"
|
||||||
|
color="primary"
|
||||||
|
/>
|
||||||
|
</q-card-actions>
|
||||||
|
</q-form>
|
||||||
|
</q-card>
|
||||||
|
</q-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.disable_tree {
|
||||||
|
background: #9e9e9e;
|
||||||
|
cursor: wait;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, ref, watch, computed } from "vue";
|
||||||
|
import { useStore } from "src/store";
|
||||||
|
import GlobalData from "src/common/GlobalData";
|
||||||
|
import { useQuasar } from "quasar";
|
||||||
|
import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: "ComponentModeDialog",
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
let $store = useStore();
|
||||||
|
let $q = useQuasar();
|
||||||
|
let $t = useI18n();
|
||||||
|
|
||||||
|
let show_dialog = ref(false);
|
||||||
|
let type = ref(1);
|
||||||
|
let name = ref(null);
|
||||||
|
let uuid = ref("");
|
||||||
|
const selected: any = ref(null);
|
||||||
|
let loading = ref(false);
|
||||||
|
|
||||||
|
const tree_nodes = computed({
|
||||||
|
get: () => $store.state.mode_tree,
|
||||||
|
set: (val) => {},
|
||||||
|
});
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => selected.value,
|
||||||
|
(newValue, oldValue) => {
|
||||||
|
if (newValue == null) {
|
||||||
|
selected.value = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const requestAddMode = async () => {
|
||||||
|
let response = await GlobalData.getInstance()
|
||||||
|
.getCurrentClient()
|
||||||
|
?.addMode(selected.value, name.value ?? "");
|
||||||
|
if (response) {
|
||||||
|
$q.notify({
|
||||||
|
color: response.success ? "positive" : "negative",
|
||||||
|
icon: response.success ? "done" : "warning",
|
||||||
|
message:
|
||||||
|
$t.t("add mode") +
|
||||||
|
(response.success ? $t.t("success") : $t.t("fail")) +
|
||||||
|
"!",
|
||||||
|
position: "top",
|
||||||
|
timeout: 1000,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const requestEditMode = async () => {
|
||||||
|
let response = await GlobalData.getInstance()
|
||||||
|
.getCurrentClient()
|
||||||
|
?.editMode(uuid.value, name.value ?? "");
|
||||||
|
if (response) {
|
||||||
|
$q.notify({
|
||||||
|
color: response.success ? "positive" : "negative",
|
||||||
|
icon: response.success ? "done" : "warning",
|
||||||
|
message:
|
||||||
|
$t.t("edit mode") +
|
||||||
|
(response.success ? $t.t("success") : $t.t("fail")) +
|
||||||
|
"!",
|
||||||
|
position: "top",
|
||||||
|
timeout: 1000,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
show_dialog,
|
||||||
|
type,
|
||||||
|
name,
|
||||||
|
uuid,
|
||||||
|
selected,
|
||||||
|
loading,
|
||||||
|
tree_nodes,
|
||||||
|
showDialog(options: any) {
|
||||||
|
if (options) {
|
||||||
|
console.log(options);
|
||||||
|
type.value = options.type ?? 1;
|
||||||
|
if (type.value == 2) {
|
||||||
|
name.value = options.data?.name ?? null;
|
||||||
|
selected.value = options.data?.item_data?.group_uuid ?? null;
|
||||||
|
uuid.value = options.data?.item_data?.uuid ?? null;
|
||||||
|
} else {
|
||||||
|
selected.value = options.data?.uuid ?? null;
|
||||||
|
uuid.value = options.data?.uuid ?? null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
show_dialog.value = true;
|
||||||
|
},
|
||||||
|
resetData() {
|
||||||
|
loading.value = false;
|
||||||
|
(selected.value = null), (name.value = null);
|
||||||
|
type.value = 1;
|
||||||
|
},
|
||||||
|
treeNodesFilter(node: any, filter: any) {
|
||||||
|
return node.is_group;
|
||||||
|
},
|
||||||
|
|
||||||
|
async onSubmit() {
|
||||||
|
loading.value = true;
|
||||||
|
try {
|
||||||
|
await (type.value == 2 ? requestEditMode() : requestAddMode());
|
||||||
|
show_dialog.value = false;
|
||||||
|
} catch {}
|
||||||
|
loading.value = false;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,263 @@
|
||||||
|
<template>
|
||||||
|
<q-dialog persistent v-model="show_dialog" @before-hide="resetData">
|
||||||
|
<q-card class="overflow-hidden" style="overflow-y: scroll; max-width: 45vw">
|
||||||
|
<q-form @submit="onSubmit">
|
||||||
|
<q-card-section class="q-ma-none q-pa-sm">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-auto text-h6">
|
||||||
|
{{
|
||||||
|
type == 1
|
||||||
|
? $t("add group")
|
||||||
|
: type == 2
|
||||||
|
? $t("edit group")
|
||||||
|
: type == 3
|
||||||
|
? $t("delete group")
|
||||||
|
: "add"
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
<q-space />
|
||||||
|
<div>
|
||||||
|
<q-btn
|
||||||
|
:loading="loading"
|
||||||
|
flat
|
||||||
|
round
|
||||||
|
icon="close"
|
||||||
|
color="red"
|
||||||
|
v-close-popup
|
||||||
|
>
|
||||||
|
<q-tooltip>
|
||||||
|
{{ $t("close") }}
|
||||||
|
</q-tooltip>
|
||||||
|
</q-btn>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</q-card-section>
|
||||||
|
|
||||||
|
<q-separator />
|
||||||
|
|
||||||
|
<q-card-section style="max-height: 50vh; width: 45vw" class="scroll">
|
||||||
|
<q-list>
|
||||||
|
<q-item v-if="type != 2">
|
||||||
|
<q-item-label>{{ $t("parent group") }}:</q-item-label>
|
||||||
|
</q-item>
|
||||||
|
<q-item v-if="type != 2" class="q-pa-none q-ma-none">
|
||||||
|
<q-item-section style="padding-right: 10px">
|
||||||
|
<q-tree
|
||||||
|
ref="tree"
|
||||||
|
class="scroll"
|
||||||
|
:class="loading ? 'disable_tree' : ''"
|
||||||
|
v-model:selected="selected"
|
||||||
|
:nodes="tree_nodes"
|
||||||
|
default-expand-all
|
||||||
|
node-key="uuid"
|
||||||
|
labelKey="name"
|
||||||
|
filter="group filter"
|
||||||
|
:filter-method="treeNodesFilter"
|
||||||
|
>
|
||||||
|
<template v-slot:default-header="prop">
|
||||||
|
<q-item
|
||||||
|
class="full-width"
|
||||||
|
:class="
|
||||||
|
prop.tree.selected == prop.key ? 'item-selected-bg' : ''
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-item-section avatar>
|
||||||
|
<q-icon
|
||||||
|
:name="'img:source_icon/group.png'"
|
||||||
|
color="orange"
|
||||||
|
size="28px"
|
||||||
|
class="q-mr-sm"
|
||||||
|
/>
|
||||||
|
</q-item-section>
|
||||||
|
<q-item-section>
|
||||||
|
<div class="text-weight-bold text-primary">
|
||||||
|
{{ prop.node.name }}
|
||||||
|
</div>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
</template>
|
||||||
|
</q-tree>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
<q-item>
|
||||||
|
<q-item-section>
|
||||||
|
<q-input
|
||||||
|
autofocus
|
||||||
|
:loading="loading"
|
||||||
|
:disable="loading"
|
||||||
|
filled
|
||||||
|
v-model="name"
|
||||||
|
:label="$t('group name')"
|
||||||
|
:hint="$t('please input group name')"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[
|
||||||
|
(val) =>
|
||||||
|
(val && val.length > 0) || $t('Please type something'),
|
||||||
|
]"
|
||||||
|
@keydown="
|
||||||
|
(evt) => {
|
||||||
|
if (evt.keyCode == 13) {
|
||||||
|
$refs?.accept?.click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<template v-if="name" v-slot:append>
|
||||||
|
<q-icon
|
||||||
|
name="cancel"
|
||||||
|
@click.stop="name = null"
|
||||||
|
class="cursor-pointer"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
</q-list>
|
||||||
|
</q-card-section>
|
||||||
|
|
||||||
|
<q-separator />
|
||||||
|
|
||||||
|
<q-card-actions align="right">
|
||||||
|
<q-btn
|
||||||
|
:loading="loading"
|
||||||
|
flat
|
||||||
|
:label="$t('Cancel')"
|
||||||
|
color="primary"
|
||||||
|
v-close-popup
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
ref="accept"
|
||||||
|
flat
|
||||||
|
:label="$t('Accept')"
|
||||||
|
:loading="loading"
|
||||||
|
type="submit"
|
||||||
|
color="primary"
|
||||||
|
/>
|
||||||
|
</q-card-actions>
|
||||||
|
</q-form>
|
||||||
|
</q-card>
|
||||||
|
</q-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.disable_tree {
|
||||||
|
background: #9e9e9e;
|
||||||
|
cursor: wait;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, ref, watch, computed } from "vue";
|
||||||
|
import { useStore } from "src/store";
|
||||||
|
import GlobalData from "src/common/GlobalData";
|
||||||
|
import { useQuasar } from "quasar";
|
||||||
|
import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: "ComponentModeGroupDialog",
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
let $store = useStore();
|
||||||
|
let $q = useQuasar();
|
||||||
|
let $t = useI18n();
|
||||||
|
|
||||||
|
let show_dialog = ref(false);
|
||||||
|
let type = ref(1);
|
||||||
|
let name = ref(null);
|
||||||
|
let uuid = ref("");
|
||||||
|
const selected: any = ref(null);
|
||||||
|
let loading = ref(false);
|
||||||
|
|
||||||
|
const tree_nodes = computed({
|
||||||
|
get: () => $store.state.mode_tree,
|
||||||
|
set: (val) => {},
|
||||||
|
});
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => selected.value,
|
||||||
|
(newValue, oldValue) => {
|
||||||
|
if (newValue == null) {
|
||||||
|
selected.value = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const requestAddModeGroup = async () => {
|
||||||
|
let response = await GlobalData.getInstance()
|
||||||
|
.getCurrentClient()
|
||||||
|
?.addModeGroup(selected.value, name.value ?? "");
|
||||||
|
if (response) {
|
||||||
|
$q.notify({
|
||||||
|
color: response.success ? "positive" : "negative",
|
||||||
|
icon: response.success ? "done" : "warning",
|
||||||
|
message:
|
||||||
|
$t.t("add group") +
|
||||||
|
(response.success ? $t.t("success") : $t.t("fail")) +
|
||||||
|
"!",
|
||||||
|
position: "top",
|
||||||
|
timeout: 1000,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const requestEditModeGroup = async () => {
|
||||||
|
let response = await GlobalData.getInstance()
|
||||||
|
.getCurrentClient()
|
||||||
|
?.editModeGroup(uuid.value, name.value ?? "");
|
||||||
|
if (response) {
|
||||||
|
$q.notify({
|
||||||
|
color: response.success ? "positive" : "negative",
|
||||||
|
icon: response.success ? "done" : "warning",
|
||||||
|
message:
|
||||||
|
$t.t("edit group") +
|
||||||
|
(response.success ? $t.t("success") : $t.t("fail")) +
|
||||||
|
"!",
|
||||||
|
position: "top",
|
||||||
|
timeout: 1000,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
show_dialog,
|
||||||
|
type,
|
||||||
|
name,
|
||||||
|
uuid,
|
||||||
|
selected,
|
||||||
|
loading,
|
||||||
|
tree_nodes,
|
||||||
|
showDialog(options: any) {
|
||||||
|
if (options) {
|
||||||
|
type.value = options.type ?? 1;
|
||||||
|
if (type.value == 2) {
|
||||||
|
name.value = options.data?.name ?? null;
|
||||||
|
}
|
||||||
|
selected.value = options.data?.uuid ?? null;
|
||||||
|
uuid.value = options.data?.uuid ?? null;
|
||||||
|
}
|
||||||
|
show_dialog.value = true;
|
||||||
|
},
|
||||||
|
resetData() {
|
||||||
|
loading.value = false;
|
||||||
|
(selected.value = null), (name.value = null);
|
||||||
|
type.value = 1;
|
||||||
|
},
|
||||||
|
treeNodesFilter(node: any, filter: any) {
|
||||||
|
return node.is_group;
|
||||||
|
},
|
||||||
|
|
||||||
|
async onSubmit() {
|
||||||
|
loading.value = true;
|
||||||
|
try {
|
||||||
|
await (type.value == 2
|
||||||
|
? requestEditModeGroup()
|
||||||
|
: requestAddModeGroup());
|
||||||
|
show_dialog.value = false;
|
||||||
|
} catch {}
|
||||||
|
loading.value = false;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,297 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<q-tree ref="tree" :nodes="tree_nodes" node-key="uuid" labelKey="name">
|
||||||
|
<template v-slot:default-header="prop">
|
||||||
|
<q-item
|
||||||
|
class="full-width"
|
||||||
|
clickable
|
||||||
|
@dblclick="
|
||||||
|
(evt) => !prop.node.is_group && callMode(prop.node.item_data)
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-item-section avatar>
|
||||||
|
<q-icon
|
||||||
|
:name="
|
||||||
|
prop.node.is_group
|
||||||
|
? 'img:source_icon/group.png'
|
||||||
|
: 'img:source_icon/hdmi.png'
|
||||||
|
"
|
||||||
|
color="orange"
|
||||||
|
size="28px"
|
||||||
|
class="q-mr-sm"
|
||||||
|
/>
|
||||||
|
</q-item-section>
|
||||||
|
<q-item-section>
|
||||||
|
<div class="text-weight-bold text-primary">
|
||||||
|
{{ prop.node.name }}
|
||||||
|
</div>
|
||||||
|
</q-item-section>
|
||||||
|
<q-popup-proxy context-menu>
|
||||||
|
<q-popup-proxy context-menu />
|
||||||
|
<q-list>
|
||||||
|
<q-item
|
||||||
|
v-if="
|
||||||
|
prop.node.name == $t('root') ||
|
||||||
|
(prop.node.is_group && prop.node.item_data)
|
||||||
|
"
|
||||||
|
clickable
|
||||||
|
v-close-popup
|
||||||
|
v-ripple
|
||||||
|
@click="
|
||||||
|
$refs.mode_dialog.showDialog({
|
||||||
|
type: 1,
|
||||||
|
data: { uuid: prop.node.uuid },
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-item-section avatar><q-icon name="add" /></q-item-section>
|
||||||
|
<q-item-section>{{ $t("add mode item") }}</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
<q-item
|
||||||
|
clickable
|
||||||
|
v-close-popup
|
||||||
|
v-if="
|
||||||
|
prop.node.name == $t('root') ||
|
||||||
|
(prop.node.is_group && prop.node.item_data)
|
||||||
|
"
|
||||||
|
v-ripple
|
||||||
|
@click="
|
||||||
|
() =>
|
||||||
|
$refs.group_dialog.showDialog({
|
||||||
|
type: 1,
|
||||||
|
data: prop.node,
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-item-section avatar
|
||||||
|
><q-icon name="create_new_folder"
|
||||||
|
/></q-item-section>
|
||||||
|
<q-item-section>{{ $t("add group") }}</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
<q-item
|
||||||
|
clickable
|
||||||
|
v-ripple
|
||||||
|
v-close-popup
|
||||||
|
v-if="prop.node.item_data"
|
||||||
|
@click="
|
||||||
|
() =>
|
||||||
|
(prop.node.is_group
|
||||||
|
? $refs.group_dialog
|
||||||
|
: $refs.mode_dialog
|
||||||
|
).showDialog({
|
||||||
|
type: 2,
|
||||||
|
data: prop.node,
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-item-section avatar><q-icon name="edit" /></q-item-section>
|
||||||
|
<q-item-section>{{ $t("edit") }}</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
|
||||||
|
<q-item
|
||||||
|
clickable
|
||||||
|
v-ripple
|
||||||
|
v-close-popup
|
||||||
|
v-if="prop.node.item_data"
|
||||||
|
@click="
|
||||||
|
(evt) => deleteItem(evt, prop.node.is_group, prop.node.uuid)
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-item-section avatar
|
||||||
|
><q-icon color="red" name="delete"
|
||||||
|
/></q-item-section>
|
||||||
|
<q-item-section>{{ $t("delete") }} </q-item-section>
|
||||||
|
</q-item>
|
||||||
|
</q-list>
|
||||||
|
</q-popup-proxy>
|
||||||
|
</q-item>
|
||||||
|
</template>
|
||||||
|
</q-tree>
|
||||||
|
</div>
|
||||||
|
<mode-group-dialog ref="group_dialog" />
|
||||||
|
<mode-dialog ref="mode_dialog" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, computed, onMounted, ref, nextTick } from "vue";
|
||||||
|
import { useStore } from "src/store";
|
||||||
|
import ModeGroupDialog from "src/components/ModeGroupDialog.vue";
|
||||||
|
import ModeDialog from "src/components/ModeDialog.vue";
|
||||||
|
import { Common } from "src/common/Common";
|
||||||
|
import GlobalData from "src/common/GlobalData";
|
||||||
|
import { useQuasar } from "quasar";
|
||||||
|
import { useI18n } from "vue-i18n";
|
||||||
|
import EventBus, { EventNamesDefine } from "src/common/EventBus";
|
||||||
|
import { Protocol } from "src/entities/WSProtocol";
|
||||||
|
import { ModeEntity } from "src/entities/ModeEntity";
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: "PageModeTree",
|
||||||
|
|
||||||
|
components: { ModeGroupDialog, ModeDialog },
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
const $store = useStore();
|
||||||
|
const $q = useQuasar();
|
||||||
|
const $t = useI18n();
|
||||||
|
|
||||||
|
const tree_nodes = computed({
|
||||||
|
get: () => $store.state.mode_tree,
|
||||||
|
set: (val) => {},
|
||||||
|
});
|
||||||
|
|
||||||
|
const tree: any | null = ref(null);
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
while (!tree.value.nodes.length) {
|
||||||
|
await Common.waitFor(100);
|
||||||
|
}
|
||||||
|
tree.value?.setExpanded("", true);
|
||||||
|
});
|
||||||
|
|
||||||
|
interface _ResponseMessage {
|
||||||
|
packet: Protocol.PacketEntity;
|
||||||
|
data: string;
|
||||||
|
}
|
||||||
|
EventBus.getInstance().on(
|
||||||
|
EventNamesDefine.NotifyMessage,
|
||||||
|
(response: _ResponseMessage) => {
|
||||||
|
if (response) {
|
||||||
|
switch (response.packet.command) {
|
||||||
|
case Protocol.Commands.kRpcAddMode:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.ModeAddNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
GlobalData.getInstance().modes.push(temp.mode);
|
||||||
|
$store.commit("addModeTreeItem", {
|
||||||
|
parent: temp.mode.group_uuid,
|
||||||
|
is_group: false,
|
||||||
|
item_data: temp.mode,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Protocol.Commands.kRpcDeleteMode:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.ModeDeleteNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
$store.commit("deleteModeTreeItem", {
|
||||||
|
is_group: false,
|
||||||
|
uuid: temp.uuid,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Protocol.Commands.kRpcEditMode:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.ModeEditNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
$store.commit("setModeTreeItem", {
|
||||||
|
is_group: false,
|
||||||
|
item_data: temp.mode,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Protocol.Commands.kRpcAddModeGroup:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.ModeGroupAddNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
$store.commit("addModeTreeItem", {
|
||||||
|
parent: temp.mode_group.parent_uuid,
|
||||||
|
is_group: true,
|
||||||
|
item_data: temp.mode_group,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Protocol.Commands.kRpcDeleteModeGroup:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.ModeGroupDeleteNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
$store.commit("deleteModeTreeItem", {
|
||||||
|
is_group: true,
|
||||||
|
uuid: temp.uuid,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Protocol.Commands.kRpcEditModeGroup:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.ModeGroupEditNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
$store.commit("setModeTreeItem", {
|
||||||
|
is_group: true,
|
||||||
|
item_data: temp.mode_group,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
tree,
|
||||||
|
tree_nodes,
|
||||||
|
loga(a: any) {
|
||||||
|
console.log(a);
|
||||||
|
},
|
||||||
|
async deleteItem(
|
||||||
|
evt: PointerEvent | null,
|
||||||
|
is_group: boolean,
|
||||||
|
uuid: string
|
||||||
|
) {
|
||||||
|
let success = false;
|
||||||
|
if (is_group) {
|
||||||
|
let response = await GlobalData.getInstance()
|
||||||
|
.getCurrentClient()
|
||||||
|
?.deleteModeGroup(uuid);
|
||||||
|
if (response) {
|
||||||
|
success = response.success;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let response = await GlobalData.getInstance()
|
||||||
|
.getCurrentClient()
|
||||||
|
?.deleteMode(uuid);
|
||||||
|
if (response) {
|
||||||
|
success = response.success;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$q.notify({
|
||||||
|
color: success ? "positive" : "negative",
|
||||||
|
icon: success ? "done" : "warning",
|
||||||
|
message:
|
||||||
|
$t.t("delete") + (success ? $t.t("success") : $t.t("fail")) + "!",
|
||||||
|
position: "top",
|
||||||
|
timeout: 1000,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
callMode(item: ModeEntity) {
|
||||||
|
GlobalData.getInstance().getCurrentClient()?.callMode(item.uuid);
|
||||||
|
$q.notify({
|
||||||
|
color: "positive",
|
||||||
|
icon: "done",
|
||||||
|
message: $t.t("call mode directives send") + $t.t("success") + "!",
|
||||||
|
position: "top",
|
||||||
|
timeout: 1000,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -155,7 +155,7 @@ import { useQuasar } from "quasar";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "ComponentGroupDialog",
|
name: "ComponentSignalSourceGroupDialog",
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
let $store = useStore();
|
let $store = useStore();
|
|
@ -0,0 +1,308 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<q-tree ref="tree" :nodes="tree_nodes" node-key="uuid" labelKey="name">
|
||||||
|
<template v-slot:default-header="prop">
|
||||||
|
<q-item
|
||||||
|
class="full-width"
|
||||||
|
clickable
|
||||||
|
:draggable="!prop.node.is_group"
|
||||||
|
@dragstart="(evt) => onDragStart(evt, prop.node)"
|
||||||
|
>
|
||||||
|
<q-item-section avatar>
|
||||||
|
<q-icon
|
||||||
|
:name="
|
||||||
|
prop.node.is_group
|
||||||
|
? 'img:source_icon/group.png'
|
||||||
|
: getItemIcon(prop.node.item_data?.window_type)
|
||||||
|
"
|
||||||
|
color="orange"
|
||||||
|
size="28px"
|
||||||
|
class="q-mr-sm"
|
||||||
|
/>
|
||||||
|
</q-item-section>
|
||||||
|
<q-item-section>
|
||||||
|
<div class="text-weight-bold text-primary">
|
||||||
|
{{ prop.node.name }}
|
||||||
|
</div>
|
||||||
|
</q-item-section>
|
||||||
|
<q-popup-proxy context-menu>
|
||||||
|
<q-popup-proxy context-menu />
|
||||||
|
<q-list>
|
||||||
|
<q-item
|
||||||
|
v-if="
|
||||||
|
prop.node.name == $t('root') ||
|
||||||
|
(prop.node.is_group &&
|
||||||
|
prop.node.item_data &&
|
||||||
|
!prop.node.item_data.system_default)
|
||||||
|
"
|
||||||
|
clickable
|
||||||
|
v-close-popup
|
||||||
|
v-ripple
|
||||||
|
@click="
|
||||||
|
$refs.signal_source_dialog.showDialog({
|
||||||
|
type: 1,
|
||||||
|
parent_node: prop.node.uuid,
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-item-section avatar><q-icon name="add" /></q-item-section>
|
||||||
|
<q-item-section>{{
|
||||||
|
$t("add signal source item")
|
||||||
|
}}</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
<q-item
|
||||||
|
clickable
|
||||||
|
v-close-popup
|
||||||
|
v-if="
|
||||||
|
prop.node.name == $t('root') ||
|
||||||
|
(prop.node.is_group &&
|
||||||
|
prop.node.item_data &&
|
||||||
|
!prop.node.item_data.system_default)
|
||||||
|
"
|
||||||
|
v-ripple
|
||||||
|
@click="
|
||||||
|
() =>
|
||||||
|
$refs.group_dialog.showDialog({
|
||||||
|
type: 1,
|
||||||
|
data: prop.node,
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-item-section avatar
|
||||||
|
><q-icon name="create_new_folder"
|
||||||
|
/></q-item-section>
|
||||||
|
<q-item-section>{{ $t("add group") }}</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
<q-item
|
||||||
|
clickable
|
||||||
|
v-ripple
|
||||||
|
v-close-popup
|
||||||
|
v-if="
|
||||||
|
prop.node.item_data && !prop.node.item_data.system_default
|
||||||
|
"
|
||||||
|
@click="
|
||||||
|
() =>
|
||||||
|
(prop.node.is_group
|
||||||
|
? $refs.group_dialog
|
||||||
|
: $refs.signal_source_dialog
|
||||||
|
).showDialog({
|
||||||
|
type: 2,
|
||||||
|
data: prop.node,
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-item-section avatar><q-icon name="edit" /></q-item-section>
|
||||||
|
<q-item-section>{{ $t("edit") }}</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
|
||||||
|
<q-item
|
||||||
|
clickable
|
||||||
|
v-ripple
|
||||||
|
v-close-popup
|
||||||
|
v-if="
|
||||||
|
prop.node.item_data && !prop.node.item_data.system_default
|
||||||
|
"
|
||||||
|
@click="
|
||||||
|
(evt) => deleteItem(evt, prop.node.is_group, prop.node.uuid)
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-item-section avatar
|
||||||
|
><q-icon color="red" name="delete"
|
||||||
|
/></q-item-section>
|
||||||
|
<q-item-section>{{ $t("delete") }} </q-item-section>
|
||||||
|
</q-item>
|
||||||
|
</q-list>
|
||||||
|
</q-popup-proxy>
|
||||||
|
</q-item>
|
||||||
|
</template>
|
||||||
|
</q-tree>
|
||||||
|
</div>
|
||||||
|
<signal-source-group-dialog ref="group_dialog" />
|
||||||
|
<signal-source-dialog ref="signal_source_dialog" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, computed, onMounted, ref, nextTick } from "vue";
|
||||||
|
import { useStore } from "src/store";
|
||||||
|
import { SignalSourceTreeItemEntity } from "src/entities/SignalSourceEntity";
|
||||||
|
import SignalSourceGroupDialog from "src/components/SignalSourceGroupDialog.vue";
|
||||||
|
import SignalSourceDialog from "src/components/SignalSourceDialog.vue";
|
||||||
|
import { Common } from "src/common/Common";
|
||||||
|
import GlobalData from "src/common/GlobalData";
|
||||||
|
import { useQuasar } from "quasar";
|
||||||
|
import { useI18n } from "vue-i18n";
|
||||||
|
import EventBus, { EventNamesDefine } from "src/common/EventBus";
|
||||||
|
import { Protocol } from "src/entities/WSProtocol";
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: "PageSignalSourceTree",
|
||||||
|
|
||||||
|
components: { SignalSourceGroupDialog, SignalSourceDialog },
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
const $store = useStore();
|
||||||
|
const $q = useQuasar();
|
||||||
|
const $t = useI18n();
|
||||||
|
|
||||||
|
const tree_nodes = computed({
|
||||||
|
get: () => $store.state.signal_source_tree,
|
||||||
|
set: (val) => $store.commit("setSignalSourceTree", val),
|
||||||
|
});
|
||||||
|
|
||||||
|
const tree: any | null = ref(null);
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
while (!tree.value.nodes.length) {
|
||||||
|
await Common.waitFor(100);
|
||||||
|
}
|
||||||
|
tree.value?.setExpanded("", true);
|
||||||
|
});
|
||||||
|
|
||||||
|
interface _ResponseMessage {
|
||||||
|
packet: Protocol.PacketEntity;
|
||||||
|
data: string;
|
||||||
|
}
|
||||||
|
EventBus.getInstance().on(
|
||||||
|
EventNamesDefine.NotifyMessage,
|
||||||
|
(response: _ResponseMessage) => {
|
||||||
|
if (response) {
|
||||||
|
switch (response.packet.command) {
|
||||||
|
case Protocol.Commands.kRpcAddSignalSource:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.SignalSourceAddNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
GlobalData.getInstance().signal_source.push(
|
||||||
|
temp.signal_source
|
||||||
|
);
|
||||||
|
$store.commit("addSignalSourceTreeItem", {
|
||||||
|
parent: temp.signal_source.group_uuid,
|
||||||
|
is_group: false,
|
||||||
|
item_data: temp.signal_source,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Protocol.Commands.kRpcDeleteSignalSource:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.SignalSourceDeleteNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
$store.commit("deleteSignalSourceTreeItem", {
|
||||||
|
is_group: false,
|
||||||
|
uuid: temp.uuid,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Protocol.Commands.kRpcEditSignalSource:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.SignalSourceEditNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
$store.commit("setSignalSourceTreeItem", {
|
||||||
|
is_group: false,
|
||||||
|
item_data: temp.signal_source,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Protocol.Commands.kRpcAddSignalSourceGroup:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.SignalSourceGroupAddNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
$store.commit("addSignalSourceTreeItem", {
|
||||||
|
parent: temp.signal_source_group.parent_uuid,
|
||||||
|
is_group: true,
|
||||||
|
item_data: temp.signal_source_group,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Protocol.Commands.kRpcDeleteSignalSourceGroup:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.SignalSourceGroupDeleteNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
$store.commit("deleteSignalSourceTreeItem", {
|
||||||
|
is_group: true,
|
||||||
|
uuid: temp.uuid,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Protocol.Commands.kRpcEditSignalSourceGroup:
|
||||||
|
{
|
||||||
|
const temp = JSON.parse(
|
||||||
|
response.data
|
||||||
|
) as Protocol.SignalSourceGroupEditNotifyEntity;
|
||||||
|
if (temp) {
|
||||||
|
$store.commit("setSignalSourceTreeItem", {
|
||||||
|
is_group: true,
|
||||||
|
item_data: temp.signal_source_group,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
tree,
|
||||||
|
tree_nodes,
|
||||||
|
loga(a: any) {
|
||||||
|
console.log(a);
|
||||||
|
},
|
||||||
|
onDragStart(e: DragEvent, node: SignalSourceTreeItemEntity) {
|
||||||
|
e.dataTransfer?.setData("uuid", node.uuid);
|
||||||
|
e.dataTransfer?.setData("node_object", JSON.stringify(node));
|
||||||
|
if (e.dataTransfer) {
|
||||||
|
e.dataTransfer.dropEffect = "move";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getItemIcon(item_type: string) {
|
||||||
|
return Common.getSignalSourceIcon(item_type);
|
||||||
|
},
|
||||||
|
async deleteItem(
|
||||||
|
evt: PointerEvent | null,
|
||||||
|
is_group: boolean,
|
||||||
|
uuid: string
|
||||||
|
) {
|
||||||
|
let success = false;
|
||||||
|
if (is_group) {
|
||||||
|
let response = await GlobalData.getInstance()
|
||||||
|
.getCurrentClient()
|
||||||
|
?.deleteSignalSourceGroup(uuid);
|
||||||
|
if (response) {
|
||||||
|
success = response.success;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let response = await GlobalData.getInstance()
|
||||||
|
.getCurrentClient()
|
||||||
|
?.deleteSignalSource(uuid);
|
||||||
|
if (response) {
|
||||||
|
success = response.success;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$q.notify({
|
||||||
|
color: success ? "positive" : "negative",
|
||||||
|
icon: success ? "done" : "warning",
|
||||||
|
message:
|
||||||
|
$t.t("delete") + (success ? $t.t("success") : $t.t("fail")) + "!",
|
||||||
|
position: "top",
|
||||||
|
timeout: 1000,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,42 @@
|
||||||
|
import BaseEntity from "./BaseEntity";
|
||||||
|
|
||||||
|
export class ModeEntity extends BaseEntity {
|
||||||
|
group_uuid: string = "";
|
||||||
|
name: string = "";
|
||||||
|
|
||||||
|
public static copy(dest: ModeEntity, src?: ModeEntity) {
|
||||||
|
if (!src) {
|
||||||
|
src = new ModeEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
dest.uuid = src.uuid;
|
||||||
|
dest.base_note = src.base_note;
|
||||||
|
dest.name = src.name;
|
||||||
|
dest.group_uuid = src.group_uuid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ModeTreeItemEntity {
|
||||||
|
uuid = "";
|
||||||
|
parent = "";
|
||||||
|
name = "";
|
||||||
|
is_group = false;
|
||||||
|
children: ModeTreeItemEntity[] = [];
|
||||||
|
item_data: ModeEntity | null = null;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
uuid?: string,
|
||||||
|
parent?: string,
|
||||||
|
name?: string,
|
||||||
|
is_group?: boolean,
|
||||||
|
item_data?: any,
|
||||||
|
children?: ModeTreeItemEntity[]
|
||||||
|
) {
|
||||||
|
this.uuid = uuid ?? "";
|
||||||
|
this.parent = parent ?? "";
|
||||||
|
this.name = name ?? "";
|
||||||
|
this.is_group = is_group ?? false;
|
||||||
|
this.children = children ?? (Array.isArray(children) ? children : []);
|
||||||
|
this.item_data = item_data;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
import { SignalSourceEntity } from "./SignalSourceEntity";
|
import { SignalSourceEntity } from "./SignalSourceEntity";
|
||||||
import ApplicationConfigEntity from "./ApplicationConfigEntity";
|
import ApplicationConfigEntity from "./ApplicationConfigEntity";
|
||||||
import { WindowOpenNotifyEntity } from "./MultimediaWindowEntity";
|
import { WindowOpenNotifyEntity } from "./MultimediaWindowEntity";
|
||||||
|
import { ModeEntity } from "./ModeEntity";
|
||||||
|
|
||||||
export namespace Protocol {
|
export namespace Protocol {
|
||||||
export class Commands {
|
export class Commands {
|
||||||
|
@ -37,6 +38,10 @@ export namespace Protocol {
|
||||||
return Commands.PROTOCOL_PREFIX + "RpcGetSignalSources";
|
return Commands.PROTOCOL_PREFIX + "RpcGetSignalSources";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static get kRpcGetModes() {
|
||||||
|
return Commands.PROTOCOL_PREFIX + "RpcGetModes";
|
||||||
|
}
|
||||||
|
|
||||||
public static get kRpcGetApplicationConfig() {
|
public static get kRpcGetApplicationConfig() {
|
||||||
return Commands.PROTOCOL_PREFIX + "RpcGetApplicationConfig";
|
return Commands.PROTOCOL_PREFIX + "RpcGetApplicationConfig";
|
||||||
}
|
}
|
||||||
|
@ -89,6 +94,34 @@ export namespace Protocol {
|
||||||
return Commands.PROTOCOL_PREFIX + "RpcEditSignalSource";
|
return Commands.PROTOCOL_PREFIX + "RpcEditSignalSource";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static get kRpcAddModeGroup() {
|
||||||
|
return Commands.PROTOCOL_PREFIX + "RpcAddModeGroup";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get kRpcDeleteModeGroup() {
|
||||||
|
return Commands.PROTOCOL_PREFIX + "RpcDeleteModeGroup";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get kRpcEditModeGroup() {
|
||||||
|
return Commands.PROTOCOL_PREFIX + "RpcEditModeGroup";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get kRpcAddMode() {
|
||||||
|
return Commands.PROTOCOL_PREFIX + "RpcAddMode";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get kRpcDeleteMode() {
|
||||||
|
return Commands.PROTOCOL_PREFIX + "RpcDeleteMode";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get kCallMode() {
|
||||||
|
return Commands.PROTOCOL_PREFIX + "CallMode";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get kRpcEditMode() {
|
||||||
|
return Commands.PROTOCOL_PREFIX + "RpcEditMode";
|
||||||
|
}
|
||||||
|
|
||||||
public static get kSetApplicationConfig() {
|
public static get kSetApplicationConfig() {
|
||||||
return Commands.PROTOCOL_PREFIX + "SetApplicationConfig";
|
return Commands.PROTOCOL_PREFIX + "SetApplicationConfig";
|
||||||
}
|
}
|
||||||
|
@ -107,6 +140,7 @@ export namespace Protocol {
|
||||||
Commands.kLogout,
|
Commands.kLogout,
|
||||||
Commands.kRpcGetWindows,
|
Commands.kRpcGetWindows,
|
||||||
Commands.kRpcGetSignalSources,
|
Commands.kRpcGetSignalSources,
|
||||||
|
Commands.kRpcGetModes,
|
||||||
Commands.kRpcGetApplicationConfig,
|
Commands.kRpcGetApplicationConfig,
|
||||||
Commands.kMoveWindow,
|
Commands.kMoveWindow,
|
||||||
Commands.kResizeWindow,
|
Commands.kResizeWindow,
|
||||||
|
@ -119,6 +153,12 @@ export namespace Protocol {
|
||||||
Commands.kRpcAddSignalSource,
|
Commands.kRpcAddSignalSource,
|
||||||
Commands.kRpcDeleteSignalSource,
|
Commands.kRpcDeleteSignalSource,
|
||||||
Commands.kRpcEditSignalSource,
|
Commands.kRpcEditSignalSource,
|
||||||
|
Commands.kRpcAddModeGroup,
|
||||||
|
Commands.kRpcDeleteModeGroup,
|
||||||
|
Commands.kRpcEditModeGroup,
|
||||||
|
Commands.kRpcAddMode,
|
||||||
|
Commands.kRpcDeleteMode,
|
||||||
|
Commands.kRpcEditMode,
|
||||||
Commands.kSetApplicationConfig,
|
Commands.kSetApplicationConfig,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
@ -190,6 +230,26 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class GetModesRequestEntity extends PacketEntity {
|
||||||
|
timestamp = new Date().getMilliseconds();
|
||||||
|
|
||||||
|
constructor(rpcid?: number) {
|
||||||
|
super();
|
||||||
|
this.rpc_id = rpcid ?? 0;
|
||||||
|
this.command = Commands.kRpcGetModes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class GetModesResponseEntity extends PacketEntity {
|
||||||
|
modes: ModeEntity[] = [];
|
||||||
|
mode_groups: [] = [];
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.command = Commands.kRpcGetModes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class GetApplicationConfigRequestEntity extends PacketEntity {
|
export class GetApplicationConfigRequestEntity extends PacketEntity {
|
||||||
timestamp: number = new Date().getMilliseconds();
|
timestamp: number = new Date().getMilliseconds();
|
||||||
|
|
||||||
|
@ -329,7 +389,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class AddSignalSourcesGroupRequestEntity extends Protocol.PacketEntity {
|
export class AddSignalSourceGroupRequestEntity extends Protocol.PacketEntity {
|
||||||
parent_uuid = "";
|
parent_uuid = "";
|
||||||
name = "";
|
name = "";
|
||||||
|
|
||||||
|
@ -342,7 +402,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class AddSignalSourcesGroupResponseEntity extends Protocol.PacketEntity {
|
export class AddSignalSourceGroupResponseEntity extends Protocol.PacketEntity {
|
||||||
success = false;
|
success = false;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -351,7 +411,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class EditSignalSourcesGroupRequestEntity extends Protocol.PacketEntity {
|
export class EditSignalSourceGroupRequestEntity extends Protocol.PacketEntity {
|
||||||
uuid = "";
|
uuid = "";
|
||||||
name = "";
|
name = "";
|
||||||
|
|
||||||
|
@ -364,7 +424,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class EditSignalSourcesGroupResponseEntity extends Protocol.PacketEntity {
|
export class EditSignalSourceGroupResponseEntity extends Protocol.PacketEntity {
|
||||||
success = false;
|
success = false;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -373,7 +433,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DeleteSignalSourcesGroupRequestEntity extends Protocol.PacketEntity {
|
export class DeleteSignalSourceGroupRequestEntity extends Protocol.PacketEntity {
|
||||||
uuid = "";
|
uuid = "";
|
||||||
|
|
||||||
constructor(rcp_id?: number, uuid?: string) {
|
constructor(rcp_id?: number, uuid?: string) {
|
||||||
|
@ -384,7 +444,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DeleteSignalSourcesGroupResponseEntity extends Protocol.PacketEntity {
|
export class DeleteSignalSourceGroupResponseEntity extends Protocol.PacketEntity {
|
||||||
success = false;
|
success = false;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -393,7 +453,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class AddSignalSourcesRequestEntity extends Protocol.PacketEntity {
|
export class AddSignalSourceRequestEntity extends Protocol.PacketEntity {
|
||||||
entity: SignalSourceEntity | null = null;
|
entity: SignalSourceEntity | null = null;
|
||||||
constructor(rcp_id?: number, entity?: SignalSourceEntity) {
|
constructor(rcp_id?: number, entity?: SignalSourceEntity) {
|
||||||
super();
|
super();
|
||||||
|
@ -403,7 +463,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class AddSignalSourcesResponseEntity extends Protocol.PacketEntity {
|
export class AddSignalSourceResponseEntity extends Protocol.PacketEntity {
|
||||||
success = false;
|
success = false;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -412,7 +472,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class EditSignalSourcesRequestEntity extends Protocol.PacketEntity {
|
export class EditSignalSourceRequestEntity extends Protocol.PacketEntity {
|
||||||
entity: SignalSourceEntity | null = null;
|
entity: SignalSourceEntity | null = null;
|
||||||
parent_uuid: string = "";
|
parent_uuid: string = "";
|
||||||
constructor(
|
constructor(
|
||||||
|
@ -428,7 +488,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class EditSignalSourcesResponseEntity extends Protocol.PacketEntity {
|
export class EditSignalSourceResponseEntity extends Protocol.PacketEntity {
|
||||||
success = false;
|
success = false;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -437,7 +497,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DeleteSignalSourcesRequestEntity extends Protocol.PacketEntity {
|
export class DeleteSignalSourceRequestEntity extends Protocol.PacketEntity {
|
||||||
uuid: string = "";
|
uuid: string = "";
|
||||||
constructor(rcp_id?: number, uuid?: string) {
|
constructor(rcp_id?: number, uuid?: string) {
|
||||||
super();
|
super();
|
||||||
|
@ -447,7 +507,7 @@ export namespace Protocol {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DeleteSignalSourcesResponseEntity extends Protocol.PacketEntity {
|
export class DeleteSignalSourceResponseEntity extends Protocol.PacketEntity {
|
||||||
success = false;
|
success = false;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -455,7 +515,6 @@ export namespace Protocol {
|
||||||
this.command = Protocol.Commands.kRpcDeleteSignalSource;
|
this.command = Protocol.Commands.kRpcDeleteSignalSource;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SignalSourceGroupEntity extends Protocol.PacketEntity {
|
export class SignalSourceGroupEntity extends Protocol.PacketEntity {
|
||||||
parent_uuid: string = "";
|
parent_uuid: string = "";
|
||||||
name: string = "";
|
name: string = "";
|
||||||
|
@ -488,6 +547,171 @@ export namespace Protocol {
|
||||||
new SignalSourceGroupEntity();
|
new SignalSourceGroupEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class AddModeGroupRequestEntity extends Protocol.PacketEntity {
|
||||||
|
parent_uuid = "";
|
||||||
|
name = "";
|
||||||
|
|
||||||
|
constructor(rcp_id?: number, parent_uuid?: string, name?: string) {
|
||||||
|
super();
|
||||||
|
this.rpc_id = rcp_id ?? 0;
|
||||||
|
this.command = Protocol.Commands.kRpcAddModeGroup;
|
||||||
|
this.parent_uuid = parent_uuid ?? "";
|
||||||
|
this.name = name ?? "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class AddModeGroupResponseEntity extends Protocol.PacketEntity {
|
||||||
|
success = false;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.command = Protocol.Commands.kRpcAddModeGroup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class EditModeGroupRequestEntity extends Protocol.PacketEntity {
|
||||||
|
uuid = "";
|
||||||
|
name = "";
|
||||||
|
|
||||||
|
constructor(rcp_id?: number, uuid?: string, name?: string) {
|
||||||
|
super();
|
||||||
|
this.rpc_id = rcp_id ?? 0;
|
||||||
|
this.command = Protocol.Commands.kRpcEditModeGroup;
|
||||||
|
this.uuid = uuid ?? "";
|
||||||
|
this.name = name ?? "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class EditModeGroupResponseEntity extends Protocol.PacketEntity {
|
||||||
|
success = false;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.command = Protocol.Commands.kRpcEditModeGroup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DeleteModeGroupRequestEntity extends Protocol.PacketEntity {
|
||||||
|
uuid = "";
|
||||||
|
|
||||||
|
constructor(rcp_id?: number, uuid?: string) {
|
||||||
|
super();
|
||||||
|
this.rpc_id = rcp_id ?? 0;
|
||||||
|
this.command = Protocol.Commands.kRpcDeleteModeGroup;
|
||||||
|
this.uuid = uuid ?? "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DeleteModeGroupResponseEntity extends Protocol.PacketEntity {
|
||||||
|
success = false;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.command = Protocol.Commands.kRpcDeleteMode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class AddModeRequestEntity extends Protocol.PacketEntity {
|
||||||
|
name: string;
|
||||||
|
group_uuid: string;
|
||||||
|
constructor(rcp_id?: number, name?: string, group_uuid?: string) {
|
||||||
|
super();
|
||||||
|
this.rpc_id = rcp_id ?? 0;
|
||||||
|
this.command = Protocol.Commands.kRpcAddMode;
|
||||||
|
this.name = name ?? "";
|
||||||
|
this.group_uuid = group_uuid ?? "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class AddModeResponseEntity extends Protocol.PacketEntity {
|
||||||
|
success = false;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.command = Protocol.Commands.kRpcAddMode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class EditModeRequestEntity extends Protocol.PacketEntity {
|
||||||
|
name: string;
|
||||||
|
uuid: string;
|
||||||
|
constructor(rcp_id?: number, name?: string, uuid?: string) {
|
||||||
|
super();
|
||||||
|
this.rpc_id = rcp_id ?? 0;
|
||||||
|
this.command = Protocol.Commands.kRpcEditMode;
|
||||||
|
this.name = name ?? "";
|
||||||
|
this.uuid = uuid ?? "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class EditModeResponseEntity extends Protocol.PacketEntity {
|
||||||
|
success = false;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.command = Protocol.Commands.kRpcEditMode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DeleteModeRequestEntity extends Protocol.PacketEntity {
|
||||||
|
uuid: string = "";
|
||||||
|
constructor(rcp_id?: number, uuid?: string) {
|
||||||
|
super();
|
||||||
|
this.rpc_id = rcp_id ?? 0;
|
||||||
|
this.command = Protocol.Commands.kRpcDeleteMode;
|
||||||
|
this.uuid = uuid ?? "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DeleteModeResponseEntity extends Protocol.PacketEntity {
|
||||||
|
success = false;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.command = Protocol.Commands.kRpcDeleteMode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class CallModeRequestEntity extends Protocol.PacketEntity {
|
||||||
|
uuid: string;
|
||||||
|
|
||||||
|
constructor(uuid: string) {
|
||||||
|
super();
|
||||||
|
this.command = Protocol.Commands.kCallMode;
|
||||||
|
this.flag = Protocol.PacketEntity.FLAG_REQUEST;
|
||||||
|
this.uuid = uuid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ModeGroupEntity extends Protocol.PacketEntity {
|
||||||
|
parent_uuid: string = "";
|
||||||
|
name: string = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ModeAddNotifyEntity extends Protocol.PacketEntity {
|
||||||
|
mode: ModeEntity = new ModeEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ModeDeleteNotifyEntity extends Protocol.PacketEntity {
|
||||||
|
uuid: string = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ModeEditNotifyEntity extends Protocol.PacketEntity {
|
||||||
|
mode: ModeEntity = new ModeEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ModeGroupAddNotifyEntity extends Protocol.PacketEntity {
|
||||||
|
mode_group: ModeGroupEntity = new ModeGroupEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ModeGroupDeleteNotifyEntity extends Protocol.PacketEntity {
|
||||||
|
uuid: string = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ModeGroupEditNotifyEntity extends Protocol.PacketEntity {
|
||||||
|
mode_group: ModeGroupEntity = new ModeGroupEntity();
|
||||||
|
}
|
||||||
|
|
||||||
export class SetApplicationConfigRequestEntity extends Protocol.PacketEntity {
|
export class SetApplicationConfigRequestEntity extends Protocol.PacketEntity {
|
||||||
key: string = "";
|
key: string = "";
|
||||||
value: string = "";
|
value: string = "";
|
||||||
|
|
|
@ -117,4 +117,15 @@ export default {
|
||||||
"dbclick select file": "双击选择文件",
|
"dbclick select file": "双击选择文件",
|
||||||
"local disk": "本地磁盘",
|
"local disk": "本地磁盘",
|
||||||
usb: "U盘",
|
usb: "U盘",
|
||||||
|
"Please input vaild ip address": "请输入合法的IP地址",
|
||||||
|
"server ip address": "服务器地址",
|
||||||
|
"please input server ip address": "请输入服务器地址",
|
||||||
|
mode: "模式",
|
||||||
|
plan: "预案",
|
||||||
|
"add mode item": "添加模式",
|
||||||
|
"all mode directives send": "模式调用发送",
|
||||||
|
"please input mode name": "请输入模式名称",
|
||||||
|
"add mode": "添加模式",
|
||||||
|
"mode name": "模式名称",
|
||||||
|
"edit mode": "修改模式",
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,9 +23,13 @@
|
||||||
<router-view />
|
<router-view />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- left -->
|
<!-- right -->
|
||||||
<div v-if="landspace" class="col-2" style="border: 1px solid #bdbdbd">
|
<div
|
||||||
<left-tool-bar />
|
v-if="landspace"
|
||||||
|
class="col-auto overflow-auto"
|
||||||
|
style="border: 1px solid #bdbdbd"
|
||||||
|
>
|
||||||
|
<right-tool-bar />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</q-page-container>
|
</q-page-container>
|
||||||
|
@ -74,6 +78,7 @@
|
||||||
import { defineComponent, reactive } from "vue";
|
import { defineComponent, reactive } from "vue";
|
||||||
|
|
||||||
import LeftToolBar from "src/pages/LeftToolBar.vue";
|
import LeftToolBar from "src/pages/LeftToolBar.vue";
|
||||||
|
import RightToolBar from "src/pages/RightToolBar.vue";
|
||||||
import TopToolBar from "src/pages/TopToolBar.vue";
|
import TopToolBar from "src/pages/TopToolBar.vue";
|
||||||
import EventBus, { EventNamesDefine } from "src/common/EventBus";
|
import EventBus, { EventNamesDefine } from "src/common/EventBus";
|
||||||
|
|
||||||
|
@ -85,7 +90,7 @@ class _Data {
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "MainLayout",
|
name: "MainLayout",
|
||||||
|
|
||||||
components: { LeftToolBar, TopToolBar },
|
components: { LeftToolBar, RightToolBar, TopToolBar },
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
const data = reactive(new _Data());
|
const data = reactive(new _Data());
|
||||||
|
|
|
@ -1,308 +1,20 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<q-tree ref="tree" :nodes="tree_nodes" node-key="uuid" labelKey="name">
|
<signal-source-tree />
|
||||||
<template v-slot:default-header="prop">
|
|
||||||
<q-item
|
|
||||||
class="full-width"
|
|
||||||
clickable
|
|
||||||
:draggable="!prop.node.is_group"
|
|
||||||
@dragstart="(evt) => onDragStart(evt, prop.node)"
|
|
||||||
>
|
|
||||||
<q-item-section avatar>
|
|
||||||
<q-icon
|
|
||||||
:name="
|
|
||||||
prop.node.is_group
|
|
||||||
? 'img:source_icon/group.png'
|
|
||||||
: getItemIcon(prop.node.item_data?.window_type)
|
|
||||||
"
|
|
||||||
color="orange"
|
|
||||||
size="28px"
|
|
||||||
class="q-mr-sm"
|
|
||||||
/>
|
|
||||||
</q-item-section>
|
|
||||||
<q-item-section>
|
|
||||||
<div class="text-weight-bold text-primary">
|
|
||||||
{{ prop.node.name }}
|
|
||||||
</div>
|
</div>
|
||||||
</q-item-section>
|
|
||||||
<q-popup-proxy context-menu>
|
|
||||||
<q-popup-proxy context-menu />
|
|
||||||
<q-list>
|
|
||||||
<q-item
|
|
||||||
v-if="
|
|
||||||
prop.node.name == $t('root') ||
|
|
||||||
(prop.node.is_group &&
|
|
||||||
prop.node.item_data &&
|
|
||||||
!prop.node.item_data.system_default)
|
|
||||||
"
|
|
||||||
clickable
|
|
||||||
v-close-popup
|
|
||||||
v-ripple
|
|
||||||
@click="
|
|
||||||
$refs.signal_source_dialog.showDialog({
|
|
||||||
type: 1,
|
|
||||||
parent_node: prop.node.uuid,
|
|
||||||
})
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<q-item-section avatar><q-icon name="add" /></q-item-section>
|
|
||||||
<q-item-section>{{
|
|
||||||
$t("add signal source item")
|
|
||||||
}}</q-item-section>
|
|
||||||
</q-item>
|
|
||||||
<q-item
|
|
||||||
clickable
|
|
||||||
v-close-popup
|
|
||||||
v-if="
|
|
||||||
prop.node.name == $t('root') ||
|
|
||||||
(prop.node.is_group &&
|
|
||||||
prop.node.item_data &&
|
|
||||||
!prop.node.item_data.system_default)
|
|
||||||
"
|
|
||||||
v-ripple
|
|
||||||
@click="
|
|
||||||
() =>
|
|
||||||
$refs.group_dialog.showDialog({
|
|
||||||
type: 1,
|
|
||||||
data: prop.node,
|
|
||||||
})
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<q-item-section avatar
|
|
||||||
><q-icon name="create_new_folder"
|
|
||||||
/></q-item-section>
|
|
||||||
<q-item-section>{{ $t("add group") }}</q-item-section>
|
|
||||||
</q-item>
|
|
||||||
<q-item
|
|
||||||
clickable
|
|
||||||
v-ripple
|
|
||||||
v-close-popup
|
|
||||||
v-if="
|
|
||||||
prop.node.item_data && !prop.node.item_data.system_default
|
|
||||||
"
|
|
||||||
@click="
|
|
||||||
() =>
|
|
||||||
(prop.node.is_group
|
|
||||||
? $refs.group_dialog
|
|
||||||
: $refs.signal_source_dialog
|
|
||||||
).showDialog({
|
|
||||||
type: 2,
|
|
||||||
data: prop.node,
|
|
||||||
})
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<q-item-section avatar><q-icon name="edit" /></q-item-section>
|
|
||||||
<q-item-section>{{ $t("edit") }}</q-item-section>
|
|
||||||
</q-item>
|
|
||||||
|
|
||||||
<q-item
|
|
||||||
clickable
|
|
||||||
v-ripple
|
|
||||||
v-close-popup
|
|
||||||
v-if="
|
|
||||||
prop.node.item_data && !prop.node.item_data.system_default
|
|
||||||
"
|
|
||||||
@click="
|
|
||||||
(evt) => deleteItem(evt, prop.node.is_group, prop.node.uuid)
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<q-item-section avatar
|
|
||||||
><q-icon color="red" name="delete"
|
|
||||||
/></q-item-section>
|
|
||||||
<q-item-section>{{ $t("delete") }} </q-item-section>
|
|
||||||
</q-item>
|
|
||||||
</q-list>
|
|
||||||
</q-popup-proxy>
|
|
||||||
</q-item>
|
|
||||||
</template>
|
|
||||||
</q-tree>
|
|
||||||
</div>
|
|
||||||
<group-dialog ref="group_dialog" />
|
|
||||||
<signal-source-dialog ref="signal_source_dialog" />
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, computed, onMounted, ref, nextTick } from "vue";
|
import { defineComponent } from "vue";
|
||||||
import { useStore } from "src/store";
|
import SignalSourceTree from "src/components/SignalSourceTree.vue";
|
||||||
import { SignalSourceTreeItemEntity } from "src/entities/SignalSourceEntity";
|
|
||||||
import GroupDialog from "src/components/GroupDialog.vue";
|
|
||||||
import SignalSourceDialog from "src/components/SignalSourceDialog.vue";
|
|
||||||
import { Common } from "src/common/Common";
|
|
||||||
import GlobalData from "src/common/GlobalData";
|
|
||||||
import { useQuasar } from "quasar";
|
|
||||||
import { useI18n } from "vue-i18n";
|
|
||||||
import EventBus, { EventNamesDefine } from "src/common/EventBus";
|
|
||||||
import { Protocol } from "src/entities/WSProtocol";
|
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "PageLeftToolBar",
|
name: "PageLeftToolBar",
|
||||||
|
|
||||||
components: { GroupDialog, SignalSourceDialog },
|
components: { SignalSourceTree },
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
const $store = useStore();
|
return {};
|
||||||
const $q = useQuasar();
|
|
||||||
const $t = useI18n();
|
|
||||||
|
|
||||||
const tree_nodes = computed({
|
|
||||||
get: () => $store.state.signal_source_tree,
|
|
||||||
set: (val) => $store.commit("setSignalSourceTree", val),
|
|
||||||
});
|
|
||||||
|
|
||||||
const tree: any | null = ref(null);
|
|
||||||
|
|
||||||
onMounted(async () => {
|
|
||||||
while (!tree.value.nodes.length) {
|
|
||||||
await Common.waitFor(100);
|
|
||||||
}
|
|
||||||
tree.value?.setExpanded("", true);
|
|
||||||
});
|
|
||||||
|
|
||||||
interface _ResponseMessage {
|
|
||||||
packet: Protocol.PacketEntity;
|
|
||||||
data: string;
|
|
||||||
}
|
|
||||||
EventBus.getInstance().on(
|
|
||||||
EventNamesDefine.NotifyMessage,
|
|
||||||
(response: _ResponseMessage) => {
|
|
||||||
if (response) {
|
|
||||||
switch (response.packet.command) {
|
|
||||||
case Protocol.Commands.kRpcAddSignalSource:
|
|
||||||
{
|
|
||||||
const temp = JSON.parse(
|
|
||||||
response.data
|
|
||||||
) as Protocol.SignalSourceAddNotifyEntity;
|
|
||||||
if (temp) {
|
|
||||||
GlobalData.getInstance().signal_source.push(
|
|
||||||
temp.signal_source
|
|
||||||
);
|
|
||||||
$store.commit("addSignalSourceTreeItem", {
|
|
||||||
parent: temp.signal_source.group_uuid,
|
|
||||||
is_group: false,
|
|
||||||
item_data: temp.signal_source,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Protocol.Commands.kRpcDeleteSignalSource:
|
|
||||||
{
|
|
||||||
const temp = JSON.parse(
|
|
||||||
response.data
|
|
||||||
) as Protocol.SignalSourceDeleteNotifyEntity;
|
|
||||||
if (temp) {
|
|
||||||
$store.commit("deleteSignalSourceTreeItem", {
|
|
||||||
is_group: false,
|
|
||||||
uuid: temp.uuid,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Protocol.Commands.kRpcEditSignalSource:
|
|
||||||
{
|
|
||||||
const temp = JSON.parse(
|
|
||||||
response.data
|
|
||||||
) as Protocol.SignalSourceEditNotifyEntity;
|
|
||||||
if (temp) {
|
|
||||||
$store.commit("setSignalSourceTreeItem", {
|
|
||||||
is_group: false,
|
|
||||||
item_data: temp.signal_source,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Protocol.Commands.kRpcAddSignalSourceGroup:
|
|
||||||
{
|
|
||||||
const temp = JSON.parse(
|
|
||||||
response.data
|
|
||||||
) as Protocol.SignalSourceGroupAddNotifyEntity;
|
|
||||||
if (temp) {
|
|
||||||
$store.commit("addSignalSourceTreeItem", {
|
|
||||||
parent: temp.signal_source_group.parent_uuid,
|
|
||||||
is_group: true,
|
|
||||||
item_data: temp.signal_source_group,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Protocol.Commands.kRpcDeleteSignalSourceGroup:
|
|
||||||
{
|
|
||||||
const temp = JSON.parse(
|
|
||||||
response.data
|
|
||||||
) as Protocol.SignalSourceGroupDeleteNotifyEntity;
|
|
||||||
if (temp) {
|
|
||||||
$store.commit("deleteSignalSourceTreeItem", {
|
|
||||||
is_group: true,
|
|
||||||
uuid: temp.uuid,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Protocol.Commands.kRpcEditSignalSourceGroup:
|
|
||||||
{
|
|
||||||
const temp = JSON.parse(
|
|
||||||
response.data
|
|
||||||
) as Protocol.SignalSourceGroupEditNotifyEntity;
|
|
||||||
if (temp) {
|
|
||||||
$store.commit("setSignalSourceTreeItem", {
|
|
||||||
is_group: true,
|
|
||||||
item_data: temp.signal_source_group,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
|
||||||
tree,
|
|
||||||
tree_nodes,
|
|
||||||
loga(a: any) {
|
|
||||||
console.log(a);
|
|
||||||
},
|
|
||||||
onDragStart(e: DragEvent, node: SignalSourceTreeItemEntity) {
|
|
||||||
e.dataTransfer?.setData("uuid", node.uuid);
|
|
||||||
e.dataTransfer?.setData("node_object", JSON.stringify(node));
|
|
||||||
if (e.dataTransfer) {
|
|
||||||
e.dataTransfer.dropEffect = "move";
|
|
||||||
}
|
|
||||||
},
|
|
||||||
getItemIcon(item_type: string) {
|
|
||||||
return Common.getSignalSourceIcon(item_type);
|
|
||||||
},
|
|
||||||
async deleteItem(
|
|
||||||
evt: PointerEvent | null,
|
|
||||||
is_group: boolean,
|
|
||||||
uuid: string
|
|
||||||
) {
|
|
||||||
let success = false;
|
|
||||||
if (is_group) {
|
|
||||||
let response = await GlobalData.getInstance()
|
|
||||||
.getCurrentClient()
|
|
||||||
?.deleteSignalSourceGroup(uuid);
|
|
||||||
if (response) {
|
|
||||||
success = response.success;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let response = await GlobalData.getInstance()
|
|
||||||
.getCurrentClient()
|
|
||||||
?.deleteSignalSource(uuid);
|
|
||||||
if (response) {
|
|
||||||
success = response.success;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$q.notify({
|
|
||||||
color: success ? "positive" : "negative",
|
|
||||||
icon: success ? "done" : "warning",
|
|
||||||
message:
|
|
||||||
$t.t("delete") + (success ? $t.t("success") : $t.t("fail")) + "!",
|
|
||||||
position: "top",
|
|
||||||
timeout: 1000,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -14,8 +14,44 @@
|
||||||
@reset="onReset"
|
@reset="onReset"
|
||||||
class="q-gutter-md"
|
class="q-gutter-md"
|
||||||
>
|
>
|
||||||
|
<q-input
|
||||||
|
:loading="data.loading"
|
||||||
|
:disable="data.loading"
|
||||||
|
filled
|
||||||
|
v-model="data.ip_address"
|
||||||
|
:label="$t('server ip address')"
|
||||||
|
:hint="$t('please input server ip address')"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[
|
||||||
|
(val) =>
|
||||||
|
(val && val.length > 0) || $t('Please type something'),
|
||||||
|
(val) =>
|
||||||
|
val == 'localhost' ||
|
||||||
|
/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/.test(
|
||||||
|
val
|
||||||
|
) ||
|
||||||
|
$t('Please input vaild ip address'),
|
||||||
|
]"
|
||||||
|
@keydown="
|
||||||
|
(evt) => {
|
||||||
|
if (evt.keyCode == 13) {
|
||||||
|
$refs?.password_input?.focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<template v-if="data.ip_address" v-slot:append>
|
||||||
|
<q-icon
|
||||||
|
name="cancel"
|
||||||
|
@click.stop="data.ip_address = null"
|
||||||
|
class="cursor-pointer"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
|
||||||
<q-input
|
<q-input
|
||||||
autofocus
|
autofocus
|
||||||
|
ref="user_name"
|
||||||
:loading="data.loading"
|
:loading="data.loading"
|
||||||
:disable="data.loading"
|
:disable="data.loading"
|
||||||
filled
|
filled
|
||||||
|
@ -112,7 +148,7 @@ class _Data {
|
||||||
user_name: string | null = null;
|
user_name: string | null = null;
|
||||||
password: string | null = null;
|
password: string | null = null;
|
||||||
loading = false;
|
loading = false;
|
||||||
ip_address = "127.0.0.1";
|
ip_address = window.location.hostname;
|
||||||
show_password = false;
|
show_password = false;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<q-tabs
|
||||||
|
v-model="tab_value"
|
||||||
|
dense
|
||||||
|
class="text-grey"
|
||||||
|
active-color="primary"
|
||||||
|
indicator-color="primary"
|
||||||
|
align="justify"
|
||||||
|
narrow-indicator
|
||||||
|
>
|
||||||
|
<q-tab name="mode" :label="$t('mode')" />
|
||||||
|
<q-tab name="plan" :label="$t('plan')" />
|
||||||
|
</q-tabs>
|
||||||
|
<q-separator />
|
||||||
|
|
||||||
|
<q-tab-panels v-model="tab_value" animated>
|
||||||
|
<q-tab-panel name="mode">
|
||||||
|
<mode-tree />
|
||||||
|
</q-tab-panel>
|
||||||
|
|
||||||
|
<q-tab-panel name="plan">
|
||||||
|
<div class="text-h6">Alarms</div>
|
||||||
|
Lorem ipsum dolor sit amet consectetur adipisicing elit.
|
||||||
|
</q-tab-panel>
|
||||||
|
</q-tab-panels>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, ref } from "vue";
|
||||||
|
import ModeTree from "src/components/ModeTree.vue";
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: "PageRightToolBar",
|
||||||
|
|
||||||
|
components: { ModeTree },
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
let tab_value = ref("mode");
|
||||||
|
return { tab_value };
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -122,6 +122,13 @@ const _getSignalSources = async () => {
|
||||||
?.getSignalSources()) as Protocol.GetSignalSourcesResponse;
|
?.getSignalSources()) as Protocol.GetSignalSourcesResponse;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const _getModes = async () => {
|
||||||
|
const global_data = GlobalData.getInstance();
|
||||||
|
return (await global_data
|
||||||
|
.getCurrentClient()
|
||||||
|
?.getModes()) as Protocol.GetModesResponseEntity;
|
||||||
|
};
|
||||||
|
|
||||||
const _initSignalSourceTree = async (options: _OptionsType) => {
|
const _initSignalSourceTree = async (options: _OptionsType) => {
|
||||||
const $store = options?.$store;
|
const $store = options?.$store;
|
||||||
if ($store) {
|
if ($store) {
|
||||||
|
@ -137,6 +144,21 @@ const _initSignalSourceTree = async (options: _OptionsType) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const _initModeTree = async (options: _OptionsType) => {
|
||||||
|
const $store = options?.$store;
|
||||||
|
if ($store) {
|
||||||
|
try {
|
||||||
|
let response = await _getModes();
|
||||||
|
if (response) {
|
||||||
|
$store.commit("buildModeTree", { options, response });
|
||||||
|
GlobalData.getInstance().modes = response.modes;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const _getApplicationConfig = async (options: _OptionsType) => {
|
const _getApplicationConfig = async (options: _OptionsType) => {
|
||||||
const global_data = GlobalData.getInstance();
|
const global_data = GlobalData.getInstance();
|
||||||
global_data.applicationConfig = (
|
global_data.applicationConfig = (
|
||||||
|
@ -177,9 +199,9 @@ const _initialize = async (options: _OptionsType) => {
|
||||||
|
|
||||||
await _getApplicationConfig(options);
|
await _getApplicationConfig(options);
|
||||||
|
|
||||||
await _initSignalSourceTree(options).then(() => {
|
await _initSignalSourceTree(options);
|
||||||
|
await _initModeTree(options);
|
||||||
_getWindows(options);
|
_getWindows(options);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { store } from "quasar/wrappers";
|
import { store } from "quasar/wrappers";
|
||||||
|
import { ModeEntity, ModeTreeItemEntity } from "src/entities/ModeEntity";
|
||||||
import { WindowOpenNotifyEntity } from "src/entities/MultimediaWindowEntity";
|
import { WindowOpenNotifyEntity } from "src/entities/MultimediaWindowEntity";
|
||||||
import {
|
import {
|
||||||
SignalSourceEntity,
|
SignalSourceEntity,
|
||||||
|
@ -29,6 +30,7 @@ export interface StateInterface {
|
||||||
// Declared as unknown to avoid linting issue. Best to strongly type as per the line above.
|
// Declared as unknown to avoid linting issue. Best to strongly type as per the line above.
|
||||||
initialized: boolean;
|
initialized: boolean;
|
||||||
signal_source_tree: SignalSourceTreeItemEntity[];
|
signal_source_tree: SignalSourceTreeItemEntity[];
|
||||||
|
mode_tree: ModeTreeItemEntity[];
|
||||||
wall_row: number;
|
wall_row: number;
|
||||||
wall_col: number;
|
wall_col: number;
|
||||||
device_screen_width: number;
|
device_screen_width: number;
|
||||||
|
@ -77,6 +79,165 @@ class _TreeHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static addTreeItem(
|
||||||
|
tree: any,
|
||||||
|
defaultItem: () => any,
|
||||||
|
createTreeItem: (
|
||||||
|
uuid: string,
|
||||||
|
parent: string,
|
||||||
|
name: string,
|
||||||
|
is_group: boolean
|
||||||
|
) => any,
|
||||||
|
playload?: any
|
||||||
|
) {
|
||||||
|
if (tree && playload) {
|
||||||
|
const parent = playload.parent ?? "";
|
||||||
|
const is_group = playload.is_group ?? false;
|
||||||
|
let item_data = playload.item_data ?? defaultItem();
|
||||||
|
let node = _TreeHelper.findNode(tree[0], "uuid", item_data.uuid);
|
||||||
|
if (node) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = _TreeHelper.findNode(tree[0], "uuid", parent);
|
||||||
|
if (node) {
|
||||||
|
const node_item = createTreeItem(
|
||||||
|
item_data.uuid,
|
||||||
|
parent,
|
||||||
|
item_data.name,
|
||||||
|
is_group
|
||||||
|
);
|
||||||
|
node_item.item_data = item_data;
|
||||||
|
(<any[]>node.children).push(node_item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static setTreeItem(
|
||||||
|
tree: any,
|
||||||
|
defaultItem: () => any,
|
||||||
|
copy: (left: any, right: any) => void,
|
||||||
|
playload?: any
|
||||||
|
) {
|
||||||
|
if (tree && playload) {
|
||||||
|
let item_data = playload.item_data ?? defaultItem();
|
||||||
|
let node = _TreeHelper.findNode(tree[0], "uuid", item_data.uuid);
|
||||||
|
if (node) {
|
||||||
|
copy(node.item_data, item_data);
|
||||||
|
node.name = item_data.name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static deleteTreeItem(tree: any, playload?: any) {
|
||||||
|
if (tree && playload && playload.uuid) {
|
||||||
|
let parent = _TreeHelper.findNodeParent(tree[0], "uuid", playload.uuid);
|
||||||
|
if (parent) {
|
||||||
|
let node_index = (<any[]>parent.children).findIndex(
|
||||||
|
(item) => item && item.uuid == playload.uuid
|
||||||
|
);
|
||||||
|
if (node_index != -1) {
|
||||||
|
(<any[]>parent.children).splice(node_index, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static findGroupsByParent(parent: string, array: any[]) {
|
||||||
|
return array.filter((item) => {
|
||||||
|
return item && item.parent_uuid == parent;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static findItemsByParent(parent: string, array: any[]) {
|
||||||
|
return array.filter((item) => {
|
||||||
|
return item && item.group_uuid == parent;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static buildGroup(
|
||||||
|
parent: any,
|
||||||
|
createTreeItem: (
|
||||||
|
uuid?: string,
|
||||||
|
parent?: string,
|
||||||
|
name?: string,
|
||||||
|
is_group?: boolean,
|
||||||
|
item_data?: any,
|
||||||
|
children?: any[]
|
||||||
|
) => any,
|
||||||
|
group_array: any[],
|
||||||
|
item_array: any[]
|
||||||
|
) {
|
||||||
|
if (parent) {
|
||||||
|
for (let item of _TreeHelper.findGroupsByParent(
|
||||||
|
parent.uuid,
|
||||||
|
group_array
|
||||||
|
)) {
|
||||||
|
const node_item = createTreeItem(
|
||||||
|
item.uuid,
|
||||||
|
parent.uuid,
|
||||||
|
item.name,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
node_item.item_data = item;
|
||||||
|
parent.children.push(node_item);
|
||||||
|
_TreeHelper.buildGroup(
|
||||||
|
node_item,
|
||||||
|
createTreeItem,
|
||||||
|
group_array,
|
||||||
|
item_array
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let item of _TreeHelper.findItemsByParent(parent.uuid, item_array)) {
|
||||||
|
const node_item = createTreeItem(
|
||||||
|
item.uuid,
|
||||||
|
parent.uuid,
|
||||||
|
item.name,
|
||||||
|
false,
|
||||||
|
item
|
||||||
|
);
|
||||||
|
parent.children.push(node_item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static buildTree(
|
||||||
|
tree: any,
|
||||||
|
group_name: string,
|
||||||
|
items_name: string,
|
||||||
|
createTreeItem: (
|
||||||
|
uuid?: string,
|
||||||
|
parent?: string,
|
||||||
|
name?: string,
|
||||||
|
is_group?: boolean,
|
||||||
|
item_data?: any,
|
||||||
|
children?: any[]
|
||||||
|
) => any,
|
||||||
|
playload?: any
|
||||||
|
) {
|
||||||
|
if (
|
||||||
|
tree &&
|
||||||
|
playload &&
|
||||||
|
playload.response &&
|
||||||
|
playload.options &&
|
||||||
|
playload.options.$t
|
||||||
|
) {
|
||||||
|
const $t = playload.options.$t;
|
||||||
|
const groups = playload.response[group_name] ?? [];
|
||||||
|
const items = playload.response[items_name] ?? [];
|
||||||
|
|
||||||
|
const root = createTreeItem("", "", $t.t("root"), true);
|
||||||
|
|
||||||
|
tree.splice(0, tree.length);
|
||||||
|
tree.push(root);
|
||||||
|
|
||||||
|
_TreeHelper.buildGroup(root, createTreeItem, groups, items);
|
||||||
|
} else {
|
||||||
|
console.error(playload);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// provide typings for `useStore` helper
|
// provide typings for `useStore` helper
|
||||||
|
@ -92,6 +253,7 @@ export default store(function (/* { ssrContext } */) {
|
||||||
// state
|
// state
|
||||||
initialized: false,
|
initialized: false,
|
||||||
signal_source_tree: [],
|
signal_source_tree: [],
|
||||||
|
mode_tree: [],
|
||||||
wall_col: 1,
|
wall_col: 1,
|
||||||
wall_row: 1,
|
wall_row: 1,
|
||||||
device_screen_width: 1920,
|
device_screen_width: 1920,
|
||||||
|
@ -189,6 +351,7 @@ export default store(function (/* { ssrContext } */) {
|
||||||
state.device_screen_height = num;
|
state.device_screen_height = num;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// signal source
|
||||||
setSignalSourceTree(
|
setSignalSourceTree(
|
||||||
state: StateInterface,
|
state: StateInterface,
|
||||||
playload?: SignalSourceTreeItemEntity[]
|
playload?: SignalSourceTreeItemEntity[]
|
||||||
|
@ -198,9 +361,6 @@ export default store(function (/* { ssrContext } */) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
clearSignalSourceTree(state: StateInterface, playload?: any) {
|
clearSignalSourceTree(state: StateInterface, playload?: any) {
|
||||||
// if (state.signal_source_tree) {
|
|
||||||
// state.signal_source_tree.splice(0, state.signal_source_tree.length);
|
|
||||||
// }
|
|
||||||
state.signal_source_tree = [];
|
state.signal_source_tree = [];
|
||||||
},
|
},
|
||||||
pushSignalSourceTreeItem(
|
pushSignalSourceTreeItem(
|
||||||
|
@ -343,6 +503,70 @@ export default store(function (/* { ssrContext } */) {
|
||||||
console.error(playload);
|
console.error(playload);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
//mode tree
|
||||||
|
setModeTree(
|
||||||
|
state: StateInterface,
|
||||||
|
playload?: SignalSourceTreeItemEntity[]
|
||||||
|
) {
|
||||||
|
if (playload) {
|
||||||
|
state.mode_tree = playload;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
clearModeTree(state: StateInterface, playload?: any) {
|
||||||
|
state.mode_tree = [];
|
||||||
|
},
|
||||||
|
pushModeTreeItem(
|
||||||
|
state: StateInterface,
|
||||||
|
playload?: SignalSourceTreeItemEntity
|
||||||
|
) {
|
||||||
|
if (playload) {
|
||||||
|
state.mode_tree.push(playload);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addModeTreeItem(state: StateInterface, playload?: any) {
|
||||||
|
_TreeHelper.addTreeItem(
|
||||||
|
state.mode_tree,
|
||||||
|
() => new ModeEntity(),
|
||||||
|
(uuid: string, parent: string, name: string, is_group: boolean) =>
|
||||||
|
new ModeTreeItemEntity(uuid, parent, name, is_group),
|
||||||
|
playload
|
||||||
|
);
|
||||||
|
},
|
||||||
|
setModeTreeItem(state: StateInterface, playload?: any) {
|
||||||
|
_TreeHelper.setTreeItem(
|
||||||
|
state.mode_tree,
|
||||||
|
() => new ModeEntity(),
|
||||||
|
(left: any, right: any) => ModeEntity.copy(left, right),
|
||||||
|
playload
|
||||||
|
);
|
||||||
|
},
|
||||||
|
deleteModeTreeItem(state: StateInterface, playload?: any) {
|
||||||
|
_TreeHelper.deleteTreeItem(state.mode_tree, playload);
|
||||||
|
},
|
||||||
|
buildModeTree(state: StateInterface, playload?: any) {
|
||||||
|
_TreeHelper.buildTree(
|
||||||
|
state.mode_tree,
|
||||||
|
"mode_groups",
|
||||||
|
"modes",
|
||||||
|
(
|
||||||
|
uuid?: string,
|
||||||
|
parent?: string,
|
||||||
|
name?: string,
|
||||||
|
is_group?: boolean,
|
||||||
|
item_data?: any,
|
||||||
|
children?: SignalSourceTreeItemEntity[]
|
||||||
|
) =>
|
||||||
|
new ModeTreeItemEntity(
|
||||||
|
uuid,
|
||||||
|
parent,
|
||||||
|
name,
|
||||||
|
is_group,
|
||||||
|
item_data,
|
||||||
|
children
|
||||||
|
),
|
||||||
|
playload
|
||||||
|
);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
// enable strict mode (adds overhead!)
|
// enable strict mode (adds overhead!)
|
||||||
|
|
Loading…
Reference in New Issue