springboot整合vue2实现简单的新增删除,整合ECharts实现图表渲染

先看效果图:

1.后端接口

 //    查询所有商品信息
//    @CrossOrigin(origins = "*")
    @RequestMapping("/list1")
    @ResponseBody
    public List<Goodsinfo> list1(){
        List<Goodsinfo> list = goodsService.list();
        return list;
    }


//    删除
//    @CrossOrigin(origins = "*")
    @RequestMapping("/del")
    @ResponseBody
    public String del(int id){
        try {
            goodsService.removeById(id);
            return "删除成功";
        }catch (Exception e){
            return "删除失败";
        }
    }

//    根据条件查询
    @RequestMapping("/search")
    @ResponseBody
    public List<Goodsinfo> search(String goodsname,String goodsType){
        System.out.println(goodsname+","+goodsType);
        QueryWrapper<Goodsinfo> wrapper = new QueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(goodsname),"name",goodsname).like(StringUtils.isNotBlank(goodsType),"goods_type",goodsType);
        List<Goodsinfo> list = goodsService.list(wrapper);
        for (Goodsinfo goodsinfo : list) {
            System.out.println(goodsinfo);
        }
        return list;
    }

// 添加数据
    @RequestMapping("/add")
    @ResponseBody
    public String add(@RequestBody Goodsinfo goodsinfo){
        System.out.println(goodsinfo);
        goodsService.save(goodsinfo);
        return "添加成功";
    }

2.前端页面:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <!-- CSS only -->
    <link
      rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
    />
    <style>
      .red {
        color: red!important;
      }
      .search {
        width: 300px;
        margin: 20px 0;
      }
      .my-form {
        display: flex;
        margin: 20px 0;
      }
      .my-form input {
        flex: 1;
        margin-right: 20px;
      }
      .table > :not(:first-child) {
        border-top: none;
      }
      .contain {
        display: flex;
        padding: 10px;
      }
      .list-box {
        flex: 1;
        padding: 0 30px;
      }
      .list-box  a {
        text-decoration: none;
      }
      .echarts-box {
        width: 600px;
        height: 400px;
        padding: 30px;
        margin: 0 auto;
        border: 1px solid #ccc;
      }
      tfoot {
        font-weight: bold;
      }
      @media screen and (max-width: 1000px) {
        .contain {
          flex-wrap: wrap;
        }
        .list-box {
          width: 100%;
        }
        .echarts-box {
          margin-top: 30px;
        }
      }
    </style>
  </head>
  <body>
    <div id="app">
      <div class="contain">
        <!-- 左侧列表 -->
        <div class="list-box">

          <!-- 添加资产 -->
          <form class="my-form">
            <input type="text" v-model="goods.name" class="form-control" placeholder="名称" />
            <input type="text" v-model="goods.price" class="form-control" placeholder="价格" />
			<input type="text" v-model="goods.intro" class="form-control" placeholder="简介" />
			<input type="text" v-model="goods.amount" class="form-control" placeholder="库存" />
			<input type="text" v-model="goods.goodsType" class="form-control" placeholder="类别" />
			<input type="text" v-model="goods.remark" class="form-control" placeholder="备注" />
            <button type="button" class="btn btn-primary" @click="add()">添加账单</button>
          </form>

          <table class="table table-hover">
            <thead>
              <tr>
                <th>编号</th>
                <th>名称</th>
                <th>价格</th>
                <th>简介</th>
				<th>库存</th>
				<th>类别</th>
				<th>备注</th>
				<th>操作</th>
              </tr>
            </thead>
            <tbody>
              <tr v-for="(item,index) in list" :key="item.id">
                <td>{{index+1}}</td>
                <<th>{{item.name}}</th>
                <th :class="{red:item.price>1}">{{item.price}}</th>
				<th>{{item.intro}}</th>
				<th>{{item.amount}}</th>
				<th>{{item.goodsType}}</th>
				<th>{{item.remark}}</th>
                <td><a href="javascript:;" @click="del(item.id)">删除</a></td>
              </tr>
             
            </tbody>
            <tfoot>
              <tr>
                <td colspan="4">消费总计: {{totalPrice}}</td>
              </tr>
            </tfoot>
          </table>
        </div>
        
        <!-- 右侧图表 -->
        <div class="echarts-box" id="main"></div>
      </div>
    </div>
    <script src="../echarts.min.js"></script>
    <script src="../vue.js"></script>
    <script src="../axios.js"></script>
    <script>
      /**
       * 接口文档地址:
       * https://www.apifox.cn/apidoc/shared-24459455-ebb1-4fdc-8df8-0aff8dc317a8/api-53371058
       * 
       * 功能需求:
       * 1. 基本渲染
       * 2. 添加功能
       * 3. 删除功能
       * 4. 饼图渲染
       */
      const app = new Vue({
        el: '#app',
        data: {
          list:[],
		  goods:{
			  name:"",
			  price:"",
			  amount:"",
			  intro:"",
			  goodsType:"",
			  remark:""
		  }
		  
        },
		computed: {
		  totalPrice () {
		    return this.list.reduce((sum, item) => sum + item.price, 0)
		  }
		},
		 created() {
			 /* axios.get("http://localhost:8080/list1")
			.then(res=>{
				console.log(res.data);
				this.list=res.data;
			})
			.catch(err=>{
				console.log(err)
			}) */
			this.getlist()
		},
		mounted() {
			this.myChart = echarts.init(document.getElementById("main"));
			this.myChart.setOption(
			{
			  title: {
			    text: '价格结构图',
			    
			    left: 'center'
			  },
			  tooltip: {
			    trigger: 'item'
			  },
			  legend: {
			    orient: 'vertical',
			    left: 'left'
			  },
			  series: [
			    {
			      name: '单价',
			      type: 'pie',
			      radius: '50%',
			      data: [
			        /* { value: 1048, name: 'Search Engine' },
			        { value: 735, name: 'Direct' },
			        { value: 580, name: 'Email' },
			        { value: 484, name: 'Union Ads' },
			        { value: 300, name: 'Video Ads' } */
			      ],
			      emphasis: {
			        itemStyle: {
			          shadowBlur: 10,
			          shadowOffsetX: 0,
			          shadowColor: 'rgba(0, 0, 0, 0.5)'
			        }
			      }
			    }
			  ]
			}
			)
			
		},
		methods:{
			// 查询所有
			getlist(){
				axios.get("http://localhost:8080/list1")
				.then(res=>{
					console.log(res.data);
					this.list=res.data;
					// 更新图表
					this.myChart.setOption({
						series: [
							{
						   /* data: [
						      { value: 1048, name: 'Search Engine' },
						      { value: 735, name: 'Direct' },
						      { value: 580, name: 'Email' },
						      { value: 484, name: 'Union Ads' },
						      { value: 300, name: 'Video Ads' }
						    ] */
							data: this.list.map(item => ({ value: item.price, name: item.name}))
						  }
						  ]
					})
				})
				.catch(err=>{
					console.log(err)
				});
				
				
				
			},
			// 新增
			add(){
				axios.post("http://localhost:8080/add",this.goods)
				.then(res=>{
					console.log(this.goods);
					alert(res.data);
					this.getlist();
					this.goods={};
					/* for(var i in this.goods){
						this.goods[i] = ''
					} */
				})
			},
			// 删除
			del(id){
				if(confirm("确认删除数据?")){
					axios.get("http://localhost:8080/del?id="+id)
					.then(res=>{
						this.getlist();
					})
				}
				
			}
			
		},
		
		
      })
    </script>
  </body>
