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

贴代码框架PasteForm特性介绍之outer,outers,object,objects,outerdisplay

简介

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

案例源码

案例源码在

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

不定期升级

AllInDto!

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

在这里插入图片描述

本次的特性介绍,涉及的东西会多一些,你可以下载源码后,看看详细的,我们先来查看下各个特性的信息

outer

表示一个值需要从外表获取,编辑的时候如何显示? 比如fatherId,extendRole

字段类型示例说明
args1字符cateInfo外表的名称,对应模板的path,或者路径,路径一定附带了/字符示例./abc.html
args2字符extendCates表示显示的数据,需要和下面2个配合,是一个当前的扩展,目标数组要配置hidden
args3字符id获取返回对象的属性,一般为id
args4字符nameid的友好名称显示,这里指的是外表,比如cateId,需要打开catelist页面,选择后,返回cate,则name作为友好显示,id作为实际值

outers

outer的复数版本,表示可以从外部列表中选择多个,比如在创建账号的时候给他绑定多个角色,就用这个!

字段类型示例说明
args1字符cateInfo外表的名称,对应模板的path,或者路径,路径一定附带了/字符示例./abc.html
args2字符extendCates表示显示的数据,需要和下面2个配合,是一个数组,目标数组要配置hidden
args3字符id获取返回对象的属性,一般为id
args4字符nameid的友好名称显示,这里指的是外表,比如cateId,需要打开catelist页面,选择后,返回cate,则name作为友好显示,id作为实际值

outerdisplay

ListDto中用于外表的显示,比如有字段cateInfoId,对应的ExtendCateInfo要标记为outerdisplay,args2配置为extendCateInfo?.name || ‘’,否则会显示为[object object]

字段类型示例说明
args1字符cateInfoId表示这个字段的值,一般不显示
args2字符extendCateInfo?.name表示显示的名称,友好名称,需要后端支持,在前端会处理成.display
args3字符name表示显示的字段

object

适用于表单页面,表示从另外一个表单新增数据,比如用户的收货地址,在表单的时候,打开一个新的表单,进行信息填写后,返回一个obj,这个时候是没有写入数据库的,所以在返回的时候需要显示
和outer有点像,不过回传的是一个object类型!如果是编辑的时候?需不需要上传到API表示编辑了?打开表单的时候会传递model=object这个参数过去,表示叫子表单不要做API入库操作
引入session_key作为信息传递,使用本地存储进行过手!

注意这个子模型也是需要建立对应的API的,不过不需要建立新增和编辑的接口,因为被上一级涵盖了!

字段类型示例说明
args1字符roleInfo一般使用path也可以使用页面的路径
args2字符id新增的时候无用,主要是编辑的时候,基于这个id和path去数据库查询新的数据
args3字符name表示显示的是这个object的哪个字段,一般在编辑的时候可见

objects

object的复数版本,表示一个集合,比如一个会员有多个爱好,新增的时候,打开子表单,填写多个爱好的object信息体返回,在显示的时候,如果一个字段不足以显示???是否支持多个字段联动显示?

字段类型示例说明
args1字符roleInfo一般使用path也可以使用页面的路径
args2字符id新增的时候无效,编辑的时候表示从数据库查询信息,也作为删除的key使用
args3字符name表示显示的是这个object的哪个字段,一般在编辑的时候可见

UI

我们先来看下效果图
在这里插入图片描述
上图是结果,看作图和有图的内容,其实是对应的,在点击后面的标记特性为object和objects的时候,会打开新的页面,如下图
在这里插入图片描述
而如果点击的是outer,outers特性的字段,则如下图
在这里插入图片描述
其实他们的区别就是outer是表示从现有的数据库中获取某条数据,作为当前数据的外表,比如你要获得角色ID!
而object,objects表示的是获取一个object对象,不一定有id,是直接从现成的form中获取!

