评价和年审任务新增选择模板时,将品类限制和品类回填
This commit is contained in:
@ -1,8 +1,8 @@
|
||||
import React, { useState, useEffect, useCallback, forwardRef, useImperativeHandle } from 'react';
|
||||
import { Form, Input, Select, DatePicker, Row, Col, Card, Radio } from 'antd';
|
||||
import { Form, Input, Select, DatePicker, Row, Col, Card, Radio, message } from 'antd';
|
||||
import moment from 'moment';
|
||||
import { useIntl, FormattedMessage } from 'umi';
|
||||
import { getAllAnnualTemplates } from '@/servers/api/supplierAnnual';
|
||||
import { getAllAnnualTemplates,getAnnualTemplateDetail } from '@/servers/api/supplierAnnual';
|
||||
import CategorySelector from '@/components/CategorySelector';
|
||||
import styles from '../supplierAnnualTaskManageAdd.less';
|
||||
import { CategoryLimitationType } from '@/dicts/supplierTemplateDict';
|
||||
@ -83,17 +83,35 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
});
|
||||
};
|
||||
|
||||
// 监听表单里 categoryLimitation 的当前值 判断是否显示品类选择器
|
||||
const categoryLimitation = Form.useWatch('categoryLimitation', form);
|
||||
const showCategorySelector = categoryLimitation === CategoryLimitationType.LIMITED;
|
||||
|
||||
// 判断是否显示品类选择器
|
||||
const shouldShowCategorySelector = useCallback(() => {
|
||||
const categoryLimitation = taskFormData.categoryLimitation;
|
||||
return categoryLimitation === CategoryLimitationType.LIMITED;
|
||||
}, [taskFormData]);
|
||||
|
||||
// 处理模板选择 将模板的是否限制品类,和品类id赋值
|
||||
const handleTemplateSelect = async (templateId: string) => {
|
||||
const res = await getAnnualTemplateDetail(templateId);
|
||||
if (res.success && res.data) {
|
||||
// 更新表单数据
|
||||
const formValues = {
|
||||
...taskFormData,
|
||||
categoryLimitation: res.data.categoryLimitation || CategoryLimitationType.UNIVERSAL,
|
||||
categoryId: res.data.categoryId,
|
||||
};
|
||||
form.setFieldsValue(formValues);
|
||||
} else {
|
||||
message.error(
|
||||
intl.formatMessage({ id: 'supplierTemplateManage.message.getDetailFailed' }) || res.message,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={styles.basicInfoStep}>
|
||||
<Card title={intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.title' })} bordered={false} className="inner-card">
|
||||
<Card
|
||||
title={intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.title' })}
|
||||
bordered={false}
|
||||
className="inner-card"
|
||||
>
|
||||
<Form
|
||||
form={form}
|
||||
layout="vertical"
|
||||
@ -108,9 +126,14 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
<Form.Item
|
||||
label="年审主题"
|
||||
name="annualreviewTheme"
|
||||
rules={[{ required: true, message: "请输入年审主题" }]}
|
||||
rules={[{ required: true, message: '请输入年审主题' }]}
|
||||
>
|
||||
<Input placeholder={intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.theme.placeholder' })} maxLength={50} />
|
||||
<Input
|
||||
placeholder={intl.formatMessage({
|
||||
id: 'supplierAnnualTaskManage.basicInfoStep.theme.placeholder',
|
||||
})}
|
||||
maxLength={50}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
@ -121,11 +144,13 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
value: value ? moment(value) : undefined,
|
||||
})}
|
||||
normalize={(value) => value && value.format('YYYY')}
|
||||
rules={[{ required: true, message: "请选择年审年份" }]}
|
||||
rules={[{ required: true, message: '请选择年审年份' }]}
|
||||
>
|
||||
<DatePicker
|
||||
<DatePicker
|
||||
style={{ width: '100%' }}
|
||||
placeholder={intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.year.placeholder' })}
|
||||
placeholder={intl.formatMessage({
|
||||
id: 'supplierAnnualTaskManage.basicInfoStep.year.placeholder',
|
||||
})}
|
||||
picker="year"
|
||||
/>
|
||||
</Form.Item>
|
||||
@ -137,7 +162,7 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
<Form.Item
|
||||
label="年审开始时间"
|
||||
name="startTime"
|
||||
rules={[{ required: true, message: "请选择年审开始时间" }]}
|
||||
rules={[{ required: true, message: '请选择年审开始时间' }]}
|
||||
getValueProps={(value) => ({
|
||||
value: value ? moment(value) : undefined,
|
||||
})}
|
||||
@ -146,7 +171,9 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
<DatePicker
|
||||
style={{ width: '100%' }}
|
||||
format="YYYY-MM-DD"
|
||||
placeholder={intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.startTime.placeholder' })}
|
||||
placeholder={intl.formatMessage({
|
||||
id: 'supplierAnnualTaskManage.basicInfoStep.startTime.placeholder',
|
||||
})}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
@ -154,7 +181,7 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
<Form.Item
|
||||
label="年审结束时间"
|
||||
name="endTime"
|
||||
rules={[{ required: true, message: "请选择年审结束时间" }]}
|
||||
rules={[{ required: true, message: '请选择年审结束时间' }]}
|
||||
getValueProps={(value) => ({
|
||||
value: value ? moment(value) : undefined,
|
||||
})}
|
||||
@ -163,7 +190,9 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
<DatePicker
|
||||
style={{ width: '100%' }}
|
||||
format="YYYY-MM-DD"
|
||||
placeholder={intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.endTime.placeholder' })}
|
||||
placeholder={intl.formatMessage({
|
||||
id: 'supplierAnnualTaskManage.basicInfoStep.endTime.placeholder',
|
||||
})}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
@ -172,9 +201,18 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
<Row gutter={24}>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label={intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation' })}
|
||||
label={intl.formatMessage({
|
||||
id: 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation',
|
||||
})}
|
||||
name="categoryLimitation"
|
||||
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation.required' }) }]}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({
|
||||
id: 'supplierAnnualTaskManage.basicInfoStep.categoryLimitation.required',
|
||||
}),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Radio.Group>
|
||||
<Radio value={CategoryLimitationType.UNIVERSAL}>
|
||||
@ -186,12 +224,21 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
</Radio.Group>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
{shouldShowCategorySelector() && (
|
||||
{showCategorySelector && (
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label={intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.category' })}
|
||||
label={intl.formatMessage({
|
||||
id: 'supplierAnnualTaskManage.basicInfoStep.category',
|
||||
})}
|
||||
name="categoryId"
|
||||
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.category.required' }) }]}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({
|
||||
id: 'supplierAnnualTaskManage.basicInfoStep.category.required',
|
||||
}),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<CategorySelector multiple={false} />
|
||||
</Form.Item>
|
||||
@ -202,15 +249,27 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
<Row gutter={24}>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label={intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.template' })}
|
||||
label={intl.formatMessage({
|
||||
id: 'supplierAnnualTaskManage.basicInfoStep.template',
|
||||
})}
|
||||
name="templateId"
|
||||
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.template.required' }) }]}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({
|
||||
id: 'supplierAnnualTaskManage.basicInfoStep.template.required',
|
||||
}),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Select
|
||||
placeholder={intl.formatMessage({ id: 'supplierAnnualTaskManage.basicInfoStep.template.placeholder' })}
|
||||
placeholder={intl.formatMessage({
|
||||
id: 'supplierAnnualTaskManage.basicInfoStep.template.placeholder',
|
||||
})}
|
||||
style={{ width: '100%' }}
|
||||
allowClear
|
||||
loading={loading}
|
||||
onSelect={handleTemplateSelect}
|
||||
>
|
||||
{templates.map((template) => (
|
||||
<Option key={template.id} value={template.id}>
|
||||
@ -231,7 +290,7 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
const ConnectedComponent = connect(
|
||||
({ supplierAnnualTaskManage }: { supplierAnnualTaskManage: SupplierTaskModelState }) => ({
|
||||
supplierAnnualTaskManage,
|
||||
})
|
||||
}),
|
||||
)(BasicInfoStepComponent);
|
||||
|
||||
// 外层转发 ref 到 innerRef
|
||||
|
@ -1,7 +1,7 @@
|
||||
import React, { useState, useEffect, useCallback, forwardRef, useImperativeHandle } from 'react';
|
||||
import { Form, Input, Select, DatePicker, Row, Col, Card, Radio } from 'antd';
|
||||
import { Form, Input, Select, DatePicker, Row, Col, Card, Radio, message } from 'antd';
|
||||
import moment from 'moment';
|
||||
import { getAllTemplates } from '@/servers/api/supplierEvaluate';
|
||||
import { getAllTemplates, getTemplateDetail } from '@/servers/api/supplierEvaluate';
|
||||
import CategorySelector from '@/components/CategorySelector';
|
||||
import styles from '../supplierTaskManageAdd.less';
|
||||
import { CategoryLimitationType } from '@/dicts/supplierTemplateDict';
|
||||
@ -49,7 +49,10 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
setTemplates(response.data);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(intl.formatMessage({ id: 'supplierTaskManage.message.fetchTemplatesFailed' }), error);
|
||||
console.error(
|
||||
intl.formatMessage({ id: 'supplierTaskManage.message.fetchTemplatesFailed' }),
|
||||
error,
|
||||
);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@ -86,18 +89,36 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
payload: allValues,
|
||||
});
|
||||
};
|
||||
// 监听表单里 categoryLimitation 的当前值 判断是否显示品类选择器
|
||||
const categoryLimitation = Form.useWatch('categoryLimitation', form);
|
||||
const showCategorySelector = categoryLimitation === CategoryLimitationType.LIMITED;
|
||||
|
||||
|
||||
// 判断是否显示品类选择器
|
||||
const shouldShowCategorySelector = useCallback(() => {
|
||||
const categoryLimitation = taskFormData.categoryLimitation;
|
||||
return categoryLimitation === CategoryLimitationType.LIMITED;
|
||||
}, [taskFormData]);
|
||||
|
||||
// 处理模板选择 将模板的是否限制品类,和品类id赋值
|
||||
const handleTemplateSelect = async (templateId: string) => {
|
||||
const res = await getTemplateDetail(templateId);
|
||||
if (res.success && res.data) {
|
||||
// 更新表单数据
|
||||
const formValues = {
|
||||
...taskFormData,
|
||||
categoryLimitation: res.data.categoryLimitation || CategoryLimitationType.UNIVERSAL,
|
||||
categoryId: res.data.categoryId,
|
||||
};
|
||||
form.setFieldsValue(formValues);
|
||||
} else {
|
||||
message.error(
|
||||
intl.formatMessage({ id: 'supplierTemplateManage.message.getDetailFailed' }) || res.message,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={styles.basicInfoStep}>
|
||||
<Card title={intl.formatMessage({ id: 'supplierTaskManage.card.basicInfo' })} bordered={false} className="inner-card">
|
||||
<Card
|
||||
title={intl.formatMessage({ id: 'supplierTaskManage.card.basicInfo' })}
|
||||
bordered={false}
|
||||
className="inner-card"
|
||||
>
|
||||
<Form
|
||||
form={form}
|
||||
layout="vertical"
|
||||
@ -112,9 +133,19 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
<Form.Item
|
||||
label={intl.formatMessage({ id: 'supplierTaskManage.form.evaluateTheme' })}
|
||||
name="evaluateTheme"
|
||||
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierTaskManage.placeholder.evaluateTheme' }) }]}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({
|
||||
id: 'supplierTaskManage.placeholder.evaluateTheme',
|
||||
}),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input placeholder={intl.formatMessage({ id: 'supplierTaskManage.placeholder.input' })} maxLength={50} />
|
||||
<Input
|
||||
placeholder={intl.formatMessage({ id: 'supplierTaskManage.placeholder.input' })}
|
||||
maxLength={50}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
@ -125,11 +156,20 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
value: value ? moment(value) : undefined,
|
||||
})}
|
||||
normalize={(value) => value && value.format('YYYY')}
|
||||
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierTaskManage.placeholder.selectYear' }) }]}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({
|
||||
id: 'supplierTaskManage.placeholder.selectYear',
|
||||
}),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<DatePicker
|
||||
style={{ width: '100%' }}
|
||||
placeholder={intl.formatMessage({ id: 'supplierTaskManage.placeholder.selectYear' })}
|
||||
placeholder={intl.formatMessage({
|
||||
id: 'supplierTaskManage.placeholder.selectYear',
|
||||
})}
|
||||
picker="year"
|
||||
/>
|
||||
</Form.Item>
|
||||
@ -141,26 +181,44 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
<Form.Item
|
||||
label={intl.formatMessage({ id: 'supplierTaskManage.form.startTime' })}
|
||||
name="startTime"
|
||||
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierTaskManage.form.startTime' }) }]}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({ id: 'supplierTaskManage.form.startTime' }),
|
||||
},
|
||||
]}
|
||||
getValueProps={(value) => ({
|
||||
value: value ? moment(value) : undefined,
|
||||
})}
|
||||
normalize={(value) => value && value.format('YYYY-MM-DD')}
|
||||
>
|
||||
<DatePicker style={{ width: '100%' }} format="YYYY-MM-DD" placeholder={intl.formatMessage({ id: 'supplierTaskManage.placeholder.date' })} />
|
||||
<DatePicker
|
||||
style={{ width: '100%' }}
|
||||
format="YYYY-MM-DD"
|
||||
placeholder={intl.formatMessage({ id: 'supplierTaskManage.placeholder.date' })}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label={intl.formatMessage({ id: 'supplierTaskManage.form.endTime' })}
|
||||
name="endTime"
|
||||
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierTaskManage.form.endTime' }) }]}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({ id: 'supplierTaskManage.form.endTime' }),
|
||||
},
|
||||
]}
|
||||
getValueProps={(value) => ({
|
||||
value: value ? moment(value) : undefined,
|
||||
})}
|
||||
normalize={(value) => value && value.format('YYYY-MM-DD')}
|
||||
>
|
||||
<DatePicker style={{ width: '100%' }} format="YYYY-MM-DD" placeholder={intl.formatMessage({ id: 'supplierTaskManage.placeholder.date' })} />
|
||||
<DatePicker
|
||||
style={{ width: '100%' }}
|
||||
format="YYYY-MM-DD"
|
||||
placeholder={intl.formatMessage({ id: 'supplierTaskManage.placeholder.date' })}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
@ -170,7 +228,14 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
<Form.Item
|
||||
label={intl.formatMessage({ id: 'supplierTaskManage.form.categoryLimitation' })}
|
||||
name="categoryLimitation"
|
||||
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierTaskManage.form.categoryLimitation' }) }]}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({
|
||||
id: 'supplierTaskManage.form.categoryLimitation',
|
||||
}),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Radio.Group>
|
||||
<Radio value={CategoryLimitationType.UNIVERSAL}>
|
||||
@ -182,12 +247,17 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
</Radio.Group>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
{shouldShowCategorySelector() && (
|
||||
{showCategorySelector && (
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label={intl.formatMessage({ id: 'supplierTaskManage.form.selectCategory' })}
|
||||
name="categoryId"
|
||||
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierTaskManage.form.selectCategory' }) }]}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({ id: 'supplierTaskManage.form.selectCategory' }),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<CategorySelector multiple={false} />
|
||||
</Form.Item>
|
||||
@ -200,9 +270,22 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
<Form.Item
|
||||
label={intl.formatMessage({ id: 'supplierTaskManage.form.selectTemplate' })}
|
||||
name="templateId"
|
||||
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierTaskManage.form.selectTemplate' }) }]}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({ id: 'supplierTaskManage.form.selectTemplate' }),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Select placeholder={intl.formatMessage({ id: 'supplierTaskManage.placeholder.selectTemplate' })} style={{ width: '100%' }} allowClear loading={loading}>
|
||||
<Select
|
||||
placeholder={intl.formatMessage({
|
||||
id: 'supplierTaskManage.placeholder.selectTemplate',
|
||||
})}
|
||||
style={{ width: '100%' }}
|
||||
allowClear
|
||||
loading={loading}
|
||||
onSelect={handleTemplateSelect}
|
||||
>
|
||||
{templates.map((template) => (
|
||||
<Option key={template.id} value={template.id}>
|
||||
{template.templateName}
|
||||
@ -222,7 +305,7 @@ const BasicInfoStepComponent = (props: BasicInfoStepProps) => {
|
||||
const ConnectedComponent = connect(
|
||||
({ supplierTaskManage }: { supplierTaskManage: SupplierTaskModelState }) => ({
|
||||
supplierTaskManage,
|
||||
})
|
||||
}),
|
||||
)(BasicInfoStepComponent);
|
||||
|
||||
// 外层转发 ref 到 innerRef
|
||||
|
Reference in New Issue
Block a user