display

这个一般用于显示object对象中的某一个字段,比如如下代码

display

在ListDto中用于显示某一个object类型的字段

字段 类型 示例 说明
args1 字符 name 显示当前字段的某一个子字段,默认为name
    ///<summary>
    ///角色绑定权限
    ///</summary>
    [PasteDisable(true, true)]
    public class GradeRoleListDto : EntityDto<int>
    {
        ///<summary>
        ///角色ID 点击选择角色
        ///</summary>
        public int GradeId { get; set; }

        /// <summary>
        /// 角色
        /// </summary>
        [PasteDisplay]
        public GradeShortModel ExtendGrade { get; set; }

        ///<summary>
        ///权限ID 点击选择权限
        ///</summary>
        public int RoleId { get; set; }

        /// <summary>
        /// 权限
        /// </summary>
        [PasteDisplay("name")]
        public RoleShortModel ExtendRole { get; set; }

    }

看上面的Dto,主要是我这个刚好GradeShortModel的显示是name这个字段,所以可以省略

图片alt

超级管理员
hidden

隐藏,其实我一直很想改成hide。。。或许后面会做兼容!
这个就是隐藏这个字段,
这个有点像jsonignore
也就是提交的时候这个字段不会回传的,所以要注意!!!
在view.html中,也就是表单页面中,表示不渲染这个对象,响应的在提交数据的时候也没有这个对象!!!

hidden

表示隐藏这个字段,一般是主键ID,或者外表链接过来的会这配置,比如需要给cate添加子项,则添加由cate那边过来
这个也适用于ListDto

字段 类型 示例 说明
args1 字符 bind 如果不填表示隐藏,如果填写了表示页面的query中model=xxx的时候不隐藏,表示非xxx的时候隐藏,xxx的时候不隐藏

这个特性一般用于表格显示的时候,也就是index.html页面,这个页面有几种模式(query中model=xxx)

view

默认模式,不填也是这个模式

select

模式,就是outer特性的时候,最后一列是选择的时候

bind

这个模式一般是绑定关系的时候,比如从角色列表中,找到一个角色,然后给这个角色绑定权限,那么逻辑上就是打开权限列表页面,如果已经绑定这个角色了的,则switch就是打开状态,否则就是关闭状态,这个时候role的页面就是bind模式!

这个hidden有时候可以被唤醒,就是会显示出来!
在changeui中,会基于当前字段的值进行显示隐藏
具体的查看功能类!
那么有没有一个不显示出来的呢?
hide
其实hidden可以看成是readonly的隐藏款,因为在表单提交的时候是会提交这个对象的!!!

超级管理员
empty

这个特性只用于表单的时候
和hidden很像对吧!
不过他们还是有区别的
empty会占位
而hidden不会占位

比如以下信息

    ///<summary>
    ///网关配置 为不同项目的不同环境配置不一样的IP网段
    ///</summary>
    public class BindProjectNetworkAddDto
    {

        ///<summary>
        ///项目 对哪个项目生效
        ///</summary>
        [ColumnDataType("outer", "projectInfo", "extendProject", "id", "name")]
        [PasteMark]
        [PasteRequired]
        public int ProjectId { get; set; }

        /// <summary>
        /// 占位
        /// </summary>
        [PasteEmpty]
        public int Menu1 { get; set; }

        ///<summary>
        ///服务器 在哪一台服务器上生效
        ///</summary>
        [ColumnDataType("outer", "linuxInfo", "extendLinux", "id", "name")]
        [PasteMark]
        [PasteRequired]
        public int LinuxId { get; set; }

        /// <summary>
        /// 占位
        /// </summary>
        [PasteEmpty]
        public int Menu2 { get; set; }

        ///<summary>
        /// 网关地址 示例:192.168.1.0/16
        ///</summary>
        [MaxLength(24)]
        [PasteMark]
        [Required(ErrorMessage ="网关地址不能为空,请重新输入 示例 172.5.1.0/16")]
        [RegularExpression("^(192|172)(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){2}(\\.0/16)$", ErrorMessage = "{0}输入格式错误,192|172打头0/16结尾,示例:192.168.5.0/16")]
        public string Gatway { get; set; }

        /// <summary>
        /// 占位
        /// </summary>
        [PasteEmpty]
        public int Menu3 { get; set; }

    }