</html>

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

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

相关文章

2023年人工智能还好找工作吗?

人工智能的就业形势并不严峻&#xff0c;相反&#xff0c;很多岗位都是供不应求的状态&#xff0c;可以看一下下面的官方数据。 脉脉高聘人才智库发布《2023泛人工智能人才洞察》&#xff0c;对23年1-8月的人工智能行业现状进行了分析总结。 人工智能相关岗位数据&#xff1a…

Newman

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一&#xff09;如何安装Newman 1、下载并安装NodeJs 在官网下载NodeJs&#xff1a; Download | Node.js&#xff08;官网的…

没有设计经验的新手如何制作一本电子画册?

移动信息时代&#xff0c;电子画册逐渐取代纸质画册&#xff0c;它无需印刷&#xff0c;环保节能&#xff0c;也无需随身携带&#xff0c;通过手机/平板/电脑等设备即可随时在线浏览阅读&#xff0c;十分方便。那没有设计经验的新手如何制作一本这样随身携带方便的电子画册呢&a…

Servlet 常见的API

文章目录 写在前面Smart Tomcat 插件Servlet 中常见的API1. HttpServletinit 方法destroy 方法service 方法Servlet 的生命周期 使用 postman 构造请求使用 ajax 构造请求2. HttpServletRequest3. 前端给后端传参1). GET, query string2). POST, form3). json 4. HttpServletRe…

易货:一种古老而有效的商业模式

在当今的商业世界中&#xff0c;我们常常听到关于电子商务、互联网和社交媒体等新技术的讨论。然而&#xff0c;尽管这些新技术为我们的日常生活带来了许多便利&#xff0c;但它们并没有完全取代传统的商业模式。其中&#xff0c;易货模式是一种古老而有效的商业模式&#xff0…

德迅云安全为您介绍关于抗D盾的一些事

抗D盾概述&#xff1a; 抗D盾是新一代的智能分布式云接入系统&#xff0c;接入节点采用多机房集群部署模式&#xff0c;隐藏真实服务器IP&#xff0c;类似于网站CDN的节点接入&#xff0c;但是“抗D盾”是比CDN应用范围更广的接入方式&#xff0c;适合任何TCP 端类应用包括&am…

