贴代码框架PasteForm特性介绍之select,selects,lselect和reload

news2024/11/27 10:12:59

简介

PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管理端只有Html+js版本的,后续将支持小程序,Vue等

案例源码

案例源码在

https://gitee.com/pastecode/paste-template

不定期升级

AllInDto!

通过引入PasteForm,一个项目哪怕100个数据表,一般的管理页面也才不到10个,除非有非常多的特殊功能,否则都能用PasteForm中的表格和表单来实现!

在这里插入图片描述

select lselect selects

对于select(option),相信前端的小伙伴肯定熟悉,作为表单中的一个重要组件,PasteForm也对这个组件做了支持!

特性信息

select:在UI中使用表示,所以只能选择一个
selects:则使用div显示,一般一行一个数据,允许多选
lselect:和selects类似,不过他是横向表示的

字段类型示例说明
args1字符[{“name”:“大”,“value”:“1”},{“name”:“小”,“value”:“2”}]表示单选的可选值,name是显示 value是值,如果为空,则对应字段必须为enum类型,系统会去读取enum的内容
args2字符,如果值类型不是数组,则返回字符串,用这个字符拼接,也就是分割字符,这个要看当前字段是否是string类型
args3字符-1,0去除某些值的选项,比如去除-1表示的全部等,在enum的时候适用,配置的时候args1为空这个时候,从enum中读取
args4字符0可选数量,不填或者0变表示不限

reload

这个特性有点特殊,因为必须和select结合使用,他表示select选择其中一项后,组合选中的值,重新向API请求,API在接收到这个信息后,针对性的做一些变更!

在select上适用,比如位置使用select呈现,首页,个人中心,当这个选项变更的时候,我们希望对应的图片的规格变成,则有切换后,去读取reload特性
然后把值回传给API,API居于query参数,把默认值修改和对应的图片规格变更后下发,注意query的key是不能重复的

字段类型示例说明
args1strlocation表示query的字段,值为当前选定的值

案例UI

在这里插入图片描述

提交信息

上面的UI中,我们是随便填写点东西后,提交,看到的提交信息如下

在这里插入图片描述

这里要注意,如果比如age这个字段没有填写,留空,由于字段类型为int[],则这个时候回传为null,也就是提交的信息中没有age这个字段!
注意看上图的回传的数据类型各不同,这个是由Dto决定的!

Dto内容

    /// <summary>
    /// 
    /// </summary>
    public class SelectDto
    {

        ///<summary>
        ///单选 一般表示状态,内定的,有点像Enum,关于Enum后续会支持
        ///</summary>
        [ColumnDataType("mark", "test", "datetype")]
        [PasteSelect("[{\"name\":\"日类型\",\"value\":0},{\"name\":\"月类型\",\"value\":1},{\"name\":\"年类型\",\"value\":2}]","0")]
        public int DateType { get; set; }
        /// <summary>
        /// 年龄 多个之间使用,隔开
        /// </summary>
        [ColumnDataType("splitarray")]
        public int[] Ages { get; set; }
        /// <summary>
        /// 复选 多个之间用逗号隔开
        /// </summary>
        [PasteSelects("[{\"name\":\"日类型\",\"value\":\"day\"},{\"name\":\"月类型\",\"value\":\"month\"},{\"name\":\"年类型\",\"value\":\"year\"}]", ",")]
        public string TypeStrs { get; set; }
        /// <summary>
        /// 复选数组 配置最多选择1项,由args4配置,当前等效于PasteSelects
        /// </summary>
        [ColumnDataType("selects", "[{\"name\":\"日类型\",\"value\":\"day\"},{\"name\":\"月类型\",\"value\":\"month\"},{\"name\":\"年类型\",\"value\":\"year\"}]","","","1")]
        public string[] Types { get; set; }
        /// <summary>
        /// 分类 多个之间使用,隔开,有默认值1,2,5,前端为字符串输入,用分隔符分割,后端接收到的为int[]
        /// </summary>
        [ColumnDataType("splitarray")]
        public int[] Tabs { get; set; } = new int[] { 1, 2, 5 };
        /// <summary>
        /// 曾用名 多个之间使用,隔开,表示的是用户用分隔符输入,然后提交给后端的时候变更为对应的数组,比如当前的string[]
        /// </summary>
        [ColumnDataType("splitarray")]
        public string[] Names { get; set; }
        /// <summary>
        /// 动作类型 这是一个Enum类型
        /// </summary>
        public ActionEnum ActionType { get; set; }
        /// <summary>
        /// 横向分类 这是一个Enum类型,而且使用了过滤,过滤掉-1和0的值的选项不返回前端
        /// </summary>
        [PasteLselect("", "-1,0")]
        public ActionEnum ClassType { get; set; }

    }

