Compare commits

...

2 Commits

5 changed files with 87 additions and 58 deletions

View File

@ -2,7 +2,7 @@
// 审查状态常量 // 审查状态常量
export const AnnualReviewStatus = { export const AnnualReviewStatus = {
WAITING: '0', // 待审核 WAITING: '0', // 未开始
ONGOING: '1', // 审核中 ONGOING: '1', // 审核中
COMPLETED: '2', // 已完成 COMPLETED: '2', // 已完成
EXPIRED: '3', // 已过期 EXPIRED: '3', // 已过期
@ -10,7 +10,7 @@ export const AnnualReviewStatus = {
// 审查状态文本 // 审查状态文本
export const AnnualReviewStatusText = { export const AnnualReviewStatusText = {
[AnnualReviewStatus.WAITING]: '待审核', [AnnualReviewStatus.WAITING]: '未开始',
[AnnualReviewStatus.ONGOING]: '审核中', [AnnualReviewStatus.ONGOING]: '审核中',
[AnnualReviewStatus.COMPLETED]: '已完成', [AnnualReviewStatus.COMPLETED]: '已完成',
[AnnualReviewStatus.EXPIRED]: '已过期', [AnnualReviewStatus.EXPIRED]: '已过期',

View File

@ -217,6 +217,12 @@ const SupplierAnnualReview: React.FC = () => {
key: 'statusName', key: 'statusName',
width: 100 width: 100
}, },
{
title: "提交状态",
dataIndex: 'reviewStatusName',
key: 'reviewStatusName',
width: 100
},
{ {
title: intl.formatMessage({ id: 'supplierAnnualReview.common.operation' }), title: intl.formatMessage({ id: 'supplierAnnualReview.common.operation' }),
key: 'action', key: 'action',
@ -232,7 +238,7 @@ const SupplierAnnualReview: React.FC = () => {
{intl.formatMessage({ id: 'supplierAnnualReview.common.view' })} {intl.formatMessage({ id: 'supplierAnnualReview.common.view' })}
</Button> </Button>
{/* 只有待审核状态的可以打分 */} {/* 只有待审核状态的可以打分 */}
{record.reviewStatus === AnnualReviewStatus.WAITING && ( {record.status !== "0" && record.reviewStatus === "0" && (
<Button <Button
type="link" type="link"
onClick={() => handleScore(record)} onClick={() => handleScore(record)}

View File

@ -33,7 +33,7 @@ const { TextArea } = Input;
// 评分项接口定义 // 评分项接口定义
interface ScoreFormItem { interface ScoreFormItem {
id: string; id: string;
name: string; itemName: string;
description: string; description: string;
examineResult: string; examineResult: string;
remark: string; remark: string;
@ -59,12 +59,12 @@ const SupplierAnnualReviewScore: React.FC = () => {
setReviewDetail(res.data); setReviewDetail(res.data);
// 使用接口返回的评分项数据 // 使用接口返回的评分项数据
if (res.data.scoreItems && res.data.scoreItems.length > 0) { if (res.data.taskIndicatorVo && res.data.taskIndicatorVo.length > 0) {
setScoreItems(res.data.scoreItems); setScoreItems(res.data.taskIndicatorVo);
// 初始化表单 // 初始化表单
const initialValues: any = {}; const initialValues: any = {};
res.data.scoreItems.forEach((item: ScoreFormItem) => { res.data.taskIndicatorVo.forEach((item: ScoreFormItem) => {
initialValues[`examineResult_${item.id}`] = item.examineResult || ''; initialValues[`examineResult_${item.id}`] = item.examineResult || '';
initialValues[`remark_${item.id}`] = item.remark || ''; initialValues[`remark_${item.id}`] = item.remark || '';
}); });
@ -109,7 +109,7 @@ const SupplierAnnualReviewScore: React.FC = () => {
const formValues = form.getFieldsValue(); const formValues = form.getFieldsValue();
const scoreVoList = scoreItems.map((item) => ({ const scoreVoList = scoreItems.map((item) => ({
id: item.id, id: item.id,
name: item.name, name: item.itemName,
description: item.description, description: item.description,
examineResult: formValues[`examineResult_${item.id}`], examineResult: formValues[`examineResult_${item.id}`],
remark: formValues[`remark_${item.id}`] || '', remark: formValues[`remark_${item.id}`] || '',
@ -191,12 +191,12 @@ const SupplierAnnualReviewScore: React.FC = () => {
{reviewDetail.deptName || '-'} {reviewDetail.deptName || '-'}
</Descriptions.Item> </Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'supplierAnnualReview.list.reviewer' })}> <Descriptions.Item label={intl.formatMessage({ id: 'supplierAnnualReview.list.reviewer' })}>
{reviewDetail.userName || '-'} {reviewDetail.reviewerName || '-'}
</Descriptions.Item> </Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'supplierAnnualReview.list.startTime' })}>{reviewDetail.startTime}</Descriptions.Item> <Descriptions.Item label={intl.formatMessage({ id: 'supplierAnnualReview.list.startTime' })}>{reviewDetail.startTime}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'supplierAnnualReview.list.endTime' })}>{reviewDetail.endTime}</Descriptions.Item> <Descriptions.Item label={intl.formatMessage({ id: 'supplierAnnualReview.list.endTime' })}>{reviewDetail.endTime}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'supplierAnnualReview.list.status' })}> <Descriptions.Item label={intl.formatMessage({ id: 'supplierAnnualReview.list.status' })}>
{getStatusTag(reviewDetail.reviewStatus, reviewDetail.reviewStatusName)} {reviewDetail.reviewStatusName || '-'}
</Descriptions.Item> </Descriptions.Item>
</Descriptions> </Descriptions>
</Card> </Card>
@ -215,14 +215,14 @@ const SupplierAnnualReviewScore: React.FC = () => {
columns={[ columns={[
{ {
title: intl.formatMessage({ id: 'supplierAnnualReview.score.scoreItem' }), title: intl.formatMessage({ id: 'supplierAnnualReview.score.scoreItem' }),
dataIndex: 'name', dataIndex: 'itemName',
width: '15%', width: '15%',
}, },
{ // {
title: intl.formatMessage({ id: 'supplierAnnualReview.score.scoreItemDesc' }), // title: intl.formatMessage({ id: 'supplierAnnualReview.score.scoreItemDesc' }),
dataIndex: 'description', // dataIndex: 'description',
width: '25%', // width: '25%',
}, // },
{ {
title: intl.formatMessage({ id: 'supplierAnnualReview.detail.examineResult' }), title: intl.formatMessage({ id: 'supplierAnnualReview.detail.examineResult' }),
dataIndex: 'examineResult', dataIndex: 'examineResult',

View File

@ -273,8 +273,8 @@ status状态
}, },
{ {
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.tenantName' }), title: intl.formatMessage({ id: 'supplierEvaluateScore.column.tenantName' }),
dataIndex: 'tenantName', dataIndex: 'deptName',
key: 'tenantName', key: 'deptName',
}, },
{ {
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.startTime' }), title: intl.formatMessage({ id: 'supplierEvaluateScore.column.startTime' }),
@ -293,13 +293,13 @@ status状态
}, },
{ {
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.submissionStatus' }), title: intl.formatMessage({ id: 'supplierEvaluateScore.column.submissionStatus' }),
dataIndex: 'submissionStatus', dataIndex: 'reviewStatusName',
key: 'submissionStatus', key: 'reviewStatusName',
}, },
{ {
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.submissionTime' }), title: intl.formatMessage({ id: 'supplierEvaluateScore.column.submissionTime' }),
dataIndex: 'submissionTime', dataIndex: 'reviewTime',
key: 'submissionTime', key: 'reviewTime',
}, },
{ {
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.action' }), title: intl.formatMessage({ id: 'supplierEvaluateScore.column.action' }),
@ -309,7 +309,7 @@ status状态
<Button type="link" onClick={() => goToScoring(record, 'supplier', 'view')}> <Button type="link" onClick={() => goToScoring(record, 'supplier', 'view')}>
{intl.formatMessage({ id: 'supplierEvaluateScore.button.view' })} {intl.formatMessage({ id: 'supplierEvaluateScore.button.view' })}
</Button> </Button>
{record.status === '1' && ( // 只有待评分状态才显示打分按钮 {record.status === '1' && record.reviewStatus !== '1' && ( // 只有待评分状态才显示打分按钮
<Button type="link" onClick={() => goToScoring(record, 'supplier', 'score')}> <Button type="link" onClick={() => goToScoring(record, 'supplier', 'score')}>
{intl.formatMessage({ id: 'supplierEvaluateScore.button.score' })} {intl.formatMessage({ id: 'supplierEvaluateScore.button.score' })}
</Button> </Button>

View File

@ -276,6 +276,19 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
message.error(intl.formatMessage({ id: 'supplierTemplateManage.message.addIndicator' })); message.error(intl.formatMessage({ id: 'supplierTemplateManage.message.addIndicator' }));
return; return;
} }
// 校验每一个一级指标所属的所有二级指标分值是否超过一级指标的分值
const hasInvalidScore = templateData.some((stItem) => {
const totalScore = stItem.indicatorNdList.reduce(
(acc, ndItem) => acc + parseFloat(ndItem.score || '0'),
0,
);
return totalScore > parseFloat(stItem.score || '0');
});
if (hasInvalidScore) {
message.error('一级指标分值不能小于二级指标分值之和');
return;
}
// 显示确认对话框 // 显示确认对话框
confirm({ confirm({
@ -341,7 +354,7 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
form.setFieldsValue({ form.setFieldsValue({
indicatorStMore: res.data.indicatorStMore, indicatorStMore: res.data.indicatorStMore,
indicatorTypeMore: res.data.indicatorTypeMore, indicatorTypeMore: res.data.indicatorTypeMore,
}) });
} }
} else { } else {
message.error( message.error(
@ -509,7 +522,7 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
loading={templateList.length === 0} loading={templateList.length === 0}
showSearch={true} showSearch={true}
filterOption={(input, option) => { filterOption={(input, option) => {
return (option?.children ?? '').toLowerCase().includes(input.toLowerCase()) return (option?.children ?? '').toLowerCase().includes(input.toLowerCase());
}} }}
onSelect={handleTemplateSelect} onSelect={handleTemplateSelect}
> >
@ -543,44 +556,54 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
</Form.Item> </Form.Item>
</Col> </Col>
</Row> </Row>
<Row gutter={24}> <Row gutter={24}>
<Col span={8}> <Col span={8}>
<Form.Item label="是否可追加一级指标" name="indicatorStMore" hidden={getUserRole() !== 'admin'}> <Form.Item
<Radio.Group onChange={(e) => { label="是否可追加一级指标"
name="indicatorStMore"
hidden={getUserRole() !== 'admin'}
>
<Radio.Group
onChange={(e) => {
if (e.target.value === IndicatorAddOption.CAN_ADD) { if (e.target.value === IndicatorAddOption.CAN_ADD) {
form.setFieldsValue({ form.setFieldsValue({
indicatorTypeMore: '', indicatorTypeMore: '',
}); });
} }
}}> }}
<Radio value={IndicatorAddOption.CAN_ADD}> >
{IndicatorAddOptionText[IndicatorAddOption.CAN_ADD]} <Radio value={IndicatorAddOption.CAN_ADD}>
</Radio> {IndicatorAddOptionText[IndicatorAddOption.CAN_ADD]}
<Radio value={IndicatorAddOption.CANNOT_ADD}> </Radio>
{IndicatorAddOptionText[IndicatorAddOption.CANNOT_ADD]} <Radio value={IndicatorAddOption.CANNOT_ADD}>
</Radio> {IndicatorAddOptionText[IndicatorAddOption.CANNOT_ADD]}
</Radio.Group> </Radio>
</Form.Item> </Radio.Group>
</Col>
<Form.Item // 这里必须放在Row下
shouldUpdate={(prev, curr) => prev.indicatorStMore !== curr.indicatorStMore}
noStyle
>
{({ getFieldValue }) =>
getFieldValue('indicatorStMore') === IndicatorAddOption.CANNOT_ADD ? (
<Col span={8}>
<Form.Item label="禁用指标类型" name="indicatorTypeMore" hidden={getUserRole() !== 'admin'}>
<Select
placeholder="请选择禁用指标类型"
options={indicatorTypes}
allowClear
/>
</Form.Item>
</Col>
) : null
}
</Form.Item> </Form.Item>
{/* <Col span={8}> </Col>
<Form.Item // 这里必须放在Row下
shouldUpdate={(prev, curr) => prev.indicatorStMore !== curr.indicatorStMore}
noStyle
>
{({ getFieldValue }) =>
getFieldValue('indicatorStMore') === IndicatorAddOption.CANNOT_ADD ? (
<Col span={8}>
<Form.Item
label="禁用指标类型"
name="indicatorTypeMore"
hidden={getUserRole() !== 'admin'}
>
<Select
placeholder="请选择禁用指标类型"
options={indicatorTypes}
allowClear
/>
</Form.Item>
</Col>
) : null
}
</Form.Item>
{/* <Col span={8}>
<Form.Item <Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.indicatorNdMore' })} label={intl.formatMessage({ id: 'supplierTemplateManage.form.indicatorNdMore' })}
name="indicatorNdMore" name="indicatorNdMore"
@ -593,7 +616,7 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
/> />
</Form.Item> </Form.Item>
</Col> */} </Col> */}
</Row> </Row>
</Card> </Card>
<Divider /> <Divider />