mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-05-07 03:20:06 +08:00
Merge branch 'dev' of http://192.168.2.2:8099/jsowell/jsowell-charger-web into dev
# Conflicts: # jsowell-ui/src/views/order/order/orderDetail.vue
This commit is contained in:
@@ -63,6 +63,11 @@ public class OrderController extends BaseController {
|
||||
if (StringUtils.isEmpty(memberId)) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_TOKEN_ERROR);
|
||||
}
|
||||
String appId = request.getHeader("appId");
|
||||
if (StringUtils.isBlank(appId)) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_QUERY_WECHAT_APP_ID_IS_NULL);
|
||||
}
|
||||
dto.setAppId(appId);
|
||||
dto.setMemberId(memberId);
|
||||
// 生成订单
|
||||
dto.setStartMode(Constants.ONE); // 启动方式 1-app启动
|
||||
|
||||
@@ -247,7 +247,7 @@ public class PayController extends BaseController {
|
||||
*/
|
||||
@PostMapping("/rechargeBalance")
|
||||
public RestApiResponse<?> rechargeBalance(HttpServletRequest request, @RequestBody WeixinPayDTO dto) {
|
||||
logger.info("adapay会员充值余额 param:{}", dto.toString());
|
||||
logger.info("adapay会员充值余额 param:{}", JSONObject.toJSONString(dto));
|
||||
RestApiResponse<?> response;
|
||||
try {
|
||||
if (StringUtils.isBlank(dto.getCode()) || StringUtils.isBlank(dto.getAmount())) {
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
|
||||
import com.jsowell.common.core.page.PageResponse;
|
||||
import com.jsowell.common.core.redis.RedisCache;
|
||||
import com.jsowell.common.enums.AcquirerEnum;
|
||||
import com.jsowell.common.enums.DelFlagEnum;
|
||||
import com.jsowell.common.enums.InvoiceRecordEnum;
|
||||
import com.jsowell.common.enums.MemberWalletEnum;
|
||||
import com.jsowell.common.enums.adapay.AdapayEventEnum;
|
||||
@@ -371,6 +372,7 @@ public class OrderService {
|
||||
order.setStopReasonMsg(orderBasicInfo.getReason());
|
||||
order.setStartSOC(orderBasicInfo.getStartSOC());
|
||||
order.setEndSOC(orderBasicInfo.getEndSOC());
|
||||
order.setSettleAmount(String.valueOf(orderBasicInfo.getSettleAmount()));
|
||||
order.setSettlementTime(DateUtils.formatDateTime(orderBasicInfo.getSettlementTime()));
|
||||
vo.setOrderInfo(order);
|
||||
|
||||
@@ -401,6 +403,7 @@ public class OrderService {
|
||||
realTimeInfo.setOrderAmount(realTimeMonitorData.getChargingAmount());
|
||||
realTimeInfo.setChargedDegree(realTimeMonitorData.getChargingDegree());
|
||||
realTimeInfo.setChargingTime(realTimeMonitorData.getSumChargingTime());
|
||||
realTimeInfo.setTime(realTimeMonitorData.getDateTime());
|
||||
vo.setOrderRealTimeInfo(realTimeInfo);
|
||||
|
||||
// 根据时间进行正序排序
|
||||
@@ -753,12 +756,12 @@ public class OrderService {
|
||||
.build()
|
||||
);
|
||||
// 余额支付
|
||||
result.add(
|
||||
PayModeVO.builder()
|
||||
.payModeCode(OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())
|
||||
.payModeName(OrderPayModeEnum.PAYMENT_OF_BALANCE.getLabel())
|
||||
.build()
|
||||
);
|
||||
// result.add(
|
||||
// PayModeVO.builder()
|
||||
// .payModeCode(OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())
|
||||
// .payModeName(OrderPayModeEnum.PAYMENT_OF_BALANCE.getLabel())
|
||||
// .build()
|
||||
// );
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -1053,6 +1056,7 @@ public class OrderService {
|
||||
.acquirer(AcquirerEnum.ADAPAY.getValue())
|
||||
.deductionRecord(json.toJSONString())
|
||||
.createBy(null)
|
||||
.delFlag(DelFlagEnum.NORMAL.getValue())
|
||||
.build();
|
||||
orderPayRecordService.batchInsert(Lists.newArrayList(orderPayRecord));
|
||||
|
||||
|
||||
@@ -296,6 +296,7 @@ public class SpringBootTestController {
|
||||
.acquirer(AcquirerEnum.ADAPAY.getValue())
|
||||
.deductionRecord(json.toJSONString())
|
||||
.createBy(null)
|
||||
.delFlag(DelFlagEnum.NORMAL.getValue())
|
||||
.build();
|
||||
orderPayRecordService.batchInsert(Lists.newArrayList(orderPayRecord));
|
||||
|
||||
@@ -441,14 +442,14 @@ public class SpringBootTestController {
|
||||
@Test
|
||||
public void createSettleAccountRequestTest() throws BaseAdaPayException {
|
||||
SettleAccountDTO dto = new SettleAccountDTO();
|
||||
dto.setCardId("10534201040009200");
|
||||
dto.setCardName("苏州远慧物联智能科技有限公司");
|
||||
dto.setTelNo("13915742562");
|
||||
dto.setBankCode("01030000");
|
||||
dto.setCardId("408060100100034609");
|
||||
dto.setCardName("江苏敦顺建设工程有限公司");
|
||||
dto.setTelNo("18021373333");
|
||||
dto.setBankCode("03090000");
|
||||
dto.setBankAcctType("1");
|
||||
dto.setProvCode("0032");
|
||||
dto.setAreaCode("3206");
|
||||
String adapayMemberId = "ACM48720983";
|
||||
dto.setAreaCode("3210");
|
||||
String adapayMemberId = "ACM40991242";
|
||||
String wechatAppId = "wxbb3e0d474569481d";
|
||||
adapayService.createSettleAccountRequest(dto, adapayMemberId, wechatAppId);
|
||||
}
|
||||
|
||||
@@ -83,4 +83,9 @@ public class GenerateOrderDTO extends BasicPileDTO{
|
||||
* 站点id
|
||||
*/
|
||||
private String stationId;
|
||||
|
||||
/**
|
||||
* 微信小程序appId
|
||||
*/
|
||||
private String appId;
|
||||
}
|
||||
|
||||
@@ -114,4 +114,6 @@ public interface IPileMerchantInfoService {
|
||||
* 通过merchantId获取一级运营商信息
|
||||
*/
|
||||
PileMerchantInfo getFirstLevelMerchantByMerchantId(String merchantId);
|
||||
|
||||
String getFirstLevelMerchantIdByMerchantId(String merchantId);
|
||||
}
|
||||
|
||||
@@ -142,12 +142,12 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
|
||||
* 更新交易记录的消费金额和退款金额
|
||||
*
|
||||
* @param paymentId 支付id
|
||||
* @param SpendAmount 消费金额
|
||||
* @param RefundAmount 退款金额
|
||||
* @param spendAmount 消费金额
|
||||
* @param refundAmount 退款金额
|
||||
* @param freezeAmount 冻结金额
|
||||
*/
|
||||
@Override
|
||||
public void commonUpdateAmountMethod(String paymentId, BigDecimal SpendAmount, BigDecimal RefundAmount, BigDecimal freezeAmount) {
|
||||
public void commonUpdateAmountMethod(String paymentId, BigDecimal spendAmount, BigDecimal refundAmount, BigDecimal freezeAmount) {
|
||||
MemberAdapayRecord record = selectByPaymentId(paymentId);
|
||||
if (record == null) {
|
||||
log.info("更新交易记录的消费金额和退款金额paymentId:{}, 查询为空", paymentId);
|
||||
@@ -159,41 +159,46 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
|
||||
BigDecimal freezeAmt = record.getFreezeAmt();
|
||||
BigDecimal balanceAmt = record.getBalanceAmt();
|
||||
|
||||
if (freezeAmount != null) {
|
||||
if (BigDecimal.ZERO.compareTo(freezeAmount) > 0) {
|
||||
// 如果冻结金额传过来是负数,说明是解冻
|
||||
if (freezeAmount.negate().compareTo(freezeAmt) > 0) {
|
||||
throw new BusinessException("", "解冻金额大于冻结金额");
|
||||
try {
|
||||
if (freezeAmount != null) {
|
||||
if (BigDecimal.ZERO.compareTo(freezeAmount) > 0) {
|
||||
// 如果冻结金额传过来是负数,说明是解冻
|
||||
if (freezeAmount.negate().compareTo(freezeAmt) > 0) {
|
||||
throw new BusinessException("", "解冻金额大于冻结金额");
|
||||
}
|
||||
balanceAmt = balanceAmt.add(freezeAmount.negate()); // 剩余金额增加
|
||||
} else {
|
||||
if (freezeAmount.compareTo(balanceAmt) > 0) {
|
||||
throw new BusinessException("", "冻结金额大于剩余金额");
|
||||
}
|
||||
}
|
||||
balanceAmt = balanceAmt.add(freezeAmount.negate()); // 剩余金额增加
|
||||
} else {
|
||||
if (freezeAmount.compareTo(balanceAmt) > 0) {
|
||||
throw new BusinessException("", "冻结金额大于剩余金额");
|
||||
freezeAmt = freezeAmt.add(freezeAmount); // 冻结金额减少
|
||||
// 设置冻结金额 = 历史冻结金额 + 本次冻结金额
|
||||
record.setFreezeAmt(freezeAmt);
|
||||
}
|
||||
if (refundAmount != null) {
|
||||
if (refundAmount.compareTo(balanceAmt) > 0) {
|
||||
throw new BusinessException("", "退款金额大于剩余金额");
|
||||
}
|
||||
// 设置退款金额 = 历史退款金额 + 本次退款金额
|
||||
refundAmt = refundAmt.add(refundAmount);
|
||||
record.setRefundAmt(refundAmt);
|
||||
}
|
||||
freezeAmt = freezeAmt.add(freezeAmount); // 冻结金额减少
|
||||
// 设置冻结金额 = 历史冻结金额 + 本次冻结金额
|
||||
record.setFreezeAmt(freezeAmt);
|
||||
}
|
||||
if (RefundAmount != null) {
|
||||
if (RefundAmount.compareTo(balanceAmt) > 0) {
|
||||
throw new BusinessException("", "退款金额大于剩余金额");
|
||||
if (spendAmount != null) {
|
||||
if (spendAmount.compareTo(balanceAmt) > 0) {
|
||||
throw new BusinessException("", "消费金额大于剩余金额");
|
||||
}
|
||||
// 设置消费金额 = 历史消费金额 + 本次消费金额
|
||||
spendAmt = spendAmt.add(spendAmount);
|
||||
record.setSpendAmt(spendAmt);
|
||||
}
|
||||
// 设置退款金额 = 历史退款金额 + 本次退款金额
|
||||
refundAmt = refundAmt.add(RefundAmount);
|
||||
record.setRefundAmt(refundAmt);
|
||||
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额 - 累计冻结金额
|
||||
balanceAmt = record.getPayAmt().subtract(refundAmt).subtract(spendAmt).subtract(freezeAmt);
|
||||
record.setBalanceAmt(balanceAmt);
|
||||
updateByPrimaryKeySelective(record);
|
||||
} catch (Exception e) {
|
||||
log.error("更新MemberAdapayRecord金额paymentId:{}, spendAmount:{}, refundAmount:{}, freezeAmount:{}", paymentId, spendAmount, refundAmount, freezeAmount);
|
||||
log.error("更新MemberAdapayRecord金额error", e);
|
||||
}
|
||||
if (SpendAmount != null) {
|
||||
if (SpendAmount.compareTo(balanceAmt) > 0) {
|
||||
throw new BusinessException("", "消费金额大于剩余金额");
|
||||
}
|
||||
// 设置消费金额 = 历史消费金额 + 本次消费金额
|
||||
spendAmt = spendAmt.add(SpendAmount);
|
||||
record.setSpendAmt(spendAmt);
|
||||
}
|
||||
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额 - 累计冻结金额
|
||||
balanceAmt = record.getPayAmt().subtract(refundAmt).subtract(spendAmt).subtract(freezeAmt);
|
||||
record.setBalanceAmt(balanceAmt);
|
||||
updateByPrimaryKeySelective(record);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -756,7 +756,6 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
delay商户, 如果存在退款金额, 支付的钱部分解冻(也就是只解冻需要退款的部分), 剩下的钱继续冻结等待第二天凌晨分账
|
||||
*/
|
||||
// 执行退款逻辑
|
||||
|
||||
delayMerchantOrderRefundLogic(orderBasicInfo, adapayMemberAccount, merchantInfo.getAppId());
|
||||
} else {
|
||||
/*
|
||||
@@ -1187,8 +1186,8 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
List<Map<String, Object>> list = calculateUnfreezeAmount(orderAmount, payRecordList);
|
||||
for (Map<String, Object> map : list) {
|
||||
String paymentId = (String) map.get("paymentId");
|
||||
String unfreezeAmount = (String) map.get("unfreezeAmount");
|
||||
memberAdapayRecordService.unfreezeAmount(paymentId, new BigDecimal(unfreezeAmount));
|
||||
BigDecimal unfreezeAmount = (BigDecimal) map.get("unfreezeAmount");
|
||||
memberAdapayRecordService.unfreezeAmount(paymentId, unfreezeAmount);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2973,16 +2972,23 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
// paymentId, refundAmount, wechatAppId, memberId, ScenarioEnum.ORDER.getValue(),
|
||||
// orderCode);
|
||||
|
||||
PaymentReverseOperation operation = new PaymentReverseOperation();
|
||||
operation.setPaymentId(paymentId);
|
||||
operation.setReverseAmt(refundAmount);
|
||||
operation.setMerchantKey(wechatAppId);
|
||||
operation.setMemberId(memberId);
|
||||
operation.setScenarioType(ScenarioEnum.ORDER.getValue());
|
||||
operation.setOrderCode(orderCode);
|
||||
PaymentReverseResponse response = adapayService.createPaymentReverseRequest(operation);
|
||||
// PaymentReverseOperation operation = new PaymentReverseOperation();
|
||||
// operation.setPaymentId(paymentId);
|
||||
// operation.setReverseAmt(refundAmount);
|
||||
// operation.setMerchantKey(wechatAppId);
|
||||
// operation.setMemberId(memberId);
|
||||
// operation.setScenarioType(ScenarioEnum.ORDER.getValue());
|
||||
// operation.setOrderCode(orderCode);
|
||||
// PaymentReverseResponse response = adapayService.createPaymentReverseRequest(operation);
|
||||
|
||||
logger.info("重试订单退款response:{}", JSON.toJSONString(response));
|
||||
ApplyRefundDTO applyRefundDTO = new ApplyRefundDTO();
|
||||
applyRefundDTO.setOrderCode(orderCode);
|
||||
applyRefundDTO.setRefundType(Constants.ONE);
|
||||
applyRefundDTO.setRefundAmount(refundAmount);
|
||||
applyRefundDTO.setWechatAppId(wechatAppId);
|
||||
applyRefundDTO.setMemberId(memberId);
|
||||
refundOrderWithAdapay(applyRefundDTO);
|
||||
// logger.info("重试订单退款response:{}", JSON.toJSONString(response));
|
||||
} else {
|
||||
BigDecimal reversedAmt = BigDecimal.ZERO;
|
||||
for (PaymentReverseResponse paymentRevers : paymentReverses) {
|
||||
@@ -3168,6 +3174,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
.acquirer(AcquirerEnum.LOCAL.getValue())
|
||||
.deductionRecord(json.toJSONString())
|
||||
.createBy(dto.getMemberId())
|
||||
.delFlag(DelFlagEnum.NORMAL.getValue())
|
||||
.build());
|
||||
}
|
||||
// 订单支付流水入库
|
||||
@@ -3225,6 +3232,13 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_STATION_IS_NOT_OPEN);
|
||||
}
|
||||
|
||||
// 校验启动桩使用的小程序,和充电桩所属一级运营商是否一致
|
||||
String merchantIdByAppId = pileMerchantInfoService.getFirstLevelMerchantIdByAppId(dto.getAppId());
|
||||
String merchantIdByMerchantId = pileMerchantInfoService.getFirstLevelMerchantIdByMerchantId(stationInfo.getMerchantId());
|
||||
if (!StringUtils.equals(merchantIdByAppId, merchantIdByMerchantId)) {
|
||||
throw new BusinessException("", "当前桩运营商与小程序所属运营商不一致");
|
||||
}
|
||||
|
||||
// 如果是鉴权卡或者vin启动,不判断枪口状态
|
||||
if (!(StringUtils.equals(dto.getStartMode(), StartModeEnum.AUTH_CARD.getValue())
|
||||
|| StringUtils.equals(dto.getStartMode(), StartModeEnum.VIN_CODE.getValue()))) {
|
||||
|
||||
@@ -430,4 +430,13 @@ public class PileMerchantInfoServiceImpl implements IPileMerchantInfoService {
|
||||
return pileMerchantInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFirstLevelMerchantIdByMerchantId(String merchantId) {
|
||||
PileMerchantInfo merchantInfo = getFirstLevelMerchantByMerchantId(merchantId);
|
||||
if (merchantInfo != null) {
|
||||
return String.valueOf(merchantInfo.getId());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.jsowell.adapay.vo.OrderSettleResult;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
|
||||
import com.jsowell.common.enums.AcquirerEnum;
|
||||
import com.jsowell.common.enums.DelFlagEnum;
|
||||
import com.jsowell.common.enums.MemberWalletEnum;
|
||||
import com.jsowell.common.enums.ykc.*;
|
||||
import com.jsowell.common.exception.BusinessException;
|
||||
@@ -83,6 +84,7 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic {
|
||||
.acquirer(AcquirerEnum.LOCAL.getValue())
|
||||
.deductionRecord(json.toJSONString())
|
||||
.createBy(dto.getMemberId())
|
||||
.delFlag(DelFlagEnum.NORMAL.getValue())
|
||||
.build());
|
||||
}
|
||||
// 订单支付流水入库
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.jsowell.adapay.vo.OrderSettleResult;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
|
||||
import com.jsowell.common.enums.AcquirerEnum;
|
||||
import com.jsowell.common.enums.DelFlagEnum;
|
||||
import com.jsowell.common.enums.MemberWalletEnum;
|
||||
import com.jsowell.common.enums.ykc.*;
|
||||
import com.jsowell.common.exception.BusinessException;
|
||||
@@ -85,6 +86,7 @@ public class NotDelayMerchantOrderLogic extends AbstractOrderLogic{
|
||||
.acquirer(AcquirerEnum.LOCAL.getValue())
|
||||
.deductionRecord(json.toJSONString())
|
||||
.createBy(dto.getMemberId())
|
||||
.delFlag(DelFlagEnum.NORMAL.getValue())
|
||||
.build());
|
||||
}
|
||||
// 订单支付流水入库
|
||||
|
||||
@@ -58,6 +58,7 @@ public class OrderDetailInfoVO {
|
||||
private String createTime; // 订单创建时间
|
||||
private String startSOC; // 开始SOC
|
||||
private String endSOC; // 结束SOC
|
||||
private String settleAmount;// 结算金额
|
||||
private String settlementTime; // 结算时间
|
||||
}
|
||||
|
||||
@@ -84,6 +85,7 @@ public class OrderDetailInfoVO {
|
||||
|
||||
@Data
|
||||
public static class OrderRealTimeInfo{
|
||||
private String time;
|
||||
private String orderAmount; // 订单金额
|
||||
private String totalElectricityAmount; // 总电费
|
||||
private String totalServiceAmount; // 总服务费
|
||||
|
||||
@@ -286,7 +286,7 @@
|
||||
from clearing_bill_info t1
|
||||
join pile_merchant_info t2 on t1.merchant_id = t2.id and t1.del_flag = '0'
|
||||
where t1.merchant_id = #{merchantId,jdbcType=VARCHAR}
|
||||
and t1.create_time between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
|
||||
and t1.trade_date between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
|
||||
order by
|
||||
t1.trade_date desc
|
||||
</select>
|
||||
|
||||
@@ -194,33 +194,35 @@
|
||||
<!-- 实时订单数据 -->
|
||||
<el-card class="cardStyle">
|
||||
<h3>实时订单数据</h3>
|
||||
<el-descriptions
|
||||
direction="vertical"
|
||||
:column="5"
|
||||
border
|
||||
:contentStyle="CS"
|
||||
:label-style="LS"
|
||||
>
|
||||
<el-descriptions-item label="时间">{{
|
||||
orderRealTimeInfo.time
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="消费金额">{{
|
||||
orderRealTimeInfo.orderAmount === "0.0000"
|
||||
? "0"
|
||||
: orderRealTimeInfo.orderAmount
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="充电度数">{{
|
||||
orderRealTimeInfo.chargedDegree === "0.0000"
|
||||
? "0"
|
||||
: orderRealTimeInfo.chargedDegree
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="充电时长">{{
|
||||
orderRealTimeInfo.chargingTime
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="当前soc">{{
|
||||
orderRealTimeInfo.soc
|
||||
}}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-table style="width: 100%" :data="orderRealTimeInfo" border>
|
||||
<el-table-column prop="time" label="时间" align="center" />
|
||||
<el-table-column
|
||||
prop="orderAmount"
|
||||
label="消费金额"
|
||||
align="center"
|
||||
width="280"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span
|
||||
>¥{{
|
||||
scope.row.orderAmount === "0.0000" ? "0" : scope.row.orderAmount
|
||||
}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="chargedDegree" label="充电度数" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.chargedDegree === "0.0000"
|
||||
? "0"
|
||||
: scope.row.chargedDegree
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="chargingTime" label="充电时长" align="center" />
|
||||
<el-table-column prop="soc" label="当前soc" align="center" />
|
||||
</el-table>
|
||||
<div class="marginTop"></div>
|
||||
</el-card>
|
||||
<!-- 支付信息 -->
|
||||
|
||||
Reference in New Issue
Block a user