Commit 493a6554 by renyizhao

充值订单筛选

parent 780cb232
...@@ -3,14 +3,15 @@ import request from '@/config/axios' ...@@ -3,14 +3,15 @@ import request from '@/config/axios'
export interface MemberRechargePageReqVO { export interface MemberRechargePageReqVO {
pageNo: number pageNo: number
pageSize: number pageSize: number
userId?: number userMobile?: string
payChannel?: string payChannel?: string
payStatus?: number payStatus?: number
redeemed?: number
createTime?: [string, string] createTime?: [string, string]
} }
export interface MemberRechargeRespVO { export interface MemberRechargeRespVO {
id: number id: number | null
userId: number userId: number
userMobile: string userMobile: string
amount: number amount: number
...@@ -46,5 +47,8 @@ export const MemberRechargeApi = { ...@@ -46,5 +47,8 @@ export const MemberRechargeApi = {
}, },
manualRecharge: async (data: MemberRechargeManualReqVO) => { manualRecharge: async (data: MemberRechargeManualReqVO) => {
return request.post({ url: '/member/recharge/manual', data }) return request.post({ url: '/member/recharge/manual', data })
},
getPendingCount: async () => {
return request.get({ url: '/member/recharge/pending-count' })
} }
} }
...@@ -11,10 +11,10 @@ ...@@ -11,10 +11,10 @@
:inline="true" :inline="true"
label-width="100px" label-width="100px"
> >
<el-form-item label="用户ID" prop="userId"> <el-form-item label="手机号" prop="userMobile">
<el-input <el-input
v-model="queryParams.userId" v-model="queryParams.userMobile"
placeholder="请输入用户ID" placeholder="请输入手机号"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
class="!w-240px" class="!w-240px"
...@@ -44,6 +44,19 @@ ...@@ -44,6 +44,19 @@
<el-option label="已退款" :value="2" /> <el-option label="已退款" :value="2" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="充值状态" prop="redeemed">
<el-select
v-model="queryParams.redeemed"
placeholder="请选择充值状态"
clearable
class="!w-240px"
>
<el-option label="无需充值" :value="0" />
<el-option label="已充值" :value="1" />
<el-option label="待充值" :value="2" />
<el-option label="已人工充值" :value="3" />
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime"> <el-form-item label="创建时间" prop="createTime">
<el-date-picker <el-date-picker
v-model="queryParams.createTime" v-model="queryParams.createTime"
...@@ -56,8 +69,12 @@ ...@@ -56,8 +69,12 @@
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <el-button @click="handleQuery"
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> ><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button
>
<el-button @click="resetQuery"
><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
...@@ -65,7 +82,9 @@ ...@@ -65,7 +82,9 @@
<!-- 待充值 Tab --> <!-- 待充值 Tab -->
<el-tab-pane name="pending"> <el-tab-pane name="pending">
<template #label> <template #label>
<el-badge :value="pendingCount" :hidden="pendingCount === 0" :max="99">
<span>待充值</span> <span>待充值</span>
</el-badge>
</template> </template>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
...@@ -74,8 +93,14 @@ ...@@ -74,8 +93,14 @@
<!-- 列表 --> <!-- 列表 -->
<ContentWrap> <ContentWrap>
<!-- 充值记录列表 --> <!-- 充值记录列表 -->
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" v-if="activeTab === 'list'"> <el-table
<el-table-column label="用户名" align="center" prop="userMobile" /> v-loading="loading"
:data="list"
:stripe="true"
:show-overflow-tooltip="true"
v-if="activeTab === 'list'"
>
<el-table-column label="手机号" align="center" prop="userMobile" />
<el-table-column label="充值金额" align="center" prop="amount"> <el-table-column label="充值金额" align="center" prop="amount">
<template #default="{ row }"> <template #default="{ row }">
<span>¥{{ row.amount }}</span> <span>¥{{ row.amount }}</span>
...@@ -112,30 +137,38 @@ ...@@ -112,30 +137,38 @@
/> />
<el-table-column label="交易流水号" align="center" prop="transactionId" min-width="180" /> <el-table-column label="交易流水号" align="center" prop="transactionId" min-width="180" />
<el-table-column label="备注" align="center" prop="remark" min-width="150" /> <el-table-column label="备注" align="center" prop="remark" min-width="150" />
<el-table-column label="处理人" align="center" prop="manualOperatorId" width="100"> <el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="处理人" align="center" prop="manualOperatorName" width="100">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.redeemed === 3">{{ scope.row.manualOperatorId || '-' }}</span> <span v-if="scope.row.redeemed === 3">{{ scope.row.manualOperatorName || '-' }}</span>
<span v-else>-</span> <span v-else>-</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="处理时间" align="center" prop="manualProcessTime" width="180"> <el-table-column label="处理时间" align="center" prop="manualProcessTime" width="180">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.redeemed === 3">{{ scope.row.manualProcessTime ? formatDate(scope.row.manualProcessTime) : '-' }}</span> <span v-if="scope.row.redeemed === 3 && scope.row.manualProcessTime">{{
formatDate(scope.row.manualProcessTime)
}}</span>
<span v-else>-</span> <span v-else>-</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
</el-table> </el-table>
<!-- 待充值列表 --> <!-- 待充值列表 -->
<el-table v-loading="pendingLoading" :data="pendingList" :stripe="true" :show-overflow-tooltip="true" v-if="activeTab === 'pending'"> <el-table
<el-table-column label="用户名" align="center" prop="userMobile" /> v-loading="pendingLoading"
:data="pendingList"
:stripe="true"
:show-overflow-tooltip="true"
v-if="activeTab === 'pending'"
>
<el-table-column label="手机号" align="center" prop="userMobile" />
<el-table-column label="充值金额" align="center" prop="amount"> <el-table-column label="充值金额" align="center" prop="amount">
<template #default="{ row }"> <template #default="{ row }">
<span>¥{{ row.amount }}</span> <span>¥{{ row.amount }}</span>
...@@ -162,27 +195,17 @@ ...@@ -162,27 +195,17 @@
<el-table-column label="交易流水号" align="center" prop="transactionId" min-width="180" /> <el-table-column label="交易流水号" align="center" prop="transactionId" min-width="180" />
<el-table-column label="备注" align="center" prop="remark" min-width="150" /> <el-table-column label="备注" align="center" prop="remark" min-width="150" />
<el-table-column <el-table-column
label="操作"
align="center"
width="100"
>
<template #default="scope">
<el-button
type="primary"
link
@click="openManualDialog(scope.row)"
>
人工充值
</el-button>
</template>
</el-table-column>
<el-table-column
label="创建时间" label="创建时间"
align="center" align="center"
prop="createTime" prop="createTime"
:formatter="dateFormatter" :formatter="dateFormatter"
width="180px" width="180px"
/> />
<el-table-column label="操作" align="center" width="100">
<template #default="scope">
<el-button type="primary" link @click="openManualDialog(scope.row)"> 人工充值 </el-button>
</template>
</el-table-column>
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
...@@ -205,14 +228,8 @@ ...@@ -205,14 +228,8 @@
<!-- 人工充值弹窗 --> <!-- 人工充值弹窗 -->
<Dialog v-model="dialogVisible" title="人工充值" width="400px"> <Dialog v-model="dialogVisible" title="人工充值" width="400px">
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px"> <el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px">
<el-form-item label="充值记录ID"> <el-form-item label="充值金额">
<el-input v-model="formData.rechargeId" disabled /> <span>¥{{ formData.amount }}</span>
</el-form-item>
<el-form-item label="用户" prop="userMobile">
<el-input v-model="formData.userMobile" disabled />
</el-form-item>
<el-form-item label="充值金额" prop="amount">
<el-input v-model="formData.amount" disabled />
</el-form-item> </el-form-item>
<el-form-item label="兑换码" prop="redemptionCode"> <el-form-item label="兑换码" prop="redemptionCode">
<el-input v-model="formData.redemptionCode" placeholder="请输入兑换码" /> <el-input v-model="formData.redemptionCode" placeholder="请输入兑换码" />
...@@ -220,7 +237,9 @@ ...@@ -220,7 +237,9 @@
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click="dialogVisible = false">取 消</el-button> <el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleManualRecharge" :loading="submitLoading">确 定</el-button> <el-button type="primary" @click="handleManualRecharge" :loading="submitLoading"
>确 定</el-button
>
</template> </template>
</Dialog> </Dialog>
</template> </template>
...@@ -239,6 +258,7 @@ const list = ref<MemberRechargeRespVO[]>([]) ...@@ -239,6 +258,7 @@ const list = ref<MemberRechargeRespVO[]>([])
const pendingList = ref<MemberRechargeRespVO[]>([]) const pendingList = ref<MemberRechargeRespVO[]>([])
const total = ref(0) const total = ref(0)
const pendingTotal = ref(0) const pendingTotal = ref(0)
const pendingCount = ref(0)
const dialogVisible = ref(false) const dialogVisible = ref(false)
const submitLoading = ref(false) const submitLoading = ref(false)
const formRef = ref() const formRef = ref()
...@@ -246,9 +266,10 @@ const formRef = ref() ...@@ -246,9 +266,10 @@ const formRef = ref()
const queryParams = reactive({ const queryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
userId: undefined, userMobile: undefined,
payChannel: undefined, payChannel: undefined,
payStatus: undefined, payStatus: undefined,
redeemed: undefined,
createTime: [] createTime: []
}) })
...@@ -261,7 +282,6 @@ const queryFormRef = ref() ...@@ -261,7 +282,6 @@ const queryFormRef = ref()
const formData = reactive({ const formData = reactive({
rechargeId: undefined as number | undefined, rechargeId: undefined as number | undefined,
userMobile: '',
amount: '', amount: '',
redemptionCode: '' redemptionCode: ''
}) })
...@@ -271,15 +291,28 @@ const formRules = { ...@@ -271,15 +291,28 @@ const formRules = {
} }
/** 格式化日期时间 */ /** 格式化日期时间 */
const formatDate = (date: string) => { const formatDate = (date: any) => {
if (!date) return '-' if (!date) return '-'
if (typeof date === 'number') {
// 毫秒时间戳
const d = new Date(date)
const pad = (n: number) => n.toString().padStart(2, '0')
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`
}
if (typeof date === 'string') {
return date.substring(0, 19) return date.substring(0, 19)
}
if (date instanceof Date) {
return date.toLocaleString()
}
return String(date)
} }
/** Tab 切换 */ /** Tab 切换 */
const handleTabChange = (tab: string) => { const handleTabChange = (tab: string) => {
if (tab === 'pending') { if (tab === 'pending') {
getPendingList() getPendingList()
getPendingCount()
} else { } else {
getList() getList()
} }
...@@ -309,6 +342,17 @@ const getPendingList = async () => { ...@@ -309,6 +342,17 @@ const getPendingList = async () => {
} }
} }
/** 获取待充值数量 */
const getPendingCount = async () => {
try {
const res = await MemberRechargeApi.getPendingCount()
pendingCount.value = res || 0
console.log('pendingCount.value', pendingCount.value, 'res.data', res)
} catch {
pendingCount.value = 0
}
}
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
queryParams.pageNo = 1 queryParams.pageNo = 1
...@@ -323,9 +367,12 @@ const resetQuery = () => { ...@@ -323,9 +367,12 @@ const resetQuery = () => {
/** 打开人工充值弹窗 */ /** 打开人工充值弹窗 */
const openManualDialog = (row: MemberRechargeRespVO) => { const openManualDialog = (row: MemberRechargeRespVO) => {
if (!row.id) {
ElMessage.error('充值记录ID无效')
return
}
formData.rechargeId = row.id formData.rechargeId = row.id
formData.userMobile = row.userMobile || '' formData.amount = row.amount ? `${row.amount}` : ''
formData.amount = row.amount ? ${row.amount}` : ''
formData.redemptionCode = '' formData.redemptionCode = ''
dialogVisible.value = true dialogVisible.value = true
} }
...@@ -342,6 +389,7 @@ const handleManualRecharge = async () => { ...@@ -342,6 +389,7 @@ const handleManualRecharge = async () => {
}) })
dialogVisible.value = false dialogVisible.value = false
getPendingList() getPendingList()
getPendingCount()
ElMessage.success('人工充值处理成功') ElMessage.success('人工充值处理成功')
} finally { } finally {
submitLoading.value = false submitLoading.value = false
...@@ -351,5 +399,6 @@ const handleManualRecharge = async () => { ...@@ -351,5 +399,6 @@ const handleManualRecharge = async () => {
/** 初始化 */ /** 初始化 */
onMounted(() => { onMounted(() => {
getList() getList()
getPendingCount()
}) })
</script> </script>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment