Browse Source

更新 设备批量控制

wangqin
qingzhengli 1 year ago
parent
commit
8f1e08d26f
  1. 66
      ruoyi-ui/README.md
  2. 1
      ruoyi-ui/src/views/JiHeExpressway/common/PresetFormItems.js
  3. 36
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue
  4. 6
      ruoyi-ui/src/views/JiHeExpressway/images/home-FrameControl/FrameControl.svg
  5. 3
      ruoyi-ui/src/views/JiHeExpressway/images/home-VectorControl/VectorControl.svg
  6. 328
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue
  7. 97
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeVectorControl/index.vue
  8. 7
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue

66
ruoyi-ui/README.md

@ -83,13 +83,13 @@ PresetFormItems.js 里面封装了一些可以复用的表单项
data.js 表单封装,里面会使用PresetFormItems的一些FormItem.
Form表单属性介绍:
<Form labelWidth="90px" column="2" class="form" ref="FormConfigRef" :formList="formList" />
{
key: "ServiceAreaAbnormal", //唯一标识 一般tabs才需要
label: "服务区异常",//表单标题
formConfig: {
formOptions: {//element中表单配置参数
column: 2,
column: 2, //一行放多少元素(基于:style grid布局实现)
},
list: [//FormItem定义
{
@ -166,7 +166,7 @@ FormItem属性介绍:
export const additionalNotes = {
label: "补充说明:", // 标题
key: "eventSourceTips", //数据存储字段
isAlone: true, // 独立
isAlone: true, // 单独一行
required: true, //必填
default: 5, //默认值
type: "input", //组件类型(el-input 去掉el-即可) 不填默认为input
@ -182,4 +182,64 @@ export const additionalNotes = {
return true
}
},
ons: { //on监听 element事件
change(value, ...args) {
const { data, formList } = args.slice(-1)\[0]; //data 为数据 formList为传入的配置项
mileCal(data);
}
},
};
MultipleLabelItem是单独写的组件,事件需按如下配置:
merge({}, PresetFormItems.startStation,
{
options: {
options: [
{
prefix: {
text: "K",
style: {
color: "#3DE8FF",
},
},
key: "startStakeMark[0]",
default: "55",
rules: [
{
message: "请补全桩号",
callback(value, data) {
console.log(value, data.startStakeMark);
if (
!((value + "")?.trim() && (data.startStakeMark[1] + "")?.trim())
)
return false;
else return true;
},
},
],
ons: { //on监听 element事件
change(value, ...args) {
const { data, formList } = args.slice[-1](0); //data 为数据 formList为传入的配置项
data.deviceType && changeHandle(data, formList);
}
},
},
{
prefix: {
text: "+",
style: {
color: "#3DE8FF",
},
},
default: "378",
key: "startStakeMark[1]",
ons: { //on监听 element事件
change(value, ...args) {
const { data, formList } = args.slice[-1](0); //data 为数据 formList为传入的配置项
data.deviceType && changeHandle(data, formList);
}
},
},
],
}
})

1
ruoyi-ui/src/views/JiHeExpressway/common/PresetFormItems.js

@ -137,7 +137,6 @@ export const startStation = {
{
message: "请补全桩号",
callback(value, data) {
console.log(value, data.startStakeMark);
if (
!((value + "")?.trim() && (data.startStakeMark[1] + "")?.trim())
)

36
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue

@ -1,29 +1,12 @@
<template>
<ElForm
:style="getStyle()"
:model="modelFormData"
:label-width="labelWidth"
class="FormConfig"
ref="ElFormRef"
size="mini"
>
<ElForm :style="getStyle()" :model="modelFormData" :label-width="labelWidth" class="FormConfig" ref="ElFormRef"
size="mini">
<template v-for="(item, index) in formList">
<ElFormItem
class="formItem"
:rules="getRules(item)"
v-if="formItemVisible(item)"
:key="`${item.key}|${index}`"
:label="item.label"
:style="gridStyle(item, index)"
:prop="item.type !== 'MultipleLabelItem' ? item.key : void 0"
:required="item.required"
>
<ElFormItem class="formItem" :rules="getRules(item)" v-if="formItemVisible(item)" :key="`${item.key}|${index}`"
:label="item.label" :style="gridStyle(item, index)"
:prop="item.type !== 'MultipleLabelItem' ? item.key : void 0" :required="item.required">
<slot :name="item.key" :data="item" :formData="modelFormData">
<ProxyCom
:value="getValue(item)"
:item="item"
@update:value="(data) => updateValue(item, data)"
/>
<ProxyCom :value="getValue(item)" :item="item" @update:value="(data) => updateValue(item, data)" />
<!-- <component :is="getComponent(item.type)" v-bind="getBindData(item)" v-model="modelFormData[item.key]"
v-on="resolveListeners(item.ons)" /> -->
</slot>
@ -86,7 +69,7 @@ export default {
*/
dFormData: {
type: Object,
default: () => {},
default: () => { },
},
/**
* {
@ -150,9 +133,8 @@ export default {
gridStyle() {
return (item, index) => ({
gridRow: `span ${item.gridRow || 1}`,
gridColumn: `span ${
item.gridColumn || (item.isAlone && this.column) || 1
}`,
gridColumn: `span ${item.gridColumn || (item.isAlone && this.column) || 1
}`,
});
},
formItemVisible() {

6
ruoyi-ui/src/views/JiHeExpressway/images/home-FrameControl/FrameControl.svg

@ -0,0 +1,6 @@
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Frame">
<path id="Vector" d="M3.5 3.49984C3.5 2.881 3.74583 2.28751 4.18342 1.84992C4.621 1.41234 5.21449 1.1665 5.83333 1.1665H22.1667C22.7855 1.1665 23.379 1.41234 23.8166 1.84992C24.2542 2.28751 24.5 2.881 24.5 3.49984V12.4307C23.1037 11.548 21.4852 11.0807 19.8333 11.0832C17.9392 11.0801 16.0958 11.6945 14.5822 12.8332H12.25C11.9406 12.8332 11.6438 12.9561 11.425 13.1749C11.2062 13.3937 11.0833 13.6904 11.0833 13.9998C11.0833 14.3093 11.2062 14.606 11.425 14.8248C11.6438 15.0436 11.9406 15.1665 12.25 15.1665H12.4308C11.5482 16.5628 11.0808 18.1813 11.0833 19.8332C11.0833 22.6956 12.4577 25.2366 14.5822 26.8332H5.83333C5.21449 26.8332 4.621 26.5873 4.18342 26.1498C3.74583 25.7122 3.5 25.1187 3.5 24.4998V3.49984ZM9.91667 19.8332C9.91667 19.68 9.88649 19.5283 9.82786 19.3867C9.76923 19.2452 9.68329 19.1165 9.57496 19.0082C9.46662 18.8999 9.33801 18.8139 9.19646 18.7553C9.05492 18.6967 8.90321 18.6665 8.75 18.6665C8.59679 18.6665 8.44508 18.6967 8.30354 18.7553C8.16199 18.8139 8.03338 18.8999 7.92504 19.0082C7.81671 19.1165 7.73077 19.2452 7.67214 19.3867C7.61351 19.5283 7.58333 19.68 7.58333 19.8332C7.58333 20.1426 7.70625 20.4393 7.92504 20.6581C8.14383 20.8769 8.44058 20.9998 8.75 20.9998C9.05942 20.9998 9.35617 20.8769 9.57496 20.6581C9.79375 20.4393 9.91667 20.1426 9.91667 19.8332ZM9.91667 13.9998C9.91667 13.8466 9.88649 13.6949 9.82786 13.5534C9.76923 13.4118 9.68329 13.2832 9.57496 13.1749C9.46662 13.0665 9.33801 12.9806 9.19646 12.922C9.05492 12.8633 8.90321 12.8332 8.75 12.8332C8.59679 12.8332 8.44508 12.8633 8.30354 12.922C8.16199 12.9806 8.03338 13.0665 7.92504 13.1749C7.81671 13.2832 7.73077 13.4118 7.67214 13.5534C7.61351 13.6949 7.58333 13.8466 7.58333 13.9998C7.58333 14.3093 7.70625 14.606 7.92504 14.8248C8.14383 15.0436 8.44058 15.1665 8.75 15.1665C9.05942 15.1665 9.35617 15.0436 9.57496 14.8248C9.79375 14.606 9.91667 14.3093 9.91667 13.9998ZM11.0833 8.1665C11.0833 8.47592 11.2062 8.77267 11.425 8.99146C11.6438 9.21025 11.9406 9.33317 12.25 9.33317H19.25C19.4032 9.33319 19.555 9.30303 19.6965 9.24441C19.8381 9.18579 19.9667 9.09986 20.0751 8.99152C20.1834 8.88319 20.2694 8.75457 20.328 8.61301C20.3867 8.47145 20.4168 8.31973 20.4168 8.1665C20.4168 8.01328 20.3867 7.86156 20.328 7.72C20.2694 7.57844 20.1834 7.44982 20.0751 7.34148C19.9667 7.23315 19.8381 7.14721 19.6965 7.08859C19.555 7.02997 19.4032 6.99981 19.25 6.99984H12.25C12.0968 6.99984 11.9451 7.03001 11.8035 7.08864C11.662 7.14727 11.5334 7.23321 11.425 7.34155C11.3167 7.44988 11.2308 7.57849 11.1721 7.72004C11.1135 7.86159 11.0833 8.01329 11.0833 8.1665ZM9.91667 8.1665C9.91667 8.01329 9.88649 7.86159 9.82786 7.72004C9.76923 7.57849 9.68329 7.44988 9.57496 7.34155C9.46662 7.23321 9.33801 7.14727 9.19646 7.08864C9.05492 7.03001 8.90321 6.99984 8.75 6.99984C8.59679 6.99984 8.44508 7.03001 8.30354 7.08864C8.16199 7.14727 8.03338 7.23321 7.92504 7.34155C7.81671 7.44988 7.73077 7.57849 7.67214 7.72004C7.61351 7.86159 7.58333 8.01329 7.58333 8.1665C7.58333 8.47592 7.70625 8.77267 7.92504 8.99146C8.14383 9.21025 8.44058 9.33317 8.75 9.33317C9.05942 9.33317 9.35617 9.21025 9.57496 8.99146C9.79375 8.77267 9.91667 8.47592 9.91667 8.1665Z" fill="white"/>
<path id="Vector_2" d="M12.8335 19.8335C12.8335 15.9677 15.9677 12.8335 19.8335 12.8335C23.6992 12.8335 26.8335 15.9677 26.8335 19.8335C26.8335 23.6992 23.6992 26.8335 19.8335 26.8335C15.9677 26.8335 12.8335 23.6992 12.8335 19.8335ZM21.0025 16.3335C21.0025 16.1803 20.9724 16.0285 20.9137 15.887C20.8551 15.7454 20.7692 15.6168 20.6609 15.5084C20.5525 15.4001 20.4239 15.3141 20.2823 15.2555C20.1408 15.1968 19.9891 15.1667 19.8358 15.1667C19.6826 15.1667 19.5309 15.1968 19.3893 15.2555C19.2478 15.3141 19.1191 15.4001 19.0108 15.5084C18.9025 15.6168 18.8165 15.7454 18.7579 15.887C18.6993 16.0285 18.6691 16.1803 18.6692 16.3335V19.8358C18.669 19.9891 18.6991 20.1409 18.7577 20.2825C18.8162 20.4241 18.9021 20.5528 19.0104 20.6612L21.4837 23.1346C21.5921 23.2429 21.7208 23.3288 21.8624 23.3874C22.004 23.446 22.1558 23.4761 22.309 23.4761C22.4622 23.476 22.614 23.4458 22.7555 23.3871C22.8971 23.3284 23.0257 23.2424 23.134 23.134C23.2423 23.0256 23.3282 22.8969 23.3868 22.7553C23.4454 22.6137 23.4755 22.462 23.4755 22.3088C23.4754 22.1555 23.4452 22.0038 23.3865 21.8622C23.3278 21.7207 23.2418 21.5921 23.1334 21.4837L21.0025 19.3528V16.3335Z" fill="white"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

3
ruoyi-ui/src/views/JiHeExpressway/images/home-VectorControl/VectorControl.svg

@ -0,0 +1,3 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path id="Vector" d="M3.99929 3.66667H2.00043V0H4.00086V3.66667H3.99929ZM3.99929 10.0833V22H2.00043V10.0833H4.00086H3.99929ZM12.0002 11.9167H9.99979V0H12.0002V11.9167ZM12.0002 18.3333V22H9.99979V18.3333H12.0002ZM20.0004 5.5H17.9999V0H20.0004V5.5ZM20.0004 11.9167V22H17.9999V11.9167H20.0004ZM1.00021 4.58333H4.9995C5.55264 4.58333 5.99971 4.994 5.99972 5.5V8.25C5.99972 8.756 5.55186 9.16667 5.00029 9.16667H1.00021C0.447857 9.16667 0 8.756 0 8.25V5.5C0 4.994 0.447857 4.58333 1.00021 4.58333ZM9.00036 12.8333H12.9996C13.552 12.8333 13.9999 13.244 13.9999 13.75V16.5C13.9999 17.006 13.552 17.4167 12.9996 17.4167H9.00036C8.448 17.4167 8.00014 17.006 8.00014 16.5V13.75C8.00014 13.244 8.448 12.8333 9.00036 12.8333ZM16.9997 6.41667H20.9998C21.5521 6.41667 22 6.82733 22 7.33333V10.0833C22 10.5893 21.5521 11 20.9998 11H17.0005C16.4474 11 16.0003 10.5893 16.0003 10.0833V7.33333C16.0003 6.82733 16.4481 6.41667 16.9997 6.41667Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

328
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue

@ -0,0 +1,328 @@
<template>
<div class="HomeFrameControl">
<ElPopover trigger="manual" :value="activeIcon === 'FrameControl'" :visibleArrow="false" placement="left"
popper-class="global-input-search-popover">
<Button :class="['btn', { 'btn-active': activeIcon }]" slot="reference"
@click.native="handleClick('FrameControl')">
<img src="@screen/images/home-FrameControl/FrameControl.svg" />
</Button>
<div class="body">
<div class="title">批量控制</div>
<Form labelWidth="90px" column="2" class="form" ref="FormConfigRef" :formList="formList" />
<div class="footer">
<Button style="background-color: rgba(0, 179, 204, 0.3)" @click.native="handleResetForm">
重置
</Button>
<Button @click.native="handleSearch"> 搜索 </Button>
</div>
</div>
</ElPopover>
</div>
</template>
<script>
import Button from "@screen/components/Buttons/Button.vue";
import Form from "@screen/components/FormConfig";
import * as PresetFormItems from "@screen/common/PresetFormItems.js";
import { merge, cloneDeep } from "lodash";
import { markerClusterIns } from "@screen/pages/Home/components/RoadAndEvents/utils/map.js"
import { ChildTypes } from "@screen/utils/enum.js"
import { getDeviceList } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js";
import { delay } from "@screen/utils/common";
import { DeviceForMap } from "@screen/pages/Home/components/RoadAndEvents/utils/buttonEvent"
const DeviceTopics = {}
Object.keys(DeviceForMap).forEach(DeviceLabel => {
DeviceTopics[DeviceForMap[DeviceLabel].deviceType] = DeviceLabel;
});
async function setDeviceOptions(config, filterData, formList) {
const data = await getDeviceList(config.deviceType, filterData).then(async (data) => {
await delay(600);
return data;
});
formList[4].options.options = data.map(item => {
return { label: `${item.deviceName}${item.stakeMark}`, value: JSON.stringify({ id: item.id, iotDeviceId: item.iotDeviceId }) }
})
};
function changeHandle(data, formList) {
const filterData = {};
data.direction && (filterData.direction = data.direction);
data.startStakeMark && (filterData.startStakeMark = data.startStakeMark);
data.endStakeMark && (filterData.endStakeMark = data.endStakeMark);
setDeviceOptions({ deviceType: data.deviceType }, filterData, formList);
}
export default {
name: "HomeFrameControl",//
components: {
Button,
Form,
},
data() {
return {
activeIcon: null,
formList: [
{
label: "设备类型:",
key: "deviceType",
type: "select",
options: {
clearable: true,
options: [],
},
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
{
label: "设备方向:",
key: "direction",
type: "select",
options: {
options: [
{ key: "1", label: "济南方向" },
{ key: "3", label: "菏泽方向" },
{ key: "2", label: "双向" },
],
},
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
merge({}, PresetFormItems.startStation,
{
options: {
options: [
{
prefix: {
text: "K",
style: {
color: "#3DE8FF",
},
},
key: "startStakeMark[0]",
default: "55",
rules: [
{
message: "请补全桩号",
callback(value, data) {
console.log(value, data.startStakeMark);
if (
!((value + "")?.trim() && (data.startStakeMark[1] + "")?.trim())
)
return false;
else return true;
},
},
],
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
{
prefix: {
text: "+",
style: {
color: "#3DE8FF",
},
},
default: "378",
key: "startStakeMark[1]",
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
],
}
}),
merge({}, PresetFormItems.endStation, {
options: {
options: [
{
prefix: {
text: "K",
style: {
color: "#3DE8FF",
},
},
key: "endStakeMark[0]",
default: "208",
rules: [
{
message: "请补全桩号",
callback(value, data) {
if (
!((value + "")?.trim() && (data.endStakeMark[1] + "")?.trim())
)
return false;
else return true;
},
},
],
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
{
prefix: {
text: "+",
style: {
color: "#3DE8FF",
},
},
default: "153",
key: "endStakeMark[1]",
ons: { //on element
change(value, ...args) {
const { data, formList } = args.slice(-1)[0]; //data formList
data.deviceType && changeHandle(data, formList);
}
},
},
],
}
}),
{
label: "设备名称:",
key: "childType",
type: "select",
isAlone: true,
options: {
clearable: true,
options: [],
},
visible: data => {
return true;
},
},
{
label: "控制操作:",
key: "controlOp",
type: "select",
default: null,
options: {
clearable: true,
options: [{
label: "在线",
value: "1"
}, {
label: "离线",
value: "0"
}]
},
visible: data => {
// if (find(this.activeDeviceTypes, (type => type.match("_"))))
// return true;
},
},
]
}
},
inject: ["activeDeviceTypes"],
watch: {
activeDeviceTypes: {
handler(val) {
const activeTopicOptions = []
this.activeDeviceTypes.filter(activeDeviceType => {
const match = activeDeviceType.match(/路测设备_(\d+)/);
if (match) {
const deviceType = match[1];
activeTopicOptions.push({ label: DeviceTopics[deviceType], value: deviceType });
}
});
this.formList[0].options.options = activeTopicOptions;
},
immediate: true,
deep: true
}
},
methods: {
handleClick(type) {
console.log("type: ", type);
this.activeIcon = this.activeIcon === type ? null : type;
console.log("this.activeIcon", this.activeIcon);
},
filterEnd(data) {
this.activeIcon = null;
// this.filterData = data;
this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data);
},
},
};
</script>
<style lang="scss">
div.el-popper.global-input-search-popover {
background: rgba(6, 66, 88, 0.8);
border: 1px solid rgba(42, 217, 253, 0.6);
position: relative;
padding-top: 36px;
transform: translateY(24px);
// margin-top: 6vh;
.body {
.title {
background: linear-gradient(90deg,
#237e9b 0%,
rgba(23, 145, 184, 0) 100%);
padding: 3px 9px;
position: absolute;
top: 0;
left: 0;
width: 100%;
}
.close {
padding: 3px 9px;
cursor: pointer;
position: absolute;
top: 0;
right: 0;
width: fit-content;
}
}
}
</style>
<style lang="scss" scoped>
.image {
width: 50vw;
height: 65vh;
}
.HomeFrameControl {
.btn {
padding: 9px;
background: linear-gradient(180deg, #152e3c 0%, #163a45 100%);
border-radius: 4px;
overflow: hidden;
height: unset;
border: 1px solid rgba(40, 144, 167, 1);
}
.btn-active {
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
}
}
</style>

97
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeVectorControl/index.vue

@ -0,0 +1,97 @@
<template>
<div class="HomeVectorControl">
<Button :class="['btn', { 'btn-active': activeIcon }]" slot="reference"
@click.native="handleClick('VectorControl')">
<img src="@screen/images/home-VectorControl/VectorControl.svg" />
</Button>
</div>
</template>
<script>
import Button from "@screen/components/Buttons/Button.vue";
import Form from "@screen/components/FormConfig";
import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js";
import { merge, cloneDeep } from "lodash";
import { markerClusterIns } from "@screen/pages/Home/components/RoadAndEvents/utils/map.js"
export default {
name: "HomeVectorControl",
components: {
Button,
Form,
},
data() {
return {
activeIcon: null,
};
},
methods: {
handleClick(type) {
this.activeIcon = this.activeIcon === type ? null : type;
if (this.activeIcon) window.showStakeText = true;
else window.showStakeText = false;
markerClusterIns.setData();
},
filterEnd(data) {
this.activeIcon = null;
// this.filterData = data;
this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data);
},
},
};
</script>
<style lang="scss">
div.el-popper.global-input-search-popover {
background: rgba(6, 66, 88, 0.8);
border: 1px solid rgba(42, 217, 253, 0.6);
position: relative;
padding-top: 36px;
transform: translateY(24px);
// margin-top: 6vh;
.body {
.title {
background: linear-gradient(90deg,
#237e9b 0%,
rgba(23, 145, 184, 0) 100%);
padding: 3px 9px;
position: absolute;
top: 0;
left: 0;
width: 100%;
}
.close {
padding: 3px 9px;
cursor: pointer;
position: absolute;
top: 0;
right: 0;
width: fit-content;
}
}
}
</style>
<style lang="scss" scoped>
.image {
width: 50vw;
height: 65vh;
}
.HomeVectorControl {
.btn {
padding: 9px;
background: linear-gradient(180deg, #152e3c 0%, #163a45 100%);
border-radius: 4px;
overflow: hidden;
height: unset;
border: 1px solid rgba(40, 144, 167, 1);
}
.btn-active {
background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
}
}
</style>

7
ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue

@ -20,6 +20,8 @@
<HomeFilter class="item" />
<HomeFrame class="item" />
<HomeVector class="item" />
<HomeVectorControl class="item" />
<HomeFrameControl class="item" />
</div>
<ConditionStatistics class="right card-menu" />
</div>
@ -46,6 +48,9 @@ import AMapContainer from "./components/AMapContainer/index.vue";
import HomeFilter from "./components/HomeFilter/index.vue";
import HomeFrame from "./components/HomeFrame/index.vue";
import HomeVector from "./components/HomeVector/index.vue";
import HomeFrameControl from "./components/HomeFrameControl/index.vue";
import HomeVectorControl from "./components/HomeVectorControl/index.vue";
import Button from '@screen/components/Buttons/Button.vue';
import Vue from "vue";
// import InfoBoard from "./components/InfoBoard"
@ -62,6 +67,8 @@ export default {
HomeFilter,
HomeFrame,
HomeVector,
HomeFrameControl,
HomeVectorControl,
// InfoBoard
},
data() {

Loading…
Cancel
Save