如上所示,字段ActionType和ClassType其实都是ActionEnum,但是在UI中的显示完全不一样,因为ActionType默认为select,而ClassType配置为lselect了,
还有一点,看最上图的UI中,横向分类只有"正常,停止,取消",那是因为ClassType的lselect特性配置了ignore=-1,0 表示忽略值为-1和0的选项!

ActionEnum枚举

我看下Enum的内容

    /// <summary>
    /// 动作枚举
    /// </summary>
    public enum ActionEnum
    {
        /// <summary>
        /// 查看所有
        /// </summary>
        all=-1,
        /// <summary>
        /// 正常 可以正常使用的
        /// </summary>
        start = 1,
        /// <summary>
        /// 停止
        /// </summary>
        stop = 4,
        /// <summary>
        /// 取消
        /// </summary>
        cannel = 5
    }

注意 Enum的文件需要存放于XXX.Domian或者XXX.Application.Contracts子项目中!

数量限定

查看特性参数中的args4,表示限定数量,如上我配置了复选数组这个字段的数量限制为1,则再选择一个的时候就如下

在这里插入图片描述

reload的使用

reload源自于特殊的需求,比如贴代码的发帖中有这么限定,就是用户可以选择文章类型是Markdown还是Richtext

在这里插入图片描述

如上,这个案例,我们希望用户选择内容格式为HTML的时候内容为Richtext模式,当用户选择内容格式为markdown的时候,内容格式切换为Markdown
如果上图我点击内容格式,选择为Markdown,则页面会刷新以下,然后看到的如下图:

在这里插入图片描述

Reload Dto

    ///<summary>
    ///PageInfo
    ///</summary>
    public class PageInfoAddDto
    {

        ///<summary>
        ///标题
        ///</summary>
        [MaxLength(64)]
        public string Title { get; set; }

        /// <summary>
        /// 封面图
        /// </summary>
        [MaxLength(256)]
        [ColumnDataType("image", "1", "article", "300*300")]
        public string CoverImage { get; set; } = "";

        ///<summary>
        ///描述
        ///</summary>
        [MaxLength(128)]
        public string Desc { get; set; }

        ///<summary>
        ///关键字
        ///</summary>
        [MaxLength(128)]
        public string KeyWord { get; set; }

        ///<summary>
        ///文章类型
        ///</summary>
        [PasteSelect(PublicString.SelectValueBlogType)]
        public int ArticleType { get; set; }

        /// <summary>
        /// 所属板块
        /// </summary>
        [ColumnDataType("outers", "cateInfo", "", "id", "name")]
        public int[] cateids { get; set; }

        ///<summary>
        ///文章正文
        ///</summary>
        [ColumnDataType("richtext","","markdown")]
        public string Body { get; set; } = "";

        /// <summary>
        /// Markdown
        /// </summary>
        [ColumnDataType("markdown", "", "body")]
        public string Markdown { get; set; } = "";

        /// <summary>
        /// 内容格式 0富文本html模式1md模式
        /// </summary>
        [PasteSelect(PublicString.SelectValueBlogBodyType)]
        [ColumnDataType("reload", "bstyle")]
        [ColumnDataType("query","bstyle")]
        public int BodyStyle { get; set; } = 0;

    }

由于配置reload之后,是在对应的select选择修改后,重新加载,所以有一个载入的动作,所以需要配置query特性,表示从url中获取这个值!

Api代码

