VUE-购物车

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <script src="vue.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
</head>
<body>
<div id="app" style="width: 1000px;margin: 0 auto;">

    <form style="margin-bottom: 100px;">
        <div class="form-group">
            <label for="exampleInputEmail1">商品名称:</label>
            <input type="text" class="form-control" placeholder="请输入商品名称(任意字符2-16位)" style="width: 500px;" v-model="goods_name">
        </div>

        <div class="form-group">
            <label for="exampleInputPassword1">商品单价:</label>
            <input type="text" class="form-control" placeholder="请输入商品单价(保留两位小数)" style="width: 500px;" v-model="goods_price">
        </div>

        <button type="button" class="btn btn-primary" @click="add">立即添加</button>

        <p v-for="(v,k) in errors">
            {{v}}
        </p>
    </form>




    <input type="text" class="form-control" style="margin: 10px 0;width: 500px;" placeholder="请输入商品名称进行搜索" v-model="word">

    <table class="table table-striped">
        <thead class="thead-light">
        <tr>
            <th scope="col"></th>
            <th scope="col">商品ID</th>
            <th scope="col">商品名称</th>
            <th scope="col">商品单价</th>
            <th scope="col">商品数量</th>
            <th scope="col">商品小计</th>
            <th scope="col">操作</th>
        </tr>
        </thead>
        <tbody>
        <tr v-for="(v,k) in result">
            <th scope="row">
                <input type="checkbox" v-model="v.is_check">
            </th>
            <td>{{v.id}}</td>
            <td>{{v.name}}</td>
            <td>{{v.price.toFixed(2)}}</td>
            <td>
                <button type="button" class="btn btn-primary" @click="jia(k)">+</button>
                {{v.num}}
                <button type="button" class="btn btn-primary" @click="jian(k)">-</button>
            </td>
            <td>{{v.sum_price.toFixed(2)}}</td>
            <td>
                <button type="button" class="btn btn-danger" @click="del(k)">删除</button>
            </td>
        </tr>

        </tbody>
    </table>

    <p>
        <button type="button" class="btn btn-primary" @click="allCheck">全选</button>
        <button type="button" class="btn btn-primary" @click="noCheck">全不选</button>
        <button type="button" class="btn btn-primary" @click="unCheck">反选</button>
        <button type="button" class="btn btn-danger" @click="allDel">批量删除</button>


        当前选中商品数为:<span style="color: red;">{{goods_count}}</span>
         
        总价:<span style="color: red;">{{goods_sum}}</span>
    </p>
</div>
</body>
</html>
<script>
    new Vue({
        el: '#app',
        computed: {
            result() {
                if (this.word == '') {
                    return this.list
                } else {
                    var obj = this
                    var arr = []
                    this.list.map(function(v) {
                        if (v.name.indexOf(obj.word) > -1) {
                            arr.push(v)
                        }
                    })
                    return arr
                }

            },
            goods_count() {
                var num = 0; //默认数量为0
                this.list.map(function(v) {
                    if (v.is_check) {
                        num += 1
                    }
                })
                return num
            },
            goods_sum() {
                var price = 0;
                this.list.map(function(v) {
                    if (v.is_check) {
                        price += v.sum_price
                    }
                })

                return price.toFixed(2)
            }
        },
        methods: {
            add() {
                if (this.validate() == 0) {
                    var obj = {
                        id: this.list.length+1,
                        name: this.goods_name,
                        price: Number(this.goods_price),
                        num: 1,
                        sum_price: Number(this.goods_price),
                        is_check: false
                    }

                    this.list.push(obj)
                }
            },
            validate() {
                this.errors = []
                if (this.goods_name == '') {
                    this.errors.push('商品名称必须填写')
                } else {
                    var reg = /^[\u4e00-\u9fa5\w]{2,16}$/i
                    if (!reg.test(this.goods_name)) {
                        this.errors.push('商品名称为2-16位任意字符')
                    }
                }

                if (this.goods_price == '') {
                    this.errors.push('商品价格必须填写')
                } else {
                    var reg = /^\d+\.\d{2}$/
                    if (!reg.test(this.goods_price)) {
                        this.errors.push('商品价格保留两位小数')
                    }
                }

                return this.errors.length


            },
            jia(k) {
                //最终的数量等于原来的数量+1
                var last_num = this.list[k].num + 1 >= 5 ? 5 : this.list[k].num + 1
                //计算小计
                this.list[k].sum_price = last_num * this.list[k].price
                //将数量替换一下
                this.list[k].num = last_num
            },
            jian(k) {
                //最终的数量等于原来的数量-1
                var last_num = this.list[k].num - 1 <= 1 ? 1 : this.list[k].num - 1
                //计算小计
                this.list[k].sum_price = last_num * this.list[k].price
                //将数量替换一下
                this.list[k].num = last_num
            },
            del(k) {
                var res = confirm('您确定要删除吗?')
                if (res) {
                    this.list.splice(k, 1)
                }
            },
            allCheck() {
                this.list.map(function(v) {
                    if (v.is_check == false) {
                        v.is_check = true
                    }
                })
            },
            noCheck() {
                this.list.map(function(v) {
                    if (v.is_check) {
                        v.is_check = false
                    }
                })
            },
            unCheck() {
                this.list.map(function(v) {
                    if (v.is_check) {
                        v.is_check = false
                    } else {
                        v.is_check = true
                    }
                })
            },
            allDel() {
                var new_arr = []
                this.list.map(function(v) {
                    if (v.is_check == false) {
                        new_arr.push(v)
                    }
                })

                this.list = new_arr
            }
        },
        data: {
            errors: [],
            goods_name: '',
            goods_price: '',
            word: '',
            list: [{
                id: 1,
                name: '充气达达',
                price: 20.01,
                num: 1,
                sum_price: 20.01,
                is_check: false
            },
                {
                    id: 2,
                    name: '充气鹏鹏',
                    price: 99.99,
                    num: 1,
                    sum_price: 99.99,
                    is_check: false
                },
                {
                    id: 3,
                    name: '充气安韩',
                    price: 33.33,
                    num: 1,
                    sum_price: 33.33,
                    is_check: false
                },
                {
                    id: 4,
                    name: '洁鹏洗面奶',
                    price: 9.9,
                    num: 1,
                    sum_price: 9.9,
                    is_check: false
                },
                {
                    id: 5,
                    name: '洁鹏床上用品/套',
                    price: 500,
                    num: 1,
                    sum_price: 500,
                    is_check: false
                }
            ]
        }
    })
</script>

  

上一篇:OpenStack(V13版)命令


下一篇:发布日志 - kratos v2.0.5 版本发布