webman-admin多图上传预览和删除

前言

在webmen文档和论坛中都没找到多图上传的示例,自己找了一个,整合了一下凑合用

insert页面

  1. 引入css

    <link rel="stylesheet" href="/app/admin/admin/css/muti-upload.css" />
    

    muti-upload.css内容如下

    .uploader-list .handle {
        position: relative;
        background-color: black;
        color: white;
        filter: alpha(Opacity=80);
        -moz-opacity: 0.6;
        opacity: 0.6;
        text-align: right;
        height: 20px;
        margin-bottom: -20px;
        display: none;
    }
    
    .uploader-list .handle i {
        display: grid;
        place-items: center;
        height: 20px;
    }
    
    .uploader-list .handle i:hover {
        cursor: pointer;
    }
    
    .uploader-list .file-iteme {
        margin: 12px 0 0 15px;
        padding: 1px;
        float: left;
    }
    
    .uploader-list .file-iteme img{
        height: 128px;
        width: 128px;
    }
    

  2. 添加容器

    将需要多图上传的字段改造成下面的格式,增加预览和上传功能,如商品详情,这里字段名为details

    <div class="layui-form-item">
        <label class="layui-form-label">商品详情</label>
        <div class="layui-input-block">
            <div class="layui-upload">
                <input type="text" style="display:none" name="details" value="" id="details"/>
                <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
                    预览图:
                    <div class="layui-upload-list uploader-list" style="overflow: auto;" id="uploader-list">
                    </div>
                </blockquote>
    
                <button type="button" class="pear-btn pear-btn-primary pear-btn-sm" id="multi-upload">
                    <i class="layui-icon layui-icon-upload"></i>多图上传
                </button>
            </div>
        </div>
    </div>
    
  3. 添加js

    在html文件最后增加下面的js代码,将其中的UPLOAD_API替换为你的图片上传链接,如系统默认的/app/admin/upload/image

    //多图上传 start
    var multiple_images = []; //多图上传array,update也需要将这行放js最前面
    
    var upload = layui.upload;
    var $ = layui.$;
    upload.render({
        elem: '#multi-upload',
        url: UPLOAD_API,
        multiple: true,
        before: function(obj){
            layer.msg('图片上传中...', {
                icon: 16,
                shade: 0.01,
                time: 0
            })
        },
        done: function(res){
            layer.close(layer.msg());//关闭上传提示窗口
            //上传完毕
            $('#uploader-list').append(
                '<div class="file-iteme">' +
                '<div class="handle"><i class="layui-icon layui-icon-delete"></i></div>' +
                '<img src='+ res.data.url +' alt="'+ res.data.name +'" >' +
                '</div>'
            );
    
            //追加图片成功追加文件名至图片容器
            multiple_images.push(res.data.url);
            $('#details').val(multiple_images);
        }
    });
    
    //鼠标悬浮事件
    $(document).on("mouseenter mouseleave", ".file-iteme", function(event){
        if(event.type === "mouseenter"){
            //鼠标悬浮
            $(this).children(".info").fadeIn("fast");
            $(this).children(".handle").fadeIn("fast");
        }else if(event.type === "mouseleave") {
            //鼠标离开
            $(this).children(".info").hide();
            $(this).children(".handle").hide();
        }
    });
    
    // 删除图片
    $(document).on("click", ".file-iteme .handle", function(event){
        var delImg = $(this).parent().children("img").attr("src")
        var index = multiple_images.indexOf(delImg);
        if (index !== -1) {
            multiple_images.splice(index, 1);
        }
        //重新赋值
        $('#details').val(multiple_images);
        //删除标签
        $(this).parent().remove();
    });
    //多图上传 end
    

update页

