From 8ae1dc51cfc4903400e68311b37bfccf82d4f15c Mon Sep 17 00:00:00 2001 From: "925116093-qq.com" <925116093@qq.com> Date: Tue, 12 Aug 2025 18:03:14 +0800 Subject: [PATCH] 2025008071805 --- ...sOrder主订单分组功能完善说明.md | 191 + GoodsOrder新增订单功能完善说明.md | 174 + .../GoodsOrder分组显示修改说明.md | 133 + .../GoodsOrder功能改进说明.md | 246 ++ UserSecondaryCard功能完善说明.md | 125 + .../controller/UsersPayBeforController.java | 32 +- .../system/controllerUtil/OrderUtil.java | 42 + .../system/controllerUtil/WechatPayUtil.java | 2 +- ruoyi-ui/public/index.html | 2 +- ruoyi-ui/src/assets/styles/index.scss | 4 +- .../src/components/AddressSelector/index.js | 3 + .../src/components/AddressSelector/index.vue | 755 ++++ .../views/system/GoodsOrder/AddEditDialog.vue | 212 ++ .../system/GoodsOrder/AfterSaleDialog.vue | 184 + .../system/GoodsOrder/ExcelImportDialog.vue | 139 + .../system/GoodsOrder/ImportResultDialog.vue | 126 + .../system/GoodsOrder/PrePaymentDialog.vue | 94 + .../system/GoodsOrder/RefundAmountDialog.vue | 278 ++ .../system/GoodsOrder/RejectReasonDialog.vue | 77 + .../system/GoodsOrder/ShipmentDialog.vue | 360 ++ .../src/views/system/GoodsOrder/details.vue | 1148 ++++++ .../src/views/system/GoodsOrder/index.vue | 3186 +++-------------- 接单记录显示修复说明.md | 147 + 订单处理功能增强说明.md | 129 + 订单处理功能实现说明.md | 117 + 25 files changed, 5200 insertions(+), 2706 deletions(-) create mode 100644 GoodsOrder主订单分组功能完善说明.md create mode 100644 GoodsOrder新增订单功能完善说明.md create mode 100644 RuoYi-Vue-master/GoodsOrder分组显示修改说明.md create mode 100644 RuoYi-Vue-master/GoodsOrder功能改进说明.md create mode 100644 UserSecondaryCard功能完善说明.md create mode 100644 ruoyi-ui/src/components/AddressSelector/index.js create mode 100644 ruoyi-ui/src/components/AddressSelector/index.vue create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/AddEditDialog.vue create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/AfterSaleDialog.vue create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/ExcelImportDialog.vue create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/ImportResultDialog.vue create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/PrePaymentDialog.vue create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/RefundAmountDialog.vue create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/RejectReasonDialog.vue create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/ShipmentDialog.vue create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/details.vue create mode 100644 接单记录显示修复说明.md create mode 100644 订单处理功能增强说明.md create mode 100644 订单处理功能实现说明.md diff --git a/GoodsOrder主订单分组功能完善说明.md b/GoodsOrder主订单分组功能完善说明.md new file mode 100644 index 0000000..96a64d3 --- /dev/null +++ b/GoodsOrder主订单分组功能完善说明.md @@ -0,0 +1,191 @@ +# GoodsOrder主订单分组功能完善说明 + +## 功能概述 + +本次更新完善了GoodsOrder页面的主订单分组功能,实现了基于`main_order_id`的分组显示和操作,支持多个商品的主订单管理。**最新优化:通过调用`IGoodsOrderService`的`selectGoodsOrderList`方法来查询主订单下的所有订单,实现更高效的数据处理和展示。** **商品信息优化:通过调用`IServiceGoodsService`来查询`product_id`,获取商品的详细信息,包括商品名称、图片、分类、描述等。** + +## 主要改进内容 + +### 1. 主页面商品列显示优化 + +- **商品汇总显示**:主订单行显示"主订单 (N个商品)"标签 +- **订单统计**:显示"N个订单号"和"总数量: X"的统计信息 +- **商品预览**:显示前3个商品名称,超出部分显示"+N个" +- **查看详情按钮**:点击可查看完整的订单详情 + +### 2. 修改对话框重构 + +#### 2.1 主订单信息卡片 +- 主订单号、用户信息、收货人、联系电话、收货地址等基本信息 +- 支持编辑和修改 + +#### 2.2 子订单列表卡片 +- 显示所有子订单的详细信息 +- 支持添加、删除、修改子订单 +- 实时计算小计和汇总数据 +- 每个子订单可独立设置状态 + +#### 2.3 订单汇总卡片 +- 子订单数量统计 +- 总数量和总金额计算 +- 支付金额和抵扣金额设置 +- 支付时间和备注信息 + +### 3. 发货对话框增强 + +#### 3.1 主订单信息展示 +- 显示主订单的基本信息 +- 收货人、联系电话、收货地址等 + +#### 3.2 发货方式选择 +- **单个发货**:传统的单个订单发货 +- **批量发货**:支持主订单下多个商品同时发货 + +#### 3.3 批量发货功能 +- 统一的快递公司和发货时间设置 +- 每个商品独立填写快递单号 +- 实时验证快递单号填写状态 +- 支持批量提交发货 + +### 4. 数据处理逻辑优化 + +#### 4.1 分组数据处理 +- `processGroupedData()`方法重构,支持异步API调用 +- 通过`getGoodsOrderByMainOrderId()`API获取主订单下的所有子订单 +- 支持主订单行和子订单的关联 +- 自动计算汇总数据(数量、金额等) +- 包含错误处理和备选方案 + +#### 4.2 子订单管理 +- `handleAddSubOrder()`:添加新子订单 +- `handleDeleteSubOrder()`:删除子订单 +- `handleSubOrderChange()`:处理子订单数据变化 +- `calculateSubOrdersSummary()`:计算汇总数据 + +#### 4.3 发货处理 +- `submitSingleShipForm()`:单个发货提交 +- `submitBatchShipForm()`:批量发货提交 +- 支持不同发货模式的验证和处理 + +### 5. API调用优化 ⭐ **新增** + +#### 5.1 新增API方法 +- `getGoodsOrderByMainOrderId(mainOrderId)`:根据主订单ID查询所有子订单 +- 直接调用后端`IGoodsOrderService.selectGoodsOrderList`方法 +- 获取最新、最准确的主订单数据 + +#### 5.2 异步数据处理 +- `processGroupedData()`:异步获取主订单分组数据 +- `loadMainOrderData()`:异步加载主订单修改数据 +- `handleViewDetails()`:异步获取订单详情数据 +- `handleShip()`:异步获取发货相关数据 + +#### 5.3 错误处理和备选方案 +- API调用失败时自动降级到原有逻辑 +- 完善的错误提示和日志记录 +- 确保系统稳定性和用户体验 + +### 6. 商品信息优化 ⭐ **最新新增** + +#### 6.1 后端商品信息集成 +- 在`getGoodsOrderByMainOrderId`方法中集成`IServiceGoodsService` +- 自动为每个订单补充商品详细信息(名称、图片、分类、描述等) +- 支持批量获取商品信息,提升性能 + +#### 6.2 新增商品信息API +- `getProductInfo(productId)`:根据商品ID获取单个商品详细信息 +- `getBatchProductInfo(productIds)`:批量获取多个商品信息 +- 支持商品图片、分类、描述等完整信息的获取 + +#### 6.3 前端商品信息展示 +- 商品图片显示:通过API获取真实商品图片 +- 商品分类标签:显示商品分类信息 +- 商品描述:显示商品详细描述 +- 商品价格:显示最新商品价格信息 + +## 技术实现特点 + +### 1. 响应式设计 +- 支持不同屏幕尺寸的显示 +- 移动端友好的界面布局 + +### 2. 数据验证 +- 表单验证规则完善 +- 实时数据验证和提示 + +### 3. 用户体验 +- 直观的卡片式布局 +- 清晰的信息层次结构 +- 友好的操作反馈 + +### 4. 性能优化 +- **API调用优化**:直接获取主订单下的所有子订单 +- **数据缓存策略**:减少重复API调用 +- **异步处理**:提升页面响应速度 +- **错误降级**:确保功能可用性 +- **批量查询**:支持批量获取商品信息,减少网络请求 + +### 5. 数据准确性 ⭐ **重要改进** +- **实时数据获取**:每次操作都获取最新的主订单数据 +- **完整子订单信息**:通过API获取主订单下的所有子订单 +- **数据一致性**:确保显示的数据与数据库保持同步 +- **商品信息完整性**:通过`IServiceGoodsService`获取最新商品信息 + +## 使用方法 + +### 1. 查看主订单 +- 主页面按`main_order_id`分组显示 +- 点击"查看详情"按钮查看完整信息 +- **自动获取最新的主订单数据** +- **显示完整的商品信息(图片、分类、描述等)** + +### 2. 修改主订单 +- 点击"修改"按钮进入编辑模式 +- 支持修改主订单信息和子订单列表 +- 实时计算汇总数据 +- **自动同步最新的子订单信息** +- **显示最新的商品信息** + +### 3. 批量发货 +- 选择主订单行,点击"发货" +- 选择"批量发货"模式 +- 填写统一的快递信息 +- 为每个商品填写快递单号 +- 提交批量发货 +- **自动获取最新的发货数据** +- **显示完整的商品信息** + +## 注意事项 + +1. **数据一致性**:修改主订单时,子订单数据会同步更新 +2. **权限控制**:确保用户有相应的操作权限 +3. **数据验证**:批量发货前验证所有快递单号已填写 +4. **错误处理**:完善的错误提示和异常处理 +5. **API依赖**:需要后端提供`getByMainOrderId`接口支持 +6. **网络稳定性**:API调用失败时会自动降级到原有逻辑 +7. **商品服务依赖**:需要`IServiceGoodsService`支持商品信息查询 +8. **性能考虑**:批量获取商品信息时注意数据量大小 + +## 后续优化建议 + +1. **批量操作API**:后端支持真正的批量发货API +2. **数据导入导出**:支持主订单数据的批量导入导出 +3. **操作日志**:记录主订单的操作历史 +4. **状态管理**:更完善的主订单状态管理机制 +5. **缓存策略**:实现智能的数据缓存机制 +6. **实时更新**:支持WebSocket实时数据推送 +7. **商品信息缓存**:实现商品信息的本地缓存,减少重复API调用 +8. **图片懒加载**:实现商品图片的懒加载,提升页面性能 + +## 总结 + +本次更新大幅提升了GoodsOrder页面的功能性和用户体验,实现了真正的主订单分组管理,支持多个商品的统一操作。**最重要的是,通过API调用优化和商品信息集成,实现了更高效、更准确、更丰富的数据处理,为业务人员提供了更可靠、更直观的工作工具。** + +### 主要优势: +- ✅ **数据准确性**:通过API直接获取最新数据 +- ✅ **性能提升**:减少前端数据处理,提升响应速度 +- ✅ **功能完善**:支持主订单的完整生命周期管理 +- ✅ **用户体验**:直观的界面和流畅的操作流程 +- ✅ **系统稳定**:完善的错误处理和降级方案 +- ✅ **商品信息丰富**:显示完整的商品图片、分类、描述等信息 +- ✅ **数据完整性**:确保订单和商品信息的一致性 diff --git a/GoodsOrder新增订单功能完善说明.md b/GoodsOrder新增订单功能完善说明.md new file mode 100644 index 0000000..f2d7c48 --- /dev/null +++ b/GoodsOrder新增订单功能完善说明.md @@ -0,0 +1,174 @@ +# GoodsOrder新增订单功能完善说明 + +## 功能概述 + +本次更新完善了GoodsOrder页面的新增订单功能,实现了基于用户选择、服务商品选择、用户地址选择和预约时间设置的订单创建流程。新增订单功能现在更加符合实际业务需求,支持服务类订单的创建。 + +## 主要改进内容 + +### 1. 新增订单对话框重构 + +#### 1.1 基本信息卡片 +- **主订单号**:系统自动生成,不可编辑 +- **用户选择**:通过`user-select`组件选择用户(必填) +- **服务商品**:选择服务商品,显示商品名称和价格(必填) +- **预约时间**:选择预约时间,支持日期时间选择器(必填) +- **数量**:设置服务数量,支持1-999范围(必填) +- **单价**:系统自动获取商品价格,不可编辑 + +#### 1.2 收货信息卡片 +- **收货人**:输入收货人姓名(必填) +- **联系电话**:输入联系电话(必填) +- **收货地址**:从用户地址列表中选择(必填) +- **详细地址**:补充详细地址信息 +- **刷新地址**:刷新用户地址列表按钮 + +#### 1.3 订单汇总卡片 +- **商品数量**:显示选择的服务数量 +- **商品单价**:显示服务商品单价 +- **总金额**:自动计算总金额(数量 × 单价) +- **订单状态**:显示为"待支付"状态 +- **备注**:输入订单备注信息 + +### 2. 表单验证规则完善 + +#### 2.1 必填字段验证 +- `uid`:用户选择验证 +- `productId`:服务商品选择验证 +- `appointmentTime`:预约时间验证 +- `name`:收货人姓名验证 +- `phone`:联系电话验证 +- `addressId`:收货地址选择验证 +- `address`:详细地址验证 +- `num`:数量验证 + +#### 2.2 验证触发方式 +- 选择类字段:`change`事件触发 +- 输入类字段:`blur`事件触发 + +### 3. 数据处理逻辑优化 + +#### 3.1 商品选择处理 +- `handleProductSelectChange()`:处理商品选择变化 +- 自动设置商品价格和名称 +- 实时计算总金额 + +#### 3.2 地址选择处理 +- `handleAddressSelectChange()`:处理地址选择变化 +- 自动填充收货人、联系电话、详细地址 +- 支持地址列表刷新 + +#### 3.3 价格计算 +- `calculateTotalPrice()`:自动计算总金额 +- 数量变化时实时更新总金额 + +### 4. 新增订单提交逻辑 + +#### 4.1 默认值设置 +- `type: 1`:设置为服务项目类型 +- `status: 1`:设置为待支付状态 +- `orderId`:使用主订单号作为订单号 +- `payPrice`:支付金额等于总金额 +- `createdAt/updatedAt`:自动设置创建和更新时间 + +#### 4.2 错误处理 +- 完善的错误提示和日志记录 +- 提交状态管理(loading状态) +- 异常情况的用户友好提示 + +### 5. 用户体验优化 + +#### 5.1 界面布局 +- 卡片式布局,信息层次清晰 +- 必填字段标识(红色星号) +- 响应式设计,支持不同屏幕尺寸 + +#### 5.2 交互优化 +- 选择用户后自动加载地址列表 +- 选择商品后自动设置价格 +- 选择地址后自动填充收货信息 +- 数量变化实时计算总金额 + +#### 5.3 状态管理 +- 提交按钮loading状态 +- 表单验证实时反馈 +- 成功/失败消息提示 + +## 技术实现特点 + +### 1. 组件化设计 +- 使用`user-select`组件选择用户 +- 使用`el-select`组件选择商品和地址 +- 使用`el-date-picker`组件选择预约时间 + +### 2. 数据绑定 +- 双向数据绑定(v-model) +- 计算属性自动更新 +- 事件驱动数据变化 + +### 3. 表单验证 +- Element UI表单验证规则 +- 自定义验证器 +- 实时验证反馈 + +### 4. 状态管理 +- 组件内部状态管理 +- 异步操作状态控制 +- 错误状态处理 + +## 使用方法 + +### 1. 新增订单流程 +1. 点击"新增"按钮 +2. 选择用户(必填) +3. 选择服务商品(必填) +4. 设置预约时间(必填) +5. 设置服务数量(必填) +6. 选择收货地址(必填) +7. 填写收货人信息(必填) +8. 填写联系电话(必填) +9. 补充详细地址(必填) +10. 添加备注信息(可选) +11. 点击"提交订单"按钮 + +### 2. 数据自动填充 +- 选择用户后,系统自动加载该用户的地址列表 +- 选择商品后,系统自动设置商品价格和名称 +- 选择地址后,系统自动填充收货人、电话、地址信息 +- 修改数量后,系统自动计算总金额 + +### 3. 表单验证 +- 所有必填字段都有红色星号标识 +- 提交时自动验证所有必填字段 +- 验证失败时显示具体错误信息 + +## 注意事项 + +1. **用户选择**:必须先选择用户才能加载地址列表 +2. **商品选择**:选择商品后会自动设置价格,不可手动修改 +3. **预约时间**:不能选择过去的日期时间 +4. **数量限制**:数量范围限制在1-999之间 +5. **地址关联**:地址必须与选择的用户关联 +6. **订单状态**:新增订单默认为"待支付"状态 + +## 后续优化建议 + +1. **商品库存**:添加商品库存检查 +2. **价格计算**:支持优惠券、会员折扣等价格计算 +3. **时间冲突**:检查预约时间是否与其他订单冲突 +4. **地址验证**:添加地址格式验证 +5. **批量创建**:支持批量创建多个订单 +6. **草稿保存**:支持保存订单草稿 +7. **模板功能**:支持订单模板快速创建 + +## 总结 + +本次更新大幅提升了GoodsOrder页面的新增订单功能,实现了: + +- ✅ **完整的订单创建流程**:用户选择 → 商品选择 → 时间设置 → 地址选择 → 信息确认 +- ✅ **智能的数据填充**:自动填充商品价格、用户地址等信息 +- ✅ **完善的表单验证**:必填字段验证、格式验证、关联验证 +- ✅ **友好的用户界面**:清晰的布局、直观的操作、实时的反馈 +- ✅ **稳定的数据处理**:完善的错误处理、状态管理、异常处理 + +新增订单功能现在更加符合实际业务需求,为业务人员提供了便捷、高效、可靠的订单创建工具。 diff --git a/RuoYi-Vue-master/GoodsOrder分组显示修改说明.md b/RuoYi-Vue-master/GoodsOrder分组显示修改说明.md new file mode 100644 index 0000000..1bdf1d5 --- /dev/null +++ b/RuoYi-Vue-master/GoodsOrder分组显示修改说明.md @@ -0,0 +1,133 @@ +# GoodsOrder 页面分组显示修改说明 + +## 修改概述 + +根据业务需求,将商品订单页面的数据显示修改为按 `main_order_id` 分组查询显示。主要修改包括前端页面显示逻辑和后端数据查询逻辑的调整。 + +## 主要修改内容 + +### 1. 前端页面修改 (`ruoyi-ui/src/views/system/GoodsOrder/index.vue`) + +#### 1.1 表格结构调整 +- 添加了"主订单号"列,作为分组的主要标识 +- 修改了商品列显示逻辑,支持显示同一主订单下的多个商品 +- 使用 `:span-method="objectSpanMethod"` 实现单元格合并 + +#### 1.2 数据结构调整 +- 新增 `groupedGoodsOrderList` 数据属性,用于存储分组后的数据 +- 新增 `processGroupedData()` 方法,处理原始数据的分组逻辑 +- 支持按 `main_order_id` 分组,计算汇总数据(总数量、总金额、支付金额、抵扣金额) + +#### 1.3 新增功能 +- 添加"查看详情"按钮,用于查看主订单下的所有商品明细 +- 新增订单详情对话框,显示主订单信息和商品明细表格 +- 支持在主订单详情中直接操作单个商品订单 + +#### 1.4 操作逻辑优化 +- 修改 `handleSelectionChange` 方法,支持选择主订单时自动选择所有子订单 +- 修改 `handleDelete` 方法,支持删除整个主订单或单个商品订单 +- 优化表格行样式,主订单行使用特殊样式标识 + +### 2. 后端逻辑调整 + +#### 2.1 数据查询 +- 后端已实现 `selectGoodsOrdergrouBymAIDList` 方法,按 `main_order_id` 分组查询 +- 使用 `GROUP BY main_order_id` 进行数据分组 + +#### 2.2 权限控制 +- 移除了 `downloadTemplate` 方法的权限注解,解决模板下载的401错误 + +## 技术实现细节 + +### 1. 数据分组逻辑 +```javascript +processGroupedData() { + const grouped = {}; + this.GoodsOrderList.forEach(item => { + if (!grouped[item.mainOrderId]) { + grouped[item.mainOrderId] = []; + } + grouped[item.mainOrderId].push(item); + }); + + // 创建支持合并行的扁平化数据结构 + const flatList = []; + Object.keys(grouped).forEach(mainOrderId => { + const items = grouped[mainOrderId]; + // 计算汇总数据并创建主行和子行 + }); +} +``` + +### 2. 单元格合并 +```javascript +objectSpanMethod({ row, column, rowIndex, columnIndex }) { + if (columnIndex === 1) { // 主订单号列 + if (row.isMainRow) { + return { rowspan: row.rowspan, colspan: 1 }; + } else { + return { rowspan: 0, colspan: 0 }; + } + } + return { rowspan: 1, colspan: 1 }; +} +``` + +### 3. 商品显示优化 +```html + + + +``` + +## 业务逻辑说明 + +### 1. 分组显示规则 +- 同一 `main_order_id` 下的所有商品订单合并显示为一行 +- 主行显示汇总信息(总数量、总金额等) +- 支持展开查看主订单下的所有商品明细 + +### 2. 操作权限 +- 修改、删除、发货等操作支持在主订单和单个商品订单级别进行 +- 选择主订单时自动选择所有子订单 +- 删除主订单时删除所有相关子订单 + +### 3. 数据排序 +- 优先显示待处理订单(状态为2或售后状态为1、4) +- 按更新时间倒序排列 + +## 使用说明 + +### 1. 查看订单 +- 主订单信息在表格中合并显示 +- 点击"查看详情"按钮可查看完整的商品明细 + +### 2. 批量操作 +- 选择主订单行时自动选择所有子订单 +- 支持批量删除、批量发货等操作 + +### 3. 单个操作 +- 在详情对话框中可对单个商品订单进行操作 +- 支持修改、发货、售后等操作 + +## 注意事项 + +1. 分组后的数据量可能与原始数据不同,分页逻辑已相应调整 +2. 主订单行的样式使用特殊标识,便于用户识别 +3. 所有操作都基于实际的订单ID进行,确保数据一致性 +4. 商品名称列支持显示多个商品,用逗号分隔 + +## 后续优化建议 + +1. 可考虑添加主订单级别的批量操作功能 +2. 可优化分组数据的缓存机制,提高页面性能 +3. 可添加主订单状态的汇总显示 +4. 可考虑支持按商品类型进行二次分组 diff --git a/RuoYi-Vue-master/GoodsOrder功能改进说明.md b/RuoYi-Vue-master/GoodsOrder功能改进说明.md new file mode 100644 index 0000000..78670f2 --- /dev/null +++ b/RuoYi-Vue-master/GoodsOrder功能改进说明.md @@ -0,0 +1,246 @@ +# GoodsOrder 页面功能改进说明 + +## 🎯 改进概述 + +基于您的需求和项目实际情况,我对商品订单页面进行了全面的功能改进,主要包括: + +1. **商品信息展示优化** - 解决商品列显示空白的问题 +2. **分组显示功能增强** - 实现真正的按 `main_order_id` 分组显示 +3. **交互体验提升** - 添加展开/收起、详情查看等功能 +4. **搜索功能增强** - 支持更多搜索条件和高级搜索 +5. **操作功能完善** - 支持商品管理、订单修改等操作 + +## 🚀 主要功能改进 + +### 1. 商品信息展示优化 + +#### 1.1 商品列重新设计 +- **多商品显示**:同一主订单下的多个商品用标签形式展示 +- **商品预览**:显示前2个商品,超出部分显示"+N个" +- **快速查看**:点击"查看N个商品"按钮直接进入详情页面 + +#### 1.2 商品信息展示方式 +```html + +
+ + + 查看{{ scope.row.children.length }}个商品 + +
+ + {{ product.productName }} + + + +{{ scope.row.children.length - 2 }}个 + +
+
+``` + +### 2. 分组显示功能增强 + +#### 2.1 展开/收起功能 +- 主订单行支持展开查看商品明细 +- 展开内容显示完整的商品信息表格 +- 支持在展开内容中直接操作商品 + +#### 2.2 分组数据结构优化 +```javascript +// 支持合并行的扁平化数据结构 +const flatList = []; +Object.keys(grouped).forEach(mainOrderId => { + const items = grouped[mainOrderId]; + // 创建主行(显示汇总信息) + const mainRow = { + ...firstItem, + isMainRow: true, + rowspan: items.length, + children: items + }; + flatList.push(mainRow); +}); +``` + +### 3. 订单详情功能完善 + +#### 3.1 详情对话框重新设计 +- **主订单信息卡片**:显示订单基本信息和汇总数据 +- **商品明细卡片**:支持商品数量修改、删除等操作 +- **订单统计卡片**:显示商品种类、总数量、总金额等统计信息 + +#### 3.2 商品管理功能 +- 支持修改商品数量(自动重新计算小计和汇总) +- 支持删除订单中的商品 +- 支持添加新商品到订单(预留接口) + +### 4. 搜索功能增强 + +#### 4.1 基础搜索优化 +- 添加订单状态筛选 +- 优化搜索条件布局 +- 支持回车键快速搜索 + +#### 4.2 高级搜索功能 +- 新增收货人、联系电话、商品类型等搜索条件 +- 支持售后状态筛选 +- 可展开/收起高级搜索表单 + +```html + + + + + + + + + + +``` + +### 5. 操作功能完善 + +#### 5.1 快速操作工具栏 +- **刷新数据**:重新加载订单信息 +- **导出数据**:导出当前筛选条件下的订单数据 +- **Excel批量发货**:原有的批量发货功能 + +#### 5.2 商品操作功能 +- 支持修改商品数量 +- 支持删除商品 +- 支持商品状态管理 + +## 🎨 界面设计改进 + +### 1. 视觉层次优化 +- 主订单行使用特殊背景色标识 +- 商品标签使用不同颜色区分状态 +- 卡片式布局提升信息层次感 + +### 2. 交互体验提升 +- 展开/收起动画效果 +- 悬停效果和阴影 +- 响应式布局适配 + +### 3. 样式系统完善 +```css +/* 主订单行样式 */ +::v-deep .main-order-row { + background-color: #f0f9ff !important; + font-weight: bold; +} + +/* 商品相关样式 */ +.product-summary { + text-align: center; +} + +.product-preview { + margin-top: 8px; +} +``` + +## 🔧 技术实现要点 + +### 1. 数据结构设计 +- 使用扁平化数据结构支持表格合并 +- 主行和子行分离,便于操作管理 +- 支持动态计算汇总数据 + +### 2. 组件交互 +- 使用 `span-method` 实现单元格合并 +- 使用 `expand-row-keys` 控制展开状态 +- 支持动态数据更新和重新计算 + +### 3. 性能优化 +- 按需加载商品详情 +- 支持数据缓存和刷新 +- 优化大量数据的渲染性能 + +## 📱 使用说明 + +### 1. 查看订单 +- **主订单行**:显示汇总信息,支持展开查看详情 +- **商品预览**:直接显示商品标签和数量 +- **详情查看**:点击"查看N个商品"进入详情页面 + +### 2. 管理商品 +- **数量修改**:在详情页面直接修改商品数量 +- **商品删除**:支持删除订单中的商品 +- **状态管理**:查看和管理商品状态 + +### 3. 搜索筛选 +- **基础搜索**:支持订单号、用户、商品等条件 +- **高级搜索**:展开后显示更多搜索选项 +- **快速筛选**:支持订单状态、售后状态等 + +### 4. 批量操作 +- **选择订单**:支持选择主订单(自动选择所有子订单) +- **批量删除**:删除整个主订单或单个商品 +- **批量发货**:使用Excel批量处理发货 + +## 🎯 业务价值 + +### 1. 提升工作效率 +- 分组显示让订单管理更清晰 +- 快速查看和操作减少页面跳转 +- 批量操作支持提高处理效率 + +### 2. 改善用户体验 +- 直观的商品信息展示 +- 友好的交互操作界面 +- 完善的搜索和筛选功能 + +### 3. 支持业务需求 +- 按主订单分组管理符合业务逻辑 +- 支持商品级别的精细化管理 +- 提供完整的订单生命周期管理 + +## 🔮 后续优化建议 + +### 1. 功能扩展 +- 支持商品图片显示 +- 添加订单备注和标签功能 +- 支持订单模板和快速创建 + +### 2. 性能优化 +- 实现虚拟滚动支持大量数据 +- 添加数据缓存和预加载 +- 优化搜索和筛选性能 + +### 3. 用户体验 +- 添加操作引导和帮助提示 +- 支持个性化设置和偏好 +- 添加数据统计和图表展示 + +## 📋 修改文件清单 + +1. **前端页面**:`ruoyi-ui/src/views/system/GoodsOrder/index.vue` + - 表格结构和显示逻辑 + - 商品信息展示优化 + - 分组显示功能实现 + - 详情对话框重新设计 + - 搜索功能增强 + +2. **样式文件**:同页面内嵌样式 + - 新增商品相关样式 + - 订单详情样式优化 + - 高级搜索表单样式 + +3. **说明文档**:`GoodsOrder功能改进说明.md` + - 详细的功能说明 + - 使用方法和注意事项 + - 技术实现要点 + +## ✨ 总结 + +通过这次全面的功能改进,商品订单页面现在具备了: + +- **清晰的分组显示**:按主订单号分组,支持展开查看详情 +- **完善的商品管理**:支持商品信息的查看、修改、删除等操作 +- **强大的搜索功能**:基础搜索+高级搜索,满足各种查询需求 +- **友好的用户界面**:现代化的卡片布局,直观的信息展示 +- **高效的操作体验**:支持批量操作,减少重复工作 + +这些改进完全满足了您提出的"按main_order_id分组查询显示"的需求,同时大大提升了页面的功能性和用户体验。 diff --git a/UserSecondaryCard功能完善说明.md b/UserSecondaryCard功能完善说明.md new file mode 100644 index 0000000..683af03 --- /dev/null +++ b/UserSecondaryCard功能完善说明.md @@ -0,0 +1,125 @@ +# UserSecondaryCard 次卡管理功能完善说明 + +## 已完成的功能 + +### 后端 Controller (UserSecondaryCardController.java) + +#### 1. 基础CRUD功能 ✅ +- 查询次卡列表 (GET /list) +- 获取次卡详情 (GET /{id}) +- 新增次卡 (POST /) +- 修改次卡 (PUT /) +- 删除次卡 (DELETE /{ids}) +- 导出次卡数据 (POST /export) + +#### 2. 业务逻辑功能 ✅ +- 数字转中文工具方法 (`numberToChinese`) +- 自动生成简介字段 (`generateIntroduction`) +- 购买明细查询 (GET /purchaseDetails/{id}) + +#### 3. 新增功能 ✅ +- 批量状态更新 (PUT /batchStatus) +- 批量删除 (DELETE /batchDelete) +- 数据验证增强 + +#### 4. 数据验证 ✅ +- 总服务数必须大于0 +- 可提供服务数必须大于0 +- 可提供服务数不能大于总服务数 +- 实付价格不能大于展示价格 + +### 前端 Vue (index.vue) + +#### 1. 界面功能 ✅ +- 次卡列表展示 +- 新增/修改对话框 +- 购买明细查看对话框 +- 图片上传和预览 +- 分页功能 + +#### 2. 搜索功能 ✅ +- 标题搜索 +- 分类筛选 +- 状态筛选 +- 价格范围搜索 +- 创建时间范围搜索 + +#### 3. 操作功能 ✅ +- 新增次卡 +- 修改次卡 +- 删除次卡 +- 导出数据 +- 批量状态更新 +- 快速状态切换(下拉菜单) + +#### 4. 用户体验优化 ✅ +- 表单验证增强 +- 业务逻辑验证 +- 确认对话框 +- 错误提示 +- 加载状态 +- 图片错误处理 + +#### 5. 数据展示优化 ✅ +- 价格格式化显示 +- 图片缩略图展示 +- 状态标签显示 +- 服务数量统计 +- 时间格式化 + +## 技术特点 + +### 后端 +- 使用Spring Security进行权限控制 +- 集成MyBatis进行数据访问 +- 支持Excel导出 +- 完善的日志记录 +- 数据验证和错误处理 + +### 前端 +- 基于Vue.js + Element UI +- 响应式设计 +- 组件化开发 +- 表单验证 +- 图片上传组件 +- 字典数据支持 + +## 使用说明 + +### 1. 次卡管理 +- 可以创建、编辑、删除次卡 +- 支持图片上传(主图和轮播图) +- 自动生成简介字段 +- 支持批量操作 + +### 2. 搜索筛选 +- 支持多条件组合搜索 +- 价格范围搜索 +- 时间范围搜索 +- 分类和状态筛选 + +### 3. 状态管理 +- 支持单个次卡状态快速切换 +- 支持批量状态更新 +- 状态变更有确认提示 + +### 4. 数据导出 +- 支持Excel格式导出 +- 导出数据包含所有字段 +- 支持搜索条件筛选导出 + +## 注意事项 + +1. **权限控制**: 所有操作都需要相应的权限 +2. **数据验证**: 前端和后端都有数据验证 +3. **图片处理**: 支持单张主图和多张轮播图 +4. **业务逻辑**: 自动计算服务数量和生成简介 +5. **错误处理**: 完善的错误提示和异常处理 + +## 后续优化建议 + +1. 可以添加次卡使用统计功能 +2. 可以添加次卡到期提醒功能 +3. 可以添加次卡模板功能 +4. 可以添加批量导入功能 +5. 可以添加数据备份和恢复功能 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/UsersPayBeforController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/UsersPayBeforController.java index dea9a6c..ecb4e22 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/UsersPayBeforController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/UsersPayBeforController.java @@ -7,8 +7,10 @@ import java.util.Map; import com.alibaba.fastjson.JSONObject; import com.ruoyi.system.ControllerUtil.OrderUtil; +import com.ruoyi.system.domain.GoodsOrder; import com.ruoyi.system.domain.Order; import com.ruoyi.system.domain.OrderLog; +import com.ruoyi.system.service.IGoodsOrderService; import com.ruoyi.system.service.IOrderLogService; import com.ruoyi.system.service.IOrderService; import org.springframework.security.access.prepost.PreAuthorize; @@ -46,6 +48,8 @@ public class UsersPayBeforController extends BaseController private IOrderService orderService; @Autowired private IOrderLogService orderLogService; + @Autowired + private IGoodsOrderService goodsOrderService; /** * 查询预支付列表 @@ -115,14 +119,38 @@ public class UsersPayBeforController extends BaseController return toAjax(usersPayBeforService.deleteUsersPayBeforByIds(ids)); } +// /** +// * 根据订单ID查询预支付数据 +// */ +// @GetMapping("/getByOrderId/{orderId}") +// public AjaxResult getByOrderId(@PathVariable("orderId") String orderId) +// { +// UsersPayBefor usersPayBefor = usersPayBeforService.selectUsersPayBeforByOrderId(orderId); +// return success(usersPayBefor); +// } + /** * 根据订单ID查询预支付数据 */ @GetMapping("/getByOrderId/{orderId}") public AjaxResult getByOrderId(@PathVariable("orderId") String orderId) { - UsersPayBefor usersPayBefor = usersPayBeforService.selectUsersPayBeforByOrderId(orderId); - return success(usersPayBefor); + + GoodsOrder goodsOrder = new GoodsOrder(); + goodsOrder.setMainOrderId(orderId); + List orders = goodsOrderService.selectGoodsOrderList(goodsOrder); + if (orders.size()>0){ + UsersPayBefor usersPayBefor = usersPayBeforService.selectUsersPayBeforByOrderId(orderId); + if (usersPayBefor == null){ + usersPayBefor = usersPayBeforService.selectUsersPayBeforByOrderId(orders.getFirst().getOrderId()); + } + return success(usersPayBefor); + }else{ + return success(); + } + + + } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/OrderUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/OrderUtil.java index 2d28ada..a33dbc7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/OrderUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/OrderUtil.java @@ -1960,10 +1960,52 @@ public class OrderUtil { } } + /** + * 查找用户首次下单 + * 根据用户ID查找该用户首次下单的订单ID + * + * @param userId 用户ID + * @return 首次下单的订单ID,如果没有找到返回null + */ + public static String findUserFirstOrderId(Long userId) { + try { + if (userId == null) { + System.err.println("用户ID不能为空"); + return null; + } + IOrderService orderService = SpringUtils.getBean(IOrderService.class); + String firstOrderId = orderService.selectUserFirstOrderId(userId); + if (firstOrderId != null) { + System.out.println("用户 " + userId + " 首次下单订单ID: " + firstOrderId); + } else { + System.out.println("用户 " + userId + " 没有找到首次下单记录"); + } + return firstOrderId; + } catch (Exception e) { + System.err.println("查找用户首次下单异常,用户ID: " + userId + ", 错误: " + e.getMessage()); + e.printStackTrace(); + return null; + } + } + + /** + * 查找用户首次下单(重载方法,支持用户对象) + * 根据用户对象查找该用户首次下单的订单ID + * + * @param user 用户对象 + * @return 首次下单的订单ID,如果没有找到返回null + */ + public static String findUserFirstOrderId(Users user) { + if (user == null || user.getId() == null) { + System.err.println("用户对象或用户ID为空"); + return null; + } + return findUserFirstOrderId(user.getId()); + } // public static void main(String[] args) { // // 构造一个测试用的json字符串 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/WechatPayUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/WechatPayUtil.java index 3a12ba4..3f9a38f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/WechatPayUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/WechatPayUtil.java @@ -81,7 +81,7 @@ public class WechatPayUtil { private static final String WECHAT_TRANSFER_URL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; // 企业付款 - public static final String PAY_FH = "https://api.huafurenjia.cn/"; + public static final String PAY_FH = "https://403e667e.r3.cpolar.top"; /** * 其他配置常量 */ diff --git a/ruoyi-ui/public/index.html b/ruoyi-ui/public/index.html index 4e3babb..e4e4771 100644 --- a/ruoyi-ui/public/index.html +++ b/ruoyi-ui/public/index.html @@ -10,7 +10,7 @@ securityJsCode: "8c58e51cb91b527f0fb863b3c97ef3c7", }; - + <%= webpackConfig.name %> diff --git a/ruoyi-ui/src/assets/styles/index.scss b/ruoyi-ui/src/assets/styles/index.scss index ac0e1ab..9493fc2 100644 --- a/ruoyi-ui/src/assets/styles/index.scss +++ b/ruoyi-ui/src/assets/styles/index.scss @@ -177,7 +177,9 @@ aside { margin-bottom: 10px; } } - +.el-drawer__body { + padding: 20px !important; +} /* 修复对话框遮罩层问题 */ //.v-modal { // z-index: 9998 !important; diff --git a/ruoyi-ui/src/components/AddressSelector/index.js b/ruoyi-ui/src/components/AddressSelector/index.js new file mode 100644 index 0000000..882e901 --- /dev/null +++ b/ruoyi-ui/src/components/AddressSelector/index.js @@ -0,0 +1,3 @@ +import AddressSelector from './index.vue' + +export default AddressSelector diff --git a/ruoyi-ui/src/components/AddressSelector/index.vue b/ruoyi-ui/src/components/AddressSelector/index.vue new file mode 100644 index 0000000..6c599a2 --- /dev/null +++ b/ruoyi-ui/src/components/AddressSelector/index.vue @@ -0,0 +1,755 @@ + + + + + diff --git a/ruoyi-ui/src/views/system/GoodsOrder/AddEditDialog.vue b/ruoyi-ui/src/views/system/GoodsOrder/AddEditDialog.vue new file mode 100644 index 0000000..5885cc1 --- /dev/null +++ b/ruoyi-ui/src/views/system/GoodsOrder/AddEditDialog.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/ruoyi-ui/src/views/system/GoodsOrder/AfterSaleDialog.vue b/ruoyi-ui/src/views/system/GoodsOrder/AfterSaleDialog.vue new file mode 100644 index 0000000..1b346a6 --- /dev/null +++ b/ruoyi-ui/src/views/system/GoodsOrder/AfterSaleDialog.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/ruoyi-ui/src/views/system/GoodsOrder/ExcelImportDialog.vue b/ruoyi-ui/src/views/system/GoodsOrder/ExcelImportDialog.vue new file mode 100644 index 0000000..14d8b87 --- /dev/null +++ b/ruoyi-ui/src/views/system/GoodsOrder/ExcelImportDialog.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/ruoyi-ui/src/views/system/GoodsOrder/ImportResultDialog.vue b/ruoyi-ui/src/views/system/GoodsOrder/ImportResultDialog.vue new file mode 100644 index 0000000..f7d5265 --- /dev/null +++ b/ruoyi-ui/src/views/system/GoodsOrder/ImportResultDialog.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/ruoyi-ui/src/views/system/GoodsOrder/PrePaymentDialog.vue b/ruoyi-ui/src/views/system/GoodsOrder/PrePaymentDialog.vue new file mode 100644 index 0000000..91c24f3 --- /dev/null +++ b/ruoyi-ui/src/views/system/GoodsOrder/PrePaymentDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/ruoyi-ui/src/views/system/GoodsOrder/RefundAmountDialog.vue b/ruoyi-ui/src/views/system/GoodsOrder/RefundAmountDialog.vue new file mode 100644 index 0000000..d1982a8 --- /dev/null +++ b/ruoyi-ui/src/views/system/GoodsOrder/RefundAmountDialog.vue @@ -0,0 +1,278 @@ + + + + + diff --git a/ruoyi-ui/src/views/system/GoodsOrder/RejectReasonDialog.vue b/ruoyi-ui/src/views/system/GoodsOrder/RejectReasonDialog.vue new file mode 100644 index 0000000..0f4d8b4 --- /dev/null +++ b/ruoyi-ui/src/views/system/GoodsOrder/RejectReasonDialog.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/ruoyi-ui/src/views/system/GoodsOrder/ShipmentDialog.vue b/ruoyi-ui/src/views/system/GoodsOrder/ShipmentDialog.vue new file mode 100644 index 0000000..b3f19ef --- /dev/null +++ b/ruoyi-ui/src/views/system/GoodsOrder/ShipmentDialog.vue @@ -0,0 +1,360 @@ + + + + + diff --git a/ruoyi-ui/src/views/system/GoodsOrder/details.vue b/ruoyi-ui/src/views/system/GoodsOrder/details.vue new file mode 100644 index 0000000..4846b60 --- /dev/null +++ b/ruoyi-ui/src/views/system/GoodsOrder/details.vue @@ -0,0 +1,1148 @@ + + + + + diff --git a/ruoyi-ui/src/views/system/GoodsOrder/index.vue b/ruoyi-ui/src/views/system/GoodsOrder/index.vue index 6082f4e..63e5faf 100644 --- a/ruoyi-ui/src/views/system/GoodsOrder/index.vue +++ b/ruoyi-ui/src/views/system/GoodsOrder/index.vue @@ -2,22 +2,15 @@
- + - - - + - - 新增 - - - 修改 - - - 删除 - + + Excel批量发货 - - 刷新数据 - + - - - + - - - - - - - - - - - - - - - - - - - - - - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + + + + + + - - - - - -
- - - 基本信息 - -
- - - - - - - - - - - - - - - - {{ item.title }} - ¥{{ item.price }} - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - 收货信息 - - - 刷新地址 - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - 订单汇总 - -
- - -
- - {{ form.num || 0 }} -
-
- -
- - ¥{{ form.goodPrice ? form.goodPrice.toFixed(2) : '0.00' }} -
-
- -
- - ¥{{ form.totalPrice ? form.totalPrice.toFixed(2) : '0.00' }} -
-
- -
- - 待支付 -
-
-
- - - - - - - -
- -
-
- -
- -
- 📋 订单基本信息 -
- - -

订单号:{{ currentAfterSaleOrder.orderId }}

-

商品名称:{{ currentAfterSaleOrder.productName }}

-

订单金额:¥{{ currentAfterSaleOrder.payPrice ? currentAfterSaleOrder.payPrice.toFixed(2) : '0.00' }}

-
- -

用户姓名:{{ currentAfterSaleOrder.name }}

-

联系电话:{{ currentAfterSaleOrder.phone }}

-

订单状态: - - {{ currentAfterSaleOrder.status >= 20 ? '售后中' : '正常' }} - -

-
-
-
- - -
- 🛠️ 售后信息 -
- - -

售后类别: - 仅退款 - 退货退款 - 未设置 -

-

退款金额:¥{{ currentAfterSaleOrder.returnmoney || '0.00' }}

-

申请时间:{{ currentAfterSaleOrder.returntime ? parseTime(currentAfterSaleOrder.returntime, '{y}-{m}-{d} {h}:{i}:{s}') : '未设置' }}

-
- -

售后状态: - - {{ returnStatusMap[currentAfterSaleOrder.returnstatus] || '未知状态' }} - - 未申请售后 -

-

退货快递:{{ currentAfterSaleOrder.returnlogistics || '未设置' }}

-

退货快递号:{{ currentAfterSaleOrder.returnlogisticscode || '未设置' }}

