Commit eb3e7114 by zhangmeng

智能营销 卡券投放 加入模板消息

parent 521c447a
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/css/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link href=/marketing/static/css/app.1f7757afffa773fd1b31ffc9bca6ade7.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/marketing/static/js/manifest.0a85049e489e85ac5f0a.js></script><script type=text/javascript src=/marketing/static/js/vendor.e0b7daa8af8fb2f5148e.js></script><script type=text/javascript src=/marketing/static/js/app.fcea6fd64e46693e427d.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/css/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link href=/marketing/static/css/app.dba9ab5aa93e4029232b9159cd5ef1fe.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/marketing/static/js/manifest.0a85049e489e85ac5f0a.js></script><script type=text/javascript src=/marketing/static/js/vendor.e0b7daa8af8fb2f5148e.js></script><script type=text/javascript src=/marketing/static/js/app.53311cbfae373a3795a8.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.
......@@ -42239,7 +42239,7 @@
font-size: 14px;
border-radius: 4px; }
.el-button + .el-button {
margin-left: 4px; }
margin-left: 8px; }
.el-button.is-round {
padding: 8px 15px; }
.el-button:hover, .el-button:focus {
......@@ -145,7 +145,7 @@
color:#303133;
font-size:20px;
padding:24px 0;
font-weight:600;
font-weight:500;
// span{
// color:#303133;
// font-size:20px;
......
......@@ -4,6 +4,7 @@ import cardList from '../../views/card/list'
import cardRecord from '../../views/card/record'
import cardRecordSend from '../../views/card/record-send'
import cardRecordGet from '../../views/card/record-get'
import cardRecordCache from '../../views/card/record-cache'
import cardGroupSend from '../../views/card/group-send'
import cardAnalysis from '../../views/card/analysis'
import cardInfo from '../../views/card/card-info'
......@@ -47,6 +48,12 @@ export default {
name: '投放记录',
component: cardRecordSend,
meta: {},
},
{
path: 'cache',
name: '临时领取记录',
component: cardRecordCache,
meta: {},
}
]
},
......
......@@ -74,3 +74,5 @@ export const loadGoodsData = (params) => requests(PREFIX + 'load-goods-data', pa
// 卡券营销--复制卡券
export const copyCardDetailService = (params) => requests(PREFIX + 'copy-card-detail', params);
<template>
<div class="dm-card__item__wrap">
<div class="dm-card__item" :style="{background:item.cardColor}">
<img class="dm-card__item__avatar" :src="item.brandLogo || loadErrorImg" alt="">
<div class="inline-block">
<p class="dm-card__item__title">{{item.cardName}}</p>
<p class="dm-card__item__desc" v-if="item.cardEffectiveMode !== 0">领取后第{{item.startDay+1}}-{{item.limitDay+item.startDay}}</p>
<p class="dm-card__item__desc" v-if="item.cardEffectiveMode === 0">{{formateDateTimeByType(item.beginDate,'yyyy-MM-dd')}}{{formateDateTimeByType(item.endDate,'yyyy-MM-dd')}}</p>
</div>
</div>
<p class="dm-card__item--bottom">
<span>适用{{item.storeMode === 0 ? "所有门店" : (item.storeMode === 1 ? "部分分组" : "部分门店")}}</span>
</p>
</div>
</template>
<script>
import {formateDateTimeByType} from '@/utils'
export default {
name:'item-card',
data(){
return {
formateDateTimeByType,
loadErrorImg:require('../../../assets/img/loaderror.png')
}
},
props:{
item:{
type: Object,
default() {
return {}
}
}
}
}
</script>
<style lang="scss" scoped>
/* card */
.dm-card__item__wrap{
display: inline-block;
position: relative;
width: 298px;
height: 142px;
margin:0 10px;
vertical-align: middle;
border: 1px solid rgba(228,231,237,1);
border-radius: 4px;
}
.dm-card__item {
padding:0 15px;
background: rgba(72,170,3,0.85);
height:106px;
line-height: 106px;
}
.dm-card__item__avatar {
width: 60px;
height: 60px;
border-radius: 50%;
vertical-align: middle;
}
.dm-card__item__title {
vertical-align: middle;
margin-left: 8px;
max-width: 180px;
font-size: 16px;
font-weight: 500;
line-height: 30px;
color: #fff;
overflow: hidden;
text-overflow: ellipsis;
}
.dm-card__item__desc{
vertical-align: middle;
margin-left: 8px;
max-width: 200px;
font-size: 12px;
line-height: 20px;
color: #fff;
overflow: hidden;
text-overflow: ellipsis;
}
.dm-card__item--bottom {
vertical-align: middle;
line-height: 106px;
color: #909399;
font-size: 12px;
line-height: 36px;
padding-left: 15px;
}
</style>
......@@ -9,60 +9,32 @@ export default Vue.component('render-temp', {
}
},
render(h) {
const _this = this;
const autingHtml = <span class="green">审核中</span>;
const customCodesyncHtml = <span class="danger-color">正在上传卡券Code</span>;
const autingFaildHtml = <span class="danger-color">审核失败</span>;
const autingUpdateFaildHtml = <span class="danger-color">更新失败</span>;
const statushtml = <span>
const bind1 = <a title="投放" onClick={this.handler.bind(null,1)}><i class="iconfont icon-daohang-"></i></a>;
const bind2 = <a title="报表" onClick={this.handler.bind(null,2)}><i class="el-icon-tickets"></i></a>;
const bind3 = <a title="编辑" onClick={this.handler.bind(null,3)}><i class="el-icon-edit"></i></a>;
const bind4 = <a title="删除" onClick={this.handler.bind(null,4)}><i class="el-icon-delete"></i></a>;
const bind5 = <a title="详情" onClick={this.handler.bind(null,5)}><i class="el-icon-document"></i></a>;
const bind6 = <a title="复制" onClick={this.handler.bind(null,6)}><i class="iconfont icon-wxcard-copy"></i></a>;
<a title="复制" onClick={_this.handler.bind(null,6)}><i class="iconfont icon-wxcard-copy"></i></a>
<a title="投放" onClick={_this.handler.bind(null,1)}><i class="iconfont icon-daohang-"></i></a>
<a title="报表" onClick={_this.handler.bind(null,2)}><i class="el-icon-tickets"></i></a>
<a title="编辑" onClick={_this.handler.bind(null,3)}><i class="el-icon-edit"></i></a>
<a title="删除" onClick={_this.handler.bind(null,4)}><i class="el-icon-delete"></i></a>
</span>;
const overDateHtml = <span>
<span class="danger">已过期</span>
<a title="复制" onClick={_this.handler.bind(null,6)}><i class="iconfont icon-wxcard-copy"></i></a>
<a title="报表" onClick={_this.handler.bind(null,2)}><i class="el-icon-tickets"></i></a>
<a title="详情" onClick={_this.handler.bind(null,5)}><i class="el-icon-document"></i></a>
<a title="删除" onClick={_this.handler.bind(null,4)}><i class="el-icon-delete"></i></a>
</span>;
const noputonStatushtml = <span>
<a title="复制" onClick={_this.handler.bind(null,6)}><i class="iconfont icon-wxcard-copy"></i></a>
<a title="报表" onClick={_this.handler.bind(null,2)}><i class="el-icon-tickets"></i></a>
<a title="编辑" onClick={_this.handler.bind(null,3)}><i class="el-icon-edit"></i></a>
<a title="删除" onClick={_this.handler.bind(null,4)}><i class="el-icon-delete"></i></a>
</span>;
const statusNostockhtml = <span>
<a title="复制" onClick={_this.handler.bind(null,6)}><i class="iconfont icon-wxcard-copy"></i></a>
<a title="报表" onClick={_this.handler.bind(null,2)}><i class="el-icon-tickets"></i></a>
<a title="编辑" onClick={_this.handler.bind(null,3)}><i class="el-icon-edit"></i></a>
<a title="删除" onClick={_this.handler.bind(null,4)}><i class="el-icon-delete"></i></a>
</span>;
const statusFaildhtml = <span>
<a title="复制" onClick={_this.handler.bind(null,6)}><i class="iconfont icon-wxcard-copy"></i></a>
<a title="编辑" onClick={_this.handler.bind(null,3)}><i class="el-icon-edit"></i></a>
<a title="删除" onClick={_this.handler.bind(null,4)}><i class="el-icon-delete"></i></a>
</span>;
const statushtml = <span>{bind6}{bind1}{bind2}{bind3}{bind4}</span>;
const overDateHtml = <span><span class="danger">已过期</span>{bind6}{bind2}{bind5}{bind4}</span>;
const noputonStatushtml = <span>{bind6}{bind2}{bind3}{bind4}</span>;
const statusNostockhtml = noputonStatushtml;
const statusFaildhtml = <span>{bind6}{bind3}{bind4}</span>;
const _html = (this.item.cardEffectiveMode == 0 && (this.item.endDate < Date.now())) ? overDateHtml : statushtml;
if (this.item.auditingStatus === 0) {
return (<div class="fr">{autingHtml}</div>)
return (<div class="fr"><span class="green">审核中</span></div>)
}else if (this.item.auditingStatus === -1) {
return (<div class="fr">{autingFaildHtml}{statusFaildhtml}</div>)
return (<div class="fr"><span class="danger-color">{this.item.autingFaildMsg || '审核失败'}</span>{statusFaildhtml}</div>)
}else if (this.item.auditingStatus === -2)
return (<div class="fr">{autingUpdateFaildHtml}{_html}</div>)
return (<div class="fr"><span class="danger-color">{this.item.autingFaildMsg || '更新失败'}</span>{_html}</div>)
else if (this.item.useCustomCode == 1 && this.item.customCodeSync == 1)
return (<div class="fr">{customCodesyncHtml}</div>)
return (<div class="fr"><span class="danger-color">正在上传卡券Code</span></div>)
else if (this.item.stock === 0)
return (<div class="fr">{statusNostockhtml}</div>)
else if (this.item.cardLimit && this.item.cardLimit == 1)
return (<div class="fr">{_html}</div>)
else return (<div class="fr">{noputonStatushtml}</div>)
}
})
});
<template>
<el-dialog
title="提示"
:visible.sync="show"
width="30%"
:before-close="close">
<el-select v-model="value" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.label"
:label="item.label"
:value="item.label">
</el-option>
</el-select>
<span slot="footer" class="dialog-footer">
<el-button @click="close">取 消</el-button>
<el-button type="primary" @click="submit">确 定</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
props:{
options:Array,
show:{
type:Boolean,
default:false
}
},
data() {
return {
value:""
}
},
methods:{
close() {
this.$emit('update:show',false)
},
submit() {
if (this.value) {
this.$emit('get-data',this.value);
this.close();
} else {
this.$tips({type:'warning',message:'未选择变量'});
}
}
}
}
</script>
......@@ -10,7 +10,7 @@
<el-option v-for="(item,index) in cardStatusOptions" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
<span class="vertical-middle">领取时间:</span><el-date-picker v-model="dateTime" :clearable="false" @change="search" class="w250" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
<span class="vertical-middle">核销时间:</span><el-date-picker v-model="dateTime2" @change="search" class="w250" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
<span class="vertical-middle">关注时间:</span><el-date-picker v-model="dateTime2" @change="search" class="w250" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</div>
<!-- 列表 -->
<el-table tooltipEffect="light" :data="recordList" style="width: 100%" v-loading="recordLoading" @sort-change="sortList">
......@@ -19,7 +19,7 @@
{{formateDateTimeByType(scope.row.receiveTime,'yyyy-MM-dd-HH-mm')}}
</template>
</el-table-column>
<el-table-column width="135" align="left" prop="writeOffTime" label="核销时间" fixed="left" sortable="custom">
<el-table-column width="135" align="left" prop="writeOffTime" label="关注时间" fixed="left" sortable="custom">
<template slot-scope="scope">
{{scope.row.useTime?formateDateTimeByType(scope.row.useTime,'yyyy-MM-dd-HH-mm'):'--'}}
</template>
......@@ -61,7 +61,7 @@
</el-table-column>
<el-table-column width="100" align="left" prop="receiveName" label="核销来源">
<template slot-scope="scope">
{{scope.row.status === 5 ? (scope.row.checkSource?'手动核销':'订单核销'):'--'}}
{{scope.row.status === 5 ? (scope.row.checkSource === 0 ? '订单核销' : '手动核销') : '--'}}
</template>
</el-table-column>
<el-table-column label="操作" align="left" width="120px" fixed="right">
......@@ -88,7 +88,7 @@ export default {
formateDateTimeByType,
dateTime:[Date.now()-30*24*60*60*1000,Date.now()],
dateTime2:['',''],
cardStatusOptions:[ {value:0,label:'全部'},{value:4,label:'待核销',},{ value:5,label:'已核销'},{ value:6,label:'已过期'},{ value:7,label:'已销毁'}],
cardStatusOptions:[ {value:'',label:'全部卡券状态'},{value:4,label:'待核销',},{ value:5,label:'已核销'},{ value:6,label:'已过期'},{ value:7,label:'已销毁'}],
recordLoading:false,
recordList:[],
listParams:{
......
......@@ -33,7 +33,7 @@
</div>
</label>
</div>
<el-pagination v-show="imgList.length" class="dm-pagination imglib-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="listParams.pageSize" layout="prev, pager, next" :total="total"></el-pagination>
<el-pagination v-show="imgList.length" class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="listParams.pageSize" layout="prev, pager, next" :total="total"></el-pagination>
</article>
</div>
<span slot="footer" class="dialog-footer">
......@@ -296,14 +296,6 @@ export default {
display: inline-block;
vertical-align: middle;
}
.dm-upload{
display: inline-block;
position: relative;
}
.imglib-pagination{
padding-right:20px;
}
.dm-img-item{
position: relative;
width: 168px;
......@@ -332,14 +324,10 @@ export default {
justify-content: left;
align-items: center;
padding-left: 10px;
/deep/ .el-checkbox__label{
p {
text-overflow: ellipsis;
overflow: hidden;
max-width: 130px;
white-space: nowrap;
word-wrap: normal;
vertical-align: middle;
padding-left: 10px;
}
}
&_bottom{
......
......@@ -228,7 +228,7 @@ export default {
}
})
console.log(res);
this.hasReturnCard();
}
});
},
......@@ -338,6 +338,21 @@ export default {
hasMessageInList() {
// console.log(this.list.some(v => (v.comName === 'item-message' && v.item.type === 1)))
return this.list.some(v => (v.comName === 'item-message' && v.item.type === 1));
},
//判断营销列表里是否有卡券 提供给父级使用
hasReturnCard() {
let item = {};
try {
this.list.forEach(v => {
if(v.comName === 'item-card') {
item = v;
throw new Error();
}
});
} catch (e) {
console.log(e)
}
this.$emit('has-card',item);
}
}
}
......
<template>
<div class="dm-card__item__wrap">
<div class="dm-card__item" :style="{background:item.cardColor}">
<img class="dm-card__item__avatar" :src="item.brandLogo || loadErrorImg" alt="">
<div class="inline-block">
<p class="dm-card__item__title">{{item.cardName}}</p>
<p class="dm-card__item__desc" v-if="item.cardEffectiveMode !== 0">领取后第{{item.startDay+1}}-{{item.limitDay+item.startDay}}</p>
<p class="dm-card__item__desc" v-if="item.cardEffectiveMode === 0">{{formateDateTimeByType(item.beginDate,'yyyy-MM-dd')}}{{formateDateTimeByType(item.endDate,'yyyy-MM-dd')}}</p>
</div>
</div>
<p class="dm-card__item--bottom">
<span>适用{{item.storeMode === 0 ? "所有门店" : (item.storeMode === 1 ? "部分分组" : "部分门店")}}</span>
</p>
</div>
</template>
<script>
import {formateDateTimeByType} from '@/utils'
export default {
name:'item-card',
data(){
return {
formateDateTimeByType,
loadErrorImg:require('../../../assets/img/loaderror.png')
}
},
props:{
item:{
type: Object,
default() {
return {}
}
}
}
}
</script>
<style lang="scss" scoped>
/* card */
.dm-card__item__wrap{
display: inline-block;
position: relative;
width: 298px;
height: 142px;
margin:0 10px;
vertical-align: middle;
border: 1px solid rgba(228,231,237,1);
border-radius: 4px;
}
.dm-card__item {
padding:0 15px;
background: rgba(72,170,3,0.85);
height:106px;
line-height: 106px;
}
.dm-card__item__avatar {
width: 60px;
height: 60px;
border-radius: 50%;
vertical-align: middle;
}
.dm-card__item__title {
vertical-align: middle;
margin-left: 8px;
max-width: 180px;
font-size: 16px;
font-weight: 500;
line-height: 30px;
color: #fff;
overflow: hidden;
text-overflow: ellipsis;
}
.dm-card__item__desc{
vertical-align: middle;
margin-left: 8px;
max-width: 200px;
font-size: 12px;
line-height: 20px;
color: #fff;
overflow: hidden;
text-overflow: ellipsis;
}
.dm-card__item--bottom {
vertical-align: middle;
line-height: 106px;
color: #909399;
font-size: 12px;
line-height: 36px;
padding-left: 15px;
}
</style>
<template>
<el-dialog
title="提示"
:visible.sync="show"
width="30%"
:before-close="close">
<el-select v-model="value" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.label"
:label="item.label"
:value="item.label">
</el-option>
</el-select>
<span slot="footer" class="dialog-footer">
<el-button @click="close">取 消</el-button>
<el-button type="primary" @click="submit">确 定</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
props:{
options:Array,
show:{
type:Boolean,
default:false
}
},
data() {
return {
value:""
}
},
methods:{
close() {
this.$emit('update:show',false)
},
submit() {
if (this.value) {
this.$emit('get-data',this.value);
this.close();
} else {
this.$tips({type:'warning',message:'未选择变量'});
}
}
}
}
</script>
......@@ -13,7 +13,7 @@
</el-col>
<el-col :span="8">
<span class="primary-font-color">发送条数:</span>
<span class="regular-font-color">{{messageInfo.sendSuccess}}</span>
<span class="regular-font-color">{{messageInfo.countNum}}</span>
</el-col>
<el-col :span="8">
<span class="primary-font-color">模板名称:</span>
......
......@@ -449,7 +449,6 @@ export default {
}
}
}
}
</script>
......
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