|
|
@@ -1,19 +1,193 @@ |
|
|
|
import React, { useState } from "react"; |
|
|
|
import { Form, Button, Input, Image, Select, DatePicker, Upload, InputNumber } from 'antd'; |
|
|
|
import React, { useState, useEffect } from "react"; |
|
|
|
import { Form, Button, Input, Image, Select, DatePicker, Upload, InputNumber, Modal, message, Checkbox, Row, Col } from 'antd'; |
|
|
|
import styles from "../../index.less"; |
|
|
|
import { MinusCircleOutlined, PlusOutlined, UploadOutlined } from '@ant-design/icons'; |
|
|
|
import { MinusCircleOutlined, PlusOutlined, UploadOutlined, PlusCircleOutlined } from '@ant-design/icons'; |
|
|
|
import startAPI from "../../service"; |
|
|
|
import axios from 'axios'; |
|
|
|
const key = 'coupon'; |
|
|
|
import moment from "moment"; |
|
|
|
|
|
|
|
const activityConfigArray = [ |
|
|
|
{ |
|
|
|
"configId": null, |
|
|
|
"operator": null, |
|
|
|
"value1": [], |
|
|
|
"value2": null, |
|
|
|
"activity_Id": null, |
|
|
|
"configuration_Id": "2B0F88D6-EDA0-4AAC-BB0B-DD34F3245C17", |
|
|
|
"configurationName": "日参与次数限制", |
|
|
|
"configurationRule": "每日参与次数", |
|
|
|
"valueType": 1, |
|
|
|
"configurationValueCount": 1 |
|
|
|
}, |
|
|
|
{ |
|
|
|
"configId": null, |
|
|
|
"operator": null, |
|
|
|
"value1": [], |
|
|
|
"value2": null, |
|
|
|
"activity_Id": null, |
|
|
|
"configuration_Id": "8AC2A2BA-BB6E-4566-B147-ACF798146BBD", |
|
|
|
"configurationName": "星期限制", |
|
|
|
"configurationRule": "包含的星期", |
|
|
|
"valueType": 2, |
|
|
|
"configurationValueCount": 1 |
|
|
|
}, |
|
|
|
{ |
|
|
|
"configId": null, |
|
|
|
"operator": null, |
|
|
|
"value1": [], |
|
|
|
"value2": null, |
|
|
|
"activity_Id": null, |
|
|
|
"configuration_Id": "9620CCF9-679E-44B1-B8FF-9B6F511208FA", |
|
|
|
"configurationName": "消费金额", |
|
|
|
"configurationRule": "单笔订单消费金额", |
|
|
|
"valueType": 1, |
|
|
|
"configurationValueCount": 1 |
|
|
|
}, |
|
|
|
{ |
|
|
|
"configId": null, |
|
|
|
"operator": null, |
|
|
|
"value1": [], |
|
|
|
"value2": null, |
|
|
|
"activity_Id": null, |
|
|
|
"configuration_Id": "AF62B336-15A6-453B-AD4A-61EB7D43B99B", |
|
|
|
"configurationName": "商品种类限制", |
|
|
|
"configurationRule": "包含的商品种类", |
|
|
|
"valueType": 2, |
|
|
|
"configurationValueCount": 1 |
|
|
|
}, |
|
|
|
{ |
|
|
|
"configId": null, |
|
|
|
"operator": null, |
|
|
|
"value1": [], |
|
|
|
"value2": null, |
|
|
|
"activity_Id": null, |
|
|
|
"configuration_Id": "ECBACC1C-6BA8-498E-BDE4-6A012881E0E7", |
|
|
|
"configurationName": "门店限制", |
|
|
|
"configurationRule": "包含的门店", |
|
|
|
"valueType": 2, |
|
|
|
"configurationValueCount": 1 |
|
|
|
}, |
|
|
|
{ |
|
|
|
"configId": null, |
|
|
|
"operator": null, |
|
|
|
"value1": [], |
|
|
|
"value2": null, |
|
|
|
"activity_Id": null, |
|
|
|
"configuration_Id": "F06DEAD8-DDB8-4B27-94E9-389DE9AC155D", |
|
|
|
"configurationName": "总参与次数限制", |
|
|
|
"configurationRule": "总参与次数", |
|
|
|
"valueType": 1, |
|
|
|
"configurationValueCount": 1 |
|
|
|
} |
|
|
|
] |
|
|
|
|
|
|
|
const formItemLayout = { |
|
|
|
labelCol: { |
|
|
|
sm: { span: 4 }, |
|
|
|
}, |
|
|
|
wrapperCol: {}, |
|
|
|
}; |
|
|
|
|
|
|
|
const tailFormItemLayout = { |
|
|
|
wrapperCol: { |
|
|
|
sm: { |
|
|
|
span: 500, |
|
|
|
offset: 1, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* 阶梯消费换购 |
|
|
|
* @returns |
|
|
|
*/ |
|
|
|
const LadderExchange = () => { |
|
|
|
const LadderExchange = (props) => { |
|
|
|
|
|
|
|
const [couponInfo, SetCouponInfo] = useState([]); |
|
|
|
/** |
|
|
|
* 获取优惠券列表 |
|
|
|
*/ |
|
|
|
const onFetchCouponList = async () => { |
|
|
|
const response = await startAPI.GetCouponCanUseCountAndLimit(); |
|
|
|
if (response.succeeded) { |
|
|
|
SetCouponInfo(response.data); |
|
|
|
} |
|
|
|
} |
|
|
|
const [couponForm] = Form.useForm(); |
|
|
|
const [imgurl, setimgUrl] = useState(null); |
|
|
|
|
|
|
|
/** 新建/更新窗口的弹窗 */ |
|
|
|
const [createModalVisible, handleModalVisible] = useState(false); |
|
|
|
const [form] = Form.useForm(); |
|
|
|
|
|
|
|
/** 优惠券类型 */ |
|
|
|
const [couponType, setcouponType] = useState([]); |
|
|
|
|
|
|
|
/** 适用商品范围 */ |
|
|
|
const [applyGood, setApplyGood] = useState([]); |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取商品 |
|
|
|
*/ |
|
|
|
const onFetchGoods = async (goodsType = -1) => { |
|
|
|
const response = await startAPI.GetGoodsById(goodsType); |
|
|
|
if (response.statusCode === 200) { |
|
|
|
const array = []; |
|
|
|
Object.keys(response.data).forEach(item => { |
|
|
|
array.push({ |
|
|
|
id: item, |
|
|
|
name: response.data[item] |
|
|
|
}) |
|
|
|
}); |
|
|
|
setApplyGood(array) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取适用店铺 |
|
|
|
*/ |
|
|
|
const GetStores = async () => { |
|
|
|
const response = await startAPI.GetStores(); |
|
|
|
if (response.statusCode === 200) { |
|
|
|
setApplicableStore(response.data); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取消费券类型 |
|
|
|
*/ |
|
|
|
const GetCouponStatusOrType = async () => { |
|
|
|
await startAPI.GetCouponStatusOrType(2).then((r) => { |
|
|
|
if (r.succeeded) { |
|
|
|
setcouponType(r.data); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/** 适用门店范围 */ |
|
|
|
const [applicableStore, setApplicableStore] = useState([]); |
|
|
|
|
|
|
|
/** 适用商品类型范围 */ |
|
|
|
const [applyGoodType, setApplyGoodType] = useState([]); |
|
|
|
|
|
|
|
/** |
|
|
|
* 适用商品范围 |
|
|
|
*/ |
|
|
|
const onFetchGoodsType = async () => { |
|
|
|
const response = await startAPI.GetGoodsType(); |
|
|
|
if (response.statusCode === 200) { |
|
|
|
const array = []; |
|
|
|
Object.keys(response.data).forEach(item => { |
|
|
|
array.push({ |
|
|
|
id: item, |
|
|
|
name: response.data[item] |
|
|
|
}) |
|
|
|
}) |
|
|
|
setApplyGoodType(array); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const uploadProp = { |
|
|
|
name: 'file', |
|
|
|
showUploadList: false, |
|
|
@@ -73,6 +247,122 @@ const LadderExchange = () => { |
|
|
|
}, |
|
|
|
}; |
|
|
|
|
|
|
|
//新增 |
|
|
|
const handleAddCoupon = async (fields) => { |
|
|
|
fields.RangeType = 1; |
|
|
|
message.loading('正在添加...', key); |
|
|
|
try { |
|
|
|
if (fields.validEndTime < fields.validStartTime) { |
|
|
|
message.error('开始时间不能大于结束时间'); |
|
|
|
} |
|
|
|
await startAPI.Addcoupon(JSON.stringify(fields)).then((r) => { |
|
|
|
message.destroy(key); |
|
|
|
if (r.data) { |
|
|
|
message.success('添加成功'); |
|
|
|
onFetchCouponList(); |
|
|
|
handleModalVisible(false); |
|
|
|
} else { |
|
|
|
message.error('添加失败请重试!'); |
|
|
|
} |
|
|
|
}); |
|
|
|
} catch (error) { |
|
|
|
message.destroy(key); |
|
|
|
message.error('添加失败请重试!'); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
const hander = async (value) => { |
|
|
|
var res = (await startAPI.GetSelectedConfig(value)).data; |
|
|
|
var arr = []; |
|
|
|
for (let k in res) { |
|
|
|
arr.push({ |
|
|
|
id: k.toString(), |
|
|
|
name: res[k.toString()], |
|
|
|
}); |
|
|
|
} |
|
|
|
setApplicableStore(data); |
|
|
|
form.setFieldsValue({ Relation: [] }); |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* 提交 |
|
|
|
* @param {*} values |
|
|
|
*/ |
|
|
|
const onSubmitActivity = async (values) => { |
|
|
|
values.activityType = props.currentActivityType; |
|
|
|
values.activityRewards.forEach(item => { |
|
|
|
item.id = ""; |
|
|
|
item.activityInfo_Id = ""; |
|
|
|
}) |
|
|
|
values.activityStartTime = moment(values.activityStartAndEndTime[0]).format('YYYY-MM-DD'); |
|
|
|
values.activityEndTime = moment(values.activityStartAndEndTime[1]).format('YYYY-MM-DD'); |
|
|
|
values.status = 0; |
|
|
|
values.isShow = 1; |
|
|
|
values.isDeleted = 0; |
|
|
|
values.activityConfiguration = []; |
|
|
|
values.activityConfig.forEach(config => { |
|
|
|
const findConfig = activityConfigArray.find(item => item.configuration_Id === config); |
|
|
|
if (findConfig) { |
|
|
|
findConfig.configId = [findConfig.configuration_Id]; |
|
|
|
if (findConfig.configurationName === '日参与次数限制') { |
|
|
|
findConfig.operator = values.dayOperator; |
|
|
|
findConfig.value1 = values.dayValue; |
|
|
|
} else if (findConfig.configurationName === '星期限制') { |
|
|
|
findConfig.operator = values.weekOperator; |
|
|
|
findConfig.value1 = values.weekValue; |
|
|
|
} else if (findConfig.configurationName === '消费金额') { |
|
|
|
findConfig.operator = values.amountOperator; |
|
|
|
findConfig.value1 = values.amountValue; |
|
|
|
} else if (findConfig.configurationName === '商品种类限制') { |
|
|
|
findConfig.operator = values.goodsTypeOperator; |
|
|
|
findConfig.value1 = values.goodsTypeValue; |
|
|
|
} else if (findConfig.configurationName === '门店限制') { |
|
|
|
findConfig.operator = values.storeOperator; |
|
|
|
findConfig.value1 = values.storeValue; |
|
|
|
} else if (findConfig.configurationName === '总参与次数限制') { |
|
|
|
findConfig.operator = values.totalOperator; |
|
|
|
findConfig.value1 = values.totalValue; |
|
|
|
} |
|
|
|
values.activityConfiguration.push(findConfig); |
|
|
|
} |
|
|
|
}); |
|
|
|
delete values.activityConfig; |
|
|
|
delete values.activityStartAndEndTime; |
|
|
|
|
|
|
|
delete values.amountOperator; |
|
|
|
delete values.amountValue; |
|
|
|
|
|
|
|
delete values.dayOperator; |
|
|
|
delete values.dayValue; |
|
|
|
|
|
|
|
delete values.goodsTypeOperator; |
|
|
|
delete values.goodsTypeValue; |
|
|
|
|
|
|
|
delete values.storeOperator; |
|
|
|
delete values.storeValue; |
|
|
|
|
|
|
|
delete values.totalOperator; |
|
|
|
delete values.totalValue; |
|
|
|
|
|
|
|
delete values.weekOperator; |
|
|
|
delete values.weekValue; |
|
|
|
const response = await startAPI.FastAddActivity(values); |
|
|
|
if (response.statusCode === 200) { |
|
|
|
message.success('新建活动成功!'); |
|
|
|
couponForm.resetFields(); |
|
|
|
} else { |
|
|
|
message.error(response.errors || '创建失败 请重试!'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
GetCouponStatusOrType(); |
|
|
|
onFetchCouponList(); |
|
|
|
onFetchGoodsType(); |
|
|
|
GetStores(); |
|
|
|
onFetchGoods(); |
|
|
|
}, []); |
|
|
|
|
|
|
|
return <div className={styles.activity_form_container} > |
|
|
|
<Form |
|
|
|
form={couponForm} |
|
|
@@ -84,7 +374,7 @@ const LadderExchange = () => { |
|
|
|
remember: true, |
|
|
|
}} |
|
|
|
onFinish={(values) => { |
|
|
|
console.log('values', values); |
|
|
|
onSubmitActivity(values); |
|
|
|
}} |
|
|
|
layout="vertical" |
|
|
|
autoComplete="off" |
|
|
@@ -169,15 +459,15 @@ const LadderExchange = () => { |
|
|
|
fieldKey={[fieldKey, 'rewardValue']} |
|
|
|
rules={[{ required: true, message: '请输入消费次数' }]} |
|
|
|
> |
|
|
|
<InputNumber style={{ width: '200px' }} placeholder="请输入消费次数" /> |
|
|
|
<InputNumber style={{ width: '150px' }} placeholder="请输入消费次数" /> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<div style={{ margin: '0 10px 24px 20px' }}>赠送优惠券:</div> |
|
|
|
|
|
|
|
<Form.Item |
|
|
|
{...restField} |
|
|
|
name={[name, 'rewardValue']} |
|
|
|
fieldKey={[fieldKey, 'rewardValue']} |
|
|
|
name={[name, 'value']} |
|
|
|
fieldKey={[fieldKey, 'value']} |
|
|
|
rules={[{ required: true, message: '请选择优惠券' }]} |
|
|
|
> |
|
|
|
<Select |
|
|
@@ -187,17 +477,32 @@ const LadderExchange = () => { |
|
|
|
}} |
|
|
|
|
|
|
|
> |
|
|
|
<Option value="jack">优惠券1</Option> |
|
|
|
{couponInfo.map((item, index) => { |
|
|
|
return ( |
|
|
|
<Select.Option |
|
|
|
index={index} |
|
|
|
value={item.couponId} |
|
|
|
key={item.couponId} |
|
|
|
> |
|
|
|
{item.couponName} |
|
|
|
</Select.Option> |
|
|
|
); |
|
|
|
})} |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<PlusCircleOutlined onClick={() => handleModalVisible(true)} style={{ margin: '0 10px', flexShrink: 0, marginBottom: '24px', fontSize: '25px', color: '#F84352' }} /> |
|
|
|
|
|
|
|
<MinusCircleOutlined style={{ fontSize: '25px', marginLeft: '20px', marginBottom: '24px' }} onClick={() => remove(name)} /> |
|
|
|
</div> |
|
|
|
))} |
|
|
|
<Form.Item> |
|
|
|
<Button |
|
|
|
type="dashed" |
|
|
|
onClick={() => add()} |
|
|
|
onClick={() => { |
|
|
|
if (props.currentActivityType === 7 && fields.length > 0) return; |
|
|
|
add(); |
|
|
|
}} |
|
|
|
style={{ |
|
|
|
width: '100%', |
|
|
|
}} |
|
|
@@ -213,7 +518,7 @@ const LadderExchange = () => { |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<Form.Item |
|
|
|
name="activityStartTime" |
|
|
|
name="activityStartAndEndTime" |
|
|
|
label="起止时间" |
|
|
|
rules={[{ required: true }]} |
|
|
|
> |
|
|
@@ -242,6 +547,179 @@ const LadderExchange = () => { |
|
|
|
</Upload> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<Form.Item name="isAutoSend" label="参与方式" rules={[{ required: true }]}> |
|
|
|
<Select placeholder="请选择参与方式"> |
|
|
|
<Select.Option value={0}>点击参与(需要用户主动点击)</Select.Option> |
|
|
|
<Select.Option value={1}>自动参与(满足特定条件自动参与)</Select.Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<Form.Item name="activityConfig" label="活动配置" rules={[{ required: true, message: '请至少选择一个活动配置!' }]}> |
|
|
|
<Checkbox.Group style={{ |
|
|
|
width: '100%', |
|
|
|
}}> |
|
|
|
<Row> |
|
|
|
{ |
|
|
|
activityConfigArray.map((config, index) => { |
|
|
|
return <Col key={index} span={24} style={{ marginBottom: '10px', display: 'flex', alignItems: 'center' }}> |
|
|
|
<Checkbox style={{ minWidth: '230px' }} value={config.configuration_Id}>{config.configurationName}:{config.configurationRule}</Checkbox> |
|
|
|
{index === 0 && ( |
|
|
|
<> |
|
|
|
<Form.Item |
|
|
|
name="dayOperator" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Select style={{ width: 80, margin: '0 20px' }} size='Small' placeholder="条件"> |
|
|
|
<Select.Option value=">">大于</Select.Option> |
|
|
|
<Select.Option value="<">小于</Select.Option> |
|
|
|
<Select.Option value="==">等于</Select.Option> |
|
|
|
<Select.Option value=">=and<=">包含</Select.Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
name="dayValue" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Input style={{ width: 280 }} placeholder="每日参与次数" /> |
|
|
|
</Form.Item> |
|
|
|
</> |
|
|
|
)} |
|
|
|
{index === 1 && ( |
|
|
|
<> |
|
|
|
<Form.Item |
|
|
|
name="weekOperator" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Select style={{ width: 80, margin: '0 20px' }} size='Small' placeholder="条件"> |
|
|
|
<Select.Option value=">">大于</Select.Option> |
|
|
|
<Select.Option value="<">小于</Select.Option> |
|
|
|
<Select.Option value="==">等于</Select.Option> |
|
|
|
<Select.Option value=">=and<=">包含</Select.Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
name="weekValue" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Select style={{ width: 280 }} size='Small' mode="multiple" placeholder="星期"> |
|
|
|
<Select.Option value="1">星期一</Select.Option> |
|
|
|
<Select.Option value="2">星期二</Select.Option> |
|
|
|
<Select.Option value="3">星期三</Select.Option> |
|
|
|
<Select.Option value="4">星期四</Select.Option> |
|
|
|
<Select.Option value="5">星期五</Select.Option> |
|
|
|
<Select.Option value="6">星期六</Select.Option> |
|
|
|
<Select.Option value="0">星期日</Select.Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
</> |
|
|
|
)} |
|
|
|
{index === 2 && ( |
|
|
|
<> |
|
|
|
<Form.Item |
|
|
|
name="amountOperator" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Select style={{ width: 80, margin: '0 20px' }} size='Small' placeholder="条件"> |
|
|
|
<Select.Option value=">">大于</Select.Option> |
|
|
|
<Select.Option value="<">小于</Select.Option> |
|
|
|
<Select.Option value="==">等于</Select.Option> |
|
|
|
<Select.Option value=">=and<=">包含</Select.Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
name="amountValue" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Input style={{ width: 280 }} placeholder="消费金额" /> |
|
|
|
</Form.Item> |
|
|
|
</> |
|
|
|
)} |
|
|
|
{index === 3 && ( |
|
|
|
<> |
|
|
|
<Form.Item |
|
|
|
name="goodsTypeOperator" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Select style={{ width: 80, margin: '0 20px' }} size='Small' placeholder="条件"> |
|
|
|
<Select.Option value=">">大于</Select.Option> |
|
|
|
<Select.Option value="<">小于</Select.Option> |
|
|
|
<Select.Option value="==">等于</Select.Option> |
|
|
|
<Select.Option value=">=and<=">包含</Select.Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
name="goodsTypeValue" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Select style={{ width: 280 }} size='Small' placeholder="商品种类" mode="multiple"> |
|
|
|
{ |
|
|
|
applyGoodType.map(item => { |
|
|
|
return <Select.Option value={item.id} key={item.id}> |
|
|
|
{item.name} |
|
|
|
</Select.Option> |
|
|
|
}) |
|
|
|
} |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
</> |
|
|
|
)} |
|
|
|
{index === 4 && ( |
|
|
|
<> |
|
|
|
<Form.Item |
|
|
|
name="storeOperator" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Select style={{ width: 80, margin: '0 20px' }} size='Small' placeholder="条件"> |
|
|
|
<Select.Option value=">">大于</Select.Option> |
|
|
|
<Select.Option value="<">小于</Select.Option> |
|
|
|
<Select.Option value="==">等于</Select.Option> |
|
|
|
<Select.Option value=">=and<=">包含</Select.Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
name="storeValue" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Select style={{ width: 280 }} size='Small' mode="multiple" placeholder="门店"> |
|
|
|
{ |
|
|
|
applicableStore.map(item => { |
|
|
|
return <Select.Option value={item.id} key={item.id}> |
|
|
|
{item.name} |
|
|
|
</Select.Option> |
|
|
|
}) |
|
|
|
} |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
</> |
|
|
|
)} |
|
|
|
{index === 5 && ( |
|
|
|
<> |
|
|
|
<Form.Item |
|
|
|
name="totalOperator" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Select style={{ width: 80, margin: '0 20px' }} size='Small' placeholder="条件"> |
|
|
|
<Select.Option value=">">大于</Select.Option> |
|
|
|
<Select.Option value="<">小于</Select.Option> |
|
|
|
<Select.Option value="==">等于</Select.Option> |
|
|
|
<Select.Option value=">=and<=">包含</Select.Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
name="totalValue" |
|
|
|
noStyle |
|
|
|
> |
|
|
|
<Input style={{ width: 280 }} placeholder="总次数" /> |
|
|
|
</Form.Item> |
|
|
|
</> |
|
|
|
)} |
|
|
|
</Col> |
|
|
|
}) |
|
|
|
} |
|
|
|
</Row> |
|
|
|
</Checkbox.Group> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<Form.Item> |
|
|
|
<Button type="primary" htmlType="submit"> |
|
|
|
提交 |
|
|
@@ -253,8 +731,203 @@ const LadderExchange = () => { |
|
|
|
重置 |
|
|
|
</Button> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
</Form> |
|
|
|
|
|
|
|
<Modal |
|
|
|
maskClosable={false} |
|
|
|
title="新建优惠卷" |
|
|
|
width={700} |
|
|
|
visible={createModalVisible} |
|
|
|
footer={null} //底部内容 |
|
|
|
//取消 |
|
|
|
onCancel={() => { |
|
|
|
handleModalVisible(false); |
|
|
|
}} |
|
|
|
//关闭时销毁 Modal 里的子元素 |
|
|
|
destroyOnClose |
|
|
|
> |
|
|
|
<Form |
|
|
|
form={form} |
|
|
|
{...formItemLayout} |
|
|
|
layout="Horizontal" |
|
|
|
preserve={false} |
|
|
|
onFinish={(values) => { |
|
|
|
handleAddCoupon(values) |
|
|
|
}} |
|
|
|
> |
|
|
|
<Form.Item name="id" hidden={true}> |
|
|
|
<Input /> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item name="couponTitle" label="优惠卷标题" rules={[{ required: true, max: 200 }]}> |
|
|
|
<Input placeholder="请输入优惠卷标题" /> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
name="couponType" |
|
|
|
label="优惠卷类型" |
|
|
|
rules={[{ required: true }]} |
|
|
|
> |
|
|
|
<Select placeholder="请选择优惠卷类型"> |
|
|
|
{ |
|
|
|
couponType.map(item => { |
|
|
|
return <Select.Option key={item.key} value={item.key} > |
|
|
|
{item.value} |
|
|
|
</Select.Option> |
|
|
|
}) |
|
|
|
} |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item {...tailFormItemLayout} style={{ height: 32 }}> |
|
|
|
<Form.Item label="优惠金额" style={{ float: 'left' }} rules={[{ required: true }]}> |
|
|
|
<Form.Item name="couponValue" noStyle> |
|
|
|
<InputNumber placeholder="金额" min={0} precision={2} /> |
|
|
|
</Form.Item> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
label="使用条件" |
|
|
|
style={{ float: 'left', marginLeft: 10 }} |
|
|
|
rules={[{ required: true }]} |
|
|
|
> |
|
|
|
<Form.Item name="condition" noStyle> |
|
|
|
<InputNumber placeholder="使用条件" min={0} precision={2} /> |
|
|
|
</Form.Item> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
label="每人可领数量" |
|
|
|
style={{ float: 'left', marginLeft: 10 }} |
|
|
|
rules={[{ required: true }]} |
|
|
|
> |
|
|
|
<Form.Item name="getLimit" noStyle> |
|
|
|
<InputNumber placeholder="可领数量" min={0} precision={0} /> |
|
|
|
</Form.Item> |
|
|
|
<span style={{ color: '#FFCC52' }}> 0 为不限制</span> |
|
|
|
</Form.Item> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item name="timeType" label="时间类型" rules={[{ required: true }]}> |
|
|
|
<Select> |
|
|
|
<Select.Option value={1}>时间段</Select.Option> |
|
|
|
<Select.Option value={2}>固定期限</Select.Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
noStyle |
|
|
|
shouldUpdate={(prevValues, currentValues) => |
|
|
|
prevValues.timeType !== currentValues.timeType |
|
|
|
} |
|
|
|
> |
|
|
|
{({ getFieldValue }) => |
|
|
|
getFieldValue('timeType') == '2' ? ( |
|
|
|
<Form.Item label="固定时间" rules={[{ required: true }]}> |
|
|
|
<Form.Item name="validFixedTerm" noStyle> |
|
|
|
<InputNumber placeholder="" precision={0} min={0} /> |
|
|
|
</Form.Item> |
|
|
|
</Form.Item> |
|
|
|
) : ( |
|
|
|
<Form.Item {...tailFormItemLayout} style={{ height: 32 }}> |
|
|
|
<Form.Item |
|
|
|
name="validStartTime" |
|
|
|
label="开始时间" |
|
|
|
style={{ float: 'left' }} |
|
|
|
rules={[{ required: true }]} |
|
|
|
> |
|
|
|
<DatePicker placeholder="开始时间" /> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
name="validEndTime" |
|
|
|
label="结束时间" |
|
|
|
style={{ float: 'left', marginLeft: 20 }} |
|
|
|
rules={[{ required: true }]} |
|
|
|
> |
|
|
|
<DatePicker placeholder="结束时间" /> |
|
|
|
</Form.Item> |
|
|
|
</Form.Item> |
|
|
|
) |
|
|
|
} |
|
|
|
</Form.Item> |
|
|
|
<Form.Item name="validStatus" label="状态" rules={[{ required: true }]}> |
|
|
|
<Select placeholder="状态"> |
|
|
|
<Option value={1}>生效</Option> |
|
|
|
<Option value={2}>失效</Option> |
|
|
|
<Option value={3}>作废</Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<Form.Item noStyle> |
|
|
|
<Form.Item name="remarks" label="备注" rules={[{ max: 500 }]}> |
|
|
|
<Input placeholder="备注" /> |
|
|
|
</Form.Item> |
|
|
|
<span style={{ color: '#FFCC52', marginLeft: 70 }}> |
|
|
|
注: 多条规则请用 ; 隔开。 如:1.xxxxxx; 2.xxxxxx |
|
|
|
</span> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<Form.Item name="Coupon_Id" hidden={true}> |
|
|
|
<Input /> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item name="SendNum" label="发放数量" rules={[{ required: true }]}> |
|
|
|
<InputNumber placeholder="发放数量" min={0} style={{ width: '510px' }} /> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<Form.Item name="RangeType" label="适用范围类型" hidden={true} defaultValue={1}> |
|
|
|
<Select placeholder="发放范围" onSelect={hander} defaultValue={1}> |
|
|
|
<Select.Option value="1">店铺</Select.Option> |
|
|
|
{/* <Select.Option value="2">供应商</Select.Option> */} |
|
|
|
<Select.Option value="3">区域</Select.Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<Form.Item name="Relation" label="适用范围" rules={[{ required: true }]} defaultValue="1"> |
|
|
|
<Select placeholder="适用范围" filterOption={false} mode="multiple"> |
|
|
|
{ |
|
|
|
applicableStore.map(item => { |
|
|
|
return <Select.Option value={item.id} key={item.id}> |
|
|
|
{item.name} |
|
|
|
</Select.Option> |
|
|
|
}) |
|
|
|
} |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item name="applyGoodType" label="适用商品类型"> |
|
|
|
<Select placeholder="适用商品类型" filterOption={false} onChange={(value) => { |
|
|
|
onFetchGoods(value); |
|
|
|
}}> |
|
|
|
{ |
|
|
|
applyGoodType.map(item => { |
|
|
|
return <Select.Option value={item.id} key={item.id}> |
|
|
|
{item.name} |
|
|
|
</Select.Option> |
|
|
|
}) |
|
|
|
} |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item name="goodsRelation" label="适用商品范围"> |
|
|
|
<Select placeholder="适用商品范围" filterOption={false} mode="multiple"> |
|
|
|
{ |
|
|
|
applyGood.map(item => { |
|
|
|
return <Select.Option value={item.id} key={item.id}> |
|
|
|
{item.name} |
|
|
|
</Select.Option> |
|
|
|
}) |
|
|
|
} |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item name="Status" label="状态" rules={[{ required: true }]} defaultValue="1"> |
|
|
|
<Select placeholder="请选择状态"> |
|
|
|
<Select.Option value="1">启用</Select.Option> |
|
|
|
<Select.Option value="0">禁用</Select.Option> |
|
|
|
</Select> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<Form.Item name="Remark" label="备注"> |
|
|
|
<Input placeholder="备注" /> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<Form.Item> |
|
|
|
<Button type="primary" htmlType="submit" style={{ float: 'right' }}> |
|
|
|
保存 |
|
|
|
</Button> |
|
|
|
</Form.Item> |
|
|
|
</Form> |
|
|
|
</Modal> |
|
|
|
</div> |
|
|
|
} |
|
|
|
|