优化代码结构,完成分类处理

This commit is contained in:
yubaolee 2015-12-16 22:52:23 +08:00
parent f79e5c08fa
commit aab16e28aa
18 changed files with 223 additions and 142 deletions

View File

@ -53,9 +53,14 @@ namespace OpenAuth.App
return _repository.Get<%=GetModelName()%>CntInOrgs(GetSubOrgIds(orgId));
}
}
public List<<%=GetModelName()%>> LoadAll()
{
return _repository.Find(null).ToList();
}
/// <summary>
/// 加载一个部门及子部门全部<%=GetModelName()%>s
/// 加载一个节点下面的一个或全部<%=GetModelName()%>s
/// </summary>
public dynamic Load(int orgId, int pageindex, int pagesize)
{
@ -90,7 +95,7 @@ namespace OpenAuth.App
}
/// <summary>
/// 获取当前组织的所有下级组织
/// 获取当前节点的所有下级节点
/// </summary>
private int[] GetSubOrgIds(int orgId)
{
@ -114,7 +119,9 @@ namespace OpenAuth.App
public void AddOrUpdate(<%=GetModelName()%> model)
{
<%=ModuleName%> <%=ModuleName.ToLower()%> = model;
<%=ModuleName%> <%=ModuleName.ToLower()%> = new <%=ModuleName%>();
model.CopyTo(<%=ModuleName.ToLower()%>);
if (<%=ModuleName.ToLower()%>.Id == 0)
{
_repository.Add(<%=ModuleName.ToLower()%>);

View File

@ -35,7 +35,7 @@ namespace OpenAuth.Mvc.Controllers
public <%=ModuleName%>ManagerController()
{
_app = (<%=ModuleName%>ManagerApp)DependencyResolver.Current.GetService(typeof(<%=ModuleName%>ManagerApp));
_app = AutofacExt.GetFromFac<<%=ModuleName%>ManagerApp>();
}
//

View File

@ -9,7 +9,9 @@
// <copyright file="ObjectHelper.cs" company="">
// Copyright (c) . All rights reserved.
// </copyright>
// <summary>对象COPY/初始化帮助</summary>
// <summary>
//对象COPY/初始化帮助,通常是防止从视图中传过来的对象属性为空,这其赋初始值
//</summary>
// ***********************************************************************
using System;

View File

@ -1,9 +1,9 @@
using System;
using OpenAuth.Domain;
using OpenAuth.Domain.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using Infrastructure;
namespace OpenAuth.App
{
@ -31,6 +31,11 @@ namespace OpenAuth.App
}
}
public List<Category> LoadAll()
{
return _repository.Find(null).ToList();
}
/// <summary>
/// 加载一个部门及子部门全部Categorys
/// </summary>
@ -45,11 +50,11 @@ namespace OpenAuth.App
}
else
{
Categorys = _repository.LoadInOrgs(pageindex, pagesize,GetSubOrgIds(orgId));
Categorys = _repository.LoadInOrgs(pageindex, pagesize, GetSubOrgIds(orgId));
total = _repository.GetCategoryCntInOrgs(orgId);
}
return new
return new
{
total = total,
list = Categorys,
@ -82,18 +87,53 @@ namespace OpenAuth.App
public void AddOrUpdate(Category model)
{
Category category = model;
Category category = new Category();
model.CopyTo(category);
if (category.Id == 0)
{
ChangeModuleCascade(category);
_repository.Add(category);
}
else
{
_repository.Update(category);
}
}
#region
//修改对象的级联ID生成类似XXX.XXX.X.XX
private void ChangeModuleCascade(Category org)
{
string cascadeId;
int currentCascadeId = 1; //当前结点的级联节点最后一位
var sameLevels = _repository.Find(o => o.ParentId == org.ParentId && o.Id != org.Id);
foreach (var obj in sameLevels)
{
int objCascadeId = int.Parse(obj.CascadeId.Split('.').Last());
if (currentCascadeId <= objCascadeId) currentCascadeId = objCascadeId + 1;
}
if (org.ParentId != 0)
{
var parentOrg = _repository.FindSingle(o => o.Id == org.ParentId);
if (parentOrg != null)
{
cascadeId = parentOrg.CascadeId + "." + currentCascadeId;
}
else
{
throw new Exception("未能找到该组织的父节点信息");
}
}
else
{
cascadeId = "0." + currentCascadeId;
}
org.CascadeId = cascadeId;
}
#endregion
}
}

View File

@ -38,6 +38,8 @@ namespace OpenAuth.App
public void AddOrUpdate(ModuleElement model)
{
var newbtn = new ModuleElement();
model.CopyTo(newbtn);
if (model.Id == 0)
{
_repository.Add(model);

View File

@ -40,6 +40,7 @@ namespace OpenAuth.Mvc
builder.RegisterType<RoleManagerApp>();
builder.RegisterType<ModuleManagerApp>();
builder.RegisterType<ModuleElementManagerApp>();
builder.RegisterType<CategoryManagerApp>();
@ -63,5 +64,14 @@ namespace OpenAuth.Mvc
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
/// <summary>
/// 从依赖容器里面获取
/// </summary>
/// <typeparam name="T"></typeparam>
public static T GetFromFac<T>()
{
return (T)DependencyResolver.Current.GetService(typeof(T));
}
}
}

View File

@ -13,7 +13,7 @@ namespace OpenAuth.Mvc.Controllers
public CategoryManagerController()
{
_app = (CategoryManagerApp)DependencyResolver.Current.GetService(typeof(CategoryManagerApp));
_app = AutofacExt.GetFromFac<CategoryManagerApp>();
}
//
@ -23,6 +23,28 @@ namespace OpenAuth.Mvc.Controllers
return View();
}
/// <summary>
/// 加载组织下面的所有用户
/// </summary>
public string Load(int orgId, int pageCurrent = 1, int pageSize = 30)
{
return JsonHelper.Instance.Serialize(_app.Load(orgId, pageCurrent, pageSize));
}
public string LoadForTree()
{
var models = _app.LoadAll();
//添加根节点
models.Add(new Category
{
Id = 0,
ParentId = -1,
Name = "根结点",
CascadeId = "0"
});
return JsonHelper.Instance.Serialize(models);
}
public ActionResult Add(int id = 0)
{
return View(_app.Find(id));
@ -45,14 +67,6 @@ namespace OpenAuth.Mvc.Controllers
return JsonHelper.Instance.Serialize(BjuiResponse);
}
/// <summary>
/// 加载组织下面的所有用户
/// </summary>
public string Load(int orgId, int pageCurrent = 1, int pageSize = 30)
{
return JsonHelper.Instance.Serialize(_app.Load(orgId, pageCurrent, pageSize));
}
public string Delete(int Id)
{
try

View File

@ -11,8 +11,8 @@ namespace OpenAuth.Mvc.Controllers
private ModuleManagerApp _app;
public HomeController()
{
_app = (ModuleManagerApp)DependencyResolver.Current.GetService(typeof(ModuleManagerApp));
{
_app = AutofacExt.GetFromFac<ModuleManagerApp>();
}
public string GetModules(int parentId = 0)

View File

@ -14,7 +14,7 @@ namespace OpenAuth.Mvc.Controllers
public LoginController()
{
_app = (LoginApp)DependencyResolver.Current.GetService(typeof(LoginApp));
_app = AutofacExt.GetFromFac<LoginApp>();
}
// GET: Login
public ActionResult Index()

View File

@ -32,7 +32,7 @@ namespace OpenAuth.Mvc.Controllers
public ModuleElementManagerController()
{
_app = (ModuleElementManagerApp) DependencyResolver.Current.GetService(typeof (ModuleElementManagerApp));
_app = AutofacExt.GetFromFac<ModuleElementManagerApp>();
}
public ActionResult Index(int id = 0)
@ -46,9 +46,7 @@ namespace OpenAuth.Mvc.Controllers
{
try
{
var newbtn = new ModuleElement();
button.CopyTo(newbtn);
_app.AddOrUpdate(newbtn);
_app.AddOrUpdate(button);
}
catch (DbEntityValidationException e)
{

View File

@ -15,7 +15,7 @@ namespace OpenAuth.Mvc.Controllers
public ModuleManagerController()
{
_app = (ModuleManagerApp)DependencyResolver.Current.GetService(typeof(ModuleManagerApp));
_app = AutofacExt.GetFromFac<ModuleManagerApp>();
}
//

View File

@ -13,7 +13,7 @@ namespace OpenAuth.Mvc.Controllers
public OrgManagerController()
{
_orgApp = (OrgManagerApp)DependencyResolver.Current.GetService(typeof(OrgManagerApp));
_orgApp = AutofacExt.GetFromFac<OrgManagerApp>();
}
//

View File

@ -13,7 +13,7 @@ namespace OpenAuth.Mvc.Controllers
public RoleManagerController()
{
_app = (RoleManagerApp)DependencyResolver.Current.GetService(typeof(RoleManagerApp));
_app = AutofacExt.GetFromFac<RoleManagerApp>();
}
//

View File

@ -13,7 +13,7 @@ namespace OpenAuth.Mvc.Controllers
public UserManagerController()
{
_app = (UserManagerApp)DependencyResolver.Current.GetService(typeof(UserManagerApp));
_app = AutofacExt.GetFromFac<UserManagerApp>();
}
//

View File

@ -1,4 +1,4 @@
@model OpenAuth.Domain.Category
@model OpenAuth.Domain.Category
@{
ViewBag.Title = "Category编辑界面";
Layout = null;
@ -8,67 +8,136 @@
<form action="/CategoryManager/Add" class="pageForm" data-toggle="validate">
<table class="table table-condensed table-hover">
<tbody>
<tr>
<tr>
<td>
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.ParentId)
</td>
</tr>
<tr>
<td>
@Html.HiddenFor(m =>m.Id)
</td>
</tr>
<tr>
<td>
<label for="CascadeId" class="control-label x90">节点语义ID</label>
<input type="text" name="CascadeId" id="CascadeId" value="@Model.CascadeId"
data-rule="required" size="20">
</td>
</tr>
<tr>
<td>
<label for="Name" class="control-label x90">名称:</label>
<label for="Name" class="control-label x120">名称:</label>
<input type="text" name="Name" id="Name" value="@Model.Name"
data-rule="required" size="20">
</td>
</tr>
<tr>
</tr>
<tr>
<td>
<label for="ParentId" class="control-label x85">父节点流水号:</label>
<input id="ParentId" name="ParentId" value="" style="display: none"/>
<input type="text" name="ParentName" id="ParentName"
data-toggle="selectztree" size="20" data-tree="#j_select_tree1" value="@Model.ParentName">
<ul id="j_select_tree1" class="ztree hide" data-toggle="ztree"></ul>
<label for="Status" class="control-label x120">当前状态:</label>
<select name="Status" id="Status" data-toggle="selectpicker" data-rule="required">
<option value="0" @if (Model.Status == 0) { <text> selected="selected" </text> }>默认</option>
<option value="1" @if (Model.Status == 1) { <text> selected="selected" </text> }>禁用</option>
</select>
</td>
</tr>
<tr>
</tr>
<tr>
<td>
<label for="Status" class="control-label x85">当前状态</label>
<select name="Status" id="Status" data-toggle="selectpicker" data-rule="required">
<option value="0" @if (Model.Status == 0) { <text> selected="selected" </text> }>默认</option>
<option value="1" @if (Model.Status == 1) { <text> selected="selected" </text> }>状态1</option>
</select>
<label for="SortNo" class="control-label x120">排序号</label>
<select name="SortNo" id="SortNo" data-toggle="selectpicker" data-rule="required">
<option value="0" @if (Model.SortNo == 0) { <text> selected="selected" </text> }>默认</option>
<option value="1" @if (Model.SortNo == 1) { <text> selected="selected" </text> }>状态1</option>
</select>
</td>
</tr>
<tr>
</tr>
@if (Model.Id == 0) //添加
{
<tr>
<td>
<label for="ParentName" class="control-label x120">父节点流水号:</label>
<input type="text" name="ParentName" id="ParentName"
data-toggle="selectztree" size="20" data-tree="#j_select_tree1" value="">
<ul id="j_select_tree1" class="ztree hide" data-toggle="ztree"></ul>
</td>
</tr>
<script type="text/javascript">
$(document).ready(function () {
Init();
});
function Init() {
var setting = {
view: {
selectedMulti: false
},
check: {
enable: true,
chkStyle: "radio",
radioType: "all"
},
data: {
key: {
name: 'Name',
title: 'Name'
},
simpleData: {
enable: true,
idKey: 'Id',
pIdKey: 'ParentId',
rootPId: 'null'
}
},
callback: {
onClick: zTreeOnClick,
onCheck: zTreeCheck
}
};
$.getJSON('CategoryManager/LoadForTree', function (json) {
var zTreeObj = $.fn.zTree.init($('#j_select_tree1'), setting, json);
zTreeObj.expandAll(true);
});
}
function zTreeCheck(e, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj(treeId),
nodes = zTree.getCheckedNodes(true);
var ids = '', names = '';
for (var i = 0; i < nodes.length; i++) {
ids += ',' + nodes[i].Id;
names += ',' + nodes[i].Name;
}
if (ids.length > 0) { //去掉第一个逗号
ids = ids.substr(1);
names = names.substr(1);
}
var $from = $('#' + treeId).data('fromObj');
if ($from && $from.length) $from.val(names);
$('#ParentId').val(ids);
}
function zTreeOnClick(event, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj(treeId);
zTree.checkNode(treeNode, !treeNode.checked, true, true);
event.preventDefault();
}
</script>
}
else //编辑
{
<tr>
<td>
<label for="CascadeId" class="control-label x90">节点语义ID</label>
<input type="text" name="CascadeId" id="CascadeId" value="@Model.CascadeId"
data-rule="required" size="20">
</td>
</tr>
}
@*<tr>
<td>
<label for="SortNo" class="control-label x85">排序号:</label>
<select name="SortNo" id="SortNo" data-toggle="selectpicker" data-rule="required">
<option value="0" @if (Model.SortNo == 0) { <text> selected="selected" </text> }>默认</option>
<option value="1" @if (Model.SortNo == 1) { <text> selected="selected" </text> }>状态1</option>
</select>
</td>
</tr>
<tr>
<td>
<label for="RootKey" class="control-label x90">资源分类标识:</label>
<label for="RootKey" class="control-label x90">根节点标识:</label>
<input type="text" name="RootKey" id="RootKey" value="@Model.RootKey"
data-rule="required" size="20">
</td>
</tr>
<tr>
</tr>
<tr>
<td>
<label for="RootName" class="control-label x90">资源分类:</label>
<label for="RootName" class="control-label x90">根节点名称:</label>
<input type="text" name="RootName" id="RootName" value="@Model.RootName"
data-rule="required" size="20">
</td>
</tr>
</tr>*@
</tbody>
</table>
</form>
@ -78,66 +147,4 @@
<li><button type="button" class="btn-close">关闭</button></li>
<li><button type="submit" class="btn-green">保存</button></li>
</ul>
</div>
<script type="text/javascript">
$(document).ready(function () {
Init();
});
function Init() {
var setting = {
view: {
selectedMulti: false
},
check: {
enable: true,
chkStyle: "checkbox",
chkboxType: { "Y": "", "N": "" } //去掉勾选时级联
},
data: {
key: {
name: 'Name',
title: 'Name'
},
simpleData: {
enable: true,
idKey: 'Id',
pIdKey: 'ParentId',
rootPId: 'null'
}
},
callback: {
onClick: zTreeOnClick,
onCheck: zTreeCheck
}
};
$.getJSON('OrgManager/LoadOrg', function (json) {
var zTreeObj = $.fn.zTree.init($('#j_select_tree1'), setting, json);
zTreeObj.expandAll(true);
});
}
function zTreeCheck(e, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj(treeId),
nodes = zTree.getCheckedNodes(true);
var ids = '', names = '';
for (var i = 0; i < nodes.length; i++) {
ids += ',' + nodes[i].Id;
names += ',' + nodes[i].Name;
}
if (ids.length > 0) { //去掉第一个逗号
ids = ids.substr(1);
names = names.substr(1);
}
var $from = $('#' + treeId).data('fromObj');
if ($from && $from.length) $from.val(names);
$('#ParentId').val(ids);
}
function zTreeOnClick(event, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj(treeId);
zTree.checkNode(treeNode, !treeNode.checked, true, true);
event.preventDefault();
}
</script>
</div>

View File

@ -118,7 +118,7 @@
},
callback: {onClick: zTreeOnClick}
};
$.getJSON('CategoryManager/LoadModuleWithRoot', function (json) {
$.getJSON('CategoryManager/LoadForTree', function (json) {
var zTreeObj = $.fn.zTree.init($('#@_treeId'), setting, json);
zTreeObj.expandAll(true);
});

View File

@ -47,6 +47,7 @@
service="OpenAuth.Domain.Interface.IRoleRepository,OpenAuth.Domain" />
<component type=" OpenAuth.Repository.ModuleRepository" service="OpenAuth.Domain.Interface.IModuleRepository,OpenAuth.Domain" />
<component type=" OpenAuth.Repository.RelevanceRepository" service="OpenAuth.Domain.Interface.IRelevanceRepository,OpenAuth.Domain" />
<component type=" OpenAuth.Repository.CategoryRepository" service="OpenAuth.Domain.Interface.ICategoryRepository,OpenAuth.Domain" />
</components>
</autofac>

Binary file not shown.