后台用户管理新增“人工实名
This commit is contained in:
@@ -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="撤销实名认证"
|
||||
|
||||
Reference in New Issue
Block a user