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

贴代码框架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专题介绍

我们下期见!


http://www.kler.cn/a/407751.html

相关文章:

  • PDF内容提取,MinerU使用
  • 【AI系统】AI 基本理论奠定
  • 【Vue】指令扩充(指令修饰符、样式绑定)
  • 2024年亚太地区数学建模大赛D题-探索量子加速人工智能的前沿领域
  • 免费开源!DBdoctor推出开源版系统诊断工具systool
  • javaScript交互案例
  • 算法学习笔记(八):单调栈
  • SpringMVC 执行流程详解
  • 架构图解析:如何构建高效的微服务系统
  • Cocos creator 3.8 支持的动画 7
  • 2024年09月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析
  • 【Apache paimon】-- 7 -- tag 创建与管理
  • 【C++】list使用详解
  • 【从零开始的LeetCode-算法】3297. 统计重新排列后包含另一个字符串的子字符串数目 I
  • java操作doc——java利用Aspose.Words操作Word文档并动态设置单元格合并
  • 基于Java Springboot高校教室资源管理系统
  • React面试宝典
  • 丹摩|重返丹摩(下)
  • 低代码搭建crm系统实现财务管理功能模块
  • ORACLE删不掉job,如何解决。
  • Ansys Zemax | 使用多重结构操作数控制单一结构系统中的参数
  • Linux|内存级文件原理
  • Angular Essentials 扩展包教程
  • R中单细胞RNA-seq数据分析教程 (2)
  • 大数据技术之SparkCore
  • 视频截断,使用 FFmpeg