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

@@ -1,7 +1,10 @@
import { useEffect, useState } from 'react';
import { Card, Table, Input, Button, Space, message, Modal, Tag, Form, Select, InputNumber, Pagination } from 'antd';
import { Card, Table, Input, Button, Space, message, Modal, Tag, Form, Select, InputNumber, Pagination, ColorPicker } from 'antd';
import { UserOutlined, PlusOutlined, StopOutlined, EditOutlined, QrcodeOutlined, DeleteOutlined } from '@ant-design/icons';
import { employeeSerialApi } from '@/services/api';
import QRCode from 'qrcode';
import { useNavigate } from 'react-router-dom';
import type { Color } from 'antd/es/color-picker';
import type { EmployeeSerial } from '@/types';
function EmployeeSerialsPage() {
@@ -20,6 +23,20 @@ function EmployeeSerialsPage() {
const [qrCodeDataUrl, setQrCodeDataUrl] = useState('');
const [generateForm] = Form.useForm();
const [editForm] = Form.useForm();
const [qrColor, setQrColor] = useState('#000000');
const [generatedData, setGeneratedData] = useState<any>(null);
const [generateSuccessModalVisible, setGenerateSuccessModalVisible] = useState(false);
const navigate = useNavigate();
const colorPresets = [
'#000000',
'#165DFF',
'#52C41A',
'#FAAD14',
'#FF4D4F',
'#722ED1',
'#EB2F96',
];
useEffect(() => {
loadSerials();
@@ -48,6 +65,21 @@ function EmployeeSerialsPage() {
setGenerateLoading(true);
try {
const result = await employeeSerialApi.generate(values);
if (result.serials && result.serials.length > 0) {
const baseUrl = window.location.origin;
const queryUrl = `${baseUrl}/query?serial=${result.serials[0].serialNumber}`;
const qrCode = await QRCode.toDataURL(queryUrl, {
color: {
dark: qrColor,
light: '#ffffff',
},
});
setQrCodeDataUrl(qrCode);
setGeneratedData(result);
setGenerateSuccessModalVisible(true);
}
message.success(result.message || '生成成功');
setGenerateModalVisible(false);
generateForm.resetFields();
@@ -59,6 +91,21 @@ function EmployeeSerialsPage() {
}
};
const handleDownloadQR = () => {
const link = document.createElement('a');
link.download = `qrcode-${generatedData?.serials?.[0]?.serialNumber}.png`;
link.href = qrCodeDataUrl;
link.click();
};
const handleViewQuery = () => {
if (generatedData?.serials?.[0]?.serialNumber) {
navigate(`/query?serial=${generatedData.serials[0].serialNumber}`);
setGenerateSuccessModalVisible(false);
generateForm.resetFields();
}
};
const handleEdit = (serial: EmployeeSerial) => {
setSelectedSerial(serial);
editForm.setFieldsValue({
@@ -324,6 +371,38 @@ function EmployeeSerialsPage() {
>
<InputNumber min={1} max={1000} style={{ width: '100%' }} />
</Form.Item>
<Form.Item
label="二维码颜色"
name="qrColor"
initialValue="#000000"
>
<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>
<Space style={{ width: '100%', justifyContent: 'flex-end' }}>
<Button onClick={() => setGenerateModalVisible(false)}></Button>
@@ -388,6 +467,45 @@ function EmployeeSerialsPage() {
</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.serials?.[0]?.companyName}</p>
<p><strong>:</strong> {generatedData.serials?.[0]?.department}</p>
<p><strong>:</strong> {generatedData.serials?.[0]?.employeeName}</p>
<p><strong>:</strong> {generatedData.serials?.length || 0}</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>
<Modal
title="员工二维码"
open={qrCodeModalVisible}