Merge branch 'main' of http://hmgit.huamar.com:8881/yanghaodong/zdsc
commit
55c9b8ccc1
@ -0,0 +1,113 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.controller.admin.verifylog;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
|
||||||
|
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
|
||||||
|
import cn.iocoder.yudao.module.trade.convert.verifylog.VerifyLogConvert;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
import javax.servlet.http.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||||
|
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.trade.controller.admin.verifylog.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.trade.dal.dataobject.verifylog.VerifyLogDO;
|
||||||
|
import cn.iocoder.yudao.module.trade.service.verifylog.VerifyLogService;
|
||||||
|
|
||||||
|
@Tag(name = "管理后台 - 门店核销记录")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/trade/verify-log")
|
||||||
|
@Validated
|
||||||
|
public class VerifyLogController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private VerifyLogService verifyLogService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private MemberUserApi memberUserApi;
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@Operation(summary = "创建门店核销记录")
|
||||||
|
@PreAuthorize("@ss.hasPermission('trade:verify-log:create')")
|
||||||
|
public CommonResult<Long> createVerifyLog(@Valid @RequestBody VerifyLogSaveReqVO createReqVO) {
|
||||||
|
return success(verifyLogService.createVerifyLog(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@Operation(summary = "更新门店核销记录")
|
||||||
|
@PreAuthorize("@ss.hasPermission('trade:verify-log:update')")
|
||||||
|
public CommonResult<Boolean> updateVerifyLog(@Valid @RequestBody VerifyLogSaveReqVO updateReqVO) {
|
||||||
|
verifyLogService.updateVerifyLog(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除门店核销记录")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('trade:verify-log:delete')")
|
||||||
|
public CommonResult<Boolean> deleteVerifyLog(@RequestParam("id") Long id) {
|
||||||
|
verifyLogService.deleteVerifyLog(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@Operation(summary = "获得门店核销记录")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
@PreAuthorize("@ss.hasPermission('trade:verify-log:query')")
|
||||||
|
public CommonResult<VerifyLogRespVO> getVerifyLog(@RequestParam("id") Long id) {
|
||||||
|
VerifyLogDO verifyLog = verifyLogService.getVerifyLog(id);
|
||||||
|
return success(BeanUtils.toBean(verifyLog, VerifyLogRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@Operation(summary = "获得门店核销记录分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('trade:verify-log:query')")
|
||||||
|
public CommonResult<PageResult<VerifyLogRespVO>> getVerifyLogPage(@Valid VerifyLogPageReqVO pageReqVO) {
|
||||||
|
PageResult<VerifyLogRespVO> pageResult = verifyLogService.getVerifyLogPage(pageReqVO);
|
||||||
|
List<MemberUserRespDTO> users = memberUserApi.getUserList(
|
||||||
|
convertSet(pageResult.getList(), VerifyLogRespVO::getMebId));
|
||||||
|
return success(VerifyLogConvert.INSTANCE.convertPage(pageResult, users));
|
||||||
|
// return success(BeanUtils.toBean(pageResult, VerifyLogRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/export-excel")
|
||||||
|
@Operation(summary = "导出门店核销记录 Excel")
|
||||||
|
@PreAuthorize("@ss.hasPermission('trade:verify-log:export')")
|
||||||
|
@ApiAccessLog(operateType = EXPORT)
|
||||||
|
public void exportVerifyLogExcel(@Valid VerifyLogPageReqVO pageReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
|
List<VerifyLogRespVO> list = verifyLogService.getVerifyLogPage(pageReqVO).getList();
|
||||||
|
// 导出 Excel
|
||||||
|
ExcelUtils.write(response, "门店核销记录.xls", "数据", VerifyLogRespVO.class,
|
||||||
|
BeanUtils.toBean(list, VerifyLogRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/updateAlready")
|
||||||
|
@Operation(summary = "结算核销统计")
|
||||||
|
@PreAuthorize("@ss.hasPermission('member:distribution-statistics:update')")
|
||||||
|
public CommonResult<Boolean> updateAlready(@Valid @RequestBody VerifyLogSaveReqVO updateReqVO) {
|
||||||
|
verifyLogService.updateAlready(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.controller.admin.verifylog.vo;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 门店核销记录分页 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class VerifyLogPageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@Schema(description = "会员id", example = "11234")
|
||||||
|
private Long mebId;
|
||||||
|
|
||||||
|
@Schema(description = "订单id", example = "20689")
|
||||||
|
private Long orderId;
|
||||||
|
|
||||||
|
@Schema(description = "核销编码")
|
||||||
|
private String pickUpVerifyCode;
|
||||||
|
|
||||||
|
@Schema(description = "核销时间")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] verifyTime;
|
||||||
|
|
||||||
|
@Schema(description = "兑换状态", example = "1")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Schema(description = "备注", example = "你猜")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.controller.admin.verifylog.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.alibaba.excel.annotation.*;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 门店核销记录 Response VO")
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class VerifyLogRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24309")
|
||||||
|
@ExcelProperty("订单编号")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "会员id", example = "11234")
|
||||||
|
@ExcelProperty("会员id")
|
||||||
|
private Long mebId;
|
||||||
|
|
||||||
|
@Schema(description = "订单id", example = "20689")
|
||||||
|
@ExcelProperty("订单id")
|
||||||
|
private Long orderId;
|
||||||
|
|
||||||
|
@Schema(description = "核销编码")
|
||||||
|
@ExcelProperty("核销编码")
|
||||||
|
private String pickUpVerifyCode;
|
||||||
|
|
||||||
|
@Schema(description = "核销时间")
|
||||||
|
@ExcelProperty("核销时间")
|
||||||
|
private LocalDateTime verifyTime;
|
||||||
|
|
||||||
|
@Schema(description = "兑换状态", example = "1")
|
||||||
|
@ExcelProperty("兑换状态")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Schema(description = "备注", example = "你猜")
|
||||||
|
@ExcelProperty("备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@ExcelProperty("创建时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
@Schema(description = "用户昵称", example = "2")
|
||||||
|
@ExcelProperty("用户昵称")
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
@Schema(description = "手机号", example = "2")
|
||||||
|
@ExcelProperty("手机号")
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
@Schema(description = "已结算", example = "2")
|
||||||
|
@ExcelProperty("已结算")
|
||||||
|
private Integer haveAlready;
|
||||||
|
|
||||||
|
@Schema(description = "未结算", example = "2")
|
||||||
|
@ExcelProperty("未结算")
|
||||||
|
private Integer unAlready;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.controller.admin.verifylog.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 门店核销记录新增/修改 Request VO")
|
||||||
|
@Data
|
||||||
|
public class VerifyLogSaveReqVO {
|
||||||
|
|
||||||
|
@Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24309")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "会员id", example = "11234")
|
||||||
|
private Long mebId;
|
||||||
|
|
||||||
|
@Schema(description = "订单id", example = "20689")
|
||||||
|
private Long orderId;
|
||||||
|
|
||||||
|
@Schema(description = "核销编码")
|
||||||
|
private String pickUpVerifyCode;
|
||||||
|
|
||||||
|
@Schema(description = "核销时间")
|
||||||
|
private LocalDateTime verifyTime;
|
||||||
|
|
||||||
|
@Schema(description = "兑换状态", example = "1")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Schema(description = "备注", example = "你猜")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.convert.verifylog;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
|
||||||
|
import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO;
|
||||||
|
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
|
||||||
|
import cn.iocoder.yudao.module.trade.controller.admin.verifylog.vo.VerifyLogRespVO;
|
||||||
|
import cn.iocoder.yudao.module.trade.dal.dataobject.verifylog.VerifyLogDO;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface VerifyLogConvert {
|
||||||
|
VerifyLogConvert INSTANCE = Mappers.getMapper(VerifyLogConvert.class);
|
||||||
|
|
||||||
|
default PageResult<VerifyLogRespVO> convertPage(PageResult<VerifyLogRespVO> pageResult, List<MemberUserRespDTO> users) {
|
||||||
|
PageResult<VerifyLogRespVO> voPageResult = convertPage(pageResult);
|
||||||
|
// user 拼接
|
||||||
|
Map<Long, MemberUserRespDTO> userMap = convertMap(users, MemberUserRespDTO::getId);
|
||||||
|
voPageResult.getList().forEach(record -> {
|
||||||
|
MapUtils.findAndThen(userMap, record.getMebId(),
|
||||||
|
memberUserRespDTO -> record.setNickname(memberUserRespDTO.getNickname()).setPhone(memberUserRespDTO.getMobile()));
|
||||||
|
});
|
||||||
|
return voPageResult;
|
||||||
|
}
|
||||||
|
PageResult<VerifyLogRespVO> convertPage(PageResult<VerifyLogRespVO> page);
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.dal.dataobject.verifylog;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 门店核销记录 DO
|
||||||
|
*
|
||||||
|
* @author 郑大钒水
|
||||||
|
*/
|
||||||
|
@TableName("trade_verify_log")
|
||||||
|
@KeySequence("trade_verify_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class VerifyLogDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单编号
|
||||||
|
*/
|
||||||
|
@TableId
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 会员id
|
||||||
|
*/
|
||||||
|
private Long mebId;
|
||||||
|
/**
|
||||||
|
* 订单id
|
||||||
|
*/
|
||||||
|
private Long orderId;
|
||||||
|
/**
|
||||||
|
* 核销编码
|
||||||
|
*/
|
||||||
|
private String pickUpVerifyCode;
|
||||||
|
/**
|
||||||
|
* 核销时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime verifyTime;
|
||||||
|
/**
|
||||||
|
* 兑换状态
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.dal.mysql.verifylog;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.module.trade.dal.dataobject.verifylog.VerifyLogDO;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import cn.iocoder.yudao.module.trade.controller.admin.verifylog.vo.*;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 门店核销记录 Mapper
|
||||||
|
*
|
||||||
|
* @author 郑大钒水
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface VerifyLogMapper extends BaseMapperX<VerifyLogDO> {
|
||||||
|
|
||||||
|
default PageResult<VerifyLogDO> selectPage(VerifyLogPageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<VerifyLogDO>()
|
||||||
|
.eqIfPresent(VerifyLogDO::getMebId, reqVO.getMebId())
|
||||||
|
.eqIfPresent(VerifyLogDO::getOrderId, reqVO.getOrderId())
|
||||||
|
.eqIfPresent(VerifyLogDO::getPickUpVerifyCode, reqVO.getPickUpVerifyCode())
|
||||||
|
.betweenIfPresent(VerifyLogDO::getVerifyTime, reqVO.getVerifyTime())
|
||||||
|
.eqIfPresent(VerifyLogDO::getStatus, reqVO.getStatus())
|
||||||
|
.eqIfPresent(VerifyLogDO::getRemark, reqVO.getRemark())
|
||||||
|
.betweenIfPresent(VerifyLogDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
.orderByDesc(VerifyLogDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Select({"<script>",
|
||||||
|
"SELECT\n" +
|
||||||
|
"\tl.meb_id,\n" +
|
||||||
|
"\tsum( CASE WHEN l.STATUS = 1 THEN 1 ELSE 0 END ) AS 'have_already',\n" +
|
||||||
|
"\tsum( CASE WHEN l.STATUS = 0 THEN 1 ELSE 0 END ) AS 'un_already' \n" +
|
||||||
|
"FROM\n" +
|
||||||
|
"\ttrade_verify_log l",
|
||||||
|
"where l.deleted = FALSE ",
|
||||||
|
// "<if test='status !=null and status!=\"\" '>" ,
|
||||||
|
// " and l.status = #{status}" ,
|
||||||
|
// "</if> ",
|
||||||
|
"GROUP BY\n" +
|
||||||
|
"\tl.meb_id\n" +
|
||||||
|
"order BY\n" +
|
||||||
|
"\tl.meb_id\n" +
|
||||||
|
"</script>"})
|
||||||
|
IPage<VerifyLogRespVO> selectPage1(IPage<?> page, @Param("reqVO") VerifyLogPageReqVO reqVO);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.service.verifylog;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
import cn.iocoder.yudao.module.trade.controller.admin.verifylog.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.trade.dal.dataobject.verifylog.VerifyLogDO;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 门店核销记录 Service 接口
|
||||||
|
*
|
||||||
|
* @author 郑大钒水
|
||||||
|
*/
|
||||||
|
public interface VerifyLogService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建门店核销记录
|
||||||
|
*
|
||||||
|
* @param createReqVO 创建信息
|
||||||
|
* @return 编号
|
||||||
|
*/
|
||||||
|
Long createVerifyLog(@Valid VerifyLogSaveReqVO createReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新门店核销记录
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateVerifyLog(@Valid VerifyLogSaveReqVO updateReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除门店核销记录
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
*/
|
||||||
|
void deleteVerifyLog(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得门店核销记录
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
* @return 门店核销记录
|
||||||
|
*/
|
||||||
|
VerifyLogDO getVerifyLog(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得门店核销记录分页
|
||||||
|
*
|
||||||
|
* @param pageReqVO 分页查询
|
||||||
|
* @return 门店核销记录分页
|
||||||
|
*/
|
||||||
|
PageResult<VerifyLogRespVO> getVerifyLogPage(VerifyLogPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新核销统计
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateAlready(@Valid VerifyLogSaveReqVO updateReqVO);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,84 @@
|
|||||||
|
package cn.iocoder.yudao.module.trade.service.verifylog;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import cn.iocoder.yudao.module.trade.controller.admin.verifylog.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.trade.dal.dataobject.verifylog.VerifyLogDO;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.trade.dal.mysql.verifylog.VerifyLogMapper;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 门店核销记录 Service 实现类
|
||||||
|
*
|
||||||
|
* @author 郑大钒水
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class VerifyLogServiceImpl implements VerifyLogService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private VerifyLogMapper verifyLogMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long createVerifyLog(VerifyLogSaveReqVO createReqVO) {
|
||||||
|
// 插入
|
||||||
|
VerifyLogDO verifyLog = BeanUtils.toBean(createReqVO, VerifyLogDO.class);
|
||||||
|
verifyLogMapper.insert(verifyLog);
|
||||||
|
// 返回
|
||||||
|
return verifyLog.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateVerifyLog(VerifyLogSaveReqVO updateReqVO) {
|
||||||
|
// 校验存在
|
||||||
|
validateVerifyLogExists(updateReqVO.getId());
|
||||||
|
// 更新
|
||||||
|
VerifyLogDO updateObj = BeanUtils.toBean(updateReqVO, VerifyLogDO.class);
|
||||||
|
verifyLogMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteVerifyLog(Long id) {
|
||||||
|
// 校验存在
|
||||||
|
validateVerifyLogExists(id);
|
||||||
|
// 删除
|
||||||
|
verifyLogMapper.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateVerifyLogExists(Long id) {
|
||||||
|
if (verifyLogMapper.selectById(id) == null) {
|
||||||
|
throw exception(VERIFY_LOG_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VerifyLogDO getVerifyLog(Long id) {
|
||||||
|
return verifyLogMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<VerifyLogRespVO> getVerifyLogPage(VerifyLogPageReqVO pageReqVO) {
|
||||||
|
IPage<VerifyLogRespVO> pageResult = verifyLogMapper.selectPage1(MyBatisUtils.buildPage(pageReqVO),pageReqVO);
|
||||||
|
return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateAlready(VerifyLogSaveReqVO updateReqVO) {
|
||||||
|
// 结算
|
||||||
|
verifyLogMapper.update(new UpdateWrapper<VerifyLogDO>().lambda().set(VerifyLogDO::getStatus,1).eq(VerifyLogDO::getMebId,updateReqVO.getMebId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package cn.iocoder.yudao.module.pay.api.wallet.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PayWalletRespDTO {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
private String nickname;
|
||||||
|
private String avatar;
|
||||||
|
@NotNull(message = "用户编号不能为空")
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
@NotNull(message = "用户类型不能为空")
|
||||||
|
private Integer userType;
|
||||||
|
|
||||||
|
@NotNull(message = "余额,单位分不能为空")
|
||||||
|
private Integer balance;
|
||||||
|
|
||||||
|
@NotNull(message = "累计支出,单位分不能为空")
|
||||||
|
private Integer totalExpense;
|
||||||
|
|
||||||
|
@NotNull(message = "累计充值,单位分不能为空")
|
||||||
|
private Integer totalRecharge;
|
||||||
|
|
||||||
|
@NotNull(message = "冻结金额,单位分不能为空")
|
||||||
|
private Integer freezePrice;
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
package cn.iocoder.yudao.module.pay.api.wallet;
|
||||||
|
|
||||||
|
import cn.hutool.core.lang.Assert;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.module.member.api.distributionconfig.vo.DistributionConfigRespDTO;
|
||||||
|
import cn.iocoder.yudao.module.pay.api.wallet.dto.PayWalletDTO;
|
||||||
|
import cn.iocoder.yudao.module.pay.api.wallet.dto.PayWalletTransactionDTO;
|
||||||
|
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
|
||||||
|
import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
|
||||||
|
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
|
||||||
|
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO;
|
||||||
|
import cn.iocoder.yudao.module.pay.dal.mysql.wallet.PayWalletMapper;
|
||||||
|
import cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum;
|
||||||
|
import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
|
||||||
|
import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
|
||||||
|
import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService;
|
||||||
|
import cn.iocoder.yudao.module.pay.service.wallet.PayWalletTransactionService;
|
||||||
|
import cn.iocoder.yudao.module.pay.service.wallet.bo.WalletTransactionCreateReqBO;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*;
|
||||||
|
import static cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum.PAYMENT;
|
||||||
|
import static cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum.PAYMENT_REFUND;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钱包 Service 实现类
|
||||||
|
*
|
||||||
|
* @author jason
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Slf4j
|
||||||
|
public class PayWalletApiImpl implements PayWalletApi {
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
@Lazy // 延迟加载,避免循环依赖
|
||||||
|
private PayWalletService payWalletService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PayWalletDTO getOrCreateWallet(Long userId, Integer userType) {
|
||||||
|
return BeanUtils.toBean(payWalletService.getOrCreateWallet(userId,userType), PayWalletDTO.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PayWalletDTO getWallet(Long walletId) {
|
||||||
|
return BeanUtils.toBean(payWalletService.getWallet(walletId), PayWalletDTO.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PayWalletTransactionDTO reduceWalletBalance(Long walletId, Long bizId, PayWalletBizTypeEnum bizType, Integer price) {
|
||||||
|
return BeanUtils.toBean(payWalletService.reduceWalletBalance(walletId,bizId,bizType,price), PayWalletTransactionDTO.class);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public PayWalletTransactionDTO reduceWalletBalance1(Long userId, Long bizId, PayWalletBizTypeEnum bizType, Integer price) {
|
||||||
|
return BeanUtils.toBean(payWalletService.reduceWalletBalance1(userId,bizId,bizType,price), PayWalletTransactionDTO.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PayWalletTransactionDTO addWalletBalance(Long walletId, String bizId, PayWalletBizTypeEnum bizType, Integer price) {
|
||||||
|
return BeanUtils.toBean(payWalletService.addWalletBalance(walletId,bizId,bizType,price), PayWalletTransactionDTO.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void freezePrice(Long id, Integer price) {
|
||||||
|
payWalletService.freezePrice(id,price);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unfreezePrice(Long id, Integer price) {
|
||||||
|
payWalletService.unfreezePrice(id,price);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 门店核销记录 VO
|
||||||
|
export interface VerifyLogVO {
|
||||||
|
id: number // 订单编号
|
||||||
|
mebId: number // 会员id
|
||||||
|
orderId: number // 订单id
|
||||||
|
pickUpVerifyCode: string // 核销编码
|
||||||
|
verifyTime: Date // 核销时间
|
||||||
|
status: string // 兑换状态
|
||||||
|
remark: string // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
// 门店核销记录 API
|
||||||
|
export const VerifyLogApi = {
|
||||||
|
// 查询门店核销记录分页
|
||||||
|
getVerifyLogPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/trade/verify-log/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询门店核销记录详情
|
||||||
|
getVerifyLog: async (id: number) => {
|
||||||
|
return await request.get({ url: `/trade/verify-log/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增门店核销记录
|
||||||
|
createVerifyLog: async (data: VerifyLogVO) => {
|
||||||
|
return await request.post({ url: `/trade/verify-log/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改门店核销记录
|
||||||
|
updateVerifyLog: async (data: VerifyLogVO) => {
|
||||||
|
return await request.put({ url: `/trade/verify-log/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除门店核销记录
|
||||||
|
deleteVerifyLog: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/trade/verify-log/delete?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 导出门店核销记录 Excel
|
||||||
|
exportVerifyLog: async (params) => {
|
||||||
|
return await request.download({ url: `/trade/verify-log/export-excel`, params })
|
||||||
|
},
|
||||||
|
// 结算核销统计
|
||||||
|
updateAlready: async (data: VerifyLogVO) => {
|
||||||
|
return await request.put({ url: `/trade/verify-log/updateAlready`, data })
|
||||||
|
},
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
<template>
|
||||||
|
<div class="flex flex-col gap-2 bg-[var(--el-bg-color-overlay)] p-6">
|
||||||
|
<div class="flex items-center justify-between text-gray-500">
|
||||||
|
<span>{{ title }}</span>
|
||||||
|
<el-tag>{{ tag }}</el-tag>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-row items-baseline justify-between">
|
||||||
|
<CountTo :prefix="prefix" :end-val="value" :decimals="decimals" class="text-3xl" />
|
||||||
|
<span :class="toNumber(percent) > 0 ? 'text-red-500' : 'text-green-500'">
|
||||||
|
{{ Math.abs(toNumber(percent)) }}%
|
||||||
|
<Icon :icon="toNumber(percent) > 0 ? 'ep:caret-top' : 'ep:caret-bottom'" class="!text-sm" />
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<el-divider class="mb-1! mt-2!" />
|
||||||
|
<div class="flex flex-row items-center justify-between text-sm">
|
||||||
|
<span class="text-gray-500">昨日数据</span>
|
||||||
|
<span>{{ prefix || '' }}{{ reference }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { propTypes } from '@/utils/propTypes'
|
||||||
|
import { toNumber } from 'lodash-es'
|
||||||
|
import { calculateRelativeRate } from '@/utils'
|
||||||
|
|
||||||
|
/** 交易对照卡片 */
|
||||||
|
defineOptions({ name: 'ComparisonCard' })
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
title: propTypes.string.def('').isRequired,
|
||||||
|
tag: propTypes.string.def(''),
|
||||||
|
prefix: propTypes.string.def(''),
|
||||||
|
value: propTypes.number.def(0).isRequired,
|
||||||
|
reference: propTypes.number.def(0).isRequired,
|
||||||
|
decimals: propTypes.number.def(0)
|
||||||
|
})
|
||||||
|
|
||||||
|
// 计算环比
|
||||||
|
const percent = computed(() =>
|
||||||
|
calculateRelativeRate(props.value as number, props.reference as number)
|
||||||
|
)
|
||||||
|
</script>
|
@ -0,0 +1,91 @@
|
|||||||
|
<template>
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<CardTitle title="用户统计" />
|
||||||
|
</template>
|
||||||
|
<!-- 折线图 -->
|
||||||
|
<Echart :height="300" :options="lineChartOptions" />
|
||||||
|
</el-card>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
import { EChartsOption } from 'echarts'
|
||||||
|
import * as MemberStatisticsApi from '@/api/mall/statistics/member'
|
||||||
|
import { formatDate } from '@/utils/formatTime'
|
||||||
|
import { CardTitle } from '@/components/Card'
|
||||||
|
|
||||||
|
/** 会员用户统计卡片 */
|
||||||
|
defineOptions({ name: 'MemberStatisticsCard' })
|
||||||
|
|
||||||
|
const loading = ref(true) // 加载中
|
||||||
|
/** 折线图配置 */
|
||||||
|
const lineChartOptions = reactive<EChartsOption>({
|
||||||
|
dataset: {
|
||||||
|
dimensions: ['date', 'count'],
|
||||||
|
source: []
|
||||||
|
},
|
||||||
|
grid: {
|
||||||
|
left: 20,
|
||||||
|
right: 20,
|
||||||
|
bottom: 20,
|
||||||
|
top: 80,
|
||||||
|
containLabel: true
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
top: 50
|
||||||
|
},
|
||||||
|
series: [{ name: '注册量', type: 'line', smooth: true, areaStyle: {} }],
|
||||||
|
toolbox: {
|
||||||
|
feature: {
|
||||||
|
// 数据区域缩放
|
||||||
|
dataZoom: {
|
||||||
|
yAxisIndex: false // Y轴不缩放
|
||||||
|
},
|
||||||
|
brush: {
|
||||||
|
type: ['lineX', 'clear'] // 区域缩放按钮、还原按钮
|
||||||
|
},
|
||||||
|
saveAsImage: { show: true, name: '会员统计' } // 保存为图片
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: 'axis',
|
||||||
|
axisPointer: {
|
||||||
|
type: 'cross'
|
||||||
|
},
|
||||||
|
padding: [5, 10]
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'category',
|
||||||
|
boundaryGap: false,
|
||||||
|
axisTick: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
formatter: (date: string) => formatDate(date, 'MM-DD')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
axisTick: {
|
||||||
|
show: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}) as EChartsOption
|
||||||
|
|
||||||
|
const getMemberRegisterCountList = async () => {
|
||||||
|
loading.value = true
|
||||||
|
// 查询最近一月数据
|
||||||
|
const beginTime = dayjs().subtract(30, 'd').startOf('d')
|
||||||
|
const endTime = dayjs().endOf('d')
|
||||||
|
const list = await MemberStatisticsApi.getMemberRegisterCountList(beginTime, endTime)
|
||||||
|
// 更新 Echarts 数据
|
||||||
|
if (lineChartOptions.dataset && lineChartOptions.dataset['source']) {
|
||||||
|
lineChartOptions.dataset['source'] = list
|
||||||
|
}
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 初始化 **/
|
||||||
|
onMounted(() => {
|
||||||
|
getMemberRegisterCountList()
|
||||||
|
})
|
||||||
|
</script>
|
@ -0,0 +1,82 @@
|
|||||||
|
<template>
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<CardTitle title="快捷入口" />
|
||||||
|
</template>
|
||||||
|
<div class="flex flex-row flex-wrap gap-8 p-4">
|
||||||
|
<div
|
||||||
|
v-for="menu in menuList"
|
||||||
|
:key="menu.name"
|
||||||
|
class="h-20 w-20% flex flex-col cursor-pointer items-center justify-center gap-2"
|
||||||
|
@click="handleMenuClick(menu.routerName)"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
:class="menu.bgColor"
|
||||||
|
class="h-48px w-48px flex items-center justify-center rounded text-white"
|
||||||
|
>
|
||||||
|
<Icon :icon="menu.icon" class="text-7.5!" />
|
||||||
|
</div>
|
||||||
|
<span>{{ menu.name }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
/** 快捷入口卡片 */
|
||||||
|
import { CardTitle } from '@/components/Card'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ShortcutCard' })
|
||||||
|
|
||||||
|
const router = useRouter() // 路由
|
||||||
|
|
||||||
|
/** 菜单列表 */
|
||||||
|
const menuList = [
|
||||||
|
{ name: '用户管理', icon: 'ep:user-filled', bgColor: 'bg-red-400', routerName: 'MemberUser' },
|
||||||
|
{
|
||||||
|
name: '商品管理',
|
||||||
|
icon: 'fluent-mdl2:product',
|
||||||
|
bgColor: 'bg-orange-400',
|
||||||
|
routerName: 'ProductSpu'
|
||||||
|
},
|
||||||
|
{ name: '订单管理', icon: 'ep:list', bgColor: 'bg-yellow-500', routerName: 'TradeOrder' },
|
||||||
|
{
|
||||||
|
name: '售后管理',
|
||||||
|
icon: 'ri:refund-2-line',
|
||||||
|
bgColor: 'bg-green-600',
|
||||||
|
routerName: 'TradeAfterSale'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '分销管理',
|
||||||
|
icon: 'fa-solid:project-diagram',
|
||||||
|
bgColor: 'bg-cyan-500',
|
||||||
|
routerName: 'TradeBrokerageUser'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '优惠券',
|
||||||
|
icon: 'ep:ticket',
|
||||||
|
bgColor: 'bg-blue-500',
|
||||||
|
routerName: 'PromotionCoupon'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '拼团活动',
|
||||||
|
icon: 'fa:group',
|
||||||
|
bgColor: 'bg-purple-500',
|
||||||
|
routerName: 'PromotionBargainActivity'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '佣金提现',
|
||||||
|
icon: 'vaadin:money-withdraw',
|
||||||
|
bgColor: 'bg-rose-500',
|
||||||
|
routerName: 'TradeBrokerageWithdraw'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跳转到菜单对应页面
|
||||||
|
*
|
||||||
|
* @param routerName 路由页面组件的名称
|
||||||
|
*/
|
||||||
|
const handleMenuClick = (routerName: string) => {
|
||||||
|
router.push({ name: routerName })
|
||||||
|
}
|
||||||
|
</script>
|
Loading…
Reference in New Issue