后端通过对不同数据模型Dto进行特性处理,达到管控管理端页面的目的!
为此框架的顺序使用,贴代码还引入了
1.PasteDemo,项目案例,实际代码演示PaseteForm的各种用法等
2.PasteBuilder,代码生成器,针对PasteForm做了些优化,主要在生成Dto的特性的标注上
3.PasteTemplate,项目模板,基于当前模板可以快速的创建你的项目,减少一些脚手架的搭建工作!
4.PasteSpdier,支持Linux和Windows平台的服务器部署工具,可以使你的服务快速的部署到不同服务器上!
你可以下载PasteForm的案例项目到本地看看他是如何运行的
先看PasteTemplate里面的案例表TestTable
看看代码模块
///<summary>
///测试表 用于测试CURD的表
///</summary>
[PasteGroup("gra", "基础信息", true)]
[PasteGroup("grb", "其他", true)]
[PasteGroup("grc", "附加配置", false)]
public class TestTableAddDto
{
///<summary>
///姓名 模拟短文本输入
///</summary>
[MaxLength(32)]
[Required]
[PasteMark("test", "name")]
public string Name { get; set; }
///<summary>
///年龄 模拟输入number
///</summary>
[Range(5, 90, ErrorMessage = "年龄必须限定在5~90之间!")]
[ColumnDataType("unit", "岁")]
[PasteGroupItem("gra")]
public int Age { get; set; }
///<summary>
///头像 模拟图片上传
///</summary>
[MaxLength(128)]
[PasteMark("test", "head")]
[ColumnDataType("image", "1", "head", "60*60")]
public string Head { get; set; }
///<summary>
///文本区域 模拟文本区域的输入
///</summary>
[MaxLength(128)]
[PasteGroupItem("grb")]
public string Desc { get; set; }
/// <summary>
/// 评分
/// </summary>
[ColumnDataType("score", "1", "5")]
[PasteGroupItem("grb")]
public int Rate { get; set; } = 2;
///<summary>
///加入日期 模拟必填时间的输入
///</summary>
[PasteGroupItem("gra")]
public DateTime JoinDate { get; set; }
/// <summary>
/// 文件
/// </summary>
[ColumnDataType("file", "/api/app/Upload/UpFile?type=file")]
public string Fpath { get; set; } = "";
///<summary>
///单选 一般表示状态,内定的,有点像Enum,关于Enum后续会支持
///</summary>
[ColumnDataType("mark", "test", "datetype")]
[ColumnDataType("select", "[{\"name\":\"日类型\",\"value\":0},{\"name\":\"月类型\",\"value\":1},{\"name\":\"年类型\",\"value\":2}]")]
public int DateType { get; set; }
/// <summary>
/// 复选 多个之间用逗号隔开
/// </summary>
[ColumnDataType("selects", "[{\"name\":\"日类型\",\"value\":\"day\"},{\"name\":\"月类型\",\"value\":\"month\"},{\"name\":\"年类型\",\"value\":\"year\"}]", ",")]
public string TypeStrs { get; set; }
/// <summary>
/// 复选数组
/// </summary>
[ColumnDataType("selects", "[{\"name\":\"日类型\",\"value\":\"day\"},{\"name\":\"月类型\",\"value\":\"month\"},{\"name\":\"年类型\",\"value\":\"year\"}]")]
public string[] Types { get; set; }
///<summary>
///角色ID 这里一般用于外表,就是选择其他表的一个数据作为输入内容
///</summary>
[ColumnDataType("outer", "gradeInfo", "", "id", "name")]
[PasteGroupItem("grb")]
public int GradeId { get; set; }
///<summary>
///成绩 模拟前端限定2位小数
///</summary>
[ColumnDataType("unit", "分")]
public double Score { get; set; }
/// <summary>
/// 多图 回传的值是多个的,使用,隔开
/// </summary>
[ColumnDataType("image", "3", "img", "60*60")]
[PasteGroupItem("grb")]
public string Img2 { get; set; }
/// <summary>
/// 图片 回传的使用string[]的模式
/// </summary>
[ColumnDataType("image", "3", "img", "60*60")]
[PasteGroupItem("grb")]
public string[] Img3 { get; set; }
/// <summary>
/// 会员周期 会员生效区间
/// </summary>
[ColumnDataType("daterange", "dateStart", "dateEnd")]
public DateTime DateStart { get; set; } = DateTime.Parse("2024-09-01 00:00:00");
/// <summary>
/// 会员周期 会员生效区间
/// </summary>
[ColumnDataType("hidden")]
public DateTime DateEnd { get; set; } = DateTime.Parse("2024-10-01 00:00:00");
///<summary>
///用户 外部创建用户
///</summary>
[ColumnDataType("object", "gradeInfo", "", "id", "name")]
public Object Create { get; set; } = new GradeInfoAddDto { Name = "默认值" };
/// <summary>
/// 年龄 多个之间使用,隔开
/// </summary>
[ColumnDataType("splitarray")]
[PasteGroupItem("grc")]
public int[] Ages { get; set; }
/// <summary>
/// 分类 多个之间使用,隔开
/// </summary>
[ColumnDataType("splitarray")]
public int[] Tabs { get; set; } = new int[] { 1, 2, 5 };
/// <summary>
/// 曾用名 多个之间使用,隔开
/// </summary>
[ColumnDataType("splitarray")]
[PasteGroupItem("grc")]
public string[] Names { get; set; }
/////<summary>
/////富文本 模拟富文本,前端HTML的是使用wangEditv5
/////</summary>
//public string Blog { get; set; }
/// <summary>
/// 动作类型
/// </summary>
public ActionEnum ActionType { get; set; }
/// <summary>
/// M1
/// </summary>
[ColumnDataType("empty")]
[PasteSingleRow]
public int Menu1 { get; set; }
/// <summary>
/// M2
/// </summary>
public int Menu2 { get; set; }
/// <summary>
/// M3
/// </summary>
public int Menu3 { get; set; }
/// <summary>
/// M4
/// </summary>
[ColumnDataType("empty")]
public int Menu4 { get; set; }
/// <summary>
/// M5
/// </summary>
public int Menu5 { get; set; }
/// <summary>
/// M6
/// </summary>
public int Menu6 { get; set; }
}
对应的代码为
///<summary>
///测试表 用于测试CURD的表
///</summary>
[PasteBatch("批量启用", "global_bitch_state(this,1)")]
[PasteBatch("批量禁用", "global_bitch_state(this,0)")]
//[ColumnDataType("button","新增新增","open_window('新增','./view.html?path=xxx')","add")]
public class TestTableListDto : EntityDto<int>
{
///<summary>
///姓名 模拟短文本输入
///</summary>
public string Name { get; set; }
///<summary>
///头像 模拟图片上传
///</summary>
[ColumnDataType("image")]
public string Head { get; set; }
///<summary>
///年龄 模拟输入number
///</summary>
[PasteUnit("岁")]
[PasteMark]
public int Age { get; set; }
///<summary>
///文本区域 模拟文本区域的输入
///</summary>
[ColumnDataType("class", "fleft")]
[PasteMark]
public string Desc { get; set; }
///<summary>
///富文本 模拟富文本,前端HTML的是使用wangEditv5
///</summary>
public string Blog { get; set; }
///<summary>
///加入日期 模拟必填时间的输入
///</summary>
public DateTime JoinDate { get; set; }
///<summary>
///更新日期 模拟非必填的时间输入
///</summary>
[ColumnDataType("hidden")]
public DateTime? UpdateDate { get; set; }
/////<summary>
/////单选 一般表示状态,内定的,有点像Enum,关于Enum后续会支持
/////</summary>
//[ColumnDataType("html", "<div>{{:=item.dateType}}-{{:=item.gradeId}}</div>")]
//public int DateType { get; set; }
/// <summary>
/// 类型隐藏
/// </summary>
[PasteHidden]
[ColumnDataType("select", "[{\"name\":\"日类型\",\"value\":0},{\"name\":\"月类型\",\"value\":1},{\"name\":\"年类型\",\"value\":2}]")]
public int DateType { get; set; }
/// <summary>
/// 类型显示
/// </summary>
[ColumnDataType("html", "<div class=\"dtype{{:=item.dateTypeInt}}\">{{:=item.dateType}}-{{:=item.dateType}}</div>")]
public int DateTypeInt { get { return DateType; } }
///<summary>
///角色ID 这里一般用于外表,就是选择其他表的一个数据作为输入内容
///</summary>
[ColumnDataType("hidden")]
public int GradeId { get; set; }
///<summary>
///成绩 模拟前端限定2位小数
///</summary>
[ColumnDataType("fentoyuan")]
[PastePrefix("+")]
[PasteUnit("分")]
public double Score { get; set; }
/// <summary>
/// 普通菜单
/// </summary>
[ColumnDataType("menu", "菜单一", "open_window('查阅用户带参','./index.html?path=userInfo&xxid={{:=item.id}}');", "Hui-iconfont-menu")]
public string Menu2 { get; set; }
/// <summary>
/// 普通条件菜单
/// </summary>
[ColumnDataType("ifmenu", "item.age==7", "<a href=\"javascript:;\" onclick=\"open_window(`111`,`./index.html?path=userInfo&goid={{:=item.id}}`)\">条件1</a>", "")]
public string Menu3 { get; set; }
/// <summary>
/// 菜单盒子菜单
/// </summary>
[ColumnDataType("menu", "菜单二", "open_window('查阅用户带参','./index.html?path=userInfo&xxid={{:=item.id}}');", "Hui-iconfont-menu", "box")]
public string Menu5 { get; set; }
/// <summary>
/// 菜单盒子中的条件菜单
/// </summary>
[ColumnDataType("ifmenu", "item.age==8", "<a href=\"javascript:;\" onclick=\"open_window(`222`,`./index.html?path=userInfo&goid={{:=item.id}}`)\">条件2</a>", "box")]
public string Menu4 { get; set; }
/// <summary>
/// 详细
/// </summary>
[ColumnDataType("menu", "详细", "open_window('查看{{:=item.id}}详细','./detail.html?path=testTable&id={{:=item.id}}');", "Hui-iconfont-menu")]
public string Menu6 { get; set; }
}