This commit is contained in:
2026-07-06 17:07:58 +08:00
parent c3ad806e10
commit 3768220a78
3 changed files with 74 additions and 71 deletions
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -28,7 +28,7 @@
}
})();
</script>
<script type="module" crossorigin src="/assets/index-CGWGqFue.js"></script>
<script type="module" crossorigin src="/assets/index-CBCYIy6s.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-D9_3MPsN.css">
</head>
<body>
+72 -69
View File
@@ -349,20 +349,31 @@ const TeamManagementPage: React.FC = () => {
];
/* ── Tab 配置 ────────────────────────────────────────── */
const tableWrapper: React.CSSProperties = { borderRadius: 16, background: '#fff', border: '1px solid #f0f0f5', overflow: 'hidden' };
const paginationStyle: React.CSSProperties = { padding: '16px', textAlign: 'right' };
const tabItems = [
{
key: 'members',
label: <Space><UserOutlined />{membersTotal > 0 && <span style={{ color: '#94a3b8', fontSize: 12 }}>({membersTotal})</span>}</Space>,
children: (
<Table
columns={memberColumns}
dataSource={members}
rowKey="id"
loading={membersLoading}
pagination={false}
scroll={{ x: 800 }}
locale={{ emptyText: <Empty description="暂无成员" /> }}
/>
<div style={tableWrapper}>
<Table
columns={memberColumns}
dataSource={members}
rowKey="id"
loading={membersLoading}
pagination={false}
bordered={false}
scroll={{ x: 800 }}
locale={{ emptyText: <Empty description="暂无成员" /> }}
/>
{membersTotal > 0 && (
<div style={paginationStyle}>
<Pagination current={membersPage} pageSize={20} total={membersTotal} onChange={(p) => setMembersPage(p)} size="small" />
</div>
)}
</div>
),
},
{
@@ -413,15 +424,23 @@ const TeamManagementPage: React.FC = () => {
<span><strong style={{ color: '#ef4444', fontSize: 15 }}>-{creditSummary?.total_consume ?? 0}</strong></span>
</div>
<Table
rowKey="id"
loading={creditLoading}
dataSource={creditRecords}
pagination={false}
scroll={{ x: 950 }}
columns={creditColumns}
locale={{ emptyText: <Empty description="暂无积分记录" /> }}
/>
<div style={tableWrapper}>
<Table
rowKey="id"
loading={creditLoading}
dataSource={creditRecords}
pagination={false}
bordered={false}
scroll={{ x: 950 }}
columns={creditColumns}
locale={{ emptyText: <Empty description="暂无积分记录" /> }}
/>
{creditTotal > 0 && (
<div style={paginationStyle}>
<Pagination current={creditPage} pageSize={10} total={creditTotal} onChange={(p) => setCreditPage(p)} size="small" showTotal={(t) => `${t}`} />
</div>
)}
</div>
</div>
),
},
@@ -429,8 +448,8 @@ const TeamManagementPage: React.FC = () => {
key: 'invitations',
label: <Space><CopyOutlined /></Space>,
children: (
<div>
<div style={{ marginBottom: 12 }}>
<div style={tableWrapper}>
<div style={{ padding: 16, paddingBottom: 0 }}>
<Button type="primary" icon={<PlusOutlined />} onClick={() => setInvModal(true)}></Button>
</div>
<Table
@@ -439,6 +458,7 @@ const TeamManagementPage: React.FC = () => {
rowKey="id"
loading={invLoading}
pagination={false}
bordered={false}
scroll={{ x: 900 }}
locale={{ emptyText: <Empty description="暂无邀请码" /> }}
/>
@@ -449,15 +469,18 @@ const TeamManagementPage: React.FC = () => {
key: 'requests',
label: <Space><HistoryOutlined />{requests.length > 0 && <Tag color="red">{requests.length}</Tag>}</Space>,
children: (
<Table
columns={reqColumns}
dataSource={requests}
rowKey="id"
loading={reqLoading}
pagination={false}
scroll={{ x: 600 }}
locale={{ emptyText: <Empty description="暂无待审批申请" /> }}
/>
<div style={tableWrapper}>
<Table
columns={reqColumns}
dataSource={requests}
rowKey="id"
loading={reqLoading}
pagination={false}
bordered={false}
scroll={{ x: 600 }}
locale={{ emptyText: <Empty description="暂无待审批申请" /> }}
/>
</div>
),
},
];
@@ -485,34 +508,6 @@ const TeamManagementPage: React.FC = () => {
{/* 标签页 */}
<Tabs items={tabItems} defaultActiveKey="members" size="large" />
{/* 成员列表分页(左下角) */}
{membersTotal > 0 && (
<div style={{ marginTop: 16, display: 'flex', justifyContent: 'flex-start' }}>
<Pagination
current={membersPage}
pageSize={20}
total={membersTotal}
onChange={(p) => setMembersPage(p)}
showTotal={(t) => `${t}`}
size="small"
/>
</div>
)}
{/* 积分记录分页(左下角) */}
{creditTotal > 0 && (
<div style={{ marginTop: 16, display: 'flex', justifyContent: 'flex-start' }}>
<Pagination
current={creditPage}
pageSize={10}
total={creditTotal}
onChange={(p) => setCreditPage(p)}
showTotal={(t) => `${t}`}
size="small"
/>
</div>
)}
{/* 调整积分弹窗 */}
<Modal
title={<Space><UserOutlined /> - {creditModal.member?.username}</Space>}
@@ -544,8 +539,12 @@ const TeamManagementPage: React.FC = () => {
name="amount"
label="积分数量"
required
validateStatus={(!creditForm.getFieldValue('amount') || creditForm.getFieldValue('amount') <= 0) ? 'error' : ''}
help={(!creditForm.getFieldValue('amount') || creditForm.getFieldValue('amount') <= 0) ? '请输入大于 0 的正数' : (creditForm.getFieldValue('amount') > 9999999 ? '单次不能超过 9999999' : '')}
rules={[
{ required: true, message: '请输入积分数量' },
{ type: 'number', min: 0.01, message: '必须大于 0' },
{ type: 'number', max: 9999999, message: '单次不能超过 9999999' },
]}
validateTrigger={['onChange', 'onBlur']}
>
<InputNumber
style={{ width: '100%' }}
@@ -555,25 +554,29 @@ const TeamManagementPage: React.FC = () => {
precision={2}
placeholder="请输入正数积分数量"
size="large"
onChange={(val) => {
// 强制清除非法值(负数、零、空)
if (val === null || val === undefined || val <= 0) {
creditForm.setFieldsValue({ amount: undefined });
}
}}
formatter={(value) => {
if (!value) return '';
// 只允许数字和小数点,且必须 > 0
let str = `${value}`.replace(/[^0-9.]/g, '');
// 移除前导零(保留小数)
str = str.replace(/^0+(?=\d)/, '');
return str;
}}
parser={(str) => {
const num = parseFloat(str);
if (isNaN(num) || num <= 0) return 0 as any;
if (!str || str === '.') return '' as any;
let num = parseFloat(str);
if (isNaN(num) || num <= 0) return '' as any;
return Math.min(num, 9999999) as any;
}}
onKeyDown={(e) => {
// 禁止输入负号、e、E
if (e.key === '-' || e.key === 'e' || e.key === 'E') {
e.preventDefault();
}
}}
onChange={(val) => {
if (val === null || val === undefined) {
creditForm.validateFields(['amount']);
}
}}
/>
</Form.Item>
<Form.Item name="description" label="备注">