Commit d884303df60dd9b96e243ebbbd96d7accf215289

Authored by YunaiV
1 parent 8f6c3775

trade:【交易售后】查询分页列表

Showing 15 changed files with 126 additions and 184 deletions
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/CouponController.java
... ... @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 6 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
7 7 import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
8   -import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO;
  8 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
9 9 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageItemRespVO;
10 10 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageReqVO;
11 11 import cn.iocoder.yudao.module.promotion.convert.coupon.CouponConvert;
... ... @@ -66,7 +66,7 @@ public class CouponController {
66 66 }
67 67 // 读取用户信息,进行拼接
68 68 Set<Long> userIds = convertSet(pageResult.getList(), CouponDO::getUserId);
69   - Map<Long, UserRespDTO> userMap = memberUserApi.getUserMap(userIds);
  69 + Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds);
70 70 pageResulVO.getList().forEach(itemRespVO -> MapUtils.findAndThen(userMap, itemRespVO.getUserId(),
71 71 userRespDTO -> itemRespVO.setNickname(userRespDTO.getNickname())));
72 72 return success(pageResulVO);
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java
... ... @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 7 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
8 8 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
9 9 import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
10   -import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO;
  10 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
11 11 import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageReqVO;
12 12 import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO;
13 13 import cn.iocoder.yudao.module.promotion.dal.mysql.coupon.CouponMapper;
... ... @@ -71,7 +71,7 @@ public class CouponServiceImpl implements CouponService {
71 71 Set<Long> userIds = null;
72 72 if (StrUtil.isNotEmpty(pageReqVO.getNickname())) {
73 73 userIds = CollectionUtils.convertSet(memberUserApi.getUserListByNickname(pageReqVO.getNickname()),
74   - UserRespDTO::getId);
  74 + MemberUserRespDTO::getId);
75 75 if (CollUtil.isEmpty(userIds)) {
76 76 return PageResult.empty();
77 77 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.java
1 1 package cn.iocoder.yudao.module.trade.controller.admin.aftersale;
2 2  
  3 +import cn.hutool.core.collection.CollUtil;
3 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
  7 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
5 8 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleDisagreeReqVO;
6 9 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSalePageReqVO;
7   -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespVO;
  10 +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespPageItemVO;
8 11 import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert;
9 12 import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO;
10 13 import cn.iocoder.yudao.module.trade.service.aftersale.TradeAfterSaleService;
... ... @@ -18,8 +21,10 @@ import org.springframework.web.bind.annotation.*;
18 21  
19 22 import javax.annotation.Resource;
20 23 import javax.validation.Valid;
  24 +import java.util.Map;
21 25  
22 26 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  27 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
23 28 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
24 29 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
25 30  
... ... @@ -33,12 +38,22 @@ public class TradeAfterSaleController {
33 38 @Resource
34 39 private TradeAfterSaleService afterSaleService;
35 40  
  41 + @Resource
  42 + private MemberUserApi memberUserApi;
  43 +
36 44 @GetMapping("/page")
37 45 @ApiOperation("获得交易售后分页")
38 46 @PreAuthorize("@ss.hasPermission('trade:after-sale:query')")
39   - public CommonResult<PageResult<TradeAfterSaleRespVO>> getAfterSalePage(@Valid TradeAfterSalePageReqVO pageVO) {
  47 + public CommonResult<PageResult<TradeAfterSaleRespPageItemVO>> getAfterSalePage(@Valid TradeAfterSalePageReqVO pageVO) {
40 48 PageResult<TradeAfterSaleDO> pageResult = afterSaleService.getAfterSalePage(pageVO);
41   - return success(TradeAfterSaleConvert.INSTANCE.convertPage(pageResult));
  49 + if (CollUtil.isEmpty(pageResult.getList())) {
  50 + return success(PageResult.empty());
  51 + }
  52 +
  53 + // 拼接数据
  54 + Map<Long, MemberUserRespDTO> memberUsers = memberUserApi.getUserMap(
  55 + convertSet(pageResult.getList(), TradeAfterSaleDO::getUserId));
  56 + return success(TradeAfterSaleConvert.INSTANCE.convertPage(pageResult, memberUsers));
42 57 }
43 58  
44 59 @PutMapping("/agree")
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSaleBaseVO.java
1 1 package cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo;
2 2  
3   -import cn.iocoder.yudao.module.trade.controller.admin.base.property.ProductPropertyRespVO;
  3 +import cn.iocoder.yudao.module.trade.controller.admin.base.product.property.ProductPropertyRespVO;
4 4 import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6 import org.springframework.format.annotation.DateTimeFormat;
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSaleRespVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSaleRespPageItemVO.java
1 1 package cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo;
2 2  
  3 +import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUserRespVO;
3 4 import io.swagger.annotations.ApiModel;
4 5 import io.swagger.annotations.ApiModelProperty;
5 6 import lombok.Data;
... ... @@ -8,11 +9,11 @@ import lombok.ToString;
8 9  
9 10 import java.time.LocalDateTime;
10 11  
11   -@ApiModel("管理后台 - 交易售后 Response VO")
  12 +@ApiModel("管理后台 - 交易售后分页的每一条记录 Response VO")
12 13 @Data
13 14 @EqualsAndHashCode(callSuper = true)
14 15 @ToString(callSuper = true)
15   -public class TradeAfterSaleRespVO extends TradeAfterSaleBaseVO {
  16 +public class TradeAfterSaleRespPageItemVO extends TradeAfterSaleBaseVO {
16 17  
17 18 @ApiModelProperty(value = "售后编号", required = true, example = "27630")
18 19 private Long id;
... ... @@ -20,4 +21,9 @@ public class TradeAfterSaleRespVO extends TradeAfterSaleBaseVO {
20 21 @ApiModelProperty(value = "创建时间", required = true)
21 22 private LocalDateTime createTime;
22 23  
  24 + /**
  25 + * 用户信息
  26 + */
  27 + private MemberUserRespVO user;
  28 +
23 29 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/member/package-info.java 0 → 100644
  1 +/**
  2 + * 占位符,可忽略
  3 + */
  4 +package cn.iocoder.yudao.module.trade.controller.admin.base.member;
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/member/user/MemberUserRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.controller.admin.base.member.user;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +
  7 +@ApiModel("管理后台 - 会员用户 Response VO")
  8 +@Data
  9 +public class MemberUserRespVO {
  10 +
  11 + @ApiModelProperty(value = "用户 ID", required = true, example = "1")
  12 + private Long id;
  13 +
  14 + @ApiModelProperty(value = "用户昵称", required = true, example = "芋道源码")
  15 + private String nickname;
  16 +
  17 + @ApiModelProperty(value = "用户头像", example = "https://www.iocoder.cn/xxx.png")
  18 + private String avatar;
  19 +
  20 +}
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/property/ProductPropertyRespVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/product/property/ProductPropertyRespVO.java
1   -package cn.iocoder.yudao.module.trade.controller.admin.base.property;
  1 +package cn.iocoder.yudao.module.trade.controller.admin.base.product.property;
2 2  
3 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6  
7   -@ApiModel("管理后台 - 商品规格 Request VO")
  7 +@ApiModel("管理后台 - 商品规格 Response VO")
8 8 @Data
9 9 public class ProductPropertyRespVO {
10 10  
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/TradeAfterSaleConvert.java
1 1 package cn.iocoder.yudao.module.trade.convert.aftersale;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
4 5 import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO;
5   -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespVO;
  6 +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespPageItemVO;
  7 +import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUserRespVO;
6 8 import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleCreateReqVO;
7 9 import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO;
8 10 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
... ... @@ -12,6 +14,8 @@ import org.mapstruct.Mapping;
12 14 import org.mapstruct.Mappings;
13 15 import org.mapstruct.factory.Mappers;
14 16  
  17 +import java.util.Map;
  18 +
15 19 @Mapper
16 20 public interface TradeAfterSaleConvert {
17 21  
... ... @@ -34,6 +38,15 @@ public interface TradeAfterSaleConvert {
34 38 PayRefundCreateReqDTO convert(String userIp, TradeAfterSaleDO afterSale,
35 39 TradeOrderProperties orderProperties);
36 40  
37   - PageResult<TradeAfterSaleRespVO> convertPage(PageResult<TradeAfterSaleDO> page);
  41 + MemberUserRespVO convert(MemberUserRespDTO bean);
  42 +
  43 + PageResult<TradeAfterSaleRespPageItemVO> convertPage(PageResult<TradeAfterSaleDO> page);
  44 +
  45 + default PageResult<TradeAfterSaleRespPageItemVO> convertPage(PageResult<TradeAfterSaleDO> pageResult,
  46 + Map<Long, MemberUserRespDTO> memberUsers) {
  47 + PageResult<TradeAfterSaleRespPageItemVO> pageVOResult = convertPage(pageResult);
  48 + pageVOResult.getList().forEach(item -> item.setUser(convert(memberUsers.get(item.getUserId()))));
  49 + return pageVOResult;
  50 + }
38 51  
39 52 }
... ...
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApi.java
1 1 package cn.iocoder.yudao.module.member.api.user;
2 2  
3   -import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO;
  3 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
4 4  
5 5 import java.util.Collection;
6 6 import java.util.List;
... ... @@ -21,7 +21,7 @@ public interface MemberUserApi {
21 21 * @param id 用户编号
22 22 * @return 用户信息
23 23 */
24   - UserRespDTO getUser(Long id);
  24 + MemberUserRespDTO getUser(Long id);
25 25  
26 26 /**
27 27 * 获得会员用户信息们
... ... @@ -29,7 +29,7 @@ public interface MemberUserApi {
29 29 * @param ids 用户编号的数组
30 30 * @return 用户信息们
31 31 */
32   - List<UserRespDTO> getUsers(Collection<Long> ids);
  32 + List<MemberUserRespDTO> getUsers(Collection<Long> ids);
33 33  
34 34 /**
35 35 * 获得会员用户 Map
... ... @@ -37,8 +37,8 @@ public interface MemberUserApi {
37 37 * @param ids 用户编号的数组
38 38 * @return 会员用户 Map
39 39 */
40   - default Map<Long, UserRespDTO> getUserMap(Collection<Long> ids) {
41   - return convertMap(getUsers(ids), UserRespDTO::getId);
  40 + default Map<Long, MemberUserRespDTO> getUserMap(Collection<Long> ids) {
  41 + return convertMap(getUsers(ids), MemberUserRespDTO::getId);
42 42 }
43 43  
44 44 /**
... ... @@ -47,6 +47,6 @@ public interface MemberUserApi {
47 47 * @param nickname 用户昵称,模糊匹配
48 48 * @return 用户信息的列表
49 49 */
50   - List<UserRespDTO> getUserListByNickname(String nickname);
  50 + List<MemberUserRespDTO> getUserListByNickname(String nickname);
51 51  
52 52 }
... ...
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/UserRespDTO.java renamed to yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java
... ... @@ -9,7 +9,7 @@ import lombok.Data;
9 9 * @author 芋道源码
10 10 */
11 11 @Data
12   -public class UserRespDTO {
  12 +public class MemberUserRespDTO {
13 13  
14 14 /**
15 15 * 用户ID
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/user/MemberUserApiImpl.java
1 1 package cn.iocoder.yudao.module.member.api.user;
2 2  
3   -import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO;
  3 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
4 4 import cn.iocoder.yudao.module.member.convert.user.UserConvert;
5 5 import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
6 6 import cn.iocoder.yudao.module.member.service.user.MemberUserService;
... ... @@ -24,18 +24,18 @@ public class MemberUserApiImpl implements MemberUserApi {
24 24 private MemberUserService userService;
25 25  
26 26 @Override
27   - public UserRespDTO getUser(Long id) {
  27 + public MemberUserRespDTO getUser(Long id) {
28 28 MemberUserDO user = userService.getUser(id);
29 29 return UserConvert.INSTANCE.convert2(user);
30 30 }
31 31  
32 32 @Override
33   - public List<UserRespDTO> getUsers(Collection<Long> ids) {
  33 + public List<MemberUserRespDTO> getUsers(Collection<Long> ids) {
34 34 return UserConvert.INSTANCE.convertList2(userService.getUserList(ids));
35 35 }
36 36  
37 37 @Override
38   - public List<UserRespDTO> getUserListByNickname(String nickname) {
  38 + public List<MemberUserRespDTO> getUserListByNickname(String nickname) {
39 39 return UserConvert.INSTANCE.convertList2(userService.getUserListByNickname(nickname));
40 40 }
41 41  
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/user/UserConvert.java
1 1 package cn.iocoder.yudao.module.member.convert.user;
2 2  
3   -import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO;
  3 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
4 4 import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoRespVO;
5 5 import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
6 6 import org.mapstruct.Mapper;
... ... @@ -15,8 +15,8 @@ public interface UserConvert {
15 15  
16 16 AppUserInfoRespVO convert(MemberUserDO bean);
17 17  
18   - UserRespDTO convert2(MemberUserDO bean);
  18 + MemberUserRespDTO convert2(MemberUserDO bean);
19 19  
20   - List<UserRespDTO> convertList2(List<MemberUserDO> list);
  20 + List<MemberUserRespDTO> convertList2(List<MemberUserDO> list);
21 21  
22 22 }
... ...
yudao-ui-admin/src/views/mall/trade/afterSale/bak.vue deleted
1   -<template>
2   - <div class="app-container">
3   - <!-- 搜索工作栏 -->
4   - <el-row :gutter="20">
5   - <el-form :model="queryParams" label-width="68px" size="small">
6   - <el-col :span="6" :xs="24">
7   - <el-form-item label="下单时间">
8   - <el-date-picker v-model="queryParams.date" type="daterange" range-separator="至"
9   - start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="rangePickerOptions" style="width: 240px"/>
10   - </el-form-item>
11   - </el-col>
12   - <el-col :span="6" :xs="24" style="line-height: 32px">
13   - <el-button type="primary" icon="el-icon-search" size="mini">搜索</el-button>
14   - <el-button icon="el-icon-refresh" size="mini">重置</el-button>
15   - <el-button icon="el-icon-document" size="mini">导出订单</el-button>
16   - </el-col>
17   - </el-form>
18   - </el-row>
19   -
20   - <!-- tab切换-->
21   - <el-tabs v-model="activeTabName" type="card">
22   - <el-tab-pane v-for="tabPane in tabPanes" :label="tabPane.text" :name="tabPane.name">
23   - <!-- table -->
24   - <el-table :data="tableData" :show-header="false" class="table-wrapper">
25   - <el-table-column>
26   - <template slot-scope="{ row }">
27   - <!-- 订单下的商品 -->
28   - <el-table :data="row.goods" border>
29   - <el-table-column label="商品信息" prop="spxx" header-align="center" width="auto" min-width="300">
30   - <div slot-scope="{ row, $index }" class="goods-info">
31   - <img :src="row.img"/>
32   - <span class="ellipsis-2" :title="row.name">{{row.name}}</span>
33   - </div>
34   - </el-table-column>
35   - <el-table-column label="订单金额" prop="ddje" align="center" width="100"/>
36   - <el-table-column label="买家" prop="mj" align="center" width="100"/>
37   - <el-table-column label="退款金额" prop="tkje" align="center" width="100"/>
38   - <el-table-column label="申请时间" prop="sqsj" align="center" width="180"/>
39   - <el-table-column label="退款状态" prop="tkzt" align="center" width="100"/>
40   - <el-table-column label="操作" align="center" width="100" fixed="right" >
41   - <el-button slot-scope="{row}" type="text">详情</el-button>
42   - </el-table-column>
43   - </el-table>
44   - </template>
45   - </el-table-column>
46   - </el-table>
47   - </el-tab-pane>
48   - </el-tabs>
49   - </div>
50   -</template>
51   -
52   -<script>
53   -const dicData = {
54   - refundStatus: [
55   - { label: '全部', value: 'qb' },
56   - { label: '申请维权', value: 'sqwq' },
57   - { label: '待转账', value: 'dzz' },
58   - { label: '维权结束', value: 'wqjs' },
59   - { label: '买家待退货', value: 'mjdth' },
60   - { label: '卖家待收货', value: 'mjdsh' },
61   - { label: '卖家已收货', value: 'mjysh' },
62   - { label: '卖家拒绝', value: 'mjjj' }
63   - ],
64   - refundWay: [
65   - { label: '全部', value: 'qb' },
66   - { label: '仅退款', value: 'jtk' },
67   - { label: '退货退款', value: 'thtk' }
68   - ],
69   - refundType: [
70   - { label: '全部', value: 'qb' },
71   - { label: '订单退款', value: 'ddtk' },
72   - { label: '售后退款', value: 'shtk' }
73   - ]
74   -}
75   -
76   -export default {
77   - name: "index",
78   - data () {
79   - return {
80   - dicData,
81   - rangePickerOptions,
82   - queryParams: {},
83   - activeTabName: 'all',
84   - tabPanes: [
85   - { text: '全部', name: 'all' },
86   - { text: '申请维权', name: 'sqwq' },
87   - { text: '待转账', name: 'dzz' },
88   - { text: '维权结束', name: 'wqjs' },
89   - { text: '买家待退货', name: 'mjdth' },
90   - { text: '卖家待收货', name: 'mjdsh' },
91   - { text: '卖家已收货', name: 'mjysh' },
92   - { text: '卖家拒绝', name: 'mjjj' }
93   - ],
94   - tableData: [
95   - {
96   - tkbh: '20221026220424001',
97   - ddbh: '20221026220424001',
98   - goods: [
99   - {
100   - name: '颜衫短袖男polo衫夏季翻领衣服潮牌休闲上衣夏天翻领半袖男士t恤',
101   - img: 'https://b2c-v5-yanshi.oss-cn-hangzhou.aliyuncs.com/upload/1/common/images/20220723/20220723115621165854858145027_SMALL.webp',
102   - ddje: '199',
103   - mj: '张三',
104   - tkje: 460,
105   - sqsj: '2022-11-19',
106   - tkzt: '申请维权(仅退款)'
107   - }
108   - ]
109   - },
110   - {
111   - tkbh: '20221026220424001',
112   - ddbh: '20221026220424001',
113   - goods: [
114   - {
115   - name: '颜衫短袖男polo衫夏季翻领衣服潮牌休闲上衣夏天翻领半袖男士t恤',
116   - img: 'https://b2c-v5-yanshi.oss-cn-hangzhou.aliyuncs.com/upload/1/common/images/20220723/20220723115621165854858145027_SMALL.webp',
117   - ddje: '199',
118   - mj: '张三',
119   - tkje: 460,
120   - sqsj: '2022-11-19',
121   - tkzt: '申请维权(仅退款)'
122   - }
123   - ]
124   - },
125   - {
126   - tkbh: '20221026220424001',
127   - ddbh: '20221026220424001',
128   - goods: [
129   - {
130   - name: '颜衫短袖男polo衫夏季翻领衣服潮牌休闲上衣夏天翻领半袖男士t恤',
131   - img: 'https://b2c-v5-yanshi.oss-cn-hangzhou.aliyuncs.com/upload/1/common/images/20220723/20220723115621165854858145027_SMALL.webp',
132   - ddje: '199',
133   - mj: '张三',
134   - tkje: 460,
135   - sqsj: '2022-11-19',
136   - tkzt: '申请维权(仅退款)'
137   - }
138   - ]
139   - }
140   - ]
141   - }
142   - },
143   - methods: {
144   - goToDetail (row) {
145   - this.$router.push({ path: '/mall/trade/order/detail', query: { orderNo: row.orderNo }})
146   - }
147   - }
148   - }
149   -</script>
yudao-ui-admin/src/views/mall/trade/afterSale/index.vue
... ... @@ -46,20 +46,28 @@
46 46 <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
47 47 </el-row>
48 48  
  49 + <!-- Tab 选项:真正的内容在 Lab -->
  50 + <el-tabs v-model="activeTab" type="card" @tab-click="tabClick" style="margin-top: -40px;">
  51 + <el-tab-pane v-for="tab in statusTabs" :key="tab.value" :label="tab.label" :name="tab.value" />
  52 + </el-tabs>
  53 +
49 54 <!-- 列表 -->
50 55 <el-table v-loading="loading" :data="list">
51 56 <el-table-column label="退款编号" align="center" prop="no" />
52   - <el-table-column label="订单编号" align="center" prop="orderNo" />
53   - <el-table-column label="订单编号" align="center" prop="orderNo" />
54   - <el-table-column label="商品信息" align="center" prop="status" width="auto" min-width="300">
  57 + <el-table-column label="订单编号" align="center" prop="orderNo" /> <!-- TODO 芋艿:未来要加个订单链接 -->
  58 + <el-table-column label="商品信息" align="center" prop="spuName" width="auto" min-width="300">
55 59 <!-- TODO @小红:样式不太对,辛苦改改 -->
56 60 <!-- <div slot-scope="{ row }" class="goods-info">-->
57 61 <!-- <img :src="row.picUrl"/>-->
58 62 <!-- <span class="ellipsis-2" :title="row.name">{{row.name}}</span>-->
59 63 <!-- </div>-->
60 64 </el-table-column>
61   - <el-table-column label="订单金额" align="center" prop="refundPrice" />
62   - <el-table-column label="买家" align="center" prop="userId" />
  65 + <el-table-column label="订单金额" align="center" prop="refundPrice">
  66 + <template v-slot="scope">
  67 + <span>¥{{ (scope.row.refundPrice / 100.0).toFixed(2) }}</span>
  68 + </template>
  69 + </el-table-column>
  70 + <el-table-column label="买家" align="center" prop="user.nickname" /> <!-- TODO 芋艿:未来要加个会员链接 -->
63 71 <el-table-column label="申请时间" align="center" prop="createTime" width="180">
64 72 <template v-slot="scope">
65 73 <span>{{ parseTime(scope.row.createTime) }}</span>
... ... @@ -77,8 +85,9 @@
77 85 </el-table-column>
78 86 <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
79 87 <template v-slot="scope">
80   -<!-- <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"-->
81   -<!-- v-hasPermi="['trade:after-sale:update']">修改</el-button>-->
  88 + <el-button size="mini" type="text" icon="el-icon-thumb"
  89 + >处理退款</el-button>
  90 +<!-- @click="handleUpdate(scope.row)" v-hasPermi="['trade:after-sale:update']"-->
82 91 </template>
83 92 </el-table-column>
84 93 </el-table>
... ... @@ -91,6 +100,7 @@
91 100 <script>
92 101 import { getAfterSalePage } from "@/api/mall/trade/afterSale";
93 102 import { datePickerOptions } from "@/utils/constants";
  103 +import {DICT_TYPE, getDictDatas} from "@/utils/dict";
94 104  
95 105 export default {
96 106 name: "AfterSale",
... ... @@ -124,12 +134,25 @@ export default {
124 134 way: null,
125 135 type: null,
126 136 },
  137 + // Tab 筛选
  138 + activeTab: 'all',
  139 + statusTabs: [{
  140 + label: '全部',
  141 + value: 'all'
  142 + }],
127 143 // 静态变量
128 144 datePickerOptions: datePickerOptions
129 145 };
130 146 },
131 147 created() {
132 148 this.getList();
  149 + // 设置 statuses 过滤
  150 + for (const dict of getDictDatas(DICT_TYPE.TRADE_AFTER_SALE_STATUS)) {
  151 + this.statusTabs.push({
  152 + label: dict.label,
  153 + value: dict.value
  154 + })
  155 + }
133 156 },
134 157 methods: {
135 158 /** 查询列表 */
... ... @@ -145,13 +168,23 @@ export default {
145 168 /** 搜索按钮操作 */
146 169 handleQuery() {
147 170 this.queryParams.pageNo = 1;
  171 + this.activeTab = this.queryParams.status ? this.queryParams.status : 'all'; // 处理 tab
148 172 this.getList();
149 173 },
150 174 /** 重置按钮操作 */
151 175 resetQuery() {
152 176 this.resetForm("queryForm");
  177 + this.activeTab = 'all'; // 处理 tab
153 178 this.handleQuery();
154 179 },
  180 + /** tab 切换 */
  181 + tabClick(tab) {
  182 + this.queryParams.status = tab.name === 'all' ? undefined : tab.name;
  183 + this.getList();
  184 + },
  185 + goToDetail (row) {
  186 + this.$router.push({ path: '/mall/trade/order/detail', query: { orderNo: row.orderNo }})
  187 + }
155 188 }
156 189 };
157 190 </script>
... ...