dataease/frontend/src/views/panel/ViewSelect/index.vue

140 lines
3.4 KiB
Vue
Raw Normal View History

2021-03-23 13:58:49 +08:00
<template>
<el-col>
<el-row style="margin-top: 5px">
<el-row style="margin-left: 5px;margin-right: 5px">
<el-input
v-model="templateFilterText"
placeholder="输入关键字进行过滤"
size="mini"
clearable
prefix-icon="el-icon-search"
/>
</el-row>
<el-row style="margin-top: 5px">
<el-tree
ref="templateTree"
:default-expanded-keys="defaultExpandedKeys"
:data="data"
node-key="id"
:props="defaultProps"
draggable
:allow-drop="allowDrop"
:allow-drag="allowDrag"
:expand-on-click-node="true"
:filter-node-method="filterNode"
:highlight-current="true"
@node-drag-start="handleDragStart"
@node-click="nodeClick"
>
<span slot-scope="{ node, data }" class="custom-tree-node">
<span>
<span v-if="data.type==='scene'">
<el-button
icon="el-icon-folder"
type="text"
/>
</span>
<span v-else>
<svg-icon :icon-class="data.type" style="width: 14px;height: 14px" />
</span>
<span style="margin-left: 6px;font-size: 14px">{{ data.name }}</span>
</span>
</span>
</el-tree>
</el-row>
<el-row v-if="detailItem&&detailItem.snapshot" class="detail-class">
<el-card class="filter-card-class">
<div slot="header" class="button-div-class">
<span>{{ detailItem.name }}</span>
</div>
<img draggable="false" class="view-list-thumbnails" :src="detailItem.snapshot" alt="">
</el-card>
</el-row>
</el-row>
</el-col>
2021-03-23 13:58:49 +08:00
</template>
<script>
import { tree, findOne } from '@/api/panel/view'
2021-03-23 13:58:49 +08:00
export default {
name: 'ViewSelect',
data() {
return {
templateFilterText: '',
defaultExpandedKeys: [],
2021-03-23 13:58:49 +08:00
defaultProps: {
children: 'children',
label: 'name'
},
data: [],
showdetail: false,
detailItem: null
}
},
watch: {
templateFilterText(val) {
this.$refs.templateTree.filter(val)
2021-03-23 13:58:49 +08:00
}
},
created() {
this.loadData()
},
methods: {
filterNode(value, data) {
if (!value) return true
return data.name.indexOf(value) !== -1
},
nodeClick(data, node) {
findOne(data.id).then(res => {
this.detailItem = res.data
})
},
2021-03-23 13:58:49 +08:00
loadData() {
const param = {}
tree(param).then(res => {
2021-03-23 14:05:32 +08:00
this.data = res.data
2021-03-23 13:58:49 +08:00
})
},
2021-03-25 19:16:32 +08:00
handleDragStart(node, ev) {
ev.dataTransfer.effectAllowed = 'copy'
const dataTrans = {
type: 'view',
id: node.data.id
}
ev.dataTransfer.setData('componentInfo', JSON.stringify(dataTrans))
},
// 判断节点能否被拖拽
allowDrag(draggingNode) {
if (draggingNode.data.type === 'scene') {
return false
} else {
return true
}
},
allowDrop(draggingNode, dropNode, type) {
return false
2021-03-23 13:58:49 +08:00
}
2021-03-25 19:16:32 +08:00
2021-03-23 13:58:49 +08:00
}
}
</script>
<style lang="scss" scoped>
2021-03-25 19:16:32 +08:00
.top-div-class {
2021-03-23 13:58:49 +08:00
max-height: calc(100vh - 335px);
width: 100%;
position: fixed;
overflow-y : auto
2021-03-25 19:16:32 +08:00
}
.detail-class {
2021-03-23 13:58:49 +08:00
width: 100%;
position: fixed;
bottom: 0px;
2021-03-25 19:16:32 +08:00
}
.view-list-thumbnails {
2021-03-23 13:58:49 +08:00
width: 100%;
height: 100%;
2021-03-25 19:16:32 +08:00
}
2021-03-23 13:58:49 +08:00
</style>