| | |
| | | </div> |
| | | </template> |
| | | <el-table :data="form.products" border style="width: 100%"> |
| | | <el-table-column prop="productName" label="产品名称" width="200"> |
| | | <el-table-column prop="product" label="产品名称" width="200"> |
| | | <template #default="scope"> |
| | | <el-input v-model="scope.row.productName" placeholder="请输入产品名称" /> |
| | | <el-input v-model="scope.row.product" placeholder="请输入产品名称" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="specification" label="规格型号" width="150"> |
| | |
| | | <div style="margin-top: 20px;"> |
| | | <h4>产品明细</h4> |
| | | <el-table :data="currentQuotation.products" border style="width: 100%"> |
| | | <el-table-column prop="productName" label="产品名称" /> |
| | | <el-table-column prop="product" label="产品名称" /> |
| | | <el-table-column prop="specification" label="规格型号" /> |
| | | <el-table-column prop="quantity" label="数量" /> |
| | | <el-table-column prop="unit" label="单位" /> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, reactive, computed } from 'vue' |
| | | import { ref, reactive, computed,onMounted } from 'vue' |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import { Search } from '@element-plus/icons-vue' |
| | | import Pagination from '@/components/PIMTable/Pagination.vue' |
| | | // import Pagination from '@/components/PIMTable/Pagination.vue' |
| | | import {getQuotationList,addQuotation,updateQuotation,deleteQuotation} from '@/api/salesManagement/salesQuotation.js' |
| | | |
| | | // 响应式数据 |
| | | const loading = ref(false) |
| | |
| | | status: '' |
| | | }) |
| | | |
| | | const quotationList = ref([ |
| | | { |
| | | id: 1, |
| | | quotationNo: 'QT202312001', |
| | | customer: '上海科技有限公司', |
| | | salesperson: '陈志强', |
| | | quotationDate: '2023-12-01', |
| | | validDate: '2023-12-31', |
| | | totalAmount: 50000.00, |
| | | paymentMethod: '全款到付', |
| | | deliveryPeriod: '30天', |
| | | status: '已发送', |
| | | remark: '重要客户报价', |
| | | products: [ |
| | | { productName: '工业传感器', specification: 'SEN-001', quantity: 10, unit: '个', unitPrice: 5000, amount: 50000 } |
| | | ] |
| | | }, |
| | | { |
| | | id: 2, |
| | | quotationNo: 'QT202312002', |
| | | customer: '深圳电子有限公司', |
| | | salesperson: '刘雅婷', |
| | | quotationDate: '2023-12-02', |
| | | validDate: '2023-12-31', |
| | | totalAmount: 35000.00, |
| | | paymentMethod: '分期付款', |
| | | deliveryPeriod: '20天', |
| | | status: '客户确认', |
| | | remark: '常规报价', |
| | | products: [ |
| | | { productName: '控制模块', specification: 'CTL-002', quantity: 5, unit: '个', unitPrice: 7000, amount: 35000 } |
| | | ] |
| | | }, |
| | | { |
| | | id: 3, |
| | | quotationNo: 'QT202312003', |
| | | customer: '北京贸易公司', |
| | | salesperson: '王建国', |
| | | quotationDate: '2023-12-03', |
| | | validDate: '2023-12-31', |
| | | totalAmount: 28000.00, |
| | | paymentMethod: '月结', |
| | | deliveryPeriod: '15天', |
| | | status: '草稿', |
| | | remark: '新客户报价', |
| | | products: [ |
| | | { productName: '数据采集器', specification: 'DAQ-003', quantity: 4, unit: '个', unitPrice: 7000, amount: 28000 } |
| | | ] |
| | | } |
| | | ]) |
| | | const quotationList = ref([]) |
| | | |
| | | const pagination = reactive({ |
| | | total: 3, |
| | |
| | | const viewDialogVisible = ref(false) |
| | | const dialogTitle = ref('新增报价') |
| | | const form = reactive({ |
| | | quotationNo: '', |
| | | customer: '', |
| | | salesperson: '', |
| | | quotationDate: '', |
| | |
| | | return statusMap[status] || 'info' |
| | | } |
| | | |
| | | const handleSearch = () => { |
| | | // 搜索逻辑已在computed中处理 |
| | | } |
| | | |
| | | const resetSearch = () => { |
| | | searchForm.quotationNo = '' |
| | | searchForm.customer = '' |
| | |
| | | }).then(() => { |
| | | const index = quotationList.value.findIndex(item => item.id === row.id) |
| | | if (index > -1) { |
| | | quotationList.value.splice(index, 1) |
| | | pagination.total-- |
| | | deleteQuotation(row.id).then(res=>{ |
| | | // console.log(res) |
| | | if(res.code===200){ |
| | | ElMessage.success('删除成功') |
| | | handleSearch() |
| | | } |
| | | }) |
| | | // quotationList.value.splice(index, 1) |
| | | // pagination.total-- |
| | | // ElMessage.success('删除成功') |
| | | } |
| | | }) |
| | | } |
| | |
| | | // 编辑 |
| | | const index = quotationList.value.findIndex(item => item.id === editId.value) |
| | | if (index > -1) { |
| | | quotationList.value[index] = { ...form, id: editId.value } |
| | | updateQuotation(form).then(res=>{ |
| | | // console.log(res) |
| | | if(res.code===200){ |
| | | ElMessage.success('编辑成功') |
| | | dialogVisible.value = false |
| | | handleSearch() |
| | | } |
| | | }) |
| | | // quotationList.value[index] = { ...form, id: editId.value } |
| | | // ElMessage.success('编辑成功') |
| | | } |
| | | } else { |
| | | // 新增 |
| | | const newId = Math.max(...quotationList.value.map(item => item.id)) + 1 |
| | | const quotationNo = `QT${new Date().getFullYear()}${String(new Date().getMonth() + 1).padStart(2, '0')}${String(new Date().getDate()).padStart(2, '0')}${String(newId).padStart(3, '0')}` |
| | | quotationList.value.push({ |
| | | ...form, |
| | | id: newId, |
| | | quotationNo: quotationNo |
| | | }) |
| | | pagination.total++ |
| | | // const newId = Math.max(...quotationList.value.map(item => item.id)) + 1 |
| | | form.quotationNo = `QT${new Date().getFullYear()}${String(new Date().getMonth() + 1).padStart(2, '0')}${String(new Date().getDate()).padStart(2, '0')}` |
| | | |
| | | addQuotation(form).then(res=>{ |
| | | // console.log(res) |
| | | if(res.code===200){ |
| | | ElMessage.success('新增成功') |
| | | } |
| | | dialogVisible.value = false |
| | | handleSearch() |
| | | } |
| | | }) |
| | | |
| | | // quotationList.value.push({ |
| | | // ...form, |
| | | // // id: newId, |
| | | // quotationNo: quotationNo |
| | | // }) |
| | | // pagination.total++ |
| | | // ElMessage.success('新增成功') |
| | | } |
| | | |
| | | } |
| | | }) |
| | | } |
| | |
| | | pagination.currentPage = val.page |
| | | pagination.pageSize = val.limit |
| | | } |
| | | const handleSearch = ()=>{ |
| | | const params = { |
| | | page:pagination, |
| | | ...searchForm |
| | | } |
| | | getQuotationList(params).then(res=>{ |
| | | // console.log(res) |
| | | if(res.code===200){ |
| | | quotationList.value = res.data.records |
| | | pagination.total = res.data.total |
| | | } |
| | | }) |
| | | } |
| | | |
| | | onMounted(()=>{ |
| | | handleSearch() |
| | | }) |
| | | </script> |
| | | |
| | | <style scoped> |