feat: 佣金提现和备注功能
This commit is contained in:
parent
8241e95508
commit
5db1e8b15a
@ -15,7 +15,7 @@ unset APP_NAME # 显式销毁变量
|
||||
1. 执行 `./scripts/publish-dev.sh` 构建产物在 out-dev文件夹
|
||||
2. 上传out/zip.gz到服务器
|
||||
3. tar -xzvf ppanel-user-web-dev.tar.gz 解压
|
||||
4. tar -xzvf ppanel-user-web-dev.tar.gz
|
||||
4. tar -xzvf ppanel-admin-web-dev.tar.gz
|
||||
|
||||
```shell
|
||||
# 第一次启动
|
||||
|
||||
@ -20,16 +20,23 @@ import { ConfirmButton } from '@workspace/ui/custom-components/confirm-button';
|
||||
import { formatDate } from '@workspace/ui/utils';
|
||||
import { useTranslations } from 'next-intl';
|
||||
import Link from 'next/link';
|
||||
import { useRef, useState } from 'react';
|
||||
import React, { useRef, useState } from 'react';
|
||||
import { toast } from 'sonner';
|
||||
import { UserDetail } from './user-detail';
|
||||
import UserForm from './user-form';
|
||||
|
||||
// 新的子组件,现在管理它自己的备注状态
|
||||
const RemarkForm = ({ onSave, initialRemark, CloseComponent }) => {
|
||||
const [remark, setRemark] = useState(initialRemark);
|
||||
// 为 RemarkForm 组件定义 props 类型
|
||||
interface RemarkFormProps {
|
||||
initialRemark?: string | null;
|
||||
onSave: (remark: string) => void;
|
||||
CloseComponent: React.ComponentType<{ asChild?: boolean; children: React.ReactNode }>;
|
||||
}
|
||||
|
||||
const handleInputChange = (event) => {
|
||||
// 新的子组件,在管理它自己的备注状态
|
||||
const RemarkForm: React.FC<RemarkFormProps> = ({ onSave, initialRemark, CloseComponent }) => {
|
||||
const [remark, setRemark] = useState<string>(initialRemark ?? '');
|
||||
|
||||
const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {
|
||||
setRemark(event.target.value);
|
||||
};
|
||||
|
||||
|
||||
@ -64,32 +64,13 @@ export default function Page() {
|
||||
header: t('user'),
|
||||
cell: ({ row }) => <UserDetail id={row.original.user_id} />,
|
||||
},
|
||||
{
|
||||
accessorKey: 'status',
|
||||
header: t('status.0'),
|
||||
cell: ({ row }) => (
|
||||
<span
|
||||
className={cn(
|
||||
'flex items-center gap-2 before:block before:size-1.5 before:animate-pulse before:rounded-full before:ring-2 before:ring-opacity-50',
|
||||
{
|
||||
'before:bg-rose-500 before:ring-rose-500': row.original.status === 1,
|
||||
'before:bg-yellow-500 before:ring-yellow-500': row.original.status === 2,
|
||||
'before:bg-green-500 before:ring-green-500': row.original.status === 3,
|
||||
'before:bg-zinc-500 before:ring-zinc-500': row.original.status === 4,
|
||||
},
|
||||
)}
|
||||
>
|
||||
{t(`status.${row.original.status}`)}
|
||||
</span>
|
||||
),
|
||||
},
|
||||
{
|
||||
accessorKey: 'updated_at',
|
||||
header: t('updatedAt'),
|
||||
cell: ({ row }) => formatDate(row.getValue('updated_at')),
|
||||
},
|
||||
]}
|
||||
params={[
|
||||
/* params={[
|
||||
{
|
||||
key: 'status',
|
||||
placeholder: t('status.0'),
|
||||
@ -100,11 +81,12 @@ export default function Page() {
|
||||
},
|
||||
],
|
||||
},
|
||||
]}
|
||||
]}*/
|
||||
request={async (pagination, filters) => {
|
||||
const { data } = await getTicketList({
|
||||
...pagination,
|
||||
...filters,
|
||||
issue_type: 1,
|
||||
});
|
||||
return {
|
||||
list: data.data?.list || [],
|
||||
@ -166,11 +148,11 @@ export default function Page() {
|
||||
<div className={cn('bg-accent w-fit rounded-lg p-2 font-medium', {})}>
|
||||
<div> 提现金额:{ticket?.title?.split('-')[1]}</div>
|
||||
<div> 提现方式:{ticket?.description?.split('-')[0]}</div>
|
||||
{ticket?.description?.split('-')[1].includes('data:image') ? (
|
||||
{ticket?.description?.split('-')[1]?.includes('data:image') ? (
|
||||
<div>
|
||||
<div>收款码:</div>
|
||||
<NextImage
|
||||
src={ticket?.description?.split('-')[1]}
|
||||
src={ticket?.description?.split('-')[1]!}
|
||||
width={300}
|
||||
height={300}
|
||||
className='!size-auto object-cover'
|
||||
|
||||
1
apps/admin/services/admin/typings.d.ts
vendored
1
apps/admin/services/admin/typings.d.ts
vendored
@ -864,6 +864,7 @@ declare namespace API {
|
||||
user_id?: number;
|
||||
status?: number;
|
||||
search?: string;
|
||||
issue_type?: number;
|
||||
};
|
||||
|
||||
type GetTicketListRequest = {
|
||||
|
||||
@ -151,7 +151,7 @@ const WalletDialog: WalletDialogProps = (props) => {
|
||||
size: 1,
|
||||
issue_type: 1,
|
||||
});
|
||||
if (ticketData?.list?.length > 1) {
|
||||
if (ticketData?.list?.length > 0) {
|
||||
toast.info('已经存在待处理提现,请耐心等待');
|
||||
return;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user