Dto

    /// <summary>/// object outer 案例/// </summary>public class ObjectDto{///<summary>///姓名 模拟短文本输入///</summary>[MaxLength(32)][Required]public string Name { get; set; }///<summary>///文本区域 模拟文本区域的输入///</summary>[MaxLength(128)]public string Desc { get; set; }///<summary>///文本区域 长度大于128则自动为textarea///</summary>[MaxLength(256)]public string Text { get; set; }/// <summary>/// 角色/// </summary>[PasteOuter("gradeInfo","extendGrade","id","name")]public int GradeId { get; set; }/// <summary>/// 角色/// </summary>[ColumnDataType("outers","gradeInfo", "extendGrade", "id", "name")]public int[] grade_ids { get; set; }/// <summary>/// 角色的扩展信息,编辑的时候显示用/// </summary>[PasteHidden]public GradeShortModel ExtendGrade { get; set; }/// <summary>/// 外表时间/// </summary>[PasteObject("mod1","","id","name")]public Model1 date2 { get; set; }/// <summary>/// 外表字符/// </summary>[ColumnDataType("objects","mod2", "id", "mark", "")]public Model2[] str2 { get; set; }}/// <summary>/// /// </summary>public class Model1{/// <summary>/// ID 这个用于排重/// </summary>public int Id { get; set; }/// <summary>/// 名称 这个用于显示到UI/// </summary>[MaxLength(32)]public string Name { get; set; }}/// <summary>/// /// </summary>public class Model2{/// <summary>/// ID 这个用于排重/// </summary>public int Id { get; set; }/// <summary>/// 名称 这个用于显示到UI/// </summary>[MaxLength(32)]public string Mark { get; set; }/// <summary>/// 描述/// </summary>[MaxLength(64)]public string Desc { get; set; }}

也就是object的时候,是读取的对应的Model1,Model2的信息,其实也是通过PasteForm的逻辑实现的,我们看下对应的API接口!

API

        /// <summary>/// outer outers object objects/// </summary>/// <returns></returns>[HttpGet][Route("/api/app/obj/readAddModel")]public PasteBuilderHelper.VoloModelInfo ReadAddModel4(){var _model = PasteBuilderHelper.ReadModelProperty<ObjectDto>(new ObjectDto());return _model;}/// <summary>/// object的外援/// </summary>/// <returns></returns>[HttpGet][Route("/api/app/mod1/readAddModel")]public PasteBuilderHelper.VoloModelInfo ReadAddModel5(){var _model = PasteBuilderHelper.ReadModelProperty<Model1>(new Model1());return _model;}/// <summary>/// object的外援/// </summary>/// <returns></returns>[HttpGet][Route("/api/app/mod2/readAddModel")]public PasteBuilderHelper.VoloModelInfo ReadAddModel6(){var _model = PasteBuilderHelper.ReadModelProperty<Model2>(new Model2());return _model;}

PasteForm路径规则

说到上面不得不说路径规则
在PasteForm中,默认API有这么几个


/api/app/xxx/readAddModel/api/app/xxx/readUpdateModel/api/app/xxx/readListModel/api/app/xxx/item/api/app/xxx/updateItem

其中/app/一般一个项目配置一个,默认是app
可以在下面地方配置

            context.Services.Configure<Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcOptions>(options =>{options.ConventionalControllers.Create(typeof(PasteTemplateApplicationModule).Assembly, option =>{option.UseV3UrlStyle = true;option.RootPath = "app";});});

也就是说如果一个字段配置为object,objects,则他对应的类型应该就有一个对应的API,比如上面的
/api/app/mod2/readAddModel

更多特性见

贴代码PasteForm专题介绍

我们下期见!

相关文章:

贴代码框架PasteForm特性介绍之outer,outers,object,objects,outerdisplay

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

sql数据库-权限控制-DCL

目录 常用权限类别 查询用户权限 举例 授予用户权限 删除权限 常用权限类别 权限说明ALL,ALL PRIVILEGES所有权限SELECT查询数据INSERT插入数据UPDATE修改数据DELETE删除数据ALTER修改表DROP删除数据库/表/视图CREATE创建数据库/表 查询用户权限 show grants for 用户名…...

【计组笔记】目录

