实现打印界面跳转自动搜索工号
This commit is contained in:
@ -154,8 +154,22 @@ function QueryConditionBox(props) {
|
|||||||
</Row>
|
</Row>
|
||||||
<Flex justify={"space-between"} align={"center"}>
|
<Flex justify={"space-between"} align={"center"}>
|
||||||
<Flex justify={"start"} align={"center"}>
|
<Flex justify={"start"} align={"center"}>
|
||||||
<Button icon={<PlusOutlined/>}
|
{/*修改生成新证明按钮的点击事件*/}
|
||||||
onClick={() => navigate('/generate-certificate')}>生成新证明</Button>
|
<Button
|
||||||
|
icon={<PlusOutlined />}
|
||||||
|
onClick={() => {
|
||||||
|
const selectedStaffNumbers = form.getFieldValue('staffNumber') || [];
|
||||||
|
const baseUrl = '/generate-certificate';
|
||||||
|
// 携带工号和来源标记(用于区分跳转场景)
|
||||||
|
if (selectedStaffNumbers.length > 0) {
|
||||||
|
navigate(`${baseUrl}?staffNumber=${selectedStaffNumbers[0]}&from=print`);
|
||||||
|
} else {
|
||||||
|
navigate(baseUrl);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
生成新证明
|
||||||
|
</Button>
|
||||||
</Flex>
|
</Flex>
|
||||||
<Flex justify={"center"} align={"center"} gap={"large"}>
|
<Flex justify={"center"} align={"center"} gap={"large"}>
|
||||||
<Button type={"primary"} htmlType={"submit"} icon={<SearchOutlined/>}>搜索</Button>
|
<Button type={"primary"} htmlType={"submit"} icon={<SearchOutlined/>}>搜索</Button>
|
||||||
|
|||||||
@ -1,24 +1,25 @@
|
|||||||
import React, {useEffect} from 'react';
|
import React, { useEffect, useState, useRef } from 'react';
|
||||||
import { Button, Flex, Form, Input, message, Spin, Table, Typography } from "antd";
|
import { Button, Flex, Form, Input, message, Spin, Table, Typography } from "antd";
|
||||||
import creatMessageCommonAxios from "../../../http/CreatMessageCommonAxios";
|
import creatMessageCommonAxios from "../../../http/CreatMessageCommonAxios";
|
||||||
|
import { useSearchParams } from 'react-router-dom';
|
||||||
|
|
||||||
const ChooseUser = props => {
|
const ChooseUser = props => {
|
||||||
|
|
||||||
const { allowNext, request, setRequest } = props;
|
const { allowNext, request, setRequest } = props;
|
||||||
|
const [searchParams] = useSearchParams(); // 获取URL参数
|
||||||
|
const [autoProcessed, setAutoProcessed] = useState(false); // 防止重复处理
|
||||||
const { Title, Text } = Typography;
|
const { Title, Text } = Typography;
|
||||||
const [messageApi, contextHolder] = message.useMessage();
|
const [messageApi, contextHolder] = message.useMessage();
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
|
const dataFetchRef = useRef(false); // 防止重复请求
|
||||||
const commonAxios = creatMessageCommonAxios(messageApi);
|
const commonAxios = creatMessageCommonAxios(messageApi);
|
||||||
|
// 初始加载标记
|
||||||
|
const [isInitialLoad, setIsInitialLoad] = useState(true);
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
title: 'ID',
|
title: 'ID',
|
||||||
dataIndex: 'id',
|
dataIndex: 'id',
|
||||||
key: 'id',
|
key: 'id',
|
||||||
hidden: true,
|
hidden: true,
|
||||||
width: 0,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '工号',
|
title: '工号',
|
||||||
@ -41,87 +42,105 @@ const ChooseUser = props => {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const [staffInfo, setStaffInfo] = React.useState([]);
|
const [staffInfo, setStaffInfo] = useState([]);
|
||||||
|
const [staffNumberPrefix, setStaffNumberPrefix] = useState("");
|
||||||
|
const [spinning, setSpinning] = useState(true);
|
||||||
|
|
||||||
const [staffNumberPrefix, setStaffNumberPrefix] = React.useState("");
|
// 处理选中行逻辑
|
||||||
const [spinning, setSpinning] = React.useState(true);
|
const handleRowSelect = (selectedRowKeys, selectedRows) => {
|
||||||
|
console.log(`选中行: ${selectedRowKeys}`, selectedRows);
|
||||||
|
allowNext(selectedRows.length > 0);
|
||||||
|
if (selectedRows.length > 0) {
|
||||||
|
setRequest({ ...request, stuffNumber: selectedRows[0].staffNumber });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const rowSelection = {
|
const rowSelection = {
|
||||||
onChange: (selectedRowKeys, selectedRows) => {
|
onChange: handleRowSelect,
|
||||||
console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
|
|
||||||
allowNext(selectedRows.length > 0);
|
|
||||||
setRequest({...request, stuffNumber: selectedRows[0].staffNumber});
|
|
||||||
//sessionStorage.setItem('chooseUser', selectedRowKeys)
|
|
||||||
//sessionStorage.removeItem('certificateParam');
|
|
||||||
//sessionStorage.removeItem('targetKeys');
|
|
||||||
//sessionStorage.removeItem('generate-request');
|
|
||||||
},
|
|
||||||
//defaultSelectedRowKeys: () => {
|
|
||||||
// const selectedRowKeys = [];
|
|
||||||
// let selected = sessionStorage.getItem('chooseUser');
|
|
||||||
// if (selected) {
|
|
||||||
// // 转换为number
|
|
||||||
// selectedRowKeys.push(selected);
|
|
||||||
// allowNext(selectedRowKeys.length > 0);
|
|
||||||
// }
|
|
||||||
// return selectedRowKeys;
|
|
||||||
//}
|
|
||||||
// 移除默认选中行的缓存恢复
|
|
||||||
defaultSelectedRowKeys: () => [],
|
defaultSelectedRowKeys: () => [],
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
// 通用搜索函数
|
||||||
commonAxios.get(`/api/auth/query/registered?page=1&size=10`).then((response) => {
|
const fetchStaffData = (staffNumber) => {
|
||||||
if (response.data.data != null) {
|
if (dataFetchRef.current) return;
|
||||||
let list = response.data.data.list;
|
dataFetchRef.current = true;
|
||||||
// 为list设置key=id
|
|
||||||
list.forEach((item) => {
|
|
||||||
item.key = item.id;
|
|
||||||
});
|
|
||||||
setStaffInfo(list);
|
|
||||||
} else {
|
|
||||||
setStaffInfo([]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
setSpinning(false);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const onSearch = () => {
|
|
||||||
setSpinning(true);
|
setSpinning(true);
|
||||||
commonAxios.get(`/api/auth/query/registered?staffNumber=${staffNumberPrefix}&page=1&size=10`).then((response) => {
|
// 仅在有工号时才拼接参数,否则查询全部
|
||||||
if (response.data.data != null) {
|
const params = staffNumber ? `&staffNumber=${staffNumber}` : '';
|
||||||
let list = response.data.data.list;
|
commonAxios.get(`/api/auth/query/registered?page=1&size=10${params}`)
|
||||||
// 为list设置key=id
|
.then((response) => {
|
||||||
list.forEach((item) => {
|
if (response.data.data?.list) {
|
||||||
item.key = item.id;
|
const list = response.data.data.list.map(item => ({ ...item, key: item.id }));
|
||||||
});
|
|
||||||
setStaffInfo(list);
|
setStaffInfo(list);
|
||||||
|
return list;
|
||||||
} else {
|
} else {
|
||||||
setStaffInfo([]);
|
setStaffInfo([]);
|
||||||
|
return [];
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
.then((list) => {
|
||||||
|
const fromPrint = searchParams.get('from') === 'print';
|
||||||
|
if (fromPrint && list.length === 1 && !autoProcessed) {
|
||||||
|
handleRowSelect([list[0].id], [list[0]]);
|
||||||
|
setAutoProcessed(true);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
messageApi.error('搜索失败,请重试');
|
||||||
|
setStaffInfo([]);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
setSpinning(false);
|
setSpinning(false);
|
||||||
|
dataFetchRef.current = false;
|
||||||
});
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 监听URL参数(从打印界面跳转时处理)
|
||||||
|
useEffect(() => {
|
||||||
|
const staffNumber = searchParams.get('staffNumber');
|
||||||
|
const fromPrint = searchParams.get('from') === 'print'; // 标记来自打印界面
|
||||||
|
|
||||||
|
// 优先处理:如果有工号参数且来自打印界面,执行搜索
|
||||||
|
if (staffNumber && fromPrint && !autoProcessed) {
|
||||||
|
form.setFieldsValue({ 'staff-number': staffNumber });
|
||||||
|
setStaffNumberPrefix(staffNumber);
|
||||||
|
fetchStaffData(staffNumber);
|
||||||
|
setIsInitialLoad(false); // 已处理参数,无需再加载全部
|
||||||
}
|
}
|
||||||
|
// 次要处理:无参数时,初始加载全部数据(仅执行一次)
|
||||||
|
else if (isInitialLoad) {
|
||||||
|
fetchStaffData(''); // 空参数表示查询全部
|
||||||
|
setIsInitialLoad(false);
|
||||||
|
}
|
||||||
|
}, [searchParams, form, autoProcessed, isInitialLoad]); // 添加isInitialLoad依赖
|
||||||
|
|
||||||
|
// 手动搜索
|
||||||
|
const onSearch = () => {
|
||||||
|
fetchStaffData(staffNumberPrefix);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{contextHolder}
|
{contextHolder}
|
||||||
<Flex vertical justiffy={"start"} align={"start"} gap={"large"}>
|
<Flex vertical justify={"start"} align={"start"} gap={"large"}>
|
||||||
<div>
|
<div>
|
||||||
<Title level={4}>选择用户</Title>
|
<Title level={4}>选择用户</Title>
|
||||||
<Text level={4}
|
<Text type={'secondary'}>
|
||||||
type={'secondary'}>指示EFC系统为何人生成报告,选择后这份报告将会出现在您和该同事的EFC系统证明管理画面中。</Text>
|
指示EFC系统为何人生成报告,选择后这份报告将会出现在您和该同事的EFC系统证明管理画面中。
|
||||||
|
</Text>
|
||||||
</div>
|
</div>
|
||||||
<Form
|
<Form form={form} layout={"inline"}>
|
||||||
form={form}
|
<Form.Item name='staff-number'>
|
||||||
layout={"inline"}
|
<Input
|
||||||
>
|
placeholder={"工号"}
|
||||||
<Form.Item
|
onChange={(e) => setStaffNumberPrefix(e.target.value)}
|
||||||
name='staff-number'
|
onPressEnter={onSearch} // 支持回车搜索
|
||||||
>
|
/>
|
||||||
<Input placeholder={"工号"} onChange={(event) => setStaffNumberPrefix(event.target.value)}/>
|
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Button type={"primary"} onClick={() => onSearch()}>搜索</Button>
|
<Button type={"primary"} onClick={onSearch}>搜索</Button>
|
||||||
</Form>
|
</Form>
|
||||||
<div style={{ width: '100%' }}>
|
<div style={{ width: '100%' }}>
|
||||||
<Spin spinning={spinning}>
|
<Spin spinning={spinning}>
|
||||||
@ -129,19 +148,15 @@ const ChooseUser = props => {
|
|||||||
columns={columns}
|
columns={columns}
|
||||||
dataSource={staffInfo}
|
dataSource={staffInfo}
|
||||||
pagination={false}
|
pagination={false}
|
||||||
rowSelection={{
|
rowSelection={{ type: 'radio', ...rowSelection }}
|
||||||
type: 'radio',
|
locale={{ emptyText: '暂无数据,请输入工号搜索' }}
|
||||||
...rowSelection,
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</Spin>
|
</Spin>
|
||||||
</div>
|
</div>
|
||||||
</Flex>
|
</Flex>
|
||||||
</div>
|
</div>
|
||||||
)
|
);
|
||||||
;
|
};
|
||||||
}
|
|
||||||
;
|
|
||||||
|
|
||||||
ChooseUser.propTypes = {};
|
ChooseUser.propTypes = {};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user