Remove Generate.tsx

This commit is contained in:
2026-03-02 13:36:21 +08:00
parent 54d6b31da6
commit 76d5cdf542
8 changed files with 234 additions and 423 deletions

View File

@@ -50,12 +50,19 @@ function ManagePage() {
headers.Authorization = `Bearer ${token}`;
}
let url = `/api/companies?page=${page}&limit=${pageSize}`;
if (searchTerm) {
url += `&search=${encodeURIComponent(searchTerm)}`;
}
let url = '/api/companies';
const params = new URLSearchParams();
if (page > 1) params.append('page', String(page));
if (pageSize !== 10) params.append('limit', String(pageSize));
if (searchTerm) params.append('search', searchTerm);
if (params.toString()) url += `?${params.toString()}`;
const response = await fetch(url, { headers });
if (!response.ok) {
throw new Error(`请求失败: ${response.status}`);
}
const data = await response.json();
if (data.data) {
@@ -276,6 +283,7 @@ function ManagePage() {
}
message.success('生成成功!');
setGenerateSuccessModalVisible(true);
loadCompanies();
} else {
throw new Error(data.error || '生成失败');
@@ -294,6 +302,26 @@ function ManagePage() {
link.click();
};
const handleViewQuery = () => {
if (generatedData?.serials?.[0]?.serialNumber) {
navigate(`/query?serial=${generatedData.serials[0].serialNumber}`);
setGenerateSuccessModalVisible(false);
generateForm.resetFields();
}
};
const [generateSuccessModalVisible, setGenerateSuccessModalVisible] = useState(false);
const colorPresets = [
'#000000',
'#165DFF',
'#52C41A',
'#FAAD14',
'#FF4D4F',
'#722ED1',
'#EB2F96',
];
const handlePageChange = (newPage: number, newPageSize: number) => {
setPage(newPage);
setPageSize(newPageSize);
@@ -560,14 +588,6 @@ function ManagePage() {
}
</Form.Item>
<Form.Item
label="序列号数量"
name="quantity"
rules={[{ required: true, message: '请输入序列号数量' }]}
>
<InputNumber min={1} max={100} style={{ width: '100%' }} />
</Form.Item>
<Form.Item label="有效期设置" name="validOption">
<Radio.Group>
<Radio value="days"></Radio>
@@ -600,18 +620,45 @@ function ManagePage() {
}
</Form.Item>
<Form.Item
label="生成数量"
name="quantity"
rules={[{ required: true, message: '请输入生成数量' }]}
>
<InputNumber min={1} max={100} style={{ width: '100%' }} />
</Form.Item>
<Form.Item
label="二维码颜色"
name="qrColor"
initialValue="#000000"
>
<ColorPicker
value={qrColor}
onChange={(color: Color) => {
const hexColor = color.toHexString();
setQrColor(hexColor);
}}
/>
<div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px' }}>
{colorPresets.map((color) => (
<div
key={color}
onClick={() => setQrColor(color)}
style={{
width: '28px',
height: '28px',
backgroundColor: color,
border: qrColor === color ? '2px solid #165DFF' : '2px solid #d9d9d9',
borderRadius: '4px',
cursor: 'pointer',
transition: 'all 0.2s',
}}
/>
))}
</div>
<ColorPicker
value={qrColor}
onChange={(color: Color) => {
const hexColor = color.toHexString();
setQrColor(hexColor);
}}
/>
</div>
</Form.Item>
<Form.Item>
@@ -624,6 +671,46 @@ function ManagePage() {
</Form.Item>
</Form>
</Modal>
<Modal
title="生成成功"
open={generateSuccessModalVisible}
onCancel={() => setGenerateSuccessModalVisible(false)}
footer={null}
width={600}
>
{generatedData && (
<div>
<Space direction="vertical" style={{ width: '100%' }} size="middle">
<div>
<p><strong>:</strong> {generatedData.companyName || generatedData.serials?.[0]?.companyName}</p>
<p><strong>:</strong> {generatedData.serials?.length || 0}</p>
{generatedData.serials && generatedData.serials.length > 0 && (
<p><strong>:</strong> {new Date(generatedData.serials[0].validUntil).toLocaleString('zh-CN')}</p>
)}
</div>
{qrCodeDataUrl && (
<div style={{ textAlign: 'center' }}>
<img src={qrCodeDataUrl} alt="QR Code" style={{ width: '200px', height: '200px' }} />
{generatedData.serials && generatedData.serials.length > 0 && (
<p style={{ marginTop: '12px', fontFamily: 'monospace', fontSize: '16px', fontWeight: 'bold', color: '#165DFF' }}>{generatedData.serials[0].serialNumber}</p>
)}
</div>
)}
<Space>
<Button type="primary" onClick={handleViewQuery}></Button>
<Button onClick={handleDownloadQR}></Button>
<Button onClick={() => {
setGenerateSuccessModalVisible(false);
generateForm.resetFields();
}}></Button>
</Space>
</Space>
</div>
)}
</Modal>
</div>
);
}