Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
marketing
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
marketing-web
marketing
Commits
47442554
Commit
47442554
authored
Dec 07, 2020
by
chenxin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 微信卡券
parent
3432595d
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
107 additions
and
26 deletions
+107
-26
marketing.js
src/store/modules/marketing.js
+6
-1
index.js
src/utils/index.js
+13
-0
form.js
src/views/card/form.js
+20
-8
form.vue
src/views/card/form.vue
+28
-12
index.vue
src/views/card/index.vue
+8
-0
list.vue
src/views/card/list.vue
+23
-2
card-item.vue
src/views/card/partials/card-item.vue
+9
-3
No files found.
src/store/modules/marketing.js
View file @
47442554
...
...
@@ -13,7 +13,8 @@ const state = {
breadcrumb
:
[],
layoutTips
:
''
,
isShowSelf
:
false
,
// 展示是否显示 '仅看本人' btn 在app.vue调用 每次刷新都会获取
openFlag
:
false
// 列表是否显示创建人
openFlag
:
false
,
// 列表是否显示创建人
appletEnable
:
false
// 小程序是否可用
};
// getters
...
...
@@ -54,6 +55,10 @@ const actions = {
// mutations
const
mutations
=
{
// 更新小程序是否可用
updateAppletEnable
(
state
,
val
)
{
state
.
appletEnable
=
!!
val
;
},
// 更新是否限流
updateLimit
(
state
,
val
)
{
state
.
isLimit
=
!!
val
;
...
...
src/utils/index.js
View file @
47442554
...
...
@@ -332,3 +332,16 @@ export const spiltStr = html => {
.
join
(
'<br>'
);
return
text
;
};
// 小程序版本过低警告
export
const
appletUnableAlert
=
()
=>
{
Vue
.
prototype
.
$confirm
(
"当前会员小程序版本过低,请联系达摩运营提审并发布最新版小程序后再次尝试。造成不便,敬请谅解。<div class='mt10'><a href='#' target='_blank'>达摩GIC卡券模块更新说明</a></div>"
,
'提示'
,
{
cancelButtonText
:
'确定'
,
showConfirmButton
:
false
,
dangerouslyUseHTMLString
:
true
// type: 'warning'
})
.
then
(()
=>
{})
.
catch
(()
=>
{});
};
src/views/card/form.js
View file @
47442554
...
...
@@ -3,7 +3,6 @@
*/
import
{
_debounce
}
from
'@/utils/index'
;
import
dmUploadImg
from
'@/components/upload/img'
;
import
imgTextDrag
from
'./partials/imgtext-drag'
;
import
{
formatDateTimeByType
,
deepClone
}
from
'@/utils/index.js'
;
import
xxSysp_mix
from
'@/mixins/selector.js'
;
// 商品选择器方法
import
{
listEntepriseWeimobShop
,
listEntepriseWeimobCoupon
}
from
'@/service/api/commonApi.js'
;
...
...
@@ -29,7 +28,8 @@ const initForm = {
useCodePrefix
:
0
,
useCodeSuffix
:
0
,
cardEffectiveMode
:
0
,
dateTime
:
[],
dateTime
:
[],
// 用户使用有效期
sendDateTime
:
[],
// 卡券模板投放期限
costValue
:
0
,
//成本费用
startDay
:
0
,
limitDay
:
null
,
...
...
@@ -50,7 +50,8 @@ const initForm = {
products_exchange_number
:
0
,
onlyFlag
:
true
,
// 是否显示与优惠同享,默认true显示
giveFlag
:
0
,
// 开启转赠 1开启
refundFlag
:
0
// 开启退货 1开启
refundFlag
:
0
,
// 开启退货 1开启
jumpSwitch
:
false
// 跳转配置
};
const
sale_limit
=
{
fee
:
0
,
goods
:
''
,
flag
:
false
,
type
:
0
};
//最低消费
const
goods
=
{
ok
:
''
,
no
:
''
,
flag
:
false
};
...
...
@@ -207,7 +208,6 @@ export default {
},
components
:
{
'dm-upload-img'
:
dmUploadImg
,
'img-text-drag'
:
imgTextDrag
,
'dm-goods-input'
:
dmGoodsInput
},
computed
:
{
...
...
@@ -223,6 +223,22 @@ export default {
}
else
{
return
false
;
}
},
// 是否展示模板投放有效期
showSendDateTime
()
{
// 当输入完整用户使用有效期后,出现卡券模板投放期限
const
{
cardEffectiveMode
,
limitDay
,
dateTime
}
=
this
.
form
;
if
(
cardEffectiveMode
==
0
)
{
// 用户使用有效期=固定日期,则默认卡券模板投放期限开始时间=今天,结束日期=用户使用有效期结束日期
if
(
dateTime
&&
dateTime
[
0
])
{
this
.
form
.
sendDateTime
=
[...
dateTime
];
}
return
!!
(
dateTime
&&
dateTime
[
0
]
&&
dateTime
[
1
]);
}
if
(
cardEffectiveMode
==
1
)
{
return
!!
limitDay
;
}
return
false
;
}
},
methods
:
{
...
...
@@ -527,10 +543,6 @@ export default {
return
;
}
}
if
(
this
.
form
.
costValue
<=
0
&&
this
.
form
.
cardType
!==
1
)
{
this
.
$tips
({
type
:
'warning'
,
message
:
'成本必须大于0'
});
return
;
}
// 验证号段 不能为空 起始号段和结尾号段必须位数一致
if
(
this
.
form
.
useCustomCode
)
{
...
...
src/views/card/form.vue
View file @
47442554
<
template
>
<div>
<el-form
class=
"dm-wrap"
:model=
"form"
ref=
"form"
:rules=
"rules"
label-width=
"1
3
0px"
>
<el-form
class=
"dm-wrap"
:model=
"form"
ref=
"form"
:rules=
"rules"
label-width=
"1
5
0px"
>
<el-form-item
label=
"卡券类型"
>
<el-radio-group
v-model=
"form.cardType"
:disabled=
"isEdit || isInfo"
@
change=
"reset"
>
<el-radio
:label=
"0"
>
抵金券
</el-radio>
...
...
@@ -15,7 +15,6 @@
</el-form-item>
<el-form-item
prop=
"cardName"
label=
"卡券名称"
>
<dm-input
v-model=
"form.cardName"
class=
"w400"
placeholder=
"请输入卡券名称"
:disabled=
"isEdit || isInfo"
:byteType=
"1"
:maxlength=
"9"
></dm-input>
<div
class=
"tips fz12 gray"
>
* 建议涵盖卡券属性、服务及金额,突出优惠力度。例:无门槛减10元优惠券
</div>
</el-form-item>
<el-form-item
prop=
"subName"
label=
"备注名"
>
...
...
@@ -183,7 +182,6 @@
</div> -->
<div>
<el-checkbox
v-model=
"only"
:disabled=
"isEdit || isInfo"
>
不与其它优惠共享
</el-checkbox>
<span
class=
"fz12 gray ml5"
>
* 仅用于微信原生卡券详情展示,无实际业务逻辑
</span>
</div>
</el-form-item>
<el-form-item
prop=
"cardLimit"
label=
"领券限制"
>
...
...
@@ -193,7 +191,7 @@
<el-radio
:label=
"0"
>
<el-input-number
controls-position=
"right"
:min=
"0"
class=
"w150"
v-model=
"form.cardLimit"
:disabled=
"isEdit || isInfo"
></el-input-number>
张/人
<span
class=
"fz13 gray"
>
每个用户领券上限,默认为1
</span>
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
prop=
"costValue"
label=
"成本费用"
v-show=
"form.cardType !== 1"
>
<el-input-number
controls-position=
"right"
:disabled=
"isEdit || isInfo"
:precision=
"2"
:min=
"0"
class=
"w200"
v-model=
"form.costValue"
></el-input-number>
元
<span
class=
"fz13 gray"
>
请填写大于0的数字(限制两位小数)
</span>
</el-form-item>
<el-form-item
prop=
"costValue"
label=
"成本费用"
v-show=
"form.cardType !== 1"
>
<el-input-number
controls-position=
"right"
:disabled=
"isEdit || isInfo"
:precision=
"2"
:min=
"0"
class=
"w200"
v-model=
"form.costValue"
></el-input-number>
元
</el-form-item>
<el-form-item
label=
"code类型"
>
<el-radio
v-model=
"form.useCustomCode"
:label=
"0"
:disabled=
"isEdit || isInfo"
>
随机生成
</el-radio>
<el-radio
v-model=
"form.useCustomCode"
:label=
"1"
:disabled=
"isEdit || isInfo"
>
自定义号段
</el-radio>
...
...
@@ -220,7 +218,10 @@
<div
v-show=
"form.useCustomCode"
><el-input-number
controls-position=
"right"
:min=
"0"
:max=
"100000"
disabled
class=
"w200"
:value=
"form.customCodeEnd - form.customCodeBegin + 1"
></el-input-number>
张
<span
class=
"fz13 gray"
>
优惠券创建数量,如不填,则默认为100,000张
</span></div>
</el-form-item>
<el-form-item
class=
"is-required"
prop=
"useCustomCode"
label=
"有效期"
>
<el-form-item
class=
"is-required"
prop=
"useCustomCode"
>
<el-tooltip
slot=
"label"
open-delay=
"100"
content=
"用户使用有效期为用户领取卡券后的使用有效期计算规则"
placement=
"top"
>
<span
class=
"tooltip-icon cursor"
>
用户使用有效期
</span>
</el-tooltip>
<div>
<el-radio
v-model=
"form.cardEffectiveMode"
:disabled=
"isEdit || isInfo || cardValidity"
:label=
"0"
>
固定日期
</el-radio>
<el-date-picker
v-model=
"form.dateTime"
@
focus=
"form.cardEffectiveMode = 0"
:disabled=
"isEdit || isInfo || cardValidity"
:picker-options=
"pickerOptions"
type=
"daterange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
></el-date-picker>
...
...
@@ -234,6 +235,20 @@
</div>
</el-form-item>
<!-- 当输入完整用户使用有效期后,出现卡券模板投放期限 -->
<el-form-item
v-if=
"showSendDateTime"
class=
"is-required"
prop=
"SendDateTime"
>
<el-tooltip
slot=
"label"
open-delay=
"100"
content=
"卡券模板投放期限为该张卡券可在GIC后台或通过API接口可投放给用户的期限"
placement=
"top"
>
<span
class=
"tooltip-icon cursor"
>
卡券模板投放期限
</span>
</el-tooltip>
<el-date-picker
v-model=
"form.sendDateTime"
:disabled=
"isEdit || isInfo"
:picker-options=
"pickerOptions"
type=
"daterange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
></el-date-picker>
<div
class=
"gray fz13"
>
* 卡券模板投放期限结束日期不能迟于卡券使用有效期固定日期结束日期
</div>
</el-form-item>
<el-form-item
prop=
"cardExplain"
label=
"跳转配置"
>
<el-switch
v-model=
"form.jumpSwitch"
></el-switch>
<div
class=
"gray fz13"
>
* 开启后小程序卡券详情将对应路径的跳转按钮
</div>
</el-form-item>
<el-form-item
prop=
"cardExplain"
label=
"适用门店说明"
>
<dm-input
class=
"w400"
v-model=
"form.cardExplain"
:disabled=
"isInfo"
:maxlength=
"50"
></dm-input>
</el-form-item>
...
...
@@ -247,10 +262,11 @@
<el-alert
v-show=
"storeMode && form.cardApplyChannel.indexOf('WMmicroMall') !== -1"
title=
"选择的门店必须保持与微盟侧门店一致,请确认选择无误"
type=
"warning"
show-icon
:closable=
"false"
class=
"mt20 width80"
></el-alert>
</el-form-item>
<el-form-item
v-if=
"giveEnable && form.useCustomCode != 1"
label=
"卡券转赠"
>
<!-- feature/m12 暂时隐藏 -->
<!-- <el-form-item v-if="giveEnable && form.useCustomCode != 1" label="卡券转赠">
<el-switch :disabled="isEdit" v-model="form.giveFlag" :active-value="1" :inactive-value="0"></el-switch>
<span class="tips fz12 gray ml5">* code类型为自定义号段暂时不支持卡券转赠,转赠多次会消耗相同次数的库存,请设置足够的安全库存</span>
</el-form-item>
</el-form-item>
-->
<el-form-item
v-if=
"(isAdd || isCopy) && refundEnable && form.cardType != 2"
label=
"退货退券"
>
<el-switch
:disabled=
"isEdit"
v-model=
"form.refundFlag"
:active-value=
"1"
:inactive-value=
"0"
></el-switch>
</el-form-item>
...
...
@@ -259,22 +275,22 @@
<el-switch
:disabled=
"isEdit"
v-model=
"form.refundFlag"
:active-value=
"1"
:inactive-value=
"0"
></el-switch>
</el-form-item>
<el-form-item
prop=
"image"
label=
"(选填)封面图片"
>
<
!-- <
el-form-item prop="image" label="(选填)封面图片">
<dm-upload-img :disabled="isEdit || isInfo" :model.sync="form.image" width="64" label="上传图片" url="/api-plug/upload-img" tips="图片建议尺寸:850px*350px,大小不超过2M"></dm-upload-img>
</el-form-item>
<el-form-item prop="coverDescript" label="(选填)封面简介">
<dm-input class="w400" v-model="form.coverDescript" :disabled="isEdit || isInfo" :maxlength="12"></dm-input>
</el-form-item>
</el-form-item>
-->
<el-form-item
prop=
"useDescript"
label=
"使用说明"
>
<dm-input
class=
"w400"
type=
"textarea"
:rows=
"4"
v-model=
"form.useDescript"
:maxlength=
"500"
:disabled=
"isInfo"
></dm-input>
</el-form-item>
<el-form-item
prop=
"teletexts"
label=
"(选填)图文介绍"
>
<
!-- <
el-form-item prop="teletexts" label="(选填)图文介绍">
<p class="fz13 gray">图片建议尺寸:900px*500px,大小不超过2M,格式限制JPG;至少上传1组图文,最多输入5000字</p>
<img-text-drag :list.sync="imgTextList" :disabled="form.auditingStatus === 1"></img-text-drag>
</el-form-item>
</el-form-item>
-->
<!-- <el-form-item label="放入卡券展架" v-show="cardLimitRadio === 1" v-loading="cardShelfsLoading">
<el-transfer :disabled="isInfo" filterable :filter-method="filterMethod" filter-placeholder="输入展架名称搜索" v-model="form.shelfIds" :titles="['所有门店展架', '选中的展架']" :data="cardShelfsList"> </el-transfer>
...
...
@@ -286,7 +302,7 @@
</el-form-item>
<div
class=
"btn-wrap_fixed"
:class=
"{ on: asideShow }"
>
<el-button
type=
"primary"
@
click=
"submitForm('form')"
v-loading=
"submitLoading"
v-show=
"!isInfo && canEdit
"
>
保存并提交审核
</el-button>
<el-button
type=
"primary"
@
click=
"submitForm('form')"
v-loading=
"submitLoading"
v-show=
"!isInfo && canEdit
&& $store.state.marketing.appletEnable"
>
保存
</el-button>
<el-button
@
click=
"$router.go(-1)"
>
返 回
</el-button>
</div>
</el-form>
...
...
src/views/card/index.vue
View file @
47442554
...
...
@@ -6,7 +6,15 @@
<
script
>
export
default
{
name
:
'card'
,
methods
:
{
getAppletVersion
()
{
setTimeout
(()
=>
{
this
.
$store
.
commit
(
'updateAppletEnable'
,
true
);
},
2000
);
}
},
created
()
{
this
.
getAppletVersion
();
this
.
$store
.
commit
(
'aside_handler'
,
false
);
this
.
$nextTick
(
_
=>
{
this
.
$store
.
commit
(
'aside_handler'
,
true
);
...
...
src/views/card/list.vue
View file @
47442554
...
...
@@ -14,14 +14,14 @@
<el-input
v-model=
"listParams.searchParam"
class=
"w200 vertical-middle"
placeholder=
"输入卡券名称/备注"
clearable
@
change=
"refresh"
><i
slot=
"prefix"
class=
"el-input__icon el-icon-search"
></i></el-input>
<el-checkbox
class=
"vertical-middle"
v-if=
"$store.state.marketing.isShowSelf"
v-model=
"listParams.showSelfFlag"
:true-label=
"1"
:false-label=
"0"
label=
"仅看本人"
border
@
change=
"refresh"
/>
<el-checkbox
class=
"ml0"
v-model=
"listParams.effectiveFlag"
:true-label=
"1"
:false-label=
"0"
label=
"仅展示有效卡券"
border
@
change=
"refresh"
/>
<el-button
class=
"fr"
type=
"primary"
@
click=
"
$router.push('/card/add')
"
>
新增卡券
</el-button>
<el-button
class=
"fr"
type=
"primary"
@
click=
"
addCard
"
>
新增卡券
</el-button>
</div>
<ul
class=
"clearfix"
element-loading-text=
"拼命加载中"
>
<card-item
@
adjust-stock=
"preAdjustStock"
:item=
"v"
v-for=
"(v, i) in tableList"
:key=
"i"
@
delete-card=
"delData"
></card-item>
</ul>
<div
class=
"text-center"
v-if=
"tableList.length === 0"
>
<img
class=
"block block-center pt100"
width=
"60"
height=
"60"
src=
"../../assets/img/no-data_icon.png"
alt=
""
/>
<el-button
class=
"block block-center mt10"
type=
"text"
@
click=
"
$router.push('/card/add')
"
>
新增卡券
</el-button>
<el-button
class=
"block block-center mt10"
type=
"text"
@
click=
"
addCard
"
>
新增卡券
</el-button>
</div>
<adjust-stock
:show
.
sync=
"adjustStock"
:totalCount=
"currentCard.couponStock"
:coupCardId=
"currentCard.coupCardId"
@
refresh=
"delayRefresh"
></adjust-stock>
<dm-pagination
v-show=
"tableList.length"
background
class=
"dm-pagination"
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
:current-page=
"listParams.currentPage"
:page-sizes=
"[20, 40, 60, 80]"
:page-size=
"listParams.pageSize"
layout=
"total, sizes, prev, pager, next"
:total=
"total"
></dm-pagination>
...
...
@@ -32,6 +32,7 @@ import { cardPageList, deleteCard } from '@/service/api/cardApi.js';
import
adjustStock
from
'./partials/adjust-Stock'
;
import
cardItem
from
'./partials/card-item'
;
import
tableMethods
from
'@/mixins/tableMethods.js'
;
import
{
appletUnableAlert
}
from
'@/utils/index.js'
;
export
default
{
name
:
'card-list'
,
mixins
:
[
tableMethods
],
...
...
@@ -65,6 +66,19 @@ export default {
this
.
getTableList
();
this
.
$store
.
commit
(
'mutations_breadcrumb'
,
[{
name
:
'营销管理'
,
path
:
''
},
{
name
:
'卡券营销'
,
path
:
''
},
{
name
:
'卡券库'
,
path
:
''
}]);
// eslint-disable-line
},
mounted
()
{
this
.
$store
.
commit
(
'mutations_layoutTips'
,
`<div class="layout--tips">
<i class="el-icon-info"></i>
由于微信侧对卡券业务的调整,2021年1月5日0点起,达摩GIC将从原先的微信卡券切换至GIC卡券,主体功能保持不变。届时与微信相关的微信卡包将不再支持,敬请谅解。
</div>
`
);
},
beforeDestroy
()
{
this
.
$store
.
commit
(
'mutations_layoutTips'
,
''
);
},
methods
:
{
//编辑库存 前置
preAdjustStock
(
val
)
{
...
...
@@ -91,6 +105,13 @@ export default {
}
this
.
loading
=
false
;
},
addCard
()
{
if
(
!
this
.
$store
.
state
.
marketing
.
appletEnable
)
{
appletUnableAlert
();
}
else
{
this
.
$router
.
push
(
'/card/add'
);
}
},
delData
(
val
)
{
this
.
$confirm
(
'是否删除该卡券?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
...
...
src/views/card/partials/card-item.vue
View file @
47442554
...
...
@@ -28,9 +28,10 @@
</div>
<div
class=
"card-item__detail"
>
<p
class=
"ellipsis-100"
>
有效期:
<span
v-if=
"item.cardEffectiveMode !== 0"
>
领取后第
{{
item
.
startDay
+
1
}}
-
{{
item
.
limitDay
+
item
.
startDay
}}
天
</span>
使用
有效期:
<span
v-if=
"item.cardEffectiveMode !== 0"
>
领取后第
{{
item
.
startDay
+
1
}}
-
{{
item
.
limitDay
+
item
.
startDay
}}
天
</span>
<span
v-if=
"item.cardEffectiveMode === 0"
>
{{
formatDateTimeByType
(
item
.
beginDate
,
'yyyy-MM-dd'
)
}}
至
{{
formatDateTimeByType
(
item
.
endDate
,
'yyyy-MM-dd'
)
}}
</span>
</p>
<p>
模板投放期限:
<span>
2020-03-01 至 2020-03-30
</span></p>
<p
class=
"ellipsis-100"
>
使用条件:
<el-popover
:open-delay=
"300"
placement=
"top-start"
width=
"200"
trigger=
"hover"
:content=
"item.useCondition | filterUseCondition"
>
<span
slot=
"reference"
class=
"ellipsis-100"
>
{{
item
.
useCondition
|
filterUseCondition
}}
</span>
...
...
@@ -64,7 +65,7 @@
<
script
>
import
renderTemp
from
'./status-render.js'
;
import
{
formatDateTimeByType
}
from
'@/utils/index.js'
;
import
{
formatDateTimeByType
,
appletUnableAlert
}
from
'@/utils/index.js'
;
export
default
{
props
:
{
item
:
{
...
...
@@ -95,6 +96,11 @@ export default {
* 1 投放 2 报表 3 编辑 4 删除 5 详情 6复制 7领取记录
*/
handler
(
val
)
{
// 若小程序版本不支持 不支持 卡券新建编辑复制 修改库存
if
((
val
==
3
||
val
==
6
)
&&
!
this
.
$store
.
state
.
marketing
.
appletEnable
)
{
appletUnableAlert
();
return
;
}
switch
(
val
)
{
case
1
:
this
.
$router
.
push
({
...
...
@@ -193,7 +199,7 @@ export default {
line-height
:
1.8em
;
span
{
font-size
:
13px
;
color
:
#
999
;
color
:
#
606266
;
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment