Commit 2fe22296 by caoyanzhi

Merge branch 'feature/3月迭代' into feature/4月-会员通

parents 35b83159 88bc12c2
......@@ -5999,7 +5999,7 @@
.el-button:hover, .el-button:focus {
color: #2F54EB;
border-color: #2F54EB;
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-button:active {
color: #1D39C4;
border-color: #1D39C4;
......@@ -6074,8 +6074,8 @@
border-color: #8cc8ff; }
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff; }
background: #EBEFFE;
border-color: #2f54eb; }
.el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus {
background: #2F54EB;
border-color: #2F54EB;
......@@ -6087,7 +6087,7 @@
outline: none; }
.el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff; }
.el-button--success {
color: #fff;
......@@ -6720,7 +6720,7 @@
cursor: pointer;
outline: none; }
.el-dropdown-menu__item:not(.is-disabled):hover, .el-dropdown-menu__item:focus {
background-color: #e8f4ff;
background-color: #EBEFFE;
color: #597EF7; }
.el-dropdown-menu__item--divided {
position: relative;
......@@ -7365,7 +7365,7 @@
color: #909399; }
.el-menu-item:hover, .el-menu-item:focus {
outline: none;
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-menu-item.is-disabled {
opacity: 0.25;
cursor: not-allowed;
......@@ -7405,13 +7405,13 @@
color: #909399; }
.el-submenu__title:hover, .el-submenu__title:focus {
outline: none;
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-submenu__title.is-disabled {
opacity: 0.25;
cursor: not-allowed;
background: none !important; }
.el-submenu__title:hover {
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-submenu .el-menu {
border: none; }
.el-submenu .el-menu-item {
......@@ -13717,7 +13717,7 @@
.el-button:hover, .el-button:focus {
color: #2F54EB;
border-color: #2F54EB;
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-button:active {
color: #1D39C4;
border-color: #1D39C4;
......@@ -13792,8 +13792,8 @@
border-color: #8cc8ff; }
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff; }
background: #EBEFFE;
border-color: #2f54eb; }
.el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus {
background: #2F54EB;
border-color: #2F54EB;
......@@ -13805,7 +13805,7 @@
outline: none; }
.el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff; }
.el-button--success {
color: #fff;
......@@ -15884,11 +15884,11 @@
.el-table--striped .el-table__body tr.el-table__row--striped td {
background: #FAFAFA; }
.el-table--striped .el-table__body tr.el-table__row--striped.current-row td {
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-table__body tr.hover-row > td, .el-table__body tr.hover-row.current-row > td, .el-table__body tr.hover-row.el-table__row--striped > td, .el-table__body tr.hover-row.el-table__row--striped.current-row > td {
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-table__body tr.current-row > td {
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-table__column-resize-proxy {
position: absolute;
left: 200px;
......@@ -17103,7 +17103,7 @@
cursor: pointer;
font-size: 14px; }
.el-table-filter__list-item:hover {
background-color: #e8f4ff;
background-color: #EBEFFE;
color: #597EF7; }
.el-table-filter__list-item.is-active {
background-color: #2F54EB;
......@@ -26373,7 +26373,7 @@
.el-button:hover, .el-button:focus {
color: #2F54EB;
border-color: #2F54EB;
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-button:active {
color: #1D39C4;
border-color: #1D39C4;
......@@ -26448,8 +26448,8 @@
border-color: #8cc8ff; }
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff; }
background: #EBEFFE;
border-color: #2f54eb; }
.el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus {
background: #2F54EB;
border-color: #2F54EB;
......@@ -26461,7 +26461,7 @@
outline: none; }
.el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff; }
.el-button--success {
color: #fff;
......@@ -42320,8 +42320,8 @@
border-color: #8cc8ff; } */
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff; }
background: #EBEFFE;
border-color: #2f54eb; }
.el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus {
background: #2F54EB;
border-color: #2F54EB;
......@@ -42333,7 +42333,7 @@
outline: none; }
/* .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff; } */
.el-button--success {
color: #fff;
......@@ -94,7 +94,8 @@ const urlConfig = {
cardLogPage: '/api-marketing/member/card-log-page',
messageLogPage: '/api-marketing/member/sms-log-page',
wechatLogPage: '/api-marketing/member/wechat-log-page',
getMarketingRecordNum: '/api-marketing/member/marketing-count'
getMarketingRecordNum: '/api-marketing/member/marketing-count',
aiLogPage: '/api-marketing/member/page-ai-member-log'
}
const defaultUrl = Object.assign({}, urlConfig);
......
<template>
<div class="marketing-message">
<div class="search">
<el-input placeholder="请输入活动名称" type="text" prefix-icon="el-icon-search" class="w256" clearable v-model="search.planName" @change="change"></el-input>
<el-date-picker :clearable="false" value-format="yyyy-MM-dd" class="w256 ml10" :pickerOptions="pickerOptions" v-model="time" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="change"></el-date-picker>
<span class="search-tip ml10">同一客户同时外呼成功并发送短信营销次数算作两次</span>
</div>
<el-table v-loading="tableData.loading" :data="tableData.data" tooltip-effect="dark" style="width: 100%">
<el-table-column
v-for="(v, i) in tableData.tableHeader"
:key="i"
:prop="v.prop"
:min-width="v.minWidth"
:label="v.label"
:fixed="v.fixed"
show-overflow-tooltip>
<template slot-scope="{ row }">
<span v-if="v.formatter" v-html="v.formatter(row)"></span>
<span v-else>{{ row[v.prop] || "--" }}</span>
</template>
</el-table-column>
</el-table>
<dm-pagination
v-if="tableData.total > 0"
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="tableData.currentPage"
:page-sizes="tableData.pageSizeList"
:page-size="tableData.pageSize"
layout="total, sizes, prev, pager, next"
:total="tableData.total"></dm-pagination>
</div>
</template>
<script>
import dickerPickMixin from './mixins/datePickRuleMixin';
import paginationMixins from './mixins/paginationMixins';
export default {
name: 'AiRecord',
props: {
tableData: Object
},
mixins: [ dickerPickMixin, paginationMixins ],
data() {
return {
search: {
planName: '',
aiStartTime: '',
aiEndTime: ''
}
}
},
methods: {
change() {
const { currentPage, pageSize } = this.tableData;
this.search.aiStartTime = this.time ? ( typeof this.time[0] == 'string ' ? this.time[0] : this.dateformat(new Date(this.time[0]), 'yyyy-MM-dd')) : null;
this.search.aiEndTime = this.time ? ( typeof this.time[0] == 'string ' ? this.time[1] : this.dateformat(new Date(this.time[1]), 'yyyy-MM-dd')) : null;
this.$emit("changeSearch", Object.assign({ pageNum: currentPage, pageSize }, this.search));
}
}
};
</script>
<style lang="scss" scoped>
@import './css/all.scss';
.search .search-tip {
vertical-align: middle;
font-size: 14px;
color: #909399;
}
</style>
......@@ -2,7 +2,10 @@
<div class="marketing-message">
<div class="search">
<el-date-picker :clearable="false" value-format="yyyy-MM-dd" class="w256" :pickerOptions="pickerOptions" v-model="time" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="change"></el-date-picker>
<el-select class="ml10 w160" v-model="search.smsType" placeholder="所有模板类型" clearable @change="change">
<el-select class="ml10 w160" v-model="search.source" placeholder="全部活动来源" clearable @change="change">
<el-option v-for="el in sourceList" :key="el.value" :value="el.value" :label="el.label"></el-option>
</el-select>
<el-select class="ml10 w160" v-model="search.smsType" placeholder="全部模板类型" clearable @change="change">
<el-option v-for="item in sysTypeList" :key="item.id" :value="item.value" :label="item.label" />
</el-select>
</div>
......@@ -58,10 +61,16 @@ export default {
data() {
return {
search: {
source: '',
beginTime: '',
endTime: '',
smsType: null
},
sourceList: [
{ label: 'AI营销', value: '5' },
{ label: '短信营销', value: '2' },
{ label: '智能营销', value: '1' }
],
sysTypeList: [
{ label: '普通短信', value: 0 },
{ label: '营销短信', value: 1 }
......
......@@ -14,38 +14,35 @@
<el-tab-pane label="微信营销" name="4">
<wechat-record :tableData="wechatTableData" @changeSearch="onChange" />
</el-tab-pane>
<el-tab-pane label="AI营销" name="5">
<ai-record :tableData="aiTableData" @changeSearch="onChange"></ai-record>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script>
import NavPath from "@/common/navbar/navbar.vue";
import ecmRecord from "./components/ecm.vue";
import cardRecord from "./components/card.vue";
import wechatRecord from "./components/wechat.vue";
import messageRecord from "./components/message.vue";
import AiRecord from './components/ai-record.vue';
import { doFetch, doFetchqs } from "@/components/axios/api";
import { dateformat } from '@/utils/formatTime';
import url from "@/components/axios/url";
const { ecmLogPage, cardLogPage, messageLogPage, wechatLogPage, cardChannelType } = url;
const { ecmLogPage, cardLogPage, messageLogPage, wechatLogPage, cardChannelType, aiLogPage } = url;
export default {
name: "marketing-record",
components: {
NavPath,
ecmRecord,
cardRecord,
wechatRecord,
messageRecord
messageRecord,
AiRecord
},
data() {
return {
navpath: [
{ name: "首页", path: "" },
{ name: "客户列表", path: "/allCustomers" },
{ name: "客户详情", path: '/customerDetail?memberId=' + this.$route.query.memberId || '' },
{ name: "营销记录", path: "" }
],
tabsIndex: "1",
search: {
msg: ""
......@@ -87,6 +84,16 @@ export default {
dictList: [],
loading: false
},
aiTableData: {
data: [],
currentPage: 1,
pageSizeList: [20, 40, 60, 80],
pageSize: 20,
total: 0,
tableHeader: [],
dictList: [],
loading: false
}
};
},
created() {
......@@ -120,6 +127,11 @@ export default {
this[name].loading = true;
res = await doFetchqs(wechatLogPage, params);
break;
case '5':
name = 'aiTableData';
res = await doFetchqs(aiLogPage, params);
this[name].loading = true;
break;
}
this.extendTable(this[name], res.data.result); // 赋值对应表格数据
this[name].loading = false;
......@@ -192,6 +204,9 @@ export default {
return `${row.createDate ? dateformat(new Date(row.createDate), 'yyyy-MM-dd hh:mm:ss') : '--'}`;
}
},
{ label: '活动来源', prop: 'sourceType', minWidth: 50, formatter(row) {
return row.sourceType == 1 ? '智能营销' : row.sourceType == 5 ? 'AI营销' : '短信营销'
} },
{ label: "模板类型", prop: "smsType", minWidth: 50, formatter(row) {
return row.smsType == 1 ? '营销短信' : '普通短信'
} },
......@@ -224,6 +239,19 @@ export default {
}
}
];
this.aiTableData.tableHeader = [
{
label: "触达时间",
prop: "aiTime",
minWidth: 80,
formatter(row) {
return `${row.aiTime ? dateformat(new Date(row.aiTime), 'yyyy-MM-dd hh-mm-ss') : '--'}`;
}
},
{ label: "活动名称", prop: "planName", minWidth: 120 },
{ label: "活动场景", prop: "activityScene", minWidth: 120 },
{ label: "话术名称", prop: "aiTemplateName", minWidth: 120 }
];
},
// 设置表格数据
extendTable(tableObj, remoteData) {
......
......@@ -235,12 +235,9 @@ export default {
display: block;
&-item {
padding: 15px 9px;
padding: 20px;
background-color: #fff;
border-radius: 5px;
&+.achievement-item{
margin-top: 16px;
}
}
&-top {
......@@ -250,6 +247,7 @@ export default {
&-title {
font-size: 16px;
font-weight: bold;
color: #303133;
}
&-handler {
......@@ -275,7 +273,7 @@ export default {
}
&-editwrap {
margin: 20px 0;
margin-top: 20px;
}
}
</style>
......@@ -2,7 +2,7 @@
<div class="frozen-list">
<div class="min100">
<!-- <nav-path :navpath="navpath"></nav-path> -->
<div class="member-forzen-container">
<div class="member-forzen-container" v-loading="loading">
<!--
会员列表
-->
......@@ -51,7 +51,6 @@
<el-table
ref="multipleTable"
:data="frozenList"
v-loading="loading"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange"
......@@ -228,7 +227,6 @@
</el-button>
<el-button
type="primary"
:disabled="reasonbtn"
@click="frozenAll"
>冻结选中会员</el-button>
</div>
......@@ -503,13 +501,13 @@ export default {
status: 1, // 1 冻结 0 解冻
frozenType: this.frozenReason // 101.异常冻结、102.会员主动冻结
};
this.loading = true;
doFetch("/api-member/members-batch-update-frozen", datas)
.then(res => {
if (res.data.errorCode === 0) {
this.frozenReason = "";
this.remark = "";
this.middleList.length = 0;
this.loading = true;
if (this.ids.length > 1) {
this.handleToTaskCenter(res.data.result);
}
......@@ -526,6 +524,7 @@ export default {
}
})
.catch(err => {
this.loading = false;
checkFalse(err);
});
},
......
......@@ -42,7 +42,7 @@
</div>
<div class="record">
<div class="mTop20 pBottom100">
<div class="pBottom100">
<div class="groupmember mBottom40">
<!-- <div class="table-content">
<el-table :data="memberData" tooltip-effect="dark" ref="multipleTable" >
......@@ -320,6 +320,14 @@ export default {
}
};
</script>
<style lang="scss" scoped>
.record-nav {
background-color: #fff;
}
.record {
padding: 0;
}
</style>
<style lang="stylus">
$bgcolor = #fbfcfd;
$bordercolor = #e3e5e9;
......
......@@ -129,7 +129,7 @@
>
<div class="mBottom20">
<el-row>
<el-col :span="12">
<el-col :span="18">
<el-date-picker
v-model="rangeVal"
type="daterange"
......@@ -162,7 +162,7 @@
></el-option>
</el-select>
</el-col>
<div :span="12">
<div :span="6">
<div class="displayflex tr">
<div class="flex">
<el-input
......@@ -248,6 +248,7 @@
:min="0"
:max="100000"
v-if="IntegralForm.editType == 1"
style="width: 120px"
></el-input-number>
<el-input-number
v-model="scope.row.adjustPoint"
......@@ -255,6 +256,7 @@
:min="0"
:max="scope.row.intervalHistory"
v-if="IntegralForm.editType == 2"
style="width: 120px"
></el-input-number>
</div>
</template>
......
......@@ -916,7 +916,7 @@ export default { ...wechatTotalDetail }
text-align center
.itemhover
&:hover
color #5092e1
color #2f54eb
.labeltag
display flex
height: 40px;
......
......@@ -844,7 +844,7 @@ export default { ...wechatmemberDetail }
text-align center
.itemhover
&:hover
color #5092e1
color #2f54eb
.labeltag
display flex
height: 40px;
......
......@@ -266,7 +266,6 @@ export default {
}
}
.table-content {
min-width: 1200px;
.only-head-table {
/deep/.el-table__body-wrapper {
display: none;
......
......@@ -31,7 +31,7 @@
</div>
</div> -->
<div class="container">
<dm-layout projectName="integral-mall">
<dm-layout projectName="member">
<keep-alive>
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
......
......@@ -5999,7 +5999,7 @@
.el-button:hover, .el-button:focus {
color: #2F54EB;
border-color: #2F54EB;
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-button:active {
color: #1D39C4;
border-color: #1D39C4;
......@@ -6074,8 +6074,8 @@
border-color: #8cc8ff; }
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff; }
background: #EBEFFE;
border-color: #2f54eb; }
.el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus {
background: #2F54EB;
border-color: #2F54EB;
......@@ -6087,7 +6087,7 @@
outline: none; }
.el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff; }
.el-button--success {
color: #fff;
......@@ -6720,7 +6720,7 @@
cursor: pointer;
outline: none; }
.el-dropdown-menu__item:not(.is-disabled):hover, .el-dropdown-menu__item:focus {
background-color: #e8f4ff;
background-color: #EBEFFE;
color: #597EF7; }
.el-dropdown-menu__item--divided {
position: relative;
......@@ -7365,7 +7365,7 @@
color: #909399; }
.el-menu-item:hover, .el-menu-item:focus {
outline: none;
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-menu-item.is-disabled {
opacity: 0.25;
cursor: not-allowed;
......@@ -7405,13 +7405,13 @@
color: #909399; }
.el-submenu__title:hover, .el-submenu__title:focus {
outline: none;
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-submenu__title.is-disabled {
opacity: 0.25;
cursor: not-allowed;
background: none !important; }
.el-submenu__title:hover {
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-submenu .el-menu {
border: none; }
.el-submenu .el-menu-item {
......@@ -13717,7 +13717,7 @@
.el-button:hover, .el-button:focus {
color: #2F54EB;
border-color: #2F54EB;
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-button:active {
color: #1D39C4;
border-color: #1D39C4;
......@@ -13792,8 +13792,8 @@
border-color: #8cc8ff; }
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff; }
background: #EBEFFE;
border-color: #2f54eb; }
.el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus {
background: #2F54EB;
border-color: #2F54EB;
......@@ -13805,7 +13805,7 @@
outline: none; }
.el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff; }
.el-button--success {
color: #fff;
......@@ -15884,11 +15884,11 @@
.el-table--striped .el-table__body tr.el-table__row--striped td {
background: #FAFAFA; }
.el-table--striped .el-table__body tr.el-table__row--striped.current-row td {
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-table__body tr.hover-row > td, .el-table__body tr.hover-row.current-row > td, .el-table__body tr.hover-row.el-table__row--striped > td, .el-table__body tr.hover-row.el-table__row--striped.current-row > td {
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-table__body tr.current-row > td {
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-table__column-resize-proxy {
position: absolute;
left: 200px;
......@@ -17103,7 +17103,7 @@
cursor: pointer;
font-size: 14px; }
.el-table-filter__list-item:hover {
background-color: #e8f4ff;
background-color: #EBEFFE;
color: #597EF7; }
.el-table-filter__list-item.is-active {
background-color: #2F54EB;
......@@ -26373,7 +26373,7 @@
.el-button:hover, .el-button:focus {
color: #2F54EB;
border-color: #2F54EB;
background-color: #e8f4ff; }
background-color: #EBEFFE; }
.el-button:active {
color: #1D39C4;
border-color: #1D39C4;
......@@ -26448,8 +26448,8 @@
border-color: #8cc8ff; }
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff; }
background: #EBEFFE;
border-color: #2f54eb; }
.el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus {
background: #2F54EB;
border-color: #2F54EB;
......@@ -26461,7 +26461,7 @@
outline: none; }
.el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff; }
.el-button--success {
color: #fff;
......@@ -42320,8 +42320,8 @@
border-color: #8cc8ff; } */
.el-button--primary.is-plain {
color: #2F54EB;
background: #e8f4ff;
border-color: #a3d3ff; }
background: #EBEFFE;
border-color: #2f54eb; }
.el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus {
background: #2F54EB;
border-color: #2F54EB;
......@@ -42333,7 +42333,7 @@
outline: none; }
/* .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active {
color: #74bcff;
background-color: #e8f4ff;
background-color: #EBEFFE;
border-color: #d1e9ff; } */
.el-button--success {
color: #fff;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment