16-案例-记账单

news2024/11/17 20:17:32

功能需求:

      

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .red {
        color: red
    }
</style>

<body>


    <div id="app">
        <div>
            <!-- 左侧列表 -->
            <div>

                <!-- 添加数据 -->
                <form>
                    <input v-model.trim="name" type="text">
                    <input v-model.number="price" type="text">
                    <button @click="add">添加账单</button>
                </form>


                <table>
                    <thead>
                        <tr>
                            <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>
                            <td>{{item.name}}</td>
                            <!-- 保留两位小数 -->
                            <td :class="{red : item.price > 300 }">{{item.price.toFixed(2)}}</td>
                            <td><a @click="del(item.id)" href="javascript:;">删除</a></td>
                        </tr>
                    </tbody>
                    <!-- 底部标签 -->
                    <tfoot>
                        <tr>
                            <td>消费总计: {{totslPrice}}</td>
                        </tr>
                    </tfoot>
                </table>
            </div>
        </div>


        <!-- 右侧图表 -->
        <!-- 为 ECharts 准备一个定义了宽高的 DOM -->
        <div id="main" style="width: 600px;height:400px;"></div>

    </div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.4.3/echarts.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        /*
        功能需求:

        1. 基本渲染
            (1) 立刻发送请求获取数据 created
            (2) 拿到数据,存到data的响应式数据中
            (3) 结合数据,进行渲染 v-for
            (4) 消费统计 => 计算属性

        2. 添加功能
            (1) 收集表单数据 v-model
            (2) 给添加按钮注册点击事件,发送添加请求
            (3) 需要重新渲染
        3. 删除功能
            (1) 注册点击事件,传参 传 id
            (2) 根据 id 发送删除请求
            (3) 需要重新渲染

        4. 饼图渲染
            (1) 初始化一个饼图 echarts 插件:echarts.init(dom)  mounted钩子实现
            (2) 根据数据实时更新饼图 echarts.setOption({...})
        */

        const app = new Vue({

            el: '#app',
            data: {
                list: [],
                name: "",
                price: ""
                
            },
            computed: {
                totslPrice() {
                    return this.list.reduce((sum, item) => sum + item.price, 0)
                }
            },
            created() {
                // const res = await axios.get("https://applet-base-api-t.itheima.net/bill",{
                //     params:{
                //         creator:"xxx"
                //     }
                // })
                // this.list = res.data.data

                this.getLists()
            },
            mounted() {
                this.myChart = echarts.init(document.querySelector('#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: '球鞋' },

                            ],
                            emphasis: {
                                itemStyle: {
                                    shadowBlur: 10,
                                    shadowOffsetX: 0,
                                    shadowColor: 'rgba(0, 0, 0, 0.5)'
                                }
                            }
                        }
                    ]
                }
                )
            },
            methods: {
                // 获取数据封装为方法,渲染 / 添加/ 删除 都需要请求数据
                async getLists() {
                    const res = await axios.get("https://applet-base-api-t.itheima.net/bill", {
                        params: {
                            creator: "xxx"
                        }
                    })
                    this.list = res.data.data

                    // 异步更新图表
                    this.myChart.setOption({
                        // 数据项
                        series: [
                            {
                                // data: [
                                //     // { value: 1048, name: '球鞋' },
                                // ],
                                data:this.list.map(item =>({value:item.price ,name:item.name }))

                            }
                        ]
                    })
                },

                async add() {
                    if (!this.name) {
                        alert("请输入消费名称")
                        return
                    }

                    if (typeof this.price !== 'number') {
                        alert("请输入正确的消费价格")
                        return
                    }

                    // 发送添加请求
                    const res = await axios.post("https://applet-base-api-t.itheima.net/bill", {
                        creator: "xxx",
                        name: this.name,
                        price: this.price

                    })

                    // 重新渲染
                    this.getLists()

                    // 清空输入框
                    this.name = ""
                    this.price = ""
                },
                async del(id) {
                    // 根据id 发送删除请求
                    const res = await axios.delete(`https://applet-base-api-t.itheima.net/bill/${id}`)
                    console.log(res)
                    // 重新渲染
                    this.getLists()
                }
            }







        })

    </script>


</body>

</html>

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

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

相关文章

