[含视频和源码]CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(三)

关说不练假把式,在上一,二篇中介绍了我心目中的CRUD的样子
在这里插入图片描述

基于之前的理念,我开发了一个命名为PasteTemplate的项目,这个项目呢后续会转化成项目模板,转化成项目模板后,后续需要开发新的项目就可以基于这个模板创建,这样就不要copy一个旧的项目,然后删删删,改改改,重命名等操作了
强迫症,一个项目的名字就得统一,心里才舒服
那么本次作者就带来了实物,本次主要介绍管理端的内容,我们一起来看看
在这里插入图片描述
这个是后台,目前使用的是HTML原生写的,如果说使用VUE的话,会更简单,这个后续看情况推出!
先用原生的原因呢,一是顺手,二是前期是规划期,改动比较多,这个项目开发过程我是录制了视频的,后续会和项目模板一并放出来!

这个管理端有多少代码?

可能说代码量不太合适,我就列出下各个文件的大概情况(文件采用松散编辑模式,就是一个花括号就一行的写法,所以不存在刻意压缩代码行的问题哈!)

文件 大小 行数 说明
login/index.html 8KB 177 登陆页面,账号密码验证码登陆
login.less 9KB 381 登陆页面的样式文件
pasteform/index.html 12KB 212 表格列表页面的主UI页面
pasteform/index.js 22KB 682 表格页面的主逻辑JS页面
pasteform/index.less 14KB 656 表格页面的样式文件
pasteform/view.html 12KB 184 表单新增编辑页面的UI文件
pasteform/view.js 27KB 820 表单新增编辑页面的逻辑JS代码
pasteform/view.less 10KB 499 表单编辑新增页的样式文件
index.html 11KB 225 首页,也就是菜单页面,上图的这个主页面,菜单采用API获取的动态方式
index.less 5KB 311 首页的样式文件
lib/api.js 18KB 598 ajax请求,一些基础函数的转化等,相当于帮助类

还有一些其他的三方组件,比如jquery.js,layer.js,daterange.js,pagenum.js,datepicker.js,template.js,wangedit.js等

为啥才这么几个文件?

看上图至少有4个表为啥才这么几个文件?
文件复用了
比如权限的列表页面为pasteform/index.html?path=roleInfo,而用户的列表页面为pasteform/index.html?path=userInfo
对应的表单页面为pasteform/view.html?path=roleInfo和pasteform/view.html?path=userInfo
在这里插入图片描述

实现原理

在执行UI之前,获取对应的模型的模型内容,比如新增的时候,获取对应的AddDto模型的模型属性,包括不限于,包含了哪些属性(是否禁用add,edit,del等),有哪些字段,字段的特性是哪些,还有就是字段的默认值!
同理在编辑的时候,会把要编辑的主键带入API中,先查询这个UpdateDto的模型数据,然后基于ID获取这个模型的值,组合后返回给前端
至于表格,请求的时候要读取ListDto和对应的搜索InputQueryDto的内容!

表格页面功能介绍

在这里插入图片描述
从上图中可以看到大概几个要点!
1.左侧的菜单是采用动态模式的,看图的中间部分的菜单类型可以看到和左侧的一一对应!
2.右侧区域的功能都是动态的,貌似除了关键字输入和搜索按钮是固定的,其他都是动态控制的
3.搜索区域的内容和类型由后端的InputQueryXXX的模型来控制
4.新增,编辑和删除按钮由对应模型的ListDto控制
5.列表中支持排序,比如上图的ID,排序,层级等
6.列表中支持直接显示外表的对应字段,比如父级ID那一列,直接显示了父级ID对应的权限的名称
7.支持状态快编,也就如上图的switch,这个是可以交互的!

外表输入

在这里插入图片描述
支持外表输入,比如要查询某一个角色有多少用户,那么用户列表中,角色ID作为筛选,那角色ID不能自己手动输入吧
点击后,会弹出角色列表页面,选择要查询的,然后点击确定,就会把对应的值输入到输入框中(显示的是友好名)
在这里插入图片描述
在Model中是这样配置外表选择的
在这里插入图片描述

时间区间

有些时候需要查询时间区间,比如本月新增的用户有多少
在这里插入图片描述
在Model中,时间区间其实是由2个字段表示的,开始字段和结束字段,当然了结束字段需要配置隐藏,如下图

单选

有时候查询需要选择某一个状态,比如查询禁用的用户有多少,查询状态正常的用户有多少(也就是一个select的选项)

在这里插入图片描述
在Model中体现为:
在这里插入图片描述

表单页面功能介绍

表单页面也就是新增数据,或者编辑,如下

基本输入

一些比如文本,文本域,数字,开关等的输入,和基本的一致,约定输入框的名称为Model对应字段的注释部分的前部分,后部分则为placeholder,前后部分使用空格隔开!
在这里插入图片描述

头像图片


不单单支持单图,还支持多图模式!

富文本模式

### 关于Cursor前后端开发中的使用 #### 后端实现 在后端,`Cursor` 查询提供了一种高效的方式来进行大数据量的分页查询。通过 `Cursor` 接口,可以逐条读取数据而不需要一次性加载整个结果集到内存中。 对于 Java 或 Python Flask 这样的框架而言,定义一个支持游标的 API 是常见的做法: ```java @GetMapping("/taskStatus") public ResultModel taskStatus( @RequestParam(defaultValue = "0") Integer currentIndex, @RequestParam(defaultValue = "20") Integer pageSize) { // 处理非首次查询的情况 if (currentIndex != 0){ currentIndex += 1; } TaskCursorVo taskCursorVo = taskService.getTaskStatus(currentIndex, pageSize); return ResultModel.success(taskCursorVo); } ``` 上述代码展示了如何接收来自客户端的参数并调用相应的服务层逻辑来获取指定索引位置之后的数据片段[^5]。 #### 前端实现 在前端部分,通常采用 AJAX 技术异步请求这些分片化的数据。假设正在构建一个 Web 应用程序,并希望利用 jQuery 来简化 HTTP 请求,则可以在 JavaScript 中编写如下代码: ```javascript function fetchNextPage(cursorToken) { $.ajax({ url: '/api/tasks', method: 'GET', data: { cursor: encodeURIComponent(cursorToken), limit: 20 }, success: function(response) { const items = response.items; const newCursor = response.cursor; // 更新UI展示新取得的任务列表项... $('#load-more').data('next-cursor', newCursor); // 存储下一个游标供后续点击事件使用 console.log(`Fetched ${items.length} tasks`); } }); } // 绑定按钮点击事件触发下一页加载 $('#load-more').on('click', () => { let currentCursor = $(this).data('next-cursor'); fetchNextPage(currentCursor || ''); }); ``` 这段脚本说明了怎样发送带有游标的 GET 请求给服务器以获得新的记录集合,同时也保存了返回的新游标以便下次请求时能够接续之前的查询[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贴代码科技-致力于开发更加适用的应用

要不请我喝杯咖啡!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值