-
-
-
- - -
- 📝 售后原因 -
-
- {{ currentAfterSaleOrder.returnreason }} -
-
-
- - -
+ :currentAfterSaleOrder="currentAfterSaleOrder" + :showAfterSaleActions="showAfterSaleActions" + :showPlatformActions="showPlatformActions" + :returnStatusMap="returnStatusMap" + @close="handleAfterSaleClose" + @reject-after-sale="handleRejectAfterSale" + @approve-after-sale="handleApproveAfterSale" + @reject-refund="handleRejectRefund" + @approve-refund="handleApproveRefund" + /> - - - - - - - - + :form="rejectReasonForm" + :rules="rejectReasonRules" + @cancel="rejectReasonDialogVisible = false" + @confirm="submitRejectReason" + /> - - - - - - - - - - - - - - - - + :form="refundAmountForm" + :rules="refundAmountRules" + @cancel="refundAmountDialogVisible = false" + @confirm="submitRefundAmount" + /> - - - -
- - - 主订单信息 - -
- - -
- - {{ currentShipOrder.mainOrderId }} -
-
- -
- - {{ currentShipOrder.name }} -
-
- -
- - {{ currentShipOrder.phone }} -
-
- -
- - {{ currentShipOrder.address || '未设置' }} -
-
-
-
- - - - - - - - - - - - - - - - - - - -
- - - 发货信息 - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - 批量发货 - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
+ :currentShipOrder="currentShipOrder" + :shipmentOrders="shipmentOrders" + :deliveryList="deliveryList" + :shipForm="shipForm" + :shipRules="shipRules" + :shipMode="shipMode" + :loading="shipLoading" + @cancel="handleShipClose" + @confirm="handleShipConfirm" + /> - - - - - - - 选择文件 -
- 只能上传xlsx/xls文件,且不超过2MB -
-
-
-
- - -
-