【计组笔记】机器数表示及运算https://blog.csdn.net/Resurgence03/article/details/142673325?sharetypeblog&shareId142673325&sharereferAPP&sharesourceresurgence03&sharefromlink 【计组笔记】指令系统https://blog.csdn.net/Resurgence03/article/det…...

深度学习中的Pixel Shuffle和Pixel Unshuffle:图像超分辨率的秘密武器

在深度学习的计算机视觉任务中&#xff0c;提升图像分辨率和压缩特征图是重要需求。Pixel Shuffle和Pixel Unshuffle是在超分辨率、图像生成等任务中常用的操作&#xff0c;能够通过转换空间维度和通道维度来优化图像特征表示。本篇文章将深入介绍这两种操作的原理&#xff0c;…...

AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台

AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台 传统老牌工作流引擎比如activiti,flowable或者camunda等虽然功能强大&#xff0c;也被企业广泛采用&#xff0c;然后也存着在诸如学习曲线陡峭&#xff0c;上手难度大&#x…...

golang操作mysql基础驱动github.com/go-sql-driver/mysql使用

golang中类似java操作mysql的jdbc一样&#xff0c;github.com/go-sql-driver/mysql也为go提供了基础接口&#xff0c;在开发中往往需要写更多的代码来满足自己的定制需求&#xff0c;java在驱动基础上有了扩展&#xff0c;orm框架诞生&#xff0c;mybatis、jpa等都是好用的扩展…...

正则表达式完全指南,总结全面通俗易懂

目录 元字符 连接符 限定符 定位符 修饰符&#xff08;标记&#xff09; 运算符优先级 普通字符集及其替换 零宽断言 正向先行断言 负向先行断言 正向后发断言 负向后发断言 捕获组 普通捕获组 命名捕获组 PS:非捕获组 正则表达式在线测试: 正则在线测试工具 …...

运维面试题.云计算面试题之三ELK

1.ELK是什么? ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写 Elasticsearch:负责日志检索和储存 Logstash:负责日志的收集和分析、处理 Kibana:负责日志的可视化 这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,…...

C# DataTable使用Linq查询详解

前奏- C# 对DataTable进行查询 C# 可以对 DataTable 进行查询。在 .NET 框架中&#xff0c;DataTable 类提供了几种方法来查询数据&#xff0c;包括 Select 方法和 AsEnumerable 扩展方法&#xff08;在 System.Data.DataSetExtensions 命名空间中&#xff09;。 使用 Select…...

【企业级分布式系统】ELK优化

文章目录 Elasticsearch作为日志存储时的优化优化ES索引设置优化线程池配置锁定内存&#xff0c;不让JVM使用Swap减少分片数、副本数 Elasticsearch作为日志存储时的优化 linux内核优化、JVM优化、ES配置优化、架构优化&#xff08;filebeat/fluentd代替logstash、加入kafka做…...

51单片机基础05 定时器

目录 一、为什么要定时器 二、定时器中断 1、定时器中断参数 2、定时器中断程序 3、定时器计数 一、为什么要定时器 前文提到&#xff0c;比如进行流水灯等操作&#xff0c;都是直接写了delay_ms这类操作。 但是在51单片机中&#xff0c;其一般就是靠双for进行的循环时延&…...

tdengine学习笔记实战-jdbc连接tdengine数据库

先上代码&#xff0c;里面有两种获取连接的方式&#xff0c;一个单例&#xff0c;一个连接池 package com.tdengine.utils;import com.alibaba.druid.pool.DruidDataSource;import java.sql.*; import java.util.Properties;public class TDConnectUtils {// 单例对象private …...

vue3项目执行npm install下载依赖报错问题排查方法

1、检查当前node与npm的版本 nodejs 和 npm 的版本是有适配的&#xff0c;具体可以看官网&#xff1a;nodejs 和 npm 的版本是有适配的 若是版本不兼容&#xff0c;修改node或者npm的版本即可&#xff0c;建议使用nvm版本管理工具&#xff0c;切换方便&#xff1b; 2、清除缓…...

【vue】项目迭代部署后 自动清除浏览器缓存

