贴代码框架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机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