看上面,其实Menu字段的都是无效字段,为了占位用而已,不然这个表单就很少内容了
就三个字段,占2行,第一行2个字段,第二行一个字段
通过添加empty字段后,就变成三行了
每行开头一个有效字段,第二列的字段都是空的
效果如下

图片alt

如上,那么问题来了,如果我需要每一行之间空一个空位咋办???

超级管理员
readonly

有些时候,我们希望显示某些内容,不希望用户可以修改
这个时候我们可以给这个字段上一个特性
readonly

这个特性的作用就是给组件上readonly,所以需要对应的组件支持这个特性!
比如text textarea richtext等都是支持的!

注意提交数据的时候,服务端需要做判断,否则用户可以通过F12进行修改后提交!!!

        /// <summary>
        /// 文本 这个可以编辑
        /// </summary>
        [PasteText]
        public string Name1 { get; set; }

        /// <summary>
        /// 文本 这个不能编辑
        /// </summary>
        [PasteText]
        [PasteReadOnly]
        public string Name2 { get; set; } = "给你看看";

上面的代码在UI上为

图片alt

后面这个点击后没有输入焦点,不让修改,
样式上暂时的需求是不需要不同,你也可以为readonly配置不一样的样式,比如有点灰色的背景色!

看到上面我就知道有个BUG了,readonly应该不要给他删除按钮!!!

超级管理员
password

这个没啥好说的,就是密码框!

超级管理员
html

这个表示编写html代码,所以一般用于表格页面

html

如果要显示自定义的表格,则使用这个,表示直接显示信息模板注意里面的带参使用{{:=item.name}}这样的形式

字段 类型 示例 说明
args1 字符 <div><span>{{:=item.name}}</span><span>{{:=item.desc}}</span></div> 需要在td中显示的html代码,支持模板的写法

比如说案例项目的权限列表页面
效果如下
图片alt
看特别是名称这一列,这一列肯定是html干活的,我们看下这个特性是如何写的

    ///<summary>
    ///权限列表
    ///</summary>
    [PasteLinkQuery("fatherId")]
    [PasteButton("备份", "global_role_output(this);")]
    [PasteButton("恢复", "global_role_default(this);","","grady")]
    public class RoleInfoListDto
    {
        /// <summary>
        /// ID
        /// </summary>
        [ColumnDataType("orderby", "Id", "Id desc")]
        public int Id { get; set; }

        ///<summary>
        ///名称
        ///</summary>
        [PasteClass]
        [ColumnDataType("html", "<div class=\"level level{{:=item.level}} role{{:=item.roleTypeInt}}\">{{ if(item.icon){ }}<i class=\"Hui-iconfont {{:=item.icon}}\"></i>{{ } }} {{:=item.name}}</div>")]
        public string Name { get; set; }
}

这个特别适合于自定义一些样式等!

超级管理员
width

width

表示这个字段在表格得宽度,可以为*或者对应得数字,是表格得列的宽度的权重,这个适用于ListDto

字段 类型 示例 说明
args1 字符 60 表示这个列的宽度,可以为数字也可以是*比如3*这样

表格数据展示的时候显示宽度用

超级管理员
style

style

针对一些特殊的设定,比如textarea,有些地方我们要设置高一些

字段 类型 示例 说明
args1 字符 height:500px; 就是style里面的内容

其实就是style里面的代码部分,注意一个项是以;结尾的

超级管理员
class

针对一些自定义的class,可以通过这个来配置

字段 类型 示例 说明
args1 字符 btngo 表示这个对象要添加的class

可以理解为为表单字段设定class名称
默认调用的是fleft表示内容做停靠!

超级管理员
singlerow

在表单中,数据一般是以2列显示的,
也就是表单的内容一左一右为一行
如果你要某一个数据占整行,就给他这个特性!

超级管理员
ui

这个主要是给chart使用的,默认表格是table,也就是列表页面支持table和chart模式
chart就是图表有line,bar模式的,目前采用的是echarts的组件

字段 类型 示例 说明
args1 字符串 table 首显方式table就是默认的表格形式
args2 字符串 chart 备选方式
args1 字符串
args1 字符串

如果args2不填写,则UI中不会出现用户可以切换的按钮!
args1写哪个,哪个就是默认显示的方式
如果query有,比如show_type=chart,而args1又为table
则chart生效!!!

和这个相关的还有
charty
chartx
chartseries

超级管理员
chartx

X轴
一般表示时间
图片alt
如上图所示,下面哪一行的就是chartx,在图中表示时间轴

参数 类型 示例 备注
args1 str 时间 X轴的名称,貌似好像没用
args2 str 备用 备用
args3 str 备用 备用
args4 str 备用 备用

注意一个Model里面只能有一个为chartx,有且只能有一个!

超级管理员
charty

Y轴?
我的理解Y轴柱
图片alt
上图的左侧的成绩多少分,右侧的身高多少cm

这个特性是标注在Class上的
按照标注顺序有序标0开始
比如上图的,可能成绩有语文,数学,英语,身高
那么语文,数学,英语就用左边柱子的刻度
身高单独用右边的刻度!

参数 类型 示例 说明
args1 str 成绩 显示名称,比如上面的成绩,身高
args2 str left 柱子放置位置,left左侧,right右侧
args3 int 0 偏移量
args4 str {value}cm 格式化显示

那么接下来的就是数据轴了,请看chartseries

超级管理员
chartseries

数据轴,上面案例说的 语文 数学 英语 身高的具体数值!
图片alt
就是主视图区域的柱子bar或者线段line

参数 类型 示例 说明
args1 str line line线段线条模式bar柱子形式
args2 int 0 用之前的charty的哪一根,注意和顺序有关
args3 str 标题 语文
args4 str 备用 备用

我的理解args3就是legend,最中间上面那个!

超级管理员
chart示例

上面的几个特性介绍了图表,我们来看下上面图片的额Dto的配置是怎么样的

///<summary>
///测试表 用于测试CURD的表
///</summary>
[PasteBatch("批量启用", "global_bitch_state(this,1)")]
[PasteBatch("批量禁用", "global_bitch_state(this,0)")]
[PasteUI("chart","table")]
[PasteCharty("成绩","left",0,"{value}分")]
[PasteCharty("身高","right",0,"{value}cm")]
//[ColumnDataType("button","新增新增","open_window('新增','./view.html?path=xxx')","add")]
public class TestTableListDto : EntityDto<int>
{
    ///<summary>
    ///姓名 模拟短文本输入
    ///</summary>
    [ColumnDataType("edit", "view")]
    public string Name { get; set; }

    ///<summary>
    ///头像 模拟图片上传
    ///</summary>
    [ColumnDataType("image")]
    public string Head { get; set; }

    ///<summary>
    ///年龄 模拟输入number
    ///</summary>
    [PasteMark]
    [PastePrefix("多少")]
    [ColumnDataType("edit","view")]
    [PasteUnit("周岁")]
    public int Age { get; set; }

    /// <summary>
    /// 金额
    /// </summary>
    [PasteFenToYuan]
    [PastePrefix("¥")]
    [ColumnDataType("edit", "view")]
    [PasteUnit("元")]
    public long Val1 { get; set; } = 1600;

    ///<summary>
    ///文本区域 模拟文本区域的输入
    ///</summary>
    [ColumnDataType("class", "fleft")]
    [PasteMark]
    [ColumnDataType("edit", "view")]
    public string Desc { get; set; }

    /////<summary>
    /////富文本 模拟富文本,前端HTML的是使用wangEditv5
    /////</summary>
    //public string Blog { get; set; }

    /// <summary>
    /// 开关
    /// </summary>
    [PasteSwitch("",true)]
    public bool IsOpen { get; set; }

