zoukankan      html  css  js  c++  java
  • Vue+Element+computed实现购物车

    本人写的小程序,功能还在完善中,欢迎扫一扫提出宝贵意见!

                  

    该购物车效果采用的是Element-ui库实现的。

    采用了computed计算属性来实现逻辑操作。

    功能分析:

    1. 全选/全不选/单选。
    2. 数量增加、数量减少。
    3. 总金额=数量*单价。
    4. 商品总价:每一项的总金额相加。
    5. 商品总数:每一项的数量相加。
    6. 删除功能。

    废话不多说,复制粘贴看效果:  

      1 <template>
      2   <div class="cart">
      3     <div class="group_btn">
      4       <el-button type="success" @click="addDialog">添加</el-button>
      5     </div>
      6     <el-table
      7       :data="tableData"
      8       border
      9       style=" 100%"
     10       @selection-change="handleSelectionChange"
     11     >
     12       <el-table-column type="selection" width="55" align="center"></el-table-column>
     13       <el-table-column type="index" label="序号" width="180" align="center"></el-table-column>
     14       <el-table-column prop="name" label="类目" width="180" align="center"></el-table-column>
     15       <el-table-column prop="price" label="价格" align="center"></el-table-column>
     16       <el-table-column label="数量" align="center">
     17         <template slot-scope="scope">
     18           <el-input-number v-model="scope.row.number" :min="1" :max="10" label="描述文字"></el-input-number>
     19         </template>
     20       </el-table-column>
     21       <el-table-column label="操作" align="center">
     22         <template slot-scope="scope">
     23           <el-button size="mini" @click="editDialog(scope.$index, scope.row)">编辑</el-button>
     24           <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
     25         </template>
     26       </el-table-column>
     27     </el-table>
     28     <div class="total_warpper">
     29       <h3>共计:{{totalPrice}}</h3>
     30       <h3>总数:{{totalNumber}}</h3>
     31     </div>
     32     <!-- 添加弹窗的内容 -->
     33     <el-dialog title="添加信息" :visible.sync="addIsDialog" class="addDialog">
     34       <el-form :model="formData">
     35         <el-form-item label="类目" :label-width="formLabelWidth">
     36           <el-input v-model="formData.name" autocomplete="off"></el-input>
     37         </el-form-item>
     38         <el-form-item label="价格" :label-width="formLabelWidth">
     39           <el-input v-model="formData.price" autocomplete="off"></el-input>
     40         </el-form-item>
     41         <el-form-item label="数量" :label-width="formLabelWidth">
     42           <el-input v-model="formData.number" autocomplete="off"></el-input>
     43         </el-form-item>
     44       </el-form>
     45       <div slot="footer" class="dialog-footer">
     46         <el-button @click="addIsDialog = false">取 消</el-button>
     47         <el-button type="primary" @click="addSureBtn">确 定</el-button>
     48       </div>
     49     </el-dialog>
     50     <!-- 添加编辑的内容 -->
     51     <el-dialog title="添加信息" :visible.sync="editIsDialog" class="addDialog">
     52       <el-form :model="editData">
     53         <el-form-item label="类目" :label-width="formLabelWidth">
     54           <el-input v-model="editData.name" autocomplete="off"></el-input>
     55         </el-form-item>
     56         <el-form-item label="价格" :label-width="formLabelWidth">
     57           <el-input v-model="editData.price" autocomplete="off"></el-input>
     58         </el-form-item>
     59         <el-form-item label="数量" :label-width="formLabelWidth">
     60           <el-input v-model="editData.number" autocomplete="off"></el-input>
     61         </el-form-item>
     62       </el-form>
     63       <div slot="footer" class="dialog-footer">
     64         <el-button @click="editIsDialog = false">取 消</el-button>
     65         <el-button type="primary" @click="editSureBtn">确 定</el-button>
     66       </div>
     67     </el-dialog>
     68   </div>
     69 </template>
     70 
     71 <script>
     72 export default {
     73   data() {
     74     return {
     75       editIsDialog: false, //编辑弹窗
     76       addIsDialog: false, //添加弹窗
     77       multipleSelection: [], //存放已选择的数据
     78       formData: {
     79         name: "",
     80         price: "",
     81         number: ""
     82       },
     83       editData: {},
     84       formLabelWidth: "200",
     85       //表格中的数据
     86       tableData: [
     87         {
     88           name: "苹果",
     89           price: 10,
     90           number: 1
     91         },
     92         {
     93           name: "香蕉",
     94           price: 20,
     95           number: 1
     96         },
     97         {
     98           name: "草莓",
     99           price: 5,
    100           number: 1
    101         }
    102       ]
    103     };
    104   },
    105   methods: {
    106     // 点击发生的变化
    107     handleSelectionChange(val) {
    108       this.multipleSelection = val; //给定义的数组赋值
    109     },
    110     handleDelete(index, row) {
    111       this.tableData.splice(index, 1); //删除表格的数据
    112     },
    113     // 点击弹出添加弹窗
    114     addDialog() {
    115       this.addIsDialog = true;
    116     },
    117     // 点击添加弹窗的确定按钮
    118     addSureBtn() {
    119       this.addIsDialog = false;
    120       this.tableData.push(this.formData);
    121       // 初始化添加表单
    122       this.formData = {
    123         name: "",
    124         age: "",
    125         sex: ""
    126       };
    127     },
    128     // 点击弹出添加弹窗
    129     editDialog(index, row) {
    130       this.editIsDialog = true;
    131       this.editData = row;
    132     },
    133     editSureBtn(row, index) {
    134       this.editIsDialog = false;
    135     }
    136   },
    137   // 通过computed计算属性及时改变
    138   computed: {
    139     // 总价
    140     totalPrice() {
    141       var price_total = 0;
    142       for (var i = 0; i < this.multipleSelection.length; i++) {
    143         price_total +=
    144           this.multipleSelection[i].price * this.multipleSelection[i].number;
    145       }
    146       return price_total;
    147     },
    148     // 总数
    149     totalNumber() {
    150       var number_total = 0;
    151       for (var i = 0; i < this.multipleSelection.length; i++) {
    152         number_total += this.multipleSelection[i].number;
    153       }
    154       return number_total;
    155     }
    156   },
    157   components: {}
    158 };
    159 </script>
    160 
    161 <style scoped>
    162 .cart {
    163   margin: 50px auto;
    164   width: 1000px;
    165 }
    166 .group_btn {
    167   margin-bottom: 30px;
    168 }
    169 .addDialog .el-input {
    170   width: 90%;
    171 }
    172 .total_warpper {
    173   text-align: right;
    174   margin-top: 30px;
    175 }
    176 h3 {
    177   margin-top: 10px;
    178 }
    179 </style> 

    若有不明白请加群号:复制 695182980 ,也可扫码,希望能帮助到大家。

  • 相关阅读:
    [转]天龙八部的BillingServer
    [转]天龙八部服务器端Lua脚本系统
    [转]天龙八部服务器端-共享内存的设计
    TCPSocket v1.0 for cocos2d-x下载
    httpclient模拟浏览器getpost
    常用的32中算法
    我在城市快节奏中的慢生活
    分段与分页机制小结
    lua中dofile、loadfile、require区别
    两个链表相交以及第一个公共节点的问题
  • 原文地址:https://www.cnblogs.com/CinderellaStory/p/10546263.html
Copyright © 2011-2022 走看看