贴代码框架PasteForm特性介绍之query,linkquery
简介
PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管理端只有Html+js版本的,后续将支持小程序,Vue等
案例源码
案例源码在
https://gitee.com/pastecode/paste-template
不定期升级
AllInDto!
通过引入PasteForm,一个项目哪怕100个数据表,一般的管理页面也才不到10个,除非有非常多的特殊功能,否则都能用PasteForm中的表格和表单来实现!
本次的特性介绍,涉及的东西会多一些,你可以下载源码后,看看详细的,我们先来查看下各个特性的信息
需求说明
对于前端来说,query太熟悉不过了,比如编辑一般都有?id=xxx,有些时候也会有一些特殊的需求,比如你想看下某一个权限下面有哪些子权限,如果没有的话新增(新增在这个权限下,也就是作为当前权限的子集),那么你就需要linkquery和query,一个是传递参数给下一个页面,另外一个是获取query到指定的地方!
query
如果从query中获取到了数据,则对应的字段隐藏,注意不要配置hidden,因为查询的时候是从表单读取数据的,hidden的话是不写入到form中的,那样查询就没法获取query来的值了
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
args1 | 字符 | cateid | 表示使用url中的哪个参数读取值 |
args2 | 字符 | hide | 如果从query中获取到值后,是否隐藏这个项 |
linkquery
把当前页面的某一个或者多个query传递给下一个页面,多个之间用,隔开。在ListDto中,其实是传递给上方的搜索区域的!对于表单就是传递给表单了!接收需要使用query特性
字段 | 类型 | 示例 | 说明 |
---|---|---|---|
args1 | 字符 | 需要传递的参数 | 多个之间用,隔开,比如serviceid,ftype |
下面就以上面的案例来举例子,就是查看某一个权限的子集,可以在查看页面直接添加,则有
Dto
///<summary>///权限列表///</summary>[PasteLinkQuery("fatherId")]public class RoleInfoListDto{// 其他干扰字段,先隐藏了/// <summary>/// 查看子集/// </summary>[ColumnDataType("menu", "查看子集", "open_window('查看子集','./index.html?path=roleInfo&fatherId={{:=item.id}}');")]public int Menu3 { get; set; }}
由于上面是ListDto的范畴,也就是表格,那么在搜索区域就需要对应的接收这个query的配置
/// <summary>/// 读取ListDto的数据模型/// </summary>/// <returns></returns>[HttpGet][TypeFilter(typeof(RoleAttribute), Arguments = new object[] { "root", "root" })]public PasteBuilderHelper.VoloModelInfo ReadListModel(){var _model = PasteBuilderHelper.ReadModelProperty<RoleInfoListDto>(new RoleInfoListDto());var _query_model = PasteBuilderHelper.ReadModelProperty(new InputQueryRoleInfo());if (_query_model != null){_model.QueryProperties = _query_model.Properties;}return _model;}
看上面的数据模型,可以知道,搜索区域的数据模型为InputQueryRoleInfo,由如下代码
///<summary>/// 查询///</summary>public class InputQueryRoleInfo : InputSearchBase{/// <summary>/// 父级ID 基于父级ID查询/// </summary>[PasteOuter("roleInfo")][ColumnDataType("query", "fatherId","hide")]public int FatherId { get; set; }//其他字段,这里隐藏}
看上面的代码,使用了特性query接收fatherId这个参数,然后赋值给当前字段,也就是赋值给FatherId,由于PasteForm框架的API接口返回,首单次小写,所以也就是给fatherId了!当然如果上面的你修改成
/// <summary>/// 父级ID 基于父级ID查询/// </summary>[PasteOuter("roleInfo")][ColumnDataType("query", "fatherId","hide")]public int father_id { get; set; }
也是可以的,到时候会把url的query中的fatherId赋值给这个father_id字段
按照上面的意思,已经可以把fatherId传递给表格页面了,那么如果页面上没有数据,或者要新增,就需要把这个fatherId传递给下一个页面(view.html),同样的,需要在UserInfoAddDto接收这个参数,则有如下的
///<summary>///权限 新增权限的数据模型///</summary>public class RoleInfoAddDto{///<summary>///名称 权限的友好名称///</summary>[MaxLength(16)][Required]public string Name { get; set; }///<summary>///模块///</summary>[MaxLength(16)]public string Model { get; set; }///<summary>///权限///</summary>[MaxLength(16)]public string Role { get; set; }/// <summary>/// 图标名称 一般表示样式名称/// </summary>[MaxLength(32)]public string Icon { get; set; }/// <summary>/// 路径 作为菜单类型的路径/// </summary>[MaxLength(128)]public string Path { get; set; }/// <summary>/// 权限类型 0权限1菜单2按钮/// </summary>[PasteSelect(PasteFormString.SelectRoleType)]public int RoleType { get; set; }///<summary>///描述///</summary>[MaxLength(64)]public string Desc { get; set; }///<summary>///状态///</summary>public bool IsEnable { get; set; }///<summary>///排序///</summary>public int Sort { get; set; }///<summary>///父级的概念///</summary>[ColumnDataType("query", "fatherId","hide")][ColumnDataType("outer", "roleInfo", "extendRole", "id", "name")]public int FatherId { get; set; }}
注意看上面的最后一个字段fatherId,注意看linkquery,query特性,在上面的例子中,对应的参数名称都保持一致,这样才能做到一个传递,一个接收,如果名字不一致了,就接收不了了,毕竟允许多个参数存在的!
测试
打开后台后,权限表格中看到如下的图,符合预期
点击系统管理-查看子集后,然后点击新增,然后查看url可以看到如下
view.html?path=roleInfo&fatherId=1
也就是已经把query为fatherId传递过来了!
可以看到已经没有父级这个字段了,因为隐藏了,如果我们到最外面,新增,是如下图
填写数据,提交后,可以看到结果
如上图的9就是基于linkquery创建的,这样就不需要在创建的时候,选择父级了,因为上一步骤已经选择了!
基于这个原理,你也可以扩展更多的操作,特别是在关系表中的运用非常适用,比如查看某一个角色是否有某一个权限,如果没有则新增!
更多特性见
贴代码PasteForm专题介绍
我们下期见!
相关文章:

