Commit fff32a85 by caoyanzhi

Merge branch 'master' into feature/升级组件引入方式

# Conflicts:
#	index.html
parents 4ad2cf90 29332503
<!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/fonts/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//web-1251519181.file.myqcloud.com/components/element.2.12.0.css><link href=/marketing/static/css/main.fb8ce31612d82c05f36dcf4bec5e4689.css rel=stylesheet></head><body><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/components/element.2.12.0.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.58.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/store.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/member-group.2.2.32.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.30.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-new.2.0.71.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.06.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.43.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.16.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.20.js></script><script src=//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.2.29.js></script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script src=//web-1251519181.file.myqcloud.com/components/track.1.0.4.js></script><script src=//web-1251519181.file.myqcloud.com/components/activity-select.1.0.3.js></script><script src=//web-1251519181.file.myqcloud.com/components/upload-file.1.0.6.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.21.js></script><script src=//web-1251519181.file.myqcloud.com/components/radio-transfer.1.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/steps.1.0.1.js></script><script src=//web-1251519181.file.myqcloud.com/components/material.1.0.9.js></script><script type=text/javascript src=/marketing/static/js/manifest.efd2a9681ba3ea906cab.js></script><script type=text/javascript src=/marketing/static/js/vendor.f9f292eb91cca2c0fcc1.js></script><script type=text/javascript src=/marketing/static/js/main.44340bf4dcab52403fd3.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/fonts/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//web-1251519181.file.myqcloud.com/components/element.2.12.0.css><link href=/marketing/static/css/main.f188b9436e1bc8ccaa7dee20e1309909.css rel=stylesheet></head><body><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/components/element.2.12.0.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.58.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-selector.1.0.6.js></script><script src=//web-1251519181.file.myqcloud.com/components/store.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/member-group.2.2.32.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.30.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-new.2.0.71.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.06.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.43.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.24.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.20.js></script><script src=//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.2.29.js></script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script src=//web-1251519181.file.myqcloud.com/components/track.1.0.4.js></script><script src=//web-1251519181.file.myqcloud.com/components/activity-select.1.0.3.js></script><script src=//web-1251519181.file.myqcloud.com/components/upload-file.1.0.6.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.21.js></script><script src=//web-1251519181.file.myqcloud.com/components/radio-transfer.1.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/steps.1.0.1.js></script><script src=//web-1251519181.file.myqcloud.com/components/material.1.0.9.js></script><script type=text/javascript src=/marketing/static/js/manifest.0ef6ab230eb0a1ba35b0.js></script><script type=text/javascript src=/marketing/static/js/vendor.f9f292eb91cca2c0fcc1.js></script><script type=text/javascript src=/marketing/static/js/main.6e0e9fae544e6661717a.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.
!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,o){for(var d,i,f,u=0,s=[];u<r.length;u++)i=r[u],t[i]&&s.push(t[i][0]),t[i]=0;for(d in c)Object.prototype.hasOwnProperty.call(c,d)&&(e[d]=c[d]);for(n&&n(r,c,o);s.length;)s.shift()();if(o)for(u=0;u<o.length;u++)f=a(a.s=o[u]);return f};var r={},t={17:0};function a(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,a){n=t[e]=[r,a]});n[2]=r;var c=document.getElementsByTagName("head")[0],o=document.createElement("script");o.type="text/javascript",o.charset="utf-8",o.async=!0,o.timeout=12e4,a.nc&&o.setAttribute("nonce",a.nc),o.src=a.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"ecm",4:"message",5:"ewash",6:"scan",7:"evaluation",8:"activity",9:"cdKey",10:"recharge",11:"popup",12:"signIn",13:"msg",14:"calllog"}[e]||e)+"."+{0:"8c4ce1a1177036a6aad9",1:"bead755465ddb7e0cdad",2:"2adbec7254a37bd9c2d5",3:"371821ec824eda08eda0",4:"9e50fd6ff53e064c6d76",5:"499510114acac6860134",6:"ea9da38a103db1f548be",7:"6f650fda68f6dd28ecea",8:"5ddb72b68fcdf6943011",9:"1e9ce432c3656fb230bf",10:"d7b218ccdbccac61638b",11:"989bf49ee76b0a3051e1",12:"81e33c00700b4b6e2995",13:"17242391a163aedb3c49",14:"d65040e25afb30289d4f"}[e]+".js";var d=setTimeout(i,12e4);function i(){o.onerror=o.onload=null,clearTimeout(d);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return o.onerror=o.onload=i,c.appendChild(o),r},a.m=e,a.c=r,a.d=function(e,n,r){a.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},a.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(n,"a",n),n},a.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},a.p="/marketing/",a.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,a,o){for(var i,f,u,d=0,s=[];d<r.length;d++)f=r[d],t[f]&&s.push(t[f][0]),t[f]=0;for(i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i]);for(n&&n(r,a,o);s.length;)s.shift()();if(o)for(d=0;d<o.length;d++)u=c(c.s=o[d]);return u};var r={},t={17:0};function c(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,c),t.l=!0,t.exports}c.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,c){n=t[e]=[r,c]});n[2]=r;var a=document.getElementsByTagName("head")[0],o=document.createElement("script");o.type="text/javascript",o.charset="utf-8",o.async=!0,o.timeout=12e4,c.nc&&o.setAttribute("nonce",c.nc),o.src=c.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"ecm",4:"message",5:"ewash",6:"scan",7:"evaluation",8:"activity",9:"cdKey",10:"recharge",11:"popup",12:"signIn",13:"msg",14:"calllog"}[e]||e)+"."+{0:"dca697214a790197359e",1:"e59e992c3bd04dd2e479",2:"2adbec7254a37bd9c2d5",3:"55ee3a7d37497031f478",4:"5b2ce375baae0cc7c522",5:"499510114acac6860134",6:"787ff8e91372943bc721",7:"6f650fda68f6dd28ecea",8:"5ddb72b68fcdf6943011",9:"1e9ce432c3656fb230bf",10:"d7b218ccdbccac61638b",11:"989bf49ee76b0a3051e1",12:"81e33c00700b4b6e2995",13:"17242391a163aedb3c49",14:"d65040e25afb30289d4f"}[e]+".js";var i=setTimeout(f,12e4);function f(){o.onerror=o.onload=null,clearTimeout(i);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return o.onerror=o.onload=f,a.appendChild(o),r},c.m=e,c.c=r,c.d=function(e,n,r){c.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},c.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(n,"a",n),n},c.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},c.p="/marketing/",c.oe=function(e){throw console.error(e),e}}([]);
\ 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.
......@@ -112,9 +112,9 @@
&::before {
content: ' ';
display: block;
width: 200px;
height: 200px;
background: url('/static/img/no-data_icon.png') no-repeat center;
width: 60px;
height: 60px;
background: url('@/../../static/img/no-data_icon.png') no-repeat center;
background-size: cover;
margin: 20px auto 10px auto;
}
......@@ -318,7 +318,7 @@
display: block;
width: 60px;
height: 60px;
background: url('/static/img/no-data_icon.png') no-repeat 50%;
background: url('@/../../static/img/no-data_icon.png') no-repeat 50%;
margin: 80px auto 22px;
}
.el-table__empty-text {
......
......@@ -497,7 +497,7 @@ img::after {
left: 0;
top: 0;
background-size: cover;
background-image: url(/marketing/static/img/failed-load_img.png);
background-image: url(@/../../static/img/failed-load_img.png);
// background-image: url(/static/img/failed-load_img.png);
}
......
......@@ -118,7 +118,7 @@
display: block;
width: 60px;
height: 60px;
background: url(/marketing/static/img/no-data_icon.png) no-repeat center;
background: url(@/../../static/img/no-data_icon.png) no-repeat center;
margin: 80px auto 22px auto;
}
}
......
......@@ -2,9 +2,10 @@
<div class="dm-avatar">
<label class="dm-avatar__upload " :class="{ 'is-disabled': disabled || unused }" :style="`width:${width}px;height:${height}px;`" v-loading="loading">
<input type="file" style="display:none;" :disabled="disabled || unused" accept="image/gif, image/jpeg,image/png" ref="uploader" v-upload="this" />
<img v-show="model.imgUrl && showImg" :src="model.imgUrl || ''" :class="className" class="dm-avatar__img" />
<img v-show="model.imgUrl && showImg" :src="model.imgUrl || ''" :class="className" style="object-fit: contain" class="dm-avatar__img" />
<i class="el-icon-plus dm-avatar__icon" v-show="!model.imgUrl" :style="'line-height:' + height + 'px;'"></i>
</label>
<div v-if="name" style="font-size:14px;color:#303133;line-height:1;margin-bottom:10px">{{ name }}</div>
<div class="dm-avatar__tips" :style="tipsStyle">{{ tips }}</div>
</div>
</template>
......@@ -24,6 +25,7 @@ export default {
};
}
},
name: String,
unused: {
// 是否禁用
type: Boolean,
......
......@@ -41,8 +41,9 @@ function verificationPicFile(file, l_width, l_height) {
export default {
inserted: function(el, binding) {
el.addEventListener('change', function() {
binding.value.loading = true;
el.addEventListener('change', function(e) {
if (e.target.value) binding.value.loading = true;
else return;
const size = binding.value.limit && binding.value.limit.maxSize ? binding.value.limit.maxSize : 2; // 默认最大2M限制
if (el.files[0].size > size * 1024 * 1024) {
binding.value.$tips({ type: 'warning', message: `上传图片不能大于${size}M` });
......
......@@ -59,7 +59,7 @@ export default {
},
{
path: 'batchlist/:id',
name: '批次记录',
name: '批次提交日志',
component: () => import(/* webpackChunkName: "ecm" */ '../../views/ecm/batch-list.vue'),
meta: {
path: '/ecm/list'
......@@ -67,7 +67,7 @@ export default {
},
{
path: 'oncelist/:id',
name: '立即发送记录',
name: '提交日志',
component: () => import(/* webpackChunkName: "ecm" */ '../../views/ecm/current-list.vue'),
meta: {
path: '/ecm/list',
......@@ -76,7 +76,7 @@ export default {
},
{
path: 'currentlist/:id',
name: '实时发送记录',
name: '提交日志',
component: () => import(/* webpackChunkName: "ecm" */ '../../views/ecm/current-list.vue'),
meta: {
path: '/ecm/list',
......
......@@ -19,7 +19,8 @@ const state = {
xsxsFlag: false, // 是否开启销售线索
userId: '',
departAuth: 0,
superAdmin: 0
superAdmin: 0,
keepAlive: []
};
// getters
......@@ -116,6 +117,9 @@ const mutations = {
},
updateUserId(state, val) {
state.userId = val;
},
setKeepAlive(state, val) {
state.keepAlive = val;
}
};
......
import { requests } from '@/service/api/index';
import globalConfig from '@/config/index';
import Vue from 'vue';
import store from '@/store/index';
export default config => {
const { createApp } = config;
window.onload = async function() {
try {
const fullLoading = Vue.prototype.$loading({ lock: true });
// 获取用户企业id
let loginUserRes = await requests('/api-auth/get-login-user-info', { requestProject: 'gic-web', f: 1 });
let enterpriseId = loginUserRes.result.enterpriseId;
store.commit('updateEnterpriseId', enterpriseId); // 更新企业id
const couponEnable = await requests('/api-marketing/opt-coupon-enable', { requestProject: 'marketing' });
store.commit('updateAppletEnable', couponEnable.result || false); // result: true,能改 false不能
store.commit('updateLimitCodeList', loginUserRes.result.limitCodeList);
store.commit('updateSuperAdmin', loginUserRes.result.superAdmin);
store.commit('updateDepartAuth', loginUserRes.result.departAuth);
store.commit('updateUserId', loginUserRes.result.userId);
window.onload = function() {
const fullLoading = Vue.prototype.$loading({ lock: true });
// 获取用户企业id
const getUserInfo = requests('/api-auth/get-login-user-info', { requestProject: 'gic-web', f: 1 }).then(data => {
const result = data.result || {};
store.commit('updateEnterpriseId', result.enterpriseId); // 更新企业id
store.commit('updateLimitCodeList', result.limitCodeList);
store.commit('updateSuperAdmin', result.superAdmin);
store.commit('updateDepartAuth', result.departAuth);
store.commit('updateUserId', result.userId);
});
const getCouponEnable = requests('/api-marketing/opt-coupon-enable', { requestProject: 'marketing' }).then(data => {
store.commit('updateAppletEnable', data.result || false); // result: true,能改 false不能
});
Promise.all([getUserInfo, getCouponEnable]).finally(() => {
createApp();
fullLoading.close();
} catch (error) {
// 未登录
window.location.href = globalConfig.api + 'gic-web/';
}
});
};
};
<template>
<el-dialog title="批次记录" :visible.sync="show" width="80%" :before-close="close">
<el-dialog title="批次提交日志" :visible.sync="show" width="80%" :before-close="close">
<div v-loading="loading">
<div class="pb22 clearfix">
<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-select class="dm-select" clearable v-model="listParams.success" placeholder="所有条件" @change="search">
<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-button icon="iconfont icon-icon_yunxiazai" class="fr" type="primary" @click="exportBatchSendDetails"> 导出列表</el-button>
......@@ -54,7 +54,7 @@ export default {
},
data() {
return {
successOptions: [{ value: '', label: '发送条件' }, { value: 0, label: '不满足' }, { value: 1, label: '满足' }], // eslint-disable-line
successOptions: [{ value: 0, label: '提交失败' }, { value: 1, label: '提交成功' }], // eslint-disable-line
listParams: {
ecmPlanQuartzLogId: '',
success: '',
......@@ -68,17 +68,17 @@ export default {
{ label: '会员信息', prop: 'marketingType', minWidth: '120', align: 'left', component: 'member-info' },
{ label: '手机号码', prop: 'phoneNumber', minWidth: '120', align: 'left' },
{
label: '发送条件',
label: '提交状态',
prop: 'errCode',
width: '100',
align: 'left',
formatter(row) {
return row.errCode === '0' ? '满足' : '不满足';
return row.errCode === '0' ? '提交成功' : '提交失败';
}
},
{ label: '主门店', prop: 'mainStoreName', minWidth: '120', align: 'left' },
{ label: '专属导购', prop: 'mainClerkName', minWidth: '120', align: 'left' },
{ label: '备注', prop: 'errMsg', minWidth: '120', align: 'left' }
{ label: '提交失败原因', prop: 'errMsg', minWidth: '120', align: 'left' }
],
tableList: [],
projectName: 'marketing', // 当前项目名
......@@ -122,6 +122,7 @@ export default {
this.dialogVisible = true;
this.excelUrl = exportBatchSendDetails;
this.params = {
ecmId: this.$route.params.id,
memberInfo: this.listParams.memberInfo,
success: this.listParams.success,
ecmPlanName: this.ecmPlanName,
......
......@@ -19,6 +19,21 @@
</template>
</el-table-column>
<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="header" slot-scope="scope">
<span>
<span>{{ v.label }}</span>
<el-tooltip v-if="v.prop == 'successCount'" placement="top" :open-delay="200">
<i class="iconfont icon-xinxixianshi" style="color:#909399;font-size:14px"></i>
<div slot="content">
<div>指的是GIC系统成功提交针对这些用户的营销行为,并不是指的实际触达成功,如:</div>
成功通过服务号接口进行消息群发;<br />
成功向短信运营商提交需要发送短信的用户名单;<br />
成功通过企微群发接口下发群发任务;<br />
成功通过话务任务接口下发话务任务;<br />
</div>
</el-tooltip>
</span>
</template>
<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>
......@@ -107,9 +122,9 @@ export default {
return result;
}
},
{ label: '批次人次', prop: 'totalCount', width: '160', align: 'left' },
{ label: '预计发送人次', prop: 'filterCount', width: '160', align: 'left' },
{ label: '实际送达人次', prop: 'successCount', width: '160', align: 'left' }
// { label: '批次人次', prop: 'totalCount', width: '160', align: 'left' },
{ label: '应发人次', prop: 'filterCount', minWidth: '160', align: 'left' },
{ label: '提交成功人次', prop: 'successCount', minWidth: '160', align: 'left' }
],
tableList: [],
dialogShow: false,
......@@ -133,7 +148,7 @@ export default {
}
});
this.ecmBatchSendInfos();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '智能营销', path: '/ecm' }, { name: this.$route.query.name + ' - 批次记录', path: '' }]); // eslint-disable-line
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '智能营销', path: '/ecm' }, { name: this.$route.query.name + ' - 批次提交日志', path: '' }]); // eslint-disable-line
},
mounted() {
this.$store.commit(
......@@ -176,7 +191,7 @@ export default {
this.listParams.beginTime = formatDateTimeByType(this.dateTime[0], 'yyyy-MM-dd');
this.listParams.endTime = formatDateTimeByType(this.dateTime[1], 'yyyy-MM-dd');
} else {
this.listParams.beginTime = this.listParams.senendTimedEndTime = '';
this.listParams.beginTime = this.listParams.endTime = '';
}
let res = await ecmBatchSendInfos(this.listParams);
console.log(res);
......
......@@ -27,6 +27,31 @@
</template>
</el-table-column>
<el-table-column v-for="(v, i) in infoHeader" :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="header" slot-scope="scope">
<span>
<span>{{ v.label }}</span>
<el-tooltip v-if="v.prop == 'successCount'" placement="top" :open-delay="200">
<i class="iconfont icon-xinxixianshi" style="color:#909399;font-size:14px"></i>
<div slot="content">
<div>指的是GIC系统成功提交针对这些用户的营销行为,并不是指的实际触达成功,如:</div>
成功通过服务号接口进行消息群发;<br />
成功向短信运营商提交需要发送短信的用户名单;<br />
成功通过企微群发接口下发群发任务;<br />
成功通过话务任务接口下发话务任务;
</div>
</el-tooltip>
<el-tooltip v-else-if="v.prop == 'failedCount'" placement="top" :open-delay="200">
<i class="iconfont icon-xinxixianshi" style="color:#909399;font-size:14px"></i>
<div slot="content">
<div>指的是GIC系统未成功提交针对这些用户的营销行为,如:</div>
未成功通过服务号接口进行消息群发;<br />
未成功向短信运营商提交需要发送短信的用户名单;<br />
未成功通过企微群发接口下发群发任务;<br />
未成功通过话务任务接口下发话务任务;
</div>
</el-tooltip>
</span>
</template>
<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>
......@@ -80,7 +105,7 @@ export default {
data() {
return {
dateTime: [Date.now() - 30 * 24 * 60 * 60 * 1000, Date.now()],
successOptions: [{ value: '', label: '所有状态' }, { value: 1, label: '成功' }, { value: 0, label: '失败' }], // eslint-disable-line
successOptions: [{ value: '', label: '所有状态' }, { value: 1, label: '提交成功' }, { value: 0, label: '提交失败' }], // eslint-disable-line
listParams: {
ecmPlanId: this.$route.params.id,
ecmMarketingTypeRelationIds: '',
......@@ -110,8 +135,8 @@ export default {
}
},
{ label: '应发数量', prop: 'sendCount', align: 'left' },
{ label: '成功发送', prop: 'successCount', align: 'left' },
{ label: '发送失败', prop: 'failedCount', align: 'left' },
{ label: '提交成功', prop: 'successCount', align: 'left' },
{ label: '提交失败', prop: 'failedCount', align: 'left' },
{
label: '使用状态',
prop: 'status',
......@@ -148,12 +173,12 @@ export default {
}
},
{
label: '状态',
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>';
return row.errCode === '0' ? '<span class="dm-status--success">提交成功</span>' : '<span class="dm-status--erroe">提交失败</span>';
}
},
{ label: '备注', prop: 'errMsg', minWidth: '120', align: 'left' }
......@@ -172,10 +197,13 @@ export default {
// }, 5000);
}
},
created() {
this.ecmCurrentSendInfos();
async created() {
await this.ecmCurrentSendInfos();
this.$nextTick(_ => {
this.$refs.multipleTable.toggleAllSelection();
});
if (!this.isComponet) {
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '智能营销', path: '/ecm' }, { name: this.$route.query.name + ` - ${ this.$route.meta.type == 'current' ? '实时' : '立即' }发送记录`, path: '' }]); // eslint-disable-line
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '智能营销', path: '/ecm' }, { name: this.$route.query.name + ' - 提交日志', path: '' }]); // eslint-disable-line
}
},
beforeDestroy() {
......@@ -184,6 +212,7 @@ export default {
methods: {
formatDateTimeByType,
handleSelectionChange(val) {
this.selectedId = val.map(v => v.ecmMarketingTypeRelationId);
let list = val
.map(v => v.ecmMarketingTypeRelationId)
.filter(v => v)
......@@ -225,9 +254,18 @@ export default {
status: this.listParams.status
});
this.infoList = res.result || [];
this.$nextTick(_ => {
this.$refs.multipleTable.toggleAllSelection();
});
// this.$nextTick(_ => {
// this.$refs.multipleTable.toggleAllSelection();
// });
if (this.selectedId && this.selectedId.length > 0) {
const selectedRows = this.infoList.filter(el => this.selectedId.includes(el.ecmMarketingTypeRelationId));
this.$nextTick(_ => {
selectedRows.forEach(el => {
this.$refs.multipleTable.toggleRowSelection(el);
});
});
}
let list = this.infoList
.map(v => v.ecmMarketingTypeRelationId)
.filter(v => v)
......
......@@ -39,6 +39,19 @@ export default {
// 自动领取设置
couponAutoGetFlag: 0, // 1开启自动领取 0关闭
couponAutoGetStock: 0, // 自动领取最大库存数
enterpriseId: '',
wihteList: [
// 'ff8080815dacd3a2015dacd3ef5c0000', // 金华达摩(测试环境)
'ff8080816a36326c016a53380d8b5f52', // 金华达摩
'ff8080816dd0385e016ddca436d01fe1', // Balabala
'ff8080816f334552016f59fa1eaa7802', // 乔丹
'ff808081734de4c6017375c148501364', // 七匹狼
'ff80808177da33a0017810c5374262c2', // 恒宣
'ff8080816dd03743016dd9062ac31c60', // 康奈
'ff80808171838eaf01719b44558d458d', // PIT
'ff80808163a84edb0163aee389832ed4', // HAZZYS
'ff8080816ed6a34f016f11d38ba97f87' // 迪赛尼斯
],
form: {
memberType: 0,
ecmPlanName: '',
......@@ -81,7 +94,9 @@ export default {
lowest_cost_count: '',
max_cost_count: '',
// store_mode: 0,
consumerStoreType: 0, // 0 固定门店 1 门店条件
order_store: '',
order_store_new: '',
storedLowest: 0,
storedMax: 0
},
......@@ -368,7 +383,7 @@ export default {
let res = await getEcmInfo({ ecmPlanId: this.$route.params.id, copy: this.isCopy ? 1 : undefined });
this.loading = false;
// 如果是模板重置不需要重置基本信息
if (!isResetTemplate) {
if (!isResetTemplate && res.result) {
const result = res.result.ecmDTO;
const commonScene = res.result.commonScene;
const consumTrigger = res.result.consumTrigger;
......@@ -459,13 +474,15 @@ export default {
// 处理消费触发
if (consumTrigger) {
// 触发门店初始化
if (this.form.effectAction === 'consume' && consumTrigger.store_mode) {
this.consumeChecked.store = Boolean(consumTrigger.store_mode) || false; /** 门店类型: 0: 所有门店, 1: 部分(包含部分门店, 部分分组等) **/
this.form.consumerStoreType = result.consumerStoreType || 0; /** 消费门店类型 **/
this.form.order_store = this.form.consumerStoreType === 0 ? consumTrigger.order_store : ''; /** 消费门店key值 **/
this.form.order_store_new = this.form.consumerStoreType === 1 ? consumTrigger.order_store : ''; /** 消费门店key值 **/
if (this.form.effectAction === 'consume' && consumTrigger.store_mode && result.consumerStoreType === 0) {
this.$nextTick(_ => {
this.$refs.storeCard.init();
});
}
this.consumeChecked.store = Boolean(consumTrigger.store_mode) || false; /** 门店类型: 0: 所有门店, 1: 部分(包含部分门店, 部分分组等) **/
this.form.order_store = consumTrigger.order_store || ''; /** 消费门店key值 **/
// 消费商品
if (res.result.goodsEnable && consumTrigger.goods_filter_id) {
this.xxSysp.goodsFilterId = consumTrigger.goods_filter_id || '';
......@@ -727,9 +744,9 @@ export default {
if (this.form.effectAction === 'consume') {
// 这里判断部分门店是否为空
if (this.consumeChecked.store && this.consumeChecked.store) {
let data = await this.$refs.storeCard.getRightList();
let data = this.form.consumerStoreType === 1 ? await this.$refs.newStoreCard.getList() : await this.$refs.storeCard.getRightList();
if (!data.length) {
this.$tips({ type: 'warning', message: '部分门店不能为空' });
this.$tips({ type: 'warning', message: '门店不能为空' });
return;
}
}
......@@ -873,7 +890,8 @@ export default {
// 门店
let consumeObj = {
store_mode: this.consumeChecked.store ? 1 : 0,
order_store: this.consumeChecked.store ? this.form.order_store : ''
consumerStoreType: this.form.consumerStoreType,
order_store: this.consumeChecked.store ? (this.form.consumerStoreType === 0 ? this.form.order_store : this.form.order_store_new) : ''
};
// 勾选消费金额 --不填代表没有上下限,不传该字段
if (this.consumeChecked.cost) {
......@@ -1228,7 +1246,11 @@ export default {
}
}
},
updated() {
this.enterpriseId = JSON.parse(localStorage.getItem('dmUserInfo')).enterpriseId;
},
mounted() {
this.enterpriseId = JSON.parse(localStorage.getItem('dmUserInfo')).enterpriseId;
const Profile = Vue.extend({
template: '<p>{{ alias }}{{ ppp }}</p>',
data: function() {
......
......@@ -91,7 +91,7 @@
<el-form-item label="数据对话">
<template slot="label">
<span>数据对话</span>
<el-tooltip class="item" effect="dark" content="数据对话为原营销活动。可不选择,选择后会将该营销活动的数据置于选择的数据对话中一起分析" :open-delay="300">
<el-tooltip class="item" effect="dark" content="数据对话为原营销活动。可不选择,选择后会将该营销活动的数据置于选择的数据对话中一起分析" :open-delay="200">
<i style="cursor:pointer;color:#c0c4cc;font-size:14px;" class="el-icon-question"></i>
</el-tooltip>
</template>
......@@ -108,10 +108,25 @@
<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="consumeChecked.store" @change="initStoreCardLeft">消费门店</el-checkbox>
<el-checkbox class="el-form-item__label align-left" :disabled="!isAdd" v-model="consumeChecked.store" @change="initStoreCardLeft"
>消费门店<el-tooltip class="item" effect="dark" :open-delay="200" v-if="wihteList.includes(enterpriseId)"
><template slot="content">固定门店:系统基于所选定的门店来判断是否触发<br />按门店条件:系统基于所选的门店条件下所包含的门店来实时判断是否触发;所选门店条件下门店发生变更,立即生效。</template><i style="margin-left:4px;cursor:pointer;color:#c0c4cc;font-size:14px;" class="el-icon-question"></i> </el-tooltip
></el-checkbox>
<div>
<span class="fz14 gray" v-show="!consumeChecked.store">所有消费门店</span>
<vue-gic-store-card v-bind="storeParams" :readonly="!isAdd" v-show="consumeChecked.store" ref="storeCard" :uuid.sync="form.order_store"></vue-gic-store-card>
<template v-if="consumeChecked.store">
<template v-if="wihteList.includes(enterpriseId)">
<el-radio-group :disabled="!isAdd" v-show="consumeChecked.store" v-model="form.consumerStoreType">
<el-radio :label="0">固定门店</el-radio>
<el-radio :label="1">按门店条件</el-radio>
</el-radio-group>
<vue-gic-store-card style="margin:20px 0 0 35px" v-if="form.consumerStoreType === 0" v-bind="storeParams" :readonly="!isAdd" ref="storeCard" :uuid.sync="form.order_store"></vue-gic-store-card>
<dm-store-selector style="margin:20px 0 0 35px" v-if="form.consumerStoreType === 1" ref="newStoreCard" :readonly="!isAdd" :uuid.sync="form.order_store_new"></dm-store-selector>
</template>
<template v-else>
<vue-gic-store-card v-bind="storeParams" :readonly="!isAdd" ref="storeCard" :uuid.sync="form.order_store"></vue-gic-store-card>
</template>
</template>
</div>
</div>
</el-form-item>
......@@ -423,7 +438,7 @@
<section class="dm-form__wrap" v-if="xsxsFlag == 1">
<h3 class="dm-title__label">
<span class="inline-block mr10">营销分析设置</span>
<span class="gray fz12">开启后,可用于统计这次线索挖掘计划的收益情况。</span>
<span class="gray fz12">开启后,可用于统计这次营销计划的触达转化收益情况。</span>
<!-- <el-switch :disabled="!isAdd" v-model="analyseConfig.open_flag" :active-value="1" :inactive-value="0" @change="onChangeAnalyseConfig($event, true)"></el-switch> -->
</h3>
<div style="padding-bottom:10px;color:#303133">
......@@ -449,15 +464,19 @@
<span>分析天数</span>
<el-tooltip slot="label" open-delay="200" placement="top">
<i style="cursor:pointer;color:#909399;font-size:14px;" class="iconfont icon-xinxixianshi"></i>
<div slot="content" style="width:340px;line-height: 22px;">设置从触达到客户的那天起,{{ analyseConfig.marke_days || '--' }}天以内会被纳入到数据分析中</div>
<div slot="content" style="width:340px;line-height: 22px;">设置从客户被成功触达的那天起,{{ analyseConfig.marke_days || '--' }}天以内的转化会被作为此营销计划的转化收益</div>
</el-tooltip>
</label>
</div>
<span class="mr10">触达日期起</span>
<el-input-number :disabled="!isAdd" controls-position="right" class="w150" :min="1" :max="31" step-strictly v-model="analyseConfig.marke_days"></el-input-number>
<el-input-number :disabled="!isAdd" controls-position="right" class="w150" :min="1" :max="90" step-strictly v-model="analyseConfig.marke_days"></el-input-number>
<span class="ml10">天之内</span>
</div>
<div style="margin-top:6px;color:#A5A7AD;font-size:12px;margin-left:164px">最长 31 天,最短 1 天 (以自然日计算)</div>
<div style="margin-top:6px;color:#909399;font-size:12px;margin-left:164px;line-height:18px">
最短 1 天,最长 90 天 (以自然日计算)
<br />
注:时间越长,会员的转化与此次营销的相关度越低,分析触达日期起&lt;31天内的转化数据更为合理,请酌情填写分析天数。
</div>
<div class="mt20" v-show="[1, 2].includes(form.effectType)">
<div class="w150 text-right inline-block mr10">
<label class="cursor">
......
<template>
<div>
<router-view></router-view>
<keep-alive :include="$store.state.marketing.keepAlive">
<router-view></router-view>
</keep-alive>
</div>
</template>
......
......@@ -80,7 +80,7 @@
<span class="squre"></span>
<div class="text">
<p>转化收益</p>
<p>当前智能营销实际触达顾客中,在收益有效期内消费的顾客实付订单金额。只计销售单,不看退货单和换货单。</p>
<p>当前智能营销实际触达顾客中,在收益有效期内消费的顾客应收订单金额。只计销售单,不看退货单和换货单。</p>
</div>
</li>
<li>
......
......@@ -8,7 +8,10 @@
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.shareFlag === 1" label="分享图" prop="shareImg.imgUrl" class="width50" :rules="{ required: true, message: '请上传分享图片', trigger: 'blur' }">
<dm-upload-avatar :limit="{ maxSize: 1 }" :model.sync="form.shareImg" fileType="fileShare" label="上传图片" tips="图片建议尺寸:200*200,格式为jpg/png/gif。图片大小不超过1MB,点击图片可重新上传。" :disabled="isInfo"></dm-upload-avatar>
<dm-upload-avatar :limit="{ maxSize: 1 }" name="H5分享图" :model.sync="form.shareImg" fileType="fileShare" label="上传图片" tips="图片建议尺寸:200*200,格式为jpg/png/gif。图片大小不超过1MB,点击图片可重新上传。" :disabled="isInfo"></dm-upload-avatar>
</el-form-item>
<el-form-item v-if="form.shareFlag === 1" prop="shareAppImg.imgUrl" class="width50">
<dm-upload-avatar :limit="{ maxSize: 1 }" name="小程序分享图" :model.sync="form.shareAppImg" fileType="fileShare" label="上传图片" tips="图片建议尺寸:320*240,格式为jpg/png。图片大小不超过1MB,点击图片可重新上传。" :disabled="isInfo"></dm-upload-avatar>
</el-form-item>
<el-form-item v-if="form.shareFlag === 1" label="分享标题" prop="shareTitle" class="width50" :rules="{ required: true, message: '标题不能为空', trigger: 'blur' }">
<dm-input v-model="form.shareTitle" class="w400" placeholder="请输入分享标题" :disabled="isInfo" :maxlength="20"></dm-input>
......@@ -34,6 +37,11 @@ export default {
code: '',
imgUrl: '', // eslint-disable-line
wxImg: ''
},
shareAppImg: {
code: '',
imgUrl: '', // eslint-disable-line
wxImg: ''
}
};
}
......
......@@ -160,6 +160,7 @@ import editAlertMixin from '../common/editAlertMixin.js';
import prizeMixins from '../common/prizeMixins.js';
import dmShare from '../common/share.vue';
import dmThreshold from '../common/threshold.vue';
const appImg = 'https://pic01-10001430.cos.ap-shanghai.myqcloud.com/lALPDgfLSk0gYNTM8M0BQA_320_240.png_720x720g.jpg';
export default {
mixins: [editAlertMixin, prizeMixins],
data() {
......@@ -203,6 +204,11 @@ export default {
imgUrl: require("../common/img/share/dzp.png"), // eslint-disable-line
wxImg: ''
},
shareAppImg: {
code: '',
imgUrl: appImg, // eslint-disable-line
wxImg: ''
},
// 参与门槛
memberType: 0,
gameActivityAttendConditionId: '',
......@@ -311,6 +317,10 @@ export default {
const backupCurrent = this.backupTableList[index];
// 差值,如果奖品类型或是卡券改变直接给目标值,否则给差值 count >0增加库存,<0减少库存
let count = 0;
if (!this.tableList.some(v => v.prizeType === 3)) {
this.$tips({ type: 'warning', message: `必须有一个奖项为谢谢参与` });
return;
}
if (current.prizeType == 1) {
// 积分
count = backupCurrent.prizeType != 1 || backupCurrent.prizeIntegral != current.prizeIntegral ? current.prizeCount : current.prizeCount - backupCurrent.prizeCount;
......@@ -425,7 +435,7 @@ export default {
}
// 分享
if (gameDetail.shareFlag === 1) {
const { shareTitle, shareTextInfo, shareImgFieldCode, shareImgUrl, shareImgUrlWX, gameShareSettingId } = gameDetail.shareSetting;
const { shareTitle, shareTextInfo, shareImgFieldCode, shareImgUrl, shareImgUrlWX, gameShareSettingId, shareImgUrlMini } = gameDetail.shareSetting;
this.form = Object.assign(this.form, {
shareTitle,
shareTextInfo,
......@@ -434,6 +444,11 @@ export default {
code: shareImgFieldCode,
imgUrl: shareImgUrl,
wxImg: shareImgUrlWX
},
shareAppImg: {
code: '',
imgUrl: shareImgUrlMini || appImg,
wxImg: shareImgUrlMini || appImg
}
});
}
......@@ -570,13 +585,14 @@ export default {
// 游戏分享
let shareSetting = {};
if (this.form.shareFlag) {
const { shareTitle, shareTextInfo, shareImg, gameShareSettingId } = this.form;
const { shareTitle, shareTextInfo, shareImg, gameShareSettingId, shareAppImg } = this.form;
shareSetting = {
shareTitle,
shareTextInfo,
shareImgUrl: shareImg.imgUrl,
shareImgFieldCode: shareImg.code,
shareImgUrlWX: shareImg.wxImg
shareImgUrlWX: shareImg.wxImg,
shareImgUrlMini: shareAppImg.imgUrl
};
if (this.isEdit) {
shareSetting.GameShareSettingId = gameShareSettingId;
......
......@@ -144,6 +144,7 @@ import dmUploadAvatar from '@/components/upload/avatar';
import editAlertMixin from '../common/editAlertMixin.js';
import dmShare from '../common/share.vue';
import dmThreshold from '../common/threshold.vue';
const appImg = 'https://pic01-10001430.cos.ap-shanghai.myqcloud.com/lALPDgfLSk0kJx3M8M0BQA_320_240.png_720x720g.jpg';
export default {
mixins: [editAlertMixin, prizeMixins],
data() {
......@@ -187,6 +188,11 @@ export default {
imgUrl: require("../common/img/share/ggk.png"), // eslint-disable-line
wxImg: ''
},
shareAppImg: {
code: '',
imgUrl: appImg, // eslint-disable-line
wxImg: ''
},
// 参与门槛
gameActivityAttendConditionId: '',
tipTitle: '尚未满足游戏参与条件,请多多努力。',
......@@ -427,7 +433,7 @@ export default {
// 分享
if (gameDetail.shareFlag === 1) {
const { shareTitle, shareTextInfo, shareImgFieldCode, shareImgUrl, shareImgUrlWX, gameShareSettingId } = gameDetail.shareSetting;
const { shareTitle, shareTextInfo, shareImgFieldCode, shareImgUrl, shareImgUrlWX, gameShareSettingId, shareImgUrlMini } = gameDetail.shareSetting;
this.form = Object.assign(this.form, {
shareTitle,
shareTextInfo,
......@@ -436,6 +442,11 @@ export default {
code: shareImgFieldCode,
imgUrl: shareImgUrl,
wxImg: shareImgUrlWX
},
shareAppImg: {
code: '',
imgUrl: shareImgUrlMini || appImg,
wxImg: shareImgUrlMini || appImg
}
});
}
......@@ -556,13 +567,14 @@ export default {
let shareSetting = {};
// 游戏分享
if (this.form.shareFlag) {
const { shareTitle, shareTextInfo, shareImg, gameShareSettingId } = this.form;
const { shareTitle, shareTextInfo, shareImg, gameShareSettingId, shareAppImg } = this.form;
shareSetting = {
shareTitle,
shareTextInfo,
shareImgUrl: shareImg.imgUrl,
shareImgFieldCode: shareImg.code,
shareImgUrlWX: shareImg.wxImg
shareImgUrlWX: shareImg.wxImg,
shareImgUrlMini: shareAppImg.imgUrl
};
if (this.isEdit) {
shareSetting.GameShareSettingId = gameShareSettingId;
......
......@@ -217,6 +217,7 @@ import config from '@/config';
import dmShare from '../common/share.vue';
import dmThreshold from '../common/threshold.vue';
let result = {};
const appImg = 'https://pic01-10001430.cos.ap-shanghai.myqcloud.com/lALPDhJzxjugiiXM8M0BQA_320_240.png_720x720g.jpg';
export default {
mixins: [editAlertMixin],
data() {
......@@ -268,6 +269,11 @@ export default {
imgUrl: require("../common/img/share/klfl.png"), // eslint-disable-line
wxImg: ''
},
shareAppImg: {
code: '',
imgUrl: appImg, // eslint-disable-line
wxImg: ''
},
// 参与门槛
memberType: 0,
gameActivityAttendConditionId: '',
......@@ -541,7 +547,7 @@ export default {
// 分享
if (result.game.shareFlag === 1) {
const { shareTitle, shareTextInfo, shareImgFieldCode, shareImgUrl, shareImgUrlWX, gameShareSettingId } = result.game.shareSetting;
const { shareTitle, shareTextInfo, shareImgFieldCode, shareImgUrl, shareImgUrlWX, gameShareSettingId, shareImgUrlMini } = result.game.shareSetting;
this.form = Object.assign(this.form, {
shareTitle,
shareTextInfo,
......@@ -550,6 +556,11 @@ export default {
code: shareImgFieldCode,
imgUrl: shareImgUrl,
wxImg: shareImgUrlWX
},
shareAppImg: {
code: '',
imgUrl: shareImgUrlMini || appImg,
wxImg: shareImgUrlMini || appImg
}
});
}
......@@ -694,6 +705,7 @@ export default {
shareImgUrlWX: this.form.shareImg.wxImg,
shareTitle: this.form.shareTitle,
shareTextInfo: this.form.shareTextInfo,
shareImgUrlMini: this.form.shareAppImg.imgUrl,
strategyIds: this.tableList.map(v => v.gamePrizeStrategyId).join(','),
gameActivityId: this.isEdit ? this.form.gameActivityId : '',
activityCustom: {
......@@ -711,13 +723,14 @@ export default {
// 游戏分享
let shareSetting = {};
if (this.form.shareFlag) {
const { shareTitle, shareTextInfo, shareImg, gameShareSettingId } = this.form;
const { shareTitle, shareTextInfo, shareImg, gameShareSettingId, shareAppImg } = this.form;
shareSetting = {
shareTitle,
shareTextInfo,
shareImgUrl: shareImg.imgUrl,
shareImgFieldCode: shareImg.code,
shareImgUrlWX: shareImg.wxImg
shareImgUrlWX: shareImg.wxImg,
shareImgUrlMini: shareAppImg.imgUrl
};
if (this.isEdit) {
shareSetting.GameShareSettingId = gameShareSettingId;
......
......@@ -125,6 +125,7 @@ import dmShare from '../common/share.vue';
import dmThreshold from '../common/threshold.vue';
let gameInfo = {};
// 实例化一个全局的music
const appImg = 'https://pic01-10001430.cos.ap-shanghai.myqcloud.com/lALPDhJzxjujjZHM8M0BQA_320_240.png_720x720g.jpg';
const music = new Audio();
export default {
name: 'ptyx-form',
......@@ -174,6 +175,11 @@ export default {
imgUrl: require("../common/img/share/ptyx.png"), // eslint-disable-line
wxImg: ''
},
shareAppImg: {
code: '',
imgUrl: appImg, // eslint-disable-line
wxImg: ''
},
// 参与门槛
memberType: 0,
gameActivityAttendConditionId: '',
......@@ -317,7 +323,7 @@ export default {
// 分享
if (gameInfo.shareFlag === 1) {
const { shareTitle, shareTextInfo, shareImgFieldCode, shareImgUrl, shareImgUrlWX, gameShareSettingId } = gameInfo.shareSetting;
const { shareTitle, shareTextInfo, shareImgFieldCode, shareImgUrl, shareImgUrlWX, gameShareSettingId, shareImgUrlMini } = gameInfo.shareSetting;
this.form = Object.assign(this.form, {
shareTitle,
shareTextInfo,
......@@ -326,6 +332,11 @@ export default {
code: shareImgFieldCode,
imgUrl: shareImgUrl,
wxImg: shareImgUrlWX
},
shareAppImg: {
code: '',
imgUrl: shareImgUrlMini || appImg,
wxImg: shareImgUrlMini || appImg
}
});
}
......@@ -465,13 +476,14 @@ export default {
// 游戏分享
let shareSetting = {};
if (this.form.shareFlag) {
const { shareTitle, shareTextInfo, shareImg, gameShareSettingId } = this.form;
const { shareTitle, shareTextInfo, shareImg, gameShareSettingId, shareAppImg } = this.form;
shareSetting = {
shareTitle,
shareTextInfo,
shareImgUrl: shareImg.imgUrl,
shareImgFieldCode: shareImg.code,
shareImgUrlWX: shareImg.wxImg
shareImgUrlWX: shareImg.wxImg,
shareImgUrlMini: shareAppImg.imgUrl
};
if (this.isEdit) {
shareSetting.GameShareSettingId = gameShareSettingId;
......
......@@ -105,6 +105,7 @@ import editAlertMixin from '../common/editAlertMixin.js';
import dmShare from '../common/share.vue';
import dmThreshold from '../common/threshold.vue';
let cardType = 'firstStrategy';
const appImg = 'https://pic01-10001430.cos.ap-shanghai.myqcloud.com/lALPDhJzxjudO2LM8M0BQA_320_240.png_720x720g.jpg';
export default {
mixins: [editAlertMixin],
data() {
......@@ -144,6 +145,11 @@ export default {
imgUrl: require("../common/img/share/znm.png"), // eslint-disable-line
wxImg: ''
},
shareAppImg: {
code: '',
imgUrl: appImg, // eslint-disable-line
wxImg: ''
},
// 参与门槛
memberType: 0,
gameActivityAttendConditionId: '',
......@@ -276,7 +282,7 @@ export default {
});
// 分享
if (gameDetail.shareFlag === 1) {
const { shareTitle, shareTextInfo, shareImgFieldCode, shareImgUrl, shareImgUrlWX, gameShareSettingId } = gameDetail.shareSetting;
const { shareTitle, shareTextInfo, shareImgFieldCode, shareImgUrl, shareImgUrlWX, gameShareSettingId, shareImgUrlMini } = gameDetail.shareSetting;
this.form = Object.assign(this.form, {
shareTitle,
shareTextInfo,
......@@ -285,6 +291,11 @@ export default {
code: shareImgFieldCode,
imgUrl: shareImgUrl,
wxImg: shareImgUrlWX
},
shareAppImg: {
code: '',
imgUrl: shareImgUrlMini || appImg,
wxImg: shareImgUrlMini || appImg
}
});
}
......@@ -366,6 +377,7 @@ export default {
shareImgUrl: this.form.shareImg.imgUrl, // 是 string 分享图片 url
shareImgFieldCode: this.form.shareImg.code, // 是 string 分享图片 code
shareImgUrlWX: this.form.shareImg.wxImg, // 是 string 分享图片 wx
shareImgUrlMini: this.form.shareAppImg.imgUrl,
shareTitle: this.form.shareTitle, // 是 string 分享标题
shareTextInfo: this.form.shareTextInfo, // 是 string 分享描述
shareFlag: this.form.shareFlag || 0
......@@ -379,13 +391,14 @@ export default {
let shareSetting = {};
// 游戏分享
if (this.form.shareFlag) {
const { shareTitle, shareTextInfo, shareImg, gameShareSettingId } = this.form;
const { shareTitle, shareTextInfo, shareImg, gameShareSettingId, shareAppImg } = this.form;
shareSetting = {
shareTitle,
shareTextInfo,
shareImgUrl: shareImg.imgUrl,
shareImgFieldCode: shareImg.code,
shareImgUrlWX: shareImg.wxImg
shareImgUrlWX: shareImg.wxImg,
shareImgUrlMini: shareAppImg.imgUrl
};
if (this.isEdit) {
shareSetting.GameShareSettingId = gameShareSettingId;
......
......@@ -62,9 +62,17 @@
<vue-gic-member-group v-if="info.memberType === 2" :defaltSelected="defaltSelected" :height="500" :projectName="projectName" :headerList="headerList" @handleDataTransferred="handleDataTransferred" @handleDataLeft="handleDataLeft"></vue-gic-member-group>
</section>
<section class="dm-form__wrap">
<h3 class="dm-title__label">
提交记录
<div class="layout--tips" style="margin-top:0;width:400px;display:inline-block;margin-left:20px">
<i class="el-icon-info"></i>
当天的短信提交记录数据可在隔天下载完整内容
</div>
</h3>
<div class="clearfix pb22">
<el-select class="dm-select" v-model="listParams.sendStatus" placeholder="选择发送状态" @change="LoadMessageDetailList"> <el-option v-for="(v, i) in sendStatusOptions" :key="i" :label="v.label" :value="v.value"></el-option></el-select>
<!-- <el-select class="dm-select" v-model="listParams.sendStatus" placeholder="选择发送状态" @change="LoadMessageDetailList"> <el-option v-for="(v, i) in sendStatusOptions" :key="i" :label="v.label" :value="v.value"></el-option></el-select> -->
<el-input v-model="listParams.memberName" class="w200" placeholder="会员昵称/手机号/卡号" clearable @change="LoadMessageDetailList"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-select class="dm-select" v-model="listParams.sendStatus" placeholder="所有提交状态" @change="LoadMessageDetailList" clearable> <el-option v-for="(v, i) in sendStatusOptions" :key="i" :label="v.label" :value="v.value"></el-option></el-select>
<el-button icon="iconfont icon-icon_yunxiazai fz14" type="primary" class="fr" @click="exportExcel"> 下载Excel</el-button>
</div>
<el-table tooltipEffect="light" :data="messageList" style="width: 100%" v-loading="messageLoading">
......@@ -130,12 +138,12 @@ export default {
messageHeader: [
{ label: '手机号码', prop: 'telephone', minWidth: '100', align: 'left' },
{
label: '发送状态',
label: '提交状态',
prop: 'sendStatus',
minWidth: '80',
align: 'left',
formatter: function(row) {
return row.sendStatus === 0 ? '成功' : row.sendStatus === 1 ? '未发送' : '失败';
return row.sendStatus === 0 ? '提交成功' : row.sendStatus === 1 ? '未提交' : '提交失败';
}
}
// {
......@@ -168,7 +176,7 @@ export default {
pageSize: 20
},
total: 0,
sendStatusOptions: [{ value: '', label: '所有状态' }, { value: 0, label: '成功' }, { value: 1, label: '未发送' }, { value: 2, label: '失败' }], // eslint-disable-line
sendStatusOptions: [{ value: 0, label: '提交成功' }, { value: 1, label: '未提交' }, { value: 2, label: '提交失败' }], // eslint-disable-line
errorCodeShow: false,
// 人群筛选器可传参数
sceneValue: 'member', // 场景值
......
......@@ -43,9 +43,17 @@
</el-row>
</el-form>
<section class="dm-form__wrap">
<h3 class="dm-title__label">
提交记录
<div class="layout--tips" style="margin-top:0;width:400px;display:inline-block;margin-left:20px">
<i class="el-icon-info"></i>
当天的短信提交记录数据可在隔天下载完整内容
</div>
</h3>
<div class="clearfix pb22">
<el-select class="dm-select" v-model="listParams.sendStatus" placeholder="选择发送状态" @change="smsSmportPlanLogPage"> <el-option v-for="(v, i) in sendStatusOptions" :key="i" :label="v.label" :value="v.value"></el-option></el-select>
<!-- <el-select class="dm-select" v-model="listParams.sendStatus" placeholder="选择发送状态" @change="smsSmportPlanLogPage"> <el-option v-for="(v, i) in sendStatusOptions" :key="i" :label="v.label" :value="v.value"></el-option></el-select> -->
<el-input v-model="listParams.search" class="w200" placeholder="会员昵称/手机号/卡号" clearable @change="smsSmportPlanLogPage"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-select class="dm-select" v-model="listParams.sendStatus" placeholder="全部提交状态" @change="smsSmportPlanLogPage" clearable> <el-option v-for="(v, i) in sendStatusOptions" :key="i" :label="v.label" :value="v.value"></el-option></el-select>
<el-button icon="iconfont icon-icon_yunxiazai fz14" type="primary" class="fr" @click="exportExcel"> 下载Excel</el-button>
</div>
<el-table tooltipEffect="light" :data="messageList" style="width: 100%" v-loading="messageLoading">
......@@ -110,12 +118,12 @@ export default {
messageHeader: [
{ label: '手机号码', prop: 'telephone', width: '120', align: 'left' },
{
label: '发送状态',
label: '提交状态',
prop: 'sendStatus',
width: '80',
align: 'left',
formatter: function(row) {
return row.sendStatus === 0 ? '成功' : row.sendStatus === 1 ? '未发送' : '失败';
return row.sendStatus === 0 ? '提交成功' : row.sendStatus === 1 ? '未提交' : '提交失败';
}
},
{
......@@ -137,7 +145,7 @@ export default {
pageSize: 20
},
total: 0,
sendStatusOptions: [{ value: '', label: '所有状态' }, { value: 0, label: '成功' }, { value: 1, label: '未发送' }, { value: 2, label: '失败' }], // eslint-disable-line
sendStatusOptions: [{ value: 0, label: '提交成功' }, { value: 1, label: '未提交' }, { value: 2, label: '提交失败' }], // eslint-disable-line
errorCodeShow: false,
// 人群筛选器可传参数
sceneValue: '', // 场景值
......
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