0814 需求变更
parent
c4b03a723f
commit
c5930682ad
|
|
@ -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`,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
<>
|
||||
<Divider orientation="left">考评信息</Divider>
|
||||
<Detail list={list} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Modal
|
||||
title="考评详情"
|
||||
|
|
@ -34,6 +43,13 @@ const ViewEvaluationModal = (props) => {
|
|||
</Button>,
|
||||
]}
|
||||
>
|
||||
<Detail list={list} />
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
const Detail = ({ list }) => {
|
||||
return (
|
||||
<Descriptions
|
||||
column={2}
|
||||
bordered
|
||||
|
|
@ -49,7 +65,6 @@ const ViewEvaluationModal = (props) => {
|
|||
])),
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
<Page headerTitle="查看" contentPadding="0 20px 20px 20px">
|
||||
<HiddenInfo />
|
||||
</Page>
|
||||
);
|
||||
function HiddenView(props) {
|
||||
return (<HiddenViewPage {...props} />);
|
||||
}
|
||||
|
||||
export default HiddenView;
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
<Page headerTitle="查看" contentPadding="0 20px 20px 20px">
|
||||
<HiddenInfo />
|
||||
</Page>
|
||||
);
|
||||
function HiddenView(props) {
|
||||
return (<HiddenViewPage {...props} />);
|
||||
}
|
||||
|
||||
export default HiddenView;
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
<Page isShowAllAction={false}>
|
||||
<Search
|
||||
|
|
@ -51,6 +75,17 @@ function List(props) {
|
|||
<Table
|
||||
toolBarRender={() => (
|
||||
<Space>
|
||||
{props.permission("gfd-kpzpz-set") && (
|
||||
<div style={{ display: "flex", alignItems: "center", gap: "8px" }}>
|
||||
<span>是否关闭考评</span>
|
||||
<Switch
|
||||
value={isEvaluationClosed}
|
||||
checkedChildren="是"
|
||||
unCheckedChildren="否"
|
||||
onChange={setEvaluationTeamConfigOpenFlag}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{props.permission("gfd-kpzpz-add") && (
|
||||
<Button
|
||||
type="primary"
|
||||
|
|
|
|||
|
|
@ -13,15 +13,15 @@ import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
|||
import useGetUserInfo from "zy-react-library/hooks/useGetUserInfo";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import ViewEvaluationModal from "~/components/ViewEvaluationModal";
|
||||
import { EVALUATION_IS_COMPLIANT_ENUM, EVALUATION_RESULT_ENUM } from "~/enumerate/constant";
|
||||
import { NS_HIDDEN_EVALUATION } from "~/enumerate/namespace";
|
||||
import { NS_EVALUATION_TEAM_CONFIG, NS_HIDDEN_EVALUATION } from "~/enumerate/namespace";
|
||||
|
||||
function HiddenList(props) {
|
||||
const query = useGetUrlQuery();
|
||||
const [viewEvaluationModalOpen, setViewEvaluationModalOpen] = useState(false);
|
||||
const [evaluationModalOpen, setEvaluationModalOpen] = useState(false);
|
||||
const [currentHiddenId, setCurrentHiddenId] = useState("");
|
||||
const [isEvaluationClosed, setIsEvaluationClosed] = useState(false);
|
||||
|
||||
const [form] = Search.useForm();
|
||||
const { tableProps, getData } = useTable(props["hiddenEvaluationHiddenList"], {
|
||||
form,
|
||||
|
|
@ -37,6 +37,15 @@ function HiddenList(props) {
|
|||
}),
|
||||
});
|
||||
|
||||
const getEvaluationTeamConfigOpenFlag = async () => {
|
||||
const { data } = await props["getEvaluationTeamConfigOpenFlag"]();
|
||||
setIsEvaluationClosed(data);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
getEvaluationTeamConfigOpenFlag();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<Page headerTitle="分公司考评隐患">
|
||||
<Search
|
||||
|
|
@ -93,30 +102,21 @@ function HiddenList(props) {
|
|||
},
|
||||
{
|
||||
title: "操作",
|
||||
width: 230,
|
||||
width: 150,
|
||||
fixed: "right",
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./hiddenView?hiddenId=${record.hiddenId}&id=${record.hiddenSnowFlakeId}`);
|
||||
props.history.push(`./hiddenView?hiddenId=${record.hiddenId}&id=${record.hiddenSnowFlakeId}&corpinfoId=${query.corpinfoId}&evaluationType=${query.evaluationType}`);
|
||||
}}
|
||||
>
|
||||
查看隐患详情
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setViewEvaluationModalOpen(true);
|
||||
setCurrentHiddenId(record.hiddenId);
|
||||
}}
|
||||
>
|
||||
考评详情
|
||||
查看
|
||||
</Button>
|
||||
{record.currentEvaluationFlag && (
|
||||
<Button
|
||||
disabled={record.finalResult === 2 || record.finalResult === 3}
|
||||
disabled={record.finalResult === 2 || record.finalResult === 3 || isEvaluationClosed}
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setEvaluationModalOpen(true);
|
||||
|
|
@ -132,17 +132,6 @@ function HiddenList(props) {
|
|||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{viewEvaluationModalOpen
|
||||
&& (
|
||||
<ViewEvaluationModal
|
||||
onCancel={() => {
|
||||
setViewEvaluationModalOpen(false);
|
||||
setCurrentHiddenId("");
|
||||
}}
|
||||
hiddenId={currentHiddenId}
|
||||
query={query}
|
||||
/>
|
||||
)}
|
||||
{evaluationModalOpen
|
||||
&& (
|
||||
<EvaluationModal
|
||||
|
|
@ -263,4 +252,4 @@ const EvaluationModalComponent = (props) => {
|
|||
};
|
||||
|
||||
const EvaluationModal = Connect([NS_HIDDEN_EVALUATION], true)(EvaluationModalComponent);
|
||||
export default Connect([NS_HIDDEN_EVALUATION], true)(HiddenList);
|
||||
export default Connect([NS_HIDDEN_EVALUATION, NS_EVALUATION_TEAM_CONFIG], true)(HiddenList);
|
||||
|
|
|
|||
|
|
@ -1,10 +1,19 @@
|
|||
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 (
|
||||
<Page headerTitle="查看" contentPadding="0 20px 20px 20px">
|
||||
<HiddenInfo />
|
||||
<ViewEvaluationModal
|
||||
inline
|
||||
hiddenId={query.hiddenId}
|
||||
query={query}
|
||||
/>
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,7 @@
|
|||
import HiddenInfo from "zy-react-library/components/HiddenInfo/gwj";
|
||||
import Page from "zy-react-library/components/Page";
|
||||
import HiddenViewPage from "../../PersonnelEvaluation/HiddenView";
|
||||
|
||||
function HiddenView() {
|
||||
return (
|
||||
<Page headerTitle="查看" contentPadding="0 20px 20px 20px">
|
||||
<HiddenInfo />
|
||||
</Page>
|
||||
);
|
||||
function HiddenView(props) {
|
||||
return (<HiddenViewPage {...props} />);
|
||||
}
|
||||
|
||||
export default HiddenView;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import { HIDDEN_SOURCE_ENUM, HIDDEN_STATE_ENUM } from "zy-react-library/enum/hid
|
|||
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import ViewEvaluationModal from "~/components/ViewEvaluationModal";
|
||||
import { EVALUATION_RESULT_ENUM } from "~/enumerate/constant";
|
||||
import { NS_PERSONNEL_EVALUATION } from "~/enumerate/namespace";
|
||||
|
||||
|
|
@ -81,26 +80,17 @@ function HiddenExchangeList(props) {
|
|||
},
|
||||
{
|
||||
title: "操作",
|
||||
width: 230,
|
||||
width: 100,
|
||||
fixed: "right",
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
props.history.push(`./hiddenView?hiddenId=${record.hiddenId}&id=${record.hiddenSnowFlakeId}`);
|
||||
props.history.push(`./hiddenView?hiddenId=${record.hiddenId}&id=${record.hiddenSnowFlakeId}&corpinfoId=${query.corpinfoId}&evaluationType=${query.evaluationType}`);
|
||||
}}
|
||||
>
|
||||
查看隐患详情
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setViewEvaluationModalOpen(true);
|
||||
setCurrentHiddenId(record.hiddenId);
|
||||
}}
|
||||
>
|
||||
考评详情
|
||||
查看
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
|
|
@ -108,17 +98,6 @@ function HiddenExchangeList(props) {
|
|||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{viewEvaluationModalOpen
|
||||
&& (
|
||||
<ViewEvaluationModal
|
||||
onCancel={() => {
|
||||
setViewEvaluationModalOpen(false);
|
||||
setCurrentHiddenId("");
|
||||
}}
|
||||
hiddenId={currentHiddenId}
|
||||
complete={true}
|
||||
/>
|
||||
)}
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
<Page headerTitle="查看" contentPadding="0 20px 20px 20px">
|
||||
<HiddenInfo />
|
||||
<ViewEvaluationModal
|
||||
inline
|
||||
hiddenId={query.hiddenId}
|
||||
query={query}
|
||||
complete
|
||||
/>
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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" && (
|
||||
<Space>
|
||||
|
|
@ -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" },
|
||||
|
|
|
|||
Loading…
Reference in New Issue