From 9070cf755d29e318a796c6bfee43eb9388818a4b Mon Sep 17 00:00:00 2001 From: chenglb Date: Sat, 25 Nov 2023 00:01:29 +0800 Subject: [PATCH] =?UTF-8?q?fix;=20=E4=BC=98=E6=83=A0=E5=88=B8=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=97=AE=E9=A2=98=E5=8D=95=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/form/FormCheckBox/index.scss | 3 ++ src/components/form/FormRadio/index.scss | 3 ++ src/config/utils.js | 13 +++++- .../CouponMgm/ActivitySpecificTopic/Add.jsx | 38 ++++++++++++---- .../CouponMgm/ActivitySpecificTopic/Detail.jsx | 17 +++----- .../ActivitySpecificTopic/TemplateConfig.jsx | 51 ++++++++-------------- .../CouponMgm/CouponDistribute/Add.jsx | 2 +- .../CouponMgm/CouponDistribute/loadable.jsx | 2 +- .../CouponMgm/CouponRules/index.scss | 3 ++ .../CouponMgm/CouponRules/loadable.jsx | 49 ++++++++++++++------- 10 files changed, 108 insertions(+), 73 deletions(-) diff --git a/src/components/form/FormCheckBox/index.scss b/src/components/form/FormCheckBox/index.scss index 55061c6..d20df99 100644 --- a/src/components/form/FormCheckBox/index.scss +++ b/src/components/form/FormCheckBox/index.scss @@ -19,4 +19,7 @@ width: auto; } } + .required{ + color: red; + } } diff --git a/src/components/form/FormRadio/index.scss b/src/components/form/FormRadio/index.scss index e23edfe..5c7f469 100644 --- a/src/components/form/FormRadio/index.scss +++ b/src/components/form/FormRadio/index.scss @@ -18,4 +18,7 @@ width: auto; } } + .required{ + color: red; + } } diff --git a/src/config/utils.js b/src/config/utils.js index 423ea35..db81d68 100644 --- a/src/config/utils.js +++ b/src/config/utils.js @@ -383,15 +383,24 @@ const utils = { let date = new Date(), dateBefore = new Date(date.getTime() - limit * 86400* 1000) let str = date.getFullYear()+"-" + ('0' + (date.getMonth() + 1)).slice(-2) +"-"+ ("0"+ date.getDate()).slice(-2), strBefore = dateBefore.getFullYear() +"-"+ ('0' + (dateBefore.getMonth() + 1)).slice(-2) +"-"+ ("0"+ dateBefore.getDate()).slice(-2); + if(limit > 0){ + return strBefore + ',' + str + } return str + ',' + strBefore }, createTimeStr: (minusOrAdd)=>{ let num = Number.isInteger(minusOrAdd) ? minusOrAdd : 0; let date = new Date(new Date().getTime() - num * 86400* 1000) let str = date.getFullYear()+"-" + ('0' + (date.getMonth() + 1)).slice(-2) +"-"+ ("0"+ date.getDate()).slice(-2) + ' ' + - ('0' + (date.getHours() + 1)).slice(-2) + ':' + ('0' + (date.getMinutes() + 1)).slice(-2) + ":" + ('0' + (date.getSeconds() + 1)).slice(-2) + ('0' + date.getHours()).slice(-2) + ':' + ('0' +date.getMinutes() ).slice(-2) + ":" + ('0' + date.getSeconds()).slice(-2) + return str + }, + createDateStr: (minusOrAdd)=>{ + let num = Number.isInteger(minusOrAdd) ? minusOrAdd : 0; + let date = new Date(new Date().getTime() - num * 86400* 1000) + let str = date.getFullYear()+"-" + ('0' + (date.getMonth() + 1)).slice(-2) +"-"+ ("0"+ date.getDate()).slice(-2) return str - } + }, } export default utils diff --git a/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Add.jsx b/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Add.jsx index 382e1c8..536f652 100644 --- a/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Add.jsx +++ b/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Add.jsx @@ -28,7 +28,7 @@ function Add(props) { }else{ setCouponList([{key:createKey() }]) } - },[record.coupon_list]) + },[record]) useEffect(()=>{ let temp = {...record} @@ -43,10 +43,10 @@ function Add(props) { if(record.start_time && record.end_time){ temp.activity_time = [moment(record.start_time ), moment(record.end_time )] }else{ - temp.activity_time = [moment(utils.createTimeStr() ), moment(utils.createTimeStr() )] + let temps = utils.createTimeStr(), tempe = utils.createTimeStr(); + temp.activity_time = [moment(temps ), moment(tempe )] } form.setFieldsValue(temp) - // },[record.start_time, record.end_time]) },[record]) function createKey() { @@ -83,16 +83,23 @@ function Add(props) { .validateFields() .then((values) => { // 判断优惠券的数据是否设置完整 - let flag = true, temparr = []; + let emptyflag = true, compareFlag = true, temparr = []; couponList.map(item=>{ if(!item.num || !item.total || !item.rule_id){ - flag = false + emptyflag = false + } + if(item.num > item.total){ + compareFlag = false } if(!temparr.includes(item.rule_id)){ temparr.push(item.rule_id) } }) - if(!flag){ + if(!compareFlag){ + message.error('每一种优惠券, 每次领取张数不能大于该优惠券总数') + return + } + if(!emptyflag){ message.error('优惠券数据设置不完整') return } @@ -104,9 +111,18 @@ function Add(props) { message.error('最多可关联10种优惠券类型') return } + if(values.everybody > values.everybody_total){ + message.error('每人每次可领取数不能大于每人可领取总数') + return + } let temp_time_range = values.activity_time.map((item) => { return item.format("YYYY-MM-DD HH:mm:ss"); }) + + if(new Date().getTime() > new Date(temp_time_range[0]).getTime() || new Date().toJSON().split('T')[0] == new Date(temp_time_range[0]).toJSON().split('T')[0]){ + message.error('活动时间只能选择当天以后的时间段') + return + } // delete values.activity_time; let params = { ...values, @@ -174,9 +190,13 @@ function Add(props) { // value={[ // moment(record.start_time ? record.start_time : utils.createTimeStr()), // moment(record.end_time ? record.end_time : utils.createTimeStr())]} - defaultValue={[ + defaultPickerValue ={[ moment(record.start_time ? record.start_time : utils.createTimeStr()), moment(record.end_time ? record.end_time : utils.createTimeStr())]} + // defaultValue={[ + // moment(record.start_time ? record.start_time : utils.createTimeStr()), + // moment(record.end_time ? record.end_time : utils.createTimeStr())]} + /> @@ -199,10 +219,10 @@ function Add(props) { */} - + - + diff --git a/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Detail.jsx b/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Detail.jsx index 7ce8c2d..515b775 100644 --- a/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Detail.jsx +++ b/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Detail.jsx @@ -4,20 +4,15 @@ import ajax from "@/services"; function index(props) { const { visible, close, record = {} } = props; const [coupon, setCoupon] = useState(""); - function getDetail(id) { - ajax.handleActivityView({ id }).then((res) => { - if (res.status === 20000) { - const { list } = res.data; - let _coupon = list.map((item) => { + + useEffect(() => { + if(record.coupon_list?.length){ + let _coupon = record.coupon_list.map((item) => { return `${item.name}-${item.num}张`; }); setCoupon(_coupon.join(",")); - } - }); - } - useEffect(() => { - // getDetail(record.id); - }, []); + } + }, [record]); return ( 返回} destroyOnClose> diff --git a/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/TemplateConfig.jsx b/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/TemplateConfig.jsx index 47c7f73..a6a0dfc 100644 --- a/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/TemplateConfig.jsx +++ b/src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/TemplateConfig.jsx @@ -15,7 +15,7 @@ function TemplateConfig(props) { // background : "#ffffff", // text_color: "red", description: record.description, - is_share: record.is_share || '1', + is_share: record.is_share, title: record.title, copywriting: record.copywriting, pic: record.pic @@ -70,18 +70,27 @@ function TemplateConfig(props) { // message.error('请上传活动头图') // return // } - if(formData.description == ''){ + if(!formData.description){ message.error('请输入活动说明') return + }else if(formData.description.length > 200){ + message.error('活动说明字数不能超过200字') + return } if(formData.is_share == '1'){ // 只有可以分享才验证这些字段是否为空 if(formData.title == ''){ message.error('请输入分享标题') return + }else if(formData.title.trim().length > 30){ + message.error('分享标题字数不能超过30字') + return } if(formData.copywriting == ''){ message.error('请输入分享文案') return + }else if(formData.copywriting.trim().length > 50){ + message.error('分享文案字数不能超过50字') + return } if(formData.pic == ''){ // todo message.error('请上传分享图片') @@ -117,36 +126,6 @@ function TemplateConfig(props) {
模板配置
- {/*
-
活动头图
-
- - {formData.activity_avatar ? ( - avatar - ) : ( - uploadButton - )} - -
-
-
-
背景颜色
-
{setFormData({...formData, background: e.target.value})}} />
-
-
-
文字颜色
-
{setFormData({...formData, text_color: e.target.value})}} />
-
*/}
活动说明
@@ -183,7 +162,13 @@ function TemplateConfig(props) { showUploadList={false} // action="http://10.10.128.65:3001/mock/11/v1/controlalarm/upload_image" action={`${baseApi}/api/com/common/file_upload`} - // beforeUpload={beforeUpload} + beforeUpload={(file)=>{ + const isPNG = file.type === 'image/png' || file.type === 'image/jpg' || file.type === 'image/jpeg'; + if (!isPNG) { + message.error(`仅支持上传图片`); + } + return isPNG || Upload.LIST_IGNORE; + }} onChange={handleShareChange} > {formData.pic ? ( diff --git a/src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/Add.jsx b/src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/Add.jsx index 872eba3..88fb738 100644 --- a/src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/Add.jsx +++ b/src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/Add.jsx @@ -126,7 +126,7 @@ function Add(props) { } let params = { ...values, - push_type: values.push_type.join(','), + push_type: values.push_type.length == 2 ? '3' : values.push_type.join(','), // activity_time: values.activity_time.map((item) => { // return item.format("YYYY-MM-DD"); // }), diff --git a/src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/loadable.jsx b/src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/loadable.jsx index 0ef95f9..18e58a0 100644 --- a/src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/loadable.jsx +++ b/src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/loadable.jsx @@ -253,7 +253,7 @@ function CouponDistribute(props) { 发放群组: {checkData.sending_type == '1' ? "按用户标签" : "按手机号"}
- 推送通知: {checkData.activity_name} + 推送通知: {checkData.push_type_zhname}
} diff --git a/src/pages/OperationCenter/OperationSales/CouponMgm/CouponRules/index.scss b/src/pages/OperationCenter/OperationSales/CouponMgm/CouponRules/index.scss index 9d8fbed..47f0021 100644 --- a/src/pages/OperationCenter/OperationSales/CouponMgm/CouponRules/index.scss +++ b/src/pages/OperationCenter/OperationSales/CouponMgm/CouponRules/index.scss @@ -94,6 +94,9 @@ $color-primary : var(--color-primary); border-top-left-radius: 8px; background-color: #505a6f; overflow: auto; + .ant-picker-range{ + width: 340px !important; + } } .custom-time-setting{ margin-bottom: 10px; diff --git a/src/pages/OperationCenter/OperationSales/CouponMgm/CouponRules/loadable.jsx b/src/pages/OperationCenter/OperationSales/CouponMgm/CouponRules/loadable.jsx index e6b2e77..486e05a 100644 --- a/src/pages/OperationCenter/OperationSales/CouponMgm/CouponRules/loadable.jsx +++ b/src/pages/OperationCenter/OperationSales/CouponMgm/CouponRules/loadable.jsx @@ -26,9 +26,9 @@ function CouponRules() { const [showEdit, setShowEdit] = useState(false) const [formData, setFormData] = useSetState({ - name: defaultParams ? defaultParams.name : '', - status: defaultParams ? defaultParams.status : '0', - coupon_type: defaultParams ? defaultParams.coupon_type : '0', + name: defaultParams.name ? defaultParams.name : '', + status: defaultParams.status ? defaultParams.status : '0', + coupon_type: defaultParams.coupon_type != undefined ? defaultParams.coupon_type : 0, }) const [operatorOptions, setOperatorOptions] = useState([]) // 运营商下拉框 const [departOptions, setDepartOptions] = useState([]) @@ -257,7 +257,7 @@ function CouponRules() { const addCoupon = ()=>{ setShowEdit(true) - setCurrentCouponInfo({type: 1}) + setCurrentCouponInfo({type: 1, mode: 1, partner: '青岛'}) } const onTransferChange = (nextTargetKeys, direction, moveKeys) => { @@ -383,7 +383,7 @@ function CouponRules() { } }else if(currentCouponInfo.type == 2){ // 满减 if(!currentCouponInfo.value){ - message.error('优惠券面值不能为空') + message.error('优惠券面值不能为空或者0') return false } if(!currentCouponInfo.value_condition){ @@ -400,9 +400,16 @@ function CouponRules() { message.error('欠费时长不能为空') return false } - if(currentCouponInfo.effective_date == 1 && currentCouponInfo.effctive_value?.length == 1){ - message.error('固定日期不能为空') - return false + if(currentCouponInfo.effective_date == 1){ + if(currentCouponInfo.effctive_value?.length == 1){ + message.error('固定日期不能为空') + return false + } + if(new Date().getTime() - new Date(currentCouponInfo.effctive_value.split(',')[0]).getTime() > 24*3600*1000){ + message.error('固定日期只能选择当前时间以后的时间段') + return false + } + } if(currentCouponInfo.use_scope == 1 && currentCouponInfo.use_content == ''){ @@ -444,7 +451,7 @@ function CouponRules() { useEffect(()=>{ if(currentCouponInfo.effective_date == 1 ){ if(!currentCouponInfo.effctive_value){ - setCurrentCouponInfo({...currentCouponInfo, effctive_value: utils.createTimeRange(180) }) + setCurrentCouponInfo({...currentCouponInfo, effctive_value: utils.createTimeRange(-180) }) } } if(currentCouponInfo.effective_date == 2 ){ @@ -513,7 +520,7 @@ function CouponRules() { {setCurrentCouponInfo({...currentCouponInfo, mode: e.target.value});}} + onChange={e=>{ + if(e.target.value == 1){ + setCurrentCouponInfo({...currentCouponInfo, mode: 1, partner: '青岛'}); + } else{ + setCurrentCouponInfo({...currentCouponInfo, mode: 2, partner: ''}); + } + }} /> {setCurrentCouponInfo({...currentCouponInfo, effctive_value: e.join(',')})}} - value={currentCouponInfo.effctive_value ? currentCouponInfo.effctive_value : utils.createTimeRange(180)} + value={currentCouponInfo.effctive_value ? currentCouponInfo.effctive_value : utils.createTimeRange(-180)} /> : currentCouponInfo.effective_date == 2?