feat(delivery):优化出库管理功能
- 更新组件类型定义,添加 ElCard、ElIcon 和 ElText 组件 -重构出库列表页面,统一使用 delivery 变量名替换 order 变量名- 修正删除按钮传递的参数错误问题 - 调整出库详情展示内容,优化信息展示结构 - 修改出库明细表格列名,更准确反映业务含义 - 扩展搜索参数,增加订单编号、开始日期和结束日期字段 - 优化新增出库逻辑,调整字段映射关系 -修复关闭详情弹窗后数据清理问题 - 统一刷新列表方法调用,确保数据同步更新
Showing
2 changed files
with
53 additions
and
43 deletions
| ... | @@ -8,12 +8,14 @@ export {} | ... | @@ -8,12 +8,14 @@ export {} |
| 8 | declare module 'vue' { | 8 | declare module 'vue' { |
| 9 | export interface GlobalComponents { | 9 | export interface GlobalComponents { |
| 10 | ElButton: typeof import('element-plus/es')['ElButton'] | 10 | ElButton: typeof import('element-plus/es')['ElButton'] |
| 11 | + ElCard: typeof import('element-plus/es')['ElCard'] | ||
| 11 | ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] | 12 | ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] |
| 12 | ElDescriptions: typeof import('element-plus/es')['ElDescriptions'] | 13 | ElDescriptions: typeof import('element-plus/es')['ElDescriptions'] |
| 13 | ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem'] | 14 | ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem'] |
| 14 | ElDialog: typeof import('element-plus/es')['ElDialog'] | 15 | ElDialog: typeof import('element-plus/es')['ElDialog'] |
| 15 | ElForm: typeof import('element-plus/es')['ElForm'] | 16 | ElForm: typeof import('element-plus/es')['ElForm'] |
| 16 | ElFormItem: typeof import('element-plus/es')['ElFormItem'] | 17 | ElFormItem: typeof import('element-plus/es')['ElFormItem'] |
| 18 | + ElIcon: typeof import('element-plus/es')['ElIcon'] | ||
| 17 | ElInput: typeof import('element-plus/es')['ElInput'] | 19 | ElInput: typeof import('element-plus/es')['ElInput'] |
| 18 | ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] | 20 | ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] |
| 19 | ElOption: typeof import('element-plus/es')['ElOption'] | 21 | ElOption: typeof import('element-plus/es')['ElOption'] |
| ... | @@ -24,6 +26,7 @@ declare module 'vue' { | ... | @@ -24,6 +26,7 @@ declare module 'vue' { |
| 24 | ElTable: typeof import('element-plus/es')['ElTable'] | 26 | ElTable: typeof import('element-plus/es')['ElTable'] |
| 25 | ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] | 27 | ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] |
| 26 | ElTag: typeof import('element-plus/es')['ElTag'] | 28 | ElTag: typeof import('element-plus/es')['ElTag'] |
| 29 | + ElText: typeof import('element-plus/es')['ElText'] | ||
| 27 | Header: typeof import('./src/components/layout/Header.vue')['default'] | 30 | Header: typeof import('./src/components/layout/Header.vue')['default'] |
| 28 | RouterLink: typeof import('vue-router')['RouterLink'] | 31 | RouterLink: typeof import('vue-router')['RouterLink'] |
| 29 | RouterView: typeof import('vue-router')['RouterView'] | 32 | RouterView: typeof import('vue-router')['RouterView'] | ... | ... |
| ... | @@ -98,13 +98,13 @@ | ... | @@ -98,13 +98,13 @@ |
| 98 | </tr> | 98 | </tr> |
| 99 | </thead> | 99 | </thead> |
| 100 | <tbody> | 100 | <tbody> |
| 101 | - <tr v-for="order in orderList" :key="order.deliveryId"> | 101 | + <tr v-for="delivery in deliveryList" :key="delivery.deliveryId"> |
| 102 | - <td>{{ order.deliveryId }}</td> | 102 | + <td>{{ delivery.deliveryId }}</td> |
| 103 | - <td>{{ order.deliveryNo }}</td> | 103 | + <td>{{ delivery.deliveryNo }}</td> |
| 104 | - <td>{{ order.dealerCode }}</td> | 104 | + <td>{{ delivery.dealerCode }}</td> |
| 105 | - <td>{{ order.dealerName }}</td> | 105 | + <td>{{ delivery.dealerName }}</td> |
| 106 | - <td>{{ formatDate(order.deliveryDate) }}</td> | 106 | + <td>{{ formatDate(delivery.deliveryDate) }}</td> |
| 107 | - <td>{{ order.orderNo }}</td> | 107 | + <td>{{ delivery.orderNo }}</td> |
| 108 | <td> | 108 | <td> |
| 109 | <span :class="getDeliveryStatusClass(delivery.deliveryStatus)"> | 109 | <span :class="getDeliveryStatusClass(delivery.deliveryStatus)"> |
| 110 | {{ getDeliveryStatusText(delivery.deliveryStatus) }} | 110 | {{ getDeliveryStatusText(delivery.deliveryStatus) }} |
| ... | @@ -113,7 +113,7 @@ | ... | @@ -113,7 +113,7 @@ |
| 113 | <td>{{ formatTime(delivery.createTime || '') }}</td> | 113 | <td>{{ formatTime(delivery.createTime || '') }}</td> |
| 114 | <td class="action-col"> | 114 | <td class="action-col"> |
| 115 | <button @click="handleView(delivery)" class="view-btn">👁️ 查看</button> | 115 | <button @click="handleView(delivery)" class="view-btn">👁️ 查看</button> |
| 116 | - <button @click="handleDelete(order)" class="delete-btn">🗑️ 删除</button> | 116 | + <button @click="handleDelete(delivery)" class="delete-btn">🗑️ 删除</button> |
| 117 | </td> | 117 | </td> |
| 118 | </tr> | 118 | </tr> |
| 119 | </tbody> | 119 | </tbody> |
| ... | @@ -173,44 +173,48 @@ | ... | @@ -173,44 +173,48 @@ |
| 173 | <button @click="closeDetailDialog" class="close-btn">×</button> | 173 | <button @click="closeDetailDialog" class="close-btn">×</button> |
| 174 | </div> | 174 | </div> |
| 175 | <div class="dialog-body"> | 175 | <div class="dialog-body"> |
| 176 | - <div v-if="orderDetail" class="detail-content"> | 176 | + <div v-if="deliveryDetail" class="detail-content"> |
| 177 | <div class="detail-section"> | 177 | <div class="detail-section"> |
| 178 | - <h4>订单基本信息</h4> | 178 | + <h4>出库基本信息</h4> |
| 179 | <div class="detail-grid"> | 179 | <div class="detail-grid"> |
| 180 | <div class="detail-item"> | 180 | <div class="detail-item"> |
| 181 | - <label>订单编号:</label> | 181 | + <label>出库单号:</label> |
| 182 | - <span>{{ orderDetail.orderNo }}</span> | 182 | + <span>{{ deliveryDetail.deliveryNo }}</span> |
| 183 | + </div> | ||
| 184 | + <div class="detail-item"> | ||
| 185 | + <label>关联订单编号:</label> | ||
| 186 | + <span>{{ deliveryDetail.orderNo }}</span> | ||
| 183 | </div> | 187 | </div> |
| 184 | <div class="detail-item"> | 188 | <div class="detail-item"> |
| 185 | <label>经销商编码:</label> | 189 | <label>经销商编码:</label> |
| 186 | - <span>{{ orderDetail.dealerCode }}</span> | 190 | + <span>{{ deliveryDetail.dealerCode }}</span> |
| 187 | </div> | 191 | </div> |
| 188 | <div class="detail-item"> | 192 | <div class="detail-item"> |
| 189 | <label>经销商名称:</label> | 193 | <label>经销商名称:</label> |
| 190 | - <span>{{ orderDetail.dealerName }}</span> | 194 | + <span>{{ deliveryDetail.dealerName }}</span> |
| 191 | </div> | 195 | </div> |
| 192 | <div class="detail-item"> | 196 | <div class="detail-item"> |
| 193 | - <label>订单日期:</label> | 197 | + <label>出库日期:</label> |
| 194 | - <span>{{ formatDate(orderDetail.orderDate) }}</span> | 198 | + <span>{{ formatDate(deliveryDetail.deliveryDate) }}</span> |
| 195 | </div> | 199 | </div> |
| 196 | <div class="detail-item"> | 200 | <div class="detail-item"> |
| 197 | - <label>订单总金额:</label> | 201 | + <label>出库总金额:</label> |
| 198 | - <span>{{ formatCurrency(orderDetail.totalAmount) }}</span> | 202 | + <span>{{ formatCurrency(deliveryDetail.totalAmount) }}</span> |
| 199 | </div> | 203 | </div> |
| 200 | <div class="detail-item"> | 204 | <div class="detail-item"> |
| 201 | <label>出库状态:</label> | 205 | <label>出库状态:</label> |
| 202 | - <span :class="getDeliveryStatusClass(orderDetail.deliveryStatus)"> | 206 | + <span :class="getDeliveryStatusClass(deliveryDetail.deliveryStatus)"> |
| 203 | - {{ getDeliveryStatusText(orderDetail.deliveryStatus) }} | 207 | + {{ getDeliveryStatusText(deliveryDetail.deliveryStatus) }} |
| 204 | </span> | 208 | </span> |
| 205 | </div> | 209 | </div> |
| 206 | <div class="detail-item"> | 210 | <div class="detail-item"> |
| 207 | - <label>出库时间:</label> | 211 | + <label>创建时间:</label> |
| 208 | - <span>{{ formatTime(orderDetail.uploadTime || '') }}</span> | 212 | + <span>{{ formatTime(deliveryDetail.createTime || '') }}</span> |
| 209 | </div> | 213 | </div> |
| 210 | </div> | 214 | </div> |
| 211 | </div> | 215 | </div> |
| 212 | 216 | ||
| 213 | - <div class="detail-section" v-if="orderDetail.orderItems && orderDetail.orderItems.length > 0"> | 217 | + <div class="detail-section" v-if="deliveryDetail.deliveryItems && deliveryDetail.deliveryItems.length > 0"> |
| 214 | <h4>出库明细</h4> | 218 | <h4>出库明细</h4> |
| 215 | <table class="detail-table"> | 219 | <table class="detail-table"> |
| 216 | <thead> | 220 | <thead> |
| ... | @@ -218,17 +222,17 @@ | ... | @@ -218,17 +222,17 @@ |
| 218 | <th>产品编码</th> | 222 | <th>产品编码</th> |
| 219 | <th>产品名称</th> | 223 | <th>产品名称</th> |
| 220 | <th>产品型号</th> | 224 | <th>产品型号</th> |
| 221 | - <th>数量</th> | 225 | + <th>出库数量</th> |
| 222 | - <th>单价</th> | 226 | + <th>出库单价</th> |
| 223 | - <th>总价</th> | 227 | + <th>出库总价</th> |
| 224 | </tr> | 228 | </tr> |
| 225 | </thead> | 229 | </thead> |
| 226 | <tbody> | 230 | <tbody> |
| 227 | - <tr v-for="item in orderDetail.orderItems" :key="item.itemId"> | 231 | + <tr v-for="item in deliveryDetail.deliveryItems" :key="item.itemId"> |
| 228 | <td>{{ item.productCode }}</td> | 232 | <td>{{ item.productCode }}</td> |
| 229 | <td>{{ item.productName }}</td> | 233 | <td>{{ item.productName }}</td> |
| 230 | <td>{{ item.productModel }}</td> | 234 | <td>{{ item.productModel }}</td> |
| 231 | - <td>{{ item.quantity }}</td> | 235 | + <td>{{ item.productQty }}</td> |
| 232 | <td>{{ formatCurrency(item.unitPrice) }}</td> | 236 | <td>{{ formatCurrency(item.unitPrice) }}</td> |
| 233 | <td>{{ formatCurrency(item.totalPrice) }}</td> | 237 | <td>{{ formatCurrency(item.totalPrice) }}</td> |
| 234 | </tr> | 238 | </tr> |
| ... | @@ -435,6 +439,7 @@ const addFormData = reactive({ | ... | @@ -435,6 +439,7 @@ const addFormData = reactive({ |
| 435 | 439 | ||
| 436 | // 搜索参数 | 440 | // 搜索参数 |
| 437 | const searchParams = reactive({ | 441 | const searchParams = reactive({ |
| 442 | + orderNo: '', | ||
| 438 | deliveryNo: '', | 443 | deliveryNo: '', |
| 439 | dealerCode: '', | 444 | dealerCode: '', |
| 440 | dealerName: '', | 445 | dealerName: '', |
| ... | @@ -443,6 +448,8 @@ const searchParams = reactive({ | ... | @@ -443,6 +448,8 @@ const searchParams = reactive({ |
| 443 | dataSource: '', | 448 | dataSource: '', |
| 444 | deliveryStartDate: '', | 449 | deliveryStartDate: '', |
| 445 | deliveryEndDate: '', | 450 | deliveryEndDate: '', |
| 451 | + startDate: '', | ||
| 452 | + endDate: '', | ||
| 446 | pageNum: 1, | 453 | pageNum: 1, |
| 447 | pageSize: 10 | 454 | pageSize: 10 |
| 448 | }) | 455 | }) |
| ... | @@ -555,9 +562,9 @@ const handleReset = () => { | ... | @@ -555,9 +562,9 @@ const handleReset = () => { |
| 555 | fetchDeliveries() | 562 | fetchDeliveries() |
| 556 | } | 563 | } |
| 557 | 564 | ||
| 558 | -const handleView = async (order: DeliveryInfo) => { | 565 | +const handleView = async (delivery: DeliveryInfo) => { |
| 559 | try { | 566 | try { |
| 560 | - const response = await deliveryApi.getDeliveryDetail(order.deliveryId) as any | 567 | + const response = await deliveryApi.getDeliveryDetail(delivery.deliveryId) as any |
| 561 | console.log('出库查询详情API响应:', response) | 568 | console.log('出库查询详情API响应:', response) |
| 562 | 569 | ||
| 563 | // 由于request.ts的响应拦截器已经处理了code=200的情况,直接返回data | 570 | // 由于request.ts的响应拦截器已经处理了code=200的情况,直接返回data |
| ... | @@ -573,12 +580,12 @@ const handleView = async (order: DeliveryInfo) => { | ... | @@ -573,12 +580,12 @@ const handleView = async (order: DeliveryInfo) => { |
| 573 | } | 580 | } |
| 574 | } | 581 | } |
| 575 | 582 | ||
| 576 | -const handleDelete = async (order: DeliveryInfo) => { | 583 | +const handleDelete = async (delivery: DeliveryInfo) => { |
| 577 | - if (confirm(`确定要删除出库单"${order.deliveryNo}"吗?`)) { | 584 | + if (confirm(`确定要删除出库单"${delivery.deliveryNo}"吗?`)) { |
| 578 | try { | 585 | try { |
| 579 | - await deliveryApi.deleteDelivery(order.deliveryId) | 586 | + await deliveryApi.deleteDelivery(delivery.deliveryId) |
| 580 | showMessage('删除出库单成功', 'success') | 587 | showMessage('删除出库单成功', 'success') |
| 581 | - fetchOrders() // 刷新列表 | 588 | + fetchDeliveries() // 刷新列表 |
| 582 | } catch (error) { | 589 | } catch (error) { |
| 583 | console.error('删除出库单失败:', error) | 590 | console.error('删除出库单失败:', error) |
| 584 | showMessage('删除出库单失败, 请重试', 'error') | 591 | showMessage('删除出库单失败, 请重试', 'error') |
| ... | @@ -652,19 +659,19 @@ const handleSubmitAdd = async () => { | ... | @@ -652,19 +659,19 @@ const handleSubmitAdd = async () => { |
| 652 | deliveryStatus: 1, // 默认已出库 | 659 | deliveryStatus: 1, // 默认已出库 |
| 653 | warehouseCode: addFormData.warehouseCode, | 660 | warehouseCode: addFormData.warehouseCode, |
| 654 | dataSource: addFormData.dataSource || '系统录入', | 661 | dataSource: addFormData.dataSource || '系统录入', |
| 655 | - deliveryItems: addFormData.deliveryItems.map(item => ({ | 662 | + deliveryItems: addFormData.deliveryItems.map(item => ({ |
| 656 | - productCode: item.productCode, | 663 | + productCode: item.productCode, |
| 657 | - productName: item.productName, | 664 | + productName: item.productName, |
| 658 | - deliveryQty: item.deliveryQty, | 665 | + productQty: item.deliveryQty, |
| 659 | - deliveryPrice: item.deliveryPrice, | 666 | + unitPrice: item.deliveryPrice, |
| 660 | - deliveryAmount: item.deliveryAmount | 667 | + totalPrice: item.deliveryAmount |
| 661 | - })) | 668 | + })) |
| 662 | } | 669 | } |
| 663 | 670 | ||
| 664 | await deliveryApi.addDelivery(deliveryData) | 671 | await deliveryApi.addDelivery(deliveryData) |
| 665 | showMessage('新增出库成功', 'success') | 672 | showMessage('新增出库成功', 'success') |
| 666 | closeAddDialog() | 673 | closeAddDialog() |
| 667 | - fetchOrders() // 刷新列表 | 674 | + fetchDeliveries() // 刷新列表 |
| 668 | } catch (error) { | 675 | } catch (error) { |
| 669 | console.error('新增出库失败:', error) | 676 | console.error('新增出库失败:', error) |
| 670 | showMessage('新增出库失败, 请重试', 'error') | 677 | showMessage('新增出库失败, 请重试', 'error') |
| ... | @@ -703,7 +710,7 @@ const handleTableViewToggle = () => { | ... | @@ -703,7 +710,7 @@ const handleTableViewToggle = () => { |
| 703 | 710 | ||
| 704 | const closeDetailDialog = () => { | 711 | const closeDetailDialog = () => { |
| 705 | showDetailDialog.value = false | 712 | showDetailDialog.value = false |
| 706 | - orderDetail.value = null | 713 | + deliveryDetail.value = null |
| 707 | } | 714 | } |
| 708 | 715 | ||
| 709 | // 生命周期 | 716 | // 生命周期 | ... | ... |
-
Please register or login to post a comment