diff --git a/src/api/evaluationTeamConfig/index.js b/src/api/evaluationTeamConfig/index.js index d98276d..f767b70 100644 --- a/src/api/evaluationTeamConfig/index.js +++ b/src/api/evaluationTeamConfig/index.js @@ -23,3 +23,11 @@ export const evaluationTeamConfigChangeLog = declareRequest( export const corpInfoList = declareRequest( `Get > /basicInfo/corpInfo/listAll`, ); +export const setEvaluationTeamConfigOpenFlag = declareRequest( + "evaluationTeamConfigLoading", + `Post > @/hiddenEvaluation/evaluationGlobalConfig/openFlag`, +); +export const getEvaluationTeamConfigOpenFlag = declareRequest( + "evaluationTeamConfigLoading", + `Get > /hiddenEvaluation/evaluationGlobalConfig/openFlag`, +); diff --git a/src/components/ViewEvaluationModal/index.js b/src/components/ViewEvaluationModal/index.js index 0080771..8de91bf 100644 --- a/src/components/ViewEvaluationModal/index.js +++ b/src/components/ViewEvaluationModal/index.js @@ -1,5 +1,5 @@ import { Connect } from "@cqsjjb/jjb-dva-runtime"; -import { Button, Descriptions, Modal } from "antd"; +import { Button, Descriptions, Divider, Modal } from "antd"; import { useEffect, useState } from "react"; import { getLabelName } from "zy-react-library/utils"; import { EVALUATION_IS_COMPLIANT_ENUM } from "~/enumerate/constant"; @@ -21,6 +21,15 @@ const ViewEvaluationModal = (props) => { getData(); }, []); + if (props.inline) { + return ( + <> + 考评信息 + + + ); + } + return ( { , ]} > - ([ - { label: "考评人员", children: `${item.evaluationDeptName}-${item.evaluationUserName}` }, - { - label: "是否符合", - children: getLabelName({ list: EVALUATION_IS_COMPLIANT_ENUM, status: item.isCompliant }) || "未考评", - }, - ...(String(item.isCompliant) === "0" ? [{ label: "不符合原因", children: item.nonCompliantReason, span: 2 }] : []), - ])), - ]} - /> + ); }; +const Detail = ({ list }) => { + return ( + ([ + { label: "考评人员", children: `${item.evaluationDeptName}-${item.evaluationUserName}` }, + { + label: "是否符合", + children: getLabelName({ list: EVALUATION_IS_COMPLIANT_ENUM, status: item.isCompliant }) || "未考评", + }, + ...(String(item.isCompliant) === "0" ? [{ label: "不符合原因", children: item.nonCompliantReason, span: 2 }] : []), + ])), + ]} + /> + ); +}; + export default Connect([NS_HIDDEN_EVALUATION], true)(ViewEvaluationModal); diff --git a/src/pages/Container/Enterprise/HiddenEvaluation/HiddenView/index.js b/src/pages/Container/Enterprise/HiddenEvaluation/HiddenView/index.js index aa91bb4..6fb4415 100644 --- a/src/pages/Container/Enterprise/HiddenEvaluation/HiddenView/index.js +++ b/src/pages/Container/Enterprise/HiddenEvaluation/HiddenView/index.js @@ -1,12 +1,7 @@ -import HiddenInfo from "zy-react-library/components/HiddenInfo/gwj"; -import Page from "zy-react-library/components/Page"; +import HiddenViewPage from "~/pages/Container/Supervision/HiddenEvaluation/HiddenView"; -function HiddenView() { - return ( - - - - ); +function HiddenView(props) { + return (); } export default HiddenView; diff --git a/src/pages/Container/Enterprise/PersonnelEvaluation/HiddenView/index.js b/src/pages/Container/Enterprise/PersonnelEvaluation/HiddenView/index.js index aa91bb4..eb88d65 100644 --- a/src/pages/Container/Enterprise/PersonnelEvaluation/HiddenView/index.js +++ b/src/pages/Container/Enterprise/PersonnelEvaluation/HiddenView/index.js @@ -1,12 +1,7 @@ -import HiddenInfo from "zy-react-library/components/HiddenInfo/gwj"; -import Page from "zy-react-library/components/Page"; +import HiddenViewPage from "~/pages/Container/Supervision/PersonnelEvaluation/HiddenView"; -function HiddenView() { - return ( - - - - ); +function HiddenView(props) { + return (); } export default HiddenView; diff --git a/src/pages/Container/Supervision/EvaluationTeamConfig/List/index.js b/src/pages/Container/Supervision/EvaluationTeamConfig/List/index.js index 96032a7..f5707ad 100644 --- a/src/pages/Container/Supervision/EvaluationTeamConfig/List/index.js +++ b/src/pages/Container/Supervision/EvaluationTeamConfig/List/index.js @@ -1,6 +1,6 @@ import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; import { Connect } from "@cqsjjb/jjb-dva-runtime"; -import { Button, Descriptions, message, Modal, Space } from "antd"; +import { Button, Descriptions, message, Modal, Space, Switch } from "antd"; import { useEffect, useState } from "react"; import FormBuilder from "zy-react-library/components/FormBuilder"; import AddIcon from "zy-react-library/components/Icon/AddIcon"; @@ -33,11 +33,35 @@ function List(props) { const [addModalOpen, setAddModalOpen] = useState(false); const [viewModalOpen, setViewModalOpen] = useState(false); const [changeLogModalOpen, setChangeLogModalOpen] = useState(false); + const [isEvaluationClosed, setIsEvaluationClosed] = useState(false); const { tableProps, getData } = useTable(props["evaluationTeamConfigList"], { form, }); + const getEvaluationTeamConfigOpenFlag = async () => { + const { data } = await props["getEvaluationTeamConfigOpenFlag"](); + setIsEvaluationClosed(data); + }; + + useEffect(() => { + getEvaluationTeamConfigOpenFlag(); + }, []); + + const setEvaluationTeamConfigOpenFlag = (checked) => { + Modal.confirm({ + title: "提示", + content: checked ? "是否要关闭考评?打开前考评人员不可操作" : "是否要打开考评?打开后考评人员可操作", + onOk: async () => { + const { success } = await props["setEvaluationTeamConfigOpenFlag"]({ openFlag: +checked }); + if (success) { + message.success("操作成功"); + getEvaluationTeamConfigOpenFlag(); + } + }, + }); + }; + return ( ( + {props.permission("gfd-kpzpz-set") && ( +
+ 是否关闭考评 + +
+ )} {props.permission("gfd-kpzpz-add") && ( - {record.currentEvaluationFlag && ( -
), @@ -108,17 +98,6 @@ function HiddenExchangeList(props) { ]} {...tableProps} /> - {viewEvaluationModalOpen - && ( - { - setViewEvaluationModalOpen(false); - setCurrentHiddenId(""); - }} - hiddenId={currentHiddenId} - complete={true} - /> - )}
); } diff --git a/src/pages/Container/Supervision/PersonnelEvaluation/HiddenView/index.js b/src/pages/Container/Supervision/PersonnelEvaluation/HiddenView/index.js index aa91bb4..ea579bb 100644 --- a/src/pages/Container/Supervision/PersonnelEvaluation/HiddenView/index.js +++ b/src/pages/Container/Supervision/PersonnelEvaluation/HiddenView/index.js @@ -1,10 +1,20 @@ import HiddenInfo from "zy-react-library/components/HiddenInfo/gwj"; import Page from "zy-react-library/components/Page"; +import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; +import ViewEvaluationModal from "~/components/ViewEvaluationModal"; function HiddenView() { + const query = useGetUrlQuery(); + return ( + ); } diff --git a/src/pages/Container/Supervision/PersonnelEvaluation/UserExchangeList/index.js b/src/pages/Container/Supervision/PersonnelEvaluation/UserExchangeList/index.js index 9dee22f..9ed9285 100644 --- a/src/pages/Container/Supervision/PersonnelEvaluation/UserExchangeList/index.js +++ b/src/pages/Container/Supervision/PersonnelEvaluation/UserExchangeList/index.js @@ -13,11 +13,28 @@ import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useTable from "zy-react-library/hooks/useTable"; import { NS_HIDDEN_EVALUATION, NS_PERSONNEL_EVALUATION } from "~/enumerate/namespace"; +const getRowKey = record => `${record.userId}-${record.evaluationType}`; + +const getUserRowSpan = (dataSource, index) => { + if (!Number.isInteger(index) || !dataSource[index]) { + return 1; + } + const userId = dataSource[index].userId; + if (index > 0 && dataSource[index - 1]?.userId === userId) { + return 0; + } + let rowSpan = 1; + while (index + rowSpan < dataSource.length && dataSource[index + rowSpan].userId === userId) { + rowSpan += 1; + } + return rowSpan; +}; + function UserExchangeList(props) { const query = useGetUrlQuery(); const corpinfoId = props.corpinfoId || query.corpinfoId; const { loading: downloadBlobLoading, downloadBlob } = useDownloadBlob(); - const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [selectedUserIds, setSelectedUserIds] = useState([]); const [form] = Search.useForm(); const { tableProps, getData } = useTable(props["personnelEvaluationUserExchangeList"], { form, @@ -25,9 +42,27 @@ function UserExchangeList(props) { corpinfoId, }, }); + const selectedRowKeys = tableProps.dataSource + .filter(item => selectedUserIds.includes(item.userId)) + .map(getRowKey); + // 仅合并当前页中连续的同一人员,避免不同人员因显示字段相同而被误合并。 + const getUserCellProps = (_, index) => ({ + rowSpan: getUserRowSpan(tableProps.dataSource, index), + }); + + // 同一人员会按考评类型返回多行,选择任意一行时按 userId 同步更新该人员的全部行。 + const updateSelectedUserIds = (records, selected) => { + const userIds = new Set(records.map(item => item.userId)); + setSelectedUserIds((currentUserIds) => { + if (selected) { + return [...new Set([...currentUserIds, ...userIds])]; + } + return currentUserIds.filter(userId => !userIds.has(userId)); + }); + }; const onBatchExchange = async () => { - if (!selectedRowKeys.length) { + if (!selectedUserIds.length) { message.warning("请选择需要兑换的人员"); return; } @@ -35,7 +70,7 @@ function UserExchangeList(props) { title: "兑换确认", content: "确定要兑换吗?", onOk: async () => { - const success = await props["personnelEvaluationExchange"]({ userIdList: selectedRowKeys }); + const success = await props["personnelEvaluationExchange"]({ userIdList: selectedUserIds }); if (success) { message.success("兑换成功"); getData(); @@ -53,7 +88,7 @@ function UserExchangeList(props) { onOk: async () => { const { data } = await props["personnelEvaluationUserExchangeList"]({ corpinfoId, ...form.getFieldsValue(), pageIndex: 1, pageSize: 9999 }); const success = await props["personnelEvaluationExchange"]({ - userIdList: data.map(item => item.userId), + userIdList: [...new Set(data.map(item => item.userId))], }); if (success) { message.success("兑换成功"); @@ -66,7 +101,7 @@ function UserExchangeList(props) { }); }; const onExportExcel = async () => { - if (!selectedRowKeys.length) { + if (!selectedUserIds.length) { message.warning("请选择需要导出的人员"); return; } @@ -74,7 +109,7 @@ function UserExchangeList(props) { title: "导出确认", content: "确定要导出excel吗?", onOk: async () => { - await downloadBlob("/hiddenEvaluation/hiddenEvaluationRecord/exportUserEvalStatisticsPage", { params: { corpinfoId, ids: selectedRowKeys } }); + await downloadBlob("/hiddenEvaluation/hiddenEvaluationRecord/exportUserEvalStatisticsPage", { params: { corpinfoId, ids: selectedUserIds } }); message.success("导出成功"); }, onCancel: () => { @@ -104,12 +139,15 @@ function UserExchangeList(props) { !props.corpinfoId && { preserveSelectedRowKeys: true, selectedRowKeys, - onChange: (selectedRowKeys) => { - setSelectedRowKeys(selectedRowKeys); + onSelect: (record, selected) => { + updateSelectedUserIds([record], selected); + }, + onSelectAll: (selected, _, changeRows) => { + updateSelectedUserIds(changeRows, selected); }, } } - rowKey="userId" + rowKey={getRowKey} toolBarRender={() => ( props.entrance !== "enterprise" && ( @@ -141,10 +179,11 @@ function UserExchangeList(props) { ) )} columns={[ - { title: "用户名", dataIndex: "userName" }, - { title: "姓名", dataIndex: "name" }, - { title: "部门", dataIndex: "departmentName" }, - { title: "岗位", dataIndex: "postName" }, + { title: "用户名", dataIndex: "userName", onCell: getUserCellProps }, + { title: "姓名", dataIndex: "name", onCell: getUserCellProps }, + { title: "部门", dataIndex: "departmentName", onCell: getUserCellProps }, + { title: "岗位", dataIndex: "postName", onCell: getUserCellProps }, + { title: "隐患考评组类型", dataIndex: "evaluationTypeName" }, { title: "奖励总得分", dataIndex: "totalScore" }, { title: "已兑换分数", dataIndex: "exchangedScore" }, { title: "未兑换奖励数", dataIndex: "notExchangedScore" },