224、仿真-基于51单片机音乐播放器流水灯控制Proteus仿真设计(程序+Proteus仿真+原理图+程序流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、原理图 五、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选…

C++音乐播放系统

C音乐播放系统 音乐的好处c发出声音乐谱与赫兹对照把歌打到c上 学习c的同学们都知道&#xff0c;c是一个一本正经的编程语言&#xff0c;因该没有人用它来做游戏、做病毒、做…做…做音乐播放系统吧&#xff01;&#xff01; 音乐的好处 提升情绪&#xff1a;音乐能够影响我们…

【C++进阶】继承、多态的详解(多态篇)

【C进阶】继承、多态的详解&#xff08;多态篇&#xff09; 目录 【C进阶】继承、多态的详解&#xff08;多态篇&#xff09;多态的概念多态的定义及实现多态的构成条件&#xff08;重点&#xff09;虚函数虚函数的重写&#xff08;覆盖、一种接口继承&#xff09;C11 override…

解决C#报“MSB3088 未能读取状态文件*.csprojAssemblyReference.cache“问题

今天在使用vscode软件C#插件&#xff0c;编译.cs文件时&#xff0c;发现如下warning: 图(1) C#报cache没有更新 出现该warning的原因&#xff1a;当前.cs文件修改了&#xff0c;但是其缓存文件*.csprojAssemblyReference.cache没有更新&#xff0c;需要重新清理一下工程&#x…

双层优化入门(4)—基于对偶变换的双层优化求解

之前的博客介绍了双层优化的基本原理、以及如何使用KKT条件和智能优化算法求解双层优化问题&#xff0c;这篇博客将继续介绍如何通过对偶变换求解双层优化问题。 1.线性规划的对偶问题 参考资料&#xff1a; 运筹学修炼日记&#xff1a;如何优雅地写出大规模线性规划的对偶_刘…

spring boot 整合支付宝微信支付

1.目录结构 2.引入依赖 <!--引入阿里支付--><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.11.8.ALL</version></dependency><!--引入微信支付--><depe…

Redis中的淘汰策略

前言 本文主要说明在Redis面临key过期和内存不足的情况时&#xff0c;可以采用什么策略进行解决问题。 Redis中是如何应对过期数据的 正如我们知道的Redis是基于内存的、单线程的一个中间件&#xff0c;在面对过期数据的时候&#xff0c;Redis并不会去直接把它从内存中进行剔…

运用工具Postman快速导出python接口测试脚本

Postman的脚本可以导出多种语言的脚本&#xff0c;方便二次维护开发。 Python的requests库&#xff0c;支持python2和python3&#xff0c;用于发送http/https请求 使用unittest进行接口自动化测试 一、环境准备 1、安装python&#xff08;使用python2或3都可以&#xff09;…

HCIP之VLAN实验

目录 一、实验题目 二、实验思路 三、实验步骤 3.1 将接口划入vlan&#xff0c;设置trunk干道 3.2 启动DHCP服务&#xff0c;下发地址 四、测试 一、实验题目 实验要求&#xff1a; 1&#xff0c;PC1/3的接口均为access模式&#xff0c;且属于vlan2&#xff0c;处于同一…

pyltp 0.2.1安装

1. LTP及pyltp pyltp是 LTP的 Python封装&#xff0c;它里面提供了包括分词&#xff0c;词性标注&#xff0c;命名实体识别&#xff0c;句法分析等等能力。 比较坑的是我们可能无法直接通过pip install pyltp0.2.1方式来安装&#xff0c;所以本文就简单记录下如何通过源码安装…

04_15页表缓存(TLB)和巨型页

前言 linux里面每个物理内存(RAM)页的一般大小都是4kb(32位就是4kb),为了使管理虚拟地址数变少 加快从虚拟地址到物理地址的映射 建议配值并使用HugePage巨型页特性 cpu和mmu和页表缓存(TLB)和cache和ram的关系 CPU看到的都是虚拟地址&#xff0c;需要经过MMU的转化&#xf…

langchain-ChatGLM源码阅读:模型加载

文章目录 使用命令行参数初始化加载器模型实例化清空显存加载模型调用链loader.py的_load_model方法auto_factory.py的from_pretrained方法modeling_utils.py的from_pretrained方法hub.py的get_checkpoint_shard_files方法modeling_utils.py的_load_pretrained_mode方法回到loa…

电脑远程接入软件可以进行文件传输吗?快解析内网穿透

电脑远程接入软件的出现&#xff0c;让我们可以在两台电脑之间进行交互和操作。但是&#xff0c;很多人对于这些软件能否进行文件传输还存在一些疑问。下面的文章将解答这个问题。 1.电脑远程接入软件可以进行文件传输。传统上&#xff0c;我们可能会通过传输线或者移动存储设…

听GPT 讲Prometheus源代码--promql/promdb

Prometheus的promql目录包含PromQL(Prometheus Query Language)的解析和执行代码: parser.go 定义PromQL语法结构和parser,用于将PromQL查询语句进行语法解析。 semantic.go 实现PromQL的语义分析,检查查询是否语法正确且语义合理。 engine.go 定义PromQL执行引擎的接口和数据结…

Chapter 15: Object-Oriented Programming | Python for Everybody 讲义笔记_En

文章目录 Python for Everybody课程简介Object-oriented programmingManaging larger programsGetting startedUsing objectsStarting with programsSubdividing a problemOur first Python objectClasses as typesObject lifecycleMultiple instancesInheritanceSummaryGlossa…

AlexNet阅读笔记

ImageNet classification with deep convolutional neural networks 原文链接&#xff1a;https://dl.acm.org/doi/abs/10.1145/3065386 中文翻译&#xff1a;https://blog.csdn.net/qq_38473254/article/details/132307508 使用深度卷积神经网络进行 ImageNet 分类 摘要 大…

all in one之安装群辉和加硬盘(第五章)

安装群辉和加硬盘 安装群辉 群辉系统选择和介绍 PVE7.1虚拟机安装黑群晖教程 安装教程2 下载对应的群辉系统&#xff0c;根据自己的电脑性能来选择并下载&#xff1a; 百度网盘链接:提取码: 4itr 下载链接【私人博客】 第一步&#xff0c;把下载的img镜像上传到pve 记住上…

idea2023 springboot2.7.5+mybatis+jsp 初学单表增删改查

创建项目 因为2.7.14使用量较少&#xff0c;特更改spring-boot为2.7.5版本 配置端口号 打开Sm01Application类&#xff0c;右键运行启动项目&#xff0c;或者按照如下箭头启动 启动后&#xff0c;控制台提示如下信息表示成功 此刻在浏览器中输入&#xff1a;http://lo…

UltraEdit2023代码编辑器下载安装教程

UltraEdit是深受编程人士喜爱的代码编辑器之一&#xff0c;简洁干净的工作界面&#xff0c;标配的语法高亮功能&#xff0c;代码折叠等高效编程功能&#xff0c;并且&#xff0c;还支持HTML、PHP和JavaScript等语法&#xff0c;让代码编辑、文档内容处理更加方便。 作为一款广…