Commit 58886dd3 authored by 张子雨's avatar 张子雨

feat: 表单模板第二版

parent ca16b903
...@@ -45,7 +45,9 @@ const CustomerInfo = props => { ...@@ -45,7 +45,9 @@ const CustomerInfo = props => {
} }
setSelectedMealTypes([]); setSelectedMealTypes([]);
setMeals({}); setMeals({});
form.setFieldsValue({}); form.setFieldsValue({
mealLimit: [],
});
}; };
/* /*
...@@ -66,50 +68,25 @@ const CustomerInfo = props => { ...@@ -66,50 +68,25 @@ const CustomerInfo = props => {
}; };
/* /*
* 5. 表单校验 * 5. 表单提交数据处理及校验
*/ */
// 校验时间
const checkTime = (arr, curren, curName) => {
let valid = false;
arr.forEach(item => {
if (curren < item.endTime) {
valid = true;
const name = meals[item.mealPeriodType];
notification.error({ message: `${curName}起始时间不能早于${name}截止时间` });
}
});
return valid;
};
const validateForm = async () => { const validateForm = async () => {
const res = await form.validateFields(); const res = await form.validateFields();
if (res.mealTimePeriod.length < 1) {
message.warn('请选择餐段');
return;
}
const params = { const params = {
hideImage: 0, hideImage: 0,
hidePrice: 0, hidePrice: 0,
...res, ...res,
}; };
const arr = []; const arr = [];
let validTime = false;
res.mealTimePeriod.forEach(item => { res.mealTimePeriod.forEach(item => {
if (item && meals[item.mealPeriodType]) { if (item && meals[item.mealPeriodType]) {
const obj = Object.assign({}, item); const obj = { ...item };
obj.beginTime = moment(obj.time[0]).format('HH:mm'); obj.beginTime = moment(obj.time[0]).format('HH:mm');
obj.endTime = moment(obj.time[1]).format('HH:mm'); obj.endTime = moment(obj.time[1]).format('HH:mm');
delete obj.time; delete obj.time;
if (checkTime(arr, obj.beginTime, meals[item.mealPeriodType])) {
validTime = true;
}
arr.push(obj); arr.push(obj);
} }
}); });
if (validTime) {
// notification.error({ message: '时间段不能交叉!' });
return;
}
params.mealTimePeriod = arr; params.mealTimePeriod = arr;
if (res.hideInfo && res.hideInfo.length) { if (res.hideInfo && res.hideInfo.length) {
params.hidePrice = res.hideInfo.includes('hidePrice') ? 1 : 0; params.hidePrice = res.hideInfo.includes('hidePrice') ? 1 : 0;
...@@ -117,10 +94,6 @@ const CustomerInfo = props => { ...@@ -117,10 +94,6 @@ const CustomerInfo = props => {
delete params.hideInfo; delete params.hideInfo;
} }
const limits = []; const limits = [];
if (!res.mealLimit) {
notification.error({ message: '请输入限额!' });
return;
}
// 处理限额 // 处理限额
Object.keys(res.mealLimit).forEach(item => { Object.keys(res.mealLimit).forEach(item => {
const mealPeriodType = item.replace('limit', ''); const mealPeriodType = item.replace('limit', '');
...@@ -140,17 +113,47 @@ const CustomerInfo = props => { ...@@ -140,17 +113,47 @@ const CustomerInfo = props => {
limits.push(json); limits.push(json);
} }
}); });
if (limits.length < 1) {
notification.error({ message: '请选择餐段配置!' });
return;
}
params.mealLimit = limits; params.mealLimit = limits;
submitForm(params); console.log(params, '.....');
// submitForm(params);
}; };
/* /*
* 4. 表单交互逻辑 * 4. 表单交互逻辑
*/ */
// 校验时间
const checkTime = (arr, curren, curName) => {
let valid = false;
arr.forEach(item => {
if (curren < item.endTime) {
valid = true;
const name = meals[item.mealPeriodType];
}
});
return valid;
};
const validateMeals = () => {
const { mealTimePeriod = [] } = form.getFieldValue();
const arr = [];
let validTime = false;
mealTimePeriod.forEach(item => {
if (item && meals[item.mealPeriodType]) {
const obj = { ...item };
obj.beginTime = moment(obj.time[0]).format('HH:mm');
obj.endTime = moment(obj.time[1]).format('HH:mm');
delete obj.time;
if (checkTime(arr, obj.beginTime, meals[item.mealPeriodType])) {
validTime = true;
}
arr.push(obj);
}
});
if (validTime) {
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject('时间段不能交叉!');
}
return Promise.resolve();
};
// 风险提示 // 风险提示
const checkConfirm = () => { const checkConfirm = () => {
const mt = ''; const mt = '';
...@@ -170,10 +173,8 @@ const CustomerInfo = props => { ...@@ -170,10 +173,8 @@ const CustomerInfo = props => {
}; };
// 改变餐品类型 (选自助餐必选外卖) // 改变餐品类型 (选自助餐必选外卖)
const onChangeMealType = async ms => { const onChangeMealType = async ms => {
console.log('mealTypes', selectedMealTypes, ms);
try { try {
// 编辑时,取消餐段,提示确认 // 编辑时,取消餐段,提示确认
console.log('props.info :>> ', props.id);
if (props.id && ms.length < selectedMealTypes.length) { if (props.id && ms.length < selectedMealTypes.length) {
await checkConfirm(); await checkConfirm();
} }
...@@ -199,6 +200,7 @@ const CustomerInfo = props => { ...@@ -199,6 +200,7 @@ const CustomerInfo = props => {
}; };
// 改变餐段 // 改变餐段
const onChangeMealSection = e => { const onChangeMealSection = e => {
console.log(e);
const { id, checked, label } = e.target; const { id, checked, label } = e.target;
const values = Object.assign({}, meals); const values = Object.assign({}, meals);
if (checked) { if (checked) {
...@@ -206,6 +208,12 @@ const CustomerInfo = props => { ...@@ -206,6 +208,12 @@ const CustomerInfo = props => {
} else { } else {
delete values[id]; delete values[id];
} }
// 判断餐段配置是否都没选
if (Object.keys(values).length === 0) {
form.setFieldsValue({
mealTimePeriod: [],
});
}
setMeals(values); setMeals(values);
}; };
...@@ -239,7 +247,7 @@ const CustomerInfo = props => { ...@@ -239,7 +247,7 @@ const CustomerInfo = props => {
}; };
// 数据模型转换-消费限额, 转为{餐段: {餐品类型: 限额}} // 数据模型转换-消费限额, 转为{餐段: {餐品类型: 限额}}
const processMealLimit = mealLimit => { const processMealLimit = mealLimit => {
const mealLimitMap = []; const mealLimitMap = {};
mealLimit.forEach(item => { mealLimit.forEach(item => {
const { mealPeriodType, limit } = item; const { mealPeriodType, limit } = item;
...@@ -251,7 +259,6 @@ const CustomerInfo = props => { ...@@ -251,7 +259,6 @@ const CustomerInfo = props => {
{}, {},
); );
}); });
console.log('mealLimitMap :>> ', mealLimitMap);
return mealLimitMap; return mealLimitMap;
}; };
...@@ -290,7 +297,6 @@ const CustomerInfo = props => { ...@@ -290,7 +297,6 @@ const CustomerInfo = props => {
formData.mealTimePeriod = mealTimePeriodArr; formData.mealTimePeriod = mealTimePeriodArr;
formData.mealLimit = mealLimitMap; formData.mealLimit = mealLimitMap;
formData.mealTimePeriodMap = mealTimePeriodMap; formData.mealTimePeriodMap = mealTimePeriodMap;
return formData; return formData;
}; };
...@@ -325,11 +331,6 @@ const CustomerInfo = props => { ...@@ -325,11 +331,6 @@ const CustomerInfo = props => {
if (props.visible) { if (props.visible) {
if (props.id) { if (props.id) {
getInfo(); getInfo();
} else {
setSelectedMealTypes([]);
setMeals({});
form.resetFields();
getPickSelf();
} }
} }
}, [props.visible]); }, [props.visible]);
...@@ -420,7 +421,9 @@ const CustomerInfo = props => { ...@@ -420,7 +421,9 @@ const CustomerInfo = props => {
wrapperCol: { span: 12 }, wrapperCol: { span: 12 },
name: 'mealTimePeriod', name: 'mealTimePeriod',
rules: [{ required: true, message: '请选择餐段配置' }], rules: [{ required: true, message: '请选择餐段配置' }],
component: <MealSection meals={meals} onChange={onChangeMealSection} />, component: (
<MealSection meals={meals} validateMeals={validateMeals} onChange={onChangeMealSection} />
),
}, },
{ {
name: 'Divider', name: 'Divider',
...@@ -457,7 +460,7 @@ const CustomerInfo = props => { ...@@ -457,7 +460,7 @@ const CustomerInfo = props => {
destroyOnClose destroyOnClose
maskClosable={false} maskClosable={false}
width="900px" width="900px"
onOk={submitForm} onOk={validateForm}
onCancel={() => closeModal(0)} onCancel={() => closeModal(0)}
> >
<Form <Form
......
...@@ -7,6 +7,7 @@ const MealLimit = props => ( ...@@ -7,6 +7,7 @@ const MealLimit = props => (
<Form.Item <Form.Item
label={`${props.label}限额`} label={`${props.label}限额`}
name={props.name} name={props.name}
value={props.value}
rules={[ rules={[
{ validator: validateRequired, message: `请输入${props.label}限额` }, { validator: validateRequired, message: `请输入${props.label}限额` },
{ validator: isCheckPriceTwoDecimal, message: '请输入正确的价格' }, { validator: isCheckPriceTwoDecimal, message: '请输入正确的价格' },
......
...@@ -15,7 +15,12 @@ const MealSection = props => ( ...@@ -15,7 +15,12 @@ const MealSection = props => (
<Form.Item <Form.Item
name={[i, 'time']} name={[i, 'time']}
rules={ rules={
props.meals[field] ? [{ type: 'array', required: true, message: '请选择!' }] : [] props.meals[field]
? [
{ type: 'array', required: true, message: '请选择!' },
{ validator: props.validateMeals, message: '时间段不能交叉!' },
]
: []
} }
> >
<TimePicker.RangePicker format="HH:mm" minuteStep={30} /> <TimePicker.RangePicker format="HH:mm" minuteStep={30} />
......
...@@ -64,7 +64,7 @@ const BusinessCustomer = () => { ...@@ -64,7 +64,7 @@ const BusinessCustomer = () => {
</Button>, </Button>,
]} ]}
/> />
<CustomerInfo visible={visible} id={id} onClose={onClose} /> {visible && <CustomerInfo visible={visible} id={id} onClose={onClose} />}
</div> </div>
); );
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment