基本功能近期同步
This commit is contained in:
parent
a74e04b203
commit
715e263ffb
|
|
@ -33,4 +33,4 @@ VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
|
|||
VITE_APP_WEBSOCKET = false
|
||||
|
||||
# sse 开关
|
||||
VITE_APP_SSE = true
|
||||
VITE_APP_SSE = false
|
||||
|
|
|
|||
|
|
@ -4,6 +4,11 @@ export interface GradeVO {
|
|||
*/
|
||||
id: string | number;
|
||||
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
name: string;
|
||||
|
||||
/**
|
||||
* 充值天数
|
||||
*/
|
||||
|
|
@ -12,39 +17,34 @@ export interface GradeVO {
|
|||
/**
|
||||
* 赠送天数
|
||||
*/
|
||||
giftDays: number;
|
||||
|
||||
/**
|
||||
* 首充赠送天数
|
||||
*/
|
||||
firstGiftDays: number;
|
||||
giftDays?: number;
|
||||
|
||||
/**
|
||||
* 金额(分)
|
||||
*/
|
||||
amount: number;
|
||||
amount?: number;
|
||||
|
||||
/**
|
||||
* 平均月金额(分)
|
||||
*/
|
||||
averagePrice: number;
|
||||
averagePrice?: number;
|
||||
|
||||
/**
|
||||
* 原价(分)
|
||||
*/
|
||||
originalAmount: number;
|
||||
originalAmount?: number;
|
||||
|
||||
/**
|
||||
* 充值状态限制
|
||||
*/
|
||||
rechargeStatusVisibility: string;
|
||||
rechargeStatusVisibility?: string;
|
||||
|
||||
/**
|
||||
* 苹果支付ID
|
||||
*/
|
||||
appleProductId: string | number;
|
||||
appleProductId?: string | number;
|
||||
|
||||
flag: boolean;
|
||||
flag?: boolean;
|
||||
}
|
||||
|
||||
export interface GradeForm extends BaseEntity {
|
||||
|
|
@ -53,6 +53,11 @@ export interface GradeForm extends BaseEntity {
|
|||
*/
|
||||
id?: string | number;
|
||||
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
name?: string;
|
||||
|
||||
/**
|
||||
* 充值天数
|
||||
*/
|
||||
|
|
@ -63,11 +68,6 @@ export interface GradeForm extends BaseEntity {
|
|||
*/
|
||||
giftDays?: number;
|
||||
|
||||
/**
|
||||
* 首充赠送天数
|
||||
*/
|
||||
firstGiftDays?: number;
|
||||
|
||||
/**
|
||||
* 金额(分)
|
||||
*/
|
||||
|
|
@ -112,11 +112,6 @@ export interface GradeQuery extends PageQuery {
|
|||
*/
|
||||
giftDays?: number;
|
||||
|
||||
/**
|
||||
* 首充赠送天数
|
||||
*/
|
||||
firstGiftDays?: number;
|
||||
|
||||
/**
|
||||
* 金额(分)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import { GradeGiftRuleVO, GradeGiftRuleForm, GradeGiftRuleQuery } from '@/api/net/gradeGiftRule/types';
|
||||
|
||||
/**
|
||||
* 查询充值商品赠送规则列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
|
||||
export const listGradeGiftRule = (query?: GradeGiftRuleQuery): AxiosPromise<GradeGiftRuleVO[]> => {
|
||||
return request({
|
||||
url: '/net/gradeGiftRule/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询充值商品赠送规则详细
|
||||
* @param id
|
||||
*/
|
||||
export const getGradeGiftRule = (id: string | number): AxiosPromise<GradeGiftRuleVO> => {
|
||||
return request({
|
||||
url: '/net/gradeGiftRule/' + id,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增充值商品赠送规则
|
||||
* @param data
|
||||
*/
|
||||
export const addGradeGiftRule = (data: GradeGiftRuleForm) => {
|
||||
return request({
|
||||
url: '/net/gradeGiftRule',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改充值商品赠送规则
|
||||
* @param data
|
||||
*/
|
||||
export const updateGradeGiftRule = (data: GradeGiftRuleForm) => {
|
||||
return request({
|
||||
url: '/net/gradeGiftRule',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除充值商品赠送规则
|
||||
* @param id
|
||||
*/
|
||||
export const delGradeGiftRule = (id: string | number | Array<string | number>) => {
|
||||
return request({
|
||||
url: '/net/gradeGiftRule/' + id,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
export interface GradeGiftRuleVO {
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
id: string | number;
|
||||
|
||||
/**
|
||||
* 商品ID
|
||||
*/
|
||||
gradeId: string | number;
|
||||
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
startTime: string;
|
||||
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
endTime: string;
|
||||
|
||||
/**
|
||||
* 赠送天数
|
||||
*/
|
||||
giftDays: number;
|
||||
|
||||
}
|
||||
|
||||
export interface GradeGiftRuleForm extends BaseEntity {
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
id?: string | number;
|
||||
|
||||
/**
|
||||
* 商品ID
|
||||
*/
|
||||
gradeId?: string | number;
|
||||
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
startTime?: string;
|
||||
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
endTime?: string;
|
||||
|
||||
/**
|
||||
* 赠送天数
|
||||
*/
|
||||
giftDays?: number;
|
||||
|
||||
}
|
||||
|
||||
export interface GradeGiftRuleQuery extends PageQuery {
|
||||
|
||||
/**
|
||||
* 商品ID
|
||||
*/
|
||||
gradeId?: string | number;
|
||||
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
startTime?: string;
|
||||
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
endTime?: string;
|
||||
|
||||
/**
|
||||
* 赠送天数
|
||||
*/
|
||||
giftDays?: number;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
}
|
||||
|
|
@ -66,7 +66,7 @@ export const delInvitation = (id: string | number | Array<string | number>) => {
|
|||
* 修改渠道
|
||||
* @param data
|
||||
*/
|
||||
export const linkGrade = (data: { userId: string; gradeIds: string }) => {
|
||||
export const linkGrade = (data: { invitationId: string; gradeIds: string }) => {
|
||||
return request({
|
||||
url: '/net/invitation/linkGrade',
|
||||
method: 'put',
|
||||
|
|
|
|||
|
|
@ -87,23 +87,38 @@ export interface NodeVO {
|
|||
/**
|
||||
* 伪装域名
|
||||
*/
|
||||
serverName: string;
|
||||
disguiseServerName: string;
|
||||
|
||||
/**
|
||||
* 伪装域名的端口
|
||||
*/
|
||||
disguiseServerPort: number;
|
||||
|
||||
/**
|
||||
* 允许不安全
|
||||
*/
|
||||
allowInsecure: boolean;
|
||||
|
||||
/**
|
||||
* 加密私钥
|
||||
*/
|
||||
privateKey: string;
|
||||
|
||||
/**
|
||||
* 加密公钥
|
||||
*/
|
||||
publicKey: string;
|
||||
|
||||
/**
|
||||
* SNI伪装域名
|
||||
*/
|
||||
sni: string;
|
||||
|
||||
/**
|
||||
* 加密标识
|
||||
*/
|
||||
shortIds: string | number;
|
||||
|
||||
/**
|
||||
* 目标地址
|
||||
*/
|
||||
dest: string;
|
||||
|
||||
/**
|
||||
* ws连接路径
|
||||
*/
|
||||
|
|
@ -161,6 +176,7 @@ export interface NodeForm extends BaseEntity {
|
|||
* 路由组
|
||||
*/
|
||||
routeIds?: string | number;
|
||||
routeIdArray?: (string | number)[];
|
||||
|
||||
/**
|
||||
* 加速协议
|
||||
|
|
@ -205,23 +221,38 @@ export interface NodeForm extends BaseEntity {
|
|||
/**
|
||||
* 伪装域名
|
||||
*/
|
||||
serverName?: string;
|
||||
disguiseServerName?: string;
|
||||
|
||||
/**
|
||||
* 伪装域名的端口
|
||||
*/
|
||||
disguiseServerPort?: number;
|
||||
|
||||
/**
|
||||
* 允许不安全
|
||||
*/
|
||||
allowInsecure?: boolean;
|
||||
|
||||
/**
|
||||
* 加密私钥
|
||||
*/
|
||||
privateKey?: string;
|
||||
|
||||
/**
|
||||
* 加密公钥
|
||||
*/
|
||||
publicKey?: string;
|
||||
|
||||
/**
|
||||
* SNI伪装域名
|
||||
*/
|
||||
sni?: string;
|
||||
|
||||
/**
|
||||
* 加密标识
|
||||
*/
|
||||
shortIds?: string | number;
|
||||
|
||||
/**
|
||||
* 目标地址
|
||||
*/
|
||||
dest?: string;
|
||||
|
||||
/**
|
||||
* ws连接路径
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import { OrderVO, OrderForm, OrderQuery } from '@/api/net/order/types';
|
||||
|
||||
/**
|
||||
* 查询支付订单列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
|
||||
export const listOrder = (query?: OrderQuery): AxiosPromise<OrderVO[]> => {
|
||||
return request({
|
||||
url: '/net/order/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询支付订单详细
|
||||
* @param id
|
||||
*/
|
||||
export const getOrder = (id: string | number): AxiosPromise<OrderVO> => {
|
||||
return request({
|
||||
url: '/net/order/' + id,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增支付订单
|
||||
* @param data
|
||||
*/
|
||||
export const addOrder = (data: OrderForm) => {
|
||||
return request({
|
||||
url: '/net/order',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改支付订单
|
||||
* @param data
|
||||
*/
|
||||
export const updateOrder = (data: OrderForm) => {
|
||||
return request({
|
||||
url: '/net/order',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除支付订单
|
||||
* @param id
|
||||
*/
|
||||
export const delOrder = (id: string | number | Array<string | number>) => {
|
||||
return request({
|
||||
url: '/net/order/' + id,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
||||
|
|
@ -0,0 +1,273 @@
|
|||
export interface OrderVO {
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
id: string | number;
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
userId: string | number;
|
||||
|
||||
/**
|
||||
* 临时账号
|
||||
*/
|
||||
temporaryAccount: string;
|
||||
|
||||
/**
|
||||
* 渠道号ID
|
||||
*/
|
||||
invitationCodeId: string | number;
|
||||
|
||||
/**
|
||||
* 渠道名称
|
||||
*/
|
||||
invitationCodeName: string;
|
||||
|
||||
/**
|
||||
* 充值天数
|
||||
*/
|
||||
rechargeDays: number;
|
||||
|
||||
/**
|
||||
* 充值金额
|
||||
*/
|
||||
rechargeMoney: number;
|
||||
|
||||
/**
|
||||
* 币种
|
||||
*/
|
||||
currency: string;
|
||||
|
||||
/**
|
||||
* 三方订单
|
||||
*/
|
||||
orderNumber: string;
|
||||
|
||||
/**
|
||||
* 关联支付设置
|
||||
*/
|
||||
payConfigId: string | number;
|
||||
|
||||
/**
|
||||
* 平台订单号
|
||||
*/
|
||||
platformOrderNumber: string;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
deviceType: string;
|
||||
|
||||
/**
|
||||
* 支付状态
|
||||
*/
|
||||
payStatus: number;
|
||||
|
||||
/**
|
||||
* 支付IP
|
||||
*/
|
||||
payIp: string;
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*/
|
||||
payType: string;
|
||||
|
||||
/**
|
||||
* 充值发起时间
|
||||
*/
|
||||
rechargeTime: string;
|
||||
|
||||
/**
|
||||
* 实际支付时间
|
||||
*/
|
||||
payTime: string;
|
||||
|
||||
/**
|
||||
* 赠送时长(分钟)
|
||||
*/
|
||||
giftTime: number;
|
||||
|
||||
/**
|
||||
* 退款时间
|
||||
*/
|
||||
refundTime: string;
|
||||
|
||||
/**
|
||||
* 回调通知时间
|
||||
*/
|
||||
notifyTime: string;
|
||||
|
||||
/**
|
||||
* 充值前有效期
|
||||
*/
|
||||
rechargeBeforeTime: string;
|
||||
|
||||
/**
|
||||
* 充值后有效期
|
||||
*/
|
||||
rechargeAfterTime: string;
|
||||
|
||||
}
|
||||
|
||||
export interface OrderForm extends BaseEntity {
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
id?: string | number;
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
userId?: string | number;
|
||||
|
||||
/**
|
||||
* 临时账号
|
||||
*/
|
||||
temporaryAccount?: string;
|
||||
|
||||
/**
|
||||
* 渠道号ID
|
||||
*/
|
||||
invitationCodeId?: string | number;
|
||||
|
||||
/**
|
||||
* 渠道名称
|
||||
*/
|
||||
invitationCodeName?: string;
|
||||
|
||||
/**
|
||||
* 充值天数
|
||||
*/
|
||||
rechargeDays?: number;
|
||||
|
||||
/**
|
||||
* 充值金额
|
||||
*/
|
||||
rechargeMoney?: number;
|
||||
|
||||
/**
|
||||
* 币种
|
||||
*/
|
||||
currency?: string;
|
||||
|
||||
/**
|
||||
* 三方订单
|
||||
*/
|
||||
orderNumber?: string;
|
||||
|
||||
/**
|
||||
* 关联支付设置
|
||||
*/
|
||||
payConfigName?: string | number;
|
||||
|
||||
/**
|
||||
* 平台订单号
|
||||
*/
|
||||
platformOrderNumber?: string;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
deviceType?: string;
|
||||
|
||||
/**
|
||||
* 支付状态
|
||||
*/
|
||||
payStatus?: number;
|
||||
|
||||
/**
|
||||
* 支付IP
|
||||
*/
|
||||
payIp?: string;
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*/
|
||||
payType?: string;
|
||||
|
||||
/**
|
||||
* 充值发起时间
|
||||
*/
|
||||
rechargeTime?: string;
|
||||
|
||||
/**
|
||||
* 实际支付时间
|
||||
*/
|
||||
payTime?: string;
|
||||
|
||||
/**
|
||||
* 赠送时长(分钟)
|
||||
*/
|
||||
giftTime?: number;
|
||||
|
||||
/**
|
||||
* 退款时间
|
||||
*/
|
||||
refundTime?: string;
|
||||
|
||||
/**
|
||||
* 回调通知时间
|
||||
*/
|
||||
notifyTime?: string;
|
||||
|
||||
/**
|
||||
* 充值前有效期
|
||||
*/
|
||||
rechargeBeforeTime?: string;
|
||||
|
||||
/**
|
||||
* 充值后有效期
|
||||
*/
|
||||
rechargeAfterTime?: string;
|
||||
|
||||
}
|
||||
|
||||
export interface OrderQuery extends PageQuery {
|
||||
|
||||
/**
|
||||
* 临时账号
|
||||
*/
|
||||
temporaryAccount?: string;
|
||||
|
||||
/**
|
||||
* 渠道名称
|
||||
*/
|
||||
invitationCodeName?: string;
|
||||
|
||||
/**
|
||||
* 充值天数
|
||||
*/
|
||||
rechargeDays?: number;
|
||||
|
||||
/**
|
||||
* 三方订单
|
||||
*/
|
||||
orderNumber?: string;
|
||||
|
||||
/**
|
||||
* 支付平台
|
||||
*/
|
||||
payConfigName?: string | number;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
deviceType?: string;
|
||||
|
||||
/**
|
||||
* 支付状态
|
||||
*/
|
||||
payStatus?: number;
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*/
|
||||
payType?: string;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
}
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import { PayConfigVO, PayConfigForm, PayConfigQuery } from '@/api/net/payConfig/types';
|
||||
|
||||
/**
|
||||
* 查询支付配置列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
export const listPayConfig = (query?: PayConfigQuery): AxiosPromise<PayConfigVO[]> => {
|
||||
return request({
|
||||
url: '/net/payConfig/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询支付配置列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
export const listAllPayConfig = (query?: PayConfigQuery): AxiosPromise<PayConfigVO[]> => {
|
||||
return request({
|
||||
url: '/net/payConfig/listAll',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 查询支付配置详细
|
||||
* @param id
|
||||
*/
|
||||
export const getPayConfig = (id: string | number): AxiosPromise<PayConfigVO> => {
|
||||
return request({
|
||||
url: '/net/payConfig/' + id,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增支付配置
|
||||
* @param data
|
||||
*/
|
||||
export const addPayConfig = (data: PayConfigForm) => {
|
||||
return request({
|
||||
url: '/net/payConfig',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改支付配置
|
||||
* @param data
|
||||
*/
|
||||
export const updatePayConfig = (data: PayConfigForm) => {
|
||||
return request({
|
||||
url: '/net/payConfig',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 置顶支付配置
|
||||
* @param data
|
||||
*/
|
||||
export const topPay = (data: PayConfigForm) => {
|
||||
return request({
|
||||
url: '/net/payConfig/topPay',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 开启或关闭支付
|
||||
* @param data
|
||||
*/
|
||||
export const enablePay = (data: PayConfigForm) => {
|
||||
return request({
|
||||
url: '/net/payConfig/enablePay',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除支付配置
|
||||
* @param id
|
||||
*/
|
||||
export const delPayConfig = (id: string | number | Array<string | number>) => {
|
||||
return request({
|
||||
url: '/net/payConfig/' + id,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
||||
|
|
@ -0,0 +1,123 @@
|
|||
export interface PayConfigVO {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
id: string | number;
|
||||
|
||||
/**
|
||||
* 平台名称
|
||||
*/
|
||||
name: string;
|
||||
|
||||
/**
|
||||
* 处理策略
|
||||
*/
|
||||
payStrategy: string;
|
||||
|
||||
/**
|
||||
* 商户编号
|
||||
*/
|
||||
mchNo: string;
|
||||
|
||||
/**
|
||||
* 私钥
|
||||
*/
|
||||
privateKey: string;
|
||||
|
||||
/**
|
||||
* 公钥
|
||||
*/
|
||||
publicKey: string;
|
||||
|
||||
/**
|
||||
* 开启或关闭支付
|
||||
*/
|
||||
enableFlag: string | number;
|
||||
|
||||
/**
|
||||
* 支付宝参数
|
||||
*/
|
||||
alipayParam: string;
|
||||
|
||||
/**
|
||||
* 微信参数
|
||||
*/
|
||||
wxpayParam: string;
|
||||
|
||||
/**
|
||||
* 支付网关
|
||||
*/
|
||||
gatewayUrl?: string;
|
||||
|
||||
}
|
||||
|
||||
export interface PayConfigForm extends BaseEntity {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
id?: string | number;
|
||||
|
||||
/**
|
||||
* 平台名称
|
||||
*/
|
||||
name?: string;
|
||||
|
||||
/**
|
||||
* 处理策略
|
||||
*/
|
||||
payStrategy?: string;
|
||||
|
||||
/**
|
||||
* 商户编号
|
||||
*/
|
||||
mchNo?: string;
|
||||
|
||||
/**
|
||||
* 私钥
|
||||
*/
|
||||
privateKey?: string;
|
||||
|
||||
/**
|
||||
* 公钥
|
||||
*/
|
||||
publicKey?: string;
|
||||
|
||||
/**
|
||||
* 支付宝参数
|
||||
*/
|
||||
alipayParam?: string;
|
||||
|
||||
/**
|
||||
* 微信参数
|
||||
*/
|
||||
wxpayParam?: string;
|
||||
|
||||
/**
|
||||
* 支付网关
|
||||
*/
|
||||
gatewayUrl?: string;
|
||||
|
||||
/**
|
||||
* 开启或关闭支付
|
||||
*/
|
||||
enableFlag?: string | number;
|
||||
|
||||
}
|
||||
|
||||
export interface PayConfigQuery extends PageQuery {
|
||||
|
||||
/**
|
||||
* 平台名称
|
||||
*/
|
||||
name?: string;
|
||||
|
||||
/**
|
||||
* 处理策略
|
||||
*/
|
||||
payStrategy?: string;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
}
|
||||
|
|
@ -7,7 +7,6 @@ import { ServerRouteVO, ServerRouteForm, ServerRouteQuery } from '@/api/net/serv
|
|||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
|
||||
export const listServerRoute = (query?: ServerRouteQuery): AxiosPromise<ServerRouteVO[]> => {
|
||||
return request({
|
||||
url: '/net/serverRoute/list',
|
||||
|
|
@ -16,6 +15,18 @@ export const listServerRoute = (query?: ServerRouteQuery): AxiosPromise<ServerRo
|
|||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询路由规则列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
export const listAll = (): AxiosPromise<ServerRouteVO[]> => {
|
||||
return request({
|
||||
url: '/net/serverRoute/listAll',
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询路由规则详细
|
||||
* @param id
|
||||
|
|
|
|||
|
|
@ -0,0 +1,286 @@
|
|||
<template>
|
||||
<div class="p-2">
|
||||
<div class="panel">
|
||||
<h4 class="panel-title">基本信息</h4>
|
||||
<el-form :model="gradeInfo" :inline="true">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="2.5">
|
||||
<el-form-item label="商品名称" prop="name">
|
||||
<el-input v-model="gradeInfo.name" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="2.5">
|
||||
<el-form-item label="充值天数" prop="days">
|
||||
<el-input v-model="gradeInfo.days" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="panel">
|
||||
<h4 class="panel-title">赠送规则</h4>
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<el-form-item label="赠送天数" prop="giftDays">
|
||||
<el-input v-model="queryParams.giftDays" placeholder="请输入赠送天数" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['net:gradeGiftRule:add']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['net:gradeGiftRule:edit']">修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['net:gradeGiftRule:remove']">删除</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" border :data="gradeGiftRuleList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="开始时间" align="center" prop="startTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="结束时间" align="center" prop="endTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="赠送天数" align="center" prop="giftDays" />
|
||||
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['net:gradeGiftRule:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['net:gradeGiftRule:remove']"></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
<!-- 添加或修改充值商品赠送规则对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="gradeGiftRuleFormRef" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="开始时间" prop="startTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.startTime"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择开始时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="结束时间" prop="endTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.endTime"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择结束时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="赠送天数" prop="giftDays">
|
||||
<el-input v-model="form.giftDays" placeholder="请输入赠送天数" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="GiftRule" lang="ts">
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
import { GradeVO } from '@/api/net/grade/types';
|
||||
import { getGrade } from '@/api/net/grade/index';
|
||||
import { listGradeGiftRule, getGradeGiftRule, delGradeGiftRule, addGradeGiftRule, updateGradeGiftRule } from '@/api/net/gradeGiftRule';
|
||||
import { GradeGiftRuleVO, GradeGiftRuleQuery, GradeGiftRuleForm } from '@/api/net/gradeGiftRule/types';
|
||||
|
||||
const route = useRoute();
|
||||
|
||||
const gradeGiftRuleList = ref<GradeGiftRuleVO[]>([]);
|
||||
const gradeInfo = ref<GradeVO>({
|
||||
id: '',
|
||||
name: '',
|
||||
days: 0
|
||||
});
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const gradeGiftRuleFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: GradeGiftRuleForm = {
|
||||
id: undefined,
|
||||
gradeId: undefined,
|
||||
startTime: undefined,
|
||||
endTime: undefined,
|
||||
giftDays: undefined
|
||||
}
|
||||
const data = reactive<PageData<GradeGiftRuleForm, GradeGiftRuleQuery>>({
|
||||
form: {...initFormData},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
gradeId: undefined,
|
||||
startTime: undefined,
|
||||
endTime: undefined,
|
||||
giftDays: undefined,
|
||||
params: {
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
gradeId: [
|
||||
{ required: true, message: "商品ID不能为空", trigger: "blur" }
|
||||
],
|
||||
startTime: [
|
||||
{ required: true, message: "开始时间不能为空", trigger: "blur" }
|
||||
],
|
||||
endTime: [
|
||||
{ required: true, message: "结束时间不能为空", trigger: "blur" }
|
||||
],
|
||||
giftDays: [
|
||||
{ required: true, message: "赠送天数不能为空", trigger: "blur" }
|
||||
]
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
/** 查询充值商品赠送规则列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listGradeGiftRule(queryParams.value);
|
||||
gradeGiftRuleList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
}
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = {...initFormData};
|
||||
gradeGiftRuleFormRef.value?.resetFields();
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
}
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: GradeGiftRuleVO[]) => {
|
||||
ids.value = selection.map(item => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
}
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = "添加充值商品赠送规则";
|
||||
}
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: GradeGiftRuleVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0]
|
||||
const res = await getGradeGiftRule(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = "修改充值商品赠送规则";
|
||||
}
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
gradeGiftRuleFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
form.value.gradeId = route.params.gradeId as string;
|
||||
if (form.value.id) {
|
||||
await updateGradeGiftRule(form.value).finally(() => buttonLoading.value = false);
|
||||
} else {
|
||||
await addGradeGiftRule(form.value).finally(() => buttonLoading.value = false);
|
||||
}
|
||||
proxy?.$modal.msgSuccess("操作成功");
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: GradeGiftRuleVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除充值商品赠送规则编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||
await delGradeGiftRule(_ids);
|
||||
proxy?.$modal.msgSuccess("删除成功");
|
||||
await getList();
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download('net/gradeGiftRule/export', {
|
||||
...queryParams.value
|
||||
}, `gradeGiftRule_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
|
||||
/** 获取充值商品信息 */
|
||||
const getGradeInfo = async () => {
|
||||
const gradeId = route.params.gradeId as string;
|
||||
const res = await getGrade(gradeId);
|
||||
Object.assign(gradeInfo.value, res.data);
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getGradeInfo();
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
|
|
@ -43,12 +43,11 @@
|
|||
<el-table v-loading="loading" border :data="gradeList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" width="200" align="center" prop="id" v-if="true" />
|
||||
<el-table-column label="商品名称" align="center" prop="name" />
|
||||
<el-table-column label="充值天数" align="center" prop="days" />
|
||||
<el-table-column label="赠送天数" align="center" prop="giftDays" />
|
||||
<el-table-column label="首充赠送天数" align="center" prop="firstGiftDays" />
|
||||
<el-table-column label="金额(分)" align="center" prop="amount" />
|
||||
<el-table-column label="平均月金额(分)" align="center" prop="averagePrice" />
|
||||
<el-table-column label="原价(分)" align="center" prop="originalAmount" />
|
||||
<el-table-column label="金额(元)" align="center" prop="amount" />
|
||||
<el-table-column label="原价(元)" align="center" prop="originalAmount" />
|
||||
<el-table-column label="充值状态限制" width="250" align="center">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="net_recharge_status" :value="scope.row.rechargeStatusVisibilityList"/>
|
||||
|
|
@ -60,6 +59,9 @@
|
|||
<el-tooltip content="修改" placement="top">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['net:grade:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="赠送规则" placement="top">
|
||||
<el-button link type="primary" icon="Link" @click="handleGiftRule(scope.row)" v-hasPermi="['net:grade:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['net:grade:remove']"></el-button>
|
||||
</el-tooltip>
|
||||
|
|
@ -72,21 +74,18 @@
|
|||
<!-- 添加或修改商品对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="gradeFormRef" :model="form" :rules="rules" label-width="120px">
|
||||
<el-form-item label="商品名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入商品名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="充值天数" prop="days">
|
||||
<el-input v-model="form.days" placeholder="请输入充值天数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="赠送天数" prop="giftDays">
|
||||
<el-input v-model="form.giftDays" placeholder="请输入赠送天数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="首充赠送天数" prop="firstGiftDays">
|
||||
<el-input v-model="form.firstGiftDays" placeholder="请输入首充赠送天数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="金额(分)" prop="amount">
|
||||
<el-input v-model="form.amount" placeholder="请输入金额(分)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="平均月金额(分)" prop="averagePrice">
|
||||
<el-input v-model="form.averagePrice" placeholder="请输入平均月金额(分)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="原价(分)" prop="originalAmount">
|
||||
<el-input v-model="form.originalAmount" placeholder="请输入原价(分)" />
|
||||
</el-form-item>
|
||||
|
|
@ -117,6 +116,7 @@
|
|||
<script setup name="Grade" lang="ts">
|
||||
import { listGrade, getGrade, delGrade, addGrade, updateGrade } from '@/api/net/grade';
|
||||
import { GradeVO, GradeQuery, GradeForm } from '@/api/net/grade/types';
|
||||
import router from '@/router';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { net_recharge_status } = toRefs<any>(proxy?.useDict('net_recharge_status'));
|
||||
|
|
@ -142,7 +142,6 @@ const initFormData: GradeForm = {
|
|||
id: undefined,
|
||||
days: undefined,
|
||||
giftDays: undefined,
|
||||
firstGiftDays: undefined,
|
||||
amount: undefined,
|
||||
averagePrice: undefined,
|
||||
originalAmount: undefined,
|
||||
|
|
@ -156,7 +155,6 @@ const data = reactive<PageData<GradeForm, GradeQuery>>({
|
|||
pageSize: 10,
|
||||
days: undefined,
|
||||
giftDays: undefined,
|
||||
firstGiftDays: undefined,
|
||||
amount: undefined,
|
||||
averagePrice: undefined,
|
||||
originalAmount: undefined,
|
||||
|
|
@ -237,6 +235,13 @@ const handleUpdate = async (row?: GradeVO) => {
|
|||
dialog.title = "修改商品";
|
||||
}
|
||||
|
||||
/** 赠送规则按钮操作 */
|
||||
const handleGiftRule = async (row?: GradeVO) => {
|
||||
const _id = row?.id || ids.value[0];
|
||||
const route = useRoute();
|
||||
router.push(`/netUser/grade/giftRule/${_id}`);
|
||||
}
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
gradeFormRef.value?.validate(async (valid: boolean) => {
|
||||
|
|
|
|||
|
|
@ -11,7 +11,9 @@
|
|||
<el-input v-model="queryParams.invitationName" placeholder="请输入渠道名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="加速计划" prop="planId">
|
||||
<el-input v-model="queryParams.planId" placeholder="请输入加速计划ID" clearable @keyup.enter="handleQuery" />
|
||||
<el-select v-model="queryParams.planId" placeholder="选择加速计划" clearable>
|
||||
<el-option v-for="plan in planList" :key="plan.id" :label="plan.planName" :value="plan.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="保护地区" prop="protectedArea">
|
||||
<el-input v-model="queryParams.protectedArea" placeholder="请输入保护地区" clearable @keyup.enter="handleQuery" />
|
||||
|
|
@ -91,7 +93,9 @@
|
|||
<el-input v-model="form.smsTemplate" placeholder="请输入短信模板" />
|
||||
</el-form-item>
|
||||
<el-form-item label="加速计划" prop="planId">
|
||||
<el-input v-model="form.planId" placeholder="请输入加速计划ID" />
|
||||
<el-select v-model="form.planId" placeholder="加速计划" clearable>
|
||||
<el-option v-for="plan in planList" :key="plan.id" :label="plan.planName" :value="plan.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="IP天数" prop="ipRegisterDay">
|
||||
<el-input v-model="form.ipRegisterDay" placeholder="请输入最近多少天" />
|
||||
|
|
@ -140,7 +144,9 @@
|
|||
|
||||
<script setup name="Invitation" lang="ts">
|
||||
import { listInvitation, getInvitation, delInvitation, addInvitation, updateInvitation } from '@/api/net/invitation';
|
||||
import { allPlan } from '@/api/net/plan';
|
||||
import { InvitationVO, InvitationQuery, InvitationForm } from '@/api/net/invitation/types';
|
||||
import { PlanVO } from '@/api/net/plan/types';
|
||||
import router from '@/router';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
|
@ -154,6 +160,7 @@ const ids = ref<Array<string | number>>([]);
|
|||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
const planList = ref<PlanVO[]>([]);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const invitationFormRef = ref<ElFormInstance>();
|
||||
|
|
@ -212,6 +219,24 @@ const getList = async () => {
|
|||
loading.value = false;
|
||||
}
|
||||
|
||||
const getAllPlan = async () => {
|
||||
const res = await allPlan();
|
||||
planList.value = res.data;
|
||||
}
|
||||
|
||||
const getPlanName = (id) => {
|
||||
let name = "";
|
||||
console.log(planList.value);
|
||||
console.log(id);
|
||||
planList.value.forEach(plan => {
|
||||
if (plan.id == id) {
|
||||
name = plan.planName
|
||||
}
|
||||
});
|
||||
return name; // 如果找不到就显示ID本身
|
||||
};
|
||||
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
|
|
@ -301,5 +326,6 @@ const handleExport = () => {
|
|||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
getAllPlan();
|
||||
});
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -86,10 +86,8 @@ const tableRef = ref<ElTableInstance>();
|
|||
|
||||
/** 单击选中行数据 */
|
||||
const clickRow = (row: GradeVO) => {
|
||||
if (checkSelectable(row)) {
|
||||
row.flag = !row.flag;
|
||||
tableRef.value?.toggleRowSelection(row, row.flag);
|
||||
}
|
||||
};
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: GradeVO[]) => {
|
||||
|
|
@ -99,10 +97,6 @@ const handleSelectionChange = (selection: GradeVO[]) => {
|
|||
const getRowKey = (row: GradeVO): string => {
|
||||
return String(row.id);
|
||||
};
|
||||
/** 检查角色状态 */
|
||||
const checkSelectable = (row: GradeVO): boolean => {
|
||||
return row.status === '0';
|
||||
};
|
||||
/** 关闭按钮 */
|
||||
const close = () => {
|
||||
const obj: RouteLocationNormalized = {
|
||||
|
|
|
|||
|
|
@ -120,12 +120,17 @@
|
|||
<dict-tag :options="net_flow" :value="scope.row.flow"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="columns[17].visible" label="伪装域名" align="center" prop="serverName" />
|
||||
<el-table-column v-if="columns[18].visible" label="加密私钥" align="center" prop="privateKey" />
|
||||
<el-table-column v-if="columns[19].visible" label="加密标识" align="center" prop="shortIds" />
|
||||
<el-table-column v-if="columns[20].visible" label="目标地址" align="center" prop="dest" />
|
||||
<el-table-column v-if="columns[21].visible" label="ws路径" align="center" prop="path" />
|
||||
<el-table-column v-if="columns[22].visible" label="grpc名称" align="center" prop="serviceName" />
|
||||
<el-table-column v-if="columns[17].visible" label="伪装域名" align="center" prop="disguiseServerName" />
|
||||
<el-table-column v-if="columns[18].visible" label="伪装域名的端口" align="center" prop="disguiseServerPort" />
|
||||
<el-table-column v-if="columns[19].visible" label="允许不安全" align="center" prop="allowInsecure">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="net_true_false" :value="scope.row.allowInsecure"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="columns[20].visible" label="加密公钥" align="center" prop="publicKey" />
|
||||
<el-table-column v-if="columns[21].visible" label="SNI伪装域名" align="center" prop="sni" />
|
||||
<el-table-column v-if="columns[22].visible" label="ws路径" align="center" prop="path" />
|
||||
<el-table-column v-if="columns[23].visible" label="grpc名称" align="center" prop="serviceName" />
|
||||
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
|
|
@ -162,7 +167,9 @@
|
|||
<el-input v-model="form.flowRate" placeholder="请输入流量倍率" />
|
||||
</el-form-item>
|
||||
<el-form-item label="路由组" prop="routeIds">
|
||||
<el-input v-model="form.routeIds" placeholder="请输入路由组" />
|
||||
<el-select v-model="form.routeIdArray" filterable multiple placeholder="请选择">
|
||||
<el-option v-for="item in routeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="加速协议" prop="protocolType">
|
||||
<el-select v-model="form.protocolType" placeholder="请选择加速协议">
|
||||
|
|
@ -236,18 +243,27 @@
|
|||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="伪装域名" prop="serverName" v-if="form.tlsType=='reality'">
|
||||
<el-input v-model="form.serverName" placeholder="请输入伪装域名" />
|
||||
<el-form-item label="伪装域名" prop="disguiseServerName" v-if="form.tlsType=='reality'">
|
||||
<el-input v-model="form.disguiseServerName" placeholder="请输入伪装域名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="伪装域名的端口" prop="disguiseServerPort" v-if="form.tlsType=='reality'">
|
||||
<el-input v-model.number="form.disguiseServerPort" placeholder="请输入伪装域名的端口" />
|
||||
</el-form-item>
|
||||
<el-form-item label="允许不安全" prop="allowInsecure" v-if="form.tlsType=='reality'">
|
||||
<el-switch v-model="form.allowInsecure"></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item label="加密私钥" prop="privateKey" v-if="form.tlsType=='reality'">
|
||||
<el-input v-model="form.privateKey" placeholder="请输入加密私钥" />
|
||||
</el-form-item>
|
||||
<el-form-item label="加密公钥" prop="publicKey" v-if="form.tlsType=='reality'">
|
||||
<el-input v-model="form.publicKey" placeholder="请输入加密公钥" />
|
||||
</el-form-item>
|
||||
<el-form-item label="SNI伪装域名" prop="sni" v-if="form.tlsType=='tls'">
|
||||
<el-input v-model="form.sni" placeholder="请输入SNI伪装域名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="加密标识" prop="shortIds" v-if="form.tlsType=='reality'">
|
||||
<el-input v-model="form.shortIds" placeholder="请输入加密标识" />
|
||||
</el-form-item>
|
||||
<el-form-item label="目标地址" prop="dest" v-if="form.tlsType=='reality'">
|
||||
<el-input v-model="form.dest" placeholder="请输入目标地址" />
|
||||
</el-form-item>
|
||||
<el-form-item label="ws路径" prop="path" v-if="form.streamType=='ws'">
|
||||
<el-input v-model="form.path" placeholder="请输入ws连接路径" />
|
||||
</el-form-item>
|
||||
|
|
@ -271,6 +287,8 @@
|
|||
<script setup name="Node" lang="ts">
|
||||
import { listNode, getNode, delNode, addNode, updateNode } from '@/api/net/node';
|
||||
import { NodeVO, NodeQuery, NodeForm } from '@/api/net/node/types';
|
||||
import { listAll } from '@/api/net/serverRoute';
|
||||
import { ServerRouteVO } from '@/api/net/serverRoute/types';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { net_tls_type, net_stream_type, net_enable_flag, net_true_false, net_flow, net_protocol_type, net_flow_type } = toRefs<any>(proxy?.useDict('net_tls_type', 'net_stream_type', 'net_enable_flag', 'net_true_false', 'net_flow', 'net_protocol_type', 'net_flow_type'));
|
||||
|
|
@ -283,6 +301,7 @@ const ids = ref<Array<string | number>>([]);
|
|||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
const routeList = ref<ServerRouteVO[]>([]);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const nodeFormRef = ref<ElFormInstance>();
|
||||
|
|
@ -307,11 +326,12 @@ const columns = ref<FieldOption[]>([
|
|||
{ key: 15, label: `加密方式`, visible: false, children: [] },
|
||||
{ key: 16, label: `加密类型`, visible: false, children: [] },
|
||||
{ key: 17, label: `伪装域名`, visible: false, children: [] },
|
||||
{ key: 18, label: `加密私钥`, visible: false, children: [] },
|
||||
{ key: 19, label: `加密标识`, visible: false, children: [] },
|
||||
{ key: 20, label: `目标地址`, visible: false, children: [] },
|
||||
{ key: 21, label: `ws路径`, visible: false, children: [] },
|
||||
{ key: 22, label: `grpc名称`, visible: false, children: [] },
|
||||
{ key: 18, label: `伪装域名的端口`, visible: false, children: [] },
|
||||
{ key: 19, label: `允许不安全`, visible: false, children: [] },
|
||||
{ key: 20, label: `加密私钥`, visible: false, children: [] },
|
||||
{ key: 21, label: `加密标识`, visible: false, children: [] },
|
||||
{ key: 22, label: `ws路径`, visible: false, children: [] },
|
||||
{ key: 23, label: `grpc名称`, visible: false, children: [] },
|
||||
]);
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
|
|
@ -337,10 +357,13 @@ const initFormData: NodeForm = {
|
|||
streamType: undefined,
|
||||
tlsType: undefined,
|
||||
flow: undefined,
|
||||
serverName: undefined,
|
||||
disguiseServerName: undefined,
|
||||
disguiseServerPort: undefined,
|
||||
allowInsecure: undefined,
|
||||
privateKey: undefined,
|
||||
publicKey: undefined,
|
||||
sni: undefined,
|
||||
shortIds: undefined,
|
||||
dest: undefined,
|
||||
path: undefined,
|
||||
serviceName: undefined,
|
||||
}
|
||||
|
|
@ -403,6 +426,23 @@ const getList = async () => {
|
|||
loading.value = false;
|
||||
}
|
||||
|
||||
/** 获取路由组名称 */
|
||||
const getRouteName = (id) => {
|
||||
let name = "";
|
||||
routeList.value.forEach(route => {
|
||||
if (route.id == id) {
|
||||
name = route.name
|
||||
}
|
||||
});
|
||||
return name; // 如果找不到就显示ID本身
|
||||
};
|
||||
|
||||
/** 查询所有的路由组 */
|
||||
const listAllRoutes = async () => {
|
||||
const res = await listAll();
|
||||
routeList.value = res.data;
|
||||
}
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
|
|
@ -484,7 +524,8 @@ const handleExport = () => {
|
|||
}, `node_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
onMounted(async () => {
|
||||
await listAllRoutes();
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,474 @@
|
|||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<el-form-item label="临时账号" prop="temporaryAccount">
|
||||
<el-input v-model="queryParams.temporaryAccount" placeholder="请输入临时账号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="渠道名称" prop="invitationCodeName">
|
||||
<el-input v-model="queryParams.invitationCodeName" placeholder="请输入渠道名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="充值天数" prop="rechargeDays">
|
||||
<el-input v-model="queryParams.rechargeDays" placeholder="请输入充值天数" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="订单号" prop="orderNumber">
|
||||
<el-input v-model="queryParams.orderNumber" placeholder="请输入订单号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="支付平台" prop="payConfigName">
|
||||
<el-input v-model="queryParams.payConfigName" placeholder="请输入支付平台" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="设备类型" prop="deviceType">
|
||||
<el-select v-model="queryParams.deviceType" placeholder="请选择设备类型" clearable >
|
||||
<el-option v-for="dict in sys_device_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付状态" prop="payStatus">
|
||||
<el-select v-model="queryParams.payStatus" placeholder="请选择支付状态" clearable >
|
||||
<el-option v-for="dict in net_order_status" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付方式" prop="payType">
|
||||
<el-select v-model="queryParams.payType" placeholder="请选择支付方式" clearable >
|
||||
<el-option v-for="dict in net_pay_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付时间" style="width: 308px">
|
||||
<el-date-picker v-model="dateRangePayTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['net:order:add']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['net:order:edit']">修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['net:order:remove']">删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['net:order:export']">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" border :data="orderList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column v-if="columns[0].visible" label="ID" align="center" prop="id" />
|
||||
<el-table-column v-if="columns[1].visible" label="用户ID" align="center" prop="userId" />
|
||||
<el-table-column v-if="columns[2].visible" label="临时账号" align="center" prop="temporaryAccount" />
|
||||
<el-table-column v-if="columns[3].visible" label="渠道号ID" align="center" prop="invitationCodeId" />
|
||||
<el-table-column v-if="columns[4].visible" label="渠道名称" align="center" prop="invitationCodeName" />
|
||||
<el-table-column v-if="columns[5].visible" label="充值天数" align="center" prop="rechargeDays" />
|
||||
<el-table-column v-if="columns[6].visible" label="充值金额" align="center" prop="rechargeMoney" />
|
||||
<el-table-column v-if="columns[7].visible" label="币种" align="center" prop="currency" />
|
||||
<el-table-column v-if="columns[8].visible" label="三方订单" align="center" prop="orderNumber" />
|
||||
<el-table-column v-if="columns[9].visible" label="支付平台" align="center" prop="payConfigName" />
|
||||
<el-table-column v-if="columns[10].visible" label="平台订单号" align="center" prop="platformOrderNumber" />
|
||||
<el-table-column v-if="columns[11].visible" label="设备类型" align="center" prop="deviceType">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="sys_device_type" :value="scope.row.deviceType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="columns[12].visible" label="支付状态" align="center" prop="payStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="net_order_status" :value="scope.row.payStatus"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="columns[13].visible" label="支付IP" align="center" prop="payIp" />
|
||||
<el-table-column v-if="columns[14].visible" label="支付方式" align="center" prop="payType">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="net_pay_type" :value="scope.row.payType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="columns[15].visible" label="充值发起时间" align="center" prop="rechargeTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.rechargeTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="columns[16].visible" label="实际支付时间" align="center" prop="payTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.payTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="columns[17].visible" label="赠送时长(分钟)" align="center" prop="giftTime" />
|
||||
<el-table-column v-if="columns[18].visible" label="退款时间" align="center" prop="refundTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.refundTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="columns[19].visible" label="回调通知时间" align="center" prop="notifyTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.notifyTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="columns[20].visible" label="充值前有效期" align="center" prop="rechargeBeforeTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.rechargeBeforeTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="columns[21].visible" label="充值后有效期" align="center" prop="rechargeAfterTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.rechargeAfterTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['net:order:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['net:order:remove']"></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
<!-- 添加或修改支付订单对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="orderFormRef" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="用户ID" prop="userId">
|
||||
<el-input v-model="form.userId" placeholder="请输入用户ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="临时账号" prop="temporaryAccount">
|
||||
<el-input v-model="form.temporaryAccount" placeholder="请输入临时账号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="渠道号ID" prop="invitationCodeId">
|
||||
<el-input v-model="form.invitationCodeId" placeholder="请输入渠道号ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="渠道名称" prop="invitationCodeName">
|
||||
<el-input v-model="form.invitationCodeName" placeholder="请输入渠道名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="充值天数" prop="rechargeDays">
|
||||
<el-input v-model="form.rechargeDays" placeholder="请输入充值天数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="充值金额" prop="rechargeMoney">
|
||||
<el-input v-model="form.rechargeMoney" placeholder="请输入充值金额" />
|
||||
</el-form-item>
|
||||
<el-form-item label="币种" prop="currency">
|
||||
<el-input v-model="form.currency" placeholder="请输入币种" />
|
||||
</el-form-item>
|
||||
<el-form-item label="三方订单" prop="orderNumber">
|
||||
<el-input v-model="form.orderNumber" placeholder="请输入三方订单" />
|
||||
</el-form-item>
|
||||
<el-form-item label="支付平台" prop="payConfigName">
|
||||
<el-input v-model="form.payConfigName" placeholder="请输入支付平台" />
|
||||
</el-form-item>
|
||||
<el-form-item label="平台订单号" prop="platformOrderNumber">
|
||||
<el-input v-model="form.platformOrderNumber" placeholder="请输入平台订单号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="设备类型" prop="deviceType">
|
||||
<el-select v-model="form.deviceType" placeholder="请选择设备类型">
|
||||
<el-option
|
||||
v-for="dict in sys_device_type"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付状态" prop="payStatus">
|
||||
<el-select v-model="form.payStatus" placeholder="请选择支付状态">
|
||||
<el-option
|
||||
v-for="dict in net_order_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="parseInt(dict.value)"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付IP" prop="payIp">
|
||||
<el-input v-model="form.payIp" placeholder="请输入支付IP" />
|
||||
</el-form-item>
|
||||
<el-form-item label="支付方式" prop="payType">
|
||||
<el-select v-model="form.payType" placeholder="请选择支付方式">
|
||||
<el-option
|
||||
v-for="dict in net_pay_type"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="充值发起时间" prop="rechargeTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.rechargeTime"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择充值发起时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="实际支付时间" prop="payTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.payTime"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择实际支付时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="赠送时长(分钟)" prop="giftTime">
|
||||
<el-input v-model="form.giftTime" placeholder="请输入赠送时长(分钟)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="退款时间" prop="refundTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.refundTime"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择退款时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="回调通知时间" prop="notifyTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.notifyTime"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择回调通知时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="充值前有效期" prop="rechargeBeforeTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.rechargeBeforeTime"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择充值前有效期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="充值后有效期" prop="rechargeAfterTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.rechargeAfterTime"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择充值后有效期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="Order" lang="ts">
|
||||
import { listOrder, getOrder, delOrder, addOrder, updateOrder } from '@/api/net/order';
|
||||
import { OrderVO, OrderQuery, OrderForm } from '@/api/net/order/types';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { sys_device_type, net_order_status, net_pay_type } = toRefs<any>(proxy?.useDict('sys_device_type', 'net_order_status', 'net_pay_type'));
|
||||
|
||||
const orderList = ref<OrderVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
const dateRangePayTime = ref<[DateModelType, DateModelType]>(['', '']);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const orderFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
|
||||
// 列显隐信息
|
||||
const columns = ref<FieldOption[]>([
|
||||
{ key: 0, label: `ID`, visible: false, children: [] },
|
||||
{ key: 1, label: `用户ID`, visible: false, children: [] },
|
||||
{ key: 2, label: `临时账号`, visible: true, children: [] },
|
||||
{ key: 3, label: `渠道号ID`, visible: false, children: [] },
|
||||
{ key: 4, label: `渠道名称`, visible: true, children: [] },
|
||||
{ key: 5, label: `充值天数`, visible: true, children: [] },
|
||||
{ key: 6, label: `充值金额`, visible: true, children: [] },
|
||||
{ key: 7, label: `币种`, visible: false, children: [] },
|
||||
{ key: 8, label: `三方订单`, visible: false, children: [] },
|
||||
{ key: 9, label: `支付平台`, visible: true, children: [] },
|
||||
{ key: 10, label: `平台订单号`, visible: false, children: [] },
|
||||
{ key: 11, label: `设备类型`, visible: false, children: [] },
|
||||
{ key: 12, label: `支付状态`, visible: true, children: [] },
|
||||
{ key: 13, label: `支付IP`, visible: false, children: [] },
|
||||
{ key: 14, label: `支付方式`, visible: false, children: [] },
|
||||
{ key: 15, label: `充值发起时间`, visible: false, children: [] },
|
||||
{ key: 16, label: `实际支付时间`, visible: true, children: [] },
|
||||
{ key: 17, label: `赠送时长`, visible: true, children: [] },
|
||||
{ key: 18, label: `退款时间`, visible: false, children: [] },
|
||||
{ key: 19, label: `回调通知时间`, visible: false, children: [] },
|
||||
{ key: 20, label: `充值前有效期`, visible: false, children: [] },
|
||||
{ key: 21, label: `充值后有效期`, visible: true, children: [] },
|
||||
]);
|
||||
|
||||
const initFormData: OrderForm = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
temporaryAccount: undefined,
|
||||
invitationCodeId: undefined,
|
||||
invitationCodeName: undefined,
|
||||
rechargeDays: undefined,
|
||||
rechargeMoney: undefined,
|
||||
currency: undefined,
|
||||
orderNumber: undefined,
|
||||
payConfigName: undefined,
|
||||
platformOrderNumber: undefined,
|
||||
deviceType: undefined,
|
||||
payStatus: undefined,
|
||||
payIp: undefined,
|
||||
payType: undefined,
|
||||
rechargeTime: undefined,
|
||||
payTime: undefined,
|
||||
giftTime: undefined,
|
||||
refundTime: undefined,
|
||||
notifyTime: undefined,
|
||||
rechargeBeforeTime: undefined,
|
||||
rechargeAfterTime: undefined,
|
||||
}
|
||||
const data = reactive<PageData<OrderForm, OrderQuery>>({
|
||||
form: {...initFormData},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
temporaryAccount: undefined,
|
||||
invitationCodeName: undefined,
|
||||
rechargeDays: undefined,
|
||||
orderNumber: undefined,
|
||||
payConfigName: undefined,
|
||||
deviceType: undefined,
|
||||
payStatus: 1,
|
||||
payType: undefined,
|
||||
params: {
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
id: [
|
||||
{ required: true, message: "ID不能为空", trigger: "blur" }
|
||||
],
|
||||
userId: [
|
||||
{ required: true, message: "用户ID不能为空", trigger: "blur" }
|
||||
],
|
||||
invitationCodeId: [
|
||||
{ required: true, message: "渠道号ID不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
/** 查询支付订单列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
proxy?.addDateRange(queryParams.value, dateRangePayTime.value, 'PayTime');
|
||||
const res = await listOrder(queryParams.value);
|
||||
orderList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
}
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
dateRangePayTime.value = ['', ''];
|
||||
form.value = {...initFormData};
|
||||
orderFormRef.value?.resetFields();
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
}
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: OrderVO[]) => {
|
||||
ids.value = selection.map(item => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
}
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = "添加支付订单";
|
||||
}
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: OrderVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0]
|
||||
const res = await getOrder(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = "修改支付订单";
|
||||
}
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
orderFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.id) {
|
||||
await updateOrder(form.value).finally(() => buttonLoading.value = false);
|
||||
} else {
|
||||
await addOrder(form.value).finally(() => buttonLoading.value = false);
|
||||
}
|
||||
proxy?.$modal.msgSuccess("操作成功");
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: OrderVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除支付订单编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||
await delOrder(_ids);
|
||||
proxy?.$modal.msgSuccess("删除成功");
|
||||
await getList();
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download('net/order/export', {
|
||||
...queryParams.value
|
||||
}, `order_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
|
|
@ -0,0 +1,305 @@
|
|||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<el-form-item label="平台名称" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入平台名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="处理策略" prop="payStrategy">
|
||||
<el-select v-model="queryParams.payStrategy" placeholder="请选择处理策略" clearable >
|
||||
<el-option v-for="dict in net_pay_strategy" :key="dict.value" :label="dict.label" :value="dict.value"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['net:payConfig:add']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['net:payConfig:edit']">修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['net:payConfig:remove']">删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['net:payConfig:export']">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" border :data="payConfigList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="ID" align="center" prop="id" v-if="true" />
|
||||
<el-table-column label="平台名称" align="center" prop="name" />
|
||||
<el-table-column label="处理策略" align="center" prop="payStrategy">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="net_pay_strategy" :value="scope.row.payStrategy"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="商户编号" align="center" prop="mchNo" />
|
||||
<el-table-column label="开启状态" align="center" prop="enableFlag">
|
||||
<template #default="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.enableFlag"
|
||||
@change="(val) => handleEnableChange(scope.row, val)"
|
||||
style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
|
||||
:active-value="1"
|
||||
:inactive-value="2"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="公钥" align="center" prop="publicKey" show-overflow-tooltip/>
|
||||
<el-table-column label="支付宝参数" align="center" prop="alipayParam" />
|
||||
<el-table-column label="微信参数" align="center" prop="wxpayParam" />
|
||||
<el-table-column label="支付网关" align="center" prop="gatewayUrl" />
|
||||
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['net:payConfig:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="置顶" placement="top">
|
||||
<el-button link type="primary" icon="Top" @click="handleTop(scope.row)" v-hasPermi="['net:payConfig:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['net:payConfig:remove']"></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
<!-- 添加或修改支付配置对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="550px" append-to-body>
|
||||
<el-form ref="payConfigFormRef" :model="form" :rules="rules" label-width="120px">
|
||||
<el-form-item label="平台名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入平台名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="处理策略" prop="payStrategy">
|
||||
<el-select v-model="form.payStrategy" placeholder="请选择处理策略">
|
||||
<el-option
|
||||
v-for="dict in net_pay_strategy"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="商户编号" prop="mchNo">
|
||||
<el-input v-model="form.mchNo" placeholder="请输入商户编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="私钥" prop="privateKey">
|
||||
<el-input v-model="form.privateKey" placeholder="请输入私钥" />
|
||||
</el-form-item>
|
||||
<el-form-item label="公钥" prop="publicKey">
|
||||
<el-input v-model="form.publicKey" placeholder="请输入公钥" />
|
||||
</el-form-item>
|
||||
<el-form-item label="支付宝参数" prop="alipayParam">
|
||||
<el-input v-model="form.alipayParam" placeholder="请输入支付宝参数(nonsupport表示不支持)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="微信参数" prop="wxpayParam">
|
||||
<el-input v-model="form.wxpayParam" placeholder="请输入微信参数(nonsupport表示不支持)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="支付网关" prop="gatewayUrl">
|
||||
<el-input v-model="form.gatewayUrl" placeholder="请输入支付网关" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="PayConfig" lang="ts">
|
||||
import { listAllPayConfig, getPayConfig, delPayConfig, addPayConfig, updatePayConfig, enablePay, topPay } from '@/api/net/payConfig';
|
||||
import { PayConfigVO, PayConfigQuery, PayConfigForm } from '@/api/net/payConfig/types';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { net_pay_strategy } = toRefs<any>(proxy?.useDict('net_pay_strategy'));
|
||||
|
||||
const payConfigList = ref<PayConfigVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const payConfigFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: PayConfigForm = {
|
||||
id: undefined,
|
||||
name: undefined,
|
||||
payStrategy: undefined,
|
||||
mchNo: undefined,
|
||||
privateKey: undefined,
|
||||
publicKey: undefined,
|
||||
alipayParam: undefined,
|
||||
wxpayParam: undefined,
|
||||
}
|
||||
const data = reactive<PageData<PayConfigForm, PayConfigQuery>>({
|
||||
form: {...initFormData},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
name: undefined,
|
||||
payStrategy: undefined,
|
||||
params: {
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
id: [
|
||||
{ required: true, message: "不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
/** 查询支付配置列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listAllPayConfig(queryParams.value);
|
||||
payConfigList.value = res.data;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
}
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = {...initFormData};
|
||||
payConfigFormRef.value?.resetFields();
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
}
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: PayConfigVO[]) => {
|
||||
ids.value = selection.map(item => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
}
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = "添加支付配置";
|
||||
}
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: PayConfigVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0]
|
||||
const res = await getPayConfig(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = "修改支付配置";
|
||||
}
|
||||
|
||||
/** 置顶排序操作 */
|
||||
const handleTop = async (row?: PayConfigVO) => {
|
||||
const data: PayConfigForm = {
|
||||
id: row?.id
|
||||
};
|
||||
await topPay(data);
|
||||
proxy?.$modal.msgSuccess("操作成功");
|
||||
await getList();
|
||||
}
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
payConfigFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.id) {
|
||||
await updatePayConfig(form.value).finally(() => buttonLoading.value = false);
|
||||
} else {
|
||||
await addPayConfig(form.value).finally(() => buttonLoading.value = false);
|
||||
}
|
||||
proxy?.$modal.msgSuccess("操作成功");
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: PayConfigVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除支付配置编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||
await delPayConfig(_ids);
|
||||
proxy?.$modal.msgSuccess("删除成功");
|
||||
await getList();
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download('net/payConfig/export', {
|
||||
...queryParams.value
|
||||
}, `payConfig_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
|
||||
/** 开启或关闭(使用 change 事件,失败时回滚状态) */
|
||||
const handleEnableChange = async (row: PayConfigVO, val: any) => {
|
||||
// 统一为数字类型处理(后端和前端保持一致)
|
||||
const flag = typeof val === 'string' ? Number(val) : val;
|
||||
const rollback = flag === 1 ? 2 : 1;
|
||||
try {
|
||||
const data: PayConfigForm = {
|
||||
id: row.id,
|
||||
enableFlag: flag
|
||||
};
|
||||
await enablePay(data);
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
} catch (err) {
|
||||
// 回滚 UI 状态
|
||||
row.enableFlag = rollback as any;
|
||||
proxy?.$modal.msgError?.('操作失败');
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
Loading…
Reference in New Issue