vue实现报价
Vue 实现报价功能
数据绑定与表单输入
使用 Vue 的 v-model 实现表单数据的双向绑定,确保用户输入能实时更新报价数据。
<template>
<div>
<input v-model="productName" placeholder="产品名称">
<input v-model="quantity" type="number" placeholder="数量">
<input v-model="unitPrice" type="number" placeholder="单价">
</div>
</template>
<script>
export default {
data() {
return {
productName: '',
quantity: 0,
unitPrice: 0
}
}
}
</script>
计算总价
通过 Vue 的计算属性 computed 动态计算总价,确保数据变化时自动更新。
computed: {
totalPrice() {
return this.quantity * this.unitPrice
}
}
动态渲染报价单
使用 v-for 渲染多行报价条目,并展示计算后的总价。
<template>
<div>
<div v-for="(item, index) in items" :key="index">
<input v-model="item.productName" placeholder="产品名称">
<input v-model="item.quantity" type="number" placeholder="数量">
<input v-model="item.unitPrice" type="number" placeholder="单价">
<span>总价: {{ item.quantity * item.unitPrice }}</span>
</div>
<button @click="addItem">新增条目</button>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ productName: '', quantity: 0, unitPrice: 0 }
]
}
},
methods: {
addItem() {
this.items.push({ productName: '', quantity: 0, unitPrice: 0 })
}
}
}
</script>
提交报价数据
通过方法 methods 处理表单提交,将报价数据发送到后端或进行本地处理。
methods: {
submitQuote() {
const quoteData = {
items: this.items,
total: this.items.reduce((sum, item) => sum + (item.quantity * item.unitPrice), 0)
}
console.log(quoteData)
// 这里可以添加发送到后端的逻辑
}
}
样式优化
使用 CSS 或框架(如 Element UI、Vuetify)美化报价单界面,提升用户体验。
<template>
<el-table :data="items" style="width: 100%">
<el-table-column prop="productName" label="产品名称"></el-table-column>
<el-table-column prop="quantity" label="数量"></el-table-column>
<el-table-column prop="unitPrice" label="单价"></el-table-column>
<el-table-column label="总价">
<template #default="scope">
{{ scope.row.quantity * scope.row.unitPrice }}
</template>
</el-table-column>
</el-table>
</template>
数据验证
添加表单验证逻辑,确保用户输入的数据符合要求(如非空、数值范围等)。
methods: {
validateInput() {
return this.items.every(item =>
item.productName && item.quantity > 0 && item.unitPrice > 0
)
},
submitQuote() {
if (!this.validateInput()) {
alert('请填写完整且有效的报价信息')
return
}
// 提交逻辑
}
}






