后台用户管理新增“人工实名

This commit is contained in:
yml2213
2026-06-28 01:06:35 +08:00
parent 21aabd77f1
commit 18eba36ef9
12 changed files with 453 additions and 16 deletions
@@ -69,3 +69,18 @@ export async function revokeAdminUserRealname(id: number, reason: string) {
)
return data.data
}
export async function manualAdminUserRealname(
id: number,
payload: { name: string; idNo: string; reason: string }
) {
const { data } = await apiClient.post<ApiResponse<AdminUserItem>>(
`/admin/users/${id}/manual-realname`,
{
name: payload.name,
id_no: payload.idNo,
reason: payload.reason,
}
)
return data.data
}
@@ -7,6 +7,7 @@ import { reactive, ref } from 'vue'
import {
fetchAdminUsers,
freezeAdminUser,
manualAdminUserRealname,
revokeAdminUserRealname,
setAdminUserDepositFreeQuota,
unfreezeAdminUser,
@@ -23,9 +24,15 @@ const submitting = ref(false)
const activeUser = ref<AdminUserItem | null>(null)
const quotaUser = ref<AdminUserItem | null>(null)
const realnameUser = ref<AdminUserItem | null>(null)
const manualRealnameUser = ref<AdminUserItem | null>(null)
const freezeReason = ref('')
const revokeRealnameReason = ref('')
const quotaAmount = ref(0)
const manualRealnameForm = reactive({
name: '',
idNo: '',
reason: '',
})
const filters = reactive<AdminUserQuery>({
keyword: '',
@@ -114,6 +121,40 @@ function openRevokeRealname(row: AdminUserItem) {
revokeRealnameReason.value = ''
}
function openManualRealname(row: AdminUserItem) {
manualRealnameUser.value = row
manualRealnameForm.name = ''
manualRealnameForm.idNo = ''
manualRealnameForm.reason = ''
}
async function handleManualRealname() {
if (!manualRealnameUser.value) return
if (!manualRealnameForm.name.trim()) {
ElMessage.warning('请输入真实姓名')
return
}
if (!manualRealnameForm.idNo.trim() || manualRealnameForm.idNo.trim().length !== 18) {
ElMessage.warning('请输入18位身份证号')
return
}
submitting.value = true
try {
await manualAdminUserRealname(manualRealnameUser.value.id, {
name: manualRealnameForm.name,
idNo: manualRealnameForm.idNo,
reason: manualRealnameForm.reason,
})
ElMessage.success('已完成人工实名')
manualRealnameUser.value = null
await loadUsers()
} catch (error) {
ElMessage.error(readError(error, '人工实名失败'))
} finally {
submitting.value = false
}
}
async function handleRevokeRealname() {
if (!realnameUser.value) return
submitting.value = true
@@ -206,9 +247,18 @@ function moneyCent(value: number | string | undefined) {
<el-table-column label="注册时间" min-width="180">
<template #default="{ row }">{{ formatDateTime(row.created_at) }}</template>
</el-table-column>
<el-table-column label="操作" width="320">
<el-table-column label="操作" width="400">
<template #default="{ row }">
<el-button size="small" @click="openDepositQuota(row)">免押</el-button>
<el-button
v-if="row.realname_status !== 'verified'"
size="small"
type="success"
:loading="submitting"
@click="openManualRealname(row)"
>
人工实名
</el-button>
<el-button
v-if="row.realname_status !== 'unverified'"
size="small"
@@ -271,6 +321,51 @@ function moneyCent(value: number | string | undefined) {
</template>
</el-dialog>
<el-dialog
:model-value="!!manualRealnameUser"
title="人工实名认证"
width="560px"
@update:model-value="manualRealnameUser = null"
>
<div v-if="manualRealnameUser" class="dialog-body">
<p>
<strong>{{ manualRealnameUser.phone }}</strong> · {{ manualRealnameUser.nickname }}
</p>
<el-alert
type="info"
:closable="false"
title="请确认已通过线下或客服材料核验姓名与身份证号,提交后该用户会直接变为已实名。"
/>
<el-form label-position="top" @submit.prevent>
<el-form-item label="真实姓名">
<el-input v-model="manualRealnameForm.name" clearable placeholder="请输入真实姓名" />
</el-form-item>
<el-form-item label="身份证号">
<el-input
v-model="manualRealnameForm.idNo"
clearable
maxlength="18"
placeholder="请输入18位身份证号"
/>
</el-form-item>
<el-form-item label="处理原因">
<el-input
v-model="manualRealnameForm.reason"
type="textarea"
:rows="3"
placeholder="填写处理原因,便于审计追踪"
/>
</el-form-item>
</el-form>
</div>
<template #footer>
<el-button @click="manualRealnameUser = null">取消</el-button>
<el-button type="success" :loading="submitting" @click="handleManualRealname"
>确认实名</el-button
>
</template>
</el-dialog>
<el-dialog
:model-value="!!realnameUser"
title="撤销实名认证"