Browse Source

fix : 优惠券问题修改

tags/PMS_Frontend_v1.0.6-develop
chenglb 1 year ago
parent
commit
09239d66b5
  1. 443
      src/assets/fonts/font_pda/demo_index.html
  2. 88
      src/assets/fonts/font_pda/iconfont.css
  3. 2
      src/assets/fonts/font_pda/iconfont.js
  4. 133
      src/assets/fonts/font_pda/iconfont.json
  5. BIN
      src/assets/fonts/font_pda/iconfont.ttf
  6. BIN
      src/assets/fonts/font_pda/iconfont.woff
  7. BIN
      src/assets/fonts/font_pda/iconfont.woff2
  8. BIN
      src/assets/images/red_package.png
  9. BIN
      src/assets/images/template_bg.jpg
  10. 11
      src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Add.jsx
  11. 30
      src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Detail.jsx
  12. 58
      src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/TemplateConfig.jsx
  13. 65
      src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/index.scss
  14. 7
      src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/loadable.jsx
  15. 3
      src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/index.scss
  16. 12
      src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/loadable.jsx
  17. 101
      src/pages/OperationCenter/OperationSales/CouponMgm/CouponRules/loadable.jsx
  18. 3
      src/services/OperationCenter/OperationSales/index.js

443
src/assets/fonts/font_pda/demo_index.html
File diff suppressed because it is too large
View File

88
src/assets/fonts/font_pda/iconfont.css
File diff suppressed because it is too large
View File

2
src/assets/fonts/font_pda/iconfont.js
File diff suppressed because it is too large
View File

133
src/assets/fonts/font_pda/iconfont.json

@ -6,6 +6,139 @@
"description": "",
"glyphs": [
{
"icon_id": "21800722",
"name": "时间",
"font_class": "shijian",
"unicode": "e61c",
"unicode_decimal": 58908
},
{
"icon_id": "37735919",
"name": "业务配置",
"font_class": "yewupeizhi",
"unicode": "e783",
"unicode_decimal": 59267
},
{
"icon_id": "37735918",
"name": "异常管理",
"font_class": "yichangguanli",
"unicode": "e784",
"unicode_decimal": 59268
},
{
"icon_id": "37735911",
"name": "商户管理员",
"font_class": "shanghuguanliyuan",
"unicode": "e785",
"unicode_decimal": 59269
},
{
"icon_id": "37735922",
"name": "电子发票",
"font_class": "dianzifapiao",
"unicode": "e786",
"unicode_decimal": 59270
},
{
"icon_id": "37735916",
"name": "管理员管理",
"font_class": "guanliyuanguanli",
"unicode": "e787",
"unicode_decimal": 59271
},
{
"icon_id": "37735921",
"name": "区域管理",
"font_class": "quyuguanli",
"unicode": "e788",
"unicode_decimal": 59272
},
{
"icon_id": "37735917",
"name": "支付配置",
"font_class": "zhifupeizhi",
"unicode": "e789",
"unicode_decimal": 59273
},
{
"icon_id": "37735908",
"name": "异常处理",
"font_class": "yichangchuli",
"unicode": "e78a",
"unicode_decimal": 59274
},
{
"icon_id": "37735915",
"name": "发票配置",
"font_class": "fapiaopeizhi",
"unicode": "e78b",
"unicode_decimal": 59275
},
{
"icon_id": "37735913",
"name": "财务报表",
"font_class": "caiwubaobiao",
"unicode": "e78c",
"unicode_decimal": 59276
},
{
"icon_id": "37735914",
"name": "订单查询",
"font_class": "dingdanchaxun",
"unicode": "e78d",
"unicode_decimal": 59277
},
{
"icon_id": "37735912",
"name": "业务记录",
"font_class": "yewujilu",
"unicode": "e78e",
"unicode_decimal": 59278
},
{
"icon_id": "37735910",
"name": "组织架构",
"font_class": "zuzhijiagou",
"unicode": "e78f",
"unicode_decimal": 59279
},
{
"icon_id": "37735907",
"name": "功能信息",
"font_class": "gongnengxinxi",
"unicode": "e790",
"unicode_decimal": 59280
},
{
"icon_id": "37735909",
"name": "角色管理",
"font_class": "jiaoseguanli",
"unicode": "e791",
"unicode_decimal": 59281
},
{
"icon_id": "37735924",
"name": "交易流水",
"font_class": "jiaoyiliushui",
"unicode": "e780",
"unicode_decimal": 59264
},
{
"icon_id": "37735920",
"name": "商户信息",
"font_class": "shanghuxinxi",
"unicode": "e781",
"unicode_decimal": 59265
},
{
"icon_id": "37735923",
"name": "清分结算",
"font_class": "qingfenjiesuan",
"unicode": "e782",
"unicode_decimal": 59266
},
{
"icon_id": "37198877",
"name": "路内停车",
"font_class": "luneitingche",

BIN
src/assets/fonts/font_pda/iconfont.ttf

BIN
src/assets/fonts/font_pda/iconfont.woff

BIN
src/assets/fonts/font_pda/iconfont.woff2

BIN
src/assets/images/red_package.png

After

Width: 1044  |  Height: 840  |  Size: 30 KiB

BIN
src/assets/images/template_bg.jpg

After

Width: 1080  |  Height: 2026  |  Size: 159 KiB

11
src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Add.jsx

@ -82,6 +82,17 @@ function Add(props) {
form
.validateFields()
.then((values) => {
//
let flag = true;
couponList.map(item=>{
if(!item.num || !item.total || !item.rule_id){
flag = false
}
})
if(!flag){
message.error('优惠券数据设置不完整')
return
}
let temp_time_range = values.activity_time.map((item) => {
return item.format("YYYY-MM-DD HH:mm:ss");
})

30
src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/Detail.jsx

@ -1,5 +1,5 @@
import React, { useEffect, useState } from "react";
import { Descriptions, Modal } from "antd";
import { Descriptions, Modal ,Button} from "antd";
import ajax from "@/services";
function index(props) {
const { visible, close, record = {} } = props;
@ -19,31 +19,19 @@ function index(props) {
// getDetail(record.id);
}, []);
return (
<Modal open={visible} onCancel={close} width={1200} destroyOnClose>
<Modal open={visible} onCancel={close} width={1200} footer={<Button onClick={close}>返回</Button>} destroyOnClose>
<Descriptions title="活动详情">
<Descriptions.Item label="活动名称">
{record.activity_name}
</Descriptions.Item>
<Descriptions.Item label="活动时间">{record.time}</Descriptions.Item>
<Descriptions.Item label="活动名称">{record.activity_name} </Descriptions.Item>
<Descriptions.Item label="活动时间">{record.start_time}{record.end_time}</Descriptions.Item>
<Descriptions.Item label="关联优惠券">{coupon}</Descriptions.Item>
<Descriptions.Item label="领取规则">
{record.activity_name}
</Descriptions.Item>
<Descriptions.Item label="领取规则">活动期间每人每日可领取{record.everybody},每人总共可领取{record.everybody_total}</Descriptions.Item>
<Descriptions.Item label="发行量">{record.issue_num}</Descriptions.Item>
<Descriptions.Item label="领取量">
{record.examine_num}
</Descriptions.Item>
<Descriptions.Item label="领取量">{record.examine_num} </Descriptions.Item>
<Descriptions.Item label="使用量">{record.apply_num}</Descriptions.Item>
<Descriptions.Item label="活动状态">
{record.active_status}
</Descriptions.Item>
<Descriptions.Item label="审核状态">
{record.is_examine}
</Descriptions.Item>
<Descriptions.Item label="活动状态">{record.status_zhname}</Descriptions.Item>
<Descriptions.Item label="审核状态">{record.is_examine_zhname} </Descriptions.Item>
<Descriptions.Item label="创建人">{record.founder}</Descriptions.Item>
<Descriptions.Item label="创建时间">
{record.create_time}
</Descriptions.Item>
<Descriptions.Item label="创建时间">{record.create_time} </Descriptions.Item>
</Descriptions>
</Modal>
);

58
src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/TemplateConfig.jsx

@ -13,9 +13,9 @@ function TemplateConfig(props) {
// id: record.id,
// activity_avatar : '',
// background : "#ffffff",
// text_color: "#000000",
// text_color: "red",
description: record.description,
is_share: record.is_share,
is_share: record.is_share || '1',
title: record.title,
copywriting: record.copywriting,
pic: record.pic
@ -82,32 +82,36 @@ function TemplateConfig(props) {
message.error('请输入分享文案')
return
}
// if(formData.pic == ''){ // todo
// message.error('')
// return
// }
if(formData.pic == ''){ // todo
message.error('请上传分享图片')
return
}
ajax.getTemplateInsert({...formData, id: record.id}).then((res) => {
if (res.status === 20000) {
message.success("添加成功");
setFormData({
description: "", //
is_share: "1",
title: "",
copywriting: "",
pic: ""
})
resetFormData()
close()
}
});
}
const resetFormData = ()=>{
setFormData({
description: "", //
is_share: "1",
title: "",
copywriting: "",
pic: ""
})
}
useEffect(()=>{
// console.log(formData, 'formdata')
},[formData])
return (
<Modal open={visible} onCancel={close} width={1200} onOk={submit} destroyOnClose>
<Modal open={visible} onCancel={()=>{close(); resetFormData();}} width={1200} onOk={submit} destroyOnClose>
<div className="template-content-wrapper">
<div className="left-wrapper">
<div className="big-title">模板配置</div>
@ -171,7 +175,7 @@ function TemplateConfig(props) {
<div className="title">分享图片</div>
<div>
<Upload
name="avatar"
name="file"
listType="picture-card"
className="avatar-uploader"
showUploadList={false}
@ -194,17 +198,23 @@ function TemplateConfig(props) {
<div className="image-wrapper">
{/* <img src={formData.activity_avatar}></img> */}
</div>
<div className="word-content" style={{backgroundColor: formData.background}}>
<div style={{color: formData.text_color}}>请输入手机号领取收费券</div>
<div className="get-code">
<div className="input-tel">请输入手机号</div>
<span className="btn" style={{color: formData.text_color}}>获取验证码</span>
<div className="word-content">
<div className="red-pack-wrapper">
<div style={{color: '#323232',textAlign: "center"}}>请输入手机号领取收费券</div>
<div className="get-code">
<div className="input-tel">请输入手机号</div>
<span className="btn" style={{color: '#323232'}}>获取验证码</span>
</div>
<div className="input-code">请输入短信验证码</div>
<div className="get-btn">立即领取</div>
</div>
<div className="activity-desc" >
<div className="desc-title">活动说明</div>
<div className="desc-content">{formData.description}</div>
</div>
<div className="input-code">请输入短信验证码</div>
<div className="get-btn">立即领取</div>
<div style={{color: formData.text_color}}>活动说明</div>
<div style={{color: formData.text_color}}>{formData.description}</div>
</div>
</div>
</div>

65
src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/index.scss

@ -45,6 +45,7 @@ $color-primary: var(--color-primary);
}
.right-wrapper{
width: 50%;
.review-page{
height: 600px;
width: 340px;
@ -52,6 +53,8 @@ $color-primary: var(--color-primary);
padding: 10px;
display: flex;
flex-direction: column;
background: url(../../../../../assets/images/template_bg.jpg) center center no-repeat;
background-size: 100% 100%;
}
.image-wrapper{
width: 320px;
@ -72,13 +75,14 @@ $color-primary: var(--color-primary);
display: flex;
margin-bottom: 10px;
margin-top: 10px;
padding-left: 23px;
.input-tel{
background-color: #fff;
border: 1px solid #cdd3df;
height: 40px;
line-height: 40px;
height: 30px;
line-height: 30px;
// margin-left: 10px;
width: 190px;
width: 170px;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
padding-left: 10px;
@ -86,10 +90,10 @@ $color-primary: var(--color-primary);
.btn{
// background-color: #ebf40e;
color: #323232;
height: 40px;
line-height: 40px;
height: 30px;
line-height: 30px;
display: inline-block;
width: 100px;
width: 80px;
text-align: center;
border: 1px solid #cdd3df;
border-top-right-radius: 5px;
@ -100,25 +104,54 @@ $color-primary: var(--color-primary);
background-color: #fff;
color: #ccddff;
border: 1px solid #cdd3df;
width: 290px;
width: 250px;
margin-left: 23px;
// margin-left: 10px;
height: 40px;
line-height: 40px;
height: 30px;
line-height: 30px;
border-radius: 5px;
margin-bottom: 10px;
padding-left: 10px;
}
.get-btn{
background-color: #fea12a;
color: #fff;
height: 50px;
background-color: #ffe4aa;
color: #9f2b13;
font-weight: 700;
height: 40px;
width: 200px;
margin-left: 60px;
line-height: 50px;
margin-left: 50px;
margin-top: 50px;
line-height: 40px;
text-align: center;
border-radius: 5px;
font-size: 20px;
border-radius: 10px;
font-size: 16px;
margin-bottom: 40px;
}
.red-pack-wrapper{
background: url(../../../../../assets/images/red_package.png);
background-size: 100% 100%;
height: 230px;
padding-top: 10px;
}
.activity-desc{
background-color: #fff;
height: 120px;
margin-top:20px;
border-radius: 5px;
}
.desc-title{
color: #9f2b13;
margin: 0 auto;
width: 100px;
font-weight: 700;
border-radius: 5px;
text-align: center;
background-color: #ffffba;
}
.desc-content{
color: #6a4c3a;
padding: 0 10px;
font-size: 12px;
}
}
}

7
src/pages/OperationCenter/OperationSales/CouponMgm/ActivitySpecificTopic/loadable.jsx

@ -146,7 +146,12 @@ function ActivitySpecificTopic() {
const [addModal, setAddModal] = useState({
visible: false,
record: {},
close: () => setAddModal({ ...addModal, visible: false }),
close: () => {
setAddModal({ ...addModal, visible: false })
if(tableRef.current){
tableRef.current.fetch()
}
},
});
const [templateModal, setTemplateModal] = useState({

3
src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/index.scss

@ -149,6 +149,9 @@ $color-primary : var(--color-primary);
.ant-form-horizontal .ant-form-item-label label{
width: 105px;
}
.ant-space-horizontal{
align-items: flex-start;
}
}
.detail-container{

12
src/pages/OperationCenter/OperationSales/CouponMgm/CouponDistribute/loadable.jsx

@ -23,7 +23,7 @@ function CouponDistribute(props) {
})
const parameter = {
pn: 1,
size: Number(pageSizeOptions[0]), //
page_size: Number(pageSizeOptions[0]), //
activity_name: "",
}
const [formData, setFormData] = useState(parameter)
@ -127,10 +127,10 @@ function CouponDistribute(props) {
}
//
const changeLength = (pn, length) => {
setFormData(Object.assign({}, formData, { pn: 1, size: length }))
setLastFormData(Object.assign({}, lastFormData, { pn: 1, size: length }))
lastFormDataRef.current = Object.assign({}, lastFormData, { pn: 1, size: length })
getData(Object.assign({}, lastFormData, { pn: 1, size: length }))
setFormData(Object.assign({}, formData, { pn: 1, page_size: length }))
setLastFormData(Object.assign({}, lastFormData, { pn: 1, page_size: length }))
lastFormDataRef.current = Object.assign({}, lastFormData, { pn: 1, page_size: length })
getData(Object.assign({}, lastFormData, { pn: 1, page_size: length }))
}
//
const getSearchData = (data = formData) => {
@ -210,7 +210,7 @@ function CouponDistribute(props) {
showTotal={() => `${resultData.total}`}
total={resultData.total}
current={lastFormData.pn}
pageSize={lastFormData.size}
pageSize={lastFormData.page_size}
pageSizeOptions={pageSizeOptions}
onChange={changePn}
onShowSizeChange={changeLength}

101
src/pages/OperationCenter/OperationSales/CouponMgm/CouponRules/loadable.jsx

@ -27,8 +27,8 @@ function CouponRules() {
const [formData, setFormData] = useSetState({
name: defaultParams ? defaultParams.name : '',
status: defaultParams ? defaultParams.status : '',
coupon_type: defaultParams ? defaultParams.coupon_type : '',
status: defaultParams ? defaultParams.status : '0',
coupon_type: defaultParams ? defaultParams.coupon_type : '0',
})
const [operatorOptions, setOperatorOptions] = useState([]) //
const [departOptions, setDepartOptions] = useState([])
@ -43,7 +43,7 @@ function CouponRules() {
const [loading, setLoading] = useState(false) //
const [pageData, setPageData] = useSetState({ //
pn: defaultParams?.pn || 1,
size:defaultParams?.page_size || 20,
page_size:defaultParams?.page_size || 20,
})
const [dataSource, setDataSource] = useState([])
@ -136,6 +136,7 @@ function CouponRules() {
if (res.status == 20000) {
message.success(res.message)
setIsTakedownModalOpen(false)
getCouponList(params.current)
} else {
message.error(res.message)
}
@ -151,6 +152,7 @@ function CouponRules() {
if (res.status == 20000) {
message.success(res.message)
setDeleteModalOpen(false)
getCouponList(params.current)
} else {
message.error(res.message)
}
@ -230,7 +232,7 @@ function CouponRules() {
}
setPageData({
pn: pn,
size: pageSize,
page_size: pageSize,
})
}
@ -239,7 +241,7 @@ function CouponRules() {
// console.log(current,pageSize)
setPageData({
pn: current,
size: pageSize,
page_size: pageSize,
})
}
@ -247,7 +249,7 @@ function CouponRules() {
const search = () => {
setPageData({
pn: 1,
size: 20
page_size: 20
})
}
@ -277,7 +279,7 @@ function CouponRules() {
return
}
let submitData = {...currentCouponInfo}
if(submitData.effective_date == 2 ){
if(submitData.effective_date == 2 ){ //
if(customDay== 0 && customHour == 0 && customMinute == 0){
message.error('有效日期需要设置时间范围')
return
@ -287,7 +289,7 @@ function CouponRules() {
}
if(currentCouponId){ //
ajax.handleCouponEdit({...currentCouponInfo ,id: currentCouponId }).then(res => {
ajax.handleCouponEdit({...submitData ,id: currentCouponId }).then(res => {
if (res.status == 20000) {
message.success(res.message)
setShowEdit(false)
@ -303,7 +305,7 @@ function CouponRules() {
})
}else{ //
ajax.handleCouponInsert(currentCouponInfo).then(res => {
ajax.handleCouponInsert(submitData).then(res => {
if (res.status == 20000) {
message.success(res.message)
// getCouponList()
@ -324,25 +326,64 @@ function CouponRules() {
const validateParams = ()=>{
let flag = true
for(let key in validateRules){
if(!currentCouponInfo[key] && !validateRules[key].relation){
message.error(validateRules[key].tip)
flag =false
break
}else if(validateRules[key].relation){ //
if(currentCouponInfo[validateRules[key].relation] == validateRules[key].value && !currentCouponInfo[key]){
message.error(validateRules[key].tip)
flag =falsesetcurrentCouponId
break
}
}
// for(let key in validateRules){
// if(!currentCouponInfo[key] && !validateRules[key].relation){
// message.error(validateRules[key].tip)
// flag =false
// break
// }else if(validateRules[key].relation){ //
// if(currentCouponInfo[validateRules[key].relation] == validateRules[key].value && !currentCouponInfo[key]){
// message.error(validateRules[key].tip)
// flag =falsesetcurrentCouponId
// break
// }
// }
// }
// name: {tip: ""},
// mode: {tip: ""},
// type: {tip: ""},
// // value: {tip: ""},
// // value_condition: {tip: "使"},
// hour : {tip: ""},
// effective_date: {tip: ""},
// effctive_value: {tip: "", relation: 'effective_date' , value: 1},
// // effctive_value2: {tip: "", relation: 'effective_date' , value: 2 },
// terminal: {tip: ""},
// // use_scope: {tip: "使",condition: ''},
// // use_content: {tip: "" , condition : ''},
// illustrate: {tip: "使"}
if(!currentCouponInfo.name){
message.error('优惠券名称不能为空')
return false
}
if(!currentCouponInfo.mode){
message.error('模式不能为空')
return false
}
if(currentCouponInfo.mode == '2' && !currentCouponInfo.partner){
message.error('合作方不能为空')
return false
}
if(!currentCouponInfo.type){
message.error('优惠券类型不能为空')
return false
}
if(!currentCouponInfo.hour){
message.error('欠费时长不能为空')
return false
}
if(currentCouponInfo.use_scope == 1 && currentCouponInfo.use_content == ''){
message.error('路段不能为空')
flag =false
return false
}else if(currentCouponInfo.use_scope == 2 && currentCouponInfo.use_content == ''){
message.error('商户不能为空')
flag =false
return false
}
return flag
}
@ -351,11 +392,15 @@ function CouponRules() {
setCurrentCouponInfo({})
setSelectedKeys([])
setTargetKeys([])
setCustomDay(0)
setCustomHour(0)
setCustomMinute(0)
}
const hideRightPanel = ()=>{
setShowEdit(false);
setCurrentCouponInfo({})
// setCurrentCouponInfo({})
resetCurrentCouponInfo()
setCurrentCouponId('')
setJustCheck(false)
}
@ -588,7 +633,7 @@ function CouponRules() {
<div className="op-btn" onClick={()=>{clickDropDown("2",record)}}>修改</div>
<div className="op-btn" onClick={()=>{clickDropDown("3",record)}}>下架</div>
</div>
}else{ //
}else{ //
content = <div>
<div className="op-btn" onClick={()=>{clickDropDown("1",record)}}>查看</div>
<div className="op-btn" onClick={()=>{clickDropDown("2",record)}}>修改</div>
@ -619,7 +664,7 @@ function CouponRules() {
// showTotal={() => ` ${total_records} `}
total={resultData.total}
current={pageData.pn}
pageSize={pageData.size}
pageSize={pageData.page_size}
pageSizeOptions={dictionary?.pageSizeOptions}
onChange={onChangePn}
onShowSizeChange={onShowSizeChange}
@ -674,7 +719,7 @@ function CouponRules() {
required={true}
disabled={justCheck}
yisaData={sysConfig.coupon?.length ? sysConfig.coupon.slice(1,4) : []}
defaultValue={ currentCouponInfo.type || null }
defaultValue={ currentCouponInfo.type || '1' }
placeholder=""
hasUnlimited={ false }
showClose={true}
@ -804,7 +849,7 @@ function CouponRules() {
disabled={justCheck}
yisaData={[{label: '全部', value: 0},{label: '按车场', value: 1},{label: '按商户', value: 2}]}
// defaultValue={ currentCouponInfo.use_scope || null }
defaultValue={ 1 }
defaultValue={ 0 }
placeholder=""
hasUnlimited={ false }
showClose={true}

3
src/services/OperationCenter/OperationSales/index.js

@ -261,5 +261,6 @@ export default {
yardDiscountDown,
yardDiscountDelete,
handleCouponDown,
handleAuditTemplate
handleAuditTemplate,
handleCouponEdit
};
Loading…
Cancel
Save