Commit 482d3b2b by zhangmeng

测试

parent c962580b
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/css/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link href=/marketing/static/css/app.0262d50895396ef22ed3455d47e439f0.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/marketing/static/js/manifest.0a85049e489e85ac5f0a.js></script><script type=text/javascript src=/marketing/static/js/vendor.381a376baaa65b5cbeb9.js></script><script type=text/javascript src=/marketing/static/js/app.75a42f29e9eb4a1327c1.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/css/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link href=/marketing/static/css/app.4b293cbfbc1cce3d6284acc40f20a078.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/marketing/static/js/manifest.0a85049e489e85ac5f0a.js></script><script type=text/javascript src=/marketing/static/js/vendor.162b0e6539b2dd8ccf95.js></script><script type=text/javascript src=/marketing/static/js/app.79af0217abf4eb3eab29.js></script></body></html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
import memberInfo from "./index.vue";
const gicMemberInfo = {
install(Vue, options) {
Vue.component(memberInfo.name, memberInfo)
}
}
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(gicMemberInfo);
}
export default gicMemberInfo;
<template>
<el-popover placement="top-start" width="400" height="180" trigger="hover" @show="getSingleInfo">
<div class="pointer" @click="linkDetail">
<div class="singelinfo">
<div class="singelinfo-img"><img width="100" height="100" :src="singleInfo.thirdImgUrl || defaultAvatar" alt=""></div>
<div class="singelinfo-content pl10 pr10">
<span class="lheigt">{{ singleInfo.memberName }}
<img :title="singleInfo.status == 0 ? '取消关注公众号' : singleInfo.status == 1 ? '已关注公众号' : '未关注公众号'" class="fr"
:src="singleInfo.status == 0 ? gzhiconcanclegray : singleInfo.status == 1 ? gzhicon : gzhicongray" />
<img :title="singleInfo.wxStatus == 0 ? '未使用小程序' : singleInfo.wxStatus == 1 ? '使用过小程序' : ''" class="channelicon fr mr6"
:src="singleInfo.wxStatus == 0 ? xcxicongray : singleInfo.wxStatus == 1 ? xcxicon : ''"/>
</span>
<p class="lheigth0">
<span class="evl-right">{{ singleInfo.sex}}</span>
<span class="evl-right">{{ singleInfo.age }}</span>
<span :title="singleInfo.cardNo">{{ singleInfo.cardNo | formatCardName }}</span></p>
<p class="lheigth0"><span>{{ singleInfo.mainStoreName }}</span></p>
<div class="singelinfo-cost">
<div class="singelinfo-costitem"><p>{{ singleInfo.costFee }}</p><p>消费总额</p></div>
<div class="singelinfo-costitem"><p>{{ singleInfo.costTimes }}</p><p>消费次数</p></div>
<div class="singelinfo-costitem"><p>{{ singleInfo.lastCost }}</p><p>最近消费</p></div>
</div>
</div>
</div>
<div class="singelinfo-jl mb20 mt20">
<a class="singelinfo-jlitem">消费记录 ({{ singleInfo.numOfSale }})</a>
<a class="singelinfo-jlitem">营销记录 ({{ singleInfo.numOfmarket }})</a>
<a class="singelinfo-jlitem">卡券记录 ({{ singleInfo.couponCount }})</a>
</div>
</div>
<span slot="reference">
<a :href="'/member/#/wechatmemberDetail?memberId='+ row.memberId" target="_blank">
<img class="vertical-middle table__avatar" :src="filterAvatar(row.imageUrl)" width="60" height="60" alt="" srcset="">
<div class="inline-block vertical-middle">
<p class="table-name--ellipsis">{{row.memberName || '--'}}</p>
<p class="table-name--ellipsis fz13">{{row.cardNum || '--'}}</p>
</div>
</a>
</span>
</el-popover>
</template>
<script>
const host = window.location.origin;
export const baseUrl = host.indexOf('localhost') !== -1 ? 'http://gicdev.demogic.com/' : host
import qs from 'qs';
import axios from 'axios';
export default {
name:'vue-gic-member-info',
props:{
row:{
type:Object,
default(){
return {}
}
}
},
data() {
return {
singleInfo:{},
defaultAvatar:require('./img/head_default.png'),
gzhiconcanclegray:require('./img/status@gzhcanclegray.png'),
gzhicon:require('./img/status@gzh.png'),
gzhicongray:require('./img/status@gzhgray.png'),
xcxicongray:require('./img/status@xcxgray.png'),
xcxicon:require('./img/status@xcx.png'),
}
},
methods:{
filterAvatar(img) {
return img?img.replace(/^http(s)?/,'https'):this.defaultAvatar;
},
getSingleInfo() {
axios({
method:'post',
url: baseUrl + 'api-member/load-member-single-info?requestProject=member',
data:JSON.stringify({memberId:this.row.memberId}),
headers: {
'content-type':'application/json;charset=utf-8'
}
}).then(res => {
console.log(res)
if (res.data.errorCode === 0) {
this.singleInfo = res.data.result.memberSingle || {};
}
})
},
linkDetail() {
window.open(`/member/#/wechatmemberDetail?memberId=${this.row.memberId}`);
}
},
filters:{
formatCardName(val) {
if(val) {
if(val.length > 10) {
val = val.substr(0, 10) + '...';
}
}
return val;
},
}
}
</script>
<style lang="scss">
.singelinfo {
display: flex;
justify-content: flex-start;
&-img {
flex: 0 0 100px;
}
&-content {
flex: 1;
}
&-wrap {
display: flex;
flex-direction: column;
}
&-item {
flex: 1;
line-height: 0;
}
&-jl {
display: flex;
align-items: center;
justify-content: center;
}
&-jlitem {
flex: 1;
text-align: center;
}
&-cost {
display: flex;
text-align: center;
}
&-costitem {
flex: 1;
}
}
.lheigt {
color: #303133;
margin: 5px 0;
span {
color: #606266;
}
}
</style>
......@@ -35,4 +35,6 @@ export const ecmCurrentSendDetails = (params) => requests(PREFIX + 'deprecate/ec
// 智能营销--记录--批次人员列表 导出csv TODO
export const exportBatchSendDetails = config.api + PREFIX + 'deprecate/export-batch-send-details';
// 智能营销--实时人员列表--导出csv TODO
export const exportCurrentSendDetails = config.api + PREFIX + 'deprecate/export-current-send-details';
<template>
<section class="dm-store">
<el-select v-model="storeType" placeholder="请选择" class="w200 inline-block">
<el-select v-model="storeType" placeholder="请选择" class="w200 inline-block mr5">
<el-option v-for="(v,i) in leftList" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select>
<option-type v-if="storeType === 1" :uuid="newUuid"></option-type>
......@@ -8,6 +8,7 @@
<option-area v-if="storeType === 3" :uuid="newUuid"></option-area>
<option-group v-if="storeType === 4" :uuid="newUuid"></option-group>
<option-part v-if="storeType === 5" :uuid="newUuid"></option-part>
<el-button @click="isStoreSave">判断门店是否保存</el-button>{{isSave}}
</section>
</template>
......@@ -59,7 +60,7 @@ export default {
}
},
uuid(val) {
// 不是新增 编辑或者详情
// 编辑或者详情
if (val && !this.isAdd) {
this.init();
}
......@@ -67,6 +68,7 @@ export default {
},
data() {
return {
isSave:false,
storeType:0, // 一级选择值
leftList:[],
newUuid:uuidv1().replace(/-/g,'') // 生成uuid
......@@ -80,14 +82,12 @@ export default {
}
})
}
// 新增init
if (this.isAdd) {
this.init();
}
this.init();
},
methods:{
// 获取配置项
init() {
this.storeType = 0;
this.newUuid = this.uuid || this.newUuid;
if (!this.uuid) {
this.$emit('update:uuid',this.newUuid);
......@@ -110,18 +110,38 @@ export default {
saveInit() {
let params = {
selectType:0,
key:'',
key:this.newUuid,
isAll:0,
value:'',
removeItems:'',
};
params.key = this.uuid;
this.axios.post(baseUrl + '/api-plug/save-store-widget?requestProject=gic-web',qs.stringify(params)).then(res => {
}).catch(err => {
console.log(err)
})
},
// 判断门店是否保存
isStoreSave() {
return new Promise((resolve,reject) => {
let params = {
key:this.newUuid,
selectType:this.storeType
}
this.axios.post(baseUrl + '/api-plug/is-empty?requestProject=gic-web',qs.stringify(params)).then(res => {
console.log(res);
if (res.data.errorCode === 0) {
resolve(res.data.result);
} else {
reject(new Error('系统错误'));
}
}).catch(err => {
reject(new Error('系统错误'));
})
})
},
}
}
</script>
......
import memberInfo from "./index.vue";
const gicMemberInfo = {
install(Vue, options) {
Vue.component(memberInfo.name, memberInfo)
}
}
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(gicMemberInfo);
}
export default gicMemberInfo;
<template>
<el-popover placement="top-start" width="400" height="180" trigger="hover" @show="getSingleInfo">
<div class="pointer" @click="linkDetail">
<div class="singelinfo">
<div class="singelinfo-img"><img width="100" height="100" :src="singleInfo.thirdImgUrl || defaultAvatar" alt=""></div>
<div class="singelinfo-content pl10 pr10">
<span class="lheigt">{{ singleInfo.memberName }}
<img :title="singleInfo.status == 0 ? '取消关注公众号' : singleInfo.status == 1 ? '已关注公众号' : '未关注公众号'" class="fr"
:src="singleInfo.status == 0 ? gzhiconcanclegray : singleInfo.status == 1 ? gzhicon : gzhicongray" />
<img :title="singleInfo.wxStatus == 0 ? '未使用小程序' : singleInfo.wxStatus == 1 ? '使用过小程序' : ''" class="channelicon fr mr6"
:src="singleInfo.wxStatus == 0 ? xcxicongray : singleInfo.wxStatus == 1 ? xcxicon : ''"/>
</span>
<p class="lheigth0">
<span class="evl-right">{{ singleInfo.sex}}</span>
<span class="evl-right">{{ singleInfo.age }}</span>
<span :title="singleInfo.cardNo">{{ singleInfo.cardNo | formatCardName }}</span></p>
<p class="lheigth0"><span>{{ singleInfo.mainStoreName }}</span></p>
<div class="singelinfo-cost">
<div class="singelinfo-costitem"><p>{{ singleInfo.costFee }}</p><p>消费总额</p></div>
<div class="singelinfo-costitem"><p>{{ singleInfo.costTimes }}</p><p>消费次数</p></div>
<div class="singelinfo-costitem"><p>{{ singleInfo.lastCost }}</p><p>最近消费</p></div>
</div>
</div>
</div>
<div class="singelinfo-jl mb20 mt20">
<a class="singelinfo-jlitem">消费记录 ({{ singleInfo.numOfSale }})</a>
<a class="singelinfo-jlitem">营销记录 ({{ singleInfo.numOfmarket }})</a>
<a class="singelinfo-jlitem">卡券记录 ({{ singleInfo.couponCount }})</a>
</div>
</div>
<span slot="reference">
<a :href="'/member/#/wechatmemberDetail?memberId='+ row.memberId" target="_blank">
<img class="vertical-middle table__avatar" :src="filterAvatar(row.photoUrl)" width="60" height="60" alt="" srcset="">
<div class="inline-block vertical-middle">
<p class="table-name--ellipsis">{{row.memberName || '--'}}</p>
<p class="table-name--ellipsis fz13">{{row.cardNum || '--'}}</p>
</div>
</a>
</span>
</el-popover>
</template>
<script>
const host = window.location.origin;
export const baseUrl = host.indexOf('localhost') !== -1 ? 'http://localhost:8888/dmApi/' : host
import qs from 'qs';
export default {
name:'vue-gic-member-info',
props:{
row:{
type:Object,
default(){
return {}
}
}
},
data() {
return {
singleInfo:{},
defaultAvatar:require('../img/head_default.png'),
gzhiconcanclegray:require('../img/status@gzhcanclegray.png'),
gzhicon:require('../img/status@gzh.png'),
gzhicongray:require('../img/status@gzhgray.png'),
xcxicongray:require('../img/status@xcxgray.png'),
xcxicon:require('../img/status@xcx.png'),
}
},
methods:{
filterAvatar(img) {
return img?img.replace(/^http(s)?/,'https'):this.defaultAvatar;
},
getSingleInfo() {
this.aixos.post(baseUrl + 'api-member/load-member-single-info?requestProject=member',qs.stringify(this.row.memberId)).then(res => {
if (res.errorCode === 0) {
this.singleInfo = res.result.memberSingle || {};
}
})
},
linkDetail() {
window.open(`/member/#/wechatmemberDetail?memberId=${this.row.memberId}`);
}
},
filters:{
formatCardName(val) {
if(val) {
if(val.length > 10) {
val = val.substr(0, 10) + '...';
}
}
return val;
},
}
}
</script>
<style lang="scss">
.singelinfo {
display: flex;
justify-content: flex-start;
&-img {
flex: 0 0 100px;
}
&-content {
flex: 1;
}
&-wrap {
display: flex;
flex-direction: column;
}
&-item {
flex: 1;
line-height: 0;
}
&-jl {
display: flex;
align-items: center;
justify-content: center;
}
&-jlitem {
flex: 1;
text-align: center;
}
&-cost {
display: flex;
text-align: center;
}
&-costitem {
flex: 1;
}
}
.lheigt {
color: #303133;
margin: 5px 0;
span {
color: #606266;
}
}
</style>
<template>
<div>
<!-- <vue-gic-store-new :options="options" :uuid.sync="uuid" :isAdd="isAdd"></vue-gic-store-new>
<vue-gic-store-card :uuid.sync="uuid"></vue-gic-store-card> -->
<vue-gic-store-new :options="options" :uuid.sync="uuid" :isAdd="isAdd"></vue-gic-store-new>
</div>
</template>
<script>
// import vueGicStoreNew from '@gic-test/vue-gic-store-new'
// import { vueGicStoreCard } from '@gic-test/vue-gic-store-new'
import gicStoreNew from '../component/dmStore/index.vue'
export default {
components:{
// 'vue-gic-marketing-event':marketingEvent
'vue-gic-store-new':gicStoreNew
},
data() {
return {
......@@ -24,3 +22,5 @@
};
</script>
......@@ -38,8 +38,24 @@
<el-option v-for="item in sceneSettingIdOptions" :key="item.sceneSettingId" :label="item.sceneName" :value="item.sceneSettingId"></el-option>
</el-select>
</el-form-item>
</section>
<section class="dm-form__wrap">
</section>
<section class="dm-form__wrap">
<h3 class="dm-title__label">有效时间</h3>
<el-form-item label="有效时间" prop="endDate" :show-message="showMessage" error="开始时间不能大于结束时间">
<el-radio v-model="form.expireType" :label="0">长期有效</el-radio>
<el-radio v-model="form.expireType" :label="1">固定期限</el-radio>
<el-date-picker class="ml10" v-if="form.expireType"
v-model="form.beginDate" type="datetime"
placeholder="开始时间" @change="checkBeginEndTime">
</el-date-picker>
<el-date-picker v-if="form.expireType"
v-model="form.endDate" type="datetime"
:picker-options="endDatePickerOptions"
placeholder="结束时间" @change="checkBeginEndTime">
</el-date-picker>
</el-form-item>
</section>
<section class="dm-form__wrap">
<h3 class="dm-title__label">适用人群</h3>
<div class="mb20">
<vue-gic-people :projectName="projectName" :useId="useId" :hasSearchData="hasSearchData" :sceneValue="sceneValue" ref="peopleFilter" @findFilter="findFilter" @getBackData="getBackData" @editHide= "editHide" @editShow="editShow" @hideBtn="hideBtn"/>
......@@ -47,14 +63,11 @@
<el-button size="small" type="primary" @click="getData">确 定</el-button>
<el-button size="small" @click="cancelFilter">取 消</el-button>
</div>
<!-- <div v-else>
<el-button @click="saveTempData">保存</el-button>
</div> -->
</div>
</section>
<section class="dm-form__wrap">
<h3 class="dm-title__label">营销方式</h3>
<marketing-event v-if="ecmPlanId" :ecmPlanId="ecmPlanId" :code="code"></marketing-event>
<h3 class="dm-title__label">营销回复</h3>
<marketing-event v-if="ecmPlanId" :ecmPlanId="ecmPlanId" :code="code" :enabledMessageState="enabledMessageState"></marketing-event>
</section>
<div class="btn-wrap_fixed" :class="{'on':asideShow}">
<el-button type="primary" @click="submit('form')">保 存</el-button>
......@@ -74,7 +87,7 @@ import config from '@/config'
import wxText from '@/components/wxText/wxText'
import {checkMessageSendCount} from '@/service/api/messageApi.js';
import marketingEvent from './marketing-event/index.vue';
import {formateDateTimeByType} from '@/utils/index.js'
export default {
data () {
return {
......@@ -117,7 +130,7 @@ export default {
effectAction:'subscribe',
sceneSettingId:'',
sceneSettingName:'',
marketingType:'message',
expireType:0,
cardId:'',
mediaId:'',
imageTextId:'',
......@@ -128,7 +141,15 @@ export default {
brithday_day:'',
attention_day:'',
lastCost_day:'',
memberSearchDTO:''
memberSearchDTO:'',
beginDate:'',
endDate:''
},
dateTime:['',''],
endDatePickerOptions: {
disabledDate(time) {
return time.getTime() < Date.now() - 8.64e7;
}
},
radio:'',
rules:{
......@@ -146,9 +167,8 @@ export default {
toggleTag: false, // 控制按钮显示的参数,仅供参考,可自行修改
getSaveData:'',
saveTag:false,
enterpriseEdition:true,
enabledMessageState:true,
enabledMessageState:0,
showMessage:false
}
},
components:{
......@@ -167,11 +187,6 @@ export default {
this.getEcmInfo();
},
methods: {
// 微信文本
getWxText(data){
this.form.textContent = data.textarea;
this.form.imageMediaId = data.imageMediaId;
},
getData() {
this.$refs.peopleFilter.confirmSet()
},
......@@ -209,17 +224,6 @@ export default {
that.toggleTag = false;
that.saveTag = false
},
//获取图文id
getImgTextData(val) {
console.log(val)
this.form.mediaId = val.imageTextWechatId;
this.form.imageTextId = val.imageTextId;
},
//获取图片id
getImgData(val) {
console.log(val)
this.form.mediaId = val;
},
async sceneSettingList() {
let res = await sceneSettingList();
this.sceneSettingIdOptions = res.result;
......@@ -231,8 +235,7 @@ export default {
const result = res.result.ecmDTO;
const commonScene = res.result.commonScene;
this.enterpriseEdition = !!res.result.enterpriseEdition
this.enabledMessageState = !!res.result.enterpriseEdition
this.enabledMessageState = res.result.enabledMessageState || 0;
if(result && this.isEdit) {
this.ecmPlanId = this.form.ecmPlanId = result.ecmPlanId || '';
......@@ -240,7 +243,6 @@ export default {
this.form.effectType = result.effectType;
this.form.effectTime = result.effectTime;
this.form.effectAction = result.effectAction;
this.form.marketingType = result.marketingType;
this.form.sceneSettingId = result.sceneSettingId;
this.form.sceneSettingName = result.sceneSettingName;
this.form.memberSearchDTO = result.filterJson;
......@@ -268,9 +270,7 @@ export default {
async checkMessageSendCount() {
if (this.form.effectType) {
const params = {
memberSearchDTO:this.form.memberSearchDTO,
// marketingType:this.form.marketingType === 'message' ? 0 : 1
marketingType: 0
memberSearchDTO:this.form.memberSearchDTO
}
const res = await checkMessageSendCount(params);
if (res.errorCode === 0) {
......@@ -294,16 +294,15 @@ export default {
},
//提交保存
submit (formName) {
if(this.checkBeginEndTime()) return;
if (this.form.expireType && (!this.form.beginDate || !this.form.endDate)) {
this.$tips({type:'warning',message:'固定期限不能为空'});
return;
}
if (this.toggleTag && !this.getSaveData ) {
this.$tips({type:'warning',message:'人群筛选未保存条件'})
return;
}
if (this.form.marketingType === 'message') {
if (!this.enabledMessageState) {
this.$tips({type:"warning",message:"'您的通讯费已欠费,请及时于计费中心充值,并联系我司客服恢复功能使用,谢谢。"})
return;
}
}
this.$refs[formName].validate((valid) => {
if (valid) {
this.checkMessageSendCount();
......@@ -324,7 +323,10 @@ export default {
effectAction:this.form.effectAction, // 否 string effectType = 0实时时必填, 关注触发: ‘subscribe’; 认证触发: ‘authentication’
marketingType:this.form.marketingType, //是 String 营销方式: 卡券营销: ‘card’; 短信营销 : ‘message’; 图文营销: ‘teletext’; 文本营销: ‘text’; 话务: ‘teltask’; 微信图片: ‘image’
memberSearchDTO:this.form.memberSearchDTO,
searchJson:this.getSaveData
searchJson:this.getSaveData,
expireType:this.form.expireType,
beginDate:this.form.expireType ? formateDateTimeByType(this.form.beginDate,'yyyy-MM-dd-HH-mm-ss') : '',
endDate:this.form.expireType ? formateDateTimeByType(this.form.endDate,'yyyy-MM-dd-HH-mm-ss') : ''
}
if (this.form.effectType) {
params[this.radio] = this.form[this.radio] || 0;
......@@ -355,6 +357,20 @@ export default {
this.loading = false;
})
},
// 辅助方法 对比开始时间结束时间
checkBeginEndTime (){
let beginDate = this.form.beginDate && new Date(this.form.beginDate);
let endDate = this.form.endDate && new Date(this.form.endDate);
if (this.form.expireType && beginDate && endDate && (beginDate.getTime() > endDate.getTime())) {
// this.$tips({type:'warning',message:'开始时间不能大于结束时间'});
// this.form.beginDate = this.form.endDate;
this.showMessage = true;
return true;
} else {
this.showMessage = false;
return false;
}
}
}
}
</script>
......@@ -12,7 +12,7 @@
<el-table-column v-for="(v,i) in tableHeader" :type="v.type" :fixed="v.fixed" :show-overflow-tooltip="v.tooltip" :width="v.width" :min-width="v.minWidth" :align="v.align" :key="i" :prop="v.prop" :label="v.label" :formatter="v.formatter">
<template slot-scope="scope">
<span v-if="v.formatter" v-html="v.formatter(scope.row)"></span>
<component v-else-if="v.component" :is="v.component"></component>
<component v-else-if="v.component" :is="v.component" :row="scope.row"></component>
<span v-else>{{scope.row[v.prop]}}</span>
</template>
</el-table-column>
......@@ -25,9 +25,13 @@
</template>
<script>
import {ecmBatchSendDetails,exportBatchSendDetails} from '@/service/api/ecmApi.js';
import {formateDateTimeByType} from '@/utils/index.js'
import {formateDateTimeByType} from '@/utils/index.js';
import memberInfo from '@/components/member-info/index.vue';
export default {
name: 'ecm-batch-list',
components: {
'member-info':memberInfo
},
props:{
show:{
type:Boolean,
......@@ -59,7 +63,7 @@ export default {
total:0,
loading:false,
tableHeader:[
{label:'会员信息',prop:'marketingType',minWidth:'120',align:'left'},
{label:'会员信息',prop:'marketingType',minWidth:'120',align:'left',component:'member-info'},
{label:'手机号码',prop:'phoneNumber',minWidth:'120',align:'left'},
{label:'发送条件',prop:'errCode',width:'100',align:'left',formatter(row){
return row.errCode === '0' ?'满足':'不满足';
......
......@@ -6,6 +6,7 @@
<el-option v-for="(v,i) in successOptions" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select>
<el-input v-model="listParams.memberInfo" class="w200" placeholder="输入会员昵称/名字" clearable @change="search"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-button icon="iconfont icon-icon_yunxiazai" class="fr" type="primary" @click="exportCurrentSendDetails"> 导出列表</el-button>
</div>
<div class="dm-wrap">
<el-table ref="multipleTable" tooltipEffect="light" :data="infoList" style="width: 100%" v-loading="loading" @selection-change="handleSelectionChange">
......@@ -26,7 +27,7 @@
<el-table-column v-for="(v,i) in tableHeader" :fixed="v.fixed" :show-overflow-tooltip="v.tooltip" :width="v.width" :min-width="v.minWidth" :align="v.align" :key="i" :prop="v.prop" :label="v.label" :formatter="v.formatter">
<template slot-scope="scope">
<span v-if="v.formatter" v-html="v.formatter(scope.row)"></span>
<component v-else-if="v.component" :is="v.component"></component>
<component v-else-if="v.component" :is="v.component" :row="scope.row"></component>
<span v-else>{{scope.row[v.prop]}}</span>
</template>
</el-table-column>
......@@ -36,11 +37,15 @@
</section>
</template>
<script>
import {ecmCurrentSendInfos,ecmCurrentSendDetails} from '@/service/api/ecmApi.js';
import {formateDateTimeByType} from '@/utils/index.js'
import {ecmCurrentSendInfos,ecmCurrentSendDetails,exportCurrentSendDetails} from '@/service/api/ecmApi.js';
import {formateDateTimeByType} from '@/utils/index.js';
import memberInfo from '@/components/member-info/index.vue';
const typeOptions = [{value:'',label:'所有类型'},{value:'teletext',label:'图文'},{value:'text',label:'文本'},{value:'image',label:'图片'},{value:'card',label:'卡券'},{value:'wxa',label:'小程序'},{value:'message',label:'短信'},{value:'teltask',label:'话务'}];
export default {
name: 'ecm-current-list',
components: {
'member-info':memberInfo
},
data () {
return {
dateTime:[Date.now() - 30*24*60*60*1000,Date.now()],
......@@ -82,7 +87,7 @@ export default {
{label:'发送时间',prop:'createTime',minWidth:'120',align:'left',formatter(row){
return formateDateTimeByType(row.createTime,'yyyy-MM-dd-HH-mm')
}},
{label:'会员信息',prop:'marketingType',minWidth:'120',align:'left'},
{label:'会员信息',prop:'marketingType',minWidth:'120',align:'left',component:'member-info'},
{label:'手机号码',prop:'phoneNumber',minWidth:'120',align:'left'},
{label:'状态',prop:'errCode',width:'100',align:'left',formatter(row){
return row.errCode === '0' ?'<span class="dm-status--success">成功</span>':'<span class="dm-status--erroe">失败</span>';
......@@ -99,6 +104,7 @@ export default {
methods: {
handleSelectionChange(val) {
this.multipleSelection = val;
this.listParams.ecmMarketingTypeRelationIds = val.map(v => v.ecmMarketingTypeRelationId).filter(v => v).join(',');
this.ecmCurrentSendDetails();
},
search() {
......@@ -120,7 +126,7 @@ export default {
this.$nextTick(_ => {
this.$refs.multipleTable.toggleAllSelection();
})
this.listParams.ecmMarketingTypeRelationId = this.infoList.map(v => v.ecmMarketingTypeRelationId).filter(v => v).join(',');
this.listParams.ecmMarketingTypeRelationIds = this.infoList.map(v => v.ecmMarketingTypeRelationId).filter(v => v).join(',');
this.loading = false;
},
async ecmCurrentSendDetails() {
......@@ -135,8 +141,12 @@ export default {
this.tableList = res.result.result || [];
this.total = res.result.totalCount || 0;
this.loading = false;
},
exportCurrentSendDetails() {
window.location = `${exportCurrentSendDetails}?memberInfo=${this.listParams.memberInfo}&success=${this.listParams.success}&ecmPlanId=${this.listParams.ecmPlanId}&ecmPlanName=${this.$route.params.name}&beginTime=${this.listParams.beginTime}&endTime=${this.listParams.endTime}&ecmMarketingTypeRelationIds=${this.listParams.ecmMarketingTypeRelationIds}&requestProject=gic-web`;
}
}
}
</script>
......@@ -3,8 +3,10 @@
<!-- 操作区 -->
<div class="dm-marketing__opt--wrap">
<span class="dm-marketing__opt--label">添加内容</span>
<i class="el-icon-plus dm-marketing__opt--icon"></i>
<opt @addItem="addItem" :options="options"></opt>
<i class="el-icon-plus dm-marketing__opt--icon" @click="optTopShow = !optTopShow"></i>
<transition name="fade">
<opt @addItem="addItem" :options="options" v-if="optTopShow"></opt>
</transition>
</div>
<!-- item组件区 -->
<div class="dm-marketing__content--wrap" v-if="list.length">
......@@ -86,13 +88,17 @@ export default {
},
props:{
// 页面编码——- 1001-智能引擎; 1002-微信营销; 1003-被关注回复; 1004-关键字回复
code:{
code: {
type:String,
default:'1001'
},
ecmPlanId:{
ecmPlanId: {
type:String,
default:''
},
enabledMessageState: {
type:Number,
default:1
}
},
data() {
......@@ -103,7 +109,8 @@ export default {
options:[],
maxEventCount:0, //item最大数
currentItem:{},
optShow: false
optShow: false,
optTopShow: true
}
},
created() {
......@@ -223,6 +230,9 @@ export default {
// 保存操作
saveToList(val) {
console.log(val);
if (val.comName === 'message' && !this.enabledMessageState) {
this.$message({type:"warning",message:"'您的通讯费已欠费,请及时于计费中心充值,并联系我司客服恢复功能使用,谢谢。"})
}
let params = {
ecmPlanId:this.ecmPlanId, //从prop中取
marketingType:val.comName,
......
......@@ -170,7 +170,6 @@ export default {
this.$store.commit('mutations_layoutTips','');
},
methods:{
async getWechatMarketingDetail() {
let res = await getWechatMarketingDetail({wechatTeletextId:this.$route.params.id});
if (res.errorCode === 0 && res.result.wechatDTO) {
......
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