lin
This commit is contained in:
parent
e186c77f61
commit
e290a9d51c
|
@ -10,6 +10,8 @@ import type { CascaderProps } from 'antd/es/cascader';
|
||||||
import { utils, writeFile } from 'xlsx';
|
import { utils, writeFile } from 'xlsx';
|
||||||
import { Modal, Input, Button } from 'antd';
|
import { Modal, Input, Button } from 'antd';
|
||||||
import { api } from '@nice/client';
|
import { api } from '@nice/client';
|
||||||
|
import { StaffDto } from 'packages/common/dist';
|
||||||
|
import DepartmentSelect from '@web/src/components/models/department/department-select';
|
||||||
|
|
||||||
// 修改函数类型定义
|
// 修改函数类型定义
|
||||||
|
|
||||||
|
@ -42,18 +44,42 @@ export default function StaffTable() {
|
||||||
const [fileNameVisible, setFileNameVisible] = useState(false);
|
const [fileNameVisible, setFileNameVisible] = useState(false);
|
||||||
const [fileName, setFileName] = useState('');
|
const [fileName, setFileName] = useState('');
|
||||||
const [defaultFileName] = useState(`员工数据_${new Date().toISOString().slice(0, 10)}`);
|
const [defaultFileName] = useState(`员工数据_${new Date().toISOString().slice(0, 10)}`);
|
||||||
|
const [exporting, setExporting] = useState(false);
|
||||||
|
const [selectedDepartment, setSelectedDepartment] = useState('');
|
||||||
|
const [tempExportData, setTempExportData] = useState<any | null>(null);
|
||||||
|
const [exportScope, setExportScope] = useState<'current' | 'department'>('current');
|
||||||
const handleExport = async () => {
|
const handleExport = async () => {
|
||||||
setConfirmVisible(true);
|
setConfirmVisible(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleConfirm = async () => {
|
const handleConfirm = async () => {
|
||||||
setConfirmVisible(false);
|
setConfirmVisible(false);
|
||||||
|
setExporting(true);
|
||||||
|
if (exportScope === 'current') {
|
||||||
|
setExporting(false);
|
||||||
|
try {
|
||||||
|
const allStaffs = await api.staff.findMany.useQuery({
|
||||||
|
where: {
|
||||||
|
deletedAt: null,
|
||||||
|
department: { name: selectedDepartment } // 添加部门过滤条件
|
||||||
|
},
|
||||||
|
include: { department: true }
|
||||||
|
});
|
||||||
|
|
||||||
|
setTempExportData(allStaffs);
|
||||||
|
} finally {
|
||||||
|
setExporting(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
setFileNameVisible(true);
|
setFileNameVisible(true);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 添加导出处理函数
|
// 添加导出处理函数
|
||||||
const handleFileNameConfirm = () => {
|
const handleFileNameConfirm = () => {
|
||||||
setFileNameVisible(false)
|
setFileNameVisible(false)
|
||||||
|
if (!tempExportData) return;
|
||||||
|
|
||||||
if (!gridApi) return;
|
if (!gridApi) return;
|
||||||
|
|
||||||
const finalFileName = fileName || defaultFileName;
|
const finalFileName = fileName || defaultFileName;
|
||||||
|
@ -65,8 +91,13 @@ export default function StaffTable() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const allColDefs = flattenColumns(gridApi.getColumnDefs());
|
const allColDefs = flattenColumns(gridApi.getColumnDefs());
|
||||||
|
let rowData;
|
||||||
const rowData = gridApi.getRenderedNodes().map((node: any) => {
|
if (exportScope === 'current') {
|
||||||
|
rowData = gridApi.getDisplayedRowNodes().map((node: any) => node.data) || [];
|
||||||
|
} else {
|
||||||
|
rowData = tempExportData || [];
|
||||||
|
}
|
||||||
|
rowData.map((node: any) => {
|
||||||
const row: Record<string, any> = {};
|
const row: Record<string, any> = {};
|
||||||
allColDefs.forEach((colDef: any) => {
|
allColDefs.forEach((colDef: any) => {
|
||||||
const field = colDef.field;
|
const field = colDef.field;
|
||||||
|
@ -93,7 +124,7 @@ export default function StaffTable() {
|
||||||
|
|
||||||
// 增强布尔值处理逻辑
|
// 增强布尔值处理逻辑
|
||||||
if (typeof renderedValue === 'boolean' ||
|
if (typeof renderedValue === 'boolean' ||
|
||||||
(typeof renderedValue === 'string' && ['true','false'].includes(renderedValue.toLowerCase()))) {
|
(typeof renderedValue === 'string' && ['true', 'false'].includes(renderedValue.toLowerCase()))) {
|
||||||
const boolValue = typeof renderedValue === 'boolean' ? renderedValue : renderedValue.toLowerCase() === 'true';
|
const boolValue = typeof renderedValue === 'boolean' ? renderedValue : renderedValue.toLowerCase() === 'true';
|
||||||
renderedValue = boolValue ? '是' : '否';
|
renderedValue = boolValue ? '是' : '否';
|
||||||
}
|
}
|
||||||
|
@ -329,7 +360,28 @@ export default function StaffTable() {
|
||||||
okText="确认"
|
okText="确认"
|
||||||
cancelText="取消"
|
cancelText="取消"
|
||||||
>
|
>
|
||||||
<p>确定要导出当前筛选数据吗?</p>
|
<div className="mb-4">
|
||||||
|
<span>导出范围:</span>
|
||||||
|
<select
|
||||||
|
value={exportScope}
|
||||||
|
onChange={(e) => setExportScope(e.target.value as any)}
|
||||||
|
className="ml-2 p-1 border rounded"
|
||||||
|
>
|
||||||
|
<option value="current">当前页数据</option>
|
||||||
|
<option value="department">指定部门全量数据</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{exportScope === 'department' && (
|
||||||
|
<div>
|
||||||
|
<p>部门名称:</p>
|
||||||
|
<DepartmentSelect
|
||||||
|
value={selectedDepartment}
|
||||||
|
// onChange={(value) => setSelectedDepartment(value)}
|
||||||
|
placeholder="请选择部门"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
<Modal
|
<Modal
|
||||||
|
|
Loading…
Reference in New Issue