fix(ts): 批量收敛类型问题并支持 Dialog loading
- Dialog 增加 loading prop,支付详情弹窗改用统一加载态 - 对齐支付/会员/商城等 API VO 类型,修复 dall3 尺寸入参转换 - 复用 VO/ReqVO 简化表单和查询参数类型 - 必填字段使用非空断言,减少过度防御 - 忽略 .playwright-cli 自动化测试产物 ts:check 478 → 252,无新增类型错误master
parent
bc25430fa5
commit
ba6ac7a420
|
|
@ -8,3 +8,4 @@ auto-*.d.ts
|
|||
.idea
|
||||
.history
|
||||
output/
|
||||
.playwright-cli/
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ export const ChatConversationApi = {
|
|||
},
|
||||
|
||||
// 删除【我的】聊天对话
|
||||
deleteChatConversationMy: async (id: string) => {
|
||||
deleteChatConversationMy: async (id: number) => {
|
||||
return await request.delete({ url: `/ai/chat/conversation/delete-my?id=${id}` })
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ export interface ImageDrawReqVO {
|
|||
prompt: string // 提示词
|
||||
modelId: number // 模型
|
||||
style: string // 图像生成的风格
|
||||
width: string // 图片宽度
|
||||
height: string // 图片高度
|
||||
width: number // 图片宽度
|
||||
height: number // 图片高度
|
||||
options: object // 绘制参数,Map<String, String>
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,11 +2,17 @@ import request from '@/config/axios'
|
|||
|
||||
export interface Favorite {
|
||||
id?: number
|
||||
userId?: string // 用户编号
|
||||
userId?: number // 用户编号
|
||||
spuId?: number | null // 商品 SPU 编号
|
||||
name?: string
|
||||
picUrl?: string
|
||||
price?: number
|
||||
salesCount?: number
|
||||
createTime?: Date
|
||||
status?: number
|
||||
}
|
||||
|
||||
// 获得 ProductFavorite 列表
|
||||
export const getFavoritePage = (params: PageParam) => {
|
||||
return request.get({ url: '/product/favorite/page', params })
|
||||
return request.get<PageResult<Favorite[]>>({ url: '/product/favorite/page', params })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import request from '@/config/axios'
|
||||
import type { OrderItemRespVO, OrderVO } from '@/api/mall/trade/order'
|
||||
|
||||
export interface TradeAfterSaleVO {
|
||||
id?: number | null // 售后编号,主键自增
|
||||
|
|
@ -32,6 +33,21 @@ export interface TradeAfterSaleVO {
|
|||
receiveReason?: string // 收货备注
|
||||
}
|
||||
|
||||
export interface TradeAfterSaleDetailVO extends TradeAfterSaleVO {
|
||||
order: OrderVO
|
||||
orderItem?: OrderItemRespVO
|
||||
user?: {
|
||||
id?: number
|
||||
nickname?: string
|
||||
}
|
||||
logs: Array<{
|
||||
id?: number
|
||||
createTime?: Date
|
||||
content?: string
|
||||
userType?: number
|
||||
}>
|
||||
}
|
||||
|
||||
export interface ProductPropertiesVO {
|
||||
propertyId?: number | null // 属性的编号
|
||||
propertyName?: string // 属性的名称
|
||||
|
|
@ -41,12 +57,15 @@ export interface ProductPropertiesVO {
|
|||
|
||||
// 获得交易售后分页
|
||||
export const getAfterSalePage = async (params) => {
|
||||
return await request.get({ url: `/trade/after-sale/page`, params })
|
||||
return await request.get<PageResult<TradeAfterSaleVO[]>>({
|
||||
url: `/trade/after-sale/page`,
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 获得交易售后详情
|
||||
export const getAfterSale = async (id: any) => {
|
||||
return await request.get({ url: `/trade/after-sale/get-detail?id=${id}` })
|
||||
return await request.get<TradeAfterSaleDetailVO>({ url: `/trade/after-sale/get-detail?id=${id}` })
|
||||
}
|
||||
|
||||
// 同意售后
|
||||
|
|
|
|||
|
|
@ -20,12 +20,15 @@ export const createBrokerageUser = (data: any) => {
|
|||
|
||||
// 查询分销用户列表
|
||||
export const getBrokerageUserPage = async (params: any) => {
|
||||
return await request.get({ url: `/trade/brokerage-user/page`, params })
|
||||
return await request.get<PageResult<BrokerageUserVO[]>>({
|
||||
url: `/trade/brokerage-user/page`,
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询分销用户详情
|
||||
export const getBrokerageUser = async (id: number) => {
|
||||
return await request.get({ url: `/trade/brokerage-user/get?id=` + id })
|
||||
return await request.get<BrokerageUserVO>({ url: `/trade/brokerage-user/get?id=` + id })
|
||||
}
|
||||
|
||||
// 修改推广员
|
||||
|
|
|
|||
|
|
@ -1,20 +1,28 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ConfigVO {
|
||||
id?: number | null
|
||||
afterSaleRefundReasons: string[]
|
||||
afterSaleReturnReasons: string[]
|
||||
deliveryExpressFreeEnabled: boolean
|
||||
deliveryExpressFreePrice: number
|
||||
deliveryPickUpEnabled: boolean
|
||||
brokerageEnabled: boolean
|
||||
brokerageEnabledCondition: number
|
||||
brokerageBindMode: number
|
||||
brokeragePosterUrls: string
|
||||
brokerageEnabledCondition?: number
|
||||
brokerageBindMode?: number
|
||||
brokeragePosterUrls: string[]
|
||||
brokerageFirstPercent: number
|
||||
brokerageSecondPercent: number
|
||||
brokerageWithdrawMinPrice: number
|
||||
brokerageWithdrawFeePercent: number
|
||||
brokerageFrozenDays: number
|
||||
brokerageWithdrawTypes: string
|
||||
brokerageWithdrawTypes: number[]
|
||||
tencentLbsKey?: string
|
||||
}
|
||||
|
||||
// 查询交易中心配置详情
|
||||
export const getTradeConfig = async () => {
|
||||
return await request.get({ url: `/trade/config/get` })
|
||||
return await request.get<ConfigVO>({ url: `/trade/config/get` })
|
||||
}
|
||||
|
||||
// 保存交易中心配置
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface DeliveryExpressVO {
|
||||
id: number
|
||||
id?: number
|
||||
code: string
|
||||
name: string
|
||||
logo: string
|
||||
|
|
@ -11,17 +11,20 @@ export interface DeliveryExpressVO {
|
|||
|
||||
// 查询快递公司列表
|
||||
export const getDeliveryExpressPage = async (params: PageParam) => {
|
||||
return await request.get({ url: '/trade/delivery/express/page', params })
|
||||
return await request.get<PageResult<DeliveryExpressVO[]>>({
|
||||
url: '/trade/delivery/express/page',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询快递公司详情
|
||||
export const getDeliveryExpress = async (id: number) => {
|
||||
return await request.get({ url: '/trade/delivery/express/get?id=' + id })
|
||||
return await request.get<DeliveryExpressVO>({ url: '/trade/delivery/express/get?id=' + id })
|
||||
}
|
||||
|
||||
// 获得快递公司精简信息列表
|
||||
export const getSimpleDeliveryExpressList = () => {
|
||||
return request.get({ url: '/trade/delivery/express/list-all-simple' })
|
||||
return request.get<DeliveryExpressVO[]>({ url: '/trade/delivery/express/list-all-simple' })
|
||||
}
|
||||
|
||||
// 新增快递公司
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface DeliveryExpressTemplateVO {
|
||||
id: number
|
||||
id?: number
|
||||
name: string
|
||||
chargeMode: number
|
||||
sort: number
|
||||
templateCharge: ExpressTemplateChargeVO[]
|
||||
templateFree: ExpressTemplateFreeVO[]
|
||||
charges: ExpressTemplateChargeVO[]
|
||||
frees: ExpressTemplateFreeVO[]
|
||||
}
|
||||
|
||||
export declare type ExpressTemplateChargeVO = {
|
||||
|
|
@ -25,17 +25,24 @@ export declare type ExpressTemplateFreeVO = {
|
|||
|
||||
// 查询快递运费模板列表
|
||||
export const getDeliveryExpressTemplatePage = async (params: PageParam) => {
|
||||
return await request.get({ url: '/trade/delivery/express-template/page', params })
|
||||
return await request.get<PageResult<DeliveryExpressTemplateVO[]>>({
|
||||
url: '/trade/delivery/express-template/page',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询快递运费模板详情
|
||||
export const getDeliveryExpressTemplate = async (id: number) => {
|
||||
return await request.get({ url: '/trade/delivery/express-template/get?id=' + id })
|
||||
return await request.get<DeliveryExpressTemplateVO>({
|
||||
url: '/trade/delivery/express-template/get?id=' + id
|
||||
})
|
||||
}
|
||||
|
||||
// 查询快递运费模板详情
|
||||
export const getSimpleTemplateList = async () => {
|
||||
return await request.get({ url: '/trade/delivery/express-template/list-all-simple' })
|
||||
return await request.get<DeliveryExpressTemplateVO[]>({
|
||||
url: '/trade/delivery/express-template/list-all-simple'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增快递运费模板
|
||||
|
|
|
|||
|
|
@ -1,34 +1,48 @@
|
|||
import request from '@/config/axios'
|
||||
import type { UserVO } from '@/api/system/user'
|
||||
|
||||
export interface DeliveryPickUpStoreVO {
|
||||
id: number
|
||||
id?: number
|
||||
name: string
|
||||
introduction: string
|
||||
phone: string
|
||||
areaId: number
|
||||
areaId?: number
|
||||
detailAddress: string
|
||||
logo: string
|
||||
openingTime: string
|
||||
closingTime: string
|
||||
latitude: number
|
||||
longitude: number
|
||||
openingTime?: string
|
||||
closingTime?: string
|
||||
latitude?: number
|
||||
longitude?: number
|
||||
status: number
|
||||
verifyUserIds: number[] // 绑定用户编号组数
|
||||
verifyUserIds?: number[] // 绑定用户编号组数
|
||||
verifyUsers?: UserVO[] // 绑定用户列表
|
||||
}
|
||||
|
||||
export interface DeliveryPickUpStoreBindReqVO {
|
||||
id: number
|
||||
verifyUserIds: number[]
|
||||
}
|
||||
|
||||
// 查询自提门店列表
|
||||
export const getDeliveryPickUpStorePage = async (params: any) => {
|
||||
return await request.get({ url: '/trade/delivery/pick-up-store/page', params })
|
||||
return await request.get<PageResult<DeliveryPickUpStoreVO[]>>({
|
||||
url: '/trade/delivery/pick-up-store/page',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询自提门店详情
|
||||
export const getDeliveryPickUpStore = async (id: number) => {
|
||||
return await request.get({ url: '/trade/delivery/pick-up-store/get?id=' + id })
|
||||
return await request.get<DeliveryPickUpStoreVO>({
|
||||
url: '/trade/delivery/pick-up-store/get?id=' + id
|
||||
})
|
||||
}
|
||||
|
||||
// 查询自提门店精简列表
|
||||
export const getSimpleDeliveryPickUpStoreList = async (): Promise<DeliveryPickUpStoreVO[]> => {
|
||||
return await request.get({ url: '/trade/delivery/pick-up-store/simple-list' })
|
||||
export const getSimpleDeliveryPickUpStoreList = async () => {
|
||||
return await request.get<DeliveryPickUpStoreVO[]>({
|
||||
url: '/trade/delivery/pick-up-store/simple-list'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增自提门店
|
||||
|
|
@ -47,6 +61,6 @@ export const deleteDeliveryPickUpStore = async (id: number) => {
|
|||
}
|
||||
|
||||
// 绑定自提店员
|
||||
export const bindStoreStaffId = async (data: any) => {
|
||||
export const bindStoreStaffId = async (data: DeliveryPickUpStoreBindReqVO) => {
|
||||
return await request.post({ url: '/trade/delivery/pick-up-store/bind', data })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ export interface TradeOrderSummaryRespVO {
|
|||
|
||||
// 查询交易订单列表
|
||||
export const getOrderPage = async (params: any) => {
|
||||
return await request.get({ url: `/trade/order/page`, params })
|
||||
return await request.get<PageResult<OrderVO[]>>({ url: `/trade/order/page`, params })
|
||||
}
|
||||
|
||||
// 查询交易订单统计
|
||||
|
|
@ -132,12 +132,14 @@ export const getOrderSummary = async (params: any) => {
|
|||
|
||||
// 查询交易订单详情
|
||||
export const getOrder = async (id: number | null) => {
|
||||
return await request.get({ url: `/trade/order/get-detail?id=` + id })
|
||||
return await request.get<OrderVO>({ url: `/trade/order/get-detail?id=` + id })
|
||||
}
|
||||
|
||||
// 查询交易订单物流详情
|
||||
export const getExpressTrackList = async (id: number | null) => {
|
||||
return await request.get({ url: `/trade/order/get-express-track-list?id=` + id })
|
||||
return await request.get<Array<{ time?: Date | string; content?: string }>>({
|
||||
url: `/trade/order/get-express-track-list?id=` + id
|
||||
})
|
||||
}
|
||||
|
||||
export interface DeliveryVO {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface ConfigVO {
|
||||
id: number
|
||||
pointTradeDeductEnable: number
|
||||
id?: number
|
||||
pointTradeDeductEnable: boolean
|
||||
pointTradeDeductUnitPrice: number
|
||||
pointTradeDeductMaxPrice: number
|
||||
pointTradeGivePoint: number
|
||||
|
|
@ -10,7 +10,7 @@ export interface ConfigVO {
|
|||
|
||||
// 查询积分设置详情
|
||||
export const getConfig = async () => {
|
||||
return await request.get({ url: `/member/config/get` })
|
||||
return await request.get<ConfigVO>({ url: `/member/config/get` })
|
||||
}
|
||||
|
||||
// 新增修改积分设置
|
||||
|
|
|
|||
|
|
@ -13,10 +13,13 @@ export interface ExperienceRecordVO {
|
|||
|
||||
// 查询会员经验记录列表
|
||||
export const getExperienceRecordPage = async (params) => {
|
||||
return await request.get({ url: `/member/experience-record/page`, params })
|
||||
return await request.get<PageResult<ExperienceRecordVO[]>>({
|
||||
url: `/member/experience-record/page`,
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询会员经验记录详情
|
||||
export const getExperienceRecord = async (id: number) => {
|
||||
return await request.get({ url: `/member/experience-record/get?id=` + id })
|
||||
return await request.get<ExperienceRecordVO>({ url: `/member/experience-record/get?id=` + id })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,36 +1,51 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface UserVO {
|
||||
id?: number
|
||||
avatar?: string
|
||||
birthday?: number
|
||||
createTime?: number
|
||||
loginDate?: number
|
||||
loginIp?: string
|
||||
mark?: string
|
||||
mobile?: string
|
||||
email?: string
|
||||
password?: string
|
||||
name?: string
|
||||
nickname?: string
|
||||
registerIp?: string
|
||||
sex?: number
|
||||
status?: number
|
||||
areaId?: number
|
||||
areaName?: string
|
||||
tagIds?: number[]
|
||||
groupId?: number
|
||||
levelId?: number
|
||||
levelName?: string | null
|
||||
point?: number | null
|
||||
totalPoint?: number | null
|
||||
experience?: number | null
|
||||
}
|
||||
|
||||
export interface UserLevelUpdateReqVO {
|
||||
id: number
|
||||
avatar: string | undefined
|
||||
birthday: number | undefined
|
||||
createTime: number | undefined
|
||||
loginDate: number | undefined
|
||||
loginIp: string
|
||||
mark: string
|
||||
mobile: string
|
||||
email: string | undefined
|
||||
name: string | undefined
|
||||
nickname: string | undefined
|
||||
registerIp: string
|
||||
sex: number
|
||||
status: number
|
||||
areaId: number | undefined
|
||||
areaName: string | undefined
|
||||
levelName: string | null
|
||||
point: number | undefined | null
|
||||
totalPoint: number | undefined | null
|
||||
experience: number | null | undefined
|
||||
levelId: number
|
||||
reason: string
|
||||
}
|
||||
|
||||
export interface UserPointUpdateReqVO {
|
||||
id: number
|
||||
point: number
|
||||
}
|
||||
|
||||
// 查询会员用户列表
|
||||
export const getUserPage = async (params) => {
|
||||
return await request.get({ url: `/member/user/page`, params })
|
||||
return await request.get<PageResult<UserVO[]>>({ url: `/member/user/page`, params })
|
||||
}
|
||||
|
||||
// 查询会员用户详情
|
||||
export const getUser = async (id: number) => {
|
||||
return await request.get({ url: `/member/user/get?id=` + id })
|
||||
return await request.get<UserVO>({ url: `/member/user/get?id=` + id })
|
||||
}
|
||||
|
||||
// 修改会员用户
|
||||
|
|
@ -39,11 +54,11 @@ export const updateUser = async (data: UserVO) => {
|
|||
}
|
||||
|
||||
// 修改会员用户等级
|
||||
export const updateUserLevel = async (data: any) => {
|
||||
export const updateUserLevel = async (data: UserLevelUpdateReqVO) => {
|
||||
return await request.put({ url: `/member/user/update-level`, data })
|
||||
}
|
||||
|
||||
// 修改会员用户积分
|
||||
export const updateUserPoint = async (data: any) => {
|
||||
export const updateUserPoint = async (data: UserPointUpdateReqVO) => {
|
||||
return await request.put({ url: `/member/user/update-point`, data })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ export const deleteApp = (id: number) => {
|
|||
|
||||
// 获得支付应用列表
|
||||
export const getAppList = () => {
|
||||
return request.get({
|
||||
return request.get<AppVO[]>({
|
||||
url: '/pay/app/list'
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,43 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface NotifyLogVO {
|
||||
id?: number
|
||||
status?: number
|
||||
notifyTimes?: number
|
||||
lastExecuteTime?: Date
|
||||
createTime?: Date
|
||||
response?: string
|
||||
}
|
||||
|
||||
export interface NotifyTaskVO {
|
||||
id?: number
|
||||
appId?: number
|
||||
appName?: string
|
||||
merchantOrderId?: string
|
||||
merchantRefundId?: string
|
||||
merchantTransferId?: string
|
||||
dataId?: number
|
||||
type?: number
|
||||
status?: number
|
||||
notifyTimes?: number
|
||||
maxNotifyTimes?: number
|
||||
lastExecuteTime?: Date
|
||||
nextNotifyTime?: Date
|
||||
createTime?: Date
|
||||
updateTime?: Date
|
||||
logs?: NotifyLogVO[]
|
||||
}
|
||||
|
||||
// 获得支付通知明细
|
||||
export const getNotifyTaskDetail = (id) => {
|
||||
return request.get({
|
||||
export const getNotifyTaskDetail = (id: number) => {
|
||||
return request.get<NotifyTaskVO>({
|
||||
url: '/pay/notify/get-detail?id=' + id
|
||||
})
|
||||
}
|
||||
|
||||
// 获得支付通知分页
|
||||
export const getNotifyTaskPage = (query) => {
|
||||
return request.get({
|
||||
export const getNotifyTaskPage = (query: any) => {
|
||||
return request.get<PageResult<NotifyTaskVO[]>>({
|
||||
url: '/pay/notify/page',
|
||||
params: query
|
||||
})
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ export interface OrderVO {
|
|||
notifyUrl: string
|
||||
notifyStatus: number
|
||||
amount: number
|
||||
price: number
|
||||
channelFeeRate: number
|
||||
channelFeeAmount: number
|
||||
status: number
|
||||
|
|
@ -28,64 +29,43 @@ export interface OrderVO {
|
|||
createTime: Date
|
||||
}
|
||||
|
||||
export interface OrderPageReqVO extends PageParam {
|
||||
merchantId?: number
|
||||
appId?: number
|
||||
channelId?: number
|
||||
channelCode?: string
|
||||
export interface OrderDetailVO {
|
||||
merchantOrderId?: string
|
||||
no?: string
|
||||
appId?: number
|
||||
appName?: string
|
||||
status?: number
|
||||
price?: number
|
||||
refundPrice?: number
|
||||
channelFeePrice?: number
|
||||
channelFeeRate?: number
|
||||
successTime?: Date
|
||||
expireTime?: Date
|
||||
createTime?: Date
|
||||
updateTime?: Date
|
||||
subject?: string
|
||||
body?: string
|
||||
notifyUrl?: string
|
||||
notifyStatus?: number
|
||||
amount?: number
|
||||
channelFeeRate?: number
|
||||
channelFeeAmount?: number
|
||||
status?: number
|
||||
expireTime?: Date[]
|
||||
successTime?: Date[]
|
||||
notifyTime?: Date[]
|
||||
successExtensionId?: number
|
||||
refundStatus?: number
|
||||
refundTimes?: number
|
||||
channelUserId?: string
|
||||
channelOrderNo?: string
|
||||
createTime?: Date[]
|
||||
}
|
||||
|
||||
export interface OrderExportReqVO {
|
||||
merchantId?: number
|
||||
appId?: number
|
||||
channelId?: number
|
||||
channelCode?: string
|
||||
merchantOrderId?: string
|
||||
subject?: string
|
||||
body?: string
|
||||
notifyUrl?: string
|
||||
notifyStatus?: number
|
||||
amount?: number
|
||||
channelFeeRate?: number
|
||||
channelFeeAmount?: number
|
||||
status?: number
|
||||
expireTime?: Date[]
|
||||
successTime?: Date[]
|
||||
notifyTime?: Date[]
|
||||
successExtensionId?: number
|
||||
refundStatus?: number
|
||||
refundTimes?: number
|
||||
channelUserId?: string
|
||||
userIp?: string
|
||||
channelOrderNo?: string
|
||||
createTime?: Date[]
|
||||
channelUserId?: string
|
||||
notifyUrl?: string
|
||||
extension?: {
|
||||
channelNotifyData?: string
|
||||
}
|
||||
}
|
||||
|
||||
// 查询列表支付订单
|
||||
export const getOrderPage = async (params: OrderPageReqVO) => {
|
||||
return await request.get({ url: '/pay/order/page', params })
|
||||
export const getOrderPage = async (params: any) => {
|
||||
return await request.get<PageResult<OrderDetailVO[]>>({
|
||||
url: '/pay/order/page',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询详情支付订单
|
||||
export const getOrder = async (id: number, sync?: boolean) => {
|
||||
return await request.get({
|
||||
return await request.get<OrderVO>({
|
||||
url: '/pay/order/get',
|
||||
params: {
|
||||
id,
|
||||
|
|
@ -96,7 +76,7 @@ export const getOrder = async (id: number, sync?: boolean) => {
|
|||
|
||||
// 获得支付订单的明细
|
||||
export const getOrderDetail = async (id: number) => {
|
||||
return await request.get({ url: '/pay/order/get-detail?id=' + id })
|
||||
return await request.get<OrderDetailVO>({ url: '/pay/order/get-detail?id=' + id })
|
||||
}
|
||||
|
||||
// 提交支付订单
|
||||
|
|
@ -105,6 +85,6 @@ export const submitOrder = async (data: any) => {
|
|||
}
|
||||
|
||||
// 导出支付订单
|
||||
export const exportOrder = async (params: OrderExportReqVO) => {
|
||||
export const exportOrder = async (params: any) => {
|
||||
return await request.download({ url: '/pay/order/export-excel', params })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,70 +29,36 @@ export interface RefundVO {
|
|||
createTime: Date
|
||||
}
|
||||
|
||||
export interface RefundPageReqVO extends PageParam {
|
||||
merchantId?: number
|
||||
appId?: number
|
||||
channelId?: number
|
||||
channelCode?: string
|
||||
orderId?: string
|
||||
tradeNo?: string
|
||||
export interface RefundDetailVO {
|
||||
merchantRefundId?: string
|
||||
channelRefundNo?: string
|
||||
merchantOrderId?: string
|
||||
merchantRefundNo?: string
|
||||
notifyUrl?: string
|
||||
notifyStatus?: number
|
||||
channelOrderNo?: string
|
||||
appId?: number
|
||||
appName?: string
|
||||
payPrice?: number
|
||||
refundPrice?: number
|
||||
status?: number
|
||||
type?: number
|
||||
payAmount?: number
|
||||
refundAmount?: number
|
||||
successTime?: Date
|
||||
createTime?: Date
|
||||
updateTime?: Date
|
||||
channelCode?: string
|
||||
reason?: string
|
||||
userIp?: string
|
||||
channelOrderNo?: string
|
||||
channelRefundNo?: string
|
||||
channelErrorCode?: string
|
||||
channelErrorMsg?: string
|
||||
channelExtras?: string
|
||||
expireTime?: Date[]
|
||||
successTime?: Date[]
|
||||
notifyTime?: Date[]
|
||||
createTime?: Date[]
|
||||
}
|
||||
|
||||
export interface PayRefundExportReqVO {
|
||||
merchantId?: number
|
||||
appId?: number
|
||||
channelId?: number
|
||||
channelCode?: string
|
||||
orderId?: string
|
||||
tradeNo?: string
|
||||
merchantOrderId?: string
|
||||
merchantRefundNo?: string
|
||||
notifyUrl?: string
|
||||
notifyStatus?: number
|
||||
status?: number
|
||||
type?: number
|
||||
payAmount?: number
|
||||
refundAmount?: number
|
||||
reason?: string
|
||||
userIp?: string
|
||||
channelOrderNo?: string
|
||||
channelRefundNo?: string
|
||||
channelErrorCode?: string
|
||||
channelErrorMsg?: string
|
||||
channelExtras?: string
|
||||
expireTime?: Date[]
|
||||
successTime?: Date[]
|
||||
notifyTime?: Date[]
|
||||
createTime?: Date[]
|
||||
channelNotifyData?: string
|
||||
}
|
||||
|
||||
// 查询列表退款订单
|
||||
export const getRefundPage = (params: RefundPageReqVO) => {
|
||||
return request.get({ url: '/pay/refund/page', params })
|
||||
export const getRefundPage = (params: any) => {
|
||||
return request.get<PageResult<RefundDetailVO[]>>({ url: '/pay/refund/page', params })
|
||||
}
|
||||
|
||||
// 查询详情退款订单
|
||||
export const getRefund = (id: number) => {
|
||||
return request.get({ url: '/pay/refund/get?id=' + id })
|
||||
return request.get<RefundDetailVO>({ url: '/pay/refund/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增退款订单
|
||||
|
|
@ -111,6 +77,6 @@ export const deleteRefund = (id: number) => {
|
|||
}
|
||||
|
||||
// 导出退款订单
|
||||
export const exportRefund = (params: PayRefundExportReqVO) => {
|
||||
export const exportRefund = (params: any) => {
|
||||
return request.download({ url: '/pay/refund/export-excel', params })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,42 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface TransferVO {
|
||||
id?: number
|
||||
no?: string
|
||||
appId?: number
|
||||
appName?: string
|
||||
channelId?: number
|
||||
channelCode?: string
|
||||
merchantTransferId?: string
|
||||
type?: string
|
||||
status?: number
|
||||
successTime?: Date
|
||||
price?: number
|
||||
subject?: string
|
||||
userName?: string
|
||||
userAccount?: string
|
||||
accountNo?: string
|
||||
channelTransferNo?: string
|
||||
userIp?: string
|
||||
notifyUrl?: string
|
||||
channelNotifyData?: string
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 查询转账单列表
|
||||
export const getTransferPage = async (params: PageParam) => {
|
||||
return await request.get({ url: `/pay/transfer/page`, params })
|
||||
export const getTransferPage = async (params: any) => {
|
||||
return await request.get<PageResult<TransferVO[]>>({
|
||||
url: `/pay/transfer/page`,
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询转账单详情
|
||||
export const getTransfer = async (id: number) => {
|
||||
return await request.get({ url: '/pay/transfer/get?id=' + id })
|
||||
return await request.get<TransferVO>({ url: '/pay/transfer/get?id=' + id })
|
||||
}
|
||||
|
||||
// 导出转账单
|
||||
export const exportTransfer = async (params: PageParam) => {
|
||||
export const exportTransfer = async (params: any) => {
|
||||
return await request.download({ url: '/pay/transfer/export-excel', params })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,12 @@ export interface WalletVO {
|
|||
freezePrice: number
|
||||
}
|
||||
|
||||
/** 修改会员钱包余额 Request VO */
|
||||
export interface WalletBalanceUpdateReqVO {
|
||||
userId: number
|
||||
balance: number
|
||||
}
|
||||
|
||||
/** 查询用户钱包详情 */
|
||||
export const getWallet = async (params: PayWalletUserReqVO) => {
|
||||
return await request.get<WalletVO>({ url: `/pay/wallet/get`, params })
|
||||
|
|
@ -27,6 +33,6 @@ export const getWalletPage = async (params: any) => {
|
|||
}
|
||||
|
||||
/** 修改会员钱包余额 */
|
||||
export const updateWalletBalance = async (data: any) => {
|
||||
export const updateWalletBalance = async (data: WalletBalanceUpdateReqVO) => {
|
||||
return await request.put({ url: `/pay/wallet/update-balance`, data })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface DictDataVO {
|
||||
id: number
|
||||
sort: number
|
||||
id?: number
|
||||
sort?: number
|
||||
label: string
|
||||
value: string
|
||||
dictType: string
|
||||
|
|
@ -10,7 +10,7 @@ export interface DictDataVO {
|
|||
colorType: string
|
||||
cssClass: string
|
||||
remark: string
|
||||
createTime: Date
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 查询字典数据(精简)列表
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface DictTypeVO {
|
||||
id: number
|
||||
id?: number
|
||||
name: string
|
||||
type: string
|
||||
status: number
|
||||
remark: string
|
||||
createTime: Date
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
// 查询字典(精简)列表
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
export interface MailAccountVO {
|
||||
id: number
|
||||
id?: number
|
||||
mail: string
|
||||
username: string
|
||||
password: string
|
||||
|
|
|
|||
|
|
@ -13,11 +13,12 @@ const props = defineProps({
|
|||
fullscreen: propTypes.bool.def(true),
|
||||
width: propTypes.oneOfType([String, Number]).def('40%'),
|
||||
scroll: propTypes.bool.def(false), // 是否开启滚动条。如果是的话,按照 maxHeight 设置最大高度
|
||||
maxHeight: propTypes.oneOfType([String, Number]).def('400px')
|
||||
maxHeight: propTypes.oneOfType([String, Number]).def('400px'),
|
||||
loading: propTypes.bool.def(false)
|
||||
})
|
||||
|
||||
const getBindValue = computed(() => {
|
||||
const delArr: string[] = ['fullscreen', 'title', 'maxHeight', 'appendToBody']
|
||||
const delArr: string[] = ['fullscreen', 'title', 'maxHeight', 'appendToBody', 'loading']
|
||||
const attrs = useAttrs()
|
||||
const obj = { ...attrs, ...props }
|
||||
for (const key in obj) {
|
||||
|
|
@ -111,10 +112,14 @@ function closedHandler() {
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<ElScrollbar v-if="scroll" :style="dialogStyle">
|
||||
<slot></slot>
|
||||
</ElScrollbar>
|
||||
<slot v-else></slot>
|
||||
<div v-loading="loading" :style="loading ? { minHeight: '120px' } : undefined">
|
||||
<template v-if="!loading">
|
||||
<ElScrollbar v-if="scroll" :style="dialogStyle">
|
||||
<slot></slot>
|
||||
</ElScrollbar>
|
||||
<slot v-else></slot>
|
||||
</template>
|
||||
</div>
|
||||
<template v-if="slots.footer" #footer>
|
||||
<div :style="{ 'pointer-events': closing ? 'none' : 'auto' }">
|
||||
<slot name="footer"></slot>
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
:key="conversation.id"
|
||||
@click="handleConversationClick(conversation.id)"
|
||||
@mouseover="hoverConversationId = conversation.id"
|
||||
@mouseout="hoverConversationId = ''"
|
||||
@mouseout="hoverConversationId = null"
|
||||
>
|
||||
<div
|
||||
class="flex flex-row justify-between flex-1 px-1.25 cursor-pointer rounded-1.25 items-center leading-7.5"
|
||||
|
|
@ -153,7 +153,7 @@ const loadingTime = ref<any>() // 加载中定时器
|
|||
// 定义组件 props
|
||||
const props = defineProps({
|
||||
activeId: {
|
||||
type: String || null,
|
||||
type: [Number, String],
|
||||
required: true
|
||||
}
|
||||
})
|
||||
|
|
@ -186,11 +186,9 @@ const handleConversationClick = async (id: number) => {
|
|||
const filterConversation = conversationList.value.filter((item) => {
|
||||
return item.id === id
|
||||
})
|
||||
// 回调 onConversationClick
|
||||
// noinspection JSVoidFunctionReturnValueUsed
|
||||
const success = emits('onConversationClick', filterConversation[0])
|
||||
// 切换对话
|
||||
if (success) {
|
||||
// 回调 onConversationClick,切换对话
|
||||
if (filterConversation[0]) {
|
||||
emits('onConversationClick', filterConversation[0])
|
||||
activeConversationId.value = id
|
||||
}
|
||||
}
|
||||
|
|
@ -366,7 +364,7 @@ const handleRoleRepository = async () => {
|
|||
/** 监听选中的对话 */
|
||||
const { activeId } = toRefs(props)
|
||||
watch(activeId, async (newValue, _oldValue) => {
|
||||
activeConversationId.value = newValue as string
|
||||
activeConversationId.value = newValue ? Number(newValue) : null
|
||||
})
|
||||
|
||||
// 定义 public 方法
|
||||
|
|
@ -378,7 +376,7 @@ onMounted(async () => {
|
|||
await getChatConversationList()
|
||||
// 默认选中
|
||||
if (props.activeId) {
|
||||
activeConversationId.value = props.activeId
|
||||
activeConversationId.value = Number(props.activeId)
|
||||
} else {
|
||||
// 首次默认选中第一个
|
||||
if (conversationList.value.length) {
|
||||
|
|
|
|||
|
|
@ -72,7 +72,15 @@ const message = useMessage() // 消息弹窗
|
|||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formData = ref({
|
||||
type ConversationFormData = {
|
||||
id?: number
|
||||
systemMessage?: string
|
||||
modelId?: number
|
||||
temperature?: number
|
||||
maxTokens?: number
|
||||
maxContexts?: number
|
||||
}
|
||||
const formData = ref<ConversationFormData>({
|
||||
id: undefined,
|
||||
systemMessage: undefined,
|
||||
modelId: undefined,
|
||||
|
|
@ -104,7 +112,7 @@ const open = async (id: number) => {
|
|||
obj[key] = data[key]
|
||||
}
|
||||
return obj
|
||||
}, {})
|
||||
}, {} as ConversationFormData)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,26 +18,16 @@
|
|||
class="!p-10px !m-0"
|
||||
text
|
||||
:icon="Download"
|
||||
@click="handleButtonClick('download', detail)"
|
||||
@click="handleButtonClick('download')"
|
||||
/>
|
||||
<el-button
|
||||
class="!p-10px !m-0"
|
||||
text
|
||||
:icon="RefreshRight"
|
||||
@click="handleButtonClick('regeneration', detail)"
|
||||
/>
|
||||
<el-button
|
||||
class="!p-10px !m-0"
|
||||
text
|
||||
:icon="Delete"
|
||||
@click="handleButtonClick('delete', detail)"
|
||||
/>
|
||||
<el-button
|
||||
class="!p-10px !m-0"
|
||||
text
|
||||
:icon="More"
|
||||
@click="handleButtonClick('more', detail)"
|
||||
@click="handleButtonClick('regeneration')"
|
||||
/>
|
||||
<el-button class="!p-10px !m-0" text :icon="Delete" @click="handleButtonClick('delete')" />
|
||||
<el-button class="!p-10px !m-0" text :icon="More" @click="handleButtonClick('more')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="!overflow-hidden !mt-20px !h-280px !flex-1" ref="cardImageRef">
|
||||
|
|
@ -56,7 +46,7 @@
|
|||
<el-button
|
||||
size="small"
|
||||
v-for="button in detail?.buttons"
|
||||
:key="button"
|
||||
:key="button.customId"
|
||||
class="min-w-40px ml-0 mr-10px mt-5px"
|
||||
@click="handleMidjourneyBtnClick(button)"
|
||||
>
|
||||
|
|
@ -77,7 +67,7 @@ const message = useMessage() // 消息
|
|||
const props = defineProps({
|
||||
detail: {
|
||||
type: Object as PropType<ImageVO>,
|
||||
require: true
|
||||
required: true
|
||||
}
|
||||
})
|
||||
|
||||
|
|
@ -85,8 +75,8 @@ const cardImageRef = ref<any>() // 卡片 image ref
|
|||
const cardImageLoadingInstance = ref<any>() // 卡片 image ref
|
||||
|
||||
/** 处理点击事件 */
|
||||
const handleButtonClick = async (type, detail: ImageVO) => {
|
||||
emits('onBtnClick', type, detail)
|
||||
const handleButtonClick = async (type: string) => {
|
||||
emits('onBtnClick', type, props.detail)
|
||||
}
|
||||
|
||||
/** 处理 Midjourney 按钮点击事件 */
|
||||
|
|
@ -101,7 +91,7 @@ const emits = defineEmits(['onBtnClick', 'onMjBtnClick']) // emits
|
|||
/** 监听详情 */
|
||||
const { detail } = toRefs(props)
|
||||
watch(detail, async (newVal, _oldVal) => {
|
||||
await handleLoading(newVal.status as string)
|
||||
await handleLoading(newVal.status)
|
||||
})
|
||||
|
||||
/** 处理加载状态 */
|
||||
|
|
@ -123,6 +113,6 @@ const handleLoading = async (status: number) => {
|
|||
|
||||
/** 初始化 */
|
||||
onMounted(async () => {
|
||||
await handleLoading(props.detail.status as string)
|
||||
await handleLoading(props.detail.status)
|
||||
})
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -211,8 +211,8 @@ const handleGenerateImage = async () => {
|
|||
prompt: prompt.value, // 提示词
|
||||
modelId: matchedModel.id, // 使用匹配到的模型
|
||||
style: style.value, // 图像生成的风格
|
||||
width: imageSize.width, // size 不能为空
|
||||
height: imageSize.height, // size 不能为空
|
||||
width: Number(imageSize.width), // size 不能为空
|
||||
height: Number(imageSize.height), // size 不能为空
|
||||
options: {
|
||||
style: style.value // 图像生成的风格
|
||||
}
|
||||
|
|
|
|||
|
|
@ -199,6 +199,7 @@ const handleGenerateImage = async () => {
|
|||
const req = {
|
||||
prompt: prompt.value,
|
||||
modelId: matchedModel.id,
|
||||
base64Array: [],
|
||||
width: imageSize.width,
|
||||
height: imageSize.height,
|
||||
version: selectVersion.value,
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
v-for="item in deliveryTemplateList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:value="item.id!"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
|
@ -89,7 +89,7 @@ const validate = async () => {
|
|||
defineExpose({ validate })
|
||||
|
||||
/** 初始化 */
|
||||
const deliveryTemplateList = ref([]) // 运费模版
|
||||
const deliveryTemplateList = ref<ExpressTemplateApi.DeliveryExpressTemplateVO[]>([]) // 运费模版
|
||||
onMounted(async () => {
|
||||
deliveryTemplateList.value = await ExpressTemplateApi.getSimpleTemplateList()
|
||||
})
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
<el-descriptions title="订单信息">
|
||||
<el-descriptions-item label="订单号: ">{{ formData.orderNo }}</el-descriptions-item>
|
||||
<el-descriptions-item label="配送方式: ">
|
||||
<dict-tag :type="DICT_TYPE.TRADE_DELIVERY_TYPE" :value="formData.order.deliveryType" />
|
||||
<dict-tag :type="DICT_TYPE.TRADE_DELIVERY_TYPE" :value="formData.order.deliveryType!" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="订单类型: ">
|
||||
<dict-tag :type="DICT_TYPE.TRADE_ORDER_TYPE" :value="formData.order.type" />
|
||||
<dict-tag :type="DICT_TYPE.TRADE_ORDER_TYPE" :value="formData.order.type!" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="收货人: ">
|
||||
{{ formData.order.receiverName }}
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
{{ formData.order.userRemark }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="订单来源: ">
|
||||
<dict-tag :type="DICT_TYPE.TERMINAL" :value="formData.order.terminal" />
|
||||
<dict-tag :type="DICT_TYPE.TERMINAL" :value="formData.order.terminal!" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话: ">
|
||||
{{ formData.order.receiverMobile }}
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
{{ formData.order.payOrderId }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="付款方式: ">
|
||||
<dict-tag :type="DICT_TYPE.PAY_CHANNEL_CODE" :value="formData.order.payChannelCode" />
|
||||
<dict-tag :type="DICT_TYPE.PAY_CHANNEL_CODE" :value="formData.order.payChannelCode!" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="买家: ">{{ formData?.user?.nickname }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
|
@ -38,13 +38,13 @@
|
|||
{{ formatDate(formData.auditTime) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="售后类型: ">
|
||||
<dict-tag :type="DICT_TYPE.TRADE_AFTER_SALE_TYPE" :value="formData.type" />
|
||||
<dict-tag :type="DICT_TYPE.TRADE_AFTER_SALE_TYPE" :value="formData.type!" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="售后方式: ">
|
||||
<dict-tag :type="DICT_TYPE.TRADE_AFTER_SALE_WAY" :value="formData.way" />
|
||||
<dict-tag :type="DICT_TYPE.TRADE_AFTER_SALE_WAY" :value="formData.way!" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="退款金额: ">
|
||||
{{ fenToYuan(formData.refundPrice) }}
|
||||
{{ fenToYuan(formData.refundPrice!) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="退款原因: ">{{ formData.applyReason }}</el-descriptions-item>
|
||||
<el-descriptions-item label="补充描述: ">
|
||||
|
|
@ -52,11 +52,12 @@
|
|||
</el-descriptions-item>
|
||||
<el-descriptions-item label="凭证图片: ">
|
||||
<el-image
|
||||
v-for="(item, index) in formData.applyPicUrls"
|
||||
v-for="(item, index) in formData.applyPicUrls || []"
|
||||
:key="index"
|
||||
:src="item.url"
|
||||
:src="item"
|
||||
:preview-src-list="formData.applyPicUrls || []"
|
||||
class="mr-10px h-60px w-60px"
|
||||
@click="imagePreview(formData.applyPicUrls)"
|
||||
preview-teleported
|
||||
/>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
|
@ -64,7 +65,7 @@
|
|||
<!-- 退款状态 -->
|
||||
<el-descriptions :column="1" title="退款状态">
|
||||
<el-descriptions-item label="退款状态: ">
|
||||
<dict-tag :type="DICT_TYPE.TRADE_AFTER_SALE_STATUS" :value="formData.status" />
|
||||
<dict-tag :type="DICT_TYPE.TRADE_AFTER_SALE_STATUS" :value="formData.status!" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-class-name="no-colon">
|
||||
<el-button v-if="formData.status === 10" type="primary" @click="agree">同意售后</el-button>
|
||||
|
|
@ -132,10 +133,10 @@
|
|||
</div>
|
||||
<template #dot>
|
||||
<span
|
||||
:style="{ backgroundColor: getUserTypeColor(saleLog.userType) }"
|
||||
:style="{ backgroundColor: getUserTypeColor(saleLog.userType ?? 0) }"
|
||||
class="dot-node-style"
|
||||
>
|
||||
{{ getDictLabel(DICT_TYPE.USER_TYPE, saleLog.userType)[0] || '系' }}
|
||||
{{ getDictLabel(DICT_TYPE.USER_TYPE, saleLog.userType ?? 0)[0] || '系' }}
|
||||
</span>
|
||||
</template>
|
||||
</el-timeline-item>
|
||||
|
|
@ -153,8 +154,6 @@ import { fenToYuan } from '@/utils'
|
|||
import { DICT_TYPE, getDictLabel, getDictObj } from '@/utils/dict'
|
||||
import { formatDate } from '@/utils/formatTime'
|
||||
import UpdateAuditReasonForm from '@/views/mall/trade/afterSale/form/AfterSaleDisagreeForm.vue'
|
||||
import { createImageViewer } from '@/components/ImageViewer'
|
||||
import { isArray } from '@/utils/is'
|
||||
import { useTagsViewStore } from '@/store/modules/tagsView'
|
||||
|
||||
defineOptions({ name: 'TradeAfterSaleDetail' })
|
||||
|
|
@ -163,10 +162,10 @@ const { t } = useI18n() // 国际化
|
|||
const message = useMessage() // 消息弹窗
|
||||
const { params } = useRoute() // 查询参数
|
||||
const { push, currentRoute } = useRouter() // 路由
|
||||
const formData = ref({
|
||||
const formData = ref<AfterSaleApi.TradeAfterSaleDetailVO>({
|
||||
order: {},
|
||||
logs: []
|
||||
})
|
||||
} as AfterSaleApi.TradeAfterSaleDetailVO)
|
||||
const updateAuditReasonFormRef = ref() // 拒绝售后表单 Ref
|
||||
|
||||
/** 获得 userType 颜色 */
|
||||
|
|
@ -187,7 +186,7 @@ const getUserTypeColor = (type: number) => {
|
|||
|
||||
/** 获得详情 */
|
||||
const getDetail = async () => {
|
||||
const id = params.id as unknown as number
|
||||
const id = Number(params.id)
|
||||
if (id) {
|
||||
const res = await AfterSaleApi.getAfterSale(id)
|
||||
// 没有表单信息则关闭页面返回
|
||||
|
|
@ -252,20 +251,6 @@ const refund = async () => {
|
|||
} catch {}
|
||||
}
|
||||
|
||||
/** 图片预览 */
|
||||
const imagePreview = (args) => {
|
||||
const urlList = []
|
||||
if (isArray(args)) {
|
||||
args.forEach((item) => {
|
||||
urlList.push(item.url)
|
||||
})
|
||||
} else {
|
||||
urlList.push(args)
|
||||
}
|
||||
createImageViewer({
|
||||
urlList
|
||||
})
|
||||
}
|
||||
const { delView } = useTagsViewStore() // 视图操作
|
||||
/** 关闭 tag */
|
||||
const close = () => {
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ const resetForm = () => {
|
|||
/** 查询推广员和分销员 */
|
||||
const userInfo = reactive<{
|
||||
bindUser: BrokerageUserApi.BrokerageUserVO | undefined
|
||||
user: BrokerageUserApi.BrokerageUserVO | undefined
|
||||
user: UserApi.UserVO | undefined
|
||||
}>({
|
||||
bindUser: undefined,
|
||||
user: undefined
|
||||
|
|
@ -154,7 +154,11 @@ const handleGetUser = async (id: any, userType: string) => {
|
|||
}
|
||||
const user =
|
||||
userType === '推广员' ? await BrokerageUserApi.getBrokerageUser(id) : await UserApi.getUser(id)
|
||||
userType === '推广员' ? (userInfo.bindUser = user) : (userInfo.user = user)
|
||||
if (userType === '推广员') {
|
||||
userInfo.bindUser = user as BrokerageUserApi.BrokerageUserVO
|
||||
} else {
|
||||
userInfo.user = user as UserApi.UserVO
|
||||
}
|
||||
if (!user) {
|
||||
message.warning(`${userType}不存在`)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,11 +90,11 @@ defineOptions({ name: 'BrokerageUserListDialog' })
|
|||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数据
|
||||
const list = ref<BrokerageUserApi.BrokerageUserVO[]>([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
bindUserId: null,
|
||||
bindUserId: undefined as number | undefined,
|
||||
level: '',
|
||||
bindUserTime: []
|
||||
})
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ const message = useMessage() // 消息弹窗
|
|||
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formRef = ref()
|
||||
const formData = ref({
|
||||
const formData = ref<ConfigApi.ConfigVO>({
|
||||
id: null,
|
||||
afterSaleRefundReasons: [],
|
||||
afterSaleReturnReasons: [],
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
|||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
const formData = ref<DeliveryExpressApi.DeliveryExpressVO>({
|
||||
id: undefined,
|
||||
code: '',
|
||||
name: '',
|
||||
|
|
@ -97,7 +97,7 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as DeliveryExpressApi.DeliveryExpressVO
|
||||
const data = formData.value
|
||||
if (formType.value === 'create') {
|
||||
await DeliveryExpressApi.createDeliveryExpress(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
|||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
const formData = ref<DeliveryExpressTemplateApi.DeliveryExpressTemplateVO>({
|
||||
id: undefined,
|
||||
name: '',
|
||||
chargeMode: 1,
|
||||
|
|
@ -156,12 +156,13 @@ const formData = ref({
|
|||
charges: [],
|
||||
frees: []
|
||||
})
|
||||
const columnTitleMap = new Map()
|
||||
const columnTitle = ref({
|
||||
startCountTitle: '首件',
|
||||
extraCountTitle: '续件',
|
||||
freeCountTitle: '包邮件数'
|
||||
})
|
||||
const columnTitleMap = new Map<number, typeof columnTitle.value>()
|
||||
const getColumnTitle = (chargeMode: number) => columnTitleMap.get(chargeMode) || columnTitle.value
|
||||
const formRules = reactive({
|
||||
name: [{ required: true, message: '模板名称不能为空', trigger: 'blur' }],
|
||||
chargeMode: [{ required: true, message: '配送计费方式不能为空', trigger: 'blur' }],
|
||||
|
|
@ -180,14 +181,14 @@ const open = async (type: string, id?: number) => {
|
|||
if (id) {
|
||||
formLoading.value = true
|
||||
formData.value = await DeliveryExpressTemplateApi.getDeliveryExpressTemplate(id)
|
||||
columnTitle.value = columnTitleMap.get(formData.value.chargeMode)
|
||||
columnTitle.value = getColumnTitle(formData.value.chargeMode)
|
||||
formData.value.charges.forEach((item) => {
|
||||
// 前端价格以元展示
|
||||
item.startPrice = fenToYuan(item.startPrice)
|
||||
item.extraPrice = fenToYuan(item.extraPrice)
|
||||
item.startPrice = Number(fenToYuan(item.startPrice))
|
||||
item.extraPrice = Number(fenToYuan(item.extraPrice))
|
||||
})
|
||||
formData.value.frees.forEach((item) => {
|
||||
item.freePrice = fenToYuan(item.freePrice)
|
||||
item.freePrice = Number(fenToYuan(item.freePrice))
|
||||
})
|
||||
}
|
||||
} finally {
|
||||
|
|
@ -206,7 +207,7 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = cloneDeep(formData.value) as DeliveryExpressTemplateApi.DeliveryExpressTemplateVO
|
||||
const data = cloneDeep(formData.value)
|
||||
// 前端价格以元展示,提交到后端。用分计算
|
||||
data.charges.forEach((item) => {
|
||||
item.startPrice = yuanToFen(item.startPrice)
|
||||
|
|
@ -248,17 +249,17 @@ const resetForm = () => {
|
|||
frees: [],
|
||||
sort: 0
|
||||
}
|
||||
columnTitle.value = columnTitleMap.get(1)
|
||||
columnTitle.value = getColumnTitle(1)
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
|
||||
/** 配送计费方法改变 */
|
||||
const changeChargeMode = (chargeMode: number) => {
|
||||
columnTitle.value = columnTitleMap.get(chargeMode)
|
||||
columnTitle.value = getColumnTitle(chargeMode)
|
||||
}
|
||||
|
||||
/** 初始化数据 */
|
||||
const areaTree = ref([])
|
||||
const areaTree = ref<any[]>([])
|
||||
const initData = async () => {
|
||||
// 表头标题和计费方式的映射
|
||||
columnTitleMap.set(1, {
|
||||
|
|
@ -293,7 +294,7 @@ const addChargeArea = () => {
|
|||
}
|
||||
|
||||
/** 删除计费区域 */
|
||||
const deleteChargeArea = (index) => {
|
||||
const deleteChargeArea = (index: number) => {
|
||||
const data = formData.value
|
||||
data.charges.splice(index, 1)
|
||||
}
|
||||
|
|
@ -309,7 +310,7 @@ const addFreeArea = () => {
|
|||
}
|
||||
|
||||
/** 删除包邮区域 */
|
||||
const deleteFreeArea = (index) => {
|
||||
const deleteFreeArea = (index: number) => {
|
||||
const data = formData.value
|
||||
data.frees.splice(index, 1)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
v-for="item in pickUpStoreList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:value="item.id!"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
|
@ -111,7 +111,7 @@
|
|||
icon-bg-color="text-purple-500"
|
||||
prefix="¥"
|
||||
:decimals="2"
|
||||
:value="fenToYuan(summary?.orderPayPrice || 0)"
|
||||
:value="Number(fenToYuan(summary?.orderPayPrice || 0))"
|
||||
/>
|
||||
</el-col>
|
||||
<el-col :sm="6" :xs="12" v-loading="loading">
|
||||
|
|
@ -131,7 +131,7 @@
|
|||
icon-bg-color="text-green-500"
|
||||
prefix="¥"
|
||||
:decimals="2"
|
||||
:value="fenToYuan(summary?.afterSalePrice || 0)"
|
||||
:value="Number(fenToYuan(summary?.afterSalePrice || 0))"
|
||||
/>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
@ -309,7 +309,7 @@ const resetQuery = () => {
|
|||
queryFormRef.value?.resetFields()
|
||||
queryParams.value = { ...INIT_QUERY_PARAMS }
|
||||
if (pickUpStoreList.value.length > 0) {
|
||||
queryParams.value.pickUpStoreIds = pickUpStoreList.value[0].id
|
||||
queryParams.value.pickUpStoreIds = pickUpStoreList.value[0].id!
|
||||
}
|
||||
handleQuery()
|
||||
}
|
||||
|
|
@ -418,7 +418,7 @@ onMounted(async () => {
|
|||
}
|
||||
|
||||
// 查询
|
||||
queryParams.value.pickUpStoreIds = pickUpStoreList.value[0].id
|
||||
queryParams.value.pickUpStoreIds = pickUpStoreList.value[0].id!
|
||||
isUse.value = false
|
||||
await getList()
|
||||
})
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@
|
|||
import * as DeliveryPickUpStoreApi from '@/api/mall/trade/delivery/pickUpStore'
|
||||
import StoreStaffTableSelect from './components/StoreStaffTableSelect.vue'
|
||||
import { DICT_TYPE } from '@/utils/dict'
|
||||
import type { UserVO } from '@/api/system/user'
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
|
|
@ -71,10 +72,9 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
|||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
id: undefined as number | undefined,
|
||||
name: '',
|
||||
verifyUserIds: [],
|
||||
verifyUsers: []
|
||||
verifyUsers: [] as UserVO[]
|
||||
})
|
||||
const formRules = reactive({})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
|
@ -87,7 +87,12 @@ const open = async (id: number) => {
|
|||
resetForm()
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await DeliveryPickUpStoreApi.getDeliveryPickUpStore(id)
|
||||
const data = await DeliveryPickUpStoreApi.getDeliveryPickUpStore(id)
|
||||
formData.value = {
|
||||
id: data.id,
|
||||
name: data.name,
|
||||
verifyUsers: data.verifyUsers || []
|
||||
}
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
|
|
@ -103,9 +108,9 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = {
|
||||
id: formData.value.id,
|
||||
verifyUserIds: formData.value.verifyUsers.map((item: any) => item.id)
|
||||
const data: DeliveryPickUpStoreApi.DeliveryPickUpStoreBindReqVO = {
|
||||
id: formData.value.id!,
|
||||
verifyUserIds: formData.value.verifyUsers.map((item) => item.id)
|
||||
}
|
||||
await DeliveryPickUpStoreApi.bindStoreStaffId(data)
|
||||
message.success('绑定成功')
|
||||
|
|
@ -116,17 +121,13 @@ const submitForm = async () => {
|
|||
}
|
||||
|
||||
/** 处理选择员工操作 */
|
||||
const handleSelect = (checkedUsers: []) => {
|
||||
const handleSelect = (checkedUsers: UserVO[]) => {
|
||||
formData.value.verifyUsers = checkedUsers
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
const index = formData.value.verifyUsers.findIndex((item: any) => {
|
||||
if (item.id == id) {
|
||||
return true
|
||||
}
|
||||
})
|
||||
const index = formData.value.verifyUsers.findIndex((item) => item.id === id)
|
||||
formData.value.verifyUsers.splice(index, 1)
|
||||
}
|
||||
|
||||
|
|
@ -135,7 +136,6 @@ const resetForm = () => {
|
|||
formData.value = {
|
||||
id: undefined,
|
||||
name: '',
|
||||
verifyUserIds: [],
|
||||
verifyUsers: []
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
|
|
|
|||
|
|
@ -118,6 +118,11 @@ import { CommonStatusEnum } from '@/utils/constants'
|
|||
import { defaultProps } from '@/utils/tree'
|
||||
import { getAreaTree } from '@/api/system/area'
|
||||
import * as ConfigApi from '@/api/mall/trade/config'
|
||||
declare global {
|
||||
interface Window {
|
||||
selectAddress: (loc: any) => void
|
||||
}
|
||||
}
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
|
|
@ -126,14 +131,14 @@ const mapDialogVisible = ref(false) // 地图弹窗的是否展示
|
|||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
const formData = ref<DeliveryPickUpStoreApi.DeliveryPickUpStoreVO>({
|
||||
id: undefined,
|
||||
name: '',
|
||||
phone: '',
|
||||
logo: '',
|
||||
detailAddress: '',
|
||||
introduction: '',
|
||||
areaId: 0,
|
||||
areaId: undefined,
|
||||
openingTime: undefined,
|
||||
closingTime: undefined,
|
||||
latitude: undefined,
|
||||
|
|
@ -187,7 +192,7 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as DeliveryPickUpStoreApi.DeliveryPickUpStoreVO
|
||||
const data = formData.value
|
||||
if (formType.value === 'create') {
|
||||
await DeliveryPickUpStoreApi.createDeliveryPickUpStore(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@
|
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import * as UserApi from '@/api/system/user'
|
||||
import type { UserVO } from '@/api/system/user'
|
||||
import DeptTreeSelect from '@/views/system/dept/components/DeptTreeSelect.vue'
|
||||
|
||||
// 是否全选
|
||||
|
|
@ -144,7 +145,7 @@ const isCheckAll = ref(false)
|
|||
// 全选框是否处于中间状态:不是全部选中 && 任意一个选中
|
||||
const isIndeterminate = ref(false)
|
||||
// 选中的活动
|
||||
const checkedUsers = ref([])
|
||||
const checkedUsers = ref<UserVO[]>([])
|
||||
// 选中状态:key为用户ID,value为是否选中
|
||||
const checkedStatus = ref<Record<string, boolean>>({})
|
||||
|
||||
|
|
@ -152,15 +153,15 @@ const dialogTitle = '选择店员'
|
|||
const dialogVisible = ref(false)
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数
|
||||
const list = ref<UserVO[]>([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
username: undefined,
|
||||
mobile: undefined,
|
||||
status: undefined,
|
||||
username: undefined as string | undefined,
|
||||
mobile: undefined as string | undefined,
|
||||
status: undefined as number | undefined,
|
||||
deptId: undefined as number | undefined,
|
||||
createTime: []
|
||||
createTime: [] as string[]
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
||||
|
|
@ -211,24 +212,24 @@ const handleCheckAll = (checked: boolean) => {
|
|||
isCheckAll.value = checked
|
||||
isIndeterminate.value = false
|
||||
|
||||
list.value.forEach((combinationActivity) => handleCheckOne(checked, combinationActivity, false))
|
||||
list.value.forEach((user) => handleCheckOne(checked, user, false))
|
||||
}
|
||||
|
||||
/**
|
||||
* 选中一行
|
||||
* @param checked 是否选中
|
||||
* @param combinationActivity 活动
|
||||
* @param user 用户
|
||||
* @param isCalcCheckAll 是否计算全选
|
||||
*/
|
||||
const handleCheckOne = (checked: boolean, combinationActivity, isCalcCheckAll: boolean) => {
|
||||
const handleCheckOne = (checked: boolean, user: UserVO, isCalcCheckAll: boolean) => {
|
||||
if (checked) {
|
||||
checkedUsers.value.push(combinationActivity as never)
|
||||
checkedStatus.value[combinationActivity.id] = true
|
||||
checkedUsers.value.push(user)
|
||||
checkedStatus.value[user.id] = true
|
||||
} else {
|
||||
const index = findCheckedIndex(combinationActivity)
|
||||
const index = findCheckedIndex(user)
|
||||
if (index > -1) {
|
||||
checkedUsers.value.splice(index, 1)
|
||||
checkedStatus.value[combinationActivity.id] = false
|
||||
checkedStatus.value[user.id] = false
|
||||
isCheckAll.value = false
|
||||
}
|
||||
}
|
||||
|
|
@ -240,7 +241,8 @@ const handleCheckOne = (checked: boolean, combinationActivity, isCalcCheckAll: b
|
|||
}
|
||||
|
||||
// 查找活动在已选中活动列表中的索引
|
||||
const findCheckedIndex = (user) => checkedUsers.value.findIndex((item) => item.id === user.id)
|
||||
const findCheckedIndex = (user: UserVO) =>
|
||||
checkedUsers.value.findIndex((item) => item.id === user.id)
|
||||
|
||||
// 计算全选框状态
|
||||
const calculateIsCheckAll = () => {
|
||||
|
|
@ -259,6 +261,6 @@ const handleEmitChange = () => {
|
|||
|
||||
/** 确认选择时的触发事件 */
|
||||
const emits = defineEmits<{
|
||||
change: [CombinationActivityApi: any]
|
||||
change: [users: UserVO[]]
|
||||
}>()
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -195,6 +195,7 @@ const headerStyle = ({ row, columnIndex }: any) => {
|
|||
display: 'none'
|
||||
}
|
||||
}
|
||||
return {}
|
||||
}
|
||||
|
||||
interface SpanMethodProps {
|
||||
|
|
|
|||
|
|
@ -259,6 +259,7 @@ const getUserTypeColor = (type: number) => {
|
|||
|
||||
// 订单详情
|
||||
const formData = ref<TradeOrderApi.OrderVO>({
|
||||
items: [],
|
||||
logs: []
|
||||
})
|
||||
|
||||
|
|
@ -299,7 +300,7 @@ const props = defineProps({
|
|||
id: propTypes.number.def(undefined), // 订单ID
|
||||
showPickUp: propTypes.bool.def(true) // 显示核销按钮
|
||||
})
|
||||
const id = (params.id || props.id) as unknown as number
|
||||
const id = Number(params.id || props.id)
|
||||
const getDetail = async () => {
|
||||
if (id) {
|
||||
const res = (await TradeOrderApi.getOrder(id)) as TradeOrderApi.OrderVO
|
||||
|
|
@ -326,9 +327,9 @@ const clipboardSuccess = () => {
|
|||
}
|
||||
|
||||
/** 初始化 **/
|
||||
const deliveryExpressList = ref([]) // 物流公司
|
||||
const expressTrackList = ref([]) // 物流详情
|
||||
const pickUpStore = ref({}) // 自提门店
|
||||
const deliveryExpressList = ref<DeliveryExpressApi.DeliveryExpressVO[]>([]) // 物流公司
|
||||
const expressTrackList = ref<Array<{ time?: Date | string; content?: string }>>([]) // 物流详情
|
||||
const pickUpStore = ref<DeliveryPickUpStoreApi.DeliveryPickUpStoreVO>() // 自提门店
|
||||
onMounted(async () => {
|
||||
await getDetail()
|
||||
// 如果配送方式为快递,则查询物流公司
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
v-for="item in deliveryExpressList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:value="item.id!"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
|
@ -92,7 +92,7 @@ const resetForm = () => {
|
|||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
const deliveryExpressList = ref([])
|
||||
const deliveryExpressList = ref<DeliveryExpressApi.DeliveryExpressVO[]>([])
|
||||
onMounted(async () => {
|
||||
deliveryExpressList.value = await DeliveryExpressApi.getSimpleDeliveryExpressList()
|
||||
})
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@
|
|||
v-for="item in deliveryExpressList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:value="item.id!"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
|
@ -107,7 +107,7 @@
|
|||
v-for="item in pickUpStoreList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:value="item.id!"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ const message = useMessage() // 消息弹窗
|
|||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formData = ref({
|
||||
const formData = ref<ConfigApi.ConfigVO>({
|
||||
id: undefined,
|
||||
pointTradeDeductEnable: true,
|
||||
pointTradeDeductUnitPrice: 0,
|
||||
|
|
@ -94,7 +94,7 @@ const onSubmit = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as ConfigApi.ConfigVO
|
||||
const data = formData.value
|
||||
await ConfigApi.saveConfig(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
dialogVisible.value = false
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
|||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
const formData = ref<UserApi.UserVO>({
|
||||
id: undefined,
|
||||
mobile: undefined,
|
||||
email: undefined,
|
||||
|
|
@ -125,7 +125,12 @@ const open = async (type: string, id?: number) => {
|
|||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await UserApi.getUser(id)
|
||||
formData.value = {
|
||||
...(await UserApi.getUser(id)),
|
||||
password: undefined,
|
||||
tagIds: [],
|
||||
groupId: undefined
|
||||
}
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
|
|
@ -145,7 +150,7 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as UserApi.UserVO
|
||||
const data = formData.value
|
||||
if (formType.value === 'create') {
|
||||
// 说明:目前暂时没有新增操作。如果自己业务需要,可以进行扩展
|
||||
// await UserApi.createUser(data)
|
||||
|
|
|
|||
|
|
@ -55,8 +55,8 @@ const message = useMessage() // 消息弹窗
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
nickname: undefined,
|
||||
id: undefined as number | undefined,
|
||||
nickname: undefined as string | undefined,
|
||||
balance: '0',
|
||||
changeBalance: 0,
|
||||
changeType: 1
|
||||
|
|
@ -75,7 +75,7 @@ const open = async (id?: number) => {
|
|||
formLoading.value = true
|
||||
try {
|
||||
const user = await UserApi.getUser(id)
|
||||
const wallet = await WalletApi.getWallet({ userId: user.id || 0 })
|
||||
const wallet = await WalletApi.getWallet({ userId: user.id! })
|
||||
formData.value.id = user.id
|
||||
formData.value.nickname = user.nickname
|
||||
formData.value.balance = formatToFraction(wallet.balance)
|
||||
|
|
@ -108,14 +108,14 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
await WalletApi.updateWalletBalance({
|
||||
userId: formData.value.id,
|
||||
const data: WalletApi.WalletBalanceUpdateReqVO = {
|
||||
userId: formData.value.id!,
|
||||
balance: convertToInteger(formData.value.changeBalance) * formData.value.changeType
|
||||
})
|
||||
|
||||
}
|
||||
await WalletApi.updateWalletBalance(data)
|
||||
// 发送操作成功的事件
|
||||
message.success(t('common.updateSuccess'))
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
|
|
|
|||
|
|
@ -41,10 +41,10 @@ const message = useMessage() // 消息弹窗
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
nickname: undefined,
|
||||
levelId: undefined,
|
||||
reason: undefined
|
||||
id: undefined as number | undefined,
|
||||
nickname: undefined as string | undefined,
|
||||
levelId: undefined as number | undefined,
|
||||
reason: undefined as string | undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
reason: [{ required: true, message: '修改原因不能为空', trigger: 'blur' }]
|
||||
|
|
@ -59,7 +59,13 @@ const open = async (id?: number) => {
|
|||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await UserApi.getUser(id)
|
||||
const user = await UserApi.getUser(id)
|
||||
formData.value = {
|
||||
id: user.id,
|
||||
nickname: user.nickname,
|
||||
levelId: undefined,
|
||||
reason: undefined
|
||||
}
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
|
|
@ -77,11 +83,15 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
await UserApi.updateUserLevel(formData.value)
|
||||
|
||||
const data: UserApi.UserLevelUpdateReqVO = {
|
||||
id: formData.value.id!,
|
||||
levelId: formData.value.levelId!,
|
||||
reason: formData.value.reason!
|
||||
}
|
||||
await UserApi.updateUserLevel(data)
|
||||
// 发送操作成功的事件
|
||||
message.success(t('common.updateSuccess'))
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
|
|
|
|||
|
|
@ -47,8 +47,8 @@ const message = useMessage() // 消息弹窗
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
nickname: undefined,
|
||||
id: undefined as number | undefined,
|
||||
nickname: undefined as string | undefined,
|
||||
point: 0,
|
||||
changePoint: 0,
|
||||
changeType: 1
|
||||
|
|
@ -66,9 +66,14 @@ const open = async (id?: number) => {
|
|||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await UserApi.getUser(id)
|
||||
formData.value.changeType = 1 // 默认增加积分
|
||||
formData.value.changePoint = 0 // 变动积分默认0
|
||||
const user = await UserApi.getUser(id)
|
||||
formData.value = {
|
||||
id: user.id,
|
||||
nickname: user.nickname,
|
||||
point: user.point!,
|
||||
changeType: 1, // 默认增加积分
|
||||
changePoint: 0 // 变动积分默认0
|
||||
}
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
|
|
@ -96,14 +101,14 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
await UserApi.updateUserPoint({
|
||||
id: formData.value.id,
|
||||
const data: UserApi.UserPointUpdateReqVO = {
|
||||
id: formData.value.id!,
|
||||
point: formData.value.changePoint * formData.value.changeType
|
||||
})
|
||||
|
||||
}
|
||||
await UserApi.updateUserPoint(data)
|
||||
// 发送操作成功的事件
|
||||
message.success(t('common.updateSuccess'))
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
<template #label>
|
||||
<descriptions-item-label icon="fa:mars-double" label="性别" />
|
||||
</template>
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="user.sex" />
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="user.sex ?? 0" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template #label>
|
||||
|
|
@ -103,7 +103,7 @@
|
|||
<template #label>
|
||||
<descriptions-item-label icon="fa:mars-double" label="性别" />
|
||||
</template>
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="user.sex" />
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="user.sex ?? 0" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template #label>
|
||||
|
|
|
|||
|
|
@ -83,11 +83,11 @@ const { bindUserId }: { bindUserId: number } = defineProps({
|
|||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数据
|
||||
const list = ref<BrokerageUserApi.BrokerageUserVO[]>([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
bindUserId: null,
|
||||
bindUserId: undefined as number | undefined,
|
||||
level: '',
|
||||
bindUserTime: []
|
||||
})
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ onMounted(() => {
|
|||
for (const dict of getIntDictOptions(DICT_TYPE.PROMOTION_COUPON_STATUS)) {
|
||||
statusTabs.push({
|
||||
label: dict.label,
|
||||
value: dict.value as string
|
||||
value: String(dict.value)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -106,17 +106,17 @@ defineOptions({ name: 'UserExperienceRecordList' })
|
|||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数据
|
||||
const list = ref<ExperienceRecordApi.ExperienceRecordVO[]>([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: null,
|
||||
bizId: null,
|
||||
bizType: null,
|
||||
title: null,
|
||||
description: null,
|
||||
experience: null,
|
||||
totalExperience: null,
|
||||
userId: undefined as number | undefined,
|
||||
bizId: undefined as number | undefined,
|
||||
bizType: undefined as number | undefined,
|
||||
title: undefined as string | undefined,
|
||||
description: undefined as string | undefined,
|
||||
experience: undefined as number | undefined,
|
||||
totalExperience: undefined as number | undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
|
|
|||
|
|
@ -5,7 +5,12 @@
|
|||
<el-table-column key="id" align="center" label="商品编号" width="180" prop="id" />
|
||||
<el-table-column label="商品图" min-width="80">
|
||||
<template #default="{ row }">
|
||||
<el-image :src="row.picUrl" class="h-30px w-30px" @click="imagePreview(row.picUrl)" />
|
||||
<el-image
|
||||
:src="row.picUrl"
|
||||
:preview-src-list="row.picUrl ? [row.picUrl] : []"
|
||||
class="h-30px w-30px"
|
||||
preview-teleported
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :show-overflow-tooltip="true" label="商品名称" min-width="300" prop="name" />
|
||||
|
|
@ -44,7 +49,7 @@ import { floatToFixed2 } from '@/utils'
|
|||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数据
|
||||
const list = ref<FavoriteApi.Favorite[]>([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@
|
|||
v-for="item in deliveryExpressList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:value="item.id!"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
|
@ -104,7 +104,7 @@
|
|||
v-for="item in pickUpStoreList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:value="item.id!"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
|
@ -199,7 +199,7 @@ const { userId } = defineProps<{
|
|||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数据
|
||||
const list = ref<OrderApi.OrderVO[]>([]) // 列表的数据
|
||||
const pickUpStoreList = ref<PickUpStoreApi.DeliveryPickUpStoreVO[]>([]) // 自提门店精简列表
|
||||
const deliveryExpressList = ref<DeliveryExpressApi.DeliveryExpressVO[]>([]) // 物流公司
|
||||
const queryFormRef = ref<FormInstance>() // 搜索的表单
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ const getUserData = async (id: number) => {
|
|||
const { currentRoute } = useRouter() // 路由
|
||||
const { delView } = useTagsViewStore() // 视图操作
|
||||
const route = useRoute()
|
||||
const id = route.params.id
|
||||
const id = Number(route.params.id)
|
||||
/* 用户钱包相关信息 */
|
||||
const WALLET_INIT_DATA = {
|
||||
balance: 0,
|
||||
|
|
|
|||
|
|
@ -231,18 +231,18 @@ const message = useMessage() // 消息弹窗
|
|||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数据
|
||||
const list = ref<UserApi.UserVO[]>([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
nickname: null,
|
||||
mobile: null,
|
||||
email: null,
|
||||
nickname: undefined as string | undefined,
|
||||
mobile: undefined as string | undefined,
|
||||
email: undefined as string | undefined,
|
||||
loginDate: [],
|
||||
createTime: [],
|
||||
tagIds: [],
|
||||
levelId: null,
|
||||
groupId: null
|
||||
levelId: undefined as number | undefined,
|
||||
groupId: undefined as number | undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const updateLevelFormRef = ref() // 修改会员等级表单
|
||||
|
|
@ -288,7 +288,7 @@ const openForm = (type: string, id?: number) => {
|
|||
|
||||
/** 表格选中事件 */
|
||||
const handleSelectionChange = (rows: UserApi.UserVO[]) => {
|
||||
selectedIds.value = rows.map((row) => row.id)
|
||||
selectedIds.value = rows.map((row) => row.id!)
|
||||
}
|
||||
|
||||
/** 发送优惠券 */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div>
|
||||
<Dialog v-model="dialogVisible" :title="dialogTitle" width="830px" @closed="close">
|
||||
<Dialog v-model="dialogVisible" :title="dialogTitle" width="830px">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
v-loading="formLoading"
|
||||
|
|
|
|||
|
|
@ -142,10 +142,10 @@ const route = useRoute() // 路由
|
|||
const { push, currentRoute } = useRouter() // 路由
|
||||
const { delView } = useTagsViewStore() // 视图操作
|
||||
|
||||
const id = ref(undefined) // 支付单号
|
||||
const id = ref<number>() // 支付单号
|
||||
const returnUrl = ref<string | undefined>(undefined) // 支付完的回调地址
|
||||
const loading = ref(false) // 支付信息的 loading
|
||||
const payOrder = ref({}) // 支付信息
|
||||
const payOrder = ref<PayOrderApi.OrderVO>({} as PayOrderApi.OrderVO) // 支付信息
|
||||
const channelsAlipay = [
|
||||
{
|
||||
name: '支付宝 PC 网站支付',
|
||||
|
|
@ -390,6 +390,9 @@ const createQueryInterval = () => {
|
|||
return
|
||||
}
|
||||
interval.value = setInterval(async () => {
|
||||
if (!id.value) {
|
||||
return
|
||||
}
|
||||
const data = await PayOrderApi.getOrder(id.value)
|
||||
// 已支付
|
||||
if (data.status === PayOrderStatusEnum.SUCCESS.status) {
|
||||
|
|
@ -454,8 +457,10 @@ const goReturnUrl = (payResult) => {
|
|||
|
||||
/** 初始化 */
|
||||
onMounted(() => {
|
||||
id.value = route.query.id
|
||||
if (route.query.returnUrl) {
|
||||
if (typeof route.query.id === 'string') {
|
||||
id.value = Number(route.query.id)
|
||||
}
|
||||
if (typeof route.query.returnUrl === 'string') {
|
||||
returnUrl.value = decodeURIComponent(route.query.returnUrl)
|
||||
}
|
||||
getDetail()
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<template>
|
||||
<Dialog v-model="dialogVisible" title="通知详情" width="50%">
|
||||
<Dialog v-model="dialogVisible" title="通知详情" width="50%" :loading="detailLoading">
|
||||
<el-descriptions :column="2">
|
||||
<el-descriptions-item label="通知状态" :span="2">
|
||||
<dict-tag :type="DICT_TYPE.PAY_NOTIFY_STATUS" :value="detailData.status" />
|
||||
<dict-tag :type="DICT_TYPE.PAY_NOTIFY_STATUS" :value="detailData.status!" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="商户订单编号" :span="2">
|
||||
<el-tag>{{ detailData.merchantOrderId }}</el-tag>
|
||||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
<el-descriptions-item label="关联编号">{{ detailData.dataId }}</el-descriptions-item>
|
||||
<el-descriptions-item label="通知类型">
|
||||
<dict-tag :type="DICT_TYPE.PAY_NOTIFY_TYPE" :value="detailData.type" />
|
||||
<dict-tag :type="DICT_TYPE.PAY_NOTIFY_TYPE" :value="detailData.type!" />
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="通知次数">{{ detailData.notifyTimes }}</el-descriptions-item>
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
<el-descriptions :column="1" direction="vertical" border>
|
||||
<el-descriptions-item label="回调日志">
|
||||
<el-table :data="detailData.logs">
|
||||
<el-table :data="detailData.logs || []">
|
||||
<el-table-column label="日志编号" align="center" prop="id" />
|
||||
<el-table-column label="通知状态" align="center" prop="status">
|
||||
<template #default="scope">
|
||||
|
|
@ -75,13 +75,13 @@ defineOptions({ name: 'PayNotifyDetail' })
|
|||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const detailLoading = ref(false) // 表单的加载中
|
||||
const detailData = ref({})
|
||||
const detailData = ref<PayNotifyApi.NotifyTaskVO>({ logs: [] })
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (id: number) => {
|
||||
dialogVisible.value = true
|
||||
// 设置数据
|
||||
detailLoading.value = true
|
||||
dialogVisible.value = true
|
||||
try {
|
||||
detailData.value = await PayNotifyApi.getNotifyTaskDetail(id)
|
||||
} finally {
|
||||
|
|
|
|||
|
|
@ -194,21 +194,21 @@ defineOptions({ name: 'PayNotify' })
|
|||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref() // 列表的数据
|
||||
const list = ref<PayNotifyApi.NotifyTaskVO[]>([]) // 列表的数据
|
||||
const queryParams = ref({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
appId: null,
|
||||
type: null,
|
||||
dataId: null,
|
||||
status: null,
|
||||
merchantOrderId: null,
|
||||
merchantRefundId: null,
|
||||
merchantTransferId: null,
|
||||
createTime: []
|
||||
appId: null as number | null,
|
||||
type: null as number | null,
|
||||
dataId: null as string | null,
|
||||
status: null as number | null,
|
||||
merchantOrderId: null as string | null,
|
||||
merchantRefundId: null as string | null,
|
||||
merchantTransferId: null as string | null,
|
||||
createTime: [] as string[]
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const appList = ref([]) // 支付应用列表集合
|
||||
const appList = ref<PayAppApi.AppVO[]>([]) // 支付应用列表集合
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<Dialog v-model="dialogVisible" title="订单详情" width="700px">
|
||||
<Dialog v-model="dialogVisible" title="订单详情" width="700px" :loading="detailLoading">
|
||||
<el-descriptions :column="2" label-class-name="desc-label">
|
||||
<el-descriptions-item label="商户单号">
|
||||
<el-tag size="small">{{ detailData.merchantOrderId }}</el-tag>
|
||||
|
|
@ -10,20 +10,25 @@
|
|||
<el-descriptions-item label="应用编号">{{ detailData.appId }}</el-descriptions-item>
|
||||
<el-descriptions-item label="应用名称">{{ detailData.appName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="支付状态">
|
||||
<dict-tag :type="DICT_TYPE.PAY_ORDER_STATUS" :value="detailData.status" size="small" />
|
||||
<dict-tag
|
||||
v-if="detailData.status !== undefined"
|
||||
:type="DICT_TYPE.PAY_ORDER_STATUS"
|
||||
:value="detailData.status"
|
||||
size="small"
|
||||
/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="支付金额">
|
||||
<el-tag type="success" size="small"
|
||||
>¥{{ ((detailData.price || 0) / 100.0).toFixed(2) }}</el-tag
|
||||
>
|
||||
<el-tag type="success" size="small">
|
||||
¥{{ (detailData.price! / 100.0).toFixed(2) }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="手续费">
|
||||
<el-tag type="warning" size="small">
|
||||
¥{{ ((detailData.channelFeePrice || 0) / 100.0).toFixed(2) }}
|
||||
¥{{ (detailData.channelFeePrice! / 100.0).toFixed(2) }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="手续费比例">
|
||||
{{ (detailData.channelFeeRate || 0).toFixed(2) }}%
|
||||
{{ detailData.channelFeeRate!.toFixed(2) }}%
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="支付时间">
|
||||
{{ formatDate(detailData.successTime) }}
|
||||
|
|
@ -44,7 +49,11 @@
|
|||
<el-descriptions-item label="商品标题">{{ detailData.subject }}</el-descriptions-item>
|
||||
<el-descriptions-item label="商品描述">{{ detailData.body }}</el-descriptions-item>
|
||||
<el-descriptions-item label="支付渠道">
|
||||
<dict-tag :type="DICT_TYPE.PAY_CHANNEL_CODE" :value="detailData.channelCode" />
|
||||
<dict-tag
|
||||
v-if="detailData.channelCode"
|
||||
:type="DICT_TYPE.PAY_CHANNEL_CODE"
|
||||
:value="detailData.channelCode"
|
||||
/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="支付 IP">{{ detailData.userIp }}</el-descriptions-item>
|
||||
<el-descriptions-item label="渠道单号">
|
||||
|
|
@ -55,7 +64,7 @@
|
|||
<el-descriptions-item label="渠道用户">{{ detailData.channelUserId }}</el-descriptions-item>
|
||||
<el-descriptions-item label="退款金额">
|
||||
<el-tag size="small" type="danger">
|
||||
¥{{ ((detailData.refundPrice || 0) / 100.0).toFixed(2) }}
|
||||
¥{{ (detailData.refundPrice! / 100.0).toFixed(2) }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="通知 URL">{{ detailData.notifyUrl }}</el-descriptions-item>
|
||||
|
|
@ -65,7 +74,7 @@
|
|||
<el-descriptions :column="1" label-class-name="desc-label" direction="vertical" border>
|
||||
<el-descriptions-item label="支付通道异步回调内容">
|
||||
<el-text style="overflow-wrap: anywhere; white-space: pre-wrap">
|
||||
{{ detailData.extension.channelNotifyData }}
|
||||
{{ detailData.extension?.channelNotifyData }}
|
||||
</el-text>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
|
@ -80,15 +89,15 @@ defineOptions({ name: 'PayOrderDetail' })
|
|||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const detailLoading = ref(false) // 表单的加载中
|
||||
const detailData = ref({
|
||||
const detailData = ref<OrderApi.OrderDetailVO>({
|
||||
extension: {}
|
||||
})
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (id: number) => {
|
||||
dialogVisible.value = true
|
||||
// 设置数据
|
||||
detailLoading.value = true
|
||||
dialogVisible.value = true
|
||||
try {
|
||||
detailData.value = await OrderApi.getOrderDetail(id)
|
||||
if (!detailData.value.extension) {
|
||||
|
|
|
|||
|
|
@ -117,16 +117,14 @@
|
|||
:formatter="dateFormatter"
|
||||
/>
|
||||
<el-table-column label="支付金额" align="center" prop="price" width="100">
|
||||
<template #default="scope"> ¥{{ parseFloat(scope.row.price / 100).toFixed(2) }} </template>
|
||||
<template #default="scope"> ¥{{ (scope.row.price! / 100).toFixed(2) }} </template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款金额" align="center" prop="refundPrice" width="100">
|
||||
<template #default="scope">
|
||||
¥{{ parseFloat(scope.row.refundPrice / 100).toFixed(2) }}
|
||||
</template>
|
||||
<template #default="scope"> ¥{{ (scope.row.refundPrice! / 100).toFixed(2) }} </template>
|
||||
</el-table-column>
|
||||
<el-table-column label="手续金额" align="center" prop="channelFeePrice" width="100">
|
||||
<template #default="scope">
|
||||
¥{{ parseFloat(scope.row.channelFeePrice / 100).toFixed(2) }}
|
||||
¥{{ (scope.row.channelFeePrice! / 100).toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="订单号" align="left" width="300">
|
||||
|
|
@ -149,7 +147,11 @@
|
|||
</el-table-column>
|
||||
<el-table-column label="支付渠道" align="center" prop="channelCode" width="140">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.PAY_CHANNEL_CODE" :value="scope.row.channelCode" />
|
||||
<dict-tag
|
||||
v-if="scope.row.channelCode"
|
||||
:type="DICT_TYPE.PAY_CHANNEL_CODE"
|
||||
:value="scope.row.channelCode"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
|
|
@ -192,7 +194,7 @@ import { dateFormatter } from '@/utils/formatTime'
|
|||
import * as OrderApi from '@/api/pay/order'
|
||||
import OrderDetail from './OrderDetail.vue'
|
||||
import download from '@/utils/download'
|
||||
import { getAppList } from '@/api/pay/app'
|
||||
import { AppVO, getAppList } from '@/api/pay/app'
|
||||
|
||||
defineOptions({ name: 'PayOrder' })
|
||||
|
||||
|
|
@ -200,21 +202,21 @@ const message = useMessage() // 消息弹窗
|
|||
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数据
|
||||
const list = ref<OrderApi.OrderDetailVO[]>([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
appId: null,
|
||||
channelCode: null,
|
||||
merchantOrderId: null,
|
||||
channelOrderNo: null,
|
||||
no: null,
|
||||
status: null,
|
||||
createTime: []
|
||||
appId: null as number | null,
|
||||
channelCode: null as string | null,
|
||||
merchantOrderId: null as string | null,
|
||||
channelOrderNo: null as string | null,
|
||||
no: null as string | null,
|
||||
status: null as number | null,
|
||||
createTime: [] as string[]
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出等待
|
||||
const appList = ref([]) // 支付应用列表集合
|
||||
const appList = ref<AppVO[]>([]) // 支付应用列表集合
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<Dialog v-model="dialogVisible" title="详情" width="700px">
|
||||
<Dialog v-model="dialogVisible" title="详情" width="700px" :loading="detailLoading">
|
||||
<el-descriptions :column="2" label-class-name="desc-label">
|
||||
<el-descriptions-item label="商户退款单号">
|
||||
<el-tag size="small">{{ refundDetail.merchantRefundId }}</el-tag>
|
||||
|
|
@ -19,16 +19,20 @@
|
|||
<el-descriptions-item label="应用名称">{{ refundDetail.appName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="支付金额">
|
||||
<el-tag type="success" size="small">
|
||||
¥{{ (refundDetail.payPrice / 100.0).toFixed(2) }}
|
||||
¥{{ (refundDetail.payPrice! / 100.0).toFixed(2) }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="退款金额">
|
||||
<el-tag size="small" type="danger">
|
||||
¥{{ (refundDetail.refundPrice / 100.0).toFixed(2) }}
|
||||
¥{{ (refundDetail.refundPrice! / 100.0).toFixed(2) }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="退款状态">
|
||||
<dict-tag :type="DICT_TYPE.PAY_REFUND_STATUS" :value="refundDetail.status" />
|
||||
<dict-tag
|
||||
v-if="refundDetail.status !== undefined"
|
||||
:type="DICT_TYPE.PAY_REFUND_STATUS"
|
||||
:value="refundDetail.status"
|
||||
/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="退款时间">
|
||||
{{ formatDate(refundDetail.successTime) }}
|
||||
|
|
@ -44,7 +48,11 @@
|
|||
<el-divider />
|
||||
<el-descriptions :column="2" label-class-name="desc-label">
|
||||
<el-descriptions-item label="退款渠道">
|
||||
<dict-tag :type="DICT_TYPE.PAY_CHANNEL_CODE" :value="refundDetail.channelCode" />
|
||||
<dict-tag
|
||||
v-if="refundDetail.channelCode"
|
||||
:type="DICT_TYPE.PAY_CHANNEL_CODE"
|
||||
:value="refundDetail.channelCode"
|
||||
/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="退款原因">{{ refundDetail.reason }}</el-descriptions-item>
|
||||
<el-descriptions-item label="退款 IP">{{ refundDetail.userIp }}</el-descriptions-item>
|
||||
|
|
@ -78,13 +86,13 @@ defineOptions({ name: 'PayRefundDetail' })
|
|||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const detailLoading = ref(false) // 表单的加载中
|
||||
const refundDetail = ref({})
|
||||
const refundDetail = ref<RefundApi.RefundDetailVO>({})
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (id: number) => {
|
||||
dialogVisible.value = true
|
||||
// 设置数据
|
||||
detailLoading.value = true
|
||||
dialogVisible.value = true
|
||||
try {
|
||||
refundDetail.value = await RefundApi.getRefund(id)
|
||||
} finally {
|
||||
|
|
|
|||
|
|
@ -125,14 +125,10 @@
|
|||
:formatter="dateFormatter"
|
||||
/>
|
||||
<el-table-column label="支付金额" align="center" prop="payPrice" width="100">
|
||||
<template #default="scope">
|
||||
¥{{ parseFloat(scope.row.payPrice / 100).toFixed(2) }}
|
||||
</template>
|
||||
<template #default="scope"> ¥{{ (scope.row.payPrice! / 100).toFixed(2) }} </template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款金额" align="center" prop="refundPrice" width="100">
|
||||
<template #default="scope">
|
||||
¥{{ parseFloat(scope.row.refundPrice / 100).toFixed(2) }}
|
||||
</template>
|
||||
<template #default="scope"> ¥{{ (scope.row.refundPrice! / 100).toFixed(2) }} </template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款订单号" align="left" width="300">
|
||||
<template #default="scope">
|
||||
|
|
@ -164,7 +160,11 @@
|
|||
</el-table-column>
|
||||
<el-table-column label="退款渠道" align="center" width="140">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.PAY_CHANNEL_CODE" :value="scope.row.channelCode" />
|
||||
<dict-tag
|
||||
v-if="scope.row.channelCode"
|
||||
:type="DICT_TYPE.PAY_CHANNEL_CODE"
|
||||
:value="scope.row.channelCode"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
|
|
@ -218,26 +218,26 @@ const message = useMessage() // 消息弹窗
|
|||
|
||||
const loading = ref(false) // 列表遮罩层
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数据
|
||||
const list = ref<RefundApi.RefundDetailVO[]>([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
merchantId: undefined,
|
||||
appId: undefined,
|
||||
channelCode: undefined,
|
||||
merchantOrderId: undefined,
|
||||
merchantRefundId: undefined,
|
||||
status: undefined,
|
||||
payPrice: undefined,
|
||||
refundPrice: undefined,
|
||||
channelOrderNo: undefined,
|
||||
channelRefundNo: undefined,
|
||||
createTime: [],
|
||||
successTime: []
|
||||
merchantId: undefined as number | undefined,
|
||||
appId: undefined as number | undefined,
|
||||
channelCode: undefined as string | undefined,
|
||||
merchantOrderId: undefined as string | undefined,
|
||||
merchantRefundId: undefined as string | undefined,
|
||||
status: undefined as number | undefined,
|
||||
payPrice: undefined as number | undefined,
|
||||
refundPrice: undefined as number | undefined,
|
||||
channelOrderNo: undefined as string | undefined,
|
||||
channelRefundNo: undefined as string | undefined,
|
||||
createTime: [] as string[],
|
||||
successTime: [] as string[]
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出等待
|
||||
const appList = ref([]) // 支付应用列表集合
|
||||
const appList = ref<AppApi.AppVO[]>([]) // 支付应用列表集合
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<Dialog v-model="dialogVisible" title="转账单详情" width="700px">
|
||||
<Dialog v-model="dialogVisible" title="转账单详情" width="700px" :loading="detailLoading">
|
||||
<el-descriptions :column="2" label-class-name="desc-label">
|
||||
<el-descriptions-item label="商户单号">
|
||||
<el-tag size="small">{{ detailData.merchantTransferId }}</el-tag>
|
||||
|
|
@ -9,10 +9,17 @@
|
|||
</el-descriptions-item>
|
||||
<el-descriptions-item label="应用编号">{{ detailData.appId }}</el-descriptions-item>
|
||||
<el-descriptions-item label="转账状态">
|
||||
<dict-tag :type="DICT_TYPE.PAY_TRANSFER_STATUS" :value="detailData.status" size="small" />
|
||||
<dict-tag
|
||||
v-if="detailData.status !== undefined"
|
||||
:type="DICT_TYPE.PAY_TRANSFER_STATUS"
|
||||
:value="detailData.status"
|
||||
size="small"
|
||||
/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="转账金额">
|
||||
<el-tag type="success" size="small">¥{{ (detailData.price / 100.0).toFixed(2) }}</el-tag>
|
||||
<el-tag type="success" size="small">
|
||||
¥{{ (detailData.price! / 100.0).toFixed(2) }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="转账时间">
|
||||
{{ formatDate(detailData.successTime) }}
|
||||
|
|
@ -27,7 +34,11 @@
|
|||
<el-descriptions-item label="收款人姓名">{{ detailData.userName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="收款人账号">{{ detailData.userAccount }}</el-descriptions-item>
|
||||
<el-descriptions-item label="支付渠道">
|
||||
<dict-tag :type="DICT_TYPE.PAY_CHANNEL_CODE" :value="detailData.channelCode" />
|
||||
<dict-tag
|
||||
v-if="detailData.channelCode"
|
||||
:type="DICT_TYPE.PAY_CHANNEL_CODE"
|
||||
:value="detailData.channelCode"
|
||||
/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="支付 IP">{{ detailData.userIp }}</el-descriptions-item>
|
||||
<el-descriptions-item label="渠道单号">
|
||||
|
|
@ -61,13 +72,13 @@ defineOptions({ name: 'PayTransferDetail' })
|
|||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const detailLoading = ref(false) // 表单的加载中
|
||||
const detailData = ref({})
|
||||
const detailData = ref<TransferApi.TransferVO>({})
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (id: number) => {
|
||||
dialogVisible.value = true
|
||||
// 设置数据
|
||||
detailLoading.value = true
|
||||
dialogVisible.value = true
|
||||
try {
|
||||
detailData.value = await TransferApi.getTransfer(id)
|
||||
} finally {
|
||||
|
|
|
|||
|
|
@ -163,7 +163,11 @@
|
|||
<el-table-column label="转账标题" align="center" prop="subject" width="120" />
|
||||
<el-table-column label="转账渠道" align="center" prop="channelCode">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.PAY_CHANNEL_CODE" :value="scope.row.channelCode" />
|
||||
<dict-tag
|
||||
v-if="scope.row.channelCode"
|
||||
:type="DICT_TYPE.PAY_CHANNEL_CODE"
|
||||
:value="scope.row.channelCode"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
|
|
@ -203,23 +207,25 @@ const message = useMessage() // 消息弹窗
|
|||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数据
|
||||
const list = ref<TransferApi.TransferVO[]>([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
no: null,
|
||||
appId: null,
|
||||
channelId: null,
|
||||
channelCode: null,
|
||||
merchantTransferId: null,
|
||||
type: null,
|
||||
status: null,
|
||||
successTime: [],
|
||||
price: null,
|
||||
subject: null,
|
||||
userName: null,
|
||||
userAccount: null,
|
||||
createTime: []
|
||||
no: null as string | null,
|
||||
appId: null as number | null,
|
||||
channelId: null as number | null,
|
||||
channelCode: null as string | null,
|
||||
merchantTransferId: null as string | null,
|
||||
type: null as string | null,
|
||||
status: null as number | null,
|
||||
successTime: [] as string[],
|
||||
price: null as number | null,
|
||||
subject: null as string | null,
|
||||
userName: null as string | null,
|
||||
userAccount: null as string | null,
|
||||
accountNo: null as string | null,
|
||||
channelTransferNo: null as string | null,
|
||||
createTime: [] as string[]
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
|||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
const formData = ref<DictTypeApi.DictTypeVO>({
|
||||
id: undefined,
|
||||
name: '',
|
||||
type: '',
|
||||
|
|
@ -94,7 +94,7 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as DictTypeApi.DictTypeVO
|
||||
const data = formData.value
|
||||
if (formType.value === 'create') {
|
||||
await DictTypeApi.createDictType(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
|||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
const formData = ref<DictDataApi.DictDataVO>({
|
||||
id: undefined,
|
||||
sort: undefined,
|
||||
label: '',
|
||||
|
|
@ -149,7 +149,7 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as DictDataApi.DictDataVO
|
||||
const data = formData.value
|
||||
if (formType.value === 'create') {
|
||||
await DictDataApi.createDictData(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ const handleDelete = async (id: number) => {
|
|||
/** 批量删除按钮操作 */
|
||||
const checkedIds = ref<number[]>([])
|
||||
const handleRowCheckboxChange = (rows: DictDataApi.DictDataVO[]) => {
|
||||
checkedIds.value = rows.map((row) => row.id)
|
||||
checkedIds.value = rows.map((row) => row.id!)
|
||||
}
|
||||
|
||||
const handleDeleteBatch = async () => {
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@ const handleDelete = async (id: number) => {
|
|||
/** 批量删除按钮操作 */
|
||||
const checkedIds = ref<number[]>([])
|
||||
const handleRowCheckboxChange = (rows: DictTypeApi.DictTypeVO[]) => {
|
||||
checkedIds.value = rows.map((row) => row.id)
|
||||
checkedIds.value = rows.map((row) => row.id!)
|
||||
}
|
||||
|
||||
const handleDeleteBatch = async () => {
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
|||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
const formData = ref<MailAccountApi.MailAccountVO>({
|
||||
id: undefined,
|
||||
mail: '',
|
||||
username: '',
|
||||
|
|
@ -126,7 +126,7 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as MailAccountApi.MailAccountVO
|
||||
const data = formData.value
|
||||
if (formType.value === 'create') {
|
||||
await MailAccountApi.createMailAccount(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ const handleDelete = async (id: number) => {
|
|||
/** 批量删除按钮操作 */
|
||||
const checkedIds = ref<number[]>([])
|
||||
const handleRowCheckboxChange = (rows: MailAccountApi.MailAccountVO[]) => {
|
||||
checkedIds.value = rows.map((row) => row.id)
|
||||
checkedIds.value = rows.map((row) => row.id!)
|
||||
}
|
||||
|
||||
const handleDeleteBatch = async () => {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
<el-option
|
||||
v-for="account in accountList"
|
||||
:key="account.id"
|
||||
:value="account.id"
|
||||
:value="account.id!"
|
||||
:label="account.mail"
|
||||
/>
|
||||
</el-select>
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
v-for="account in accountList"
|
||||
:key="account.id"
|
||||
:label="account.mail"
|
||||
:value="account.id"
|
||||
:value="account.id!"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
<el-option
|
||||
v-for="account in accountList"
|
||||
:key="account.id"
|
||||
:value="account.id"
|
||||
:value="account.id!"
|
||||
:label="account.mail"
|
||||
/>
|
||||
</el-select>
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@
|
|||
v-model:expanded-row-keys="expandedRowKeys"
|
||||
:columns="columns"
|
||||
:data="list"
|
||||
:expand-column-key="columns[0].key"
|
||||
:expand-column-key="String(columns[0].key)"
|
||||
:height="1000"
|
||||
:width="width"
|
||||
fixed
|
||||
|
|
@ -94,7 +94,7 @@ import { MenuVO } from '@/api/system/menu'
|
|||
import MenuForm from './MenuForm.vue'
|
||||
import DictTag from '@/components/DictTag/src/DictTag.vue'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import { ElButton, TableV2FixedDir, ElSwitch } from 'element-plus'
|
||||
import { ElButton, TableV2FixedDir, ElSwitch, type Column } from 'element-plus'
|
||||
import { checkPermi } from '@/utils/permission'
|
||||
import { CommonStatusEnum } from '@/utils/constants'
|
||||
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
||||
|
|
@ -102,7 +102,7 @@ import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
|||
defineOptions({ name: 'SystemMenu' })
|
||||
|
||||
// 虚拟列表表格
|
||||
const columns = [
|
||||
const columns: Column<MenuVO>[] = [
|
||||
{
|
||||
key: 'name',
|
||||
title: '菜单名称',
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ const handleDelete = async (id: number) => {
|
|||
/** 批量删除按钮操作 */
|
||||
const checkedIds = ref<number[]>([])
|
||||
const handleRowCheckboxChange = (rows: NoticeApi.NoticeVO[]) => {
|
||||
checkedIds.value = rows.map((row) => row.id)
|
||||
checkedIds.value = rows.map((row) => row.id!)
|
||||
}
|
||||
|
||||
const handleDeleteBatch = async () => {
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ const handleDelete = async (id: number) => {
|
|||
/** 批量删除按钮操作 */
|
||||
const checkedIds = ref<number[]>([])
|
||||
const handleRowCheckboxChange = (rows: PostApi.PostVO[]) => {
|
||||
checkedIds.value = rows.map((row) => row.id)
|
||||
checkedIds.value = rows.map((row) => row.id!)
|
||||
}
|
||||
|
||||
const handleDeleteBatch = async () => {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
</el-descriptions-item>
|
||||
<el-descriptions-item label="短信模板">
|
||||
{{ detailData.templateId }} | {{ detailData.templateCode }}
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE" :value="detailData.templateType" />
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE" :value="detailData.templateType!" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="API 的模板编号">
|
||||
{{ detailData.apiTemplateId }}
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
{{ formatDate(detailData.createTime) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="发送状态">
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_SEND_STATUS" :value="detailData.sendStatus" />
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_SEND_STATUS" :value="detailData.sendStatus!" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="发送时间">
|
||||
{{ formatDate(detailData.sendTime) }}
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
{{ detailData.apiRequestId }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="API 接收状态">
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_RECEIVE_STATUS" :value="detailData.receiveStatus" />
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_RECEIVE_STATUS" :value="detailData.receiveStatus!" />
|
||||
{{ formatDate(detailData.receiveTime) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="API 接收结果">
|
||||
|
|
@ -66,8 +66,8 @@ defineOptions({ name: 'SystemSmsLogDetail' })
|
|||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const detailLoading = ref(false) // 表单的加载中
|
||||
const detailData = ref() // 详情数据
|
||||
const channelList = ref([]) // 短信渠道列表
|
||||
const detailData = ref<SmsLogApi.SmsLogVO>({} as SmsLogApi.SmsLogVO) // 详情数据
|
||||
const channelList = ref<SmsChannelApi.SmsChannelVO[]>([]) // 短信渠道列表
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (data: SmsLogApi.SmsLogVO) => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue