使用vue来实现品牌管理案例的增删功能
<template>
<div id="app">
<div class="container">
<div class="form-group">
<div class="input-group">
<h4>品牌管理</h4>
</div>
</div>
<table class="table table-bordered table-hover mt-2">
<thead>
<tr>
<th>编号</th>
<th>资产名称</th>
<th>价格</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in list" :key="item.id">
<td>{{ index + 1 }}</td>
<td>{{ item.name }}</td>
<td :class="{ red: item.price > 100 }">
{{ item.price }}
</td>
<td>{{ item.time | getTime }}</td>
<td><a href="#" @click="del(item.id)">删除</a></td>
</tr>
<tr>
<td>统计:</td>
<td colspan="2">总价格为:{{ totalPrice }}</td>
<td colspan="2">平均价:{{ avgPrice }}</td>
</tr>
</tbody>
<tfoot>
<tr v-show="!list.length">
<td colspan="5" style="text-align: center">暂无数据</td>
</tr>
</tfoot>
</table>
<form class="form-inline">
<div class="form-group">
<div class="input-group">
<input
type="text"
class="form-control"
placeholder="资产名称"
v-model="obj.name"
/>
</div>
</div>
<div class="form-group">
<div class="input-group">
<input
type="text"
class="form-control"
placeholder="价格"
v-model="obj.price"
/>
</div>
</div>
<button class="btn btn-primary" @click.prevent="btnAdd">
添加资产
</button>
</form>
</div>
</div>
</template>
<script>
import moment from "moment";
export default {
filters: {
getTime(formatTime) {
return moment(formatTime).format("yyyy-MM-DD hh:mm:ss");
},
},
data() {
return {
name: "",
price: 0,
list: [
{ id: 100, name: "外套", price: 199, time: new Date("2010-08-12") },
{ id: 101, name: "裤子", price: 34, time: new Date("2013-09-01") },
{ id: 102, name: "鞋", price: 25.4, time: new Date("2018-11-22") },
{ id: 103, name: "头发", price: 19900, time: new Date("2020-12-12") },
],
obj: {
name: "",
price: "",
},
};
},
methods: {
btnAdd() {
this.list.push({
id: this.list.length ? this.list[this.list.length - 1].id + 1 : 1,
name: this.obj.name,
price: this.obj.price,
time: new Date(),
});
if (!this.obj.name || !this.obj.price) {
alert("信息没填");
return;
}
this.obj = "";
},
del(id) {
let index = this.list.findIndex((item) => {
return item.id == id;
});
return this.list.splice(index, 1);
},
},
computed: {
totalPrice() {
return this.list.reduce((sum, val) => {
return (sum += +val.price);
}, 0);
},
avgPrice() {
return this.totalPrice / this.list.length;
},
},
};
</script>
<style scoped >
.red {
color: red;
}
</style>