原生js做打地鼠游戏

抱歉素材有点难找&#xff0c;这次的学习重点是在JS的实现&#xff0c;梳理一下打地鼠的实现逻辑&#xff0c;主要分为三个主要功能函数。 开始游戏&#xff1a;对分数、并根据游戏难度对游戏的倒计时和延迟进行初始化之后&#xff0c;利用setInterval定时器Math.random随机函…

Springboot-aop的使用

aop:面向切面编程&#xff0c;可以看作是面向对象的补充 举例 1.依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.1</version><relativePath/>…

你绝对需要的Facebook养号攻略,教你如何养成耐用号

Facebook 可谓是大家的“老熟人”了&#xff0c;作为全球热门的社交媒体平台&#xff0c;Facebook 一直以来都是社媒营销、跨境电商的重要阵地&#xff0c;但是很多小伙伴们在注册新账号后往往忽略了一个重要的步骤&#xff0c;也是必不可少的一步&#xff0c;那就是养号&#…

halcon里面显示红色三角或者黄色三角+感叹号的算子代表什么含义

有时候&#xff0c;在Halcon里面使用某些算子的时候&#xff0c;左侧有红色或者黄色三角感叹号的提示。 如下图&#xff1a; 可以把鼠标放到红色感叹号上面&#xff0c;发现提示&#xff1a; 有这些标志的算子代表是Halcon中不推荐使用&#xff0c;可以淘汰的算子&#xff0c;…

开发程序员的宝藏工具/网站

博主在这里收录各式各样的工具/网站&#xff0c;都是一些能够帮助开发、提高效率的好东西 博主会不断更新&#xff0c;更加欢迎大家把自己觉得好用的分享在评论区 记得收藏起来&#xff0c;免得以后找不到了 1.文本对比 在线文本差异对比,文本比对、文本比较工具 能够将两边的…

如何掌握项目管理的5个阶段?

项目管理协会&#xff08;PMI&#xff09;创建了一个五步项目管理流程&#xff0c;即从启动、规划、执行、监控到结束&#xff0c;为项目经理更好地管理项目提供了现成的基础。如果你正为范围蔓延、返工或项目总体混乱而苦恼&#xff0c;那么遵循项目管理的五个阶段&#xff0c…

ArrayList源码分析

ArrayList内部存储结构就是数组 类结构图 属性介绍 private static final int DEFAULT_CAPACITY 10; //默认数组大小// 空数组&#xff0c;预先创建 private static final Object[] EMPTY_ELEMENTDATA {};// 默认空数组,由默认构造方法调用时指定&#xff0c;预先创建&…

开源免费的Windows应用程序强力卸载工具Bulk Crap UninstallerV5.7的简单使用

经常遇到Windows平台上安装的一些应用&#xff0c;因为应用自带的安装卸载程序有问题、应用的卸载程序损坏、应用卸载需要密码等原因&#xff0c;导致应用无法卸载、卸载不完整等。本介绍了开源的Windows应用程序强力卸载工具Bulk Crap UninstallerV5.7和安装使用的简单说明。 …

Postman+Newman+Jenkins实现接口测试持续集成

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 1.新建一个项目 2.设置自定义工作空间 3.执行windows的批处理命令 4.执行系统的Groovy脚本 5.生成的HTML的报告集成到Jenkin…

互斥量保护资源

一、概念 在多数情况下&#xff0c;互斥型信号量和二值型信号量非常相似&#xff0c;但是从功能上二值型信号量用于同步&#xff0c; 而互斥型信号量用于资源保护。 互斥型信号量和二值型信号量还有一个最大的区别&#xff0c;互斥型信号量可以有效解决优先级反转现 象。 …

在 Rocky 中使用 FreeRDP 远程连接 Windows 机器

前言&#xff1a; 远程控制已成为 IT 人员和企业用户在处理日常任务时不可或缺的工具。无论是进行系统管理、支持远程工作&#xff0c;还是协助解决技术问题&#xff0c;一个可靠且高效的远程桌面工具都是业务连续性的关键。开始我个人使用了todesk&#xff08;也曾鲜想过向日…

瑞吉外卖Day04

1.文件的上传下载 Value("${reggie.path}")private String basePath;/*** 文件上传** param file* return*/PostMapping("/upload")public R<String> upload(MultipartFile file) {log.info("文件上传");//原始文件名String originalFilen…

ssm823基于ssm的心理预约咨询管理系统的设计与实现+vue

ssm823基于ssm的心理预约咨询管理系统的设计与实现vue 交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————

C语言每日一题(29)合并两个有序链表

力扣网 21合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 思路分析 最基本的一种思路就是&#xff0c;遍历两个链表&#xff0c;将对应结点的值进行比较&#xff0c;题目要求是要升序排…