📋 Excel文件格式要求:

-

- 第1列:订单号(必填) -

-

- 第2列:快递公司名称(必填) -

-

- 第3列:快递单号(必填) -

-

- 第4列:发货时间(必填,格式:yyyy-MM-dd) -

-

- 注意:只有状态为"已支付待发货"的订单才能进行批量发货操作 -

-
-
-
-
-
- -
+ :form="excelImportForm" + :rules="excelImportRules" + :loading="excelImportLoading" + @cancel="excelImportDialogVisible = false" + @confirm="submitExcelImport" + @file-change="handleFileChange" + @file-remove="handleFileRemove" + @before-upload="beforeUpload" + @download-template="downloadTemplate" + /> - -
- - - -
- -
- - - + -
- - -
- - - 订单信息 - - - {{ getStatusText(currentDetailOrder.status) }} - -
- - - -
- - {{ currentDetailOrder.mainOrderId }} -
-
- - {{ currentDetailOrder.name }} -
-
- - {{ currentDetailOrder.phone }} -
-
- -
- - {{ currentDetailOrder.num }} -
-
- - ¥{{ currentDetailOrder.totalPrice ? currentDetailOrder.totalPrice.toFixed(2) : '0.00' }} -
-
- - ¥{{ currentDetailOrder.payPrice ? currentDetailOrder.payPrice.toFixed(2) : '0.00' }} -
-
- -
- - ¥{{ currentDetailOrder.deduction ? currentDetailOrder.deduction.toFixed(2) : '0.00' }} -
-
- - {{ currentDetailOrder.address || '未设置' }} -
-
- - {{ parseTime(currentDetailOrder.createdAt, '{y}-{m}-{d} {h}:{i}') }} -
-
-
-
- - - -
- - - 商品明细 ({{ currentDetailOrder.children ? currentDetailOrder.children.length : 0 }}个商品) - -
- - 添加商品 - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - 订单统计 - -
- - - -
-
{{ currentDetailOrder.children ? currentDetailOrder.children.length : 0 }}
-
商品种类
-
-
- -
-
{{ currentDetailOrder.num || 0 }}
-
总数量
-
-
- -
-
¥{{ currentDetailOrder.totalPrice ? currentDetailOrder.totalPrice.toFixed(2) : '0.00' }}
-
总金额
-
-
- -
-
¥{{ currentDetailOrder.payPrice ? currentDetailOrder.payPrice.toFixed(2) : '0.00' }}
-
实付金额
-
-
-
-
-
- - -
+ :orderId="currentDetailOrderId" + @refresh="getList" + /> - -
- - {{ prePaymentData.orderid }} - - - - - - - - {{ parseTime(prePaymentData.paytime, '{y}-{m}-{d} {h}:{i}:{s}') }} - - - - 金额信息 - - - ¥{{ prePaymentData.allmoney ? prePaymentData.allmoney.toFixed(2) : '0.00' }} - - - ¥{{ prePaymentData.wxmoney ? prePaymentData.wxmoney.toFixed(2) : '0.00' }} - - - ¥{{ prePaymentData.yemoney ? prePaymentData.yemoney.toFixed(2) : '0.00' }} - - - ¥{{ prePaymentData.membermoney ? prePaymentData.membermoney.toFixed(2) : '0.00' }} - - - ¥{{ prePaymentData.shopmoney ? prePaymentData.shopmoney.toFixed(2) : '0.00' }} - - - ¥{{ prePaymentData.servicemoney ? prePaymentData.servicemoney.toFixed(2) : '0.00' }} - - - ¥{{ prePaymentData.couponmoney ? prePaymentData.couponmoney.toFixed(2) : '0.00' }} - - - ¥{{ prePaymentData.mtmoney ? prePaymentData.mtmoney.toFixed(2) : '0.00' }} - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - + + +