Browse Source

Merge remote-tracking branch 'origin/master'

master
liupeng 7 months ago
parent
commit
ae92a9c4e1
  1. 2
      src/designer/Model2DEditor.vue
  2. 31
      src/designer/viewWidgets/IWidgets.ts
  3. 70
      src/designer/viewWidgets/alarm/AlarmView.vue
  4. 107
      src/designer/viewWidgets/logger/LoggerView.vue
  5. 82
      src/designer/viewWidgets/modeltree/ModeltreeView.vue
  6. 99
      src/designer/viewWidgets/modeltree/ModeltreeViewJs.js
  7. 14
      src/designer/viewWidgets/monitor/MonitorView.vue
  8. 107
      src/designer/viewWidgets/property/PropertyView.vue
  9. 28
      src/designer/viewWidgets/script/ScriptView.vue
  10. 67
      src/designer/viewWidgets/task/TaskView.vue
  11. 34
      src/designer/viewWidgets/toolbox/ToolboxView.vue
  12. 49
      src/views/ModelMain.vue

2
src/designer/ModelEditor.vue → src/designer/Model2DEditor.vue

@ -39,7 +39,7 @@
import { renderIcon } from '@/utils/webutils.ts'
export default {
name: 'ModelEditor',
name: 'Model2DEditor',
components: {
renderIcon
},

31
src/designer/viewWidgets/IWidgets.ts

@ -0,0 +1,31 @@
import { defineComponent } from 'vue'
import { renderIcon } from '@/utils/webutils.js'
export type IWidgetData = {
/**
*
*/
isActivated: boolean
}
export default defineComponent({
activated() {
this.isActivated = true
console.log('activated', this.$.type.name)
},
deactivated() {
this.isActivated = false
},
emits: ['close'],
data() {
return {
isActivated: false
} as IWidgetData
},
methods: {
renderIcon,
closeMe() {
this.$emit('close')
}
}
})

70
src/designer/viewWidgets/alarm/AlarmView.vue

@ -1,3 +1,71 @@
<template>
AlarmView
<div class="title">
告警面板
<el-input v-model="searchKeyword" size="small" style="width: 240px" placeholder="Search">
<template #prefix>
<component :is="renderIcon('element Search')"></component>
</template>
</el-input>
<span class="close" @click="closeMe">
<component :is="renderIcon('element Close')" />
</span>
</div>
<div class="calc-right-panel">
AlarmView_1<br />
AlarmView_2<br />
AlarmView_3<br />
AlarmView_4<br />
AlarmView_5<br />
AlarmView_6<br />
AlarmView_7<br />
AlarmView_8<br />
AlarmView_9<br />
AlarmView_10<br />
AlarmView_11<br />
AlarmView_12<br />
AlarmView_13<br />
AlarmView_14<br />
AlarmView_15<br />
AlarmView_16<br />
AlarmView_17<br />
AlarmView_18<br />
AlarmView_19<br />
AlarmView_20<br />
AlarmView_21<br />
AlarmView_22<br />
AlarmView_23<br />
AlarmView_24<br />
AlarmView_25<br />
AlarmView_26<br />
AlarmView_27<br />
AlarmView_28<br />
AlarmView_29<br />
AlarmView_30<br />
AlarmView_31<br />
AlarmView_32<br />
AlarmView_33<br />
AlarmView_34<br />
AlarmView_35<br />
AlarmView_36<br />
AlarmView_37<br />
AlarmView_38<br />
AlarmView_39<br />
AlarmView_40<br />
</div>
</template>
<script>
import IWidgets from '../IWidgets.js'
export default {
name: 'AlarmView',
webSocketSubscribe: ['alarm'],
emits: ['close'],
mixins: [IWidgets],
data() {
return {
searchKeyword: ''
}
}
}
</script>

107
src/designer/viewWidgets/logger/LoggerView.vue

@ -1,42 +1,69 @@
<template>
LoggerView1<br />
LoggerView2<br />
LoggerView3<br />
LoggerView4<br />
LoggerView5<br />
LoggerView6<br />
LoggerView7<br />
LoggerView8<br />
LoggerView9<br />
LoggerView10<br />
LoggerView11<br />
LoggerView12<br />
LoggerView13<br />
LoggerView14<br />
LoggerView15<br />
LoggerView16<br />
LoggerView17<br />
LoggerView18<br />
LoggerView19<br />
LoggerView20<br />
LoggerView21<br />
LoggerView22<br />
LoggerView23<br />
LoggerView24<br />
LoggerView25<br />
LoggerView26<br />
LoggerView27<br />
LoggerView28<br />
LoggerView29<br />
LoggerView30<br />
LoggerView31<br />
LoggerView32<br />
LoggerView33<br />
LoggerView34<br />
LoggerView35<br />
LoggerView36<br />
LoggerView37<br />
LoggerView38<br />
LoggerView39<br />
LoggerView40<br />
<div class="title">
系统日志
<el-input v-model="searchKeyword" size="small" style="width: 240px" placeholder="Search">
<template #prefix>
<component :is="renderIcon('element Search')"></component>
</template>
</el-input>
<span class="close" @click="closeMe">
<component :is="renderIcon('element Close')"></component>
</span>
</div>
<div class="calc-bottom-panel">
LoggerView1<br />
LoggerView2<br />
LoggerView3<br />
LoggerView4<br />
LoggerView5<br />
LoggerView6<br />
LoggerView7<br />
LoggerView8<br />
LoggerView9<br />
LoggerView10<br />
LoggerView11<br />
LoggerView12<br />
LoggerView13<br />
LoggerView14<br />
LoggerView15<br />
LoggerView16<br />
LoggerView17<br />
LoggerView18<br />
LoggerView19<br />
LoggerView20<br />
LoggerView21<br />
LoggerView22<br />
LoggerView23<br />
LoggerView24<br />
LoggerView25<br />
LoggerView26<br />
LoggerView27<br />
LoggerView28<br />
LoggerView29<br />
LoggerView30<br />
LoggerView31<br />
LoggerView32<br />
LoggerView33<br />
LoggerView34<br />
LoggerView35<br />
LoggerView36<br />
LoggerView37<br />
LoggerView38<br />
LoggerView39<br />
LoggerView40<br />
</div>
</template>
<script>
import IWidgets from '../IWidgets.js'
export default {
name: 'LoggerView',
webSocketSubscribe: ['logs'],
mixins: [IWidgets],
data() {
return {
searchKeyword: ''
}
}
}
</script>

82
src/designer/viewWidgets/modeltree/ModeltreeView.vue

@ -1,80 +1,28 @@
<template>
<div class="title">
<el-cascader placeholder="选择楼层" size="small" v-model="currentLevel" :options="allLevels" filterable />
<el-input v-model="searchKeyword" size="small" style="width: 240px" placeholder="Search">
<el-input v-model="searchKeyword" size="small" style="flex-grow: 1; margin: 0 5px 0 0;" placeholder="Search">
<template #prefix>
<component :is="renderIcon('element Search')"></component>
</template>
</el-input>
<span class="close" @click="closeMe('hideLeft')">
<component :is="renderIcon('element Close')" />
</span>
<el-cascader placeholder="选择楼层" size="small" v-model="currentLevel" :options="allLevels" filterable
style="margin-right: 5px; width: 150px;" />
</div>
<div class="calc-left-panel">
ModeltreeView1<br />
ModeltreeView2<br />
ModeltreeView3<br />
ModeltreeView4<br />
ModeltreeView5<br />
ModeltreeView6<br />
ModeltreeView7<br />
ModeltreeView8<br />
ModeltreeView9<br />
ModeltreeView10<br />
ModeltreeView11<br />
ModeltreeView12<br />
ModeltreeView13<br />
ModeltreeView14<br />
ModeltreeView15<br />
ModeltreeView16<br />
ModeltreeView17<br />
ModeltreeView18<br />
ModeltreeView19<br />
ModeltreeView20<br />
ModeltreeView21<br />
ModeltreeView22<br />
ModeltreeView23<br />
ModeltreeView24<br />
ModeltreeView25<br />
ModeltreeView26<br />
ModeltreeView27<br />
ModeltreeView28<br />
ModeltreeView29<br />
ModeltreeView30<br />
ModeltreeView31<br />
ModeltreeView32<br />
ModeltreeView33<br />
ModeltreeView34<br />
ModeltreeView35<br />
ModeltreeView36<br />
ModeltreeView37<br />
ModeltreeView38<br />
ModeltreeView39<br />
ModeltreeView40<br />
<el-tree draggable node-key="id" :highlight-current="true"
:data="treedata" :expand-on-click-node="false" :auto-expand-parent="true"
:allow-drop="allowDrop" :allow-drag="allowDrag"
@node-drag-start="handleDragStart"
@node-drag-enter="handleDragEnter"
@node-drag-leave="handleDragLeave"
@node-drag-over="handleDragOver"
@node-drag-end="handleDragEnd"
@node-drop="handleDrop"
/>
</div>
</template>
<script>
import { renderIcon } from '@/utils/webutils.js'
import ModeltreeViewJs from './ModeltreeViewJs.js'
export default {
name: 'ModeltreeView',
emits: ['close'],
data() {
return {
currentLevel: '',
searchKeyword: ''
}
},
methods: {
renderIcon,
closeMe(name) {
this.$emit('close', name)
}
},
computed: {
allLevels() {
return designer.allLevels
}
}
}
export default ModeltreeViewJs
</script>

99
src/designer/viewWidgets/modeltree/ModeltreeViewJs.js

@ -0,0 +1,99 @@
import { defineComponent } from 'vue'
import { renderIcon } from '@/utils/webutils.js'
import IWidgets from '../IWidgets.js'
export default defineComponent({
name: 'ModeltreeView',
mixins: [IWidgets],
data() {
return {
currentLevel: '',
searchKeyword: '',
treedata: data
}
},
methods: {
allowDrop(event) {
return true
},
allowDrag(event) {
return true
},
handleDragStart() {
},
handleDragEnter() {
},
handleDragLeave() {
},
handleDragOver() {
},
handleDragEnd() {
},
handleDrop() {
}
},
computed: {
allLevels() {
return designer.allLevels
}
}
})
const data = [
{
label: 'Level one 1',
children: [
{
label: 'Level two 1-1',
children: [
{
label: 'Level three 1-1-1'
}
]
}
]
},
{
label: 'Level one 2',
children: [
{
label: 'Level two 2-1',
children: [
{
label: 'Level three 2-1-1'
}
]
},
{
label: 'Level two 2-2',
children: [
{
label: 'Level three 2-2-1'
}
]
}
]
},
{
label: 'Level one 3',
children: [
{
label: 'Level two 3-1',
children: [
{
label: 'Level three 3-1-1'
}
]
},
{
label: 'Level two 3-2',
children: [
{
label: 'Level three 3-2-1'
}
]
}
]
}
]

14
src/designer/viewWidgets/monitor/MonitorView.vue

@ -6,7 +6,7 @@
<component :is="renderIcon('element Search')"></component>
</template>
</el-input>
<span class="close" @click="closeMe('hideLeft')">
<span class="close" @click="closeMe">
<component :is="renderIcon('element Close')" />
</span>
</div>
@ -107,11 +107,12 @@
</div>
</template>
<script>
import { renderIcon } from '@/utils/webutils.js'
import IWidgets from '../IWidgets.js'
export default {
name: 'MonitorView',
emits: ['close'],
webSocketSubscribe: ['deviceStatus'],
mixins: [IWidgets],
data() {
return {
searchKeyword: '',
@ -122,12 +123,7 @@ export default {
idle: 0
}
},
methods: {
renderIcon,
closeMe(name) {
this.$emit('close', name)
}
}
methods: {}
}
</script>
<style lang="less">

107
src/designer/viewWidgets/property/PropertyView.vue

@ -1,44 +1,69 @@
<template>
PropertyView1<br />
PropertyView2<br />
PropertyView3<br />
PropertyView4<br />
PropertyView5<br />
PropertyView6<br />
PropertyView7<br />
PropertyView8<br />
PropertyView9<br />
PropertyView10<br />
PropertyView11<br />
PropertyView12<br />
PropertyView13<br />
PropertyView14<br />
PropertyView15<br />
PropertyView16<br />
PropertyView17<br />
PropertyView18<br />
PropertyView19<br />
PropertyView20<br />
PropertyView21<br />
PropertyView22<br />
PropertyView23<br />
PropertyView24<br />
PropertyView25<br />
PropertyView26<br />
PropertyView27<br />
PropertyView28<br />
PropertyView29<br />
PropertyView30<br />
PropertyView31<br />
PropertyView32<br />
PropertyView33<br />
PropertyView34<br />
PropertyView35<br />
PropertyView36<br />
PropertyView37<br />
PropertyView38<br />
PropertyView39<br />
PropertyView40<br />
<div class="title">
属性面板
<el-input v-model="searchKeyword" size="small" style="width: 240px" placeholder="Search">
<template #prefix>
<component :is="renderIcon('element Search')"></component>
</template>
</el-input>
<span class="close" @click="closeMe('hideReft')">
<component :is="renderIcon('element Close')" />
</span>
</div>
<div class="calc-right-panel">
PropertyView1<br />
PropertyView2<br />
PropertyView3<br />
PropertyView4<br />
PropertyView5<br />
PropertyView6<br />
PropertyView7<br />
PropertyView8<br />
PropertyView9<br />
PropertyView10<br />
PropertyView11<br />
PropertyView12<br />
PropertyView13<br />
PropertyView14<br />
PropertyView15<br />
PropertyView16<br />
PropertyView17<br />
PropertyView18<br />
PropertyView19<br />
PropertyView20<br />
PropertyView21<br />
PropertyView22<br />
PropertyView23<br />
PropertyView24<br />
PropertyView25<br />
PropertyView26<br />
PropertyView27<br />
PropertyView28<br />
PropertyView29<br />
PropertyView30<br />
PropertyView31<br />
PropertyView32<br />
PropertyView33<br />
PropertyView34<br />
PropertyView35<br />
PropertyView36<br />
PropertyView37<br />
PropertyView38<br />
PropertyView39<br />
PropertyView40<br />
</div>
</template>
<script setup lang="ts">
<script>
import IWidgets from '../IWidgets.js'
export default {
name: 'PropertyView',
mixins: [IWidgets],
data() {
return {
searchKeyword: ''
}
}
}
</script>

28
src/designer/viewWidgets/script/ScriptView.vue

@ -1,3 +1,29 @@
<template>
ScriptView
<div class="title">
脚本编辑
<el-input v-model="searchKeyword" size="small" style="width: 240px" placeholder="Search">
<template #prefix>
<component :is="renderIcon('element Search')"></component>
</template>
</el-input>
<span class="close" @click="closeMe">
<component :is="renderIcon('element Close')"></component>
</span>
</div>
<div class="calc-bottom-panel">
ScriptView
</div>
</template>
<script>
import IWidgets from '@/designer/viewWidgets/IWidgets.js'
export default {
name: 'ScriptView',
mixins: [IWidgets],
data() {
return {
searchKeyword: ''
}
}
}
</script>

67
src/designer/viewWidgets/task/TaskView.vue

@ -1,22 +1,49 @@
<template>
TaskView1<br />
TaskView2<br />
TaskView3<br />
TaskView4<br />
TaskView5<br />
TaskView6<br />
TaskView7<br />
TaskView8<br />
TaskView9<br />
TaskView10<br />
TaskView11<br />
TaskView12<br />
TaskView13<br />
TaskView14<br />
TaskView15<br />
TaskView16<br />
TaskView17<br />
TaskView18<br />
TaskView19<br />
TaskView20<br />
<div class="title">
任务监视
<el-input v-model="searchKeyword" size="small" style="width: 240px" placeholder="Search">
<template #prefix>
<component :is="renderIcon('element Search')"></component>
</template>
</el-input>
<span class="close" @click="closeMe">
<component :is="renderIcon('element Close')"></component>
</span>
</div>
<div class="calc-bottom-panel">
TaskView1<br />
TaskView2<br />
TaskView3<br />
TaskView4<br />
TaskView5<br />
TaskView6<br />
TaskView7<br />
TaskView8<br />
TaskView9<br />
TaskView10<br />
TaskView11<br />
TaskView12<br />
TaskView13<br />
TaskView14<br />
TaskView15<br />
TaskView16<br />
TaskView17<br />
TaskView18<br />
TaskView19<br />
TaskView20<br />
</div>
</template>
<script>
import IWidgets from '../IWidgets.js'
export default {
name: 'TaskView',
webSocketSubscribe: ['task'],
mixins: [IWidgets],
data() {
return {
searchKeyword: ''
}
}
}
</script>

34
src/designer/viewWidgets/toolbox/ToolboxView.vue

@ -6,7 +6,7 @@
<component :is="renderIcon('element Search')"></component>
</template>
</el-input>
<span class="close" @click="closeMe('hideLeft')">
<span class="close" @click="closeMe">
<component :is="renderIcon('element Close')" />
</span>
</div>
@ -15,7 +15,7 @@
@open="handleOpen"
@close="handleClose"
:default-openeds="defaultExpandedKeys"
>
>
<el-sub-menu v-for="itemType in itemTypes" :title="itemType.label" :index="itemType.name">
<template #title>
<component :is="renderIcon(itemType.icon)" />
@ -32,11 +32,12 @@
</div>
</template>
<script>
import { renderIcon } from '@/utils/webutils.js'
import IWidgets from '../IWidgets.js'
export default {
name: 'ToolboxView',
emits: ['close'],
mixins: [IWidgets],
data() {
return {
searchKeyword: '',
@ -113,7 +114,6 @@ export default {
}
},
methods: {
renderIcon,
closeMe() {
this.$emit('close')
},
@ -124,34 +124,34 @@ export default {
console.log(key, keyPath)
},
updateFilteredItemsAndExpand() {
const expandedKeys = [];
const expandedKeys = []
this.itemTypes.forEach(itemType => {
const filteredChildren = itemType.children.filter(item =>
item.label.includes(this.searchKeyword) || item.name.includes(this.searchKeyword));
item.label.includes(this.searchKeyword) || item.name.includes(this.searchKeyword))
if (filteredChildren.length > 0) {
expandedKeys.push(itemType.name);
expandedKeys.push(itemType.name)
}
itemType.children = filteredChildren;
});
this.defaultExpandedKeys = expandedKeys;
itemType.children = filteredChildren
})
this.defaultExpandedKeys = expandedKeys
}
},
watch:{
watch: {
searchKeyword(newVal) {
if (!newVal) {
//
this.itemTypes.forEach(itemType => {
itemType.children = this.originalItemTypes.find(originalItemType => originalItemType.name === itemType.name).children;
});
this.defaultExpandedKeys = [];
itemType.children = this.originalItemTypes.find(originalItemType => originalItemType.name === itemType.name).children
})
this.defaultExpandedKeys = []
} else {
this.updateFilteredItemsAndExpand();
this.updateFilteredItemsAndExpand()
}
}
},
mounted() {
// itemTypes
this.originalItemTypes = JSON.parse(JSON.stringify(this.itemTypes));
this.originalItemTypes = JSON.parse(JSON.stringify(this.itemTypes))
}
}
</script>