前言&#xff1a; vue项目打包部署上线后&#xff0c;因浏览器缓存问题&#xff0c;导致用户访问的依旧是上个迭代批次的旧资源&#xff0c;需要用户手动清除缓存才能更新至最新版本&#xff0c;影响用户体验。 解决方法&#xff1a; html根文件添加以下标签 <meta http-eq…...

Leetcode(滑动窗口习题思路总结,持续更新。。。)

讲解题目&#xff1a;长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target &#xff0c;找出该数组中满足其和 ≥ target 的长度最小的连续子数组。如果不存在符合条件的连续子数组&#xff0c;返回 0。示例: 输入: target 7, nums [2,3,1,2,4,3] 输出: 2 解…...

【UNIAPP】uniapp版图片压缩工具

二次封装的uniapp版本图片压缩、上传工具&#xff0c;支持全端&#xff08;H5、小程序、APP&#xff09; 新建文件&#xff1a;file-util.js class FileUtil {/*** [文件上传]* param {[object]} fileObj [图片地址]* param {[object]} formData [参数]* param {[str…...

PaddlePaddle 开源产业级文档印章识别PaddleX-Pipeline “seal_recognition”模型 开箱即用篇(一)

AI时代到来&#xff0c;各行各业都在追求细分领域垂直类深度学习模型&#xff0c;今天给大家介绍一个PaddlePaddle旗下&#xff0c;基于PaddleX Pipeline 来完成印章识别的模型“seal_recognition”。 官方地址&#xff1a;https://github.com/PaddlePaddle/PaddleX/blob/relea…...

Vue3 + Vite 项目引入 Typescript

文章目录 一、TypeScript简介二、TypeScript 开发环境搭建三、编译方式1. 自动编译单个文件2. 自动编译整个项目 四、配置文件1. compilerOptions基本选项严格模式相关选项&#xff08;启用 strict 后自动包含这些&#xff09;模块与导入相关选项 2. include 和 excludeinclude…...

微信小程序实战篇-分类页面制作

一、项目背景与目标 在微信小程序开发中&#xff0c;分类页面是一个常见且重要的功能模块。它能够帮助用户快速定位和浏览不同类别的商品或信息&#xff0c;提升用户体验和操作效率。今天&#xff0c;我们将深入探讨如何制作一个实用的微信小程序分类页面&#xff0c;先来看一下…...

第三十七章 如何清理docker 日志

如何清理docker 日志 目标 掌握docker 日志设置掌握docker日志的清理办法背景 在现代软件开发和部署环境中,Docker 容器技术因其轻量级、可移植性和高效资源利用的特点,已成为许多企业和开发团队的首选。Docker 容器在运行过程中会产生大量的日志信息,这些日志对于监控容器…...

二刷代码随想录第七天

454. 四数相加 II 先用map记录前两个数的和num1 num2的值出现了多少次再在后两个数组里找0 - (num1 num2),找到后就累加map中的次数 class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3…...

1.tree of thought (使用LangChain解决4x4数独问题)

本教程将介绍如何使用LangChain库和chatglm API来解决一个4x4的数独问题。我们将通过以下步骤实现这一目标&#xff1a; 初始化chatglm 的聊天模型。定义数独问题和解决方案。创建一个自定义的检查器来验证每一步的思考。使用ToTChain来运行整个思考过程。 1. 初始化chatglm4…...

网络基础(4)IP协议

经过之前的学习对传输协议的学习&#xff0c;对于传输协议从系统底层到应用层对于socket套接字的学习已经有了一套完整的理论。 对于网络的层状结构&#xff0c;现在已经学习到了应用层和传输层: 在之前的学习中&#xff0c;通信的双方都只考虑了双方的传输层的东西&#xff0…...

124. 二叉树中的最大路径和【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 124. 二叉树中的最大路径和 一、题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径…...

echarts:简单实现默认显示两柱子折线,点击按钮后显示新的柱子

问&#xff1a; 用echarts实现&#xff1a;默认显示两柱子折线&#xff0c;点击“税率”按钮&#xff0c;显示税率柱子&#xff0c;之前的两柱子折线消失 回答&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8…...

视频里的音频怎么提取出来成单独文件?音频提取照着这些方法做

