vue3使用table编写购物车案例

131 阅读1分钟

示例代码

<template>
  <div id="app">
    <p>表单数据</p>
    <table>
      <thead>
        <tr>
          <td>
            <input
              type="checkbox"
              v-model="data.selected"
              @change="selectAll"
            />
          </td>
          <td>商品</td>
          <td>单价</td>
          <td>存库</td>
          <td colspan="2">操作</td>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(value, index) in data.list">
          <td>
            <input
              type="checkbox"
              v-model="data.checkboxList"
              :value="value"
              @change="checkSelect"
            />
          </td>
          <td>{{ value.name }}</td>
          <td>{{ value.price }}</td>
          <td>{{ value.stock }}</td>
          <td>
            <button @click="sub(value)">-</button>
            {{ value.number }}
            <button @click="add(value)">+</button>
          </td>
          <td><button @click="del(index, value.id)">删除</button></td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <td>总价{{ totalPrice() }}</td>
        </tr>
      </tfoot>
    </table>
  </div>
</template>

<script setup>
import { reactive } from "vue";

const data = reactive({
  selected: false,
  checkboxList: [],
  list: [
    {
      id: 1,
      name: "铅笔",
      price: 10,
      number: 1,
      stock: 3,
    },
    {
      id: 2,
      name: "鼠标",
      price: 20,
      number: 2,
      stock: 5,
    },
    {
      id: 3,
      name: "键盘",
      price: 30,
      number: 1,
      stock: 6,
    },
  ],
});

const selectAll = () => {
  if (data.selected) {
    data.checkboxList = data.list;
  } else {
    data.checkboxList = [];
  }
};

const checkSelect = () => {
  if (data.checkboxList.length === data.list.length && data.list.length !== 0) {
    data.selected = true;
  } else {
    data.selected = false;
  }
};
const totalPrice = () => {
  console.log("dd");
  let total = 0;
  for (let i = 0; i < data.checkboxList.length; i++) {
    total += data.checkboxList[i].price * data.checkboxList[i].number;
  }
  return total;
};

const sub = (value) => {
  value.number--;
  if (value.number < 1) {
    value.number = 1;
  }
};
const add = (value) => {
  value.number++;
  if (value.number > value.stock) {
    value.number = value.stock;
  }
};
const del = (index, id) => {
  data.list.splice(index, 1);
  console.log("ss", data);
  let newArr = data.checkboxList.filter((value, index) => {
    return value.id !== id;
  });
  data.checkboxList = newArr;
  checkSelect();
};
</script>

<style scoped></style>