贴代码框架PasteForm特性介绍之image

devtools/2024/11/23 2:06:21/

简介

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

案例源码

案例源码在

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

不定期升级

AllInDto!

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

在这里插入图片描述

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

image

当前特性可以作用于所有的Dto中,具体的样式由前端决定,支持单图和多图模式

字段类型示例说明
args1数字1图片数量
args2字符cate存放在什么位置,上传图片的时候会附带到参数type中 也会用于图片的样式?
args3字符60*60图片是否需要压缩,压缩的宽高,不压缩的设置为0,比如60*0
args4字符smallsmall,normal,big表示图片的大小三个规格,默认normal,如果要返回格式,则由dataFrom决定

UI

在这里插入图片描述

Dto

    /// <summary>/// 图片案例/// </summary>public class ImageModel{/// <summary>/// 图片1/// </summary>[ColumnDataType("image","1","icon","120*120")]public string Img1 { get; set; }/// <summary>/// 图片2/// </summary>[ColumnDataType("image", "1", "head", "750*0")]public string Img2 { get; set; }/// <summary>/// 图片3/// </summary>[ColumnDataType("image", "2", "head", "750*0")]public string Img3 { get; set; }/// <summary>/// 图片4/// </summary>[ColumnDataType("image", "2", "head", "120*0")]public string[] Img4 { get; set; }}

提交的数据

在这里插入图片描述
提交的json数据如下
在这里插入图片描述
注意看提交的信息中的img3,和img4,一个是字符串,使用了拼接,一个是数组,这个是由原来的Dto的数据类型决定的!

默认上传文件的地址为/api/app/Upload/UpImage,注意看上图的url的参数type和size就是特性中配置的类型和大小!

表格中显示

如果你对ListDto的字段进行image特性标注,则在表格中会以image的模式显示,而不是字符串!

UpImage

你可以基于这个案例,自己修改API是现实上传图片

        /// <summary>/// 上传图片/// </summary>/// <returns></returns>[HttpPost][TypeFilter(typeof(RoleAttribute), Arguments = new object[] { "data", "view" })]public WangEditorUpload UpImage(string type = "bookmark", string size = ""){var one = new WangEditorUpload();one.errno = 1;var _month = DateTime.Now.ToString("yyyyMM");if (base.Request.Form != null){if (base.Request.Form.Files != null){if (base.Request.Form.Files.Count > 0){one.errno = 0;one.data = new List<WangEditorUploadItem>();for (var k = 0; k < base.Request.Form.Files.Count; k++){var finput = base.Request.Form.Files[k];//这里还要进行文件后缀的过滤var item = new WangEditorUploadItem();var extension = System.IO.Path.GetExtension(finput.FileName);if (String.IsNullOrEmpty(extension)){extension = ".jpg";}else{if (!extension.StartsWith(".")){extension = "." + extension;}}if (extension != ".gif"){extension = ".webp";}var filename = $"{finput.FileName}{k}{DateTimeOffset.Now.ToUnixTimeMilliseconds()}".ToMd5Lower();var _char = Path.DirectorySeparatorChar.ToString();var savepath = $"upload/{type}/{_month}/{filename}{extension}";var path = System.IO.Path.GetDirectoryName(savepath);if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); }if (System.IO.File.Exists(savepath)) { System.IO.File.Delete(savepath); }item.alt = finput.FileName;item.href = $"/{savepath}";item.url = $"/{savepath}";if (IsImageExtension(finput.FileName)){var _width = 0;var _height = 0;if (!String.IsNullOrEmpty(size)){var _sizes = size.Split('*');int.TryParse(_sizes[0], out _width);int.TryParse(_sizes[1], out _height);}using var image = Image.Load<Rgba32>(finput.OpenReadStream());if (image.Width > _width && _width != 0){image.Mutate(x => x.Resize(_width, _height));}else{if (image.Height > _height && _height != 0){image.Mutate(x => x.Resize(_width, _height));}}if (extension == ".webp"){image.Save(savepath, new WebpEncoder());}else{image.Save(savepath);}item.url = $"/{savepath}";finput.OpenReadStream().Dispose();}else{using (FileStream fs = new FileStream(savepath, FileMode.Create)){finput.CopyTo(fs);fs.Flush();}}item.size = finput.Length;one.data.Add(item);}}}}return one;}

PasteForm_181">PasteForm附加信息

