『PasteSpider』
最新文章
贴代码出品
热门话题
用户问答
lao人言
「搜索」
【本期话题】更多
三人寄语更多
抛开需求讲架构,和纸上谈兵无差!
点赞:1
慎用redis的同步我的意见是redis都走异步!!!
点赞:0
对于答案来说,更重要的是找到答案的这个过程而不是答案本身!
点赞:0
抛开需求谈架构是无意义的事情!
点赞:0
逻辑注解清晰的代码优于那些一眼看不明白的语法糖
点赞:0
实际遇到的问题往往在那些视频课程中是不会出现的!
点赞:0
在循环里面慎重的使用await!
点赞:0
没有最好的语言,只有更合适的语言!
点赞:0
由于时间的问题,我们往往会给自己埋坑,等着后续或者下一任来填!
点赞:0
时好时坏的结果,往往是多线程引起的逻辑混乱导致的!
点赞:0
【PasteForm】最佳CRUD的实现案例项目PasteTemplate解析,包含源码(一)
尘埃 2024-09-22 693 57 0
PasteForm的最佳CRUD实践,目的是规范前端后,让页面的内容由后端控制,实现项目新增表和改动表的时候,不需要前端修改代码即可实现管理端对新功能的支持!

在之前的文章中说明了我心目中的CRUD的思路,后面也付出了实际,写了一个案例项目PasteTemplate,后面也在实际项目中(贴Builder(PasteSpider)和贴代码(PasteSoft))
在实际项目中对案例项目进行了新的改动,主要是实现一些实际项目中的需求,比较不能用于实际项目的框架是没有意义的!

前置条件

案例项目基于ABPvNext的框架的简略版本,只保持了XXX.Domain,XXX.Application.Contracts,XXX.EntityFrameworkCore,XXX.Application,XXX.HttpApi.Host然后我在这个的基础上加了一个子项目XXX.Handler,为了便于开发可以下载PasteBuilder作为这个项目的右键代码生成器,这个生成器是一键生成的,不必这里复制代码,哪里复制代码!

XXX.Handler

XXX.Handler:作为XXX.Application.Contracts之后,在XXX.Application之前,主要作用是用于聚合业务需求
比如用户模块,包含了角色,权限,账号,找回密码,新建账号等,全部聚合到UserHandler中,而这个UserHandler可以被XXX.Application和XXX.HttpApi.Host中调用,这里XXX.Application比较好理解,WebApi主要的代码就放这里,而XXX.HttpApi.Host中就有很多代码可以实现了
1.比如引入Channel可以把代码写入到HostedService中,这样就实现了本地的消息队列和队列处理,
2.如果有引入RabbitMQ则还可以作为消费者,
3.再者在系统初始化的时候,可以作为内置菜单和默认账号的写入
4.还可以为一些特殊的接口提供服务,比如有些三方接口等

PasteBuilder

这个是贴代码专门为PasteTemplate模板项目创建的右键代码生成器,就是VS2022的插件,安装后,后续在项目中添加新的表,只要在XXX.Domain中对应的模块添加表的Model,然后右键生成代码,就会在对应的EF,Application等地方写入代码,然后右键重新生成解决方案,理论上是直接生成成功的,然后自己去执行add-Migration生成对应的迁移代码!

项目案例要点

本次项目改动比较大,之前也是有发布PasteTemplate做为项目模板,啥叫项目模板?就是你自己写一个项目,把一些基本的轮子等写好,然后打包成项目模板,后续要开发新的项目,选择这个项目模板即可生成新的项目,好处就是新的项目不要再次搭建基础轮子了,然后是项目的命名,文件的命名等都是新的,我看很多人是找旧的项目复制出来,然后各种重命名,各种删除不要的代码!

登陆页面

新的登陆页面将采用统一的,说白点后续的项目,可以说前端(管理端)几乎不要修改代码,只要改动项目的后端代码即可,所以登陆页面作为很重要的一部分!
图片alt
登陆页面没啥改动哈,主要是样式,然后引用动效!接口地址主要在/api/app/User/xxx中

管理端首页