    /// <summary>
    /// 开关
    /// </summary>
    [PasteSwitch("", false,"handlerClose")]
    public bool IsClose { get; set; }

    ///<summary>
    ///加入日期 模拟必填时间的输入
    ///</summary>
    [ColumnDataType("edit","view")]
    [ColumnDataType("chartx")]
    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>
    [ColumnDataType("select", "[{\"name\":\"日类型\",\"value\":0},{\"name\":\"月类型\",\"value\":1},{\"name\":\"年类型\",\"value\":2}]")]
    [ColumnDataType("edit","view")]
    public int DateType { get; set; }

    /// <summary>
    /// 给DateType编辑的时候使用,记得要赋值
    /// </summary>
    [PasteHidden]
    public List<SelectIntItem> DateType_expend_select_values { 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>
    ///成绩1 模拟前端限定2位小数
    ///</summary>
    [ColumnDataType("edit", "view")]
    [ColumnDataType("chartseries")]
    public double Score { get; set; }

    ///<summary>
    ///成绩2 模拟前端限定2位小数
    ///</summary>
    [ColumnDataType("chartseries")]
    public double Score2 { get; set; }

    ///<summary>
    ///身高 模拟前端限定2位小数
    ///</summary>
    [PasteChartseries("bar",1)]
    public double Score3 { get; set; }

    /// <summary>
    /// 普通菜单
    /// </summary>
    [ColumnDataType("menu", "菜单一", "open_window('查阅用户带参','./pasteform/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`,`./pasteform/index.html?path=userInfo&goid={{:=item.id}}`)\">条件1</a>", "")]
    public string Menu3 { get; set; }

    /// <summary>
    /// 菜单盒子菜单
    /// </summary>
    [ColumnDataType("menu", "菜单二", "open_window('查阅用户带参','./pasteform/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`,`./pasteform/index.html?path=userInfo&goid={{:=item.id}}`)\">条件2</a>", "box")]
    public string Menu4 { get; set; }

    /// <summary>
    /// 详细
    /// </summary>
    [ColumnDataType("menu", "详细", "open_window('查看{{:=item.id}}详细','./pasteform/detail.html?path=testTable&id={{:=item.id}}');", "Hui-iconfont-menu")]
    public string Menu6 { get; set; }

}

可以看到要以图表形式显示,依然简单,只需要打几个特性即可!!!

超级管理员
hide

本来不引入这个的,但是在最新的一个项目中遇到如下问题!
假设有一个字段
my_stype
值有1,2
当值为1的时候,我希望 regexp:myrole 的显示,也就是不为1的时候 regexp:myrole 隐藏!

注意看上面,myrole更多的是一个类,因为单个没必要用正则regexp,假设他里面有10个字段,有些字段我不希望显示(某些地方要使用long类型,而前端我希望使用datetiem形式显示,那就有了api提交后,由服务端进行转换,所以这个时候hide就有必要了!)

之前也在考虑是否要引入jsonignore这个特性(官方就有了)
这个特性有点特殊,估计后续会引入!

数据隐藏不是直接去除这么简单,比如
user_id
userinfo
这个时候userinfo往往是为了给user_id提供UI的支持的,比如你选中的是10021233这个用户,显示一串数字肯定不合适的,通过比如outer特性,可以读取到显示为张三李四,这样会不会更好!!

changeui不会唤醒hide
hide不会在UI中有渲染或dom
提交的时候hide等效于jsonignore,不会提交给api端!

超级管理员
贴代码框架
贴代码框架PasteForm的在线文档,主要介绍理念和特性及实际案例!
贴代码文档
什么才叫操作文档?对于操作人员来说,遇到哪个字段不懂意思,点击下即可查阅说明,这就是最好的文档!
PasteSpider在线操作文档
PasteSpider是专门为开发者开发的部署工具,五分钟上手,小内存服务器也可以使用,使用旁载模式,运行更安全!!!目前仅支持linux的服务器,win服务器的版本将在不久到来!
贴代码在线客服文档
是客服系统也是营销系统,支持丰富的话术配置,支持自定义消息格式,支持多站点入驻模式,一键部署快速搭建!