​ 1-3步骤与insert页差不多相同,多了第4步js调整和第5步初始化数据

  1. 调整第3步第一行放到获取数据库记录前面

  2. 初始化数据

    给表单初始化数据时判断指定字段并遍历赋值,例如我这里的商品详情初始化:

    <script>
        // 相关接口
        const PRIMARY_KEY = "id";
        const SELECT_API = "/app/admin/mall-goods/select" + location.search;
        const UPDATE_API = "/app/admin/mall-goods/update";
        const UPLOAD_API = "/app/admin/upload/image";
    
        var multiple_images = []; //多图上传
    
        // 获取数据库记录
        layui.use(["form", "util", "popup"], function () {
            let $ = layui.$;
            $.ajax({
                url: SELECT_API,
                dataType: "json",
                success: function (res) {
    
                    // 给表单初始化数据
                    layui.each(res.data[0], function (key, value) {
                        let obj = $('*[name="'+key+'"]');
                        if (typeof obj[0] === "undefined" || !obj[0].nodeName) return;
                        if (obj[0].nodeName.toLowerCase() === "textarea") {
                            obj.val(value);
                        } else {
                            obj.attr("value", value);
                            obj[0].value = value;
                        }
    
                        // 商品详情初始化
                        if (key === "details" && value != ""){
                            multiple_images = value.split(",");
                            $.each(multiple_images, function(index, value) {
                                $('#uploader-list').append(
                                    '<div class="file-iteme">' +
                                    '<div class="handle"><i class="layui-icon layui-icon-delete"></i></div>' +
                                    '<img src='+value +' alt="'+ value +'" >' +
                                    '</div>'
                                );
                            });
                        }
                        
                        //其他代码
                    });
    

效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/667987.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

H6922 2.8C-40V (最低启动电压2.5V)升压BOOST恒压芯片 5V12V24V升压IC

H6922升压BOOST恒压芯片是一款2.8C-40V &#xff08;最低启动电压2.5V&#xff09;升压BOOST恒压芯片 5V12V24V升压IC 首先&#xff0c;H6922的宽输入电压范围&#xff08;2.8-40V&#xff09;和低启动电压&#xff08;最低2.5V&#xff09;使其能够适应不同复杂的电源环境。无…

Java网络编程(上)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:Java文件IO&#x1f649; &#x1f439;今日诗词:来如春梦几多时&#xff1f;去似朝云无觅处&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&a…

【前缀和 记忆化搜索】LeetCode1444. 切披萨的方案数

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 动态规划 记忆化搜索 LeetCode1444. 切披萨的方案数 给你一个 rows x cols 大小的矩形披萨和一个整数 k &#xff0c;矩形包含两种字符&#xff1a; ‘A’ &#xff…

【ARM-Linux篇】u-boot编译

嵌入式Linux系统和PC完整的操作系统的对比如下&#xff1a; 一、u-boot简介 uboot是一种通用的引导加载程序&#xff0c;它可以用于多种嵌入式系统&#xff0c;支持多种操作系统&#xff0c;如Linux, Android,NetBSD等。uboot的主要作用是将操作系统内核从存储设备&#xff08…

【Leetcode笔记】40.组合总和II

1. 题目要求 这道题目和39.组合总和不一样的地方在于&#xff1a;数组中含有相同的元素。同样地&#xff0c;结果不能含有重复组合。 拿第一个示例来看&#xff0c; candidates [1, 1, 2, 5, 6, 7, 10]问题在于&#xff1a;第一个path[1(index 0), 2]&#xff0c;绝不能出现…

mysql实战——mysql主从复制管理

一、常见的管理操作 1、查看主库状态 show master status 2、查看从库复制的状态 show slave status 3、在主库上查看从库ip和端口信息 show processlist show slave hosts 4、reset slave、reset master、reset slave all 1、reset master 该命令会执行以下操作&#xff…

JS对象由浅入深

对象 对象&#xff08;Object&#xff09;&#xff1a;JavaScript里的一种数据类型&#xff08;引用类型&#xff09;&#xff0c;也是用于存储数据的 好处&#xff1a;可以用来详细的描述某个事物&#xff0c;是用键值对形式存储语义更明了 特点&#xff1a;对象数据是无序的&…

C++程序命令行参数学习

argc是参数个数&#xff1b; argv[0]是程序名&#xff0c;argv[1]是第一个参数&#xff1b; 如果输入osgptr1 x &#xff0c;osgptr1是程序名&#xff0c;argc是2&#xff1b; 不算程序名&#xff0c;实际的参数个数是argc-1&#xff1b; #include <iostream>using …

Microsoft Fabric 是什么?

最近半个月没有更新内容&#xff0c;原因是什么呢&#xff1f; 原因是花了两周的时间备考了一下"Microsoft Certified: Fabric Analytics Engineer Associate"的考试认证。 非常幸运考试通过了。 那什么是Microsoft Fabric 呢&#xff1f; Microsoft Fabric 是一个…

统信UOS SSH服务升级(ubuntu20)内网

服务器配置 系统信息 SSH版本 目标版本 openssh-server_8.2p1-4_arm64.deb 因为不通互联网&#xff0c;所以所有deb包需要手动下载&#xff08;可以连接互联网的可以自动忽略手动下载deb步骤&#xff0c;直接apt-get install xxx 即可&#xff09; 升级步骤 !!!deb下载方式…

Vue.js - 生命周期与工程化开发【0基础向 Vue 基础学习】

文章目录 Vue 的生命周期Vue 生命周期的四个阶段Vue 生命周期函数&#xff08;钩子函数 工程化开发 & 脚手架 Vue CLI**开发 Vue 的两种方式&#xff1a;**脚手架目录文件介绍项目运行流程组件化开发 & 根组件App.vue 文件&#xff08;单文件组件&#xff09;的三个组成…

【JMeter接口自动化】第2讲 Jmeter目录结构

JMeter的目录结构如下&#xff1a; bin目录&#xff1a;可执行文件目录&#xff0c;启动jmeter时&#xff0c;就是启动bin目录下的ApacheJmeter.jar&#xff0c;jmeter.bat&#xff0c;jmeter.sh ApacheJmeter.jar:启动文件 jmeter.bat&#xff1a;Windows 的启动命令。 jmeter…

【Leetcode每日一题】 综合练习 - 组合(难度⭐⭐)(78)

1. 题目解析 题目链接&#xff1a;77. 组合 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 题目要求我们从 1 到 n 的整数集合中选择 k 个数的所有组合&#xff0c;且组合中的元素不考虑顺序。这意味着集合 [1, 2] 和…

控制障碍函数CBF详解(附带案例实现)

控制障碍函数CBF详解&#xff08;附带案例实现&#xff09; 文章目录 控制障碍函数CBF详解&#xff08;附带案例实现&#xff09;1. Control Affine System2. Lyapunov Theory, Nagumos Theory, Invariance Principle3. Control Lyapunov Function (CLF) and CLF-QP4. Control …

Nginx实战:LUA脚本_环境配置安装

目录 一、什么是LUA脚本 二、Nginx中的LUA脚本 1、主要特点 2、用途 三、如何在nginx中使用LUA脚本 1、原生nginx 2、OpenResty 3、nginx lua配置验证 一、什么是LUA脚本 Nginx Lua 脚本是 Nginx 与 Lua 语言集成的结果&#xff0c;它允许你使用 Lua 语言编写Nginx 模块…

521源码-源码下载-个人网盘源码2024最新web网盘系统源码一键安装版源码分享

主要功能&#xff1a; 1.支持用户管理系统。支持用户注册功能&#xff08;后台可关闭&#xff09;&#xff0c;管理可为每个用户分配一定数额的存储空间&#xff0c;还可以限制单个上传文件大小。 2.支持管理员查看每个会员的文件上传、分享情况&#xff0c;可对用户文件进行删…

YOLOv8 多种任务网络结构详细解析 | 目标检测、实例分割、人体关键点检测、图像分类

前言 本文仅根据模型的预测过程&#xff0c;即从输入图像到输出结果&#xff08;图像预处理、模型推理、后处理&#xff09;&#xff0c;来展现不同任务下的网络结构&#xff0c;OBB 任务暂不包含。 Backbone 1. yolov8m 2. yolov8m-p2 3. yolov8m-p6 4. 细节 图中 CBS Con…

2024 HN CTF WebMisc 部分 wp

Web ez_tp 判断是thinkphp 3.2 参考官方手册:https://www.kancloud.cn/manual/thinkphp/1697 判断路由模式 URL_CASE_INSENSITIVE > true, // 默认false 表示URL区分大小写 true则表示不区分大小写URL_MODEL > 1, // URL访问模式,可选参数0、1、…

【Linux-buildroot,】

Linux-buildroot, ■ buildroot■ 1、简介■ 2、下载■ 2、编译■ 问题一&#xff1a;buildroot 编译的时候会先从网上下载所需的软件源码&#xff0c;下载cmake-3.8.2.tar.gz或下载很慢的情况 ■ buildroot-构建根文件系统■ 1、配置 buildroot■ 2、■ 3、 ■ buildroot-构建…

velero实现备份还原

Velero 是一个开源的 Kubernetes 集群备份和恢复工具&#xff0c;它允许用户轻松安全地备份和恢复他们的 Kubernetes 资源和持久化卷。Velero 由 Kubernetes 的原生 API 驱动&#xff0c;并且与云服务提供商紧密集成&#xff0c;以支持不同的存储解决方案。 helm values文件地…