作为管理端的首页,相信几乎的项目是一样的,那就是菜单页面和工作台,PasteTemplate的管理端首页如下
图片alt
左侧菜单采用动态的模式,菜单由权限读取,系统在首次启动的时候会把默认的菜单写入到数据库,如果当前账号有root-root的权限,则会返回所有的菜单,也就是root-root表示超级权限的意思,拥有系统的所有权限!

PasteForm

作为本次的主角,也就是CRUD的实现,PasteForm表示的是3个页面组成的模块

pasteform/index.html

表单页面的主页面,数据显示列表的页面,按照下图为例
图片alt
主要包含几个区域
1.上方的搜索区域,这个搜索区域一般由InputQueryXXXModel控制,动态的,也就是由后端的InputQueryXXXModel或者是默认的InputSearchBase的对象控制,包含的功能有

a.外表输入,比如你要输入某一个表的ID作为查询条件,如上图的搜索某一个权限作为父级去搜索他的子集,操作方式点击后会弹出选择页面,选择后会把id赋值个这个搜索输入框,显示的是名称字段,传值是ID字段,这两个字段可以配置的,使用的属性为outer
b.选择框,可以配置多个选择项中选择其中一个,比如按照状态查询,则一般有全部状态,可用状态,禁用状态!这个要看对应字段的属性配置决定的,使用的属性为select
c.多选框,对应选择框,其实就是选择框的多选模式,接收的方式要看字段的类型,比如你可以回传123,124,也可以回传[123,124]等,这个也是基于配置的,使用的属性为selects
d.参数来源,有时候当前页面是其他页面传递过来的,比如给某一个角色绑定权限,那么这个时候当前页面附带的参数一般为gradeid,表示页面显示的内容是基于参数gradeid进行查询权限列表的,这个时候,如果当前页面有这个参数,则这个对象会被隐藏,使用的属性为query
e.参数传递,在上面的例子中,如果这个时候你点击新增,需要基于这个参数做为下一个页面的输入值,则需要把这个页面的某一个或者多个参数传递给下一个页面,这个时候需要使用的属性为linkquery
f.默认值,只需要在查询模型中赋值,即可作为默认值,如果是单选或者多选框的,需要添加一个属性selected=true,也就是修改可选对象的属性!
g.一般输入,除了支持上方的输入,当前也是支持一些基础的输入的,比如number,text等,甚至是required等,这个按照正常的写法即可!

至于搜索区域的内容是怎么来得?
在页面首次打开的时候,会从对应的API中读取这个表的2个信息,一个是下方表格的模型的属性,一个就是对应的搜索区域的模型的值!
比如:

        /// <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;
        }

上面的代码中其实就是读取了模型RoleInfoListDto的属性和搜索区域的InputQueryRoleInfo的属性!

下一章将介绍数据表格中的内容

评论列表
尘埃
57 693 0
快捷注册
热门推荐更多
PasteTemplate案例项目
贴代码框架的项目案例,里面有PasteForm的案例代码等;
最新动态
  • 120.****.201 正在查看 PasteSpider之--路由列表-私有仓库-环境配置-的介绍 !
  • 61.****.144 正在查看 PasteSpider更新摘要,持续更新 !
  • 201.****.216 正在查看 PasteForm中,表格的不一样的样式的设定? !
  • 170.****.57 正在查看 Redis的安装 !
  • 99.****.129 正在查看 贴代码框架PasteForm特性介绍之mark(标签,书签,字段说明)的支持 !
  • 189.****.205 正在查看 开发者专用Linux容器部署工具PasteSpider(K8S,Jenkins,CICD)介绍 !
  • 167.****.45 正在查看 贴代码框架PasteForm之特性select,lselect,selects的介绍 !
  • 45.****.97 正在查看 PasteSpider之占位符,宏,对象属性遍历的说明 !
  • 121.****.136 正在查看 贴代码框架PasteForm特性介绍之mark(标签,书签,字段说明)的支持 !
  • 113.****.142 正在查看 Serilog在appsettings.json中的配置 !
  • 135.****.15 正在查看 使用PasteSpider实现CI/CD持续部署,类似Jenkins的功能,让你的2G服务器也可以飞起 !
欢迎加入QQ讨论群 296245685 更新记录 [PasteSpider]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2