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
6f95c437
Commit
6f95c437
authored
Apr 25, 2019
by
chenxin
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'cx' into 'dev'
Cx See merge request
!10
parents
d99c03da
d2ddf1ac
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
163 additions
and
45 deletions
+163
-45
upload.js
src/directives/upload.js
+1
-1
calllogApi.js
src/service/api/calllogApi.js
+3
-1
rechargeApi.js
src/service/api/rechargeApi.js
+3
-0
calllog.vue
src/views/calllog/calllog.vue
+3
-2
record.vue
src/views/calllog/record.vue
+29
-14
batch-dialog.vue
src/views/ecm/batch-dialog.vue
+2
-2
current-list.vue
src/views/ecm/current-list.vue
+2
-2
form.js
src/views/ecm/form.js
+10
-6
form.vue
src/views/ecm/form.vue
+5
-5
board.vue
src/views/recharge/board.vue
+5
-5
consume.vue
src/views/recharge/consume.vue
+90
-4
recharge.vue
src/views/recharge/recharge.vue
+10
-3
No files found.
src/directives/upload.js
View file @
6f95c437
...
...
@@ -54,6 +54,7 @@ export default {
})
.
catch
(
err
=>
{
binding
.
value
.
$tips
({
type
:
'warning'
,
message
:
err
.
message
});
binding
.
value
.
loading
=
false
;
});
}
else
{
upload
();
...
...
@@ -68,7 +69,6 @@ export default {
axios
.
post
(
config
.
api
+
binding
.
value
.
url
,
formData
)
.
then
(
res
=>
{
console
.
log
(
res
);
binding
.
value
.
loading
=
false
;
el
.
value
=
''
;
if
(
res
.
data
.
errorCode
===
0
)
{
...
...
src/service/api/calllogApi.js
View file @
6f95c437
import
{
requests
}
from
'./index'
;
const
PREFIX
=
'api-marketing/'
;
//智能营销--
ECM营销引擎分页列表
//智能营销--
通话记录
export
const
callLogList
=
params
=>
requests
(
PREFIX
+
'call-log'
,
params
);
export
const
saveCallSetting
=
params
=>
requests
(
PREFIX
+
'save-call-setting'
,
params
);
// 录音设置保存
export
const
getCallSetting
=
params
=>
requests
(
PREFIX
+
'get-call-setting'
,
params
);
// 录音配置
src/service/api/rechargeApi.js
View file @
6f95c437
...
...
@@ -27,6 +27,9 @@ export const voiceData = params => requests(PREFIX + 'voice-data', params);
//计费中心--双向呼叫消费详情
export
const
callData
=
params
=>
requests
(
PREFIX
+
'call-data'
,
params
);
//计费中心--通话录音消费详情
export
const
recordData
=
params
=>
requests
(
PREFIX
+
'call-record-data'
,
params
);
//计费中心--点击充值后--第一步:获取余额, 各项服务单价
export
const
rechargeStep0
=
params
=>
requests
(
PREFIX
+
'recharge-step-1'
,
params
);
...
...
src/views/calllog/calllog.vue
View file @
6f95c437
...
...
@@ -9,7 +9,7 @@
<el-option
v-for=
"(v, i) in telTaskTypeOption"
:key=
"i"
:label=
"v.label"
:value=
"v.value"
></el-option>
</el-select>
<el-input
v-model=
"listParams.phoneNumber"
class=
"w200"
placeholder=
"输入号码查询"
clearable
@
change=
"refresh"
><i
slot=
"prefix"
class=
"el-input__icon el-icon-search"
></i></el-input>
<
!--
<el-button
type=
"primary"
class=
"fr"
@
click=
"$router.push('/calllog/record')"
>
录音设置
</el-button>
--
>
<
el-button
type=
"primary"
class=
"fr"
@
click=
"$router.push('/calllog/record')"
>
录音设置
</el-button
>
</div>
<el-table
tooltipEffect=
"light"
:data=
"tableList"
style=
"width:100%"
v-loading=
"loading"
>
<el-table-column
align=
"left"
width=
"160"
prop=
"callBeginTime"
label=
"呼叫时间"
>
...
...
@@ -52,7 +52,8 @@
</el-table-column>
<el-table-column
align=
"left"
width=
"150"
prop=
"callFee"
label=
"录音"
>
<
template
slot-scope=
"scope"
>
<a
v-if=
"scope.row.recordUrl && scope.row.callStatus == 2"
:href=
"scope.row.recordUrl"
target=
"_blank"
title=
"通话录音"
>
通话录音
</a>
<span
v-if=
"scope.row.showStatus !== 1"
>
{{
scope
.
row
.
description
}}
</span>
<a
v-else
:href=
"scope.row.showRecordUrl"
target=
"_blank"
:title=
"scope.row.description"
><i
class=
"iconfont icon-xinxixianshi2 pr5"
></i>
{{
scope
.
row
.
description
}}
</a>
</
template
>
</el-table-column>
</el-table>
...
...
src/views/calllog/record.vue
View file @
6f95c437
<
template
>
<section
class=
"dm-wrap"
v-loading=
"loading"
element-loading-text=
"数据保存中"
>
<el-alert
type=
"info"
:closable=
"false"
show-icon
>
<p
slot=
"title"
class=
"fz1
6 info-color line-height1_5"
>
使用录音功能需开启录音服务,未开启则录音不作保存。开启后,仅支持保存从开启当天起的录音数据,未开启录音服务之前的历史录音数据不做同步。选择不同保存时长收费标准不同,当前收费标准如下:1、三个月 0.04元/分钟 2、六个月 0.06元/分钟 3、十二个月 0.1
元/分钟
</p>
<p
slot=
"title"
class=
"fz1
4 info-color line-height1_5"
>
使用录音功能需开启录音服务,未开启则录音不作保存。开启后,仅支持保存从开启当天起的录音数据,未开启录音服务之前的历史录音数据不做同步。选择不同保存时长收费标准不同,当前收费标准如下:1、三个月
{{
allUnitFee
.
storageThreeFee
}}
元/分钟 2、六个月
{{
allUnitFee
.
storageSixFee
}}
元/分钟 3、十二个月
{{
allUnitFee
.
storageTwelveFee
}}
元/分钟
</p>
</el-alert>
<section
class=
"mt20"
>
<div
class=
"mb20"
>
<span
class=
"dm-input_label mr10"
>
开启录音服务
</span>
<el-switch
v-model=
"
swithKey
"
></el-switch>
<el-switch
v-model=
"
openFlag
"
></el-switch>
</div>
<div>
<span
class=
"dm-input_label mr10"
>
录音保存时长
</span>
<el-radio-group
v-model=
"s
aveTim
e"
>
<el-radio
:label=
"
3
"
>
三个月
</el-radio>
<el-radio
:label=
"
6
"
>
六个月
</el-radio>
<el-radio
:label=
"
9
"
>
十二个月
</el-radio>
<el-radio-group
v-model=
"s
torageTyp
e"
>
<el-radio
:label=
"
0
"
>
三个月
</el-radio>
<el-radio
:label=
"
1
"
>
六个月
</el-radio>
<el-radio
:label=
"
2
"
>
十二个月
</el-radio>
</el-radio-group>
</div>
<div
class=
"mt30"
><el-button
type=
"primary"
class=
"save"
@
click=
"submit"
>
保存
</el-button></div>
...
...
@@ -22,29 +22,44 @@
</
template
>
<
script
>
import
{
saveCallSetting
,
getCallSetting
}
from
'@/service/api/calllogApi.js'
;
export
default
{
name
:
'record'
,
data
()
{
return
{
swithKey
:
false
,
saveTime
:
3
,
loading
:
false
openFlag
:
false
,
storageType
:
0
,
loading
:
false
,
// 录音收费
allUnitFee
:
{
storageThreeFee
:
0
,
storageSixFee
:
0
,
storageTwelveFee
:
0
}
};
},
methods
:
{
// getRecordDetail() {}
submit
()
{
this
.
loading
=
true
;
setTimeout
(()
=>
{
const
{
openFlag
,
storageType
}
=
this
;
saveCallSetting
({
openFlag
:
Number
(
openFlag
),
storageType
}).
then
(
res
=>
{
this
.
loading
=
false
;
this
.
$tips
({
type
:
'success'
,
message
:
'保存成功!'
});
// this.$tips({ type: 'error', message: '删除失败!' });
},
2000
);
this
.
$tips
({
type
:
'success'
,
message
:
res
.
result
});
});
}
},
created
()
{
this
.
$store
.
commit
(
'aside_handler'
,
false
);
this
.
$store
.
commit
(
'mutations_breadcrumb'
,
[{
name
:
'会员管理'
,
path
:
''
},
{
name
:
'通话记录'
,
path
:
'/calllog/index'
},
{
name
:
'录音存储设置'
,
path
:
''
}]);
getCallSetting
().
then
(
res
=>
{
const
{
callSetting
,
unitFee
}
=
res
.
result
;
if
(
callSetting
)
{
this
.
openFlag
=
!!
callSetting
.
openFlag
;
this
.
storageType
=
callSetting
.
storageType
;
}
this
.
allUnitFee
=
unitFee
;
});
}
};
</
script
>
...
...
src/views/ecm/batch-dialog.vue
View file @
6f95c437
...
...
@@ -74,8 +74,8 @@ export default {
return
row
.
errCode
===
'0'
?
'满足'
:
'不满足'
;
}
},
{
label
:
'主门店'
,
prop
:
'main
ClerkCod
e'
,
minWidth
:
'120'
,
align
:
'left'
},
{
label
:
'专属导购'
,
prop
:
'main
StoreNam
e'
,
minWidth
:
'120'
,
align
:
'left'
},
{
label
:
'主门店'
,
prop
:
'main
StoreNam
e'
,
minWidth
:
'120'
,
align
:
'left'
},
{
label
:
'专属导购'
,
prop
:
'main
ClerkCod
e'
,
minWidth
:
'120'
,
align
:
'left'
},
{
label
:
'备注'
,
prop
:
'errMsg'
,
minWidth
:
'120'
,
align
:
'left'
}
],
tableList
:
[],
...
...
src/views/ecm/current-list.vue
View file @
6f95c437
...
...
@@ -106,8 +106,8 @@ export default {
},
{
label
:
'会员信息'
,
prop
:
'marketingType'
,
minWidth
:
'120'
,
align
:
'left'
,
component
:
'member-info'
},
{
label
:
'手机号码'
,
prop
:
'phoneNumber'
,
minWidth
:
'120'
,
align
:
'left'
},
{
label
:
'主门店'
,
prop
:
'main
ClerkCod
e'
,
minWidth
:
'120'
,
align
:
'left'
},
{
label
:
'专属导购'
,
prop
:
'main
StoreNam
e'
,
minWidth
:
'120'
,
align
:
'left'
},
{
label
:
'主门店'
,
prop
:
'main
StoreNam
e'
,
minWidth
:
'120'
,
align
:
'left'
},
{
label
:
'专属导购'
,
prop
:
'main
ClerkCod
e'
,
minWidth
:
'120'
,
align
:
'left'
},
{
label
:
'状态'
,
prop
:
'errCode'
,
...
...
src/views/ecm/form.js
View file @
6f95c437
...
...
@@ -696,19 +696,23 @@ export default {
getData
()
{
this
.
$refs
.
peopleFilter
.
confirmSet
();
},
// 子组件触发父组件事件,返回过滤条件数据
// 子组件触发父组件事件,返回过滤条件数据
-- 仅新增时保存
findFilter
(
value
)
{
this
.
form
.
memberSearchDTO
=
value
;
if
(
this
.
isAdd
)
{
this
.
form
.
memberSearchDTO
=
value
;
}
},
// 取消
cancelFilter
()
{
this
.
$refs
.
peopleFilter
.
cancelSet
();
},
// 获取需要回显的数据, 供保存时候使用
// 获取需要回显的数据, 供保存时候使用
-- 仅新增时保存
getBackData
(
val
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
this
.
getSaveData
=
val
;
console
.
log
(
this
.
getSaveData
,
val
);
if
(
this
.
isAdd
)
{
this
.
getSaveData
=
val
;
}
// console.log(this.getSaveData, val);
resolve
();
});
},
...
...
@@ -737,7 +741,7 @@ export default {
}
},
handleDataLeft
(
selectedData
,
selectionToRemove
)
{
console
.
log
(
selectedData
,
selectionToRemove
);
//
console.log(selectedData, selectionToRemove);
}
},
filters
:
{
...
...
src/views/ecm/form.vue
View file @
6f95c437
...
...
@@ -35,15 +35,15 @@
<el-checkbox-group
v-model=
"checked"
:max=
"1"
>
<div
class=
"pb10"
>
<el-checkbox
:disabled=
"isEdit"
class=
"w150"
label=
"brithday_day"
>
会员生日前
</el-checkbox>
<el-input-number
controls-position=
"right"
:min=
"checked[0] === 'brithday_day' ? 1 : 0"
style=
"width:244px;"
:disabled=
"checked[0] !== 'brithday_day'"
v-model=
"form.brithday_day"
></el-input-number>
天
<el-input-number
controls-position=
"right"
:min=
"checked[0] === 'brithday_day' ? 1 : 0"
style=
"width:244px;"
:disabled=
"checked[0] !== 'brithday_day'
|| isEdit
"
v-model=
"form.brithday_day"
></el-input-number>
天
</div>
<div
class=
"pb10"
>
<el-checkbox
:disabled=
"isEdit"
class=
"w150"
label=
"attention_day"
>
关注时长超过
</el-checkbox>
<el-input-number
controls-position=
"right"
:min=
"checked[0] === 'attention_day' ? 1 : 0"
:max=
"100000"
style=
"width:244px;"
:disabled=
"checked[0] !== 'attention_day'"
v-model=
"form.attention_day"
></el-input-number>
天
<el-input-number
controls-position=
"right"
:min=
"checked[0] === 'attention_day' ? 1 : 0"
:max=
"100000"
style=
"width:244px;"
:disabled=
"checked[0] !== 'attention_day'
|| isEdit
"
v-model=
"form.attention_day"
></el-input-number>
天
</div>
<div
class=
"pb10"
>
<el-checkbox
:disabled=
"isEdit"
class=
"w150"
label=
"lastCost_day"
>
最近消费间隔
</el-checkbox>
<el-input-number
controls-position=
"right"
:min=
"checked[0] === 'lastCost_day' ? 1 : 0"
style=
"width:244px;"
:disabled=
"checked[0] !== 'lastCost_day'"
v-model=
"form.lastCost_day"
></el-input-number>
天
<el-input-number
controls-position=
"right"
:min=
"checked[0] === 'lastCost_day' ? 1 : 0"
style=
"width:244px;"
:disabled=
"checked[0] !== 'lastCost_day'
|| isEdit
"
v-model=
"form.lastCost_day"
></el-input-number>
天
</div>
</el-checkbox-group>
</el-form-item>
...
...
@@ -67,7 +67,7 @@
<el-input-number
:disabled=
"isEdit"
controls-position=
"right"
min=
""
style=
"width:150px;"
v-model=
"form.max_cost"
@
change=
"handleLowestCost()"
></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>
<span
class=
"pl20 fz13 red"
v-show=
"error_cost_info
!==''"
>
*
{{
error_cost_info
}}
</span>
<span
class=
"pl20 fz13 red"
v-show=
"error_cost_info
!== ''"
>
*
{{
error_cost_info
}}
</span>
</el-form-item>
<el-form-item
label=
"消费件数"
>
<el-input-number
:disabled=
"isEdit"
controls-position=
"right"
min=
""
style=
"width:150px;"
v-model=
"form.lowest_cost_count"
@
change=
"handleLowestCostCount()"
></el-input-number>
...
...
@@ -75,7 +75,7 @@
<el-input-number
:disabled=
"isEdit"
controls-position=
"right"
min=
""
style=
"width:150px;"
v-model=
"form.max_cost_count"
@
change=
"handleLowestCostCount()"
></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>
<span
class=
"pl20 fz13 red"
v-show=
"error_cost_count_info
!==
''"
>
*
{{
error_cost_count_info
}}
</span>
<span
class=
"pl20 fz13 red"
v-show=
"error_cost_count_info
!==
''"
>
*
{{
error_cost_count_info
}}
</span>
</el-form-item>
<el-form-item
label=
"指定消费门店"
>
<el-radio-group
v-model=
"form.store_mode"
@
change=
"initStoreCardLeft"
:disabled=
"isEdit"
>
...
...
src/views/recharge/board.vue
View file @
6f95c437
...
...
@@ -83,9 +83,9 @@
</div>
<div
class=
"text-center fr"
>
<p
class=
"text-right"
>
<span
class=
"fz30"
>
{{
recharge
.
c
allTime
||
0
}}
</span>
分钟
<span
class=
"fz30"
>
{{
recharge
.
recordC
allTime
||
0
}}
</span>
分钟
</p>
<p
class=
"regular-font-color"
>
合计费用:¥
{{
(
recharge
.
callFee
/
10
00
).
toFixed
(
2
)
||
0
}}
</p>
<p
class=
"regular-font-color"
>
合计费用:¥
{{
(
recharge
.
recordCallfee
/
1
00
).
toFixed
(
2
)
||
0
}}
</p>
</div>
</div>
</el-col>
...
...
@@ -102,12 +102,12 @@
<el-table-column
align=
"left"
prop=
"count"
label=
"时长/条数"
>
<template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
count
}}
</span>
{{
scope
.
row
.
name
===
'双向呼叫
'
?
'分钟'
:
'条'
}}
{{
scope
.
row
.
type
===
'call'
||
scope
.
row
.
type
===
'record
'
?
'分钟'
:
'条'
}}
</
template
>
</el-table-column>
<el-table-column
align=
"left"
prop=
"fee"
label=
"费用"
>
<
template
slot-scope=
"scope"
>
<span>
{{
(
scope
.
row
.
fee
/
1000
).
toFixed
(
2
)
}}
</span
<span>
{{
(
scope
.
row
.
fee
/
(
scope
.
row
.
type
===
'record'
?
100
:
1000
)
).
toFixed
(
2
)
}}
</span
>
元
</
template
>
</el-table-column>
...
...
@@ -166,7 +166,7 @@ export default {
try
{
let
res
=
await
consumeRecord
(
this
.
listParams
);
const
result
=
res
.
result
;
this
.
tableList
=
[{
name
:
'短信营销'
,
type
:
'marketing'
,
fee
:
result
.
messageFee
,
count
:
result
.
messageCount
},
{
name
:
'短信验证码'
,
type
:
'sms'
,
fee
:
result
.
smsFee
,
count
:
result
.
smsCount
},
{
name
:
'语音验证码'
,
type
:
'voice'
,
fee
:
result
.
voiceFee
,
count
:
result
.
voiceCount
},
{
name
:
'双向呼叫'
,
type
:
'call'
,
fee
:
result
.
callFee
,
count
:
result
.
callTime
}];
this
.
tableList
=
[{
name
:
'短信营销'
,
type
:
'marketing'
,
fee
:
result
.
messageFee
,
count
:
result
.
messageCount
},
{
name
:
'短信验证码'
,
type
:
'sms'
,
fee
:
result
.
smsFee
,
count
:
result
.
smsCount
},
{
name
:
'语音验证码'
,
type
:
'voice'
,
fee
:
result
.
voiceFee
,
count
:
result
.
voiceCount
},
{
name
:
'双向呼叫'
,
type
:
'call'
,
fee
:
result
.
callFee
,
count
:
result
.
callTime
}
,
{
name
:
'通话录音'
,
type
:
'record'
,
fee
:
result
.
recordCallfee
,
count
:
result
.
recordCallTime
}
];
}
catch
(
err
)
{
console
.
log
(
err
);
}
...
...
src/views/recharge/consume.vue
View file @
6f95c437
...
...
@@ -3,7 +3,8 @@
<div
class=
"dm-wrap"
>
日期:
<el-date-picker
v-model=
"dateTime"
type=
"daterange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
@
change=
"loadAll(false)"
></el-date-picker></div>
<div
class=
"dm-form__wrap"
>
<h3
class=
"dm-title__label"
>
趋势分析图
</h3>
<div
class=
"text-center fz16"
>
{{
formatDateTimeByType
(
dateTime
[
0
],
'yyyy-MM-dd'
)
}}
至
{{
formatDateTimeByType
(
dateTime
[
1
],
'yyyy-MM-dd'
)
}}
成功发送:
{{
sumCount
||
0
}}
条 总计消费:
{{
(
sumFee
/
1000
).
toFixed
(
2
)
}}
元
</div>
<div
class=
"text-center fz16"
v-if=
"$route.params.type === 'record'"
>
{{
formatDateTimeByType
(
dateTime
[
0
],
'yyyy-MM-dd'
)
}}
至
{{
formatDateTimeByType
(
dateTime
[
1
],
'yyyy-MM-dd'
)
}}
成功存储:
{{
sumCount
||
0
}}
分钟 总计消费:
{{
(
sumFee
/
100
).
toFixed
(
2
)
}}
元
</div>
<div
class=
"text-center fz16"
v-else
>
{{
formatDateTimeByType
(
dateTime
[
0
],
'yyyy-MM-dd'
)
}}
至
{{
formatDateTimeByType
(
dateTime
[
1
],
'yyyy-MM-dd'
)
}}
成功发送:
{{
sumCount
||
0
}}
条 总计消费:
{{
(
sumFee
/
1000
).
toFixed
(
2
)
}}
元
</div>
<div>
<div
id=
"mountNode"
ref=
"mountNode"
v-show=
"list.length"
></div>
<div
class=
"chart--nodata"
v-show=
"!list.length"
></div>
...
...
@@ -136,12 +137,60 @@
</
template
>
</el-table-column>
</el-table>
<el-table
tooltipEffect=
"light"
:data=
"tableList"
style=
"width:100%"
v-loading=
"loading"
v-if=
"$route.params.type === 'record'"
>
<el-table-column
align=
"left"
width=
"160"
prop=
"createTime"
label=
"呼叫时间"
>
<
template
slot-scope=
"scope"
>
{{
formatDateTimeByType
(
scope
.
row
.
callBeginTime
,
'yyyy-MM-dd-HH-mm-ss'
)
}}
</
template
>
</el-table-column>
<el-table-column
:show-overflow-tooltip=
"true"
align=
"left"
min-width=
"180"
prop=
"storeName"
label=
"主门店"
>
<
template
slot-scope=
"scope"
>
<p>
{{
scope
.
row
.
storeName
}}
</p>
<p
class=
"fz13 gray"
>
{{
scope
.
row
.
storeGroupName
}}
</p>
</
template
>
</el-table-column>
<el-table-column
align=
"left"
width=
"150"
prop=
"clerkName"
label=
"主叫"
>
<
template
slot-scope=
"scope"
>
<p>
{{
scope
.
row
.
clerkName
||
'--'
}}
</p>
<p
class=
"gray"
>
{{
scope
.
row
.
clerkPhoneNumber
}}
</p>
</
template
>
</el-table-column>
<el-table-column
align=
"left"
width=
"150"
prop=
"memberId"
label=
"被叫(会员)"
>
<
template
slot-scope=
"scope"
>
<img
:src=
"scope.row.memberImgUrl || defaultAvatar"
width=
"32"
height=
"32"
alt=
""
/>
<div
class=
"inline-block"
>
<p>
{{
scope
.
row
.
memberName
||
'--'
}}
</p>
<p
class=
"fz13 gray"
>
{{
scope
.
row
.
receivePhone
||
'--'
}}
</p>
</div>
</
template
>
</el-table-column>
<el-table-column
align=
"left"
width=
"150"
prop=
"status"
label=
"类型"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
telTaskTitle
}}
</
template
>
</el-table-column>
<el-table-column
align=
"left"
width=
"150"
prop=
"status"
label=
"录音保存时长"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
storageTypeRemark
}}
</
template
>
</el-table-column>
<el-table-column
align=
"left"
width=
"150"
prop=
"callTime"
label=
"时间(分钟)"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
callTime
}}
分钟
</
template
>
</el-table-column>
<el-table-column
align=
"left"
width=
"150"
prop=
"callFee"
label=
"消费金额(元)"
>
<
template
slot-scope=
"scope"
>
{{
Number
(
scope
.
row
.
storageFee
/
100
).
toFixed
(
2
)
}}
元
</
template
>
</el-table-column>
</el-table>
<el-pagination
v-show=
"tableList.length"
background
class=
"dm-pagination"
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
:current-page=
"listParams.currentPage"
:page-sizes=
"[10, 20, 30, 40]"
:page-size=
"listParams.pageSize"
layout=
"total, sizes, prev, pager, next"
:total=
"total"
></el-pagination>
</div>
</section>
</template>
<
script
>
import
{
messageMarketingChart
,
messageMarketingPage
,
smsData
,
voiceData
,
callData
}
from
'@/service/api/rechargeApi.js'
;
import
{
messageMarketingChart
,
messageMarketingPage
,
smsData
,
voiceData
,
callData
,
recordData
}
from
'@/service/api/rechargeApi.js'
;
import
{
formatDateTimeByType
}
from
'@/utils/index.js'
;
import
G2
from
'@antv/g2'
;
export
default
{
...
...
@@ -219,6 +268,13 @@ export default {
}
this
.
callData
(
'list'
);
}
if
(
this
.
$route
.
params
.
type
===
'record'
)
{
this
.
placeholder
=
'输入手机号码'
;
if
(
!
onlyList
)
{
this
.
recordData
(
'charts'
);
}
this
.
recordData
(
'list'
);
}
},
async
marketingList
()
{
this
.
loading
=
true
;
...
...
@@ -343,7 +399,37 @@ export default {
}
catch
(
err
)
{}
this
.
loading
=
false
;
},
async
recordData
(
type
=
'list'
)
{
this
.
loading
=
true
;
try
{
let
res
=
await
recordData
(
Object
.
assign
({
ajaxType
:
type
,
taskType
:
type
===
'list'
?
this
.
taskType
:
''
},
this
.
listParams
));
if
(
type
===
'list'
)
{
if
(
res
.
errorCode
===
0
&&
res
.
result
.
page
.
result
)
{
this
.
tableList
=
res
.
result
.
page
.
result
||
[];
this
.
total
=
res
.
result
.
page
.
totalCount
;
this
.
taskTypeOptions
=
[{
taskType
:
''
,
ecmName
:
'全部'
},
{
taskType
:
1
,
ecmName
:
'不良评价回访'
}];
}
else
{
this
.
tableList
=
[];
}
}
else
if
(
type
===
'charts'
)
{
this
.
sumCount
=
res
.
result
.
sumCallTime
;
this
.
sumFee
=
res
.
result
.
sumFee
;
let
chartList
=
res
.
result
.
chartList
||
[];
let
list
=
[];
chartList
.
map
(
v
=>
{
list
.
push
({
day
:
v
.
chartsDate
,
name
:
'录音存储消费'
,
temperature
:
v
.
fee
?
(
parseInt
(
v
.
fee
)
/
100
).
toFixed
(
2
)
:
0
});
});
list
.
sort
((
a
,
b
)
=>
{
return
a
.
temperature
-
b
.
temperature
;
});
this
.
list
=
list
;
this
.
$nextTick
(
_
=>
{
this
.
initCharts
(
list
,
'mountNode'
);
});
}
}
catch
(
err
)
{}
this
.
loading
=
false
;
},
//生成折线图
initCharts
(
data
,
nodeName
)
{
//先清空原先图表
...
...
@@ -374,7 +460,7 @@ export default {
chart
.
axis
(
'temperature'
,
{
label
:
{
formatter
:
function
formatter
(
val
)
{
console
.
log
(
val
);
//
console.log(val);
return
(
isNaN
(
val
)
?
'0.00'
:
val
)
+
'元'
;
}
}
...
...
src/views/recharge/recharge.vue
View file @
6f95c437
...
...
@@ -32,7 +32,7 @@
<p
class=
"fz12 gray line-height2"
>
2、请尽量保障账户余额大于您日常使用的额度,避免因余额不足导致业务中断
</p>
<p
class=
"fz12 gray line-height2"
>
3、若未能及时充值或其他问题,请联系客户经理或客服人员
</p>
<p
class=
"fz12 gray line-height2"
>
4、各项服务单价:短信验证码
{{
allUnitFee
.
smsfee
}}
元/条,语音验证码
{{
allUnitFee
.
voiceIfee
}}
元/条,双向呼叫
{{
allUnitFee
.
callfee
}}
元/分钟
</p>
<p
class=
"fz12 gray line-height2"
>
5、通话录音存储收费标准:「三个月
0.04元/分钟」「六个月0.06元/分钟」「十二个月0.1
元/分钟」,不满一分钟按一分钟收费
</p>
<p
class=
"fz12 gray line-height2"
>
5、通话录音存储收费标准:「三个月
{{
allUnitFee
.
storageThreeFee
}}
元/分钟」「六个月
{{
allUnitFee
.
storageSixFee
}}
元/分钟」「十二个月
{{
allUnitFee
.
storageTwelveFee
}}
元/分钟」,不满一分钟按一分钟收费
</p>
</div>
</article>
<article
v-if=
"step === 1"
>
...
...
@@ -83,7 +83,14 @@ export default {
step
:
0
,
balance
:
0
,
transactionCode
:
''
,
allUnitFee
:
{},
allUnitFee
:
{
callfee
:
0
,
smsfee
:
0
,
voiceIfee
:
0
,
storageThreeFee
:
0
,
storageSixFee
:
0
,
storageTwelveFee
:
0
},
count
:
100
,
countDown
:
5
,
// eslint-disable-next-line
...
...
@@ -125,7 +132,7 @@ export default {
this
.
count
=
Math
.
ceil
(
Math
.
abs
(
this
.
balance
));
}
this
.
transactionCode
=
res
.
result
.
transactionCode
;
this
.
allUnitFee
=
res
.
result
.
allUnitFee
;
Object
.
assign
(
this
.
allUnitFee
,
res
.
result
.
allUnitFee
)
;
}
else
{
this
.
$tips
({
type
:
'error'
,
message
:
'初始化失败'
});
}
...
...
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