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
0b970d90
Commit
0b970d90
authored
Apr 13, 2021
by
黑潮
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/3月迭代' into feature/销售线索
parents
7a7d603b
23a8824a
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
282 additions
and
20 deletions
+282
-20
cardApi.js
src/service/api/cardApi.js
+3
-0
ecmApi.js
src/service/api/ecmApi.js
+2
-0
record-send.vue
src/views/card/record-send.vue
+14
-2
current-list.vue
src/views/ecm/current-list.vue
+13
-2
form.js
src/views/ecm/form.js
+35
-4
form.vue
src/views/ecm/form.vue
+28
-4
list.vue
src/views/ecm/list.vue
+6
-1
api.js
src/views/ecm/marketing-event/assets/api.js
+3
-0
grade.svg
src/views/ecm/marketing-event/assets/img/grade.svg
+2
-0
index.css
src/views/ecm/marketing-event/assets/style/index.css
+13
-2
item-grade.vue
src/views/ecm/marketing-event/components/item-grade.vue
+23
-0
lib-grade.vue
src/views/ecm/marketing-event/components/lib-grade.vue
+69
-0
opt.vue
src/views/ecm/marketing-event/components/opt.vue
+12
-1
index.vue
src/views/ecm/marketing-event/index.vue
+54
-3
config.vue
src/views/game/ptyx/config.vue
+5
-1
No files found.
src/service/api/cardApi.js
View file @
0b970d90
...
...
@@ -75,6 +75,9 @@ export const exportBackCoupExcel = config.api + PREFIX + 'export-back-coup-excel
//卡券营销--卡券记录--投放记录--删除记录
export
const
deleteCardPuton
=
params
=>
requests
(
PREFIX
+
'delete-card-puton'
,
params
);
//卡券营销--卡券记录--投放记录--刷新记录
export
const
refreshPutOnCount
=
params
=>
requests
(
PREFIX
+
'refresh-put-on-count'
,
params
);
//卡券营销--卡券记录--领取记录--核销--(1)获取满足核销条件的订单
export
const
listCoupcardOrder
=
params
=>
requests
(
PREFIX
+
'list-coupcard-order'
,
params
);
...
...
src/service/api/ecmApi.js
View file @
0b970d90
...
...
@@ -42,3 +42,5 @@ export const exportBatchSendDetails = config.api + PREFIX + 'export-batch-send-d
// 智能营销--实时人员列表--导出csv
export
const
exportCurrentSendDetails
=
config
.
api
+
PREFIX
+
'export-current-send-details'
;
export
const
getUseStoredFalg
=
params
=>
requests
(
PREFIX
+
'get-ecm-store-flag'
,
params
);
src/views/card/record-send.vue
View file @
0b970d90
...
...
@@ -41,8 +41,9 @@
</
template
>
</el-table-column>
<el-table-column
min-width=
"100"
align=
"left"
prop=
"creatorName"
label=
"创建人"
v-if=
"$store.state.marketing.openFlag"
></el-table-column>
<el-table-column
label=
"操作"
align=
"left"
width=
"1
5
0px"
fixed=
"right"
>
<el-table-column
label=
"操作"
align=
"left"
width=
"1
8
0px"
fixed=
"right"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
@
click=
"refreshPutOnCount(scope.row.putonId)"
v-if=
"scope.row.issuingQuantity - scope.row.getedQuantity > 0"
>
刷新
</el-button>
<el-button
type=
"text"
v-if=
"scope.row.putonStatus === 2 || scope.row.putonStatus === 3"
@
click=
"$router.push('/card/groupinfo/' + scope.row.putonId)"
>
详情
</el-button>
<el-button
type=
"text"
v-if=
"scope.row.putonStatus !== 2 && scope.row.putonStatus !== 3 && scope.row.canEdit !== false && scope.row.putonStatus !== 5 && scope.row.putonStatus !== 6"
@
click=
"$router.push('/card/groupsend/' + scope.row.putonId)"
>
编辑
</el-button>
<el-button
type=
"text"
v-if=
"scope.row.putonTime > nowDate"
@
click=
"$router.push('/card/record/sendInfo/' + scope.row.putonId)"
>
记录
</el-button>
...
...
@@ -56,7 +57,7 @@
</section>
</template>
<
script
>
import
{
cardRecordPage
,
deleteCardPuton
}
from
'@/service/api/cardApi.js'
;
import
{
cardRecordPage
,
deleteCardPuton
,
refreshPutOnCount
}
from
'@/service/api/cardApi.js'
;
import
{
formatDateTimeByType
}
from
'@/utils/index.js'
;
import
timeCounts
from
'@/components/timeCount/index.vue'
;
import
tableMethods
from
'@/mixins/tableMethods.js'
;
...
...
@@ -159,6 +160,17 @@ export default {
this
.
$tips
({
type
:
'error'
,
message
:
'删除失败!'
});
});
},
// 刷新当条营销记录
refreshPutOnCount
(
putonId
)
{
refreshPutOnCount
({
cardPutOnId
:
putonId
}).
then
(
res
=>
{
if
(
res
.
errorCode
===
0
)
{
this
.
$tips
({
type
:
'success'
,
message
:
'更新成功!'
});
this
.
getTableList
();
}
else
{
this
.
$tips
({
type
:
'error'
,
message
:
'更新失败!'
});
}
});
},
filterStatus
(
val
)
{
let
result
=
{
label
:
'执行错误'
,
type
:
'danger'
};
switch
(
val
)
{
...
...
src/views/ecm/current-list.vue
View file @
0b970d90
...
...
@@ -5,6 +5,11 @@
<el-select
class=
"dm-select"
clearable
v-model=
"listParams.success"
placeholder=
"所有条件"
@
change=
"search"
>
<el-option
v-for=
"(v, i) in successOptions"
:key=
"i"
:label=
"v.label"
:value=
"v.value"
></el-option>
</el-select>
<el-select
class=
"dm-select"
placeholder=
"所有条件"
v-model=
"listParams.status"
@
change=
"changeStatus"
>
<el-option
label=
"正在进行中"
:value=
"1"
></el-option>
<el-option
label=
"已删除"
:value=
"0"
></el-option>
</el-select>
<!--
<el-button
type=
"text"
@
click=
"goHistory"
>
历史记录
</el-button>
-->
<el-button
icon=
"iconfont icon-icon_yunxiazai"
class=
"fr"
type=
"primary"
@
click=
"exportCurrentSendDetails"
>
导出列表
</el-button>
</div>
<div
class=
"dm-wrap"
>
...
...
@@ -83,7 +88,8 @@ export default {
pageSize
:
20
,
success
:
''
,
beginTime
:
''
,
endTime
:
''
endTime
:
''
,
status
:
1
},
userMemberInfo
:
''
,
// 下面列表搜索
total
:
0
,
...
...
@@ -185,6 +191,10 @@ export default {
this
.
listParams
.
ecmMarketingTypeRelationIds
=
list
;
this
.
ecmCurrentSendDetails
();
},
changeStatus
()
{
this
.
listParams
.
currentPage
=
1
;
this
.
ecmCurrentSendInfos
();
},
search
()
{
this
.
listParams
.
currentPage
=
1
;
this
.
ecmCurrentSendInfos
();
...
...
@@ -211,7 +221,8 @@ export default {
beginTime
:
this
.
listParams
.
beginTime
,
endTime
:
this
.
listParams
.
endTime
,
memberInfo
:
this
.
listParams
.
memberInfo
,
success
:
this
.
listParams
.
success
success
:
this
.
listParams
.
success
,
status
:
this
.
listParams
.
status
});
this
.
infoList
=
res
.
result
||
[];
this
.
$nextTick
(
_
=>
{
...
...
src/views/ecm/form.js
View file @
0b970d90
import
{
_debounce
}
from
'@/utils/index'
;
import
{
getEcmInfo
,
saveEcmInfo
}
from
'@/service/api/ecmApi.js'
;
import
{
getEcmInfo
,
saveEcmInfo
,
getUseStoredFalg
}
from
'@/service/api/ecmApi.js'
;
import
{
getCardManualSetting
}
from
'@/service/api/cardApi.js'
;
import
{
listTemplateVariables
}
from
'@/service/api/msgApi.js'
;
import
{
klflStrategy
}
from
'@/service/api/gameApi.js'
;
// 会员等级列表接口
...
...
@@ -19,7 +19,7 @@ export default {
creatorId
:
''
,
code
:
'1001'
,
loading
:
false
,
effectActionOptions
:
[{
value
:
'subscribe'
,
label
:
'关注触发'
},
{
value
:
'authentication'
,
label
:
'认证触发'
},
{
value
:
'consume'
,
label
:
'消费触发'
},
{
value
:
'
upgrade'
,
label
:
'会员卡升级触发'
},
{
value
:
'degrade'
,
label
:
'会员卡降级触发'
}
],
// eslint-disable-line
effectActionOptions
:
[{
value
:
'subscribe'
,
label
:
'关注触发'
},
{
value
:
'authentication'
,
label
:
'认证触发'
},
{
value
:
'consume'
,
label
:
'消费触发'
},
{
value
:
'
degrade'
,
label
:
'会员卡降级触发'
},
{
value
:
'upgrade'
,
label
:
'会员卡升级触发'
},
],
// eslint-disable-line
marketingTimesTypeOptions
:
[{
value
:
0
,
label
:
'总共触发'
},
{
value
:
1
,
label
:
'每天触发'
},
{
value
:
2
,
label
:
'每周触发'
},
{
value
:
3
,
label
:
'每月触发'
},
{
value
:
4
,
label
:
'每年触发'
},
{
value
:
-
1
,
label
:
'无限次触发'
}],
// eslint-disable-line
execDateType
:
[
{
label
:
'每天'
,
value
:
1
},
...
...
@@ -79,7 +79,9 @@ export default {
lowest_cost_count
:
''
,
max_cost_count
:
''
,
// store_mode: 0,
order_store
:
''
order_store
:
''
,
storedLowest
:
0
,
storedMax
:
0
},
template
:
{
headerColor
:
'#173177'
,
...
...
@@ -146,7 +148,9 @@ export default {
count
:
false
,
// 消费件数
good
:
false
// 消费商品
},
discount_limit
:
{
type
:
1
,
count
:
undefined
,
flag
:
false
}
// 适用商品折扣
storedChecked
:
false
,
discount_limit
:
{
type
:
1
,
count
:
undefined
,
flag
:
false
},
// 适用商品折扣
useStoredFlag
:
0
//显示储值触发和会员卡升级事件
};
},
components
:
{
...
...
@@ -390,6 +394,13 @@ export default {
}
});
}
if
(
this
.
form
.
effectAction
===
'stored'
&&
result
.
effectTriggerJson
)
{
let
cost
=
JSON
.
parse
(
result
.
effectTriggerJson
)
||
{};
this
.
storedChecked
=
true
;
this
.
form
.
storedLowest
=
cost
.
lowest_cost
;
this
.
form
.
storedMax
=
cost
.
max_cost
;
}
}
if
(
!
this
.
form
.
templateUseEnable
)
return
;
let
template
=
null
;
...
...
@@ -620,6 +631,17 @@ export default {
return
;
}
}
// 如果是储值触发
if
(
this
.
form
.
effectAction
===
'stored'
)
{
if
(
this
.
storedChecked
&&
!
this
.
form
.
storedLowest
&&
!
this
.
form
.
storedMax
)
{
this
.
$tips
({
type
:
'warning'
,
message
:
'请填写储值金额区间值'
});
return
;
}
if
(
this
.
storedChecked
&&
this
.
form
.
storedLowest
&&
this
.
form
.
storedMax
&&
this
.
form
.
storedLowest
>
this
.
form
.
storedMax
)
{
this
.
$tips
({
type
:
'warning'
,
message
:
'储值金额区间值填写错误'
});
return
;
}
}
this
.
$refs
[
formName
].
validate
(
valid
=>
{
if
(
valid
)
{
let
params
=
{
...
...
@@ -703,6 +725,9 @@ export default {
}
params
=
Object
.
assign
(
params
,
consumeObj
);
// 合并消费触发数据
}
if
(
this
.
form
.
effectAction
===
'stored'
&&
this
.
storedChecked
)
{
params
.
effectTriggerJson
=
JSON
.
stringify
({
lowest_cost
:
this
.
form
.
storedLowest
||
0
,
max_cost
:
this
.
form
.
storedMax
||
0
});
}
params
.
marketingActivityId
=
this
.
form
.
marketingActivityId
||
''
;
// 否 String 营销场景
// 如果适用人群-人群筛选器可编辑:需要调用await this.$refs.threshold.triggerPeopleSet(); 强制触发回显,否则数据保存有错误
// await this.triggerPeopleSet();
...
...
@@ -1006,6 +1031,12 @@ export default {
);
},
created
()
{
getUseStoredFalg
().
then
(
res
=>
{
this
.
useStoredFlag
=
res
.
result
.
useStoredFlag
;
if
(
this
.
useStoredFlag
)
{
this
.
effectActionOptions
.
push
({
value
:
'stored'
,
label
:
'储值触发'
});
}
});
// 设置面包屑
let
breadcrumbName
=
'智能营销编辑'
;
if
(
this
.
isAdd
)
{
...
...
src/views/ecm/form.vue
View file @
0b970d90
...
...
@@ -124,7 +124,7 @@
<el-button
type=
"primary"
@
click=
"handleXxSyspClick"
class=
"fl mt5"
size=
"mini"
>
{{ !isAdd ? '查看' : '编辑' }}
</el-button>
<el-button
v-show=
"xxSysp.filterAbbrInfo.length && isAdd"
@
click=
"handleXxSyspReset"
class=
"fl mt5"
size=
"mini"
>
清空
</el-button>
</div>
<div
v-show=
"consumeChecked.good"
class=
"fz12 gray"
>
勾选消费商品后,消费金额、消费件数仅指适用消费商品的金额和件数。
</div>
<div
v-show=
"consumeChecked.good"
class=
"fz12 gray"
style=
"color:#f5222d"
>
勾选消费商品后,消费金额、消费件数仅指适用消费商品的金额和件数。
</div>
</div>
</div>
</el-form-item>
...
...
@@ -143,7 +143,7 @@
<el-input-number
controls-position=
"right"
:disabled=
"!isAdd"
v-model=
"discount_limit.count"
:precision=
"2"
:min=
"0"
:max=
"10"
class=
"w150"
></el-input-number>
折
</div>
<span
class=
"fz14 gray"
v-else
>
不限制消费商品折扣
</span>
<div
v-if=
"discount_limit.flag"
class=
"fz12 gray"
>
* 商品折扣
=订单实付/订单总
金额
</div>
<div
v-if=
"discount_limit.flag"
class=
"fz12 gray"
>
* 商品折扣
= 订单项实付金额 / 订单项应付
金额
</div>
</div>
</div>
</el-form-item>
...
...
@@ -187,6 +187,30 @@
</el-select>
</el-form-item>
</section>
<!-- 储值触发配置 -->
<section
class=
"dm-form__wrap"
v-if=
"form.effectType == 0 && form.effectAction === 'stored'"
>
<h3
class=
"dm-title__label"
>
储值触发配置
<i
class=
"dm-title__label--icon iconfont icon-xinxixianshi"
></i>
<span
class=
"gray fz13"
>
仅适用于线下单笔充值场景;消费、退款等不会触发
</span>
</h3>
<p
class=
"fz14 gray mb20 ml10"
>
同时满足以下条件即可触发
</p>
<el-form-item>
<div
class=
"no_label_form_label"
>
<el-checkbox
class=
"el-form-item__label align-left"
:disabled=
"!isAdd"
v-model=
"storedChecked"
>
储值金额
</el-checkbox>
<div>
<span
class=
"fz14 gray"
v-show=
"!storedChecked"
>
任意储值金额
</span>
<div
v-show=
"storedChecked"
>
<el-input-number
:disabled=
"!isAdd"
controls-position=
"right"
min=
""
:max=
"1000000"
style=
"width:150px;"
v-model=
"form.storedLowest"
></el-input-number>
<span
class=
"ml5 mr5"
>
至
</span>
<el-input-number
:disabled=
"!isAdd"
controls-position=
"right"
min=
""
:max=
"1000000"
style=
"width:150px;"
v-model=
"form.storedMax"
></el-input-number>
<span
class=
"pl5"
>
元
</span>
<el-popover
placement=
"right"
title=
""
width=
"200"
trigger=
"hover"
content=
"最大值最小值可选填其一或两个都填写,包含边界值"
><i
class=
"el-icon-info ml5 gray"
slot=
"reference"
></i></el-popover>
</div>
</div>
</div>
</el-form-item>
</section>
<!-- 营销次数配置 重复 -->
<section
class=
"dm-form__wrap"
v-if=
"form.effectType == 1"
>
<h3
class=
"dm-title__label"
>
...
...
@@ -201,7 +225,7 @@
</div>
</section>
<!-- 营销次数配置 实时触点 -->
<section
class=
"dm-form__wrap"
v-if=
"form.effectType == 0 && ['consume', 'upgrade', 'degrade'].includes(form.effectAction)"
>
<section
class=
"dm-form__wrap"
v-if=
"form.effectType == 0 && ['consume', 'upgrade', 'degrade'
, 'stored'
].includes(form.effectAction)"
>
<h3
class=
"dm-title__label"
>
营销次数配置
<i
class=
"dm-title__label--icon iconfont icon-xinxixianshi"
></i>
...
...
@@ -251,7 +275,7 @@
<section
class=
"dm-form__wrap"
>
<h3
class=
"dm-title__label"
>
营销事件
</h3>
<!-- 只有实时才是单图文 -->
<marketing-event
:readOnly=
"isInfo"
show-out-coupon-icon
ref=
"marketingEvent"
@
has-card=
"hasCard"
v-if=
"ecmPlanId"
:singleFlag=
"form.effectType === 0"
:integralMultiple=
"form.effectAction === 'consume'"
:ecmPlanId=
"ecmPlanId"
:isSupportVar=
"form.effectType === 0"
:code=
"code"
:enabledMessageState=
"enabledMessageState"
:cardLimitType=
"-1"
></marketing-event>
<marketing-event
:readOnly=
"isInfo"
show-out-coupon-icon
ref=
"marketingEvent"
@
has-card=
"hasCard"
v-if=
"ecmPlanId"
:singleFlag=
"form.effectType === 0"
:integralMultiple=
"form.effectAction === 'consume'"
:ecmPlanId=
"ecmPlanId"
:isSupportVar=
"form.effectType === 0"
:code=
"code"
:enabledMessageState=
"enabledMessageState"
:cardLimitType=
"-1"
:use-stored=
"useStoredFlag && ['consume', 'stored'].includes(form.effectAction)"
></marketing-event>
<!-- 只有非实时&&选择卡券了展示提示 -->
<div
v-if=
"currentCard.comName && form.effectType != 0 && couponAutoGetFlag"
class=
"fz13 regular-font-color line-height2"
style=
"margin-left:120px;margin-top:30px;"
>
* 用户在领取卡券后需要
<b
class=
"bold"
>
同步至ERP
</b>
,如果关闭用户
<b
class=
"bold"
>
手动领取
</b>
,卡券在
<b
class=
"bold"
>
批量投放
</b>
时会需要将卡券信息批量同步至ERP。
<br
/>
...
...
src/views/ecm/list.vue
View file @
0b970d90
...
...
@@ -44,7 +44,7 @@
</template>
<
script
>
import
activitySelect
from
'@/components/activity-select/index.vue'
;
import
{
loadEcmList
,
deleteEcm
,
offlineEcmPlan
}
from
'@/service/api/ecmApi.js'
;
import
{
loadEcmList
,
deleteEcm
,
offlineEcmPlan
,
getUseStoredFalg
}
from
'@/service/api/ecmApi.js'
;
import
{
formatDateTimeByType
}
from
'@/utils/index.js'
;
const
marketingTypeOptions
=
[{
value
:
''
,
label
:
'所有发送类型'
},
{
value
:
'card'
,
label
:
'卡券营销'
},
{
value
:
'message'
,
label
:
'短信营销'
},
{
value
:
'teletext'
,
label
:
'图文营销'
},
{
value
:
'text'
,
label
:
'文本营销'
},
{
value
:
'teltask'
,
label
:
'话务'
},
{
value
:
'image'
,
label
:
'微信图片'
}];
// eslint-disable-line
export
default
{
...
...
@@ -130,6 +130,11 @@ export default {
activitySelect
},
created
()
{
getUseStoredFalg
().
then
(
res
=>
{
if
(
res
.
result
.
useStoredFlag
)
{
this
.
marketingTypeOptions
=
[...
this
.
marketingTypeOptions
,
{
value
:
'grade'
,
label
:
'会员卡升级'
}];
}
});
this
.
loadEcmList
();
this
.
$store
.
commit
(
'aside_handler'
,
false
);
this
.
$store
.
commit
(
'mutations_breadcrumb'
,
[{
name
:
'营销管理'
,
path
:
''
},
{
name
:
'智能营销'
,
path
:
'/ecm'
}]);
// eslint-disable-line
...
...
src/views/ecm/marketing-event/assets/api.js
View file @
0b970d90
...
...
@@ -164,3 +164,6 @@ export const deleteMarketingType = params => requests(PREFIX + 'delete-marketing
//模板库--分页列表 (有效)
export
const
LoadTempList
=
params
=>
requests
(
PREFIX
+
'load-message-templateList'
,
params
);
//会员等级
export
const
getCardLevelList
=
params
=>
requests
(
'api-plug/member-grade-list'
,
params
);
src/views/ecm/marketing-event/assets/img/grade.svg
0 → 100644
View file @
0b970d90
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
t=
"1616486164284"
class=
"icon"
viewBox=
"0 0 1025 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"7879"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"200.1953125"
height=
"200"
><defs><style
type=
"text/css"
></style></defs><path
d=
"M833.532723 837.12H22.524723c-7.168 0-14.848-4.096-18.432-9.728-4.608-6.144-5.12-13.824-2.56-20.992l168.96-604.16c3.584-9.216 11.776-14.848 21.504-14.848h810.496c7.168 0 14.848 4.096 18.432 9.728 4.608 6.144 5.12 13.824 2.56 20.992l-168.96 604.16c-3.072 8.704-11.264 14.848-20.992 14.848z m-777.728-46.08h761.856l152.064-558.592H207.868723L55.804723 791.04z"
fill=
"#606266"
p-id=
"7880"
></path><path
d=
"M833.532723 837.12H22.524723c-7.168 0-14.848-4.096-18.432-9.728-4.608-6.144-5.12-13.824-2.56-20.992l168.96-604.16c3.584-9.216 11.776-14.848 21.504-14.848h810.496c7.168 0 14.848 4.096 18.432 9.728 4.608 6.144 5.12 13.824 2.56 20.992l-168.96 604.16c-3.072 8.704-11.264 14.848-20.992 14.848z m-777.728-46.08h761.856l152.064-558.592H207.868723L55.804723 791.04z"
fill=
"#606266"
p-id=
"7881"
></path><path
d=
"M478.204723 393.216L372.732723 634.88H320.508723L219.132723 393.216H276.988723l70.656 182.272 72.192-182.272h58.368z m25.088 241.664V393.216h51.712V634.88H503.292723z m152.064-83.968V634.88h-51.712V393.216h120.832c22.016 0 37.888 1.536 47.104 4.608 15.872 5.12 28.672 16.384 37.888 33.28 6.656 12.288 10.24 26.624 10.24 40.96 0 12.288-2.048 24.064-6.656 34.816-4.608 11.264-10.752 20.48-18.432 27.136-7.168 6.144-15.36 10.752-23.04 12.8-7.68 2.048-18.944 3.584-33.28 3.584H655.868723l-0.512 0.512z m0-43.52h70.144c12.288 0 21.504-1.536 26.624-5.632 7.168-6.144 11.264-16.384 11.264-31.744 0-16.384-5.632-26.624-16.896-30.72-4.096-1.536-10.752-2.56-19.456-2.56H655.868723v70.656h-0.512z"
fill=
"#606266"
p-id=
"7882"
></path></svg>
\ No newline at end of file
src/views/ecm/marketing-event/assets/style/index.css
View file @
0b970d90
...
...
@@ -458,4 +458,16 @@
border-radius
:
4px
;
display
:
inline-block
;
position
:
relative
;
}
\ No newline at end of file
vertical-align
:
middle
;
margin
:
0
10px
;
}
.dm-grade__item__wrap
{
width
:
300px
;
padding
:
18px
20px
;
border
:
1px
solid
rgba
(
228
,
231
,
237
,
1
);
border-radius
:
4px
;
display
:
inline-block
;
position
:
relative
;
vertical-align
:
middle
;
margin
:
0
10px
;
}
src/views/ecm/marketing-event/components/item-grade.vue
0 → 100644
View file @
0b970d90
<
template
>
<div
class=
"dm-grade__item__wrap"
>
<div
class=
"fz16"
>
会员卡升级
</div>
<p
class=
"mt15 fz24 primary-font-color"
>
{{
item
.
title
}}
</p>
<p
class=
"minor-font-color mt10 line-height1_5 fz12"
>
*若当前会员卡等级超过该等级,则不会进行会员升级。
</p>
</div>
</
template
>
<
script
>
export
default
{
name
:
'item-grade'
,
props
:
{
item
:
{
type
:
Object
,
default
()
{
return
{};
}
}
}
};
</
script
>
src/views/ecm/marketing-event/components/lib-grade.vue
0 → 100644
View file @
0b970d90
<
template
>
<el-dialog
title=
"会员卡升级"
:visible
.
sync=
"show"
width=
"340px"
@
closed=
"close"
>
等级:
<el-select
style=
"width:220px"
v-model=
"cardLevel"
placeholder=
"等级选择"
>
<el-option
v-for=
"(el, i) in cardLevelList"
:key=
"i"
:label=
"el.value"
:value=
"el.key"
></el-option>
</el-select>
<p
class=
"minor-font-color mt10 line-height1_5 fz12"
>
*若当前会员卡等级超过该等级,则不会进行会员升级。
</p>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"close"
>
关 闭
</el-button>
<el-button
type=
"primary"
@
click=
"addItem"
>
确 定
</el-button>
</span>
</el-dialog>
</
template
>
<
script
>
import
{
getCardLevelList
}
from
'../assets/api.js'
;
export
default
{
name
:
'lib-grade'
,
props
:
{
item
:
{
type
:
Object
,
default
()
{
return
{};
}
},
show
:
{
type
:
Boolean
,
default
:
false
}
},
data
()
{
return
{
cardLevelList
:
[],
cardLevel
:
''
};
},
mounted
()
{
getCardLevelList
({
requestProject
:
'marketing'
,
key
:
'memberGrade'
}).
then
(
res
=>
{
if
(
res
.
errorCode
===
0
)
{
this
.
cardLevelList
=
res
.
result
;
}
else
{
this
.
$message
({
type
:
'warning'
,
message
:
'接口异常'
});
}
});
},
watch
:
{
show
(
val
)
{
if
(
val
)
{
this
.
cardLevel
=
this
.
item
.
relationId
||
''
;
}
else
{
this
.
cardLevel
=
''
;
}
}
},
methods
:
{
close
()
{
this
.
$emit
(
'update:show'
,
false
);
},
addItem
()
{
if
(
!
this
.
cardLevel
)
{
return
this
.
$message
({
type
:
'warning'
,
message
:
'未选择会员卡等级'
});
}
let
title
=
this
.
cardLevelList
.
find
(
item
=>
item
.
key
===
this
.
cardLevel
).
value
;
this
.
$emit
(
'sendItem'
,
{
title
,
relationId
:
this
.
cardLevel
,
comName
:
'grade'
});
this
.
close
();
}
}
};
</
script
>
src/views/ecm/marketing-event/components/opt.vue
View file @
0b970d90
<
template
>
<div
class=
"inline-block dm-marketing__opt"
>
<span
v-for=
"(v, i) in options"
:key=
"i"
class=
"dm-marketing__opt__item"
@
click=
"addItem(v)"
>
<span
v-for=
"(v, i) in options"
:key=
"i"
class=
"dm-marketing__opt__item"
:class=
"
{ 'is-disabled': v.disabled }"
@click="addItem(v)">
<img
:src=
"v.img"
alt=
""
srcset=
""
/><span>
{{
v
.
name
}}
</span>
</span>
</div>
...
...
@@ -19,8 +19,19 @@ export default {
},
methods
:
{
addItem
(
item
)
{
if
(
item
.
disabled
)
return
;
this
.
$emit
(
'addItem'
,
item
);
}
}
};
</
script
>
<
style
lang=
"scss"
scoped
>
.is-disabled
{
span,
img
{
color
:
#c0c4cc
!important
;
}
cursor
:
not-allowed
;
}
</
style
>
src/views/ecm/marketing-event/index.vue
View file @
0b970d90
...
...
@@ -51,6 +51,7 @@ import itemImage from './components/item-image.vue';
import
itemMessage
from
'./components/item-Message.vue'
;
import
itemTeltask
from
'./components/item-teltask.vue'
;
import
itemIntegral
from
'./components/item-integral.vue'
;
import
itemGrade
from
'./components/item-grade'
;
//弹窗组件
import
libTeletext
from
'./components/lib-teletext.vue'
;
import
libMessage
from
'./components/lib-Message.vue'
;
...
...
@@ -60,10 +61,11 @@ import libWxa from './components/lib-wxa.vue';
import
libImage
from
'./components/lib-image.vue'
;
import
libTeltask
from
'./components/lib-teltask.vue'
;
import
libIntegral
from
'./components/lib-integral.vue'
;
import
libGrade
from
'./components/lib-grade'
;
// 全部的操作项
// eslint-disable-next-line
cons
t
allOptions
=
[{
name
:
'图文'
,
value
:
'teletext'
,
key
:
1
,
img
:
require
(
'./assets/img/teletext.svg'
)
},
{
name
:
'文本'
,
value
:
'text'
,
key
:
2
,
img
:
require
(
'./assets/img/text.svg'
)
},
{
name
:
'小程序'
,
value
:
'wxa'
,
key
:
3
,
img
:
require
(
'./assets/img/wxa.svg'
)
},
{
name
:
'图片'
,
value
:
'image'
,
key
:
4
,
img
:
require
(
'./assets/img/image.svg'
)
},
{
name
:
'卡券'
,
value
:
'card'
,
key
:
5
,
img
:
require
(
'./assets/img/card.svg'
)
},
{
name
:
'短信'
,
value
:
'message'
,
key
:
6
,
img
:
require
(
'./assets/img/message.svg'
)
},
{
name
:
'话务'
,
value
:
'teltask'
,
key
:
7
,
img
:
require
(
'./assets/img/teltask.svg'
)},
{
name
:
'积分'
,
value
:
'integral'
,
key
:
8
,
img
:
require
(
'./assets/img/integral.svg'
)
}];
le
t
allOptions
=
[{
name
:
'图文'
,
value
:
'teletext'
,
key
:
1
,
img
:
require
(
'./assets/img/teletext.svg'
)
},
{
name
:
'文本'
,
value
:
'text'
,
key
:
2
,
img
:
require
(
'./assets/img/text.svg'
)
},
{
name
:
'小程序'
,
value
:
'wxa'
,
key
:
3
,
img
:
require
(
'./assets/img/wxa.svg'
)
},
{
name
:
'图片'
,
value
:
'image'
,
key
:
4
,
img
:
require
(
'./assets/img/image.svg'
)
},
{
name
:
'卡券'
,
value
:
'card'
,
key
:
5
,
img
:
require
(
'./assets/img/card.svg'
)
},
{
name
:
'短信'
,
value
:
'message'
,
key
:
6
,
img
:
require
(
'./assets/img/message.svg'
)
},
{
name
:
'话务'
,
value
:
'teltask'
,
key
:
7
,
img
:
require
(
'./assets/img/teltask.svg'
)},
{
name
:
'积分'
,
value
:
'integral'
,
key
:
8
,
img
:
require
(
'./assets/img/integral.svg'
)
}];
export
default
{
name
:
'vue-gic-marketing-event'
,
components
:
{
...
...
@@ -86,7 +88,9 @@ export default {
'lib-wxa'
:
libWxa
,
'lib-image'
:
libImage
,
'lib-teltask'
:
libTeltask
,
'lib-integral'
:
libIntegral
'lib-integral'
:
libIntegral
,
'item-grade'
:
itemGrade
,
'lib-grade'
:
libGrade
},
props
:
{
// 页面编码——- 1001-智能引擎; 1002-微信营销; 1003-被关注回复; 1004-关键字回复
...
...
@@ -130,6 +134,10 @@ export default {
showOutCouponIcon
:
{
type
:
Boolean
,
default
:
false
},
useStored
:
{
type
:
Number
,
default
:
0
}
},
data
()
{
...
...
@@ -145,8 +153,38 @@ export default {
};
},
created
()
{
this
.
allOptions
=
[...
allOptions
];
if
(
this
.
useStored
)
{
this
.
allOptions
.
push
({
name
:
'会员卡升级'
,
value
:
'grade'
,
key
:
9
,
img
:
require
(
'./assets/img/grade.svg'
)
});
//eslint-disable-line
}
this
.
init
();
},
watch
:
{
useStored
:
{
handler
()
{
if
(
this
.
useStored
)
{
this
.
options
=
[
...
this
.
options
,
{
name
:
'会员卡升级'
,
value
:
'grade'
,
key
:
9
,
img
:
require
(
'./assets/img/grade.svg'
),
disabled
:
false
}];
//eslint-disable-line
}
else
{
this
.
options
=
this
.
options
.
filter
(
item
=>
item
.
value
!==
'grade'
);
}
}
},
list
()
{
if
(
this
.
list
.
some
(
item
=>
item
.
comName
===
'item-grade'
))
{
this
.
options
.
forEach
(
item
=>
{
if
(
item
.
value
==
'grade'
)
{
item
.
disabled
=
true
;
}
});
}
else
{
this
.
options
.
forEach
(
item
=>
{
if
(
item
.
value
==
'grade'
)
{
item
.
disabled
=
false
;
}
});
}
}
},
methods
:
{
/*------------------逻辑方法--------------*/
// 初始化获取配置项
...
...
@@ -157,7 +195,7 @@ export default {
this
.
maxEventCount
=
Number
(
res
.
result
.
maxEventCount
||
0
);
let
list
=
res
.
result
.
list
||
[];
let
optionNameList
=
list
.
map
(
v
=>
v
.
eventName
);
allOptions
.
map
(
v
=>
{
this
.
allOptions
.
map
(
v
=>
{
if
(
optionNameList
.
indexOf
(
v
.
name
)
>=
0
)
{
this
.
options
.
push
(
v
);
}
...
...
@@ -206,6 +244,9 @@ export default {
this
.
list
.
push
({
comName
:
'item-integral'
,
item
:
{
multipleNum
:
v
.
multipleNum
,
integralType
:
v
.
integralType
,
integralCount
:
v
.
integralCount
,
ecmMarketingTypeRelationId
:
v
.
ecmMarketingTypeRelationId
,
relationId
:
v
.
relationId
,
ecmPlanId
:
v
.
ecmPlanId
}
});
// this.list.push({ comName: 'item-teltask', item: { ...v.teltask, ecmMarketingTypeRelationId: v.ecmMarketingTypeRelationId, relationId: v.relationId, ecmPlanId: v.ecmPlanId } });
break
;
case
'grade'
:
// 8 积分
this
.
list
.
push
({
comName
:
'item-grade'
,
item
:
{
title
:
v
.
title
,
ecmMarketingTypeRelationId
:
v
.
ecmMarketingTypeRelationId
,
relationId
:
v
.
relationId
,
ecmPlanId
:
v
.
ecmPlanId
}
});
break
;
}
});
this
.
hasReturnCard
();
...
...
@@ -290,6 +331,12 @@ export default {
params
.
title
=
`
${
val
.
multipleNum
}
倍积分`
;
}
}
//9.会员卡升级
if
(
val
.
comName
===
'grade'
)
{
params
.
title
=
val
.
title
;
params
.
relationId
=
val
.
relationId
;
}
// 接口请求 保存
saveUpdateMarketingType
({
marketingType
:
JSON
.
stringify
(
params
)
})
.
then
(
res
=>
{
...
...
@@ -305,6 +352,10 @@ export default {
this
.
$message
({
type
:
'warning'
,
message
:
`最多只能添加
${
this
.
maxEventCount
}
个营销事件`
});
return
;
}
// if (v.value === 'grade' && this.list.some(item => item.comName === 'item-grade')) {
// this.$message({ type: 'warning', message: `已添加会员卡升级营销事件` });
// return;
// }
// 判断是否欠费
if
(
v
.
value
===
'message'
&&
this
.
checkAccountState
())
return
;
this
.
dialogCom
=
'lib-'
+
v
.
value
;
...
...
src/views/game/ptyx/config.vue
View file @
0b970d90
<
template
>
<el-dialog
title=
"拼图配置"
:visible
.
sync=
"show"
width=
"40%"
:before-close=
"close"
>
<div
v-loading=
"loading"
>
<div
class=
"layout--tips"
style=
"margin-top:0"
>
<i
class=
"el-icon-info"
></i>
免费赠送游戏前提:需要在前一天玩过游戏
</div>
<div
style=
"margin-top:20px"
v-loading=
"loading"
>
<h3
class=
"fz16 pb20"
>
机制设置
</h3>
<h4
class=
"fz14 gray pb20"
>
用户免费体力数
</h4>
<el-radio
v-model=
"form.sysGiveValueType"
:label=
"1"
>
...
...
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