由于这个比较特殊,所以对应的API也要变更,案例中的如下:

        /// <summary>
        /// 读取AddDto的数据模型
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public PasteBuilderHelper.VoloModelInfo ReadAddModel()
        {
            var model = new PageInfoAddDto();
            if (base._httpContext.Request.Query.ContainsKey("bstyle")) {
                int.TryParse(base._httpContext.Request.Query["bstyle"].ToString(),out var bstyle);
                model.BodyStyle = bstyle;
            }
            var _model = PasteBuilderHelper.ReadModelProperty(model);
            if (_model != null)
            {
                if (model.BodyStyle == 0)
                {
                    var _find = _model.Properties.Where(x => x.Name == "markdown").FirstOrDefault();
                    if (_find != null)
                    {
                        if (_find.Attributes == null) { _find.Attributes = new List<PasteBuilderHelper.VoloModelAttribute>(); }
                        _find.Attributes.Add(new PasteBuilderHelper.VoloModelAttribute { Name = "hidden" });
                    }
                }
                else
                {
                    var _find = _model.Properties.Where(x => x.Name == "body").FirstOrDefault();
                    if (_find != null)
                    {
                        if (_find.Attributes == null) { _find.Attributes = new List<PasteBuilderHelper.VoloModelAttribute>(); }
                        _find.Attributes.Add(new PasteBuilderHelper.VoloModelAttribute { Name = "hidden" });
                    }
                }
            }
            return _model;
        }

上面代码中,就是基于url中的参数bstyle,来动态修改字段和字段的特性,从而达到返回前端不一样的!

更多相关查看 贴代码PasteForm专题介绍

我们下期见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2244405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI+教育】一些记录@2024.11.16

《万字长文&#xff0c;探讨关于ChatGPT的五个最核心问题》 万字长文&#xff0c;探讨关于ChatGPT的五个最核心问题关于 ChatGPT 铺天盖地的信息让人无所适从。本文则试图提炼出五个关键问题&#xff1a;如何理解这次范式突破&#xff0c;未来能达到的技术天花板&#xff0c;行…

