简介
PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管理端只有Html+js版本的,后续将支持小程序,Vue等
案例源码
案例源码在
https://gitee.com/pastecode/paste-template
不定期升级
AllInDto!
通过引入PasteForm,一个项目哪怕100个数据表,一般的管理页面也才不到10个,除非有非常多的特殊功能,否则都能用PasteForm中的表格和表单来实现!
本次的特性介绍,涉及的东西会多一些,你可以下载源码后,看看详细的,我们先来查看下各个特性的信息
button
用于表单中,的按钮,用意是让用户点击后触发函数,global_form_button_click(this,className,name);
注意按钮的value为当前字段的value,比如当前页面的path=nginxRoute
如果这个特性标注在model上,比如adddto,则表示form表单的按钮的文字
/// <summary>/// Http模板 表示使用Http模式的模板的内容/// </summary>[ColumnDataType("button")]public string Temp1 { get; set; } = "点击导入";
则上面会生成的页面内容为
Http模板:点击导入
点击导入点击后,会调用global_form_button_click(this,‘nginxRoute’,‘temp1’);
注意由于返回的首单次会小写,所以是temp1而不是Temp1
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
args1 | 字符 | 点击新增 | 表示按钮显示的文字 |
args2 | 字符 | global_func_btn(this) | 表示要执行的函数,如果为空,则使用上面的模式 |
menu
用于列表后面的菜单 比如<a href=“javascript:;” οnclick=“args2”><i class=“Hui-iconfont args3”>\args1
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
args1 | 字符 | 编辑 | 按钮的名称 |
args2 | 字符 | open_view(<%:=item.id%>); | onclick事件的代码 |
args3 | 字符 | Hui-iconfont-menu | 样式名称 |
args4 | 字符 | box | 默认不写,如果写box表示要放入到menubox中 |
ifmenu
基于条件模式的菜单,使用于Listdto中
示例: [ColumnDataType(“ifmenu”, “item.age==8”, “<a href=“javascript:;” οnclick=“open_window(222
,./index.html?path=userInfo&goid={{:=item.id}}
)”>条件2”, “box”)]
数据对象就是item表示当前这行数据
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
args1 | 字符 | item.isReady == true | if的表达式中()内的内容 |
args2 | 字符 | <a hreaf=“javascript:;” οnclick=“open({{:=item.id}})”> | 这里填写条件后的菜单代码,注意引用需要使用{{}} |
args3 | 字符 | box | 默认不写,如果写box表示要方入到menubox中 |
bitch
用户表格数据中的批量操作,示例
适用于Class的特性
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
args1 | 字符 | 编辑 | 按钮的名称 |
args2 | 字符 | open_view(<%:=item.id%>); | onclick事件的代码 |
args3 | 字符 | Hui-iconfont-menu | 暂未实现,预留给图标用 |
args4 | 字符 | 预留字段 |
UI
如上图,在案例项目的testTable中有完整的关于button,bitch,menu,ifmenu的使用示例,基于不同的配置实现按钮的显示
Dto
我们来看下对应的Dto是如何写的,由于这个是表格页面,那么对应的Dto应该是List
///<summary>///测试表 用于测试CURD的表///</summary>[PasteBitch("批量启用", "global_bitch_state(this,1)")][PasteBitch("批量禁用", "global_bitch_state(this,0)")]public class TestTableListDto : EntityDto<int>{///<summary>///其他干扰字段,这里隐藏不显示///</summary>/// <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:;\" οnclick=\"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:;\" οnclick=\"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; }}
由上可知,当为字段配置menu或者ifmenu的时候,对应的字段在表格中将不再以普通字段的模式显示,转化成最后的菜单了,如果要在中途的字段显示按钮如何操作???
button.UI
button一般用于表单中,一般为了引入其他的操作而定,上图对应的Dto为
///<summary>///案例Dto///</summary>public class XXXAddDto{/// <summary>/// 排序 小的排在前面/// </summary>public int Sort { get; set; }/// <summary>/// 访问正则 命中这个的则返回/// </summary>[MaxLength(128)]public string Hit_url { get; set; } = "(.*)";/// <summary>/// 来源正则 命中这个的则返回/// </summary>[MaxLength(128)]public string Hit_referrer { get; set; } = "(.*)";/// <summary>/// IP正则 命中这个的则返回/// </summary>[MaxLength(128)]public string Hit_ip { get; set; } = "(.*)";/// <summary>/// 地区正则 命中这个的则返回/// </summary>[MaxLength(128)]public string Hit_area { get; set; } = "(.*)";/// <summary>/// 标题正则 命中这个正则的则返回/// </summary>[MaxLength(128)]public string Hit_title { get; set; } = "(.*)";/// <summary>/// 操作/// </summary>[ColumnDataType("button", "正则校验", "open_window('正则测试','./view.html?path=regexMatch')")]public string RegexMatch { get; set; } = "正则校验";}
后话
后面在开发小程序端的时候发现类似vue的写法没法绑定事件,所以后面估计会对函数进行扩展,思路就是调用公共函数,比如表名,字段,传递参数等传递给一个公共函数,这样各个项目可以在公共函数中去自定义实现!
更多特性见
贴代码PasteForm专题介绍
我们下期见!