49
src/views/ModelMain.vue

@ -43,14 +43,16 @@
<SplitArea v-show="!hideLeft" class="section-left" :class="{'hidden-split':hideLeft}"
:size="hideLeft ? 0 : sectionLeftSize">
<div class="section-item-wrap">
<component v-if="calcLeftPanel?.component" :is="calcLeftPanel.component"
@close="closeMe('hideLeft')" />
<keep-alive>
<component v-if="calcLeftPanel?.component" :is="calcLeftPanel.component"
@close="closeMe('hideLeft')" :key="calcLeftPanel?.name" />
</keep-alive>
</div>
</SplitArea>
<SplitArea class="section-center" :class="{'hidden-split':hideRight}" :size="calcCenterSize">
<el-tabs type="card" class="section-tabs" v-model="centerActiveName" @tab-click="handleCenterTabClick">
<el-tab-pane label="2D视图" name="ModelEditor" lazy>
<ModelEditor />
<Model2DEditor />
</el-tab-pane>
<el-tab-pane label="3D视图" name="ModelView" lazy>
<ModelView />
@ -65,41 +67,20 @@
</SplitArea>
<SplitArea v-show="!hideRight" class="section-right" :size="hideRight ? 0 : sectionRightSize">
<div class="section-item-wrap">
<div class="title">
<component :is="calcRightPanel?.icon" />
{{ calcRightPanel?.title }}
<el-input v-model="sectionLeftSearch" size="small" style="width: 240px" placeholder="Search">
<template #prefix>
<component :is="renderIcon('element Search')"></component>
</template>
</el-input>
<span class="close" @click="closeMe('hideReft')"><component
:is="renderIcon('element Close')"></component></span>
</div>
<div class="calc-right-panel">
<component v-if="calcRightPanel?.component" :is="calcRightPanel.component" />
</div>
<keep-alive>
<component v-if="calcRightPanel?.component" :is="calcRightPanel.component"
@close="()=>closeMe('hideRight')" :key="calcRightPanel.name" />
</keep-alive>
</div>
</SplitArea>
</Split>
</SplitArea>
<SplitArea v-show="!hideBottom" :class="['section-bottom']" :size="hideBottom ? 0 : bottomSize" :min-size="0">
<div class="section-item-wrap">
<div class="title">
<component :is="calcBottomPanel?.icon" />
{{ calcBottomPanel?.title }}
<el-input v-model="sectionLeftSearch" size="small" style="width: 240px" placeholder="Search">
<template #prefix>
<component :is="renderIcon('element Search')"></component>
</template>
</el-input>
<span class="close" @click="closeMe('hideBottom')">
<component :is="renderIcon('element Close')"></component>
</span>
</div>
<div class="calc-bottom-panel">
<component v-if="calcBottomPanel?.component" :is="calcBottomPanel.component" />
</div>
<keep-alive>
<component v-if="calcBottomPanel?.component" :is="calcBottomPanel.component"
@close="()=>closeMe('hideBottom')" :key="calcBottomPanel.name" />
</keep-alive>
</div>
</SplitArea>
</Split>
@ -126,13 +107,13 @@ import './ModelMain.less'
import { ModelMainInit, ModelMainMounted, ModelMainUnmounted } from '@/views/ModelMainInit.js'
import { getRootMenu } from '@/runtime/DefineMenu.js'
import { getWidgetByName, getWidgetBySide, getAllWidget } from '@/runtime/DefineWidget.js'
import ModelEditor from '@/designer/ModelEditor.vue'
import Model2DEditor from '@/designer/Model2DEditor.vue'
import ModelView from '@/designer/ModelView.vue'
import { normalizeShortKey } from '@/utils/webutils.ts'
export default {
components: { ModelEditor, ModelView, Split, SplitArea },
components: { Model2DEditor, ModelView, Split, SplitArea },
created() {
ModelMainInit()
},

Loading…
Cancel
Save