贴代码框架PasteForm特性介绍之query,linkquery
简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…...
高防IP如何构建安全高效的数字政务新生态
随着数字化转型浪潮的日渐汹涌,政务行业也在朝着智慧政务的方向高速迈进,提升了为民服务的整体效率。然而,凡事都有双面性,随着政务服务线上化的深入发展,网络安全威胁也日益严峻。黑客攻击、DDoS攻击、CC攻击等安全事…...
数据结构与算法——1122—复杂度总结检测相同元素
1、复杂度总结 1、时间复杂度计算遵循的原则 1、复杂度与其具体的常系数无关(即:常数项的系数不要) 2、多项式级复杂度相加的时候,把其高项作为结果(即:多项式只保留最大项) 3、O(1)含义为&…...
HTML通过JavaScript获取访问连接,IP和端口
<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Get IP Address</title> <script> function displayURL() { var url window.location.href; // 获取当…...
自动化测试过程操作细节
一、软件与框架介绍 1. Postman 读音:[pəʊstmən](剖斯特曼) 介绍:API开发与测试的得力助手,通过直观界面发送HTTP请求,查看响应数据。支持环境变量、集合、脚本等功能。 主要特点:易于使用…...

AR智能眼镜|AR眼镜定制开发|工业AR眼镜方案
AR眼镜的设计与制造成本主要受到芯片、显示屏和光学方案的影响,因此选择合适的芯片至关重要。一款优秀的芯片平台能够有效提升设备性能,并解决多种技术挑战。例如,采用联发科八核2.0GHz处理器,结合12nm制程工艺,这种低…...

从〇开始深度学习(0)——背景知识与环境配置
从〇开始深度学习(0)——背景知识与环境配置 文章目录 从〇开始深度学习(0)——背景知识与环境配置写在前面1.背景知识1.1.Pytorch1.2.Anaconda1.3.Pycharm1.4.CPU与GPU1.5.整体关系 2.环境配置2.1.准备工作2.1.1.判断有无英伟达显卡2.1.2.清理电脑里的旧环境 2.1.安装Anaconda…...

实验室管理技术革新:Spring Boot系统
4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...
C语言 蓝桥杯某例题解决方案(查找完数)
蓝桥杯原题: 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6 1 2 3.编程找出1000以内的所有完数。 这个题没有很大的难点,与我们上一个解决的问题“质因数分解”不同,它不需要判断因数是否是质数,因此…...

Prompting LLMs to Solve Complex Tasks: A Review
文章目录 题目简介任务分解未来方向结论 题目 促使 LLM 解决复杂任务: 综述 论文地址:https://www.intjit.org/cms/journal/volume/29/1/291_3.pdf 简介 大型语言模型 (LLM) 的最新趋势显而易见,这体现在大型科技公司的投资以及媒体和在线社…...
C++ 编程指南05 - 编译时检查优于运行时检查
一:概述 编译时错误检查是C编程中一条非常重要的原则,它强调了在可能的情况下,应该优先依赖编译时检查(静态检查)而不是运行时检查。这样做的主要目的是提高程序的性能、安全性和可维护性。 编译时检查,即在…...

【优先算法】专题——双指针
1.移动零 移动零 题目描述: 思路: 本题我们把数组分块,将非零元素移动到左边,为零元素移动右边。 我们使用双指针算法(利用数组下标来充当指针) 两个指针的作用: cur:从左往右…...

CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes
CSP/信奥赛C语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes 题目描述 因为 151 151 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 151 …...

C语言练习.if.else语句.strstr
今天在做题之前,先介绍一下,新学到的库函数strstr 想要使用它,要先给它一个头文件<string.h> char *strstr(const char*str1,const char*str2); 首先:1.strstr的返回值是char,字符类型的。 2.两个实参ÿ…...
利用浏览器录屏
以下内容参考自网络 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title></title> </head> <body> <div class"left"> <di…...
python中的map、split、join函数的作用 => ACM输入输出流
map(func,iter) lst_str ["1", "2", "3"] # 得到lst_num为[1, 2, 3] lst_num list(map(int, lst_str))如果想把一个列表里的所有元素批量地调用某一个函数,并映射得到一个新的列表(原列表中元素相对位置不变࿰…...

Ubuntu20.04下安装向日葵
向日葵远程控制app官方下载 - 贝锐向日葵官网 下载Ununtu版的图形版本的安装deb包SunloginClient_15.2.0.63064_amd64.deb 直接执行 sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 的话会报错: 如果在Ubuntu20.04里直接执行sudo apt install libgconf-2-4安装libgco…...
常用并发设计模式
避免共享的设计模式 不变性(Immutability)模式,写时复制(Copy-on-Write)模式,线程本地存储(Thread-Specific Storage)模式本质上都是为了避免共享。 1、使用时需要注意不变性模式…...

Redis Search系列 - 第七讲 Windows(CygWin)编译Friso
目录 一、背景二、安装CygWin三、编译Friso四、运行Friso五、Friso分词效果测试 一、背景 最近在做RedisSearch的中文分词效果调研,底层的中文分词插件使用的就是Friso,目前手里的Linux环境上yum镜像仓库有问题导致没法安装gcc,又急于验证Fr…...

利用Docker容器技术部署发布web应用程序
Docker是什么? docker 是一个开源的应用容器引擎,可以帮助开发者打包应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...