update 区域增加树结构显示

This commit is contained in:
2021-05-21 17:45:50 +08:00
parent c8530039eb
commit 179843f98e
7 changed files with 130 additions and 74 deletions

View File

@@ -79,9 +79,9 @@ namespace Ewide.Core.Controller
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet("/sysArea/tree")] [HttpGet("/sysArea/tree")]
public async Task<List<AreaTreeNode>> GetAreaCodeTree() public async Task<List<AreaTreeNode>> GetAreaCodeTree([FromQuery]int? level)
{ {
return await _areaCodeService.GetAreaCodeTree(); return await _areaCodeService.GetAreaCodeTree(level);
} }
} }
} }

View File

@@ -348,7 +348,7 @@
<param name="input"></param> <param name="input"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Ewide.Core.Controller.AreaCodeController.GetAreaCodeTree"> <member name="M:Ewide.Core.Controller.AreaCodeController.GetAreaCodeTree(System.Nullable{System.Int32})">
<summary> <summary>
获取目录树 获取目录树
</summary> </summary>
@@ -3016,7 +3016,7 @@
<param name="code">区域代码</param> <param name="code">区域代码</param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Ewide.Core.Service.Area.AreaCodeService.GetAreaCodeTree"> <member name="M:Ewide.Core.Service.Area.AreaCodeService.GetAreaCodeTree(System.Nullable{System.Int32})">
<summary> <summary>
获取区域目录树 获取区域目录树
</summary> </summary>

View File

