vue3简单购物车

简介: vue3简单购物车

css样式:

           * {
        padding: 0;
        margin: 0;
      }
      #shopping {
        width: 50%;
        height: 50px;
        border: 1px solid black;
        display: flex;
      }
      .shopping_inner {
        width: 25%;
        height: 100%;
        border: 1px solid black;
        display: flex;
        align-items: center;
        justify-content: center;
      }
      #commodity div {
        width: 50%;
        height: 50px;
        border: 1px solid black;
        display: flex;
      }
      .shopping_inner button {
        width: 25%;
        height: 55%;
      }
      #num {
        width: 100%;
        height: 100px;
      }
      #add {
        width: 100%;
        height: 100px;
      }
      #add button {
        width: 100px;
        height: 60%;
      }
      #hide input {
        width: 45%;
        height: 100%;
      }
      #hide button {
        width: 10%;
        border: none;
        outline: none;
      }
      #delete_inner input {
        width: 45%;
        height: 100%;
      }
      #delete_inner button {
        width: 10%;
        border: none;
        outline: none;
      }

html结构

<div id="shopping">
      <div class="shopping_inner">
        <b>名称</b>
      </div>
      <div class="shopping_inner">
        <b>价格</b>
      </div>
      <div class="shopping_inner">
        <b>数量</b>
      </div>
      <div class="shopping_inner">
        <b>操作</b>
      </div>
    </div>
    <div id="commodity">
      <div v-for="(item,index) in array" class="border_inner" :style="{'background-color':(item.number!=0?'red':'white')}">
        <div class="shopping_inner">
          {{item.name}}
        </div>
        <div class="shopping_inner">
          {{item.Price}}
        </div>
        <div class="shopping_inner">
          <button class="but" @click="cut(index)" v-show="item.number>0">-</button>
          {{item.number}}
          <button @click="add(index)">+</button>
        </div>
        <div class="shopping_inner">
          <button @click="edit(index)">编辑</button>&nbsp;
          <button @click="dele(index)">删除</button>
        </div>
      </div>
      <div id="num">
        <div class="shopping_inner">
        </div>
        <div class="shopping_inner">
          <span>总价格:</span>
          {{price_inner}}
        </div>
        <div class="shopping_inner">
          <span>总数量:</span>
          {{number_inner}}
        </div>
        <div class="shopping_inner">
        </div>
      </div>
      <button @click="hid">添加商品</button>
      <div id="hide" v-show="hi" style="width: 50%;height: 30px;">
        <input type="text" v-model="name">
        <input type="text" v-model="Price">
        <button @click="add_edd">添加</button>
        <button @click="cancel">取消</button>
      </div>
      <div id="delete_inner" style="width: 50%;height: 30px;background-color: red;" v-show="nonets">
        <input type="text" v-model="inner_name">
        <input type="text" v-model="Price_inner">
        <button @click="con(index)">确认</button>
        <button @click="del">取消</button>
      </div>
    </div>

js,vue行为:

<script type="text/javascript">
      let arr = Vue.createApp({
        data() {
          return {
            array: [{
              name: '商品一',
              Price: 14,
              number: 0
            }, {
              name: '商品二',
              Price: 15,
              number: 0
            }, {
              name: '商品三',
              Price: 20,
              number: 0
            }],
            price_inner: '0',
            number_inner: '0',
            hi: false,
            nonets: false,
            inde_inner: '0',
            Price_inner:'',
            inner_name:''
          };
        },
        methods: {
          // 加
          add(i) {
            arr.array[i].number++;
            arr.number_inner++;
            let arr_arr = 0;
            for (let p = 0; p < this.array.length; p++) {
              arr_arr += this.array[p].Price * this.array[p].number;
            }
            arr.price_inner = arr_arr;
            // console.log(arr_arr);
            if (this.array[i].number > 0) {
              this.array[i].backgroundColor = "rgba(255, 0, 0, 0.3)";
              console.log(i);
            }
          },
          // 减
          cut(p) {
            arr.array[p].number--;
            arr.number_inner--;
            let arr_arr = 0;
            for (let p = 0; p < this.array.length; p++) {
              arr_arr += this.array[p].Price * this.array[p].number
            }
            arr.price_inner = arr_arr;
            console.log(arr_arr);
          },
          hid() {
            this.hi = true;
          },
          // 添加
          add_edd() {
            // console.log(this.name);
            if (this.name != undefined && this.Price != undefined && this.name != '' && this.Price != '') {
              this.array.unshift({
                name: this.name,
                Price: this.Price,
                number: 0,
              })
              this.name = '';
              this.Price = '';
              this.hi = false;
            } else {
              alert('请输入商品');
              this.name = '';
              this.Price = '';
              this.hi = false;
            }
          },
          cancel() {
            this.name = '';
            this.Price = '';
            this.hi = false;
          },
          // 删除
          dele(a) {
            console.log(a);
            this.array.splice(a, 1)
            console.log(this.array);
            let arr_arr = 0;
            let arr_num = 0;
            for (let p = 0; p < this.array.length; p++) {
              arr_arr += this.array[p].Price * this.array[p].number;
              arr_num += this.array[p].number;
            }
            arr.price_inner = arr_arr;
            arr.number_inner = arr_num;
            console.log(arr_arr);
            console.log(arr_num);
            this.nonets = false;
          },
          // 编辑
          edit(a) {
            console.log(this.array[a]);
            this.nonets = true;
            this.inner_name = this.array[a].name;
            this.Price_inner = this.array[a].Price;
            this.inde_inner = a;
          },
          del() {
            this.nonets = false;
          },
          // 编辑确认
          con() {
            // console.log(this.inde_inner);
            this.array[this.inde_inner].name = this.inner_name;
            this.array[this.inde_inner].Price = this.Price_inner;
            this.nonets = false;
            let arr_arr = 0;
            let arr_num = 0;
            // for (let p = 0; p < this.array.length; p++) {
            //  arr_arr += this.array[p].Price * this.array[p].number;
            //  arr_num += this.array[p].number;
            // }
            for (let k in this.array) {
              console.log(this.array[k]);
                arr_arr += this.array[k].Price * this.array[k].number;
                arr_num += this.array[k].number;
            }
            arr.price_inner = arr_arr;
            arr.number_inner = arr_num;
            console.log(arr_arr);
            console.log(arr_num);
          }
        }
      }).mount('#commodity')
    </script>
相关文章
|
1天前
|
存储 JavaScript 前端开发
vue3获取本地的当前时间转化为年月日显示然后计算之后一周的时间
vue3获取本地的当前时间转化为年月日显示然后计算之后一周的时间
|
1天前
|
存储 JavaScript API
Vue 3 中实现引导页
Vue 3 中实现引导页
|
1天前
|
前端开发 JavaScript
vue3中覆盖组件样式的方法
vue3中覆盖组件样式的方法
|
2天前
|
JavaScript 编译器 API
vue2和vue3区别
vue2和vue3区别
11 4
|
3天前
|
JavaScript
解决vue3中不支持.sync语法糖
解决vue3中不支持.sync语法糖
9 3
|
3天前
|
JavaScript 前端开发 Unix
vue3毫秒级时间戳转换
该内容介绍了一个关于时间戳转换的工具包,包括将时间转换为时间戳和时间戳转换为时间的两个JavaScript函数。`Jh_convertTimeStamp`函数将日期字符串转换为时间戳,而`Jh_timeStampToTime`函数则将时间戳转换回指定格式的日期字符串。此外,还提到了一个在线时间戳转换工具的链接和一个名为Tools-Web的开源工具站,可用于搭建个人综合工具站。
|
6天前
|
缓存 JavaScript 前端开发
Vue 3的响应式系统
【5月更文挑战第31天】Vue 3的响应式系统
9 1
|
7天前
|
JavaScript 前端开发 API
vue2 /vue3【nextTick】的使用方法及实现原理,一文全搞懂!
vue2 /vue3【nextTick】的使用方法及实现原理,一文全搞懂!
|
7天前
|
JavaScript 开发者
[vue2/vue3] -- 深入剖析v-model的原理、父子组件双向绑定的多种写法
[vue2/vue3] -- 深入剖析v-model的原理、父子组件双向绑定的多种写法
[vue2/vue3] -- 深入剖析v-model的原理、父子组件双向绑定的多种写法
|
7天前
|
JavaScript API
vue3父子组件相互调用方法详解
vue3父子组件相互调用方法详解