vue使用Element UI案例(商品列表)

Goods.vue

<template>
  <div id="goods">
    <el-button type="text" @click="dialogVisible = true">添加商品</el-button>
    <el-dialog
      title="添加商品"
      :visible.sync="dialogVisible"
      width="30%"
      :before-close="handleClose">
      <div class="demo-input-suffix">
        商品名称:
        <el-input
          placeholder="请输入内容"
          v-model="goods_name">
        </el-input>
      </div>
      <div class="demo-input-suffix">
        商品数量:
        <el-input
          placeholder="请输入内容"
          v-model="goods_num">
        </el-input>
      </div>
      <div class="demo-input-suffix">
        商品价格:
        <el-input
          placeholder="请输入内容"
          v-model="goods_price">
        </el-input>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="cancel()">取 消</el-button>
        <el-button type="primary" @click="save()">确 定</el-button>
      </span>
    </el-dialog>
    <el-table
      :data="goods_list"
      border

      style="width: 100%">
      <el-table-column
        type="index"
        >
      </el-table-column>
      <el-table-column
        prop="name"
        label="商品名称"
        width="180">
      </el-table-column>

      <el-table-column
        prop="price"
        label="商品数量"
        width="180">
        <template slot-scope="scope">
          <el-input-number v-model="scope.row.num" @change="issub(scope.$index)" size="mini" :min="0"></el-input-number>
        </template>
      </el-table-column>

      <el-table-column
        prop="price"
        label="价格"
        width="180">
      </el-table-column>
      <el-table-column
        label="操作"
        width="100">
        <template slot-scope="scope">
          <el-button @click="update(scope)" type="text" size="small">编辑</el-button>
          <el-button type="text" size="small" @click="del(scope.$index)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <el-input v-model="total" style="width: 600px">
      <template slot="prepend">合价:</template>
      <template slot="append"></template>
    </el-input>

  </div>
</template>
<script>
  export default {
    name: "Goods",
    filters: {
      format(money) {
        return "" + money.toFixed(2);
      }
    },
    data() {
      return {
        dialogVisible: false,
        active: "zero_num",
        goods_name: "",
        goods_num: "",
        goods_price: "",
        goods_index: -1, // 当前本次操作的商品信息[-1表示新增,大于等于0表示编辑]
        goods_list: [
          {"name": "python入门", "num": 27, "price": 150},
          {"name": "python进阶", "num": 21, "price": 100},
          {"name": "python高级", "num": 17, "price": 75},
          {"name": "python研究", "num": 37, "price": 60},
          {"name": "python放弃", "num": 57, "price": 110},
        ]
      }
    },
    methods: {
      handleClose(done) {
        this.$confirm('确认关闭?')
          .then(_ => {
            done();
          })
          .catch(_ => {
          });
      },
      issub(index) {
        if (this.goods_list[index].num === 0) {
          this.del(index)
        }
      },
      save() {
        // 保存数据[添加数据]
        if (this.goods_index == -1) {
          this.goods_list.push({
            "name": this.goods_name,
            "num": parseInt(this.goods_num),
            "price": parseFloat(this.goods_price),
          });
        } else {
          this.goods_list[this.goods_index].name = this.goods_name;
          this.goods_list[this.goods_index].num = parseInt(this.goods_num);
          this.goods_list[this.goods_index].price = parseFloat(this.goods_price);
        }
        this.cancel();
      },
      cancel() {
        this.dialogVisible = false;
        this.goods_index = -1;
        this.goods_name = "";
        this.goods_num = "";
        this.goods_price = "";
      },
      del(index) {
        // 删除数据
        this.goods_list.splice(index, 1);
      },
      update(index) {
        // 显示当前编辑的商品信息
        this.dialogVisible = true;
        console.log(index);
        this.goods_index = index.$index;
        this.goods_name = index.row.name;
        this.goods_num = index.row.num;
        this.goods_price = index.row.price;
        // 当用户点击保存时,修改对应数据
      },
    },
    computed: {
      total(){
        let ret = 0;
        this.goods_list.forEach(function (value, index) {
          // console.log(value,index);
          let sum_price = parseFloat(value.price) * parseFloat(value.num);
          ret = ret + sum_price
        });
        return ret
      }
    }
  }
</script>

<style scoped>
  #goods table {
    width: 600px;
    border: 1px solid #000;
    border-collapse: collapse;
  }

  #goods td, #goods th {
    border: 1px solid #000;
  }

  #goods .box {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
    background-color: #eee;
    width: 280px;
    height: 160px;
    padding: 40px 80px;
  }
</style>

 

posted @ 2020-06-23 22:51  耗油炒白菜  阅读(2649)  评论(0编辑  收藏  举报