在数字时代&#xff0c;视频与音频的分离与重组已成为日常需求之一。无论是出于制作背景音乐、保存讲座内容&#xff0c;还是编辑播客素材&#xff0c;提取视频中的音频并将其保存为单独文件都显得尤为重要。视频里的音频怎么提取出来成单独文件&#xff1f;本文将详细介绍几种…...

Excel——宏教程(精简版)

一、宏的简介 1、什么是宏&#xff1f; Excel宏是一种自动化工具&#xff0c;它允许用户录制一系列操作并将其转换为VBA(Visual Basic for Applications)代码。这样&#xff0c;用户可以在需要时执行这些操作&#xff0c;以自动化Excel任务。 2、宏的优点 我们可以利用宏来…...

C++中的std::tuple和std::pair

在C标准库中&#xff0c;std::tuple和std::pair是两种极具实用性的数据结构&#xff0c;它们都具备存储多个元素的功能&#xff0c;但各自有其独特的适用环境和特性。本文旨在深入探讨这两者之间的区别&#xff0c;并阐述在不同应用场景下应如何合理选择使用。 一、基本概念 s…...

引力搜索算法

引力搜索算法过程&#xff0c;包括了初始化、适应度评估、质量计算、加速度计算、更新速度和位置的一些步骤。 import numpy as np import random as rd from math import exp, sqrt import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotli…...

【时间之外】IT人求职和创业应知【35】-RTE三进宫

目录 新闻一&#xff1a;京东工业发布11.11战报&#xff0c;多项倍增数据体现工业经济信心提升 新闻二&#xff1a;阿里云100万核算力支撑天猫双11&#xff0c;弹性计算规模刷新纪录 新闻三&#xff1a;声网CEO赵斌&#xff1a;RTE将成为生成式AI时代AI Infra的关键部分 认知…...

成都手工活外发加工网/宁波优化网站哪家好

Web Service 的创建简单编码、发布和部署 上一篇详细概述了WebService的创建&#xff0c;编码&#xff0c;发布和部署&#xff0c;那么作为客户端的程序如何访问远程端的WebService 接下来看一下具体步骤&#xff1a; C#winForm调用WebService的远程接口 创建一个WebService工程…...

武汉网站服务/上海网络推广招聘

1、下载MongoDb https://www.mongodb.com/try/download/community 安装很简单、基本都是下一步。安装好需要进行环境变量的配置、在path里面吧对应的bin路径加入到里面D:\mongodb-win32-x86_64-2012plus-4.2.23\bin 2、集成 配置YML spring:data:mongodb:host: localhostport:…...

北京建设网站专家/网店推广的作用是什么

把大象装进冰箱需要几步&#xff1f; 其实&#xff0c;如果顺利的话&#xff0c;AS 生成 so 的步骤还是比较清晰的。 但是&#xff0c;随着我升级到了 AS 最新版 「3.3.1 稳定版」 而且我也不再想使用下面两种方法解决 Your project contains C files but it is not using …...

江苏中兴建设有限公司网站/如何在百度发广告推广

一.基本思路 配置java环境安装tomcat安装Mysq并导入sql文件&#xff08;注意Mysql客户端和服务器端编码设置&#xff0c;必须设置完再导入sql文件&#xff09;项目导入并修改数据库连接设置启动tomcat&#xff0c;启动mysql&#xff0c;关闭防火墙&#xff0c;打开浏览器访问即…...

百度搜自己的网站/白百度一下你就知道

一 我心中的博客 我所以指的写博客&#xff0c;不单只是写一篇文章出来这一结果。而应该是写的这一过程&#xff0c;写过技术文章的朋友应该跟我一样有这么一个过程。更多内容关注【贝西奇谈】公众号&#xff0c;干货满满 1 自己了解学习&#xff0c;文章所涉及到的知识点&am…...

深圳做网站设计公司/搜易网提供的技术服务

C语言acm竞赛习题集锦目录数塔问题............................2并查集类问题........................4递推类问题..........................9动态规划系列........................10概率类题型..........................13组合数学类题型......................15贪心策略…...