基于vue框架的的图书在线销售系统设计2503xPC端(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,图书分类,图书信息,入库信息 开题报告内容 基于Vue框架的图书在线销售系统设计开题报告 一、研究背景与意义 随着互联网技术的不断发展和普及&#xff0c;电子商务已成为现代商业的重要组成部分。图书作为知识和文化的载体&#…

android:taskAffinity 对Activity退出时跳转的影响

android:taskAffinity 对Activity跳转的影响 概述taskAffinity 的工作机制taskAffinity对 Activity 跳转的影响一个实际的开发问题总结参考 概述 在 Android 开发中&#xff0c;任务栈&#xff08;Task&#xff09;是一个核心概念。它决定了应用程序的 Activity 如何相互交互以…

Android15之解决:Dex checksum does not match for dex:framework.jar问题(二百三十九)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

SpringBoot(7)-Swagger

目录 一、是什么 二、SpringBoot集成Swagger 三、配置Swagger 3.1 配置文档信息 3.2 配置扫描接口 3.3 配置Swagger开关 3.4 配置API分组 3.5 实体配置 四、常用注解 五、总结 一、是什么 是一款API框架&#xff0c;API文档和API定义同步更新&#xff0c;可以在线测…

小程序19-微信小程序的样式和组件介绍

在小程序中不能使用 HTML 标签&#xff0c;也就没有 DOM 和 BOM&#xff0c;CSS 也仅支持部分选择器 小程序提供了 WXML 进行页面结构的编写&#xff0c;WXSS 进行页面的样式编写 WXML 提供了 view、text、image、navigator等标签构建页面结构&#xff0c;小程序中标签称为组件…

[Admin] Dashboard Filter for Mix Report Types

Background RevOps team has built a dashboard for sales team to track team members’ performance, but they’re blocked by how to provide a manager view based on sales’ hierarchy. Therefore, they seek for dev team’s help to clear their blocker. From foll…

基于AIRTEST和Jmeter、Postman的自动化测试框架

基于目前项目和团队技术升级&#xff0c;采用了UI自动化和接口自动化联动数据&#xff0c;进行相关测试活动&#xff0c;获得更好的测试质量和测试结果。

使用 Azure OpenAI 服务对数据进行联合 SharePoint 搜索

作者&#xff1a;来自 Elastic Gustavo Llermaly 使用 Azure OpenAI 服务处理你的数据&#xff0c;并使用 Elastic 作为向量数据库。 在本文中&#xff0c;我们将探索 Azure OpenAI 服务 “On Your Data”&#xff0c;使用 Elasticsearch 作为数据源。我们将使用 Elastic Shar…

Linux 入门——基本指令1

目录 一背景知识的简介 二 入门相关指令的使用 一.背景知识的简介 1.认识 Linux &#xff0c;了解Linux 的相关背景 其实Linux 是从 Unix 发展而来的。 Linux&#xff0c;一般指GNU/Linux&#xff08;单独的Linux内核并不可直接使用&#xff0c;一般搭配GNU套件&#xff0…

RabbitMQ消息可靠性保证机制4--消费端限流

7.7 消费端限流 在类似如秒杀活动中&#xff0c;一开始会有大量并发写请求到达服务端&#xff0c;城机对消息进行削峰处理&#xff0c;如何做&#xff1f; 当消息投递的速度远快于消费的速度时&#xff0c;随着时间积累就会出现“消息积压”。消息中间件本身是具备一定的缓冲…

抽象java入门1.5.3.2——类的进阶(中)

前期回顾&#xff1a;抽象java入门1.5.3.1——类的进阶https://blog.csdn.net/c_yanxin_ru/article/details/140858898?spm1001.2014.3001.5501 总结&#xff1a; 在代码溯源中&#xff0c;我发现了一个奇怪的东西&#xff0c;就是OUT不是类中类&#xff08;不是常规类的写法…

题解 洛谷 Luogu P1873 [COCI 2011/2012 #5] EKO / 砍树 二分答案 C/C++

题目传送门&#xff1a; P1873 [COCI 2011/2012 #5] EKO / 砍树 - 洛谷 | 计算机科学教育新生态https://www.luogu.com.cn/problem/P1873思路&#xff1a; 很简单的二分答案 每次找区间中点 m&#xff0c;判断以 m 为高度砍下的木头是否够 h 即可 代码&#xff1a; #defin…

蓝桥杯第22场小白入门赛2~5题

这场比赛开打第二题就理解错意思了&#xff0c;还以为只能用3个消除和5个消除其中一种呢&#xff0c;结果就是死活a不过去&#xff0c;第三题根本读不懂题意&#xff0c;这蓝桥杯的题面我只能说出的是一言难尽啊。。第四题写出来一点但是后来知道是错了&#xff0c;不会正解&am…

PyQt天天酷跑游戏(附下载地址)

欢迎下载体验&#xff01; 文件大小&#xff1a;25.7 M 下载地址&#xff1a;链接&#xff1a;https://wwrr.lanzoul.com/ifOvc2fe163c 观看演示视频~ Pyqt-跑酷游戏 一&#xff0e;前言 天天酷跑大家都玩过吧&#xff0c;这是我们学生时代的回忆&#xff0c;目前这款游戏还…

跨平台WPF框架Avalonia教程 十五

ListBox 列表框 列表框从元素源集合中显示多行元素&#xff0c;并允许选择单个或多个。 列表中的元素可以组合、绑定和模板化。 列表的高度会扩展以适应所有元素&#xff0c;除非特别设置&#xff08;使用高度属性&#xff09;&#xff0c;或由容器控件设置&#xff0c;例如…

python蓝桥杯刷题2

1.最短路 题解&#xff1a;这个采用暴力枚举&#xff0c;自己数一下就好了 2.门牌制作 题解&#xff1a;门牌号从1到2020&#xff0c;使用for循环遍历一遍&#xff0c;因为range函数无法调用最后一个数字&#xff0c;所以设置成1到2021即可&#xff0c;然后每一次for循环&…

基于YOLOv8深度学习的独居老人情感状态监护系统(PyQt5界面+数据集+训练代码)

本研究提出了一种创新的独居老人情感状态监护系统&#xff0c;基于YOLOV8深度学习模型&#xff0c;旨在通过对老年人面部表情的实时监测与分析&#xff0c;来精准识别其情感变化&#xff0c;从而提高独居老人的生活质量&#xff0c;确保其心理健康。本系统通过整合先进的YOLOV8…

基于SSM的农家乐管理系统+论文示例参考

1.项目介绍 功能模块&#xff1a;管理员&#xff08;农家乐管理、美食信息管理、住宿信息管理、活动信息、用户管理、活动报名、论坛等&#xff09;&#xff0c;普通用户&#xff08;注册登录、活动报名、客房预订、用户评价、收藏管理、模拟支付等&#xff09;技术选型&#…

小米顾此失彼:汽车毛利大增,手机却跌至低谷

科技新知 原创作者丨依蔓 编辑丨蕨影 三年磨一剑的小米汽车毛利率大增&#xff0c;手机业务毛利率却出现下滑景象。 11月18日&#xff0c;小米集团发布 2024年第三季度财报&#xff0c;公司实现营收925.1亿元&#xff0c;同比增长30.5%&#xff0c;预估902.8亿元&#xff1b;…