特性处理

                    case "image":{item.dataType = 'image';if (_attribute.args1) {item.num = parseInt(_attribute.args1);} else {item.num = 1;}if (_attribute.args2) {item.type = _attribute.args2;}if (_attribute.args3) {item.size = _attribute.args3;}if (item.value) {if (item.num > 1) {if (item.dataFrom == "String[]") {item.images = item.value;//多个图片是一个数组,字符串数组的形式item.value = item.value.join(',');} else {item.images = item.value.split(',');//多个图片之间使用,隔开}}}if (item.num > 1) {item.singlerow = true;}}break;

UI逻辑

                        <% if(item.dataType == "image" || item.dataType=="images"){ %><input type="text" style="display:none" name="<%:=item.name%>" value="<%:=item.value%>"><input type="file" multiple id="<%:=item.name%>" datanum="<%:=item.num%>" onchange="handlerUploadFile(this)" datatype="<%:=item.type%>" datasize="<%:=item.size%>" style="display:none;" /><% if(item.num ==1){%><label for="<%:=item.name%>"><img class="form-image-head" <% if(item.value && item.value !=null ){ %>src="<%:=item.value%>"<%}%> ><%if(!item.value || item.value ==null){%><span class="iconadd icon-add"><i class="Hui-iconfont Hui-iconfont-add2 icon"></i></span><%}%></label><span class="placeholder"><%:=item?.placeholder || ''%></span><% }else{ %><span class="placeholder"><%:=item?.placeholder || ''%></span><ul class="imageul"><li><label for="<%:=item.name%>"><span class="icon-add"><i class="icon Hui-iconfont Hui-iconfont-add2"></i></span></label></li><%if(item.images){%><%item.images.forEach(_img=>{%><li><img src="<%:=_img%>"><i class="Hui-iconfont Hui-iconfont-close2 icon-close"  onclick="handlerRemoveImageItem(this)"></i></li><%})%><%}%><!-- <li><img><i class="iconfont icon-close" οnclick="handlerRemoveImageItem(this)"></i></li> --></ul><% } %><%}%>

更多特性见

贴代码PasteForm专题介绍

我们下期见!


http://www.ppmy.cn/devtools/136174.html

相关文章

Elasticsearch开启认证及kibana密码登陆

Elasticsearch不允许root用户运行,使用root用户为其创建一个用户es,为用户es配置密码,并切换到es用户。 adduser elastic passwd elastic su elasticElasticsearch(简称ES)是一个基于Lucene的搜索服务器。它提供了一个分布式、多用户能力的全文搜索引擎,基于RESTful web…

Easyexcel(4-模板文件)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09; 文件导出 获取 resources 目录下的文件&#xff0c;使用 withTemplate 获…

香港服务器安装Debian12操作系统有python环境嘛

香港服务器安装Debian 12操作系统后&#xff0c;通常会包含Python环境。 Debian作为一个广泛使用的Linux发行版&#xff0c;其操作系统版本通常会预装一些常用的软件和库&#xff0c;Python作为一种流行的编程语言&#xff0c;自然也被包括在内。 具体来说&#xff0c;Debian …

LeetCode —— 字母异位词分组

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", &q…

day20 第六章 二叉树part07

第一题&#xff1a;235. 二叉搜索树的最近公共祖先 解题思路 利用二叉搜索树的特性&#xff1a; 二叉搜索树的特点是左子树的所有节点值都小于根节点值&#xff0c;右子树的所有节点值都大于根节点值。基于这个特性&#xff0c;我们可以通过比较根节点与要查找的两个节点 p 和…

48v72v-100v转12v 10A大功率转换电源方案CSM3100SK

如今市场上电机的应用极为广泛&#xff0c;众多电机所需供电量较大。当电机的输入端为多节电池串联或由不同材质的电池供电时&#xff0c;需要将此电压稳定至 12V 或其他特定电压来为电机供电。而且&#xff0c;在电机堵转或急停急启时&#xff0c;瞬间电流会变得非常大。倘若所…

Javaweb梳理16——HTMLCSS使用

Javaweb梳理16——HTML&CSS使用 16 快速入门16.1 基础标签16.2 图片、音频、视频标签16.3 超链接标签16.4 列表标签16.5 表格标签16.6 布局标签16.7 表单标签16.8 type取值 16 快速入门 1.新建文本文件&#xff0c;后缀名改为 .html/.htm 2.编写 HTML结构标签 3.在<bod…

SQL注入注入方式(大纲)

SQL注入注入方式&#xff08;大纲&#xff09; 常规注入 通常没有任何过滤&#xff0c;直接把参数存放到SQL语句中。 宽字节注入 GBK 编码 两个字节表示一个字符ASCII 编码 一个字节表示一个字符MYSQL默认字节集是GBK等宽字节字符集 原理&#xff1a; 设置MySQL时错误配置…