SpringBoot+layui实现商品打标

news2024/11/18 21:26:12

标题

    • 下拉框组件
    • 效果图
      • 代码实现
        • 前端界面
        • 产品打标页面代码
      • 后端代码
        • controller
        • service ,serviceImpl
        • mapper
        • mapper.xml
        • entity
      • 数据库表

下拉框组件

xm-select

效果图

在这里插入图片描述

在这里插入图片描述

代码实现

前端界面

在这里插入图片描述

<script type="text/html" id="stockTags">
    <div>
        <div>{{d.model}}</div>
        <ul style="display: flex;flex-wrap: wrap;">
            {{# layui.each(d.tags, function(index, item){}}
            <li class="layui-badge data-other-btn tags">
                {{item.name}}
            </li>
            {{# });}}
            {{# if(d.tags === null){}}
            {{#}}}
        </ul>
    </div>
</script>

在这里插入图片描述

产品打标页面代码

在这里插入图片描述

 table.on('toolbar(stockTableFilter)', function (obj) {
            var id = obj.config.id;
            var checkStatus = table.checkStatus(id);
            var dataArr = checkStatus.data;//用于删除
            var data = checkStatus.data[0]; //获取选中行数据
            var othis = lay(this);
            switch (obj.event) {
                case 'tag':
                    if (dataArr.length == 0) {
                        notify.info('请选择要打标的产品', "vcenter", "shadow", false, 1000);
                        return false;
                    }
                    layer.open({
                        type: 1,
                        title: '产品打标',
                        area: ['390px', '160px'],
                        content: '<div id="tagsSelect" class="xm-select-demo-alert" style="padding: 10px"></div>',
                        skin: 'class-layer-sea',
                        btn: ['<i class="fa fa-check"></i> 确认', '<i class="fa fa-reply-all"></i> 取消'],
                        success: function (layero, index) {
                            //这里因为内容过少, 会被遮挡, 所以简单修改了下样式
                            document.getElementById('layui-layer' + index).getElementsByClassName('layui-layer-content')[0].style.overflow = 'unset';
                            //产品打标管理
                            tagsData('#tagsSelect');
                            getData('/tag/getTagsSelectData', tagsSelect);
                        },
                        yes: function (index,) {
                            //获取打标数据
                            var selectArr = tagsSelect.getValue();
                            var str = '';
                            for (var i = 0; i < selectArr.length; i++) {
                                str += selectArr[i].value + ',';
                            }
                            console.log(str);
                            notify.loading('正在保存...', 'vcenter', 'shadow', false)
                            setTimeout(function () {
                                notify.destroyAll();
                                $.ajax({
                                    url: '/stock/updateTagsInfo',
                                    type: 'POST',
                                    data: {
                                        id: data.id,
                                        value: str,
                                    },
                                    success: function (result) {
                                        if (result.code === 0) {
                                            notify.success(result.msg, 'vcenter', 'shadow', false, 1000);
                                        } else {
                                            notify.error(result.msg, "vcenter", "shadow", false, 1000);
                                        }
                                    }
                                }).done(function () {
                                    setTimeout(function () {
                                        notify.destroyAll();
                                        layer.closeAll();
                                        parent.location.reload();//重载页面
                                    }, 500);
                                });
                            }, 1000)

                        },
                        btn2: function () {
                            //按钮【按钮二】的回调
                            layer.close();
                        }
                    });
                    break;
              
            }
            ;
        });
// 下拉组件渲染
        var tagsSelect;

        function tagsData(el) {
            tagsSelect = xmSelect.render({
                el: el,
                filterable: true,
                paging: true,
                pageSize: 5,
                tips: '请选择标签',
                searchTips: '搜索标签',
                toolbar: {
                    show: true,
                    list: ['ALL', 'CLEAR', 'REVERSE', {
                        name: '标签',
                        icon: 'fa fa-plus-square',
                        method(data) {
                            addData('请填写新增标签信息', '/tag/addTags')
                        },
                    }, {
                        name: '重载数据',
                        icon: 'fa fa-refresh',
                        method(data) {
                            getData('/tag/getTagsSelectData', tagsSelect, 0)
                        },
                    }]
                },
                max: 3,
                maxMethod(item) {
                    layer.msg('最多选择三个标签')
                },
                data: []
            })
        }
/*
        * 后端获取下拉框数据
        * */
        function getData(url, select, val) {
            $.ajax({
                url: url, type: 'GET', success: function (data) {
                    var newData = data.map(function (item) {
                        if (val != 0) {//编辑数据
                            // 根据不同的数据类型,设置不同的name和value
                            return {
                                name: item.name,
                                value: item.id,
                                selected: (item.id === val),
                                // disabled: item.status == 0 ? true : false
                            };
                        }
                        // 根据不同的数据类型,设置不同的name和value:disabled:item.status == 0 ? true : false :禁用已经停用的状态
                        return {
                            name: item.name,
                            value: item.id,
                            // disabled: item.status == 0 ? true : false
                        };
                    });
                    select.update({data: newData});//更新下拉选择框的数据
                }, error: function (error) {
                    console.log('Error fetching data from backend: ' + error);
                }
            });
        }

后端代码

controller
 /*
    * 产品标签更新
    * @updateTagsInfo
    * */
    @PostMapping("/updateTagsInfo")
    public ResultUtil updateTagsInfo(Integer id, String value) {
       try {
           stockService.updateTagsInfo(id,value);
           return ResultUtil.ok(0,"打标成功!");
       }catch (Exception e){
           e.printStackTrace();
           return ResultUtil.error("打标失败!");
       }
    }
service ,serviceImpl
 /*
    * 产品打标
    * */
    void updateTagsInfo(Integer id, String value);
  @Override
    public void updateTagsInfo(Integer id, String value) {
        //根据id获取标签实体对象
       tagsMapper.deleteByStockId(id);
        // 判断是否为空
        if (value != null && value.length() != 0){
            // 将字符串按逗号分割
            String[] split = value.split(",");
            for (String s : split) {
                // 创建实体对象
                StockTagsEntity stockTags = new StockTagsEntity();
                // 设置ID
                stockTags.setStockId(id);
                // 设置标签ID
                stockTags.setTagsId(Integer.parseInt(s));
                // 插入信息
                tagsMapper.insertStockTags(stockTags);
            }
        }
    }
mapper
 // 根据id删除
    void deleteByStockId(Integer id);
        /*
    * 插入产品标签信息
    *
    * */
    void insertStockTags(StockTagsEntity stockTagsEntity);
mapper.xml
  <!--插入产品标签信息insertStockTags-->
    <insert id="insertStockTags" parameterType="com.example.erp_project.entity.StockTagsEntity">
        insert into tb_s_tags(stockId,tagsId)
        values (#{stockId},#{tagsId})
    </insert>
 <!--根据id删除角色资源-->
    <delete id="deleteByStockId" parameterType="int">
        delete from tb_s_tags
        where stockId = #{stockId}
    </delete>
entity

import lombok.Data;

/**
 * @author Lolo don‘t feel
 */
@Data
public class StockTagsEntity {
    // 主键
    private Integer id;
    // 产品id
    private Integer stockId;
    // 标签id
    private Integer tagsId;
}

数据库表

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis实战篇4:发布博客与点赞

一、博客 关于发布博客这个功能&#xff0c;他就是mysql相关的数据库&#xff0c;不涉及到redis&#xff0c;但是我们可以来看一下其相关的表的功能来了解一下&#xff1a; 博客表&#xff1a; 与其对应的评论表&#xff1a; 关于其数据库的设计也应该好好的学习一下。 二…

盲盒小程序开发:传统与当代的创新融合

谈起盲盒&#xff0c;许多人并不陌生。近几年&#xff0c;盲盒一直是年轻人首选的娱乐消费方式&#xff0c;小小的盲盒为消费者带来了极大的欢乐。 盲盒小程序是将传统的盲盒玩法与线上购物方式相融合&#xff0c;对拆盲盒进行创新&#xff0c;为盲盒消费者带来全新的盲盒体验…

宋街宣传活动-循环利用,绿色生活

善于善行回收团队是一支致力于推动环保事业&#xff0c;积极倡导和实践绿色生活的志愿者队伍。我们的宗旨是通过回收再利用&#xff0c;减少资源浪费&#xff0c;降低环境污染&#xff0c;同时提高公众的环保意识&#xff0c;共同构建美丽和谐的家园。 善于善行志愿团队于2024年…

NLP原理系列1-说清楚transformer原理

NLP原理系列1-说清楚transformer原理 来用思维导图和截图描述。 思维导图的本质是 变化(解决问题)-> 更好的&#xff0c; 或者复杂问题拆分为小问题 以及拆分的思路。 经典全图 0 transformer的前世今生 1 seq2seq 序列化数据 到 序列化数据&#xff0c; 只要能把 训练…

在多项目管理中,企业如何平衡项目资源分配?

数字化时代&#xff0c;多项目管理已经成为了企业内部的常态。组织可以在不同项目之间进行资源合理分配和调度&#xff0c;避免资源浪费和重复使用、提高资源利用率&#xff0c;从而提升项目执行效率和组织整体竞争力。 然而在多项目管理中&#xff0c;资源管理却面临着多重难点…

CrowdSec 防护软件安装与使用

1、环境介绍 操作系统版本&#xff1a;centos 7.9 2、存储库安装 curl -s https://install.crowdsec.net | sudo sh3、安装安全引擎CrowdSec yum install crowdsec启动 systemctl start crowdsec systemctl enable crowdsec4、安装修正组件 yum install crowdsec-firewall…

认证申报 | 中华环保联合会 “全国环境友好企业”认证服务

中华环保联合会水环境治理专业委员会秘书处 联系人&#xff1a;王小雅 电话 &#xff1a;010-51651268 13718793867 网址&#xff1a;www.acef-water.com.cn 01什么是“全国环境友好企业”认证 “全国环境友好企业”认证是经国家认证认可监督管理委员会审查监督并在全国认…

基于kdtree的三种搜索近邻点(python版本)

1、前言 点云中近邻点搜索查询是一种非常常见的数据处理操作步骤&#xff0c;近邻点搜索方式包括k近邻搜索、近距离搜索&#xff08;球体近邻搜索&#xff09;、圆柱体搜索三种方式&#xff0c;每一种搜索方式适用的场景各不相同。其中kdtree搜索是一种有效搜索近邻点方式&…

细说ARM MCU的串口接收数据的实现过程

目录 一、硬件及工程 1、硬件 2、软件目的 3、创建.ioc工程 二、 代码修改 1、串口初始化函数MX_USART2_UART_Init() &#xff08;1&#xff09;MX_USART2_UART_Init()串口参数初始化函数 &#xff08;2&#xff09;HAL_UART_MspInit()串口功能模块初始化函数 2、串口…

计划任务 之 一次性的计划任务

计划任务 作用:定时自动完成特定的工作 计划任务的分类&#xff1a; &#xff08;1&#xff09;一次性的计划任务 例如下周三对系统的重要文件备份一次 &#xff08;2&#xff09;周期性重复计划任务 例如每天晚上12&#xff1a;00备份一次 一次性的任务计划&#xff1a…

【java计算机毕设】图书管理系统javaweb java MySQL springboot vue html maven送文档+ppt 代码源码计算机项目

1项目功能 【java计算机专业学长毕业设计分享】 智慧图书管理系统 Java SpringBoot vue HTML MySQL 前后端分离 2项目介绍 系统功能&#xff1a; 智慧图书管理系统包括管理员和用户两种角色。 管理员的功能包括在个人中心修改个人信息和密码&#xff0c;管理员功能模块管理管理…

Spark学习——不同模式下执行脚本

举个简单的例子&#xff1a;使用spark官方用例"取pi值" 一、local模式 进入spark目录执行后台命令&#xff1a; bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master local[*] \ ./examples/jars/spark-examples_2.12-3.2.1.jar \ 10运行结…

芯片级激光器研发取得新进展

欢迎关注GZH《光场视觉》 自 20 世纪 60 年代以来&#xff0c;激光给世界带来了革命性的变化&#xff0c;如今已成为从尖端手术和精密制造到光纤数据传输等现代应用中不可或缺的工具。 但是&#xff0c;随着激光应用需求的增长&#xff0c;挑战也随之而来。例如&#xff0c;光…

本周MoonBit新增Wasm1引用计数支持、语法即将添加错误恢复机制

MoonBit更新 【Wasm MVP】Wasm1 后端添加基于 Perceus 算法的引用计数支持 【语法】throw raise try catch 均被保留为关键字 为了即将添加的错误处理机制 【Core】List与sorted_map被移动至core/immut下 List被移动至core/immut/list包中&#xff0c;并被移除内置类型支持 …

重邮计算机网络803-(1)概述

目录 一.计算机网络向用户提供的最重要的功能 二.互联网概述 1.网络的网络 2.计算机网络的概念 3. 互联网发展的三个阶段 4.制订互联网的正式标准要经过以下的四个阶段 5.互联网的组成&#xff08;功能&#xff09; 6.互联网功能 7.互联网的组成&#xff08;物理&…

为什么50etf期权涨幅这么大?

今天带你了解为什么50etf期权涨幅这么大&#xff1f;50ETF期权涨幅大是因为跟上证50指数&#xff0c;另外期权的特征自带杠杆效应在虚值合约上有特别高以小博大的效果。 为什么50etf期权涨幅这么大&#xff1f; 标的资产价格的大幅波动&#xff1a;50ETF期权的内在价值与50ETF…

坦白局考PMP真的能缓解职场焦虑吗?

我就是那个花了大几千去考了一张190个国家都认可的高含金量证书&#xff0c;每三年还要花150美金续证&#xff0c;但这个证书给我的生活带来前所未有的改变。我不知道其他人考了PMP证书如今怎么样了&#xff0c;我只说我自己&#xff0c;今天就来聊聊从我了解到拿证这一过程&am…

大规模胰腺癌检测通过非对比增强CT和深度学习| 文献速递-视觉通用模型与疾病诊断

Title 题目 Large-scale pancreatic cancer detection via non-contrast CT and deep learning 大规模胰腺癌检测通过非对比增强CT和深度学习 01 文献速递介绍 胰腺导管腺癌&#xff08;PDAC&#xff09;是最致命的实体恶性肿瘤&#xff0c;通常在晚期和不可手术的阶段被检…

HyperSnap软件最新版下载-HyperSnap官方最新版附加详细安装步骤

​HyperSnap是一个老牌优秀的屏幕截图工具&#xff0c;全新界面&#xff0c;不仅能抓取标准桌面程序&#xff0c;还能抓取 DirectX, 3Dfx Glide的 游戏视频或 DVD 屏幕图&#xff0c;能以 20 多种图形格式&#xff08;包括&#xff1a;BMP, GIF,JPEG, TIFF, PCX等&#xff09;保…

MS6001/2/4低功耗,低噪声 CMOS 轨到轨输入输出运算放大器

MS6001/2/4 运算放大器具有极低功耗&#xff0c;轨到轨输入输出&#xff0c;低 的输入电压和低的电流噪声。具体表现在可工作在幅度为 1.8V 到 5V 的单电源或者双电源条件&#xff0c;低功耗和低噪声使得 MS6001/2/4 能够用在可移动设备上&#xff0c;输入输出的轨到轨…