Files
shaguabijia-admin-web/src/components/UserRiskModal.tsx
T
linkeyu 89dafd4886 完善邀请提现、其他提现与用户管理页面 (#75)
## 改动内容
- 新增邀请提现审核页,并与其他提现共用审核组件
- 完善筛选、状态统计、详情、邀请用户信息、风险提示和时间线
- 按订单状态展示微信转账单号和真实失败原因
- 支持高风险标记、取消标记和备注维护
- 优化用户管理及提现列表的列宽、固定操作列和横向滚动
- 移除提现实名、账本校验和人工处理超时订单入口

## 验证
- npm run build:通过
- npx tsc --noEmit:通过

## 说明
- 本地设计记录与 mock 数据未提交

---------

Co-authored-by: guke <guke@wonderable.ai>
Co-authored-by: linkeyu <798648091@qq.com>
Reviewed-on: #75
Co-authored-by: linkeyu <linkeyu@wonderable.ai>
Co-committed-by: linkeyu <linkeyu@wonderable.ai>
2026-07-27 14:57:48 +08:00

82 lines
1.8 KiB
TypeScript

'use client';
import { useEffect, useState } from 'react';
import { App, Input, Modal } from 'antd';
import { api, errMsg } from '@/lib/api';
export type RiskUser = {
id: number;
phone: string;
is_high_risk: boolean;
high_risk_note: string | null;
};
type Props = {
user: RiskUser | null;
open: boolean;
onClose: () => void;
onDone: () => void | Promise<void>;
};
export function UserRiskModal({ user, open, onClose, onDone }: Props) {
const { message } = App.useApp();
const [note, setNote] = useState('');
const [saving, setSaving] = useState(false);
useEffect(() => {
if (open) setNote(user?.high_risk_note ?? '');
}, [open, user]);
const save = async () => {
if (!user) return;
const trimmed = note.trim();
if (!trimmed) {
message.warning('请输入标记为高风险的原因');
return;
}
setSaving(true);
try {
await api.post(`/admin/api/users/${user.id}/risk`, {
is_high_risk: true,
note: trimmed,
});
message.success(user.is_high_risk ? '高风险备注已更新' : '已标记为高风险');
await onDone();
onClose();
} catch (error) {
message.error(errMsg(error));
} finally {
setSaving(false);
}
};
return (
<Modal
title="高风险备注"
open={open}
okText="保存"
confirmLoading={saving}
onOk={save}
onCancel={onClose}
destroyOnHidden
>
<Input.TextArea
autoFocus
rows={5}
maxLength={500}
showCount
value={note}
placeholder="请输入标记为高风险的原因"
onChange={(event) => setNote(event.target.value)}
/>
</Modal>
);
}
export async function clearUserRisk(userId: number) {
await api.post(`/admin/api/users/${userId}/risk`, {
is_high_risk: false,
note: null,
});
}