17 changed files with 1626 additions and 481 deletions
@ -0,0 +1,61 @@ |
|||
import request from '@/utils/request.js'; |
|||
|
|||
export function addOrEditDirectoryApi(options) { |
|||
return request({ |
|||
url: `/map/layerDir/saveDir`, |
|||
method: 'post', |
|||
params: { |
|||
id: options.id || '', |
|||
name: options.name, |
|||
orderNm: -1, |
|||
parentId: 'root' |
|||
} |
|||
}); |
|||
} |
|||
|
|||
export function getDirectoryApi(data) { |
|||
return request({ |
|||
url: `/map/layerDir/getAllTreeDir`, |
|||
method: 'post', |
|||
data |
|||
}); |
|||
} |
|||
|
|||
export function deleteDirectoryApi(id) { |
|||
return request({ |
|||
url: `/map/layerDir/deleteDir`, |
|||
method: 'delete', |
|||
params: { |
|||
dirId: id |
|||
} |
|||
}); |
|||
} |
|||
|
|||
// 增加或更改图层
|
|||
export function saveOrUpdateLayerApi(paramInfo) { |
|||
return request({ |
|||
url: `/map/layer/saveOrUpdateLayer`, |
|||
method: 'post', |
|||
headers: { |
|||
'Content-Type': 'application/json' |
|||
}, |
|||
data: paramInfo |
|||
}); |
|||
} |
|||
|
|||
// 获取图层列表
|
|||
export function getLayerListApi(data) { |
|||
return request({ |
|||
url: `/map/layer/getLayers`, |
|||
method: 'post', |
|||
data |
|||
}); |
|||
} |
|||
|
|||
// 删除图层
|
|||
export function deleteLayerApi(id) { |
|||
return request({ |
|||
url: `/map/layer/deleteLayer/${id}`, |
|||
method: 'delete' |
|||
}); |
|||
} |
@ -0,0 +1,332 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<el-header> |
|||
<i class="el-icon-back" @click="goBack"></i> |
|||
资源目录管理 |
|||
<span>/详情</span> |
|||
</el-header> |
|||
<el-container> |
|||
<div class="top"> |
|||
<span class="title">图层资源目录详情</span> |
|||
<div class="directoryInfo"> |
|||
<span> 图层资源目录名称:{{ directoryInfo.name }}</span> |
|||
<span> 图层资源目录编号: {{ directoryInfo.id }}</span> |
|||
<span> 图层数量: {{ pageOptions.total }}</span> |
|||
<span> 创建时间: {{ directoryInfo.pubDate }}</span> |
|||
<span> 创建人:{{ directoryInfo.createUser }} </span> |
|||
</div> |
|||
</div> |
|||
<div class="middle"> |
|||
<el-button type="primary" plain @click="dialogFormVisible = true">添加图层</el-button> |
|||
<el-dialog :title="dialogTitle" :visible.sync="dialogFormVisible"> |
|||
<el-form :model="editDataInfoForm"> |
|||
<el-form-item label="服务类型" style="font-size: 1rem" :label-width="'120px'"> |
|||
<el-select style="width: 80%" v-model="editDataInfoForm.serviceType" placeholder="请选择"> |
|||
<el-option |
|||
v-for="item in serviceTypeOptions" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="服务名称" prop="serviceName" style="font-size: 1rem" :label-width="'120px'"> |
|||
<el-input v-model.trim="editDataInfoForm.serviceName" style="width: 80%"></el-input> |
|||
</el-form-item> |
|||
<el-form-item label="服务别名" prop="serviceNameAlias" style="font-size: 1rem" :label-width="'120px'"> |
|||
<el-input v-model.trim="editDataInfoForm.serviceNameAlias" style="width: 80%"></el-input> |
|||
</el-form-item> |
|||
<el-form-item label="服务地址" prop="serviceUrl" style="font-size: 1rem" :label-width="'120px'"> |
|||
<el-input v-model.trim="editDataInfoForm.serviceUrl" style="width: 80%"></el-input> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="editDataInfoForm.serviceType === '030300'" |
|||
label="服务索引" |
|||
prop="serviceIndex" |
|||
style="font-size: 1rem" |
|||
:label-width="'120px'" |
|||
> |
|||
<el-input v-model="editDataInfoForm.serviceIndex" style="width: 80%"></el-input> |
|||
</el-form-item> |
|||
</el-form> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button @click="dialogFormVisible = false">取 消</el-button> |
|||
<el-button type="primary" @click="saveOrUpdateLayer">确 定</el-button> |
|||
</div> |
|||
</el-dialog> |
|||
<div class="keyword-filter"> |
|||
<el-input class="keyword-input" placeholder="请输入内容" v-model="keyword" clearable> </el-input> |
|||
<el-button class="search-btn">搜索</el-button> |
|||
</div> |
|||
</div> |
|||
<div class="content"> |
|||
<el-table :data="tableData" stripe style="width: 100%"> |
|||
<el-table-column |
|||
type="index" |
|||
:index="(index) => index + (pageOptions.pageNum - 1) * pageOptions.pageSize + 1" |
|||
label="序号" |
|||
width="50" |
|||
header-align="center" |
|||
></el-table-column> |
|||
<el-table-column prop="id" label="图层资源目录编号" width="350"> </el-table-column> |
|||
<el-table-column prop="serviceName" label="图层资源目录名称"> </el-table-column> |
|||
<el-table-column prop="pubDate" label="创建时间"> </el-table-column> |
|||
<el-table-column prop="createUser" label="创建人"> </el-table-column> |
|||
<el-table-column label="操作"> |
|||
<template slot-scope="scope"> |
|||
<el-button size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button> |
|||
<el-button size="mini" type="danger" @click="handleDelete(scope.row)">删除</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-pagination |
|||
background |
|||
layout="prev, pager, next" |
|||
:current-page.sync="pageOptions.pageNum" |
|||
:total="pageOptions.total" |
|||
:page-size="pageOptions.pageSize" |
|||
@current-change="getLayerList" |
|||
> |
|||
</el-pagination> |
|||
</div> |
|||
</el-container> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import debounce from 'lodash/debounce'; |
|||
import { saveOrUpdateLayerApi, getLayerListApi, deleteLayerApi } from '@/api/aiSupervision/layerConfigApi.js'; |
|||
export default { |
|||
props: ['directoryInfo'], |
|||
data() { |
|||
return { |
|||
tableData: [], |
|||
editDataInfoForm: { |
|||
serviceType: '', //服务类型,wms/wmts/wfs/3d tiles/terrain |
|||
serviceUrl: '', //服务地址 |
|||
serviceName: '', //服务名称 |
|||
serviceNameAlias: '', //服务别名 |
|||
serviceIndex: '', //服务索引 |
|||
dirId: '', |
|||
dirNames: '', |
|||
tileSize: '256' |
|||
}, |
|||
dialogTitle: '添加图层', |
|||
serviceTypeOptions: [ |
|||
{ |
|||
value: '021102', |
|||
label: 'ArcGISRest图层' |
|||
}, |
|||
{ |
|||
value: '030300', |
|||
label: 'WFS200' |
|||
}, |
|||
{ |
|||
value: '113200', |
|||
label: 'S3M图层' |
|||
}, |
|||
{ |
|||
value: '', |
|||
label: 'XYZ底图' |
|||
} |
|||
], |
|||
pageOptions: { |
|||
pageNum: 1, |
|||
pageSize: 8, |
|||
total: 0 |
|||
}, |
|||
dialogFormVisible: false, //是否显示对话框 |
|||
keyword: '' |
|||
}; |
|||
}, |
|||
mounted() { |
|||
this.initData(); |
|||
this.getLayerList(); |
|||
}, |
|||
methods: { |
|||
goBack() { |
|||
this.$emit('goback'); |
|||
}, |
|||
handleEdit(index, row) { |
|||
this.editDataInfoForm.id = row.id; |
|||
this.editDataInfoForm.serviceType = row.serviceType; |
|||
this.editDataInfoForm.serviceName = row.serviceName; |
|||
this.editDataInfoForm.serviceNameAlias = row.serviceNameAlias; |
|||
this.editDataInfoForm.serviceUrl = row.serviceUrl; |
|||
this.editDataInfoForm.serviceIndex = row.serviceIndex; |
|||
this.dialogTitle = '编辑图层'; |
|||
this.dialogFormVisible = true; |
|||
}, |
|||
|
|||
handleDelete(row) { |
|||
this.$confirm('删除图层将同时删除该图层资源以及关联的图层数据,删除后将不可恢复,是否继续删除?', '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}) |
|||
.then(async () => { |
|||
const res = await deleteLayerApi(row.id); |
|||
if (res.success) { |
|||
this.getLayerList(); |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}); |
|||
} |
|||
}) |
|||
.catch(() => { |
|||
this.$message({ |
|||
type: 'info', |
|||
message: '已取消删除' |
|||
}); |
|||
}); |
|||
}, |
|||
// 获取图层列表 |
|||
getLayerList() { |
|||
const params = { |
|||
pageNum: this.pageOptions.pageNum, |
|||
pageSize: this.pageOptions.pageSize, |
|||
data: { |
|||
serviceName: this.keyword, |
|||
dirId: this.directoryInfo.id |
|||
}, |
|||
params: { |
|||
orderBy: 'pub_date', |
|||
sortBy: 'asc' |
|||
} |
|||
}; |
|||
getLayerListApi(params).then((res) => { |
|||
this.pageOptions.total = res.total; |
|||
this.tableData = res.records; |
|||
}); |
|||
}, |
|||
async saveOrUpdateLayer() { |
|||
const reg = /^(\w|[\u4e00-\u9fa5]){3,30}$/g; |
|||
if (!reg.test(this.editDataInfoForm.serviceName)) { |
|||
this.$message({ |
|||
type: 'info', |
|||
message: '格式有误,目录名称仅支持中文、数字、字母、下划线,最大长度不超过30' |
|||
}); |
|||
return; |
|||
} |
|||
await saveOrUpdateLayerApi(this.editDataInfoForm); |
|||
this.getLayerList(); |
|||
this.dialogFormVisible = false; |
|||
}, |
|||
initData() { |
|||
this.editDataInfoForm.serviceUrl = ''; |
|||
this.editDataInfoForm.serviceName = ''; |
|||
this.editDataInfoForm.serviceNameAlias = ''; |
|||
this.editDataInfoForm.serviceIndex = ''; |
|||
|
|||
this.editDataInfoForm.serviceType = this.serviceTypeOptions[0].value; |
|||
this.editDataInfoForm.dirId = this.directoryInfo.id; |
|||
this.editDataInfoForm.dirNames = this.directoryInfo.name; |
|||
this.editDataInfoForm.tileSize = '256'; |
|||
this.dialogTitle = '添加图层'; |
|||
} |
|||
}, |
|||
created() { |
|||
// 使用 lodash 的 debounce 函数创建防抖版本 |
|||
this.debouncedGetLayerList = debounce(this.getLayerList, 500); |
|||
}, |
|||
watch: { |
|||
keyword() { |
|||
this.debouncedGetLayerList(); |
|||
}, |
|||
dialogFormVisible(val) { |
|||
if (val === false) { |
|||
this.initData(); |
|||
} |
|||
} |
|||
} |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.app-container { |
|||
display: flex; |
|||
flex-direction: column; |
|||
gap: 15px; |
|||
} |
|||
header, |
|||
.el-container, |
|||
aside { |
|||
background-color: #fff; |
|||
} |
|||
header { |
|||
display: flex; |
|||
align-items: center; |
|||
border-radius: 10px; |
|||
gap: 10px; |
|||
box-shadow: rgba(17, 12, 46, 0.15) 0px 48px 100px 0px; |
|||
.el-icon-back { |
|||
cursor: pointer; |
|||
&:hover { |
|||
color: rgb(135, 231, 140); |
|||
} |
|||
} |
|||
span { |
|||
color: #999; |
|||
font-style: italic; |
|||
font-size: 14px; |
|||
} |
|||
} |
|||
.el-container { |
|||
flex: 1; |
|||
overflow-y: auto; |
|||
display: flex; |
|||
flex-direction: column; |
|||
gap: 10px; |
|||
padding: 20px; |
|||
padding-top: 5px; |
|||
border-radius: 3px; |
|||
box-shadow: rgba(17, 12, 46, 0.15) 0px 48px 100px 0px; |
|||
.top { |
|||
display: flex; |
|||
flex-direction: column; |
|||
gap: 15px; |
|||
padding: 20px 40px; |
|||
width: 100%; |
|||
border-bottom: 2px solid #d9d9d9; |
|||
.title { |
|||
font-weight: bold; |
|||
font-size: 16px; |
|||
} |
|||
.directoryInfo { |
|||
display: grid; |
|||
grid-template-columns: 1fr 1fr 1fr; |
|||
grid-gap: 5px 10px; |
|||
} |
|||
} |
|||
.middle { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
.keyword-filter { |
|||
display: flex; |
|||
border-radius: 4px; |
|||
border: 1px solid #d9d9d9; |
|||
|
|||
::v-deep .el-input__inner { |
|||
border: none; |
|||
} |
|||
.search-btn { |
|||
border: none; |
|||
border-radius: 0px; |
|||
border-left: 1px solid #d9d9d9; |
|||
} |
|||
} |
|||
} |
|||
.content { |
|||
display: flex; |
|||
flex-direction: column; |
|||
gap: 10px; |
|||
justify-content: space-between; |
|||
flex: 1; |
|||
.el-pagination { |
|||
text-align: center; |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -1,3 +1,270 @@ |
|||
<template> |
|||
<div class="app-container">资源目录</div> |
|||
<div class="app-container" v-if="!isShowLayerDetails"> |
|||
<el-header>资源目录管理</el-header> |
|||
<el-container> |
|||
<el-main> |
|||
<div class="top"> |
|||
<el-button type="primary" plain @click="dialogFormVisible = true">新增图层资源目录</el-button> |
|||
<el-dialog title="图层资源目录名称" :visible.sync="dialogFormVisible"> |
|||
<el-form> |
|||
<el-form-item label="目录名称" :label-width="'120px'"> |
|||
<el-input v-model="currentDirectory.name" autocomplete="off"></el-input> |
|||
</el-form-item> |
|||
</el-form> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button @click="closeDialog">取 消</el-button> |
|||
<el-button type="primary" @click="addOrEditDirectory">确 定</el-button> |
|||
</div> |
|||
</el-dialog> |
|||
<div class="keyword-filter"> |
|||
<el-input class="keyword-input" placeholder="请输入内容" v-model="keyword" clearable> </el-input> |
|||
<el-button class="search-btn">搜索</el-button> |
|||
</div> |
|||
</div> |
|||
<div class="table"> |
|||
<el-table :data="tableData" stripe style="width: 100%"> |
|||
<el-table-column |
|||
type="index" |
|||
:index="(index) => index + (pageOptions.pageNum - 1) * pageOptions.pageSize + 1" |
|||
label="序号" |
|||
width="50" |
|||
header-align="center" |
|||
> |
|||
</el-table-column> |
|||
<el-table-column prop="id" label="图层资源目录编号" width="180"> </el-table-column> |
|||
<el-table-column prop="name" label="图层资源目录名称" width="180"> </el-table-column> |
|||
<el-table-column prop="relationSceneCount" label="关联场景" width="100"> </el-table-column> |
|||
<el-table-column prop="pubDate" label="创建时间"> </el-table-column> |
|||
<el-table-column prop="createUser" label="创建人"> </el-table-column> |
|||
<el-table-column label="操作"> |
|||
<template slot-scope="scope"> |
|||
<el-button size="mini" @click="showDetails(scope.$index, scope.row)">详情</el-button> |
|||
<el-button size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button> |
|||
<el-button size="mini" type="danger" @click="handleDelete(scope.row)">删除</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-pagination |
|||
background |
|||
layout="prev, pager, next" |
|||
:current-page.sync="pageOptions.pageNum" |
|||
:total="pageOptions.total" |
|||
:page-size="pageOptions.pageSize" |
|||
@current-change="getDirectory" |
|||
> |
|||
</el-pagination> |
|||
</div> |
|||
</el-main> |
|||
</el-container> |
|||
</div> |
|||
<LayerDetailsVue v-else @goback="isShowLayerDetails = false" :directoryInfo="directoryInfo"></LayerDetailsVue> |
|||
</template> |
|||
|
|||
<script> |
|||
import LayerDetailsVue from './LayerDetails.vue'; |
|||
import debounce from 'lodash/debounce'; |
|||
import { getDirectoryApi, addOrEditDirectoryApi, deleteDirectoryApi } from '@/api/aiSupervision/layerConfigApi.js'; |
|||
export default { |
|||
components: { |
|||
LayerDetailsVue |
|||
}, |
|||
data() { |
|||
return { |
|||
tableData: [], |
|||
currentDirectory: { |
|||
name: '', |
|||
id: null |
|||
}, |
|||
pageOptions: { |
|||
pageNum: 1, |
|||
pageSize: 12, |
|||
total: 0 |
|||
}, |
|||
defaultProps: { |
|||
children: 'children', |
|||
label: 'label' |
|||
}, |
|||
keyword: '', |
|||
dialogFormVisible: false, //是否显示 新增目录 对话框 |
|||
isShowLayerDetails: false, //是否跳转 图层详情界面 |
|||
directoryInfo: null //当前 详情界面 展示的信息对象 |
|||
}; |
|||
}, |
|||
// computed: { |
|||
// dataAfterSearch() { |
|||
// // 按关键字筛 |
|||
// return this.tableData.filter( |
|||
// (data) => !this.keyword || data.name.toLowerCase().includes(this.keyword.toLowerCase()) |
|||
// ); |
|||
// }, |
|||
// filteredData() { |
|||
// // 按页码筛 |
|||
// return this.dataAfterSearch.slice( |
|||
// (this.pageOptions.pageNum - 1) * this.pageOptions.pageSize, |
|||
// this.pageOptions.pageNum * this.pageOptions.pageSize |
|||
// ); |
|||
// } |
|||
// }, |
|||
methods: { |
|||
showDetails(index, row) { |
|||
this.isShowLayerDetails = true; |
|||
this.directoryInfo = row; |
|||
}, |
|||
async getDirectory() { |
|||
const params = { |
|||
pageNum: this.pageOptions.pageNum, |
|||
pageSize: this.pageOptions.pageSize, |
|||
ids: null, |
|||
data: { |
|||
name: this.keyword |
|||
}, |
|||
params: { |
|||
orderBy: 'pub_date', |
|||
sortBy: 'asc' |
|||
} |
|||
}; |
|||
const res = await getDirectoryApi(params); |
|||
this.tableData = res.data.children; |
|||
this.pageOptions.total = res.data.total; |
|||
}, |
|||
|
|||
closeDialog() { |
|||
this.currentDirectory.name = ''; |
|||
this.currentDirectory.id = ''; |
|||
this.dialogFormVisible = false; |
|||
}, |
|||
handleEdit(index, row) { |
|||
console.log(row); |
|||
this.currentDirectory.name = row.name; |
|||
this.currentDirectory.id = row.id; |
|||
this.dialogFormVisible = true; |
|||
}, |
|||
// 新增目录 |
|||
async addOrEditDirectory() { |
|||
const reg = /^(\w|[\u4e00-\u9fa5]){3,30}$/g; |
|||
if (!reg.test(this.currentDirectory.name)) { |
|||
this.$message({ |
|||
type: 'info', |
|||
message: '格式有误,目录名称仅支持中文、数字、字母、下划线,最大长度不超过30' |
|||
}); |
|||
return; |
|||
} |
|||
const res = await addOrEditDirectoryApi(this.currentDirectory); |
|||
if (res.success) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '新增目录成功!' |
|||
}); |
|||
this.getDirectory(); |
|||
} else { |
|||
this.$message({ |
|||
type: 'info', |
|||
message: '新增目录失败' |
|||
}); |
|||
} |
|||
this.closeDialog(); |
|||
}, |
|||
handleDelete(row) { |
|||
this.$confirm( |
|||
'删除目录将同时删除该图层资源目录数据以及关联的图层数据,删除后将不可恢复,是否继续删除?', |
|||
'提示', |
|||
{ |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
} |
|||
) |
|||
.then(async () => { |
|||
const res = await deleteDirectoryApi(row.id); |
|||
if (res.success) { |
|||
this.getDirectory(); |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}); |
|||
} |
|||
}) |
|||
.catch(() => { |
|||
this.$message({ |
|||
type: 'info', |
|||
message: '已取消删除' |
|||
}); |
|||
}); |
|||
} |
|||
}, |
|||
mounted() { |
|||
this.getDirectory(); |
|||
}, |
|||
created() { |
|||
// 使用 lodash 的 debounce 函数创建防抖版本 |
|||
this.debouncedGetDirectory = debounce(this.getDirectory, 500); |
|||
}, |
|||
watch: { |
|||
keyword() { |
|||
this.debouncedGetDirectory(); |
|||
} |
|||
} |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="scss"> |
|||
.app-container { |
|||
display: flex; |
|||
flex-direction: column; |
|||
gap: 15px; |
|||
} |
|||
.el-container { |
|||
flex: 1; |
|||
overflow-y: auto; |
|||
box-shadow: rgba(17, 12, 46, 0.15) 0px 48px 100px 0px; |
|||
border-radius: 10px; |
|||
.el-main { |
|||
display: flex; |
|||
flex-direction: column; |
|||
.top { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
::v-deep .el-dialog__body { |
|||
.el-input__inner { |
|||
width: 500px; |
|||
} |
|||
} |
|||
|
|||
.keyword-filter { |
|||
display: flex; |
|||
border-radius: 4px; |
|||
border: 1px solid #d9d9d9; |
|||
|
|||
::v-deep .el-input__inner { |
|||
border: none; |
|||
} |
|||
.search-btn { |
|||
border: none; |
|||
border-radius: 0px; |
|||
border-left: 1px solid #d9d9d9; |
|||
} |
|||
} |
|||
} |
|||
.table { |
|||
display: flex; |
|||
flex: 1; |
|||
flex-direction: column; |
|||
justify-content: space-evenly; |
|||
.el-pagination { |
|||
text-align: center; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
header, |
|||
.el-container, |
|||
aside { |
|||
background-color: #fff; |
|||
} |
|||
header { |
|||
display: flex; |
|||
align-items: center; |
|||
border-radius: 3px; |
|||
box-shadow: rgba(17, 12, 46, 0.15) 0px 48px 100px 0px; |
|||
} |
|||
</style> |
|||
|
@ -0,0 +1,80 @@ |
|||
<script> |
|||
export default { |
|||
name: 'LayerTree', |
|||
props: { |
|||
data: { |
|||
type: Array, |
|||
default: () => [] |
|||
}, |
|||
defaultCheckedKeys: { |
|||
type: Array, |
|||
default: () => [] |
|||
}, |
|||
showSearch: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
showCheckbox: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
nodeKey: { |
|||
type: String, |
|||
default: 'id' |
|||
}, |
|||
defaultProps: { |
|||
type: Object, |
|||
default: () => ({ |
|||
children: 'children', |
|||
label: 'name' |
|||
}) |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
keyword: '' |
|||
}; |
|||
}, |
|||
watch: { |
|||
keyword(val) { |
|||
this.$refs.tree.filter(val); |
|||
} |
|||
}, |
|||
methods: { |
|||
handleNodeClick(node, data) { |
|||
this.$emit('node-click', node, data); |
|||
}, |
|||
filterNode(value, data) { |
|||
if (!value) return true; |
|||
return data[this.defaultProps.label].indexOf(value) !== -1; |
|||
} |
|||
} |
|||
}; |
|||
</script> |
|||
|
|||
<template> |
|||
<div class="layer-tree-wrapper"> |
|||
<el-input v-show="showSearch" class="search-btn" v-model="keyword" placeholder="请输入搜索内容"></el-input> |
|||
<el-tree |
|||
ref="tree" |
|||
class="filter-tree" |
|||
:filter-node-method="filterNode" |
|||
:show-checkbox="showCheckbox" |
|||
:default-checked-keys="defaultCheckedKeys" |
|||
:node-key="nodeKey" |
|||
:data="data" |
|||
:props="defaultProps" |
|||
:expand-on-click-node="false" |
|||
default-expand-all |
|||
@node-click="handleNodeClick" |
|||
></el-tree> |
|||
</div> |
|||
</template> |
|||
|
|||
<style lang="less" scoped> |
|||
.layer-tree-wrapper { |
|||
.search-btn { |
|||
margin-bottom: 12px; |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,98 @@ |
|||
{ |
|||
"id": 1, |
|||
"isLeaf": false, |
|||
"name": "全部", |
|||
"children": [ |
|||
{ |
|||
"id": 2, |
|||
"isLeaf": false, |
|||
"name": "一级目录1", |
|||
"children": [ |
|||
{ |
|||
"id": "BHA10000001", |
|||
"name": "飞来峡图层数据", |
|||
"addTime": "2024/03/07 12:05", |
|||
"description": "图层资源目录描述", |
|||
"isLeaf": true |
|||
}, |
|||
{ |
|||
"id": "BHA10000002", |
|||
"name": "乐昌峡图层数据", |
|||
"addTime": "2024/03/07 11:05", |
|||
"description": "图层资源目录描述", |
|||
"isLeaf": true |
|||
}, |
|||
{ |
|||
"id": "BHA10000003", |
|||
"name": "清远峡图层数据", |
|||
"addTime": "2024/03/07 09:05", |
|||
"description": "图层资源目录描述", |
|||
"isLeaf": true |
|||
}, |
|||
{ |
|||
"id": "BHA10000004", |
|||
"name": "北江图层数据", |
|||
"addTime": "2024/03/06 09:05", |
|||
"description": "图层资源目录描述", |
|||
"isLeaf": true |
|||
}, |
|||
{ |
|||
"id": "BHA10000005", |
|||
"name": "西枝江图层数据", |
|||
"addTime": "2024/03/05 09:05", |
|||
"description": "图层资源目录描述", |
|||
"isLeaf": true |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
"id": 3, |
|||
"isLeaf": false, |
|||
"name": "一级目录2", |
|||
"children": [ |
|||
{ |
|||
"id": 4, |
|||
"isLeaf": false, |
|||
"name": "二级目录1", |
|||
"children": [ |
|||
{ |
|||
"id": "BHA110000001", |
|||
"name": "飞来峡图层数据1", |
|||
"addTime": "2024/03/07 12:05", |
|||
"description": "图层资源目录描述", |
|||
"isLeaf": true |
|||
}, |
|||
{ |
|||
"id": "BHA110000002", |
|||
"name": "乐昌峡图层数据2", |
|||
"addTime": "2024/03/07 11:05", |
|||
"description": "图层资源目录描述", |
|||
"isLeaf": true |
|||
}, |
|||
{ |
|||
"id": "BHA110000003", |
|||
"name": "清远峡图层数据3", |
|||
"addTime": "2024/03/07 09:05", |
|||
"description": "图层资源目录描述", |
|||
"isLeaf": true |
|||
}, |
|||
{ |
|||
"id": "BHA110000004", |
|||
"name": "北江图层数据4", |
|||
"addTime": "2024/03/06 09:05", |
|||
"description": "图层资源目录描述", |
|||
"isLeaf": true |
|||
}, |
|||
{ |
|||
"id": "BHA110000005", |
|||
"name": "西枝江图层数据5", |
|||
"addTime": "2024/03/05 09:05", |
|||
"description": "图层资源目录描述", |
|||
"isLeaf": true |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
Loading…
Reference in new issue