当前位置: 首页 > news >正文

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

简介

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专题介绍

我们下期见!

相关文章:

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

简介 PasteForm是贴代码推出的 “新一代CRUD” &#xff0c;基于ABPvNext&#xff0c;目的是通过对Dto的特性的标注&#xff0c;从而实现管理端的统一UI&#xff0c;借助于配套的PasteBuilder代码生成器&#xff0c;你可以快速的为自己的项目构建后台管理端&#xff01;目前管…...

STM32G4的数模转换器(DAC)的应用

目录 概述 1 DAC模块介绍 2 STM32Cube配置参数 2.1 参数配置 2.2 项目架构 3 代码实现 3.1 接口函数 3.2 功能函数 3.3 波形源代码 4 DAC功能测试 4.1 测试方法介绍 4.2 波形测试 概述 本文主要介绍如何使用STM32G4的DAC模块功能&#xff0c;笔者使用STM32Cube工具…...

SpringMVC跨线程获取requests请求对象(子线程共享servletRequestAttributes)和跨线程获取token信息

文章目录 引言I 跨线程共享数据跨线程获取requests请求对象基于org.slf4j.MDC存储共享数据InheritableThreadLocal解决异步线程,无法获取token信息问题II Feign 传递请求属性feign 模块处理被调用方处理请求头III 异步调用的方式CompletableFutureAsync注解Executors引言 本文…...

提取repo的仓库和工作树(无效)

问题 从供应商处获取的.repo的git仓库裸(project-object)仓库和工作树(projects)是分开的。 解决方案 根据工作树的软链接路劲&#xff0c;将工作树合并到project-object下。 import os import shutil import argparse import logging# 设置日志配置 logging.basicConfig(l…...

力扣整理版七:二叉树(待更新)

满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。深度为k&#xff0c;有2^k-1个节点的二叉树。 完全二叉树&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&am…...

基于单片机的多功能环保宠物窝设计

本设计基于单片机设计的多功能环保宠物窝&#xff0c;利用温湿度传感器、压力传感模块、气味传感模块、红外测温传感器、通信模块、显示模块、清扫部件等&#xff0c;使其能够实现自动检测并调节温湿度、补充宠物食物、检测宠物体温健康并出现异常时进行报警、自动清扫消毒宠物…...

HBase 基础操作

一、启动HBase 首先&#xff0c;确保Hadoop和HBase服务已经启动。如果尚未启动&#xff0c;可以使用以下命令启动&#xff1a; # 启动Hadoop start-all.sh# 启动HBase start-hbase.sh二、HBase Shell操作 创建表 在HBase Shell中&#xff0c;使用create命令创建表。以下是一…...

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

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

PCL 三维重建 a-shape曲面重建算法

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 Concave Hull重建 2.1.2 可视化曲面重建结果 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新) 一、概述 …...

【Android】线程池的解析

引言 在Android当中根据用途分为主线程与子线程&#xff0c;主线程当中主要处理与界面相关的操作&#xff0c;子线程主要进行耗时操作。除了Thread本身以外&#xff0c;在Android当中还有很多扮演者线程的角色&#xff0c;比如AsyncTask&#xff08; 底层为线程池&#xff0c;…...

集群聊天服务器(8)用户登录业务

目录 登录状态业务层代码数据模型层代码记录用户的连接信息以及线程安全问题客户端异常退出业务 登录状态 登录且状态变为online 业务层代码 #include "chatservice.hpp" #include "public.hpp" #include <string> #include <muduo/base/Loggi…...

Go语言中的错误嵌套

在Go语言中&#xff0c;错误处理是程序健壮性的关键。Go 1.13版本引入了错误值的嵌套和链式处理&#xff0c;使得错误信息的传递和处理更加灵活和强大。这种机制允许我们在错误中嵌套另一个错误&#xff0c;从而创建一个错误链&#xff0c;这有助于调试和错误跟踪。 错误嵌套的…...

51单片机基础 06 串口通信与串口中断

目录 一、串口通信 二、串口协议 三、原理图 四、串口通信配置参数 1、常用的串行口工作方式1 2、数据发送 3、数据接收 4、波特率计算 5、轮询接收 6、中断接收 一、串口通信 串口通信是一种常见的数据传输方式&#xff0c;广泛用于计算机与外部设备或嵌入式系统之间…...

Elasticsearch:更好的二进制量化(BBQ)对比乘积量化(PQ)

作者&#xff1a;来自 Elastic Benjamin Trent 为什么我们选择花时间研究更好的二进制量化而不是在 Lucene 和 Elasticsearch 中进行生产量化。 我们一直在逐步使 Elasticsearch 和 Lucene 的向量搜索变得更快、更实惠。我们的主要重点不仅是通过 SIMD 提高搜索速度&#xff0…...

【GNU】gcc -g编译选项 -g0 -g1 -g2 -g3 -gdwarf

1、gcc -g的作用 GCC 的 -g 选项用于在编译时生成调试信息&#xff0c;这些信息会嵌入到生成的目标文件或可执行文件中&#xff0c;主要目的是为了支持调试器&#xff08;如 gdb&#xff09;对程序的调试工作。 1.1 生成调试信息 当你在编译代码时使用 -g 选项&#xff0c;GCC…...

MySQL【六】

存储过程 存储过程是一组为了完成特定功能的 SQL 语句集&#xff0c;经编译创建并保存在数据库中&#xff0c;用户可通过指定存储过程的名字并给定参数&#xff08;需要时&#xff09;来调用执行。 简单的说存储过程就是具有名字的一段代码。 存储过程的创建 CREATE PROC[ED…...

杰发科技AC7801——ADC定时器触发的简单使用

使用场景 在需要多次采样结果的情况下&#xff0c;比如1s需要10w次的采样结果&#xff0c;可以考虑使用定时器触发采样&#xff0c;定时器设置多少的时间就会多久采样转换一次。 再加上使用dma&#xff0c;采样的结果直接放在dma的数组里面。 实现了自动采样&#xff0c;自动…...

VTK知识学习(8)-坐标系统

1、概述 计算机图形学里常用的坐标系统有4种&#xff1a; 1&#xff09;、Model坐标系统。定义模型时所采用的坐标系统&#xff0c;通常是局部的笛卡儿坐标系。 2&#xff09;、World坐标系统。是放置Actor的三维空间坐标系。 Actor&#xff08;vtkActor类&am…...

IO流部分串讲

一、IO流的概念简析&#xff1a; java将输入与输出比喻为"流"&#xff0c;英文:Stream. 就像生活中的"电流","水流"一样,它是以同一个方向顺序移动的过程.只不过这里流动的是字节(2进制数据).所以在IO中有输入流和输出流之分,我们理解他们是连接…...

Excel——宏教程(2)

Excel——宏教程(2) 一)、处理单元格 1、直接赋值与引用 将变量、常量值直接赋给单元格、或将单元格的值直接赋给变量、常量&#xff0c;这是在excel中最简单的单元格赋值及引用方法。 如下例将工作表"Sheet1"A1单元格的值赋给Integer变量I&#xff0c;并将I1的值…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...