@@ -71,12 +71,13 @@ namespace Ewide.Core.Service.Area
/// 获取区域目录树 /// 获取区域目录树
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public async Task<List<AreaTreeNode>> GetAreaCodeTree() public async Task<List<AreaTreeNode>> GetAreaCodeTree(int? level)
{ {
level = level.GetValueOrDefault(100);
var cachedAreaCodes = await _sysCacheService.GetAreaCode(); var cachedAreaCodes = await _sysCacheService.GetAreaCode();
if (cachedAreaCodes == null || cachedAreaCodes.Count < 0) if (cachedAreaCodes == null || cachedAreaCodes.Count < 0)
{ {
cachedAreaCodes = await _areaCodeRep.DetachedEntities.ToListAsync(); cachedAreaCodes = await _areaCodeRep.DetachedEntities.Where(p => p.LevelType <= level).ToListAsync();
await _sysCacheService.SetAreaCode(cachedAreaCodes); await _sysCacheService.SetAreaCode(cachedAreaCodes);
} }
return new TreeBuildUtil<AreaTreeNode>().DoTreeBuild(cachedAreaCodes.Select(u => new AreaTreeNode return new TreeBuildUtil<AreaTreeNode>().DoTreeBuild(cachedAreaCodes.Select(u => new AreaTreeNode
@@ -99,9 +100,10 @@ namespace Ewide.Core.Service.Area
{ {
var AreaCodes = await _areaCodeRep.DetachedEntities var AreaCodes = await _areaCodeRep.DetachedEntities
.Where(input.LevelType.HasValue, a => a.LevelType == input.LevelType) .Where(input.LevelType.HasValue, a => a.LevelType == input.LevelType)
.Where(!string.IsNullOrEmpty(input.Code), a => a.Code.StartsWith(input.Code)) .Where(!string.IsNullOrEmpty(input.Code), a => a.Code.Contains(input.Code))
.Where(!string.IsNullOrEmpty(input.AdCode), a => a.AdCode.StartsWith(input.AdCode)) .Where(!string.IsNullOrEmpty(input.AdCode), a => a.AdCode.Contains(input.AdCode))
.Where(!string.IsNullOrEmpty(input.Name), a => a.Name.StartsWith(input.Name)) .Where(!string.IsNullOrEmpty(input.Name), a => a.Name.Contains(input.Name))
.Where(!string.IsNullOrEmpty(input.Pcode), a => a.Code.StartsWith(input.Pcode))
.ToPageData(input); .ToPageData(input);
return XnPageResult<SysAreaCode>.PageResult(AreaCodes); return XnPageResult<SysAreaCode>.PageResult(AreaCodes);
} }

View File

@@ -15,6 +15,7 @@ namespace Ewide.Core.Service.Area.Dto
public int? LevelType { get; set; } public int? LevelType { get; set; }
public string Note { get; set; } public string Note { get; set; }
public int Sort { get; set; } public int Sort { get; set; }
public string Pcode { get; set; }
} }
public class UpdateAreaCodeInput public class UpdateAreaCodeInput
{ {

View File

@@ -16,7 +16,7 @@ namespace Ewide.Core.Service.Area
Task<SysAreaCode> GetAreaCode(string code); Task<SysAreaCode> GetAreaCode(string code);
Task<List<SysAreaCode>> GetAreaCodeWithChildren(string code); Task<List<SysAreaCode>> GetAreaCodeWithChildren(string code);
Task<List<AreaTreeNode>> GetAreaCodeTree(); Task<List<AreaTreeNode>> GetAreaCodeTree(int? level);
Task<dynamic> QueryAreaCodePageList([FromQuery] AreaCodeInput input); Task<dynamic> QueryAreaCodePageList([FromQuery] AreaCodeInput input);
} }

View File

@@ -11,8 +11,8 @@
<div class="yo-form-group"> <div class="yo-form-group">
<!-- 表单控件 --> <!-- 表单控件 -->
<!-- ... --> <!-- ... -->
<a-form-model-item label="参数类型" prop="levelType"> <a-form-model-item label="区域类型" prop="levelType">
<a-select :disabled="exist" placeholder="请选择参数类型" v-model="form.levelType"> <a-select :disabled="exist" placeholder="请选择区域类型" v-model="form.levelType">
<a-select-option <a-select-option
:key="i" :key="i"
:value="item.code" :value="item.code"
@@ -21,25 +21,31 @@
<a-icon slot="suffixIcon" type="lock" v-if="exist" /> <a-icon slot="suffixIcon" type="lock" v-if="exist" />
</a-select> </a-select>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="名称" prop="name"> <a-form-model-item label="区域名称" prop="name">
<a-input placeholder="请输入区域名称" v-model="form.name" /> <a-input placeholder="请输入区域名称" v-model="form.name" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="编码" prop="code"> <a-form-model-item prop="code">
<a-input :disabled="exist" placeholder="请输入参数编码" v-model="form.code"> <span slot="label">
区域编码
<a-tooltip title="用于系统内部使用,添加后不可更改">
<a-icon theme="twoTone" type="info-circle" />
</a-tooltip>
</span>
<a-input :disabled="exist" placeholder="请输入区域编码" v-model="form.code">
<a-icon slot="suffix" type="lock" v-if="exist" /> <a-icon slot="suffix" type="lock" v-if="exist" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="区域编码" prop="adCode"> <a-form-model-item prop="adCode">
<a-input placeholder="请输入显示编码" v-model="form.adCode" /> <span slot="label">
行政编码
<a-tooltip title="国家规定的区划代码,可随实际情况更改而更改">
<a-icon theme="twoTone" type="info-circle" />
</a-tooltip>
</span>
<a-input placeholder="请输入行政编码" v-model="form.adCode" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="排序" prop="sort"> <a-form-model-item label="排序" prop="sort">
<a-input-number <a-input-number :min="0" class="w-100-p" placeholder="请输入排序" v-model="form.sort" />
:max="1000"
:min="0"
class="w-100-p"
placeholder="请输入排序"
v-model="form.sort"
/>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="备注" prop="note"> <a-form-model-item label="备注" prop="note">
<a-textarea :rows="4" placeholder="请输入备注" v-model="form.note"></a-textarea> <a-textarea :rows="4" placeholder="请输入备注" v-model="form.note"></a-textarea>

View File

@@ -1,22 +1,34 @@
<template> <template>
<!-- <!--
普通查询表格 普通查询表格
v 1.2 v 1.2
2021-04-30 2021-04-30
Lufthafen Lufthafen
--> -->
<yo-tree-layout
:load-data="loadTreeData"
:replace-fields="{ value: 'code',title: 'name',children: 'children' }"
@select="onSelect"
default-expanded-keys
ref="tree-layout"
>
<container> <container>
<br />
<a-card :bordered="false"> <a-card :bordered="false">
<yo-table :columns="columns" :load-data="loadData" @query="onQuery" @resetQuery="onResetQuery" ref="table"> <yo-table
:columns="columns"
:load-data="loadData"
@query="onQuery"
@resetQuery="onResetQuery"
ref="table"
>
<Auth auth="sysArea:page" slot="query"> <Auth auth="sysArea:page" slot="query">
<!-- 此处添加查询表单控件 --> <!-- 此处添加查询表单控件 -->
<!-- ... --> <!-- ... -->
<a-form-model-item label="参数名称"> <a-form-model-item label="区域名称">
<a-input placeholder="请输入参数名称" v-model="query.name" /> <a-input placeholder="请输入区域名称" v-model="query.name" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="参数编码"> <a-form-model-item label="区域类型">
<a-input placeholder="请输入参数编码" v-model="query.code" /> <a-input placeholder="请输入区域类型" v-model="query.code" />
</a-form-model-item> </a-form-model-item>
</Auth> </Auth>
<Auth auth="sysArea:add" slot="operator"> <Auth auth="sysArea:add" slot="operator">
@@ -42,6 +54,7 @@
</span> </span>
</yo-table> </yo-table>
</a-card> </a-card>
</container>
<!-- 新增表单 --> <!-- 新增表单 -->
<yo-modal-form :action="$api[api.add]" :title="'新增' + name" @ok="onReloadData" ref="add-form"> <yo-modal-form :action="$api[api.add]" :title="'新增' + name" @ok="onReloadData" ref="add-form">
@@ -52,13 +65,16 @@
<yo-modal-form :action="$api[api.edit]" :title="'编辑' + name" @ok="onReloadData" ref="edit-form"> <yo-modal-form :action="$api[api.edit]" :title="'编辑' + name" @ok="onReloadData" ref="edit-form">
<form-body /> <form-body />
</yo-modal-form> </yo-modal-form>
</container> </yo-tree-layout>
</template> </template>
<script> <script>
/* 需要引用YoTreeLayout组件 */
import YoTreeLayout from '@/components/yoTreeLayout';
import FormBody from './form'; import FormBody from './form';
/* 在此管理整个页面需要的接口名称 */ /* 在此管理整个页面需要的接口名称 */
const api = { const api = {
tree: 'getAreaTree',
page: 'sysAreaPage', page: 'sysAreaPage',
add: 'sysAreaAdd', add: 'sysAreaAdd',
edit: 'sysAreaEdit', edit: 'sysAreaEdit',
@@ -68,8 +84,10 @@ const api = {
export default { export default {
components: { components: {
YoTreeLayout,
FormBody, FormBody,
}, },
data() { data() {
return { return {
api, api,
@@ -82,23 +100,23 @@ export default {
/* 表格字段 */ /* 表格字段 */
columns: [ columns: [
{ {
title: '参数类型', title: '区域类型',
dataIndex: 'levelType', dataIndex: 'levelType',
scopedSlots: { customRender: 'levelType' }, scopedSlots: { customRender: 'levelType' },
sorter: true, sorter: true,
}, },
{ {
title: '参数名称', title: '区域名称',
dataIndex: 'name', dataIndex: 'name',
sorter: true, sorter: true,
}, },
{ {
title: '参数编号', title: '区域编号',
dataIndex: 'code', dataIndex: 'code',
sorter: true, sorter: true,
}, },
{ {
title: '区域编号', title: '行政编号',
dataIndex: 'adCode', dataIndex: 'adCode',
sorter: true, sorter: true,
}, },
@@ -108,7 +126,7 @@ export default {
sorter: true, sorter: true,
}, },
{ {
title: '序', title: '序',
dataIndex: 'sort', dataIndex: 'sort',
sorter: true, sorter: true,
}, },
@@ -120,8 +138,8 @@ export default {
}, },
}; };
}, },
created() { created() {
/** 按需加载字典编码 */
this.onLoadCodes(); this.onLoadCodes();
/** 根据权限添加操作列 */ /** 根据权限添加操作列 */
@@ -135,7 +153,30 @@ export default {
}); });
} }
}, },
methods: { methods: {
/**
* 树形选择界面必要的方法
* 传给yo-table-layout以示意数据接口
*/
loadTreeData() {
return this.$api[api.tree]({ level: 3 }).then((res) => {
return res.data;
});
},
/**
* 树形选择界面必要的方法
* 选择树节点事件
*/
onSelect([code]) {
/** 在选择事件中可以对右侧表格添加父节点code的查询条件 */
this.query = {
pcode: code,
};
this.onQuery();
},
/** /**
* 必要的方法 * 必要的方法
* 传给yo-table以示意数据接口及其参数和返回的数据结构 * 传给yo-table以示意数据接口及其参数和返回的数据结构
@@ -162,12 +203,16 @@ export default {
}, },
/** /**
* 有查询功能时的必要方法 * 必要方法
* 重置查询条件 * 重新列表数据
*/ */
onResetQuery() { onResetQuery() {
/** 在这里重置查询条件时,可对特殊的字段做保留处理 */ /* 与普通查询页不同的是,这里的父节点参数不应该在重置后被清空 */
this.query = {}; Object.keys(this.query).forEach((p) => {
if (p !== 'pcode') {
this.query[p] = undefined;
}
});
this.onQuery(); this.onQuery();
}, },
@@ -177,6 +222,7 @@ export default {
*/ */
onReloadData() { onReloadData() {
this.$refs.table.onReloadData(); this.$refs.table.onReloadData();
this.$refs['tree-layout'].onReloadData();
}, },
/** /**
@@ -209,12 +255,13 @@ export default {
}, },
/** /**
* 必要方法 * 有编辑新增功能的必要方法
* 从列表页调用窗口的打开方法 * 从列表页调用窗口的打开方法
*/ */
onOpen(formName, record) { onOpen(formName, record) {
this.$refs[formName].onOpen({ this.$refs[formName].onOpen({
record, record,
pcode: this.query.pcode,
/* 按需添加其他参数 */ /* 按需添加其他参数 */
/* ... */ /* ... */
}); });