Commit 62230d3d by chenxin

fix:build

parents 90968c33 3746dce2
<!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.09380bd14c6b55c2fbc349a9c0b42083.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.36.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.10.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.16.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.18.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.42.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.00.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.10.js></script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script type=text/javascript src=/marketing/static/js/manifest.4b170944d1065d1f47b9.js></script><script type=text/javascript src=/marketing/static/js/vendor.cbb380c2053ab598e892.js></script><script type=text/javascript src=/marketing/static/js/main.0f6b91fdc1412fd8590e.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.9114b51ad737c71e69a19786319dc665.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.36.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.10.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.16.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.18.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.42.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.00.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.10.js></script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script type=text/javascript src=/marketing/static/js/manifest.80518cc2180b67288608.js></script><script type=text/javascript src=/marketing/static/js/vendor.cbb380c2053ab598e892.js></script><script type=text/javascript src=/marketing/static/js/main.9be40b8568322326f793.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.
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.
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 r=window.webpackJsonp;window.webpackJsonp=function(t,o,c){for(var i,u,f,d=0,s=[];d<t.length;d++)u=t[d],n[u]&&s.push(n[u][0]),n[u]=0;for(i in o)Object.prototype.hasOwnProperty.call(o,i)&&(e[i]=o[i]);for(r&&r(t,o,c);s.length;)s.shift()();if(c)for(d=0;d<c.length;d++)f=a(a.s=c[d]);return f};var t={},n={13:0};function a(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.e=function(e){var r=n[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var t=new Promise(function(t,a){r=n[e]=[t,a]});r[2]=t;var o=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,a.nc&&c.setAttribute("nonce",a.nc),c.src=a.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"message",4:"ewash",5:"evaluation",6:"ecm",7:"activity",8:"recharge",9:"msg",10:"calllog"}[e]||e)+"."+{0:"f45be8719a0bebce6ed5",1:"eb4aae562903a44abebc",2:"a1e67b61b2c83b1882ba",3:"30063e940a03d39ae4e5",4:"eea8c2d361df15cde967",5:"d795b16cfdbbd7a175d3",6:"129e26b0d6d8c96ce121",7:"520a54176361c7b4f5f4",8:"1ff302476a871dc141c7",9:"ed6ba5a1645f90d782a1",10:"b15028a3ecc7d7b67d9f"}[e]+".js";var i=setTimeout(u,12e4);function u(){c.onerror=c.onload=null,clearTimeout(i);var r=n[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),n[e]=void 0)}return c.onerror=c.onload=u,o.appendChild(c),t},a.m=e,a.c=t,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="/marketing/",a.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
!function(e){var r=window.webpackJsonp;window.webpackJsonp=function(t,o,a){for(var i,f,u,d=0,s=[];d<t.length;d++)f=t[d],n[f]&&s.push(n[f][0]),n[f]=0;for(i in o)Object.prototype.hasOwnProperty.call(o,i)&&(e[i]=o[i]);for(r&&r(t,o,a);s.length;)s.shift()();if(a)for(d=0;d<a.length;d++)u=c(c.s=a[d]);return u};var t={},n={13:0};function c(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,c),n.l=!0,n.exports}c.e=function(e){var r=n[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var t=new Promise(function(t,c){r=n[e]=[t,c]});r[2]=t;var o=document.getElementsByTagName("head")[0],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,c.nc&&a.setAttribute("nonce",c.nc),a.src=c.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"message",4:"ewash",5:"evaluation",6:"ecm",7:"activity",8:"recharge",9:"msg",10:"calllog"}[e]||e)+"."+{0:"2b82d3c6073e20b68f83",1:"4a545bd230fff7cdce74",2:"c353acbd4806c018d832",3:"817c2fce5d629049941d",4:"17d5d8e8e5023c0ef4dd",5:"0c17680da1cc0f794988",6:"cfac61704ac008583a65",7:"520a54176361c7b4f5f4",8:"1ff302476a871dc141c7",9:"ed6ba5a1645f90d782a1",10:"012adc27d4425d824c4b"}[e]+".js";var i=setTimeout(f,12e4);function f(){a.onerror=a.onload=null,clearTimeout(i);var r=n[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),n[e]=void 0)}return a.onerror=a.onload=f,o.appendChild(a),t},c.m=e,c.c=t,c.d=function(e,r,t){c.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},c.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(r,"a",r),r},c.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},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.
......@@ -23,14 +23,14 @@
<!-- 组件引用cdn -->
<script src="//web-1251519181.file.myqcloud.com/components/header.2.0.36.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/card.2.0.10.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/card.2.0.10.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.16.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/store-card.2.0.18.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/store-card.2.0.18.js"></script><!-- 门店选择器 -->
<script src="//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/people.2.0.42.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js"></script><!-- 数据导出 -->
<script src="//web-1251519181.file.myqcloud.com/components/input.2.0.00.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.10.js"></script>
......
......@@ -246,4 +246,22 @@
}
.el-scrollbar__bar.is-vertical {
display: none;
}
.dm-tags {
width:50px;
border-radius:2px;
font-size:12px;
line-height:22px;
padding: 3px 7px;
&.error{
color:rgba(245,34,45,1);
background:rgba(255,241,240,1);
border:1px solid rgba(255,163,158,1);
}
&.warning{
color:rgba(250,140,22,1);
background:rgba(255,247,230,1);
border:1px solid rgba(255,213,145,1);
}
}
\ No newline at end of file
<template>
<el-select :disabled="disabled" v-loadmore="getMore" remote filterable clearable :remote-method="remoteMethod" @change="updateCId" size="small" v-model="cardId" placeholder="请输入卡券名称选择卡券">
<el-option v-for="(item, idx) in tableList" :key="idx" :label="`${item.cardName}(id: ...${item.coupCardId.slice(-5)})`" :value="item.coupCardId"></el-option>
<el-select popper-class="c-filterable" :disabled="disabled" v-loadmore="getMore" remote filterable clearable :remote-method="remoteMethod" @change="updateCId" size="small" v-model="cardId" placeholder="请输入卡券名称选择卡券">
<el-option v-for="(item, idx) in tableList" showNewOption :key="idx" :label="`${item.cardName}(${item.coupCardId.slice(-6)})`" :value="item.coupCardId">
<div>{{ `${item.cardName}(${item.coupCardId.slice(-6)})` }}</div>
<div style="color: #909399; font-size: 12px">{{ item.subName || '--' }}</div>
</el-option>
</el-select>
</template>
......@@ -10,7 +13,11 @@ export default {
name: 'card-select-filterable',
props: {
disabled: Boolean,
cId: String
cId: String,
extraParams: {
type: Object,
default: () => {}
}
},
data() {
return {
......@@ -49,6 +56,14 @@ export default {
}
},
methods: {
// 清空数据
clean() {
this.listParams.search = '';
this.listParams.currentPage = 1;
this.tableList = [];
this.nomore = false;
this.updateCId('');
},
// 获取详情
getCardDetail(coupCardId) {
this.loading = true;
......@@ -92,7 +107,8 @@ export default {
}
this.loading = true;
this.nomore = false;
getCardListByName(this.listParams)
const params = { ...this.listParams, ...this.extraParams };
getCardListByName(params)
.then(res => {
this.loading = false;
const tableList = res.result.result ? this.tableList.concat(res.result.result) : [];
......@@ -108,3 +124,12 @@ export default {
}
};
</script>
<style lang="scss">
.c-filterable /deep/ {
.el-select-dropdown__item {
height: 54px !important;
line-height: 28px !important;
}
}
</style>
......@@ -29,6 +29,12 @@ export default {
}
},
{
path: 'give',
name: '转赠记录',
component: () => import(/* webpackChunkName: "card" */ '../../views/card/give-list.vue'),
meta: {}
},
{
path: 'send',
name: '投放记录',
component: () => import(/* webpackChunkName: "card" */ '../../views/card/record-send.vue'),
......@@ -182,7 +188,7 @@ export default {
{
path: 'shelfanalysis/:id',
name: '卡券展架报表',
component: () => import(/* webpackChunkName: "card" */ '../../views/card/analysis.vue'),
component: () => import(/* webpackChunkName: "card" */ '../../views/card/analysis-shelf.vue'),
meta: {
type: 'shelf',
path: '/card/shelf'
......
......@@ -12,9 +12,15 @@ export const updateCardStock = params => requests(PREFIX + 'update-card-stock',
//卡券营销--卡券库--删除卡券
export const deleteCard = params => requests(PREFIX + 'delete-card', params);
//卡券营销--卡券库--卡券报表--渠道分析
//卡券营销--卡券库--展架报表--渠道分析
export const cardChannelAnalysis = params => requests(PREFIX + 'card-channel-analysis', params);
//卡券营销--卡券库--卡券报表--基础统计和转赠统计
export const cardbaseAnalysis = params => requests(PREFIX + 'card-basic-statistics', params);
//卡券营销--卡券库--卡券报表--渠道分析
export const cardChannelStatistics = params => requests(PREFIX + 'card-channel-statistics', params);
//卡券营销--卡券库--卡券报表/卡券展架--卡券报表趋势分析图
export const cardTrendEchart = params => requests(PREFIX + 'card-trend-echart', params);
......@@ -45,6 +51,9 @@ export const cardRecordPage = params => requests(PREFIX + 'card-record-page', pa
// 卡券营销--会员领取记录--获取领取记录默认时间段
export const getCouponDateLimit = params => requests(PREFIX + 'coupon-date-limit', params);
// 卡券营销--转赠记录
export const getCouponLogPage = params => requests(PREFIX + 'coup-give-log-page', params);
//卡券营销--卡券记录--投放记录/领取记录 - 投放记录
export const cardPutOnRecord = params => requests(PREFIX + 'card-put-on-record', params);
......
......@@ -95,10 +95,7 @@ export default {
}
};
},
created() {
this.$store.commit('aside_handler', false);
this.$store.commit('mutations_breadcrumb', [{ name: '会员管理', path: '' }, { name: '通话记录', path: '' }]); // eslint-disable-line
this.getTableList();
mounted() {
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
......@@ -108,6 +105,11 @@ export default {
`
);
},
created() {
this.$store.commit('aside_handler', false);
this.$store.commit('mutations_breadcrumb', [{ name: '会员管理', path: '' }, { name: '通话记录', path: '' }]); // eslint-disable-line
this.getTableList();
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips', '');
},
......
<template>
<section>
<!-- 渠道分析 -->
<div class="dm-form__wrap" v-if="$route.meta.type !== 'shelf'">
<h3 class="dm-title__label">
<span class="card-chart__title">渠道分析</span>
<el-date-picker class="fr ml5 mr20" v-model="dateTime2" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="cardChannelAnalysis"></el-date-picker>
</h3>
<el-table tooltipEffect="light" :data="tableList" style="width:100%" v-loading="loading">
<el-table-column v-for="(v, i) in tableHeader" :key="i" :align="v.align" :width="v.width" :min-width="v.minWidth" :prop="v.prop" :label="v.label" :formatter="v.formatter"></el-table-column>
</el-table>
</div>
<!-- 卡券报表趋势分析 -->
<div class="dm-form__wrap">
<h3 class="dm-title__label clearfix">
<span class="card-chart__title">卡券报表趋势分析</span>
<el-date-picker class="fr ml5 mr20" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="cardTrendEchart"></el-date-picker>
<el-select class="fr w200" v-model="chartParams.kpiName" placeholder="选择状态" @change="cardTrendEchart">
<el-option v-for="(v, i) in kpiNameOptions" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select>
</h3>
<div id="mountNode" ref="mountNode" v-show="list.length"></div>
<div class="chart--nodata" v-show="!list.length"></div>
</div>
</section>
</template>
<script>
import { cardChannelAnalysis, cardTrendEchart } from '@/service/api/cardApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
import VeLine from 'v-charts/lib/line.common';
import G2 from '@antv/g2';
export default {
name: 'card-analysis-shelf',
data() {
this.chartSettings = {
xAxisType: 'time'
};
return {
formatDateTimeByType,
dateTime: [Date.now() - 30 * 24 * 60 * 60 * 1000, Date.now()],
dateTime2: [Date.now() - 30 * 24 * 60 * 60 * 1000, Date.now()],
loading: false,
tableList: [],
chartData: {
columns: [],
rows: []
},
listParams: {
type: ''
},
kpiNameOptions: [{ label: '领取次数', value: 'card-puton1' }, { label: '使用次数', value: 'card-puton2' }, { label: '销售额', value: 'card-puton3' }], // eslint-disable-line
tableHeader: [
{ label: '渠道名称', prop: 'receiveName', align: 'left', minWidth: '200' },
{
label: '投放人次',
prop: 'issuingQuantity',
align: 'left',
width: '100',
formatter(row) {
return row.receiveCode === 'RECEIVE_005' ? '-' : row.issuingQuantity;
}
},
{
label: '领取率',
prop: 'receiveName',
align: 'left',
width: '100',
formatter(row) {
return row.receiveCode === 'RECEIVE_005' ? '-' : ((row.getedQuantity * 100) / (row.issuingQuantity === 0 ? 1 : row.issuingQuantity)).toFixed(2) + '%';
}
},
{ label: '领取数量', prop: 'getedQuantity', align: 'left', width: '100' },
{ label: '使用数量', prop: 'usageQuantity', align: 'left', width: '100' },
{
label: '核销率',
prop: 'receiveName',
align: 'left',
width: '100',
formatter(row) {
return ((row.usageQuantity * 100) / (row.getedQuantity === 0 ? 1 : row.getedQuantity)).toFixed(2) + '%';
}
},
{ label: '销售额', prop: 'saleAmount', align: 'left', width: '100' }
],
chartParams: {
kpiName: 'card-puton1',
cardId: this.$route.params.id,
beginTime: '',
endTime: '',
day: 1
},
list: []
};
},
components: {
[VeLine.name]: VeLine
},
created() {
if (this.$route.meta.type === 'shelf') {
this.chartParams = {
kpiName: 'shelf-cards1',
shelfId: this.$route.params.id,
beginTime: '',
endTime: ''
};
this.kpiNameOptions = [{ label: '领取次数', value: 'shelf-cards1' }, { label: '使用次数', value: 'shelf-cards2' }, { label: '销售额', value: 'shelf-cards3' }]; // eslint-disable-line
this.cardTrendEchart();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券展架', path: '/card/shelf' }, { name: '卡券展架报表', path: '' }]); // eslint-disable-line
} else {
this.chartParams = {
kpiName: 'card-puton1',
cardId: this.$route.params.id,
beginTime: '',
endTime: '',
day: 1
};
(this.kpiNameOptions = [{ label: '领取次数', value: 'card-puton1' }, { label: '使用次数', value: 'card-puton2' }, { label: '销售额', value: 'card-puton3' }]), this.cardChannelAnalysis(); // eslint-disable-line
this.cardTrendEchart();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券库', path: '/card/list' }, { name: '卡券报表', path: '' }]); // eslint-disable-line
}
},
methods: {
//加载列表
async cardChannelAnalysis() {
let params = {
coupCardId: this.$route.params.id,
beginTime: '',
endTime: ''
};
if (this.dateTime2) {
params.beginTime = formatDateTimeByType(this.dateTime2[0], 'yyyy-MM-dd');
params.endTime = formatDateTimeByType(this.dateTime2[1], 'yyyy-MM-dd');
} else {
params.beginTime = '';
params.endTime = '';
}
this.loading = true;
try {
let resList = await cardChannelAnalysis(params);
if (resList.errorCode === 0 && resList.result) {
this.tableList = resList.result;
} else {
this.tableList = [];
}
} catch (err) {}
this.loading = false;
},
//加载图表
async cardTrendEchart() {
if (this.dateTime) {
this.chartParams.beginTime = formatDateTimeByType(this.dateTime[0], 'yyyy-MM-dd');
this.chartParams.endTime = formatDateTimeByType(this.dateTime[1], 'yyyy-MM-dd');
} else {
this.chartParams.beginTime = '';
this.chartParams.endTime = '';
}
try {
let res = await cardTrendEchart(this.chartParams);
if (res.errorCode === 0 && res.result) {
let result = JSON.parse(res.result);
let series = result.series;
let xAxisType = result.xaxisData;
let list = [];
series.map((v, i) => {
v.data.map((w, j) => {
list.push({
day: xAxisType[j],
name: v.name,
temperature: parseInt(w.value)
});
});
});
const mountNode = this.$refs.mountNode;
const childs = Array.from(mountNode.childNodes);
childs.map(v => {
mountNode.removeChild(v);
});
this.list = list;
this.$nextTick(_ => {
this.initCharts(list);
});
}
} catch (err) {
console.log(err);
}
},
// 画图方法
initCharts(data) {
var chart = new G2.Chart({
container: 'mountNode',
forceFit: true,
height: 400
});
chart.source(data, {
day: {
range: [0, 1]
}
});
chart.tooltip({
crosshairs: {
type: 'line'
}
});
chart.axis('temperature', {
label: {
formatter: function formatter(val) {
val = Number(val);
if (val % 1 === 0) {
return val + '人次';
} else {
return '';
}
}
}
});
chart
.line()
.position('day*temperature')
.color('name');
chart
.point()
.position('day*temperature')
.color('name')
.size(4)
.shape('circle')
.style({
stroke: '#fff',
lineWidth: 1
});
chart.render();
}
}
};
</script>
<style lang="scss" scoped>
.card-chart__title {
display: inline-block;
vertical-align: middle;
padding-top: 13px;
font-weight: 700;
}
</style>
......@@ -48,7 +48,8 @@ const initForm = {
goods_discounts_number_upper_limit: 0,
goods_discounts_number_lower_limit: 0,
products_exchange_number: 0,
onlyFlag: true // 是否显示与优惠同享,默认true显示
onlyFlag: true, // 是否显示与优惠同享,默认true显示
giveFlag: 0 // 开启转赠 1开启
};
const sale_limit = { fee: 0, goods: '', flag: false, type: 0 }; //最低消费
const goods = { ok: '', no: '', flag: false };
......@@ -126,7 +127,8 @@ export default {
weimobShopList: [], // 微盟店铺list
weimobDemoCodeList: [{ pid: '', card: '', loading: false, cardList: [], save: false, cardName: '' }], // 保存的微盟店铺以及对应的微盟券号 {pid:xxxx,card:xxxx,loading:false, cardList: [], save: false, name: ''}
// cardValidity: false, // 卡券有效期是否禁用
nowWmShopData: {} // 存储wm店铺数据
nowWmShopData: {}, // 存储wm店铺数据
giveEnable: false // 支持转赠
};
},
watch: {
......@@ -273,6 +275,11 @@ export default {
}
// 支持的品牌-商品选择器
if (res.result.giveEnable) {
this.giveEnable = res.result.giveEnable;
}
// 支持的品牌-转赠功能
if (res.result.goodsEnable) {
this.xxSysp.goodsEnable = res.result.goodsEnable;
}
......@@ -291,6 +298,7 @@ export default {
this.storeMode = card.storeMode === 0 ? 0 : 1;
this.form.cardApplyChannel = card.cardApplyChannel ? card.cardApplyChannel.split(',') : [];
this.form.auditingStatus = card.auditingStatus || '';
this.form.giveFlag = res.result.giveEnable ? card.giveFlag : 0;
this.form.coupCardId = this.isCopy ? '' : card.coupCardId;
this.form.cardType = card.cardType;
this.form.cardName = card.cardName || '';
......@@ -517,6 +525,11 @@ export default {
// this.form.customCodeEnd = this.form.customCodeBegin = 0;
return;
}
// 自定义号段 ,转赠开关设置关闭
this.form.giveFlag = 0;
}
if (!this.giveEnable) {
this.form.giveFlag = 0;
}
//验证有效期
if (this.form.cardEffectiveMode) {
......@@ -560,6 +573,7 @@ export default {
card.coverDescript = this.form.coverDescript;
card.useCodePrefix = this.form.useCodePrefix;
card.useCodeSuffix = this.form.useCodeSuffix;
card.giveFlag = this.form.giveFlag;
//卡券条件
//抵金券 sale_limit.fee 最低消费; goods.ok 适用商品, goods.no 不适应商品, only: 1 不与其他优惠共享(不勾选only不传)
if (this.form.cardType === 0) {
......
......@@ -223,6 +223,11 @@
<el-alert v-show="storeMode && form.cardApplyChannel.indexOf('WMmicroMall') !== -1" title="选择的门店必须保持与微盟侧门店一致,请确认选择无误" type="warning" show-icon :closable="false" class="mt20 width80"></el-alert>
</el-form-item>
<el-form-item v-if="giveEnable && form.useCustomCode != 1" label="卡券转赠" class="is-required">
<el-switch :disabled="isEdit" v-model="form.giveFlag" :active-value="1" :inactive-value="0"></el-switch>
<span class="tips fz12 gray ml5">* code类型为自定义号段暂时不支持卡券转赠,转赠多次会消耗相同次数的库存,请设置足够的安全库存</span>
</el-form-item>
<el-form-item prop="image" label="(选填)封面图片">
<dm-upload-img :disabled="isEdit || isInfo" :model.sync="form.image" width="64" label="上传图片" url="/api-plug/upload-img" tips="图片建议尺寸:850px*350px,大小不超过2M"></dm-upload-img>
</el-form-item>
......
<template>
<section v-loading="loading">
<div class="pb22 clearfix">
<el-input v-model="listParams.search" class="w300" placeholder="卡券名称/卡券代码/用户信息" clearable @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-select clearable class="dm-select" v-model="listParams.giveStatus" placeholder="全部转赠状态" @change="refresh">
<el-option label="转赠中" :value="0"></el-option>
<el-option label="已完成" :value="1"></el-option>
<!-- <el-option label="转赠异常" :value="2"></el-option> -->
<el-option label="已退回" :value="3"></el-option>
</el-select>
</div>
<div class="filter--box"><span class="vertical-middle pl10">转赠时间:</span><el-date-picker v-model="dateTime" :clearable="false" @change="refresh" class="w300" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker> <span class="vertical-middle">领取时间:</span><el-date-picker v-model="dateTime2" @change="refresh" class="w300" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker></div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%">
<el-table-column :show-overflow-tooltip="true" min-width="120" header-align="left" align="left" prop="memberId" label="转赠会员">
<template slot-scope="scope">
<a v-if="scope.row.fromMemberId" :href="'/member/#/wechatmemberDetail?memberId=' + scope.row.fromMemberId" target="_blank">
<img class="vertical-middle table__avatar--40" :src="scope.row.fromImageUrl || defaultAvatar" width="60" height="60" />
<div class="inline-block vertical-middle">
<p class="table-name--ellipsis">{{ scope.row.fromMemberName || '--' }}</p>
<p class="fz13 gray">{{ scope.row.fromPhoneNumber || '--' }}</p>
</div>
</a>
<span v-else>游客openid:{{ scope.row.fromOpenId || '--' }}</span>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" width="100" align="left" prop="giveTime" label="转赠时间">
<template slot-scope="scope">
<p class="cell-time">
{{ formatDateTimeByType(scope.row.giveTime, 'yyyy-MM-dd-HH-mm', true).y }}<br />
<span>{{ formatDateTimeByType(scope.row.giveTime, 'yyyy-MM-dd-HH-mm', true).h }}</span>
</p>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" width="140" align="left" prop="cardType" label="卡券类型">
<template slot-scope="scope">
<p>{{ scope.row.cardType === 0 ? '抵金券' : scope.row.cardType === 1 ? '折扣券' : '兑换券' }}</p>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="120" align="left" prop="cardName" label="卡券名称"></el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="120" align="left" prop="fromCardCode" label="转赠卡券代码"></el-table-column>
<el-table-column :show-overflow-tooltip="true" width="140" align="left" prop="cardType" label="转赠状态">
<template slot-scope="scope">
{{ scope.row.giveStatus | giveStatus }}
<el-tooltip v-if="scope.row.giveStatus == 2" :open-delay="300" class="item" effect="dark" :content="scope.row.remark" placement="top-start">
<i class="el-icon-warning" style="color:#f56c6c;cursor:pointer;"></i>
</el-tooltip>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="120" header-align="left" align="left" prop="memberId" label="领取会员">
<template slot-scope="scope">
<template v-if="scope.row.giveStatus === 1 || scope.row.giveStatus === 2">
<a v-if="scope.row.friendMemberId" :href="'/member/#/wechatmemberDetail?memberId=' + scope.row.friendMemberId" target="_blank">
<img class="vertical-middle table__avatar--40" :src="scope.row.friendImageUrl || defaultAvatar" width="60" height="60" />
<div class="inline-block vertical-middle">
<p class="table-name--ellipsis">{{ scope.row.friendMemberName || '--' }}</p>
<p class="fz13 gray">{{ scope.row.friendPhoneNumber || '--' }}</p>
</div>
</a>
<span v-else-if="scope.row.friendOpenId">游客openid:{{ scope.row.friendOpenId || '--' }}</span>
<span v-else>--</span>
</template>
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" width="100" align="left" prop="receiveTime" label="领取时间">
<template slot-scope="scope">
<p v-if="scope.row.giveStatus === 1 || scope.row.giveStatus === 2" class="cell-time">
{{ formatDateTimeByType(scope.row.receiveTime, 'yyyy-MM-dd-HH-mm', true).y }}<br />
<span>{{ formatDateTimeByType(scope.row.receiveTime, 'yyyy-MM-dd-HH-mm', true).h }}</span>
</p>
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="120" align="left" prop="friendCardCode" label="受赠卡券代码">
<template slot-scope="scope">
<span v-if="scope.row.giveStatus === 1">{{ scope.row.friendCardCode }}</span>
<span v-else>--</span>
</template>
</el-table-column>
</el-table>
<dm-pagination v-show="tableList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></dm-pagination>
</section>
</template>
<script>
import { getCouponLogPage } from '@/service/api/cardApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
import talbeMethods from '@/mixins/tableMethods.js';
import filterAvater from '@/mixins/filterAvater.js';
export default {
name: 'refund-list',
mixins: [talbeMethods, filterAvater],
data() {
return {
formatDateTimeByType,
dateTime: [,],
dateTime2: [,],
listParams: {
giveBeginTime: '',
giveEndTime: '',
receiveBeginTime: '',
receiveEndTime: '',
giveStatus: '',
search: '',
currentPage: 1,
pageSize: 20
},
total: 0,
loading: false,
tableList: [],
projectName: 'marketing' // 当前项目名
};
},
created() {
this.getTableList();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '转赠记录', path: '' }]); // eslint-disable-line
},
filters: {
giveStatus(val) {
let str;
switch (val) {
case 0:
str = '转赠中';
break;
case 1:
str = '已完成';
break;
case 2:
str = '转赠异常';
break;
case 3:
str = '已退回';
break;
default:
break;
}
return str;
}
},
methods: {
// 加载列表
async getTableList() {
this.loading = true;
this.dataTimeFormat();
try {
let res = await getCouponLogPage(this.listParams);
this.tableList = res.result.result || [];
this.total = res.result.totalCount || 0;
} catch (err) {
this.$tips({ type: 'error', message: '加载列表失败' });
}
this.loading = false;
},
/**-------辅助方法---------- */
dataTimeFormat() {
if (this.dateTime) {
this.listParams.giveBeginTime = formatDateTimeByType(this.dateTime[0], 'yyyy-MM-dd');
this.listParams.giveEndTime = formatDateTimeByType(this.dateTime[1], 'yyyy-MM-dd');
} else {
this.listParams.giveBeginTime = '';
this.listParams.giveEndTime = '';
}
if (this.dateTime2) {
this.listParams.receiveBeginTime = formatDateTimeByType(this.dateTime2[0], 'yyyy-MM-dd');
this.listParams.receiveEndTime = formatDateTimeByType(this.dateTime2[1], 'yyyy-MM-dd');
} else {
this.listParams.receiveBeginTime = '';
this.listParams.receiveEndTime = '';
}
}
}
};
</script>
......@@ -238,9 +238,7 @@ export default {
return this.isAdd || (this.isEdit && this.form.putOnType === 1 && this.form.putOnTime > Date.now());
}
},
created() {
this.listTemplateVariables();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '/card' }, { name: '卡券库', path: '/card/list' }, { name: '卡券群发', path: '' }]); // eslint-disable-line
mounted() {
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
......@@ -253,6 +251,10 @@ export default {
this.$store.commit('mutations_layoutTips', '');
}, 10000);
},
created() {
this.listTemplateVariables();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '/card' }, { name: '卡券库', path: '/card/list' }, { name: '卡券群发', path: '' }]); // eslint-disable-line
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips', '');
},
......
......@@ -4,15 +4,16 @@
<span class="pr10">卡券共{{ total }}</span>
<el-button-group class="vertical-middle pr4">
<el-button @click="sortList('col1')">创建时间<i class="el-icon--right" :class="listParams.sortBy === 'col1' ? 'el-icon-caret-top' : listParams.sortBy === 'col1 desc' ? 'el-icon-caret-bottom' : 'el-icon-d-caret'"></i></el-button>
<el-button @click="sortList('col2')">领取量<i class="el-icon--right" :class="listParams.sortBy === 'col2' ? 'el-icon-caret-top' : listParams.sortBy === 'col2 desc' ? 'el-icon-caret-bottom' : 'el-icon-d-caret'"></i></el-button>
<!-- <el-button @click="sortList('col2')">领取量<i class="el-icon--right" :class="listParams.sortBy === 'col2' ? 'el-icon-caret-top' : listParams.sortBy === 'col2 desc' ? 'el-icon-caret-bottom' : 'el-icon-d-caret'"></i></el-button>
<el-button @click="sortList('col3')">使用量<i class="el-icon--right" :class="listParams.sortBy === 'col3' ? 'el-icon-caret-top' : listParams.sortBy === 'col3 desc' ? 'el-icon-caret-bottom' : 'el-icon-d-caret'"></i></el-button>
<el-button @click="sortList('col4')">核销率<i class="el-icon--right" :class="listParams.sortBy === 'col4' ? 'el-icon-caret-top' : listParams.sortBy === 'col4 desc' ? 'el-icon-caret-bottom' : 'el-icon-d-caret'"></i></el-button>
<el-button @click="sortList('col4')">核销率<i class="el-icon--right" :class="listParams.sortBy === 'col4' ? 'el-icon-caret-top' : listParams.sortBy === 'col4 desc' ? 'el-icon-caret-bottom' : 'el-icon-d-caret'"></i></el-button> -->
</el-button-group>
<el-select class="dm-select" v-model="listParams.cardType" placeholder="选择卡券类型" @change="refresh">
<el-option v-for="(item, index) in cardTypeOptions" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
<el-input v-model="listParams.searchParam" class="w200 vertical-middle" placeholder="输入卡券名称/备注" clearable @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-checkbox class="vertical-middle" v-if="$store.state.marketing.isShowSelf" v-model="listParams.showSelfFlag" :true-label="1" :false-label="0" label="仅看本人" border @change="refresh" />
<el-checkbox class="ml0" v-model="listParams.effectiveFlag" :true-label="1" :false-label="0" label="仅展示有效卡券" border @change="refresh" />
<el-button class="fr" type="primary" @click="$router.push('/card/add')">新增卡券</el-button>
</div>
<ul class="clearfix" element-loading-text="拼命加载中">
......@@ -43,7 +44,8 @@ export default {
currentPage: 1,
pageSize: 20,
cardType: '',
showSelfFlag: ''
showSelfFlag: '',
effectiveFlag: 0 // 1有效 0全部
},
total: 0,
loading: false,
......
......@@ -13,7 +13,7 @@
<el-button class="block block-center mt10" type="text" @click="shelfAddShow = true">添加卡券</el-button>
</div>
<dm-pagination v-show="tableList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></dm-pagination>
<shelf-add :show.sync="shelfAddShow" @refresh="cardPageList"></shelf-add>
<shelf-add :show.sync="shelfAddShow" @refresh="getTableList"></shelf-add>
</section>
</template>
<script>
......
......@@ -22,6 +22,9 @@
<h5>{{ item.saleAmount }}</h5>
<p>销售额</p>
</div>
<el-tooltip class="item" effect="dark" content="当日的领取数量\使用数量\核销率\销售额统计数据在次日凌晨更新" :open-delay="300">
<i style="position:absolute;right:10px;top:10px;cursor:pointer;color:#c0c4cc;font-size:18px;" class="el-icon-question"></i>
</el-tooltip>
</div>
<div class="card-item__detail">
<p class="ellipsis-100">
......@@ -29,7 +32,7 @@
<span v-if="item.cardEffectiveMode === 0">{{ formatDateTimeByType(item.beginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(item.endDate, 'yyyy-MM-dd') }}</span>
</p>
<p class="ellipsis-100">
使用条件:<el-popover placement="top-start" width="200" trigger="hover" :content="item.useCondition | filterUseCondition">
使用条件:<el-popover :open-delay="300" placement="top-start" width="200" trigger="hover" :content="item.useCondition | filterUseCondition">
<span slot="reference" class="ellipsis-100">{{ item.useCondition | filterUseCondition }}</span>
</el-popover>
</p>
......@@ -165,6 +168,7 @@ export default {
}
&_body {
.card-item__count {
position: relative;
border-bottom: 1px solid #ddd;
& > div {
width: 50%;
......
......@@ -30,7 +30,6 @@
<el-table-column min-width="120" align="left" prop="cardName" label="卡券名称"> </el-table-column>
<el-table-column min-width="120" align="left" prop="cardCode" label="卡券券号"> </el-table-column>
<el-table-column min-width="120" align="left" prop="dictName" label="卡券来源"> </el-table-column>
<el-table-column min-width="120" align="left" prop="receiveTypeExcel" label="来源明细"> </el-table-column>
<el-table-column min-width="120" align="left" prop="attentionStatus" label="关注状态"> </el-table-column>
<el-table-column width="135" align="left" prop="transferDate" label="关注时间">
<template slot-scope="scope">
......@@ -48,7 +47,7 @@
</div>
</template>
</el-table-column>
<el-table-column min-width="100" align="left" prop="creatorName" label="创建人" v-if="$store.state.marketing.openFlag"></el-table-column>
<!-- <el-table-column min-width="100" align="left" prop="creatorName" label="创建人" v-if="$store.state.marketing.openFlag"></el-table-column> -->
</el-table>
<dm-pagination v-show="recordList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></dm-pagination>
<vue-gic-export-excel :dialogVisible.sync="dialogVisible" :dataArr="recordList" :type="2" :excelUrl="excelUrl" :params="params" :projectName="projectName"></vue-gic-export-excel>
......@@ -92,9 +91,7 @@ export default {
params: {} // 传递的参数
};
},
created() {
this.getTableList();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券记录', path: '' }, { name: '临时领取记录', path: '' }]); // eslint-disable-line
mounted() {
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
......@@ -102,6 +99,10 @@ export default {
</div>`
);
},
created() {
this.getTableList();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券记录', path: '' }, { name: '临时领取记录', path: '' }]); // eslint-disable-line
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips', '');
},
......
......@@ -3,13 +3,15 @@
<!-- 条件筛选区 -->
<div class="pb22">
<el-input clearable v-model="listParams.search" style="width:240px" placeholder="请输入会员信息/卡券代码" @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-checkbox class="vertical-middle" v-if="$store.state.marketing.isShowSelf" v-model="listParams.showSelfFlag" :true-label="1" :false-label="0" label="仅看本人" border @change="refresh" />
<card-select-filter ref="cdf" :cId.sync="listParams.coupCardId" class="w250" @cIdUpdate="refresh" :disabled="listParams.allCouponFlag" />
<el-checkbox class="vertical-middle" v-if="$store.state.marketing.isShowSelf" v-model="listParams.showSelfFlag" :true-label="1" :false-label="0" label="仅看本人" border @change="changeShowSelf" />
<card-select-filter v-bind="extraCF" ref="cdf" :cId.sync="listParams.coupCardId" class="w250" @cIdUpdate="refresh" :disabled="listParams.allCouponFlag" />
<div class="inline-block ml5">
<span class="mr5">查看全部卡券</span><el-switch v-model="listParams.allCouponFlag" @change="changeAllCouponFlag" :active-value="1" :inactive-value="0" />
<span class="gray fz12 ml5" style="display:inline-block;width:220px;line-height:18px;position:relative;top:8px">*查询全部卡券领取记录单次仅支持区间范围7天的查询,速度较慢,请耐心等候</span>
</div>
<el-button class="fr" type="primary" icon="iconfont icon-icon_yunxiazai fz14" @click="exportReceivedRecordExcel"> 导出订单</el-button>
<div class="fr" style="position:relative;top:8px;">
<el-button type="primary" icon="iconfont icon-icon_yunxiazai fz14" @click="confirm.visible = true"> 导出记录</el-button>
</div>
</div>
<div class="filter--box">
<el-select class="dm-select pl10" v-model="listParams.cardStatus" placeholder="选择卡券状态" @change="refresh">
......@@ -100,7 +102,20 @@
<dm-pagination v-show="recordList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></dm-pagination>
<!-- 核销组件dialog -->
<card-order :show.sync="cardOrderShow" :obj="currentObj" @offSuccess="getTableList"></card-order>
<vue-gic-export-excel :dialogVisible.sync="dialogVisible" :dataArr="recordList" :type="2" :excelUrl="excelUrl" :params="params" :projectName="projectName"></vue-gic-export-excel>
<vue-gic-export-excel :dialogVisible.sync="dialogVisible" :dataArr="dataArr" :type="2" :excelUrl="excelUrl" :params="params" :projectName="projectName"></vue-gic-export-excel>
<el-dialog title="领取记录导出确认" :visible.sync="confirm.visible" width="420px" @close="confirmClose">
<div class="mb20 ml20">
<el-radio v-model="confirm.radio" :label="0">按列表筛选条件导出</el-radio>
</div>
<div class="ml20">
<el-radio v-model="confirm.radio" :label="1">所有卡券领取时期段导出</el-radio>
<el-date-picker clearable v-model="confirm.dateTime" class="block mt10 mb10" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="confirmClose">取 消</el-button>
<el-button type="primary" @click="toExport">下一步</el-button>
</span>
</el-dialog>
</section>
</template>
<script>
......@@ -144,14 +159,25 @@ export default {
coupCardId: ''
},
total: 0,
confirm: {
visible: false,
radio: 0, // 默认列表条件
dateTime: []
},
cardOrderShow: false,
currentObj: {},
projectName: 'marketing', // 当前项目名
dialogVisible: false,
excelUrl: '', // 下载数据的地址
params: {} // 传递的参数
params: {}, // 传递的参数
dataArr: []
};
},
computed: {
extraCF() {
return this.listParams.showSelfFlag ? { extraParams: { showSelfFlag: 1 } } : {};
}
},
mounted() {
this.getCouponDateLimit();
if (this.$route.query.coupCardId) {
......@@ -160,9 +186,6 @@ export default {
} else {
this.$refs.cdf.getCardList();
}
},
created() {
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券记录', path: '' }, { name: '领取记录', path: '' }]); // eslint-disable-line
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
......@@ -170,10 +193,31 @@ export default {
</div>`
);
},
created() {
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券记录', path: '' }, { name: '领取记录', path: '' }]); // eslint-disable-line
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips', '');
},
methods: {
changeShowSelf() {
// 清空卡券下拉 数据可能不准确不是本人数据
this.$refs.cdf.clean();
},
toExport() {
console.log(this.confirm.dateTime);
if (this.confirm.radio && this.confirm.dateTime && !this.confirm.dateTime[0]) {
this.$tips({ message: '请选择导出时间段', type: 'warning' });
return;
}
this.exportReceivedRecordExcel();
this.confirmClose();
},
confirmClose() {
this.confirm.radio = 0;
this.confirm.dateTime = [];
this.confirm.visible = false;
},
changeAllCouponFlag(val) {
if (val) {
this.listParams.coupCardId = '';
......@@ -308,13 +352,22 @@ export default {
exportReceivedRecordExcel() {
this.dialogVisible = true;
this.excelUrl = exportReceivedRecordExcel;
if (this.dateTime) {
this.listParams.beginTime = formatDateTimeByType(this.dateTime[0], 'yyyy-MM-dd');
this.listParams.endTime = formatDateTimeByType(this.dateTime[1], 'yyyy-MM-dd');
if (this.confirm.radio == 0) {
if (this.dateTime) {
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.endTime = '';
}
this.dataArr = this.recordList;
} else {
this.listParams.beginTime = '';
this.listParams.endTime = '';
// 替换领取时间
this.listParams.beginTime = formatDateTimeByType(this.confirm.dateTime[0], 'yyyy-MM-dd');
this.listParams.endTime = formatDateTimeByType(this.confirm.dateTime[1], 'yyyy-MM-dd');
this.dataArr = [1, 2, 3]; // 不能拦截空list
}
if (this.dateTime2) {
this.listParams.writeOffBeginTime = formatDateTimeByType(this.dateTime2[0], 'yyyy-MM-dd');
this.listParams.writeOffEndTime = formatDateTimeByType(this.dateTime2[1], 'yyyy-MM-dd');
......@@ -350,6 +403,10 @@ export default {
_content = `<div class="dm-status--error">已销毁</div>`;
} else if (row.status == 8) {
_content = `<div class="dm-status--info">已占用</div>`;
} else if (row.status == 9) {
_content = `<div class="dm-status--warning">转赠中</div>`;
} else if (row.status == 10) {
_content = `<div class="dm-status--info">已转赠</div>`;
}
return _content;
}
......
......@@ -174,6 +174,10 @@ export default {
_content = `<div class="dm-status--error">已销毁</div>`;
} else if (status == 8) {
_content = `<div class="dm-status--info">已占用</div>`;
} else if (status == 9) {
_content = `<div class="dm-status--warning">转赠中</div>`;
} else if (status == 10) {
_content = `<div class="dm-status--info">已退回</div>`;
}
return _content;
},
......
......@@ -102,16 +102,18 @@ export default {
};
},
created() {
this.getTableList();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券记录', path: '' }, { name: '投放记录', path: '' }]); // eslint-disable-line
},
mounted() {
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
<i class="el-icon-info"></i>
历史数据限制:${formatDateTimeByType(nowDate, 'yyyy-MM-dd')}之前的卡券投放计划未保存详细投放录。
</div>
<i class="el-icon-info"></i>
历史数据限制:${formatDateTimeByType(nowDate, 'yyyy-MM-dd')}之前的卡券投放计划未保存详细投放录。
</div>
`
);
this.getTableList();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券记录', path: '' }, { name: '投放记录', path: '' }]); // eslint-disable-line
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips', '');
......
......@@ -102,6 +102,8 @@ export default {
created() {
this.ecmBatchSendInfos();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '智能营销', path: '/ecm' }, { name: this.$route.query.name + ' - 批次记录', path: '' }]); // eslint-disable-line
},
mounted() {
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
......
......@@ -134,14 +134,16 @@ export default {
params: {} // 传递的参数
};
},
created() {
this.ecmCurrentSendInfos();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '智能营销', path: '/ecm' }, { name: this.$route.query.name + ' - 实时发送记录', path: '' }]); // eslint-disable-line
mounted() {
this.$store.commit('mutations_layoutTips', `<div class="layout--tips"><i class="el-icon-info"></i>历史数据限制:2018年11月15日之前的历史营销计划,没有详细数据</div>`);
setTimeout(_ => {
this.$store.commit('mutations_layoutTips', '');
}, 5000);
},
created() {
this.ecmCurrentSendInfos();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '智能营销', path: '/ecm' }, { name: this.$route.query.name + ' - 实时发送记录', path: '' }]); // eslint-disable-line
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips', '');
},
......
<template>
<div class="dm-card__item__wrap">
<img v-if="item.status === 0" :src="require('../assets/img/delete_icon.png')" draggable="false" class="flag" />
<img v-else-if="item.couponStock <= 0" :src="require('../assets/img/stock_icon.png')" draggable="false" class="flag" />
<div class="dm-card__item" :style="{ background: item.cardColor }">
<img class="dm-card__item__avatar" :src="item.brandLogo || loadErrorImg" alt="" />
<div class="inline-block">
......@@ -35,3 +37,16 @@ export default {
}
};
</script>
<style lang="scss" scoped>
.dm-card__item__wrap {
position: relative;
img.flag {
position: absolute;
right: 0px;
top: -2px;
z-index: 5;
width: 70px;
}
}
</style>
......@@ -17,13 +17,19 @@
</div>
</el-form-item>
<el-form-item label="链接类型" class="url-link-wrap" style="margin-bottom: 0">
<el-select @change="changePreValue" v-model="preValue" class="w200" placeholder="请选择" style="margin-right: 6px;">
<el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
<el-select v-if="preValue" @change="changeNextValue" class="w200" v-model="nextValue" placeholder="请选择">
<el-option v-for="item in options2" :key="item.linkId" :label="item.name" :value="item.linkId"> </el-option>
</el-select>
<el-form-item label="链接类型" class="url-link-wrap">
<div v-loading="linkLoading">
<el-select @change="changePreValue" v-model="preValue" class="w200" placeholder="请选择" style="margin-right: 6px;">
<el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
<el-select v-show="preValue == 5" v-loadmore="getMore" remote filterable clearable :remote-method="remoteMethod" @change="changeNextValue" v-model="nextValue" class="w200" placeholder="请选择(支持模糊查询)">
<!-- <el-select v-loadmore="getMore" filterable clearable @change="changeNextValue" remote :remote-method="remoteMethod" class="w200" v-model="nextValue" placeholder="请选择"> -->
<el-option v-for="item in options2" :key="item.linkId" :label="item.name" :value="item.linkId"> </el-option>
</el-select>
<el-select v-show="preValue && preValue != 5" filterable clearable @change="changeNextValue" class="w200" v-model="nextValue" placeholder="请选择">
<el-option v-for="item in options2" :key="item.linkId" :label="item.name" :value="item.linkId"> </el-option>
</el-select>
</div>
</el-form-item>
</div>
</div>
......@@ -81,9 +87,31 @@ export default {
}
],
options2: [],
wechatContent: {}
wechatContent: {},
listParams: {
pageSize: 10,
currentPage: 1,
search: '',
requestProject: 'gic-web'
},
nomore: false,
linkLoading: false
};
},
directives: {
loadmore: {
inserted(el, binding) {
// 获取element-ui定义好的scroll盒子
const SELECTDOWN_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');
SELECTDOWN_DOM.addEventListener('scroll', function() {
const CONDITION = this.scrollHeight - this.scrollTop <= this.clientHeight;
if (CONDITION) {
binding.value();
}
});
}
}
},
watch: {
show(val) {
this.form = {
......@@ -108,9 +136,8 @@ export default {
if (pagePath.pageType === 5) {
// 自定义链接
this.getCustonList().then(res => {
this.nextValue = pagePath.pageId;
});
// 获取pageName
this.getPageName(pagePath.pageId);
} else {
this.getNextList(this.preValue).then(res => {
this.nextValue = pagePath.type;
......@@ -161,11 +188,54 @@ export default {
this.nextValue = '';
this.options2 = [];
if (val === 5) {
this.getCustonList();
this.remoteMethod('');
} else {
this.getNextList(val);
}
},
// 获取页面名称
getPageName(pageId) {
this.axios
.post(
'/api-admin/get-custom-page-entity',
qs.stringify({
pageId,
requestProject: 'gic-web'
})
)
.then(res => {
var data = res.data;
if (data.errorCode == 0) {
this.listParams.search = data.result.title;
this.getCustonList().then(res => {
this.nextValue = pageId;
});
} else {
this.loading = false;
this.$message({
type: 'error',
message: data.message
});
}
});
},
// 模糊搜索
remoteMethod(search) {
this.listParams.search = search;
this.listParams.currentPage = 1;
this.options2 = [];
this.nomore = false;
this.getCustonList();
},
// 下一页
getMore() {
console.log(this.nomore);
if (this.nomore) {
return;
}
this.listParams.currentPage = this.listParams.currentPage * 1 + 1;
this.getCustonList();
},
changeNextValue(val) {
if (val) {
let obj = {};
......@@ -181,35 +251,34 @@ export default {
// 获取自定义链接list
getCustonList() {
return new Promise((resolve, reject) => {
this.loading = true;
this.axios
.post(
'/api-admin/list-custom-page',
qs.stringify({
requestProject: 'gic-web'
})
)
.then(res => {
this.loading = false;
//成功后回调
var data = res.data;
if (data.errorCode == 0) {
this.options2 = data.result.map(v => {
this.linkLoading = true;
this.axios.post('/api-admin/list-custom-page-for-link', qs.stringify(this.listParams)).then(res => {
this.linkLoading = false;
//成功后回调
var data = res.data;
if (data.errorCode == 0) {
const options2 =
data.result.result.map(v => {
return {
linkId: v.pageId,
name: v.name,
url: v.url
};
});
resolve();
} else {
this.loading = false;
this.$message({
type: 'error',
message: data.message
});
}
});
}) || [];
const tableList = options2 ? this.options2.concat(options2) : [];
const total = data.result.totalCount;
this.options2 = tableList;
this.total = total;
this.nomore = total <= tableList.length || total - tableList.length < this.listParams.pagesize; // 没有下一页了
resolve();
} else {
this.linkLoading = false;
this.$message({
type: 'error',
message: data.message
});
}
});
});
},
// 获得链接类型的二级
......@@ -228,6 +297,8 @@ export default {
var data = res.data;
if (data.errorCode == 0) {
this.options2 = data.result;
this.total = data.result.length;
this.nomore = false; // 没有下一页了
resolve();
} else {
this.$message({
......@@ -245,18 +316,6 @@ export default {
title: this.form.title,
mediaId: this.form.mediaId
};
// 自定义链接
if (this.preValue === 5) {
sendData.pagePath = JSON.stringify({
customUrl: this.options2.find(v => {
return v.linkId === this.nextValue;
}).url,
pageId: this.nextValue,
pageType: 5
});
} else {
sendData.pagePath = JSON.stringify(this.wechatContent);
}
if (!sendData.title) {
this.$message({ type: 'warning', message: '简介未填写' });
......@@ -271,10 +330,26 @@ export default {
return;
}
// 自定义链接
if (this.preValue === 5) {
sendData.pagePath = JSON.stringify({
customUrl: this.options2.find(v => {
return v.linkId === this.nextValue;
}).url,
pageId: this.nextValue,
pageType: 5
});
} else {
sendData.pagePath = JSON.stringify(this.wechatContent);
}
this.$emit('sendItem', sendData);
this.close();
},
close() {
this.listParams.currentPage = 1;
this.listParams.search = '';
this.listParams.nomore = false;
this.options2 = [];
this.$emit('update:show', false);
}
}
......
......@@ -168,8 +168,17 @@ export default {
this.$store.commit('mutations_breadcrumb', [{ name: '企业管理', path: '' }, { name: '服务监督', path: '/evaluation' }, { name: '最新评价', path: '' }]); // eslint-disable-line
}
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips', '');
},
mounted() {
this.getEvaluateSetting();
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
<i class="el-icon-info"></i>最新评价会在评价时间的隔天展示在小程序端附近门店的门店详情处
</div>`
);
},
watch: {
$route(val) {
......
......@@ -237,13 +237,15 @@ export default {
this.listTemplateVariables();
this.sceneSettingList();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: 'e袋洗服务', path: '/ewash' }, { name: '服务列表', path: '/ewash/list' }, { name: '卡券群发', path: '' }]); // eslint-disable-line
},
mounted() {
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
<i class="el-icon-info"></i>
风险提示:大规模投放卡券可能导致模板消息被封
</div>
`
<i class="el-icon-info"></i>
风险提示:大规模投放卡券可能导致模板消息被封
</div>
`
);
setTimeout(_ => {
this.$store.commit('mutations_layoutTips', '');
......
......@@ -100,6 +100,11 @@
<template v-else>
{{ scope.row.prizeType === 1 ? `${scope.row.prizeIntegral}积分` : `${scope.row.cardName}` }}
</template>
<template v-if="!isAdd && scope.row.prizeType == 2">
<!-- 卡券 且不是新增表单 -->
<span v-if="scope.row.status == 0" class="dm-tags warning">已删除</span>
<span v-else-if="scope.row.cardStock <= 0" class="dm-tags error">无库存</span>
</template>
</template>
</el-table-column>
<el-table-column prop="prizeQuantity" label="商品数量" align="left" :min-width="160">
......
......@@ -79,6 +79,14 @@
<template v-else>
{{ scope.row.prizeType === 1 ? `${scope.row.prizeIntegral}积分` : `${scope.row.cardName}` }}
</template>
<template v-if="!isAdd && scope.row.prizeType == 2">
<!-- 卡券 且不是新增表单 -->
<span v-if="scope.row.status == 0" class="dm-tags warning">已删除</span>
<span v-else-if="scope.row.cardStock <= 0" class="dm-tags error">无库存</span>
</template>
<template v-else>
{{ scope.row.prizeType === 1 ? `${scope.row.prizeIntegral}积分` : `${scope.row.cardName}` }}
</template>
</template>
</el-table-column>
<el-table-column prop="prizeQuantity" label="商品数量" align="left" :min-width="160">
......
......@@ -94,6 +94,10 @@
<el-table-column prop="prizeReferType" label="奖品内容" align="left">
<template slot-scope="scope">
{{ formatterPrizeContent(scope.row) }}
<template v-if="!isAdd && scope.row.prizeReferType === 2">
<span v-if="scope.row.status == 0" class="dm-tags warning">已删除</span>
<span v-else-if="scope.row.cardStock <= 0" class="dm-tags error">无库存</span>
</template>
</template>
</el-table-column>
<el-table-column prop="prizeName" label="移动" align="left" width="180">
......@@ -143,6 +147,11 @@
<span class="fl fz12 gray" style="margin: 20px 0 0 10px;">建议尺寸:200*200</span>
</div>
</div>
<template v-if="!isAdd && scope.row.prizeReferType == 2">
<!-- 卡券 且不是新增表单 -->
<span v-if="scope.row.card.status == 0" class="dm-tags warning">已删除</span>
<span v-else-if="scope.row.card.couponStock <= 0" class="dm-tags error">无库存</span>
</template>
</template>
</el-table-column>
<el-table-column prop="prizeName" label="奖品设置(已领取)" align="left" width="200">
......@@ -490,7 +499,7 @@ export default {
v.card = { cardName: '', coupCardId: '' };
} else if (v.prizeReferType === 2) {
v.proGift = { mainPic: { imgUrl: '', code: '' } };
v.card = { cardName: v.card.cardName, coupCardId: v.card.coupCardId };
v.card = { cardName: v.card.cardName, coupCardId: v.card.coupCardId, status: v.card.status, couponStock: v.card.couponStock };
}
});
}
......
......@@ -50,7 +50,7 @@
<dm-upload-avatar :model.sync="form.logoImg" label="上传图片" width="80" height="80" tips="请上传高度为85px的PNG透明背景图片" :disabled="isInfo"></dm-upload-avatar>
</el-form-item>
<el-form-item label="选择拼图" prop="puzzleImg" class="width50 is-required">
<dm-upload-avatar width="128" height="170" :limit="{ type: true, width: 510, height: 680 }" :model.sync="form.puzzleImg" label="上传图片" tips="图片尺寸:510px*680px" :disabled="isInfo"></dm-upload-avatar>
<dm-upload-avatar width="128" height="170" :limit="{ type: true, width: 510, height: 680 }" :model.sync="form.puzzleImg" label="上传图片" tips="图片尺寸:510px*680px * 请避免上传分割后出现同样图块的图片" :disabled="isInfo"></dm-upload-avatar>
</el-form-item>
<el-form-item label="预设风格">
<el-radio-group v-model="form.skinType" @change="changeDefaultSkin">
......
......@@ -23,13 +23,24 @@
<h3 class="dm-title__label">奖项设置</h3>
<el-form-item label="首次奖项设置" class="width50">
<el-button @click="showCard('firstStrategy')">{{ firstStrategy.cardName || '卡券选择' }}</el-button>
<template v-if="!isAdd">
<span v-if="firstStrategy.cardStatus == 0" class="dm-tags warning">已删除</span>
<span v-else-if="firstStrategy.cardStock <= 0" class="dm-tags error">无库存</span>
</template>
</el-form-item>
<el-form-item label="首次特殊策略" class="el-form-item__margin-top14">
<el-table tooltipEffect="light" :data="tableList" style="width: 100%" v-loading="tableLoading">
<el-table-column prop="strategyName" label="策略名称" align="left"></el-table-column>
<el-table-column prop="proTitle" label="卡券名称" align="left">
<template slot-scope="scope">
<p>{{ scope.row.proTitle }}</p>
<p>
{{ scope.row.proTitle }}
<template v-if="!isAdd">
<!-- 卡券 且不是新增表单 -->
<span v-if="scope.row.cardStatus == 0" class="dm-tags warning">已删除</span>
<span v-else-if="scope.row.cardStock <= 0" class="dm-tags error">无库存</span>
</template>
</p>
<p class="fz12 gray">{{ scope.row.proSubName }}</p>
</template>
</el-table-column>
......@@ -57,6 +68,10 @@
</el-form-item>
<el-form-item label="后续奖项设置" class="width50">
<el-button @click="showCard('lastStrategy')">{{ lastStrategy.cardName || '卡券选择' }}</el-button>
<template v-if="!isAdd">
<span v-if="lastStrategy.cardStatus == 0" class="dm-tags warning">已删除</span>
<span v-else-if="lastStrategy.cardStock <= 0" class="dm-tags error">无库存</span>
</template>
</el-form-item>
</section>
<!-- 分享设置 -->
......@@ -209,13 +224,17 @@ export default {
if (res.result.firstStrategy) {
this.firstStrategy = {
coupCardId: res.result.firstStrategy.prizeReferId,
cardName: res.result.firstStrategy.proTitle
cardName: res.result.firstStrategy.proTitle,
cardStatus: res.result.firstStrategy.cardStatus,
cardStock: res.result.firstStrategy.cardStock
};
}
if (res.result.lastStrategy) {
this.lastStrategy = {
coupCardId: res.result.lastStrategy.prizeReferId,
cardName: res.result.lastStrategy.proTitle
cardName: res.result.lastStrategy.proTitle,
cardStatus: res.result.lastStrategy.cardStatus,
cardStock: res.result.lastStrategy.cardStock
};
}
}
......
......@@ -62,7 +62,7 @@
<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">
<el-table-column min-width="150" align="left" label="会员信息">
<el-table-column :min-width="150" align="left" label="会员信息">
<template slot-scope="scope">
<div class="sms-table_info">
<img class="table__avatar--40 vertical-middle" :src="filterAvatar(scope.row.thirdImgUrl)" alt="" srcset="" />
......@@ -81,7 +81,7 @@
<el-button v-else type="text" @click="errorCodeShow = true">{{ scope.row.errorMsg }}</el-button>
</template>
</el-table-column>
<el-table-column :min-width="100" align="left" label="上报时间" prop="backTime">
<el-table-column :min-width="120" align="left" label="上报时间" prop="backTime">
<template slot-scope="scope">
<p class="cell-time">
{{ formatDateTimeByType(scope.row.backTime, 'yyyy-MM-dd-HH-mm-ss', true).y }}<br /><span>{{ formatDateTimeByType(scope.row.backTime, 'yyyy-MM-dd-HH-mm-ss', true).h }}</span>
......@@ -90,7 +90,7 @@
</el-table-column>
<el-table-column :show-overflow-tooltip="false" :min-width="150" align="left" label="短信内容" prop="remark">
<template slot-scope="scope">
<el-popover class="item" trigger="hover" width="300" v-if="scope.row.remark.length > 10" :content="scope.row.remark" placement="top-start">
<el-popover :open-delay="300" class="item" trigger="hover" width="300" v-if="scope.row.remark.length > 10" :content="scope.row.remark" placement="top-start">
<span slot="reference" class="ellipsis">{{ scope.row.remark }}</span>
</el-popover>
<span v-else>{{ scope.row.remark }}</span>
......@@ -122,27 +122,27 @@ export default {
messageList: [],
messageLoading: false,
messageHeader: [
{ label: '手机号码', prop: 'telephone', width: '120', align: 'left' },
{ label: '手机号码', prop: 'telephone', minWidth: '100', align: 'left' },
{
label: '发送状态',
prop: 'sendStatus',
width: '80',
minWidth: '80',
align: 'left',
formatter: function(row) {
return row.sendStatus === 0 ? '成功' : row.sendStatus === 1 ? '未发送' : '失败';
}
},
{
label: '回执状态',
prop: 'backStatus',
width: '80',
align: 'left',
formatter: function(row) {
// eslint-disable-next-line
return row.backStatus === 0 && row.backTime === null ? '--' : (row.backStatus ? '接收成功' : '接收失败')
}
}
// {
// label: '回执状态',
// prop: 'backStatus',
// width: '80',
// align: 'left',
// formatter: function(row) {
// // eslint-disable-next-line
// return row.backStatus === 0 && row.backTime === null ? '--' : (row.backStatus ? '接收成功' : '接收失败')
// }
// }
// {
// label: '上报时间',
// prop: 'backTime',
// minWidth: '100',
......
......@@ -74,6 +74,9 @@
</el-table-column>
</el-table>
</section>
<section class="dm-form__wrap">
<tips />
</section>
<div class="btn-wrap_fixed" :class="{ on: asideShow }">
<el-button plain type="primary" @click="submit(1)" v-if="!isInfo" :disabled="canSend">预 览</el-button>
<el-button type="primary" @click="submit(2)" v-if="!isInfo" :disabled="canSend">提 交</el-button>
......@@ -92,6 +95,7 @@ import { checkMessageSendCount } from '@/service/api/messageApi.js';
import { sendRecordSaveService, wechatImageTextEdit, getWechatMarketingDetail, sendRecordPreview } from '@/service/api/wechatApi.js';
// import wxText from '@/components/wxText/wxText'
import wxText from '@/components/wx-text/index.vue';
import tips from './module/tips';
export default {
name: 'add-record',
......@@ -99,7 +103,8 @@ export default {
dmImgText,
dmImgBox,
activitySelect,
'wx-text': wxText
'wx-text': wxText,
tips
},
computed: {
storeParams() {
......@@ -171,7 +176,7 @@ export default {
effectiveStatus: 1 // 不传: 所有状态 1: 有效 0: 失效
};
},
created() {
mounted() {
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
......@@ -180,6 +185,8 @@ export default {
</div>
`
);
},
created() {
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理' }, { name: '微信营销', path: '' }, { name: '发送记录', path: '/wechat' }, { name: '微信群发', path: '' }]);
if (this.imgTextFlag) {
this.wechatImageTextEdit();
......
<template>
<ul class="w-tips">
<li>
<div>Q:微信图文编辑保存时为什么会出现不合法媒体ID的提示?</div>
<div>A:图文在GIC侧编辑保存时,图文中的封面图与原图文(微信侧)中不一致,将会导致无法发送。如需发送,需在GIC侧重新编辑图文,从素材库或本地文件重新上传封面图即可。</div>
</li>
<li>
<div>Q:图文在编辑保存时,校验失败是怎么回事?</div>
<div>A:请检查该公众号图文群发是否有超链接功能,若该公众号图文群发无超链接功能,而图文加入了超链接时则会出现检验失败的情况,此时删除文中的超链接即可。</div>
</li>
<li>
<div>Q:为什么我发送的图文里会有广告?</div>
<div>A:发送图文的公众号在微信原生后台开启了广告配置的功能,从而导致发送图文中存在广告,如需关闭广告,请在微信原生后台-流量主功能出进行配置。</div>
</li>
<li>
<div>Q:为什么我发的图文出现了别人的内容?</div>
<div>A:由于微信平台拥有原创保护监测机制,如果所发送的图文中,图文内容与已申请原创申明的图文内容高度相似时,图文发送后,微信会将图文链接更换为原创内容的链接,请注意保证图文的原创性。</div>
</li>
<li style="margin-top:20px">
<a target="_blank" href="https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&key=1463730026&version=1&lang=zh_CN&platform=2&token=1734190417"><i class="el-icon-question mr5"></i>微信公众平台原创声明及相关功能使用条款</a>
</li>
</ul>
</template>
<style lang="scss" scoped>
ul.w-tips {
li {
margin-bottom: 30px;
&:last-child {
margin-bottom: 0px;
}
div {
line-height: 18px;
&:first-child {
color: #303133;
font-size: 14px;
margin-bottom: 5px;
}
font-size: 13px;
color: #606266;
width: 100%;
word-break: break-all;
// word-wrap: ;
}
}
}
</style>
......@@ -185,14 +185,16 @@ export default {
dmDialogId: ''
};
},
created() {
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理' }, { name: '微信营销', path: '' }, { name: '发送记录', path: '' }]);
mounted() {
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
<i class="el-icon-info"></i>送达人数由微信实时返;阅读人数、分享人数、收藏人数微信侧次日返回,可以查看数据
</div>`
);
},
created() {
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理' }, { name: '微信营销', path: '' }, { name: '发送记录', path: '' }]);
this.sendRecordList();
this.handleIsShowSelf();
},
......
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