diff --git a/src/page/Dashboard/DataPrint/QueryConditionBox/index.jsx b/src/page/Dashboard/DataPrint/QueryConditionBox/index.jsx index 069d3eb..77cdc60 100644 --- a/src/page/Dashboard/DataPrint/QueryConditionBox/index.jsx +++ b/src/page/Dashboard/DataPrint/QueryConditionBox/index.jsx @@ -154,8 +154,22 @@ function QueryConditionBox(props) { - + {/*修改生成新证明按钮的点击事件*/} + diff --git a/src/page/Dashboard/GenerateCertificate/ChooseUser.jsx b/src/page/Dashboard/GenerateCertificate/ChooseUser.jsx index 997cf78..a94a5e5 100644 --- a/src/page/Dashboard/GenerateCertificate/ChooseUser.jsx +++ b/src/page/Dashboard/GenerateCertificate/ChooseUser.jsx @@ -1,147 +1,162 @@ -import React, {useEffect} from 'react'; -import {Button, Flex, Form, Input, message, Spin, Table, Typography} from "antd"; +import React, { useEffect, useState, useRef } from 'react'; +import { Button, Flex, Form, Input, message, Spin, Table, Typography } from "antd"; import creatMessageCommonAxios from "../../../http/CreatMessageCommonAxios"; +import { useSearchParams } from 'react-router-dom'; const ChooseUser = props => { + const { allowNext, request, setRequest } = props; + const [searchParams] = useSearchParams(); // 获取URL参数 + const [autoProcessed, setAutoProcessed] = useState(false); // 防止重复处理 + const { Title, Text } = Typography; + const [messageApi, contextHolder] = message.useMessage(); + const [form] = Form.useForm(); + const dataFetchRef = useRef(false); // 防止重复请求 + const commonAxios = creatMessageCommonAxios(messageApi); + // 初始加载标记 + const [isInitialLoad, setIsInitialLoad] = useState(true); + const columns = [ + { + title: 'ID', + dataIndex: 'id', + key: 'id', + hidden: true, + }, + { + title: '工号', + dataIndex: 'staffNumber', + width: 150 + }, + { + title: '姓名', + dataIndex: 'name', + width: 200 + }, + { + title: '学院', + dataIndex: 'college', + }, + { + title: '系别', + dataIndex: 'department', + width: 300 + }, + ]; - const {allowNext, request, setRequest} = props; + const [staffInfo, setStaffInfo] = useState([]); + const [staffNumberPrefix, setStaffNumberPrefix] = useState(""); + const [spinning, setSpinning] = useState(true); - const {Title, Text} = Typography; - const [messageApi, contextHolder] = message.useMessage(); - const [form] = Form.useForm(); + // 处理选中行逻辑 + const handleRowSelect = (selectedRowKeys, selectedRows) => { + console.log(`选中行: ${selectedRowKeys}`, selectedRows); + allowNext(selectedRows.length > 0); + if (selectedRows.length > 0) { + setRequest({ ...request, stuffNumber: selectedRows[0].staffNumber }); + } + }; - const commonAxios = creatMessageCommonAxios(messageApi); + const rowSelection = { + onChange: handleRowSelect, + defaultSelectedRowKeys: () => [], + }; - const columns = [ - { - title: 'ID', - dataIndex: 'id', - key: 'id', - hidden: true, - width: 0, - }, - { - title: '工号', - dataIndex: 'staffNumber', - width: 150 - }, - { - title: '姓名', - dataIndex: 'name', - width: 200 - }, - { - title: '学院', - dataIndex: 'college', - }, - { - title: '系别', - dataIndex: 'department', - width: 300 - }, - ]; + // 通用搜索函数 + const fetchStaffData = (staffNumber) => { + if (dataFetchRef.current) return; + dataFetchRef.current = true; - const [staffInfo, setStaffInfo] = React.useState([]); - - const [staffNumberPrefix, setStaffNumberPrefix] = React.useState(""); - const [spinning, setSpinning] = React.useState(true); - - const rowSelection = { - onChange: (selectedRowKeys, selectedRows) => { - 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: () => [], + setSpinning(true); + // 仅在有工号时才拼接参数,否则查询全部 + const params = staffNumber ? `&staffNumber=${staffNumber}` : ''; + commonAxios.get(`/api/auth/query/registered?page=1&size=10${params}`) + .then((response) => { + if (response.data.data?.list) { + const list = response.data.data.list.map(item => ({ ...item, key: item.id })); + setStaffInfo(list); + return list; + } else { + 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); + dataFetchRef.current = false; + }); }; + // 监听URL参数(从打印界面跳转时处理) useEffect(() => { - commonAxios.get(`/api/auth/query/registered?page=1&size=10`).then((response) => { - if (response.data.data != null) { - let list = response.data.data.list; - // 为list设置key=id - list.forEach((item) => { - item.key = item.id; - }); - setStaffInfo(list); - } else { - setStaffInfo([]); - } - }); - setSpinning(false); - }, []); + 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 = () => { - setSpinning(true); - commonAxios.get(`/api/auth/query/registered?staffNumber=${staffNumberPrefix}&page=1&size=10`).then((response) => { - if (response.data.data != null) { - let list = response.data.data.list; - // 为list设置key=id - list.forEach((item) => { - item.key = item.id; - }); - setStaffInfo(list); - } else { - setStaffInfo([]); - } - setSpinning(false); - }); - } + fetchStaffData(staffNumberPrefix); + }; - return ( -
- {contextHolder} - -
- 选择用户 - 指示EFC系统为何人生成报告,选择后这份报告将会出现在您和该同事的EFC系统证明管理画面中。 -
-
- - setStaffNumberPrefix(event.target.value)}/> - - -
-
- - - - - - - ) - ; - } -; + + + return ( +
+ {contextHolder} + +
+ 选择用户 + + 指示EFC系统为何人生成报告,选择后这份报告将会出现在您和该同事的EFC系统证明管理画面中。 + +
+
+ + setStaffNumberPrefix(e.target.value)} + onPressEnter={onSearch} // 支持回车搜索 + /> + + + +
+ +
+ + + + + ); +}; ChooseUser.propTypes = {};