[feat] 增加生成魔方控制台增强版Search

This commit is contained in:
大石头 2024-12-29 21:15:40 +08:00
parent 4adf6ef2e1
commit d6d012cc01
12 changed files with 913 additions and 0 deletions

View File

@ -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();

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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>