[feat] 增加生成魔方控制台增强版Search
This commit is contained in:
parent
4adf6ef2e1
commit
d6d012cc01
|
@ -375,6 +375,9 @@ public class CubeBuilder : ClassBuilder
|
|||
sb.AppendLine();
|
||||
sb.AppendLine(" var start = p[\"dtStart\"].ToDateTime();");
|
||||
sb.AppendLine(" var end = p[\"dtEnd\"].ToDateTime();");
|
||||
|
||||
pis.Add("start");
|
||||
pis.Add("end");
|
||||
}
|
||||
|
||||
sb.AppendLine();
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using XCode.Membership;
|
||||
using NewLife;
|
||||
using NewLife.Cube;
|
||||
using NewLife.Cube.Extensions;
|
||||
using NewLife.Cube.ViewModels;
|
||||
using NewLife.Log;
|
||||
using NewLife.Web;
|
||||
using XCode.Membership;
|
||||
using static XCode.Membership.Area;
|
||||
|
||||
namespace Membership.Web.Areas..Controllers;
|
||||
|
||||
/// <summary>地区。行政区划数据,最高支持四级地址,9位数字</summary>
|
||||
[Menu(0, true, Icon = "fa-table")]
|
||||
[Area]
|
||||
public class Area : EntityController<Area>
|
||||
{
|
||||
static Area()
|
||||
{
|
||||
//LogOnChange = true;
|
||||
|
||||
//ListFields.RemoveField("Id", "Creator");
|
||||
ListFields.RemoveCreateField().RemoveRemarkField();
|
||||
|
||||
//{
|
||||
// var df = ListFields.GetField("Code") as ListField;
|
||||
// df.Url = "?code={Code}";
|
||||
// df.Target = "_blank";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.AddListField("devices", null, "Onlines");
|
||||
// df.DisplayName = "查看设备";
|
||||
// df.Url = "Device?groupId={Id}";
|
||||
// df.DataVisible = e => (e as Area).Devices > 0;
|
||||
// df.Target = "_frame";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.GetField("Kind") as ListField;
|
||||
// df.GetValue = e => ((Int32)(e as Area).Kind).ToString("X4");
|
||||
//}
|
||||
//ListFields.TraceUrl("TraceId");
|
||||
}
|
||||
|
||||
//private readonly ITracer _tracer;
|
||||
|
||||
//public Area(ITracer tracer)
|
||||
//{
|
||||
// _tracer = tracer;
|
||||
//}
|
||||
|
||||
/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
|
||||
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
|
||||
/// <returns></returns>
|
||||
protected override IEnumerable<Area> Search(Pager p)
|
||||
{
|
||||
var name = p["name"];
|
||||
var parentId = p["parentId"].ToInt(-1);
|
||||
var pinYin = p["pinYin"];
|
||||
var jianPin = p["jianPin"];
|
||||
var geoHash = p["geoHash"];
|
||||
var enable = p["enable"]?.ToBoolean();
|
||||
|
||||
var start = p["dtStart"].ToDateTime();
|
||||
var end = p["dtEnd"].ToDateTime();
|
||||
|
||||
return Area.Search(name, parentId, pinYin, jianPin, geoHash, enable, start, end, p["Q"], p);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using XCode.Membership;
|
||||
using NewLife;
|
||||
using NewLife.Cube;
|
||||
using NewLife.Cube.Extensions;
|
||||
using NewLife.Cube.ViewModels;
|
||||
using NewLife.Log;
|
||||
using NewLife.Web;
|
||||
using XCode.Membership;
|
||||
using static XCode.Membership.Department;
|
||||
|
||||
namespace Membership.Web.Areas..Controllers;
|
||||
|
||||
/// <summary>部门。组织机构,多级树状结构,支持多租户</summary>
|
||||
[Menu(0, true, Icon = "fa-table")]
|
||||
[Area]
|
||||
public class Department : EntityController<Department>
|
||||
{
|
||||
static Department()
|
||||
{
|
||||
//LogOnChange = true;
|
||||
|
||||
//ListFields.RemoveField("Id", "Creator");
|
||||
ListFields.RemoveCreateField().RemoveRemarkField();
|
||||
|
||||
//{
|
||||
// var df = ListFields.GetField("Code") as ListField;
|
||||
// df.Url = "?code={Code}";
|
||||
// df.Target = "_blank";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.AddListField("devices", null, "Onlines");
|
||||
// df.DisplayName = "查看设备";
|
||||
// df.Url = "Device?groupId={Id}";
|
||||
// df.DataVisible = e => (e as Department).Devices > 0;
|
||||
// df.Target = "_frame";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.GetField("Kind") as ListField;
|
||||
// df.GetValue = e => ((Int32)(e as Department).Kind).ToString("X4");
|
||||
//}
|
||||
//ListFields.TraceUrl("TraceId");
|
||||
}
|
||||
|
||||
//private readonly ITracer _tracer;
|
||||
|
||||
//public Department(ITracer tracer)
|
||||
//{
|
||||
// _tracer = tracer;
|
||||
//}
|
||||
|
||||
/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
|
||||
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
|
||||
/// <returns></returns>
|
||||
protected override IEnumerable<Department> Search(Pager p)
|
||||
{
|
||||
var tenantId = p["tenantId"].ToInt(-1);
|
||||
var code = p["code"];
|
||||
var name = p["name"];
|
||||
var parentId = p["parentId"].ToInt(-1);
|
||||
var managerId = p["managerId"].ToInt(-1);
|
||||
var enable = p["enable"]?.ToBoolean();
|
||||
|
||||
var start = p["dtStart"].ToDateTime();
|
||||
var end = p["dtEnd"].ToDateTime();
|
||||
|
||||
return Department.Search(tenantId, code, name, parentId, managerId, enable, start, end, p["Q"], p);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using XCode.Membership;
|
||||
using NewLife;
|
||||
using NewLife.Cube;
|
||||
using NewLife.Cube.Extensions;
|
||||
using NewLife.Cube.ViewModels;
|
||||
using NewLife.Log;
|
||||
using NewLife.Web;
|
||||
using XCode.Membership;
|
||||
using static XCode.Membership.Log;
|
||||
|
||||
namespace Membership.Web.Areas..Controllers;
|
||||
|
||||
/// <summary>日志。应用系统审计日志,记录用户的各种操作,禁止修改和删除</summary>
|
||||
[Menu(0, true, Icon = "fa-table")]
|
||||
[Area]
|
||||
public class Log : ReadOnlyEntityController<Log>
|
||||
{
|
||||
static Log()
|
||||
{
|
||||
//LogOnChange = true;
|
||||
|
||||
//ListFields.RemoveField("Id", "Creator");
|
||||
ListFields.RemoveCreateField().RemoveRemarkField();
|
||||
|
||||
//{
|
||||
// var df = ListFields.GetField("Code") as ListField;
|
||||
// df.Url = "?code={Code}";
|
||||
// df.Target = "_blank";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.AddListField("devices", null, "Onlines");
|
||||
// df.DisplayName = "查看设备";
|
||||
// df.Url = "Device?groupId={Id}";
|
||||
// df.DataVisible = e => (e as Log).Devices > 0;
|
||||
// df.Target = "_frame";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.GetField("Kind") as ListField;
|
||||
// df.GetValue = e => ((Int32)(e as Log).Kind).ToString("X4");
|
||||
//}
|
||||
ListFields.TraceUrl("TraceId");
|
||||
}
|
||||
|
||||
//private readonly ITracer _tracer;
|
||||
|
||||
//public Log(ITracer tracer)
|
||||
//{
|
||||
// _tracer = tracer;
|
||||
//}
|
||||
|
||||
/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
|
||||
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
|
||||
/// <returns></returns>
|
||||
protected override IEnumerable<Log> Search(Pager p)
|
||||
{
|
||||
var category = p["category"];
|
||||
var action = p["action"];
|
||||
var linkId = p["linkId"].ToLong(-1);
|
||||
var createUserId = p["createUserId"].ToInt(-1);
|
||||
|
||||
var start = p["dtStart"].ToDateTime();
|
||||
var end = p["dtEnd"].ToDateTime();
|
||||
|
||||
return Log.Search(category, action, linkId, createUserId, start, end, p["Q"], p);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using XCode.Membership;
|
||||
using NewLife;
|
||||
using NewLife.Cube;
|
||||
using NewLife.Cube.Extensions;
|
||||
using NewLife.Cube.ViewModels;
|
||||
using NewLife.Log;
|
||||
using NewLife.Web;
|
||||
using XCode.Membership;
|
||||
using static XCode.Membership.Menu;
|
||||
|
||||
namespace Membership.Web.Areas..Controllers;
|
||||
|
||||
/// <summary>菜单。功能权限,大多数时候也是可见页面</summary>
|
||||
[Menu(0, true, Icon = "fa-table")]
|
||||
[Area]
|
||||
public class Menu : EntityController<Menu>
|
||||
{
|
||||
static Menu()
|
||||
{
|
||||
//LogOnChange = true;
|
||||
|
||||
//ListFields.RemoveField("Id", "Creator");
|
||||
ListFields.RemoveCreateField().RemoveRemarkField();
|
||||
|
||||
//{
|
||||
// var df = ListFields.GetField("Code") as ListField;
|
||||
// df.Url = "?code={Code}";
|
||||
// df.Target = "_blank";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.AddListField("devices", null, "Onlines");
|
||||
// df.DisplayName = "查看设备";
|
||||
// df.Url = "Device?groupId={Id}";
|
||||
// df.DataVisible = e => (e as Menu).Devices > 0;
|
||||
// df.Target = "_frame";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.GetField("Kind") as ListField;
|
||||
// df.GetValue = e => ((Int32)(e as Menu).Kind).ToString("X4");
|
||||
//}
|
||||
//ListFields.TraceUrl("TraceId");
|
||||
}
|
||||
|
||||
//private readonly ITracer _tracer;
|
||||
|
||||
//public Menu(ITracer tracer)
|
||||
//{
|
||||
// _tracer = tracer;
|
||||
//}
|
||||
|
||||
/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
|
||||
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
|
||||
/// <returns></returns>
|
||||
protected override IEnumerable<Menu> Search(Pager p)
|
||||
{
|
||||
var name = p["name"];
|
||||
var parentId = p["parentId"].ToInt(-1);
|
||||
|
||||
var start = p["dtStart"].ToDateTime();
|
||||
var end = p["dtEnd"].ToDateTime();
|
||||
|
||||
return Menu.Search(name, parentId, start, end, p["Q"], p);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using XCode.Membership;
|
||||
using NewLife;
|
||||
using NewLife.Cube;
|
||||
using NewLife.Cube.Extensions;
|
||||
using NewLife.Cube.ViewModels;
|
||||
using NewLife.Log;
|
||||
using NewLife.Web;
|
||||
using XCode.Membership;
|
||||
using static XCode.Membership.Parameter;
|
||||
|
||||
namespace Membership.Web.Areas..Controllers;
|
||||
|
||||
/// <summary>字典参数。管理用户或系统全局的名值对数据,常用于参数配置场合</summary>
|
||||
[Menu(0, true, Icon = "fa-table")]
|
||||
[Area]
|
||||
public class Parameter : EntityController<Parameter>
|
||||
{
|
||||
static Parameter()
|
||||
{
|
||||
//LogOnChange = true;
|
||||
|
||||
//ListFields.RemoveField("Id", "Creator");
|
||||
ListFields.RemoveCreateField().RemoveRemarkField();
|
||||
|
||||
//{
|
||||
// var df = ListFields.GetField("Code") as ListField;
|
||||
// df.Url = "?code={Code}";
|
||||
// df.Target = "_blank";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.AddListField("devices", null, "Onlines");
|
||||
// df.DisplayName = "查看设备";
|
||||
// df.Url = "Device?groupId={Id}";
|
||||
// df.DataVisible = e => (e as Parameter).Devices > 0;
|
||||
// df.Target = "_frame";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.GetField("Kind") as ListField;
|
||||
// df.GetValue = e => ((Int32)(e as Parameter).Kind).ToString("X4");
|
||||
//}
|
||||
//ListFields.TraceUrl("TraceId");
|
||||
}
|
||||
|
||||
//private readonly ITracer _tracer;
|
||||
|
||||
//public Parameter(ITracer tracer)
|
||||
//{
|
||||
// _tracer = tracer;
|
||||
//}
|
||||
|
||||
/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
|
||||
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
|
||||
/// <returns></returns>
|
||||
protected override IEnumerable<Parameter> Search(Pager p)
|
||||
{
|
||||
var userId = p["userId"].ToInt(-1);
|
||||
var category = p["category"];
|
||||
var name = p["name"];
|
||||
var enable = p["enable"]?.ToBoolean();
|
||||
|
||||
var start = p["dtStart"].ToDateTime();
|
||||
var end = p["dtEnd"].ToDateTime();
|
||||
|
||||
return Parameter.Search(userId, category, name, enable, start, end, p["Q"], p);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using XCode.Membership;
|
||||
using NewLife;
|
||||
using NewLife.Cube;
|
||||
using NewLife.Cube.Extensions;
|
||||
using NewLife.Cube.ViewModels;
|
||||
using NewLife.Log;
|
||||
using NewLife.Web;
|
||||
using XCode.Membership;
|
||||
using static XCode.Membership.Role;
|
||||
|
||||
namespace Membership.Web.Areas..Controllers;
|
||||
|
||||
/// <summary>角色。业务场景中的岗位,功能权限的集合。不管是用户还是租户,都以角色来管理权限</summary>
|
||||
[Menu(0, true, Icon = "fa-table")]
|
||||
[Area]
|
||||
public class Role : EntityController<Role>
|
||||
{
|
||||
static Role()
|
||||
{
|
||||
//LogOnChange = true;
|
||||
|
||||
//ListFields.RemoveField("Id", "Creator");
|
||||
ListFields.RemoveCreateField().RemoveRemarkField();
|
||||
|
||||
//{
|
||||
// var df = ListFields.GetField("Code") as ListField;
|
||||
// df.Url = "?code={Code}";
|
||||
// df.Target = "_blank";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.AddListField("devices", null, "Onlines");
|
||||
// df.DisplayName = "查看设备";
|
||||
// df.Url = "Device?groupId={Id}";
|
||||
// df.DataVisible = e => (e as Role).Devices > 0;
|
||||
// df.Target = "_frame";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.GetField("Kind") as ListField;
|
||||
// df.GetValue = e => ((Int32)(e as Role).Kind).ToString("X4");
|
||||
//}
|
||||
//ListFields.TraceUrl("TraceId");
|
||||
}
|
||||
|
||||
//private readonly ITracer _tracer;
|
||||
|
||||
//public Role(ITracer tracer)
|
||||
//{
|
||||
// _tracer = tracer;
|
||||
//}
|
||||
|
||||
/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
|
||||
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
|
||||
/// <returns></returns>
|
||||
protected override IEnumerable<Role> Search(Pager p)
|
||||
{
|
||||
var name = p["name"];
|
||||
var tenantId = p["tenantId"].ToInt(-1);
|
||||
var enable = p["enable"]?.ToBoolean();
|
||||
|
||||
var start = p["dtStart"].ToDateTime();
|
||||
var end = p["dtEnd"].ToDateTime();
|
||||
|
||||
return Role.Search(name, tenantId, enable, start, end, p["Q"], p);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using XCode.Membership;
|
||||
using NewLife;
|
||||
using NewLife.Cube;
|
||||
using NewLife.Cube.Extensions;
|
||||
using NewLife.Cube.ViewModels;
|
||||
using NewLife.Log;
|
||||
using NewLife.Web;
|
||||
using XCode.Membership;
|
||||
using static XCode.Membership.Tenant;
|
||||
|
||||
namespace Membership.Web.Areas..Controllers;
|
||||
|
||||
/// <summary>租户。多租户SAAS平台,用于隔离业务数据</summary>
|
||||
[Menu(0, true, Icon = "fa-table")]
|
||||
[Area]
|
||||
public class Tenant : EntityController<Tenant>
|
||||
{
|
||||
static Tenant()
|
||||
{
|
||||
//LogOnChange = true;
|
||||
|
||||
//ListFields.RemoveField("Id", "Creator");
|
||||
ListFields.RemoveCreateField().RemoveRemarkField();
|
||||
|
||||
//{
|
||||
// var df = ListFields.GetField("Code") as ListField;
|
||||
// df.Url = "?code={Code}";
|
||||
// df.Target = "_blank";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.AddListField("devices", null, "Onlines");
|
||||
// df.DisplayName = "查看设备";
|
||||
// df.Url = "Device?groupId={Id}";
|
||||
// df.DataVisible = e => (e as Tenant).Devices > 0;
|
||||
// df.Target = "_frame";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.GetField("Kind") as ListField;
|
||||
// df.GetValue = e => ((Int32)(e as Tenant).Kind).ToString("X4");
|
||||
//}
|
||||
//ListFields.TraceUrl("TraceId");
|
||||
}
|
||||
|
||||
//private readonly ITracer _tracer;
|
||||
|
||||
//public Tenant(ITracer tracer)
|
||||
//{
|
||||
// _tracer = tracer;
|
||||
//}
|
||||
|
||||
/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
|
||||
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
|
||||
/// <returns></returns>
|
||||
protected override IEnumerable<Tenant> Search(Pager p)
|
||||
{
|
||||
var code = p["code"];
|
||||
var managerId = p["managerId"].ToInt(-1);
|
||||
var enable = p["enable"]?.ToBoolean();
|
||||
|
||||
var start = p["dtStart"].ToDateTime();
|
||||
var end = p["dtEnd"].ToDateTime();
|
||||
|
||||
return Tenant.Search(code, managerId, enable, start, end, p["Q"], p);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using XCode.Membership;
|
||||
using NewLife;
|
||||
using NewLife.Cube;
|
||||
using NewLife.Cube.Extensions;
|
||||
using NewLife.Cube.ViewModels;
|
||||
using NewLife.Log;
|
||||
using NewLife.Web;
|
||||
using XCode.Membership;
|
||||
using static XCode.Membership.TenantUser;
|
||||
|
||||
namespace Membership.Web.Areas..Controllers;
|
||||
|
||||
/// <summary>租户关系。用户选择租户进入系统后,以租户关系角色组替代自有角色组来进行鉴权</summary>
|
||||
[Menu(0, true, Icon = "fa-table")]
|
||||
[Area]
|
||||
public class TenantUser : EntityController<TenantUser>
|
||||
{
|
||||
static TenantUser()
|
||||
{
|
||||
//LogOnChange = true;
|
||||
|
||||
//ListFields.RemoveField("Id", "Creator");
|
||||
ListFields.RemoveCreateField().RemoveRemarkField();
|
||||
|
||||
//{
|
||||
// var df = ListFields.GetField("Code") as ListField;
|
||||
// df.Url = "?code={Code}";
|
||||
// df.Target = "_blank";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.AddListField("devices", null, "Onlines");
|
||||
// df.DisplayName = "查看设备";
|
||||
// df.Url = "Device?groupId={Id}";
|
||||
// df.DataVisible = e => (e as TenantUser).Devices > 0;
|
||||
// df.Target = "_frame";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.GetField("Kind") as ListField;
|
||||
// df.GetValue = e => ((Int32)(e as TenantUser).Kind).ToString("X4");
|
||||
//}
|
||||
//ListFields.TraceUrl("TraceId");
|
||||
}
|
||||
|
||||
//private readonly ITracer _tracer;
|
||||
|
||||
//public TenantUser(ITracer tracer)
|
||||
//{
|
||||
// _tracer = tracer;
|
||||
//}
|
||||
|
||||
/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
|
||||
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
|
||||
/// <returns></returns>
|
||||
protected override IEnumerable<TenantUser> Search(Pager p)
|
||||
{
|
||||
var tenantId = p["tenantId"].ToInt(-1);
|
||||
var userId = p["userId"].ToInt(-1);
|
||||
var roleId = p["roleId"].ToInt(-1);
|
||||
var enable = p["enable"]?.ToBoolean();
|
||||
|
||||
var start = p["dtStart"].ToDateTime();
|
||||
var end = p["dtEnd"].ToDateTime();
|
||||
|
||||
return TenantUser.Search(tenantId, userId, roleId, enable, start, end, p["Q"], p);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using XCode.Membership;
|
||||
using NewLife;
|
||||
using NewLife.Cube;
|
||||
using NewLife.Cube.Extensions;
|
||||
using NewLife.Cube.ViewModels;
|
||||
using NewLife.Log;
|
||||
using NewLife.Web;
|
||||
using XCode.Membership;
|
||||
using static XCode.Membership.User;
|
||||
|
||||
namespace Membership.Web.Areas..Controllers;
|
||||
|
||||
/// <summary>用户。用户帐号信息,以身份验证为中心,拥有多种角色,可加入多个租户</summary>
|
||||
[Menu(0, true, Icon = "fa-table")]
|
||||
[Area]
|
||||
public class User : EntityController<User>
|
||||
{
|
||||
static User()
|
||||
{
|
||||
//LogOnChange = true;
|
||||
|
||||
//ListFields.RemoveField("Id", "Creator");
|
||||
ListFields.RemoveCreateField().RemoveRemarkField();
|
||||
|
||||
//{
|
||||
// var df = ListFields.GetField("Code") as ListField;
|
||||
// df.Url = "?code={Code}";
|
||||
// df.Target = "_blank";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.AddListField("devices", null, "Onlines");
|
||||
// df.DisplayName = "查看设备";
|
||||
// df.Url = "Device?groupId={Id}";
|
||||
// df.DataVisible = e => (e as User).Devices > 0;
|
||||
// df.Target = "_frame";
|
||||
//}
|
||||
//{
|
||||
// var df = ListFields.GetField("Kind") as ListField;
|
||||
// df.GetValue = e => ((Int32)(e as User).Kind).ToString("X4");
|
||||
//}
|
||||
//ListFields.TraceUrl("TraceId");
|
||||
}
|
||||
|
||||
//private readonly ITracer _tracer;
|
||||
|
||||
//public User(ITracer tracer)
|
||||
//{
|
||||
// _tracer = tracer;
|
||||
//}
|
||||
|
||||
/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
|
||||
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
|
||||
/// <returns></returns>
|
||||
protected override IEnumerable<User> Search(Pager p)
|
||||
{
|
||||
var name = p["name"];
|
||||
var mail = p["mail"];
|
||||
var mobile = p["mobile"];
|
||||
var code = p["code"];
|
||||
var roleId = p["roleId"].ToInt(-1);
|
||||
var departmentId = p["departmentId"].ToInt(-1);
|
||||
var areaId = p["areaId"].ToInt(-1);
|
||||
var enable = p["enable"]?.ToBoolean();
|
||||
|
||||
var start = p["dtStart"].ToDateTime();
|
||||
var end = p["dtEnd"].ToDateTime();
|
||||
|
||||
return User.Search(name, mail, mobile, code, roleId, departmentId, areaId, enable, start, end, p["Q"], p);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,298 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using XCode;
|
||||
using XCode.Code;
|
||||
using XCode.DataAccessLayer;
|
||||
using Xunit;
|
||||
|
||||
namespace XUnitTest.XCode.Code;
|
||||
|
||||
public class CubeBuilderTests
|
||||
{
|
||||
private IList<IDataTable> _tables;
|
||||
private CubeBuilderOption _option;
|
||||
|
||||
public CubeBuilderTests()
|
||||
{
|
||||
_option = new CubeBuilderOption();
|
||||
_tables = ClassBuilder.LoadModels(@"..\..\XCode\Membership\Member.xml", _option, out _);
|
||||
}
|
||||
|
||||
private String ReadTarget(String file, String text)
|
||||
{
|
||||
var target = "";
|
||||
var file2 = @"..\..\XUnitTest.XCode\".CombinePath(file);
|
||||
if (File.Exists(file2)) target = File.ReadAllText(file2.GetFullPath());
|
||||
|
||||
file2.EnsureDirectory(true);
|
||||
File.WriteAllText(file2, text);
|
||||
|
||||
//if (!File.Exists(file)) return null;
|
||||
//var target = File.ReadAllText(file.GetFullPath());
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildUser()
|
||||
{
|
||||
var option = _option.Clone() as CubeBuilderOption;
|
||||
|
||||
var table = _tables.FirstOrDefault(e => e.Name == "User");
|
||||
if (table.InsertOnly)
|
||||
option.BaseClass = "ReadOnlyEntityController";
|
||||
else
|
||||
option.BaseClass = "EntityController";
|
||||
|
||||
var builder = new CubeBuilder
|
||||
{
|
||||
Table = table,
|
||||
Option = option,
|
||||
RootNamespace = $"{option.ConnName}.Web",
|
||||
AreaName = "Admin",
|
||||
};
|
||||
|
||||
// 数据类
|
||||
builder.Execute();
|
||||
|
||||
var rs = builder.ToString();
|
||||
Assert.NotEmpty(rs);
|
||||
|
||||
var target = ReadTarget($"Code\\Controllers\\controller_{table.Name.ToLower()}.cs", rs);
|
||||
Assert.Equal(target, rs);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildLog()
|
||||
{
|
||||
var option = _option.Clone() as CubeBuilderOption;
|
||||
|
||||
var table = _tables.FirstOrDefault(e => e.Name == "Log");
|
||||
if (table.InsertOnly)
|
||||
option.BaseClass = "ReadOnlyEntityController";
|
||||
else
|
||||
option.BaseClass = "EntityController";
|
||||
|
||||
var builder = new CubeBuilder
|
||||
{
|
||||
Table = table,
|
||||
Option = option,
|
||||
RootNamespace = $"{option.ConnName}.Web",
|
||||
AreaName = "Admin",
|
||||
};
|
||||
|
||||
// 数据类
|
||||
builder.Execute();
|
||||
|
||||
var rs = builder.ToString();
|
||||
Assert.NotEmpty(rs);
|
||||
|
||||
var target = ReadTarget($"Code\\Controllers\\controller_{table.Name.ToLower()}.cs", rs);
|
||||
Assert.Equal(target, rs);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildRole()
|
||||
{
|
||||
var option = _option.Clone() as CubeBuilderOption;
|
||||
|
||||
var table = _tables.FirstOrDefault(e => e.Name == "Role");
|
||||
if (table.InsertOnly)
|
||||
option.BaseClass = "ReadOnlyEntityController";
|
||||
else
|
||||
option.BaseClass = "EntityController";
|
||||
|
||||
var builder = new CubeBuilder
|
||||
{
|
||||
Table = table,
|
||||
Option = option,
|
||||
RootNamespace = $"{option.ConnName}.Web",
|
||||
AreaName = "Admin",
|
||||
};
|
||||
|
||||
// 数据类
|
||||
builder.Execute();
|
||||
|
||||
var rs = builder.ToString();
|
||||
Assert.NotEmpty(rs);
|
||||
|
||||
var target = ReadTarget($"Code\\Controllers\\controller_{table.Name.ToLower()}.cs", rs);
|
||||
Assert.Equal(target, rs);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildMenu()
|
||||
{
|
||||
var option = _option.Clone() as CubeBuilderOption;
|
||||
|
||||
var table = _tables.FirstOrDefault(e => e.Name == "Menu");
|
||||
if (table.InsertOnly)
|
||||
option.BaseClass = "ReadOnlyEntityController";
|
||||
else
|
||||
option.BaseClass = "EntityController";
|
||||
|
||||
var builder = new CubeBuilder
|
||||
{
|
||||
Table = table,
|
||||
Option = option,
|
||||
RootNamespace = $"{option.ConnName}.Web",
|
||||
AreaName = "Admin",
|
||||
};
|
||||
|
||||
// 数据类
|
||||
builder.Execute();
|
||||
|
||||
var rs = builder.ToString();
|
||||
Assert.NotEmpty(rs);
|
||||
|
||||
var target = ReadTarget($"Code\\Controllers\\controller_{table.Name.ToLower()}.cs", rs);
|
||||
Assert.Equal(target, rs);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildDepartment()
|
||||
{
|
||||
var option = _option.Clone() as CubeBuilderOption;
|
||||
|
||||
var table = _tables.FirstOrDefault(e => e.Name == "Department");
|
||||
if (table.InsertOnly)
|
||||
option.BaseClass = "ReadOnlyEntityController";
|
||||
else
|
||||
option.BaseClass = "EntityController";
|
||||
|
||||
var builder = new CubeBuilder
|
||||
{
|
||||
Table = table,
|
||||
Option = option,
|
||||
RootNamespace = $"{option.ConnName}.Web",
|
||||
AreaName = "Admin",
|
||||
};
|
||||
|
||||
// 数据类
|
||||
builder.Execute();
|
||||
|
||||
var rs = builder.ToString();
|
||||
Assert.NotEmpty(rs);
|
||||
|
||||
var target = ReadTarget($"Code\\Controllers\\controller_{table.Name.ToLower()}.cs", rs);
|
||||
Assert.Equal(target, rs);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildParameter()
|
||||
{
|
||||
var option = _option.Clone() as CubeBuilderOption;
|
||||
|
||||
var table = _tables.FirstOrDefault(e => e.Name == "Parameter");
|
||||
if (table.InsertOnly)
|
||||
option.BaseClass = "ReadOnlyEntityController";
|
||||
else
|
||||
option.BaseClass = "EntityController";
|
||||
|
||||
var builder = new CubeBuilder
|
||||
{
|
||||
Table = table,
|
||||
Option = option,
|
||||
RootNamespace = $"{option.ConnName}.Web",
|
||||
AreaName = "Admin",
|
||||
};
|
||||
|
||||
// 数据类
|
||||
builder.Execute();
|
||||
|
||||
var rs = builder.ToString();
|
||||
Assert.NotEmpty(rs);
|
||||
|
||||
var target = ReadTarget($"Code\\Controllers\\controller_{table.Name.ToLower()}.cs", rs);
|
||||
Assert.Equal(target, rs);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildArea()
|
||||
{
|
||||
var option = _option.Clone() as CubeBuilderOption;
|
||||
|
||||
var table = _tables.FirstOrDefault(e => e.Name == "Area");
|
||||
if (table.InsertOnly)
|
||||
option.BaseClass = "ReadOnlyEntityController";
|
||||
else
|
||||
option.BaseClass = "EntityController";
|
||||
|
||||
var builder = new CubeBuilder
|
||||
{
|
||||
Table = table,
|
||||
Option = option,
|
||||
RootNamespace = $"{option.ConnName}.Web",
|
||||
AreaName = "Admin",
|
||||
};
|
||||
|
||||
// 数据类
|
||||
builder.Execute();
|
||||
|
||||
var rs = builder.ToString();
|
||||
Assert.NotEmpty(rs);
|
||||
|
||||
var target = ReadTarget($"Code\\Controllers\\controller_{table.Name.ToLower()}.cs", rs);
|
||||
Assert.Equal(target, rs);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildTenant()
|
||||
{
|
||||
var option = _option.Clone() as CubeBuilderOption;
|
||||
|
||||
var table = _tables.FirstOrDefault(e => e.Name == "Tenant");
|
||||
if (table.InsertOnly)
|
||||
option.BaseClass = "ReadOnlyEntityController";
|
||||
else
|
||||
option.BaseClass = "EntityController";
|
||||
|
||||
var builder = new CubeBuilder
|
||||
{
|
||||
Table = table,
|
||||
Option = option,
|
||||
RootNamespace = $"{option.ConnName}.Web",
|
||||
AreaName = "Admin",
|
||||
};
|
||||
|
||||
// 数据类
|
||||
builder.Execute();
|
||||
|
||||
var rs = builder.ToString();
|
||||
Assert.NotEmpty(rs);
|
||||
|
||||
var target = ReadTarget($"Code\\Controllers\\controller_{table.Name.ToLower()}.cs", rs);
|
||||
Assert.Equal(target, rs);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildTenantUser()
|
||||
{
|
||||
var option = _option.Clone() as CubeBuilderOption;
|
||||
|
||||
var table = _tables.FirstOrDefault(e => e.Name == "TenantUser");
|
||||
if (table.InsertOnly)
|
||||
option.BaseClass = "ReadOnlyEntityController";
|
||||
else
|
||||
option.BaseClass = "EntityController";
|
||||
|
||||
var builder = new CubeBuilder
|
||||
{
|
||||
Table = table,
|
||||
Option = option,
|
||||
RootNamespace = $"{option.ConnName}.Web",
|
||||
AreaName = "Admin",
|
||||
};
|
||||
|
||||
// 数据类
|
||||
builder.Execute();
|
||||
|
||||
var rs = builder.ToString();
|
||||
Assert.NotEmpty(rs);
|
||||
|
||||
var target = ReadTarget($"Code\\Controllers\\controller_{table.Name.ToLower()}.cs", rs);
|
||||
Assert.Equal(target, rs);
|
||||
}
|
||||
}
|
|
@ -45,6 +45,10 @@
|
|||
<None Include="Code\Models\**">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<Compile Remove="Code\Controllers\**" />
|
||||
<None Include="Code\Controllers\**">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<Compile Remove="DataAccessLayer\Sqls\**" />
|
||||
<None Include="DataAccessLayer\Sqls\**">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
|
@ -96,6 +100,7 @@
|
|||
<ProjectReference Include="..\XCode.DB2\XCode.DB2.csproj" />
|
||||
<ProjectReference Include="..\XCode.HighGo\XCode.HighGo.csproj" />
|
||||
<ProjectReference Include="..\XCode.KingBase\XCode.KingBase.csproj" />
|
||||
<ProjectReference Include="..\XCodeTool\XCodeTool.csproj" />
|
||||
<ProjectReference Include="..\XCode\XCode.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
Loading…
Reference in New Issue