jiaxing.zhou

feat(delivery):优化出库管理功能

- 更新组件类型定义,添加 ElCard、ElIcon 和 ElText 组件
-重构出库列表页面,统一使用 delivery 变量名替换 order 变量名- 修正删除按钮传递的参数错误问题
- 调整出库详情展示内容,优化信息展示结构
- 修改出库明细表格列名,更准确反映业务含义
- 扩展搜索参数,增加订单编号、开始日期和结束日期字段
- 优化新增出库逻辑,调整字段映射关系
-修复关闭详情弹窗后数据清理问题
- 统一刷新列表方法调用,确保数据同步更新
......@@ -8,12 +8,14 @@ export {}
declare module 'vue' {
export interface GlobalComponents {
ElButton: typeof import('element-plus/es')['ElButton']
ElCard: typeof import('element-plus/es')['ElCard']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElOption: typeof import('element-plus/es')['ElOption']
......@@ -24,6 +26,7 @@ declare module 'vue' {
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTag: typeof import('element-plus/es')['ElTag']
ElText: typeof import('element-plus/es')['ElText']
Header: typeof import('./src/components/layout/Header.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
......
......@@ -98,13 +98,13 @@
</tr>
</thead>
<tbody>
<tr v-for="order in orderList" :key="order.deliveryId">
<td>{{ order.deliveryId }}</td>
<td>{{ order.deliveryNo }}</td>
<td>{{ order.dealerCode }}</td>
<td>{{ order.dealerName }}</td>
<td>{{ formatDate(order.deliveryDate) }}</td>
<td>{{ order.orderNo }}</td>
<tr v-for="delivery in deliveryList" :key="delivery.deliveryId">
<td>{{ delivery.deliveryId }}</td>
<td>{{ delivery.deliveryNo }}</td>
<td>{{ delivery.dealerCode }}</td>
<td>{{ delivery.dealerName }}</td>
<td>{{ formatDate(delivery.deliveryDate) }}</td>
<td>{{ delivery.orderNo }}</td>
<td>
<span :class="getDeliveryStatusClass(delivery.deliveryStatus)">
{{ getDeliveryStatusText(delivery.deliveryStatus) }}
......@@ -113,7 +113,7 @@
<td>{{ formatTime(delivery.createTime || '') }}</td>
<td class="action-col">
<button @click="handleView(delivery)" class="view-btn">👁️ 查看</button>
<button @click="handleDelete(order)" class="delete-btn">🗑️ 删除</button>
<button @click="handleDelete(delivery)" class="delete-btn">🗑️ 删除</button>
</td>
</tr>
</tbody>
......@@ -173,44 +173,48 @@
<button @click="closeDetailDialog" class="close-btn">×</button>
</div>
<div class="dialog-body">
<div v-if="orderDetail" class="detail-content">
<div v-if="deliveryDetail" class="detail-content">
<div class="detail-section">
<h4>订单基本信息</h4>
<h4>出库基本信息</h4>
<div class="detail-grid">
<div class="detail-item">
<label>订单编号:</label>
<span>{{ orderDetail.orderNo }}</span>
<label>出库单号:</label>
<span>{{ deliveryDetail.deliveryNo }}</span>
</div>
<div class="detail-item">
<label>关联订单编号:</label>
<span>{{ deliveryDetail.orderNo }}</span>
</div>
<div class="detail-item">
<label>经销商编码:</label>
<span>{{ orderDetail.dealerCode }}</span>
<span>{{ deliveryDetail.dealerCode }}</span>
</div>
<div class="detail-item">
<label>经销商名称:</label>
<span>{{ orderDetail.dealerName }}</span>
<span>{{ deliveryDetail.dealerName }}</span>
</div>
<div class="detail-item">
<label>订单日期:</label>
<span>{{ formatDate(orderDetail.orderDate) }}</span>
<label>出库日期:</label>
<span>{{ formatDate(deliveryDetail.deliveryDate) }}</span>
</div>
<div class="detail-item">
<label>订单总金额:</label>
<span>{{ formatCurrency(orderDetail.totalAmount) }}</span>
<label>出库总金额:</label>
<span>{{ formatCurrency(deliveryDetail.totalAmount) }}</span>
</div>
<div class="detail-item">
<label>出库状态:</label>
<span :class="getDeliveryStatusClass(orderDetail.deliveryStatus)">
{{ getDeliveryStatusText(orderDetail.deliveryStatus) }}
<span :class="getDeliveryStatusClass(deliveryDetail.deliveryStatus)">
{{ getDeliveryStatusText(deliveryDetail.deliveryStatus) }}
</span>
</div>
<div class="detail-item">
<label>出库时间:</label>
<span>{{ formatTime(orderDetail.uploadTime || '') }}</span>
<label>创建时间:</label>
<span>{{ formatTime(deliveryDetail.createTime || '') }}</span>
</div>
</div>
</div>
<div class="detail-section" v-if="orderDetail.orderItems && orderDetail.orderItems.length > 0">
<div class="detail-section" v-if="deliveryDetail.deliveryItems && deliveryDetail.deliveryItems.length > 0">
<h4>出库明细</h4>
<table class="detail-table">
<thead>
......@@ -218,17 +222,17 @@
<th>产品编码</th>
<th>产品名称</th>
<th>产品型号</th>
<th>数量</th>
<th>单价</th>
<th>总价</th>
<th>出库数量</th>
<th>出库单价</th>
<th>出库总价</th>
</tr>
</thead>
<tbody>
<tr v-for="item in orderDetail.orderItems" :key="item.itemId">
<tr v-for="item in deliveryDetail.deliveryItems" :key="item.itemId">
<td>{{ item.productCode }}</td>
<td>{{ item.productName }}</td>
<td>{{ item.productModel }}</td>
<td>{{ item.quantity }}</td>
<td>{{ item.productQty }}</td>
<td>{{ formatCurrency(item.unitPrice) }}</td>
<td>{{ formatCurrency(item.totalPrice) }}</td>
</tr>
......@@ -435,6 +439,7 @@ const addFormData = reactive({
// 搜索参数
const searchParams = reactive({
orderNo: '',
deliveryNo: '',
dealerCode: '',
dealerName: '',
......@@ -443,6 +448,8 @@ const searchParams = reactive({
dataSource: '',
deliveryStartDate: '',
deliveryEndDate: '',
startDate: '',
endDate: '',
pageNum: 1,
pageSize: 10
})
......@@ -555,9 +562,9 @@ const handleReset = () => {
fetchDeliveries()
}
const handleView = async (order: DeliveryInfo) => {
const handleView = async (delivery: DeliveryInfo) => {
try {
const response = await deliveryApi.getDeliveryDetail(order.deliveryId) as any
const response = await deliveryApi.getDeliveryDetail(delivery.deliveryId) as any
console.log('出库查询详情API响应:', response)
// 由于request.ts的响应拦截器已经处理了code=200的情况,直接返回data
......@@ -573,12 +580,12 @@ const handleView = async (order: DeliveryInfo) => {
}
}
const handleDelete = async (order: DeliveryInfo) => {
if (confirm(`确定要删除出库单"${order.deliveryNo}"吗?`)) {
const handleDelete = async (delivery: DeliveryInfo) => {
if (confirm(`确定要删除出库单"${delivery.deliveryNo}"吗?`)) {
try {
await deliveryApi.deleteDelivery(order.deliveryId)
await deliveryApi.deleteDelivery(delivery.deliveryId)
showMessage('删除出库单成功', 'success')
fetchOrders() // 刷新列表
fetchDeliveries() // 刷新列表
} catch (error) {
console.error('删除出库单失败:', error)
showMessage('删除出库单失败, 请重试', 'error')
......@@ -655,16 +662,16 @@ const handleSubmitAdd = async () => {
deliveryItems: addFormData.deliveryItems.map(item => ({
productCode: item.productCode,
productName: item.productName,
deliveryQty: item.deliveryQty,
deliveryPrice: item.deliveryPrice,
deliveryAmount: item.deliveryAmount
productQty: item.deliveryQty,
unitPrice: item.deliveryPrice,
totalPrice: item.deliveryAmount
}))
}
await deliveryApi.addDelivery(deliveryData)
showMessage('新增出库成功', 'success')
closeAddDialog()
fetchOrders() // 刷新列表
fetchDeliveries() // 刷新列表
} catch (error) {
console.error('新增出库失败:', error)
showMessage('新增出库失败, 请重试', 'error')
......@@ -703,7 +710,7 @@ const handleTableViewToggle = () => {
const closeDetailDialog = () => {
showDetailDialog.value = false
orderDetail.value = null
deliveryDetail.value = null
}
// 生命周期
......