效果

代码
<template><div id="box"><!--全选功能--><input type="checkbox" @change="handleChange" v-model="isAllChecked" /><!--绑定事件,不选用click,使用change每次check值改变会触发双向绑定布尔值--><ul><li v-for="data in datalist"><input type="checkbox" v-model="checkgroup" :value="data" @change="handleLiChange" /><!--v-model绑定数组,且要有value值value使用数组绑定:value="data.number||data.price||data.id||data.number*data.price"-->{{ data }}<!--设置添加删除按钮--><button @click="handleDelClick(data)">del</button><!--用户体验限制不小于0 所以不能使用data.number-- -->{{ data.number}}<!--当前数量--><button @click="data.number++">add</button><!--data.number++自增1点击事件,简单逻辑可直接使用代码--></li></ul>{{ checkgroup }}<p>总金额计算:{{ getSum() }}</p><!--函数表达式,函数要有返回值--></div>
</template>
<script lang='ts'>
import { reactive, toRefs, onBeforeMount, onMounted } from "vue";
import { useRouter, useRoute } from "vue-router";
export default {name: "",setup() {let router = useRouter(),route = useRoute();const data = reactive({checkgroup: [],isAllChecked: false,datalist: [{name: "商品1",price: 10,number: 1,id: "1",},{name: "商品2",price: 20,number: 2,id: "2",},{name: "商品3",price: 30,number: 3,id: "3",},],getSum() {var sum = 0;for (var i in this.checkgroup) {sum += this.checkgroup[i].number * this.checkgroup[i].price;}return sum;},handleChange() {console.log("改变了", this.isAllChecked);if (this.isAllChecked) {this.checkgroup = this.datalist; } else {this.checkgroup = []; }},handleLiChange() {console.log("handleLiChange-判断是不是都勾选");if (this.checkgroup.length === this.datalist.length) {this.isAllChecked = true;} else {this.isAllChecked = false;}},handleDelClick(data) {data.number--;if (data.number === 0) {data.number = 1; }},});onBeforeMount(() => { });onMounted(() => { });const refData = toRefs(data);return {...refData,};},
};
</script>
<style scoped></style>