Commit 60dbac60 by chenxin

Merge branch 'feature/m12-微信卡券' into 'master'

Feature/m12 微信卡券

See merge request !125
parents 8b77a776 0c5fdf11
......@@ -3,3 +3,4 @@
/dist/
/node_modules/
/*.js
/src/components/linktools-fulls/*
\ 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.61f227846be3dcd9a162c301df607d3a.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.40.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.13.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.24.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.24.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-new.2.0.65.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.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.20.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 type=text/javascript src=/marketing/static/js/manifest.4595b12679c131925d0d.js></script><script type=text/javascript src=/marketing/static/js/vendor.fef1c3d3b3b586faaee2.js></script><script type=text/javascript src=/marketing/static/js/main.a2ce008183bf0c9a9655.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.58a9e1928b371195d78a5de0576a067d.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.40.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.19.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.24.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.24.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-new.2.0.65.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.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.20.js></script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script src=//web-1251519181.file.myqcloud.com/components/activity-select.1.0.1.js></script><script type=text/javascript src=/marketing/static/js/manifest.0cef2ce98603cd0c9175.js></script><script type=text/javascript src=/marketing/static/js/vendor.fef1c3d3b3b586faaee2.js></script><script type=text/javascript src=/marketing/static/js/main.a38bc9dd2a1132342ec3.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.
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(n,c,o){for(var i,f,u,d=0,s=[];d<n.length;d++)f=n[d],t[f]&&s.push(t[f][0]),t[f]=0;for(i in c)Object.prototype.hasOwnProperty.call(c,i)&&(e[i]=c[i]);for(r&&r(n,c,o);s.length;)s.shift()();if(o)for(d=0;d<o.length;d++)u=a(a.s=o[d]);return u};var n={},t={15:0};function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var r=t[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var n=new Promise(function(n,a){r=t[e]=[n,a]});r[2]=n;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:"message",4:"ewash",5:"scan",6:"ecm",7:"evaluation",8:"activity",9:"cdKey",10:"recharge",11:"msg",12:"calllog"}[e]||e)+"."+{0:"3a371bdd4417df6e422e",1:"13dab37beda20959629e",2:"2bc295c93adcee55a98f",3:"0378b23ea9e2767987cf",4:"ac5092d9b2d7d1a3b93a",5:"d11e9bae507a16a50ac8",6:"1d5dae587ab925184cc9",7:"99e49bc49f2439ac7253",8:"35efeb2ae926b54b4341",9:"1bc2336dbaf1112fbdc8",10:"e5cd16e4f5e1229ea313",11:"00a6edc9657c9e4c34fa",12:"f1c9fa1ccd0d36ae0602"}[e]+".js";var i=setTimeout(f,12e4);function f(){o.onerror=o.onload=null,clearTimeout(i);var r=t[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return o.onerror=o.onload=f,c.appendChild(o),n},a.m=e,a.c=n,a.d=function(e,r,n){a.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},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(n,o,c){for(var i,u,d,f=0,s=[];f<n.length;f++)u=n[f],t[u]&&s.push(t[u][0]),t[u]=0;for(i in o)Object.prototype.hasOwnProperty.call(o,i)&&(e[i]=o[i]);for(r&&r(n,o,c);s.length;)s.shift()();if(c)for(f=0;f<c.length;f++)d=a(a.s=c[f]);return d};var n={},t={15:0};function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var r=t[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var n=new Promise(function(n,a){r=t[e]=[n,a]});r[2]=n;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:"scan",6:"ecm",7:"evaluation",8:"activity",9:"cdKey",10:"recharge",11:"msg",12:"calllog"}[e]||e)+"."+{0:"380ecd619c1a4b5aa7f4",1:"0264c33f4f01117a0edf",2:"1d47f0e373d9a32b6732",3:"4582d2e974560d0b3923",4:"0bf76983dc9eb0dd5a72",5:"be52ce240bddaa308090",6:"69341cd9777b2efe8452",7:"63a1a6d2b30b644fe2b0",8:"262d5730485583a8e9ea",9:"b28ab42e4c850a719a9e",10:"deed87acac924fb81b10",11:"68885a5b2ba02a163454",12:"374fb631de99b469adc8"}[e]+".js";var i=setTimeout(u,12e4);function u(){c.onerror=c.onload=null,clearTimeout(i);var r=t[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return c.onerror=c.onload=u,o.appendChild(c),n},a.m=e,a.c=n,a.d=function(e,r,n){a.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},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
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.
......@@ -23,7 +23,7 @@
<!-- 组件引用cdn -->
<script src="//web-1251519181.file.myqcloud.com/components/header.2.0.40.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.13.js"></script><!-- 卡券选择器 -->
<script src="//web-1251519181.file.myqcloud.com/components/card.2.0.19.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.24.js"></script>
......@@ -36,6 +36,7 @@
<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.20.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/track.1.0.4.js"></script> -->
<script src="//web-1251519181.file.myqcloud.com/components/activity-select.1.0.1.js"></script><!-- 数据对话 -->
</body>
</html>
......@@ -5,11 +5,12 @@
<el-input v-model="listParams.searchParam" class="w200" clearable placeholder="请输入卡券名/备注名" @change="getCardList"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<span class="fz12 gray">{{ limitTips }}{{ total }}张。 </span>
</div>
<div class="fr">
<!-- <div class="fr">
<el-button type="primary" @click="add">新建卡券</el-button>
<el-button @click="refresh">刷新列表</el-button>
</div>
</div> -->
</div>
<div style="font-size:12px;color:#909399;line-height:30px;">* 仅能选择卡券模板投放期限有效的卡券</div>
<el-table tooltipEffect="light" :data="tableList" :height="tableHeight" style="width: 100%" v-loading="loading" @row-click="chooseCard">
<el-table-column :show-overflow-tooltip="false" width="60" align="center" prop="coupCardId">
<template slot-scope="scope">
......@@ -19,12 +20,22 @@
</div>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" :min-width="100" align="left" prop="cardName" label="卡券名称"></el-table-column>
<el-table-column :show-overflow-tooltip="true" :min-width="100" align="left" prop="subName" label="备注名"></el-table-column>
<el-table-column prop="" label="有效期" :min-width="100" :show-overflow-tooltip="false">
<el-table-column :show-overflow-tooltip="true" width="140" align="left" prop="cardName" label="卡券名称">
<template slot-scope="scope">
<p style="line-height:22px;">{{ scope.row.cardName }}</p>
<p style="line-height:20px;color:#909399;font-size:13px;">{{ scope.row.subName }}</p>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="false" min-width="120" align="left" prop="createTime" label="卡券模板投放期限">
<template slot-scope="scope">
<span v-if="scope.row.putEffectiveMode == 0"> 固定日期:{{ formatDateTimeByType(scope.row.putBeginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(scope.row.putEndDate, 'yyyy-MM-dd') }} </span>
<span v-else>长期有效</span>
</template>
</el-table-column>
<el-table-column prop="" label="用户使用有效期" :min-width="100" :show-overflow-tooltip="false">
<template slot-scope="scope">
<div v-if="scope.row.cardEffectiveMode == 0">固定日期:{{ formatDateTimeByType(scope.row.beginDate, 'yyyy-MM-dd') + '至' + formatDateTimeByType(scope.row.endDate, 'yyyy-MM-dd') }}</div>
<div v-if="scope.row.cardEffectiveMode == 1">领取后{{ (scope.row.startDay === 0 ? '当' : scope.row.startDay) + '天,有效天数' + scope.row.limitDay }}</div>
<div v-if="scope.row.cardEffectiveMode == 1">领取后{{ (scope.row.startDay === 0 ? '当' : '第' + scope.row.startDay) + '天,有效天数' + scope.row.limitDay }}</div>
</template>
</el-table-column>
<el-table-column prop="cardLimit" :show-overflow-tooltip="false" label="领取限制" width="90">
......
<template>
<div>
<div class="filter-list">
<el-select v-model="cardType" style="width: 200px;" placeholder="卡券类型" clearable @change="handleChange">
<el-option
v-for="item in cardOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<el-input v-model="cardName" style="width: 200px; margin-left: 20px;" clear placeholder="输入卡券名称" @keyup.native.enter="handleSearch"></el-input>
</div>
<el-table
ref="multipleTable"
:data="cardData"
class="card-table"
tooltip-effect="dark"
style="width: 100%"
@row-click="handleCurrentChangeRow"
>
<el-table-column label width="55">
<template slot-scope="scope">
<el-radio class="radio-style" :label="scope.row.integralMallProId" :value="cardId">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column label="卡券名称" prop="cardName" >
</el-table-column>
<el-table-column prop="proSubName" label="备注名"></el-table-column>
<el-table-column prop="integralCost" label="兑换限制"></el-table-column>
<el-table-column prop="virtualStock" label="库存"></el-table-column>
</el-table>
<div class="pagination" v-if="total>0">
<dm-pagination
@current-change="cardCurrentChange"
:current-page="cardCurrentPage"
small
:page-size="cardPageSize"
layout="prev, pager, next"
:total="total"
></dm-pagination>
</div>
</div>
</template>
<script>
import qs from "qs";
export default {
name: "card-list",
props: {
pname: String,
cardId: String
},
data() {
return {
cardType: null, // 卡券类型
cardOptions: [
{ value: 1, label: '折扣券' },
{ value: 0, label: '抵金券' }
],
cardName: '',
cardCurrentPage: 1,
cardPageSize: 5,
cardLimitType: 1,
cardData: [],
total: 0
};
},
methods: {
// 当某行点击的时候
handleCurrentChangeRow(row) {
this.$nextTick(_ => {
// if (row.integralMallProId == this.radio) {
this.$emit('pass-id', row);
// }
});
},
getCardList() {
var param = {
currentPage: this.cardCurrentPage,
pageSize: this.cardPageSize,
requestProject: this.pname,
cardType: this.cardType,
proName: this.cardName
};
this.axios
.get(this.baseUrl + "/api-integral-mall/page-cards-plug", {params: param})
.then(res => {
const resData = res.data;
if (resData.errorCode == 0) {
if (!!resData.result) {
if (!!resData.result.rows) {
this.cardData = resData.result.rows;
} else {
this.cardData = [];
}
this.total = resData.result.total;
}
} else {
this.$message.error({ duration: 1000, message: resData.message });
}
})
.catch(error => {
this.$message.error({
duration: 10000,
message: error.message
});
});
},
// 当前切换分页
cardCurrentChange(val) {
this.cardCurrentPage = val;
this.getCardList();
},
handleChange(val) {
this.cardCurrentPage = 1;
this.getCardList();
},
handleSearch() {
this.cardCurrentPage = 1;
this.getCardList();
}
},
created() {
const host = window.location.origin;
this.baseUrl = host.indexOf('localhost') > -1 ? 'http://gicdev.demogic.com' : host;
},
mounted() {
this.getCardList();
}
};
</script>
<style scoped>
.filter-list {
margin-bottom: 10px;
}
.pagination {
text-align: right;
margin-top: 10px;
}
</style>
<template>
<div class="gift-list">
<div class="links-tools-row">
<el-select v-model="giftVal" style="width: 200px;" placeholder="礼品类型" clearable @change="handleChange">
<el-option
v-for="item in giftOptions"
:key="item.integralMallCategoryId"
:label="item.categoryName"
:value="item.integralMallCategoryId"
></el-option>
</el-select>
<el-input v-model="giftName" style="width: 200px; margin-left: 20px;" placeholder="输入礼品名称" @keyup.native.enter="handleSearch"></el-input>
</div>
<div class="goods-link-content">
<ul class="goods-link-list">
<li
class="goods-link-item"
v-for="(item, index) in goodsList"
:key="index"
:class="activeIndex == index ? 'good-highlight' : ''"
@click="selectGoodLinkItem(item, index)"
>
<img :src="item.mainImageUrl" class="img" alt="商品图片">
<div class="inline-block goods-message">
<p class="limit-2 pro-name">{{item.proName}}</p>
<p class="gray-color pro-code pro-name">所需积分:{{item.integralCost}}</p>
<p class="pro-price pro-name">所需现金:{{item.cashCost}}</p>
</div>
</li>
</ul>
</div>
<div class="links-tools-page" v-if="total > 0">
<dm-pagination
@current-change="handleChangePage"
:current-page="currentPage"
:page-size="pageSize"
layout="prev, pager, next"
:total="total"
></dm-pagination>
</div>
</div>
</template>
<script>
import qs from "qs";
export default {
name: "gift-list",
props: {
pname: String,
giftId: String
},
data() {
return {
currentPage: 1,
activeIndex: -1,
pageSize: 6,
total: 0,
giftVal: null,
giftOptions: [],
goodsList: [],
giftName: ""
};
},
created() {
const host = window.location.origin;
this.baseUrl = host.indexOf('localhost') > -1 ? 'http://gicdev.demogic.com' : host;
},
methods: {
// 分类
getGiftList() {
this.axios
.get(`${this.baseUrl}/api-integral-mall/load-category?requestProject=gic-web`)
.then(res => {
const resData = res.data;
if (resData.errorCode === 0) {
if (!!resData.result && resData.result.length) {
this.giftOptions = resData.result;
}
}
});
},
// 分页换页
handleChangePage(val) {
this.currentPage = val;
this.getData();
},
handleChange() {
this.currentPage = 1;
this.getData();
},
// 分页数据 integralCost积分费用 cashCost现金费用 proName
getData() {
const params = {
requestProject: 'gic-web',
currentPage: this.currentPage,
pageSize: this.pageSize,
category: this.giftVal,
giftName: this.giftName,
changeType: -1,
releaseType: -1,
showStatus: 1,
porHot: -1
};
this.axios.post(`${this.baseUrl}/api-integral-mall/page-gift`, qs.stringify(params))
.then(res => {
const data = res.data;
if (data.errorCode == 0) {
if (!!data.result && data.result.rows) {
this.goodsList = data.result.rows;
this.goodsList.map((el, index) => {
if (el.integralMallProId == this.giftId) {
this.selectGoodLinkItem(el, index);
}
})
}
this.total = data.result.total || 0;
}
});
},
selectGoodLinkItem(item, i) {
this.activeIndex = i;
this.$emit('pass-gift', item);
},
handleSearch() {
this.currentPage = 1;
this.getData();
}
},
mounted() {
this.getGiftList();
this.getData();
}
};
</script>
<style scoped>
.links-tools-row {
margin-bottom: 10px;
}
.links-tools-row .goods-link-item {
display: inline-block;
vertical-align: middle;
width: 307px;
padding: 8px;
margin-right: 7px;
margin-bottom: 10px;
border: 1px solid #dcdfe6;
border-radius: 4px;
box-sizing: border-box;
}
.links-tools-row .goods-link-item .img{
display: inline-block;
vertical-align: middle;
width: 80px;
height: 80px;
}
.links-tools-page {
text-align: right;
}
.links-tools-row .goods-link-item:hover {
cursor: pointer;
border-color: #1890ff;
}
.links-tools-row .goods-link-item .goods-message {
margin-left: 10px;
padding: 5px;
width: 198px;
box-sizing: border-box;
font-size: 12px;
}
.links-tools-row .good-highlight {
border-color: #1890ff;
}
.goods-link-item .goods-message .pro-name{
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
margin: 8px 0;
}
</style>
<template>
<div class="plug-sg">
<el-popover popper-class="plug-sg__popover" placement="bottom" trigger="click" v-model="treeVis">
<el-input slot="reference" suffix-icon="el-icon-arrow-down" v-model="ategory" placeholder="所有分类"></el-input>
<el-tree
class="plug-sg__tree"
ref="tree"
:default-expand-all="true"
node-key="mallProTagId"
:data="treeData"
:props="defaultProps"
:highlight-current="true"
:current-node-key="currentGoodId"
@node-click="handleNodeClick">
</el-tree>
<div class="good-tree-btn">
<el-button @click.prevent.stop="hideTree" type="text" size="small" style="color:#303133">取消</el-button>
<el-button @click.prevent.stop="confirmBtn" type="text" size="small">确定</el-button>
</div>
</el-popover>
</div>
</template>
<script>
export default {
name:'goods-tree',
props:{
model:{
type:Object,
default(){
return {}
},
},
width:{
type:String,
default:'300'
},
treeData: Array,
currentGoodId: String,
},
data() {
return {
treeVis: false,
ategory: '',
defaultProps: {
children: 'childrenList',
label: 'tagName'
}
}
},
methods:{
handleNodeClick(data) {
this.mallData = data;
this.ategory = data.tagName;
},
hideTree() {
this.treeVis = false;
},
confirmBtn() {
this.treeVis = false;
},
getRewriteData(treeData) {
treeData.map(el => {
if (el.mallProTagId == this.currentGoodId) {
this.treeVis = true;
this.handleNodeClick(el);
} else if (Array.isArray(el.childrenList)) {
this.getRewriteData(el.childrenList);
}
})
}
},
watch: {
treeVis(newval) {
if (!newval) {
if (this.mallData) {
this.$emit('pass-mall', this.mallData);
}
}
},
treeData(treeData) {
if (this.currentGoodId && Array.isArray(treeData)) {
this.getRewriteData(treeData);
}
}
}
}
</script>
<style lang="scss">
.plug-sg {
display: inline-block;
width: 200px;
&__popover{
padding:10px 0 0 0;
}
&__btn{
height: 36px;
padding: 0 10px;
border-top:1px solid #ebeef5;
line-height: 34px;
text-align:right;
&--cancel {
color: #606266;
}
}
&__tree {
height: 260px;
width: 200px;
overflow-y: auto;
.el-tree-node__label {
text-overflow: ellipsis;
display: inline-block;
white-space: nowrap;
width: 100%;
overflow: hidden;
}
&::-webkit-scrollbar {
width: 0px;
height: 0px;
}
}
}
.good-tree-btn {
float: right;
margin-right: 10px;
}
</style>
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -177,7 +177,8 @@ export default {
html += `<h4 style="font-weight: normal; margin: 0;font-size: 18px;line-height: 28px;">${cardticket.cardName}</h4>`;
if (cardticket.cardEffectiveMode) {
html += `<p style="font-size: 12px; color:white;">领取后${cardticket.startDay} - ${cardticket.startDay + cardticket.limitDay}天</p>`;
// 领取后{{ (cardticket.startDay === 0 ? '当' : '第' + cardticket.startDay) + '天,有效天数' + cardticket.limitDay }}天
html += `<p style="font-size: 12px; color:white;">领取后${ (cardticket.startDay === 0 ? '当' : '第' + cardticket.startDay) + '天,有效天数' + cardticket.limitDay }天</p>`;
} else {
html += `<p style="font-size: 12px; color:white;">${formatDateTimeByType(cardticket.beginDate, 'yyyy-MM-dd')}${formatDateTimeByType(cardticket.endDate, 'yyyy-MM-dd')}</p>`;
}
......
......@@ -13,7 +13,8 @@ const state = {
breadcrumb: [],
layoutTips: '',
isShowSelf: false, // 展示是否显示 '仅看本人' btn 在app.vue调用 每次刷新都会获取
openFlag: false // 列表是否显示创建人
openFlag: false, // 列表是否显示创建人
appletEnable: false // 小程序是否可用
};
// getters
......@@ -54,6 +55,10 @@ const actions = {
// mutations
const mutations = {
// 更新小程序是否可用
updateAppletEnable(state, val) {
state.appletEnable = !!val;
},
// 更新是否限流
updateLimit(state, val) {
state.isLimit = !!val;
......
......@@ -332,3 +332,39 @@ export const spiltStr = html => {
.join('<br>');
return text;
};
// 小程序版本过低警告
export const appletUnableAlert = () => {
Vue.prototype
.$confirm("当前会员小程序版本过低,请联系达摩运营提审并发布最新版小程序后再次尝试。造成不便,敬请谅解。<div class='mt10'><a href='https://notes.dingtalk.com/p/dy0mVPReOv9yWz89/docs/dy0mVkBMjvxZMG89' target='_blank'>达摩GIC卡券模块更新说明</a></div>", '提示', {
cancelButtonText: '确定',
showConfirmButton: false,
dangerouslyUseHTMLString: true
// type: 'warning'
})
.then(() => {})
.catch(() => {});
};
/**
* 将指定的时间转换为目标要求的毫秒值
* @param {*} str 可以转换为时间格式 不传默认设置当前时间
* @param {Number} type 将传入的str的时分秒转为指定要求 1.(00:00:00) 2.(23:59:59) 不传不设置
* @return {string} 毫秒
*/
export const getTimesByReq = (str, type = 1) => {
const d = str ? new Date(str) : new Date();
if (type == 1) {
d.setHours(0);
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);
}
if (type == 2) {
d.setHours(23);
d.setMinutes(59);
d.setSeconds(59);
d.setMilliseconds(999);
}
return d.getTime();
};
import { requests } from '@/service/api/index';
import globalConfig from '@/config/index';
import Vue from 'vue';
import store from '@/store/index';
export default config => {
......@@ -7,11 +8,15 @@ export default 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不能
createApp();
fullLoading.close();
} catch (error) {
// 未登录
window.location.href = globalConfig.api + 'gic-web/';
......
......@@ -18,7 +18,7 @@
<el-input class="w250" disabled v-model="form.sceneSettingName"></el-input>
</el-form-item>
<el-form-item label="数据对话">
<activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></activity-select>
<dm-activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></dm-activity-select>
</el-form-item>
</div>
<div class="dm-form__wrap">
......@@ -50,12 +50,13 @@
<i class="iconfont icon-xinxixianshi pl5 gray"></i>
</el-tooltip>
</el-radio>
<el-radio v-if="cardInfo.cardLimit == 1" v-model="form.noticeType" :label="1" :disabled="!isEditTemplate || isInfo"
<!-- 不再需要 -->
<!-- <el-radio v-if="cardInfo.cardLimit == 1" v-model="form.noticeType" :label="1" :disabled="!isEditTemplate || isInfo"
>微信群发接口
<el-tooltip placement="top-start" content="建议大规模发券、智能营销定时计划使用,占用每个会员每月4次的营销次数。">
<i class="iconfont icon-xinxixianshi pl5 gray"></i>
</el-tooltip>
</el-radio>
</el-radio> -->
<el-radio v-model="form.noticeType" :label="2" :disabled="!isEditTemplate || isInfo || form.templateUseEnable === 0"
>微信模板消息
<el-tooltip placement="top-start">
......@@ -146,7 +147,6 @@
</el-form>
</template>
<script>
import activitySelect from '@/components/activity-select/index.vue';
import { checkPutonMemberIds, saveUpdatePutonCard, getCardDetail, getCardPutonDetail } from '@/service/api/cardApi.js';
import { listTemplateVariables } from '@/service/api/msgApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
......@@ -156,8 +156,7 @@ export default {
name: 'card-group',
components: {
'item-card': itemCard,
'var-dialog': varDialog,
activitySelect
'var-dialog': varDialog
},
data() {
return {
......@@ -292,6 +291,7 @@ export default {
/** '0-不通知 1-微信对话框 2-模板消息' **/
this.form.noticeType = form.noticeType || 0;
this.form.noticeType = this.form.noticeType == 1 ? 0 : this.form.noticeType; // 历史数据为1的处理为不通知
// 会员设置回显
if (this.form.memberType === 0) {
this.useId = res.result.searchId;
......
......@@ -14,14 +14,14 @@
<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>
<el-button class="fr" type="primary" @click="addCard">新增卡券</el-button>
</div>
<ul class="clearfix" element-loading-text="拼命加载中">
<card-item @adjust-stock="preAdjustStock" :item="v" v-for="(v, i) in tableList" :key="i" @delete-card="delData"></card-item>
</ul>
<div class="text-center" v-if="tableList.length === 0">
<img class="block block-center pt100" width="60" height="60" src="../../assets/img/no-data_icon.png" alt="" />
<el-button class="block block-center mt10" type="text" @click="$router.push('/card/add')">新增卡券</el-button>
<el-button class="block block-center mt10" type="text" @click="addCard">新增卡券</el-button>
</div>
<adjust-stock :show.sync="adjustStock" :totalCount="currentCard.couponStock" :coupCardId="currentCard.coupCardId" @refresh="delayRefresh"></adjust-stock>
<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>
......@@ -32,6 +32,7 @@ import { cardPageList, deleteCard } from '@/service/api/cardApi.js';
import adjustStock from './partials/adjust-Stock';
import cardItem from './partials/card-item';
import tableMethods from '@/mixins/tableMethods.js';
import { appletUnableAlert } from '@/utils/index.js';
export default {
name: 'card-list',
mixins: [tableMethods],
......@@ -65,11 +66,28 @@ export default {
this.getTableList();
this.$store.commit('mutations_breadcrumb', [{ 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>
由于微信侧对卡券业务的调整,2021年1月5日0点起,达摩GIC将从原先的微信卡券切换至GIC卡券,主体功能保持不变。届时与微信相关的微信卡包将不再支持,敬请谅解。
</div>
`
);
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips', '');
},
methods: {
//编辑库存 前置
preAdjustStock(val) {
this.currentCard = val;
this.adjustStock = true;
if (!this.$store.state.marketing.appletEnable) {
appletUnableAlert();
} else {
this.currentCard = val;
this.adjustStock = true;
}
},
//修改库存后台异步 所以这边延迟刷新列表
delayRefresh(val) {
......@@ -91,6 +109,13 @@ export default {
}
this.loading = false;
},
addCard() {
if (!this.$store.state.marketing.appletEnable) {
appletUnableAlert();
} else {
this.$router.push('/card/add');
}
},
delData(val) {
this.$confirm('是否删除该卡券?', '提示', {
confirmButtonText: '确定',
......
......@@ -16,11 +16,11 @@
<el-date-picker v-if="ruleForm.effectiveMode" class="w250 mt10" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions"></el-date-picker>
</el-form-item>
<el-form-item label="数据对话">
<activity-select v-if="!ruleForm.marketingActivityId" :actId.sync="ruleForm.marketingActivityId" :readOnly="isEdit || isInfo"></activity-select>
<activity-select v-else ref="actSelect" :actId.sync="ruleForm.marketingActivityId" :readOnly="isInfo"></activity-select>
<!-- 只能新增不能改 -->
<dm-activity-select :actId.sync="ruleForm.marketingActivityId" :readOnly="isInfo || isEdit"></dm-activity-select>
</el-form-item>
<el-form-item prop="cardIds" label="新增卡券">
<el-button @click="showCardDialog = true">添加卡券</el-button>
<div><el-button @click="showCardDialog = true">添加卡券</el-button></div>
<el-table v-if="ruleForm.cardIds" class="mt20" :data="tableData" style="width: 100%">
<el-table-column min-width="120" align="left" prop="cardName" label="卡券名称">
<template slot-scope="scope">
......@@ -28,9 +28,15 @@
<p class="fz13 gray" style="line-height:20px;">{{ scope.row.subName }}</p>
</template>
</el-table-column>
<el-table-column min-width="120" align="left" label="有效期">
<el-table-column :show-overflow-tooltip="false" min-width="140" align="left" prop="createTime" label="卡券模板投放期限">
<template slot-scope="scope">
<span v-if="scope.row.cardEffectiveMode !== 0">领取后第{{ scope.row.startDay + 1 }}-{{ scope.row.limitDay + scope.row.startDay }}</span>
<span v-if="scope.row.putEffectiveMode == 0"> 固定日期:{{ formatDateTimeByType(scope.row.putBeginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(scope.row.putEndDate, 'yyyy-MM-dd') }} </span>
<span v-else>长期有效</span>
</template>
</el-table-column>
<el-table-column min-width="120" align="left" label="用户使用有效期">
<template slot-scope="scope">
<span v-if="scope.row.cardEffectiveMode !== 0">领取后{{ (scope.row.startDay === 0 ? '当' : '第' + scope.row.startDay) + '天,有效天数' + scope.row.limitDay }}</span>
<span v-if="scope.row.cardEffectiveMode === 0">{{ formatDateTimeByType(scope.row.beginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(scope.row.endDate, 'yyyy-MM-dd') }}</span>
</template>
</el-table-column>
......@@ -55,17 +61,24 @@
</template>
</el-table-column>
</el-table>
<div>
<ul class="gray fz12 mt10" style="line-height:18px;">
<li>未到卡券模板投放期限 —— 不显示</li>
<li>超过卡券模板投放期限 —— 不显示</li>
<li>超过用户领取限制 —— 已领取</li>
<li>卡券库存为0 —— 已领完</li>
</ul>
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="saveForm">{{ isAdd ? '新增' : '保存' }}</el-button>
</el-form-item>
</el-form>
<vue-gic-card :showCardDialog.sync="showCardDialog" @selectCard="selectCard" :cardLimit="-1" :cardType="null"></vue-gic-card>
<vue-gic-card :type="1" :showCardDialog.sync="showCardDialog" @selectCard="selectCard" :cardLimit="-1" :cardType="null"></vue-gic-card>
</div>
</template>
<script>
import activitySelect from '@/components/activity-select/index.vue';
import { saveCoupPackage, coupPackageDetail, getCoupListInfo } from '@/service/api/cardApi.js';
import { sceneSettingList } from '@/service/api/wechatApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
......@@ -108,9 +121,6 @@ export default {
isEdit: this.$route.meta.type === 'edit'
};
},
components: {
activitySelect
},
methods: {
formatDateTimeByType,
del({ coupCardId }) {
......
......@@ -2,7 +2,7 @@
<section class="dm-wrap" v-loading="loading">
<div class="pb22 clearfix">
<el-date-picker class="w400" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="refresh"></el-date-picker>
<activity-select class="vertical-middle w150 mr5" :actId.sync="listParams.marketingActivityId" onlySelect @actUpdate="refresh"></activity-select>
<dm-activity-select class="vertical-middle w150 mr5" width="150" :actId.sync="listParams.marketingActivityId" onlySelect @actUpdate="refresh"></dm-activity-select>
<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-button class="fr" type="primary" @click="$router.push('/card/merge/add')">新建卡券包</el-button>
</div>
......@@ -43,7 +43,6 @@
</section>
</template>
<script>
import activitySelect from '@/components/activity-select/index.vue';
import { pageCoupPackage, deleteCoupPackage } from '@/service/api/cardApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
import talbeMethods from '@/mixins/tableMethods.js';
......@@ -74,9 +73,6 @@ export default {
params: {} // 传递的参数
};
},
components: {
activitySelect
},
created() {
this.getTableList();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券包', path: '' }, { name: '卡券包列表', path: '' }]); // eslint-disable-line
......
......@@ -3,7 +3,6 @@
<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-input v-model="listParams.receiveCode" class="w300" placeholder="请输入投放渠道" clearable @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input> -->
<!-- <activity-select class="vertical-middle w150 mr5" :actId.sync="listParams.marketingActivityId" onlySelect @actUpdate="refresh"></activity-select> -->
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%">
<el-table-column :show-overflow-tooltip="true" min-width="100" align="left" prop="receiveTime" label="领取时间">
......@@ -36,7 +35,6 @@
</section>
</template>
<script>
import activitySelect from '@/components/activity-select/index.vue';
import { pageCoupPackageLog } from '@/service/api/cardApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
import talbeMethods from '@/mixins/tableMethods.js';
......@@ -66,9 +64,6 @@ export default {
params: {} // 传递的参数
};
},
components: {
activitySelect
},
created() {
this.getTableList();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券包', path: '' }, { name: '卡券包领取记录', path: '' }]); // eslint-disable-line
......
......@@ -28,9 +28,15 @@
</div>
<div class="card-item__detail">
<p class="ellipsis-100">
有效期:<span v-if="item.cardEffectiveMode !== 0">领取后第{{ item.startDay + 1 }}-{{ item.limitDay + item.startDay }}</span>
使用有效期:<span v-if="item.cardEffectiveMode !== 0">领取后{{ (item.startDay === 0 ? '当' : '第' + item.startDay) + '天,有效天数' + item.limitDay }}</span>
<span v-if="item.cardEffectiveMode === 0">{{ formatDateTimeByType(item.beginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(item.endDate, 'yyyy-MM-dd') }}</span>
</p>
<p>
模板投放期限:
<!-- putEffectiveMode 0:固定日期,1:长期 -->
<span v-if="item.putEffectiveMode == 0">{{ formatDateTimeByType(item.putBeginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(item.putEndDate, 'yyyy-MM-dd') }}</span>
<span v-else>长期有效</span>
</p>
<p class="ellipsis-100">
使用条件:<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>
......@@ -64,7 +70,7 @@
<script>
import renderTemp from './status-render.js';
import { formatDateTimeByType } from '@/utils/index.js';
import { formatDateTimeByType, appletUnableAlert } from '@/utils/index.js';
export default {
props: {
item: {
......@@ -95,6 +101,11 @@ export default {
* 1 投放 2 报表 3 编辑 4 删除 5 详情 6复制 7领取记录
*/
handler(val) {
// 若小程序版本不支持 不支持 卡券新建编辑复制 修改库存
if ((val == 3 || val == 6) && !this.$store.state.marketing.appletEnable) {
appletUnableAlert();
return;
}
switch (val) {
case 1:
this.$router.push({
......@@ -193,7 +204,7 @@ export default {
line-height: 1.8em;
span {
font-size: 13px;
color: #999;
color: #606266;
}
}
}
......
......@@ -4,7 +4,7 @@
<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">领取后{{ (item.startDay === 0 ? '当' : '第' + item.startDay) + '天,有效天数' + item.limitDay }}</p>
<p class="dm-card__item__desc" v-if="item.cardEffectiveMode === 0">{{ formatDateTimeByType(item.beginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(item.endDate, 'yyyy-MM-dd') }}</p>
</div>
</div>
......
<template>
<el-dialog title="选择卡券" :visible.sync="show" width="800px" :before-close="close">
<el-dialog title="选择卡券" :visible.sync="show" width="1000px" :before-close="close">
<div class="pb10 clearfix">
<div class="fl">
<el-input v-model="listParams.searchParam" class="w200" placeholder="请输入卡券名/备注名" clearable @change="cardPageList"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<!-- 没有卡券类型的切换 -->
<span class="fz12 gray">领取限制>1的卡券不支持选择,系统已过滤,符合条件共{{ total }}张。</span>
</div>
<div class="fr">
<!-- <div class="fr">
<el-button type="primary" @click="add">新建卡券</el-button>
<el-button @click="refresh">刷新列表</el-button>
</div>
</div> -->
</div>
<div style="font-size:12px;color:#909399;line-height:30px;">* 仅能选择卡券模板投放期限有效的卡券</div>
<el-table tooltipEffect="light" ref="multipleTable" :data="tableList" style="width: 100%;cursor:pointer;" @row-click="rowClick" v-loading="loading" @selection-change="handleSelectionChange">
<el-table-column type="selection" align="center" label="选择"></el-table-column>
<el-table-column :show-overflow-tooltip="true" :min-width="100" align="left" prop="cardName" label="卡券名称"></el-table-column>
<el-table-column :show-overflow-tooltip="true" :min-width="100" align="left" prop="subName" label="备注名"></el-table-column>
<el-table-column prop="" label="有效期" :min-width="100" :show-overflow-tooltip="false">
<el-table-column :show-overflow-tooltip="true" width="140" align="left" prop="cardName" label="卡券名称">
<template slot-scope="scope">
<p style="line-height:22px;">{{ scope.row.cardName }}</p>
<p style="line-height:20px;color:#909399;font-size:13px;">{{ scope.row.subName }}</p>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="false" min-width="120" align="left" prop="createTime" label="卡券模板投放期限">
<template slot-scope="scope">
<span v-if="scope.row.putEffectiveMode == 0"> 固定日期:{{ formatDateTimeByType(scope.row.putBeginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(scope.row.putEndDate, 'yyyy-MM-dd') }} </span>
<span v-else>长期有效</span>
</template>
</el-table-column>
<el-table-column prop="" label="用户使用有效期" :min-width="120" :show-overflow-tooltip="false">
<template slot-scope="scope">
<div v-if="scope.row.cardEffectiveMode == 0">固定日期:{{ formatDateTimeByType(scope.row.beginDate, 'yyyy-MM-dd') + '至' + formatDateTimeByType(scope.row.endDate, 'yyyy-MM-dd') }}</div>
<div v-if="scope.row.cardEffectiveMode == 1">领取后{{ (scope.row.startDay === 0 ? '当' : scope.row.startDay) + '天,有效天数' + scope.row.limitDay }}</div>
<div v-if="scope.row.cardEffectiveMode == 1">领取后{{ (scope.row.startDay === 0 ? '当' : '第' + scope.row.startDay) + '天,有效天数' + scope.row.limitDay }}</div>
</template>
</el-table-column>
<el-table-column prop="cardLimit" :show-overflow-tooltip="false" label="领取限制" width="90">
......
......@@ -10,13 +10,17 @@ export default Vue.component('render-temp', {
},
render(h) {
const canEdit = this.item.canEdit !== false; // 只有canEdit === false 才证明不能使用 没有权限仅可以详情/报表
const bind1 = canEdit ? (
<a title="投放" onClick={this.handler.bind(null, 1)}>
<i class="iconfont icon-daohang-" />
</a>
) : (
''
);
// 当前卡券是否 是长期有效||在投放有效期内
// putEffectiveMode 0:固定日期,1:长期
const canGroupSend = this.item.putEffectiveMode == 1 ? true : new Date() > new Date(this.item.putBeginDate) && new Date() < new Date(this.item.putEndDate);
const bind1 =
canEdit && canGroupSend ? (
<a title="投放" onClick={this.handler.bind(null, 1)}>
<i class="iconfont icon-daohang-" />
</a>
) : (
''
);
const bind2 = (
<a title="报表" onClick={this.handler.bind(null, 2)}>
<i class="el-icon-tickets" />
......
......@@ -183,6 +183,7 @@ export default {
mounted() {
this.getCouponDateLimit();
if (this.$route.query.coupCardId) {
this.listParams.allCouponFlag = 0;
this.listParams.coupCardId = this.$route.query.coupCardId;
this.$refs.cdf.getCardDetail(this.listParams.coupCardId);
} else {
......
......@@ -27,6 +27,10 @@
<template slot-scope="scope">
<div v-if="scope.row.putonStatus === 2"><span class="dm-status--primary--flash"></span><span>正在发送</span></div>
<span v-else :class="'dm-status--' + filterStatus(scope.row.putonStatus).type">{{ filterStatus(scope.row.putonStatus).label }}</span>
<el-tooltip v-if="scope.row.putonStatus === 6" :open-delay="300" class="item" effect="dark">
<div slot="content" style="max-width:300px">{{ scope.row.remark || '--' }}</div>
<i class="el-icon-warning" style="color:#f56c6c;cursor:pointer;margin-left:3px;"></i>
</el-tooltip>
<div v-if="scope.row.putonStatus === 1">
<time-counts class="primary-color fz12" :defaultVal="scope.row.putonTime" :autoStart="true"></time-counts>
</div>
......@@ -169,8 +173,10 @@ export default {
case 5:
result = { label: '库存不足', type: 'info' };
break;
case 6:
result = { label: '投放错误', type: 'error' };
break;
default:
result = { label: '投放错误', type: 'danger' };
break;
}
return result;
......
......@@ -5,7 +5,7 @@
<dm-input :disabled="!canEdit" class="w400" v-model="ruleForm.cdkeyName" placeholder="请输入兑换码名称" :byteType="1" :maxlength="24"></dm-input>
</el-form-item>
<el-form-item label="数据对话" prop="marketingActivityId">
<activity-select class="activity" :actId.sync="ruleForm.marketingActivityId" :readOnly="!canEdit"></activity-select>
<dm-activity-select class="activity" :actId.sync="ruleForm.marketingActivityId" :readOnly="!canEdit"></dm-activity-select>
</el-form-item>
<el-form-item prop="dateTime" label="有效期">
<el-date-picker :default-time="['00:00:00', '23:59:59']" :disabled="!canEdit" class="w400" v-model="dateTime" type="datetimerange" :picker-options="pickerOptions" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
......@@ -79,7 +79,6 @@
import axios from 'axios';
import file from '@/components/upload/file';
import { formatDateTimeByType } from '@/utils/index.js';
import activitySelect from '@/components/activity-select/index.vue';
import { cdkeyCheck, cdkeyPlanSave, cdkeyPlanEdit, cdkeyFailExport, cdkeyExport } from '@/service/api/cdKeyApi.js';
import { getCardDetail } from '@/service/api/cardApi.js';
import { _debounce } from '@/utils/index';
......@@ -198,7 +197,6 @@ export default {
};
},
components: {
activitySelect,
file
},
computed: {
......
import { _debounce } from '@/utils/index';
import { getEcmInfo, saveEcmInfo } from '@/service/api/ecmApi.js';
import activitySelect from '@/components/activity-select/index.vue';
import { listTemplateVariables } from '@/service/api/msgApi.js';
import { klflStrategy } from '@/service/api/gameApi.js'; // 会员等级列表接口
import xxSysp_mix from '@/mixins/selector.js'; // 商品选择器方法mixins
......@@ -133,8 +132,7 @@ export default {
components: {
'marketing-event': marketingEvent,
'item-card': itemCard,
'var-dialog': varDialog,
activitySelect
'var-dialog': varDialog
},
watch: {
checked(val) {
......
......@@ -57,7 +57,7 @@
<el-input class="w400" disabled v-model="form.sceneSettingName"></el-input>
</el-form-item>
<el-form-item label="数据对话">
<activity-select :actId.sync="form.marketingActivityId" :readOnly="!isAdd"></activity-select>
<dm-activity-select :actId.sync="form.marketingActivityId" :readOnly="!isAdd"></dm-activity-select>
</el-form-item>
</section>
<!-- 消费触发配置 -->
......
......@@ -7,7 +7,7 @@
<el-select class="dm-select" clearable v-model="listParams.marketingType" placeholder="选择营销方式" @change="search">
<el-option v-for="(v, i) in marketingTypeOptions" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select>
<activity-select class="vertical-middle w150 mr5" :actId.sync="listParams.marketingActivityId" onlySelect @actUpdate="search"></activity-select>
<dm-activity-select class="vertical-middle w150 mr5" onlySelect width="150" :actId.sync="listParams.marketingActivityId" @actUpdate="search"></dm-activity-select>
<el-select class="dm-select" clearable v-model="listParams.onlineStatus" placeholder="选择上线状态" @change="search">
<el-option v-for="(v, i) in onlineOptions" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select>
......
......@@ -8,13 +8,14 @@
<el-tooltip open-delay="200" effect="dark" :content="item.coupCardId" placement="top-start">
<p class="dm-card__item__title">{{ item.cardName }}</p>
</el-tooltip>
<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">领取后{{ (item.startDay === 0 ? '当' : '第' + item.startDay) + '天,有效天数' + item.limitDay }}</p>
<p class="dm-card__item__desc" v-if="item.cardEffectiveMode === 0">{{ formatDateTimeByType(item.beginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(item.endDate, 'yyyy-MM-dd') }}</p>
</div>
</div>
<p class="dm-card__item--bottom">
<span>适用{{ item.storeMode === 0 ? '所有门店' : item.storeMode === 1 ? '部分分组' : '部分门店' }}</span>
</p>
<div v-if="overdue" class="danger-color fz12 mt5"><i class="el-icon-warning mr5 fz12"></i>超过投放期限</div>
</div>
</template>
......@@ -37,6 +38,15 @@ export default {
}
}
},
computed: {
overdue() {
const { putEndDate, putBeginDate, putEffectiveMode } = this.item;
if (putEffectiveMode == 0) {
return new Date() > new Date(putEndDate) || new Date() < new Date(putBeginDate);
}
return false;
}
},
mounted() {
console.log(this.item);
}
......
<template>
<el-dialog title="选择卡券" :visible.sync="show" width="800px" :before-close="close">
<div class="clearfix pb22">
<div class="clearfix pb10">
<div class="fl">
<el-input v-model="listParams.searchParam" class="w200" clearable placeholder="请输入卡券名/备注名" @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-input v-model="listParams.searchParam" class="w200 mr10" clearable placeholder="请输入卡券名/备注名" @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-select style="width:120px;margin-right:10px;" v-model="listParams.cardTypes" placeholder="卡券类型" @change="refresh">
<el-option v-for="item in cardTypesList" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
<span class="fz12 gray">{{ limitTips }}{{ total }}张。 </span>
</div>
<div class="fr">
<!-- <div class="fr">
<el-button type="primary" @click="add">新建卡券</el-button>
<el-button @click="refresh">刷新列表</el-button>
</div>
</div> -->
</div>
<div style="font-size:12px;color:#909399;line-height:30px;">* 仅能选择卡券模板投放期限有效的卡券</div>
<el-table tooltipEffect="light" :data="tableList" row-class-name="cursor-pointer" style="width: 100%" v-loading="loading" @row-click="rowClick">
<el-table-column :show-overflow-tooltip="false" width="60" align="center" prop="coupCardId">
<template slot-scope="scope">
......@@ -18,12 +22,22 @@
</div>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" :min-width="100" align="left" prop="cardName" label="卡券名称"></el-table-column>
<el-table-column :show-overflow-tooltip="true" :min-width="100" align="left" prop="subName" label="备注名"></el-table-column>
<el-table-column prop="" label="有效期" :min-width="100" :show-overflow-tooltip="false">
<el-table-column :show-overflow-tooltip="true" width="140" align="left" prop="cardName" label="卡券名称">
<template slot-scope="scope">
<p style="line-height:22px;">{{ scope.row.cardName }}</p>
<p style="line-height:20px;color:#909399;font-size:13px;">{{ scope.row.subName }}</p>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="false" min-width="120" align="left" prop="createTime" label="卡券模板投放期限">
<template slot-scope="scope">
<span v-if="scope.row.putEffectiveMode == 0"> 固定日期:{{ formatDateTimeByType(scope.row.putBeginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(scope.row.putEndDate, 'yyyy-MM-dd') }} </span>
<span v-else>长期有效</span>
</template>
</el-table-column>
<el-table-column prop="" label="用户使用有效期" :min-width="120" :show-overflow-tooltip="false">
<template slot-scope="scope">
<div v-if="scope.row.cardEffectiveMode == 0">固定日期:{{ formatDateTimeByType(scope.row.beginDate, 'yyyy-MM-dd') + '至' + formatDateTimeByType(scope.row.endDate, 'yyyy-MM-dd') }}</div>
<div v-if="scope.row.cardEffectiveMode == 1">领取后{{ (scope.row.startDay === 0 ? '当' : scope.row.startDay) + '天,有效天数' + scope.row.limitDay }}</div>
<div v-if="scope.row.cardEffectiveMode == 1">领取后{{ (scope.row.startDay === 0 ? '当' : '第' + scope.row.startDay) + '天,有效天数' + scope.row.limitDay }}</div>
</template>
</el-table-column>
<el-table-column prop="cardLimit" :show-overflow-tooltip="false" label="领取限制" width="90">
......@@ -75,10 +89,17 @@ export default {
data() {
return {
formatDateTimeByType,
cardTypesList: [
{ value: null, label: '全部' },
{ value: 0, label: '抵金券' },
{ value: 1, label: '折扣券' },
{ value: 2, label: '兑换券' }
],
listParams: {
searchParam: '',
currentPage: 1,
pageSize: 5,
cardTypes: '', // 0:抵金券,1:折扣券,2:兑换券
requestProject: 'gic-web',
cardLimitType: this.cardLimitType,
cardType: ''
......
......@@ -265,7 +265,7 @@ export default {
//6.卡券
if (val.comName === 'card') {
params.title = val.cardName;
params.relationId = val.wechatCardId;
params.relationId = val.coupCardId;
}
//7.短信
......
......@@ -4,7 +4,7 @@
<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">领取后{{ (item.startDay === 0 ? '当' : '第' + item.startDay) + '天,有效天数' + item.limitDay }}</p>
<p class="dm-card__item__desc" v-if="item.cardEffectiveMode === 0">{{ formatDateTimeByType(item.beginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(item.endDate, 'yyyy-MM-dd') }}</p>
</div>
</div>
......
/*jshint esversion: 6 */
import { _debounce } from '@/utils/index';
import { getEcmInfo, saveEcmInfo } from '@/service/api/ecmApi.js';
import activitySelect from '@/components/activity-select/index.vue';
import { listTemplateVariables } from '@/service/api/msgApi.js';
import xxSysp_mix from '@/mixins/selector.js'; // 商品选择器方法mixins
import marketingEvent from './marketing-event/index.vue';
......@@ -154,8 +153,7 @@ export default {
components: {
'marketing-event': marketingEvent,
'item-card': itemCard,
'var-dialog': varDialog,
activitySelect
'var-dialog': varDialog
},
// watch: {},
computed: {
......
......@@ -48,12 +48,12 @@
<i class="iconfont icon-xinxixianshi pl5 gray"></i>
</el-tooltip>
</el-radio>
<el-radio v-model="form.noticeType" :label="1" :disabled="!isEditTemplate || isInfo"
<!-- <el-radio v-model="form.noticeType" :label="1" :disabled="!isEditTemplate || isInfo"
>微信群发接口
<el-tooltip placement="top-start" content="建议大规模发券、智能营销定时计划使用,占用每个会员每月4次的营销次数。">
<i class="iconfont icon-xinxixianshi pl5 gray"></i>
</el-tooltip>
</el-radio>
</el-radio> -->
<el-radio v-model="form.noticeType" :label="2" :disabled="!isEditTemplate || isInfo || form.templateUseEnable === 0"
>微信模板消息
<el-tooltip placement="top-start">
......
......@@ -13,7 +13,7 @@
</el-select>
<el-input :disabled="!ewashDisable" 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>
<div class="fr">
<el-button type="primary" @click="$router.push('/ewash/add')" :disabled="!ewashDisable">新增卡券</el-button>
<el-button type="primary" @click="addCard" :disabled="!ewashDisable">新增卡券</el-button>
</div>
</div>
<ul class="clearfix" element-loading-text="拼命加载中">
......@@ -21,7 +21,7 @@
</ul>
<div class="text-center" v-if="tableList.length === 0">
<img class="block block-center pt100" width="60" height="60" src="../../assets/img/no-data_icon.png" alt="" />
<el-button class="block block-center mt10 pb20" :disabled="!ewashDisable" type="text" @click="$router.push('/ewash/add')">新增卡券</el-button>
<el-button class="block block-center mt10 pb20" :disabled="!ewashDisable" type="text" @click="addCard">新增卡券</el-button>
</div>
<adjust-stock :show.sync="adjustStock" :totalCount="currentCard.couponStock" :coupCardId="currentCard.coupCardId" @refresh="delayRefresh"></adjust-stock>
<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>
......@@ -30,6 +30,7 @@
</section>
</template>
<script>
import { appletUnableAlert } from '@/utils/index.js';
import { cardPageList, deleteCard } from '@/service/api/cardApi.js';
import adjustStock from '@/views/card/partials/adjust-Stock';
import cardItem from './partials/card-item';
......@@ -76,8 +77,12 @@ export default {
methods: {
//编辑库存 前置
preAdjustStock(val) {
this.currentCard = val;
this.adjustStock = true;
if (!this.$store.state.marketing.appletEnable) {
appletUnableAlert();
} else {
this.currentCard = val;
this.adjustStock = true;
}
},
//修改库存后台异步 所以这边延迟刷新列表
delayRefresh(val) {
......@@ -118,6 +123,13 @@ export default {
this.$tips({ type: 'info', message: '已取消删除' });
});
},
addCard() {
if (!this.$store.state.marketing.appletEnable) {
appletUnableAlert();
} else {
this.$router.push('/ewash/add');
}
},
async deleteCard(coupCardId) {
await deleteCard({ coupCardId });
this.$tips({ type: 'success', message: '删除成功!' });
......
......@@ -25,9 +25,15 @@
</div>
<div class="card-item__detail">
<p class="ellipsis-100">
有效期:<span v-if="item.cardEffectiveMode !== 0">领取后第{{ item.startDay + 1 }}-{{ item.limitDay + item.startDay }}</span>
使用有效期:<span v-if="item.cardEffectiveMode !== 0">领取后{{ (item.startDay === 0 ? '当' : '第' + item.startDay) + '天,有效天数' + item.limitDay }}</span>
<span v-if="item.cardEffectiveMode === 0">{{ formatDateTimeByType(item.beginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(item.endDate, 'yyyy-MM-dd') }}</span>
</p>
<p>
模板投放期限:
<!-- putEffectiveMode 0:固定日期,1:长期 -->
<span v-if="item.putEffectiveMode == 0">{{ formatDateTimeByType(item.putBeginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(item.putEndDate, 'yyyy-MM-dd') }}</span>
<span v-else>长期有效</span>
</p>
<p class="ellipsis-100">
使用条件:<el-popover placement="top-start" width="200" trigger="hover" :content="item.useCondition | filterUseCondition">
<span slot="reference" class="ellipsis-100">{{ item.useCondition | filterUseCondition }}</span>
......@@ -61,7 +67,7 @@
<script>
import renderTemp from './status-render.js';
import { formatDateTimeByType } from '@/utils/index.js';
import { formatDateTimeByType, appletUnableAlert } from '@/utils/index.js';
export default {
props: {
item: {
......@@ -92,6 +98,11 @@ export default {
* 1 投放 2 报表 3 编辑 4 删除 5 详情 6复制 7领取记录
*/
handler(val) {
// 若小程序版本不支持 不支持 卡券新建编辑复制 修改库存
if ((val == 3 || val == 6) && !this.$store.state.marketing.appletEnable) {
appletUnableAlert();
return;
}
switch (val) {
case 1:
this.$router.push({
......
......@@ -4,7 +4,7 @@
<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">领取后{{ (item.startDay === 0 ? '当' : '第' + item.startDay) + '天,有效天数' + item.limitDay }}</p>
<p class="dm-card__item__desc" v-if="item.cardEffectiveMode === 0">{{ formatDateTimeByType(item.beginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(item.endDate, 'yyyy-MM-dd') }}</p>
</div>
</div>
......
......@@ -10,13 +10,17 @@ export default Vue.component('render-temp', {
},
render(h) {
const canEdit = this.item.canEdit !== false; // 只有canEdit === false 才证明不能使用 没有权限仅可以详情/报表
const bind1 = canEdit ? (
<a title="投放" onClick={this.handler.bind(null, 1)}>
<i class="iconfont icon-daohang-" />
</a>
) : (
''
);
// 当前卡券是否 是长期有效||在投放有效期内
// putEffectiveMode 0:固定日期,1:长期
const canGroupSend = this.item.putEffectiveMode == 1 ? true : new Date() > new Date(this.item.putBeginDate) && new Date() < new Date(this.item.putEndDate);
const bind1 =
canEdit && canGroupSend ? (
<a title="投放" onClick={this.handler.bind(null, 1)}>
<i class="iconfont icon-daohang-" />
</a>
) : (
''
);
const bind2 = (
<a title="报表" onClick={this.handler.bind(null, 2)}>
<i class="el-icon-tickets" />
......
......@@ -7,7 +7,7 @@
<dm-input v-model="form.gameName" class="w400" :disabled="isInfo" :maxlength="25"></dm-input>
</el-form-item>
<el-form-item label="数据对话">
<activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></activity-select>
<dm-activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></dm-activity-select>
</el-form-item>
<el-form-item label="游戏时间" prop="dateTime">
<el-date-picker :picker-options="pickerOptions" class="w400" :default-time="['00:00:00', '23:59:59']" v-model="form.dateTime" :disabled="isInfo" type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
......@@ -147,7 +147,6 @@
<script>
import { _debounce } from '@/utils/index';
import adjustStock from '../common/adjust-stock';
import activitySelect from '@/components/activity-select/index.vue';
import { detailLottery, saveLottery, downloadWheelSkinPsd, updateGamePrize } from '@/service/api/gameApi.js';
import { numberToChinese, formatDateTimeByType, deepClone } from '@/utils/index.js';
import dmUploadAvatar from '@/components/upload/avatar';
......@@ -275,7 +274,6 @@ export default {
dmUploadAvatar,
dmShare,
dmThreshold,
activitySelect,
adjustStock
},
created() {
......
......@@ -7,7 +7,7 @@
<dm-input v-model="form.gameName" class="w400" :disabled="isInfo" :maxlength="25"></dm-input>
</el-form-item>
<el-form-item label="数据对话">
<activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></activity-select>
<dm-activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></dm-activity-select>
</el-form-item>
<el-form-item label="游戏时间" class="width50" prop="dateTime">
<el-date-picker class="w400" v-model="form.dateTime" :disabled="isInfo" :default-time="['00:00:00', '23:59:59']" :picker-options="pickerOptions" type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker>
......@@ -131,7 +131,6 @@
<script>
import { _debounce } from '@/utils/index';
import adjustStock from '../common/adjust-stock';
import activitySelect from '@/components/activity-select/index.vue';
import { detailLottery, saveLottery, downloadWheelSkinPsd, updateGamePrize, deleteGamePrize } from '@/service/api/gameApi.js';
import { formatDateTimeByType, deepClone } from '@/utils/index.js';
import prizeMixins from '../common/prizeMixins.js';
......@@ -240,7 +239,6 @@ export default {
dmUploadAvatar,
dmShare,
dmThreshold,
activitySelect,
adjustStock
},
created() {
......
......@@ -6,7 +6,7 @@
<dm-input v-model="form.gameName" class="w400" :maxlength="10"></dm-input>
</el-form-item>
<el-form-item label="数据对话">
<activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></activity-select>
<dm-activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></dm-activity-select>
</el-form-item>
<el-form-item label="游戏背景" class="clearfix">
<div class="left-bg fl">
......@@ -198,7 +198,6 @@
<script>
import { _debounce } from '@/utils/index';
import { isEmpty } from '@/utils/strlen';
import activitySelect from '@/components/activity-select/index.vue';
import { klflDetail, klflSave, klflStrategyList, klflPrizeList, klflStrategySort, klflStrategyDel, klflDownTemp, getCouponStock } from '@/service/api/gameApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
import dmUploadImg from '@/components/upload/img';
......@@ -321,8 +320,7 @@ export default {
calculate,
codeDialog,
dmShare,
dmThreshold,
activitySelect
dmThreshold
},
computed: {
asideShow() {
......
......@@ -6,7 +6,7 @@
<dm-input v-model="form.gameName" class="w400" :disabled="isInfo" :maxlength="25"></dm-input>
</el-form-item>
<el-form-item label="数据对话">
<activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></activity-select>
<dm-activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></dm-activity-select>
</el-form-item>
<el-form-item label="游戏时间" prop="dateTime" class="width50">
<el-date-picker class="w400" :disabled="isInfo" v-model="form.dateTime" :picker-options="pickerOptions" type="datetimerange" :default-time="['00:00:00', '23:59:59']" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker>
......@@ -109,7 +109,6 @@
<script>
import { _debounce } from '@/utils/index';
import activitySelect from '@/components/activity-select/index.vue';
import { ptyxDetail, savePtyx, getGameSystemMusic, downloadPtyxSkinPsd } from '@/service/api/gameApi.js';
import { numberToChinese, formatDateTimeByType } from '@/utils/index.js';
import dmUploadAvatar from '@/components/upload/avatar';
......@@ -241,8 +240,7 @@ export default {
ptyxSkin,
audioUpload,
dmShare,
dmThreshold,
activitySelect
dmThreshold
},
methods: {
//添加奖品
......
......@@ -6,7 +6,7 @@
<dm-input v-model="form.gameName" class="w400" :maxlength="25"></dm-input>
</el-form-item>
<el-form-item label="数据对话">
<activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></activity-select>
<dm-activity-select :actId.sync="form.marketingActivityId" :readOnly="isEdit || isInfo"></dm-activity-select>
</el-form-item>
<el-form-item label="LOGO上传" prop="logoImg" class="width50">
<dm-upload-avatar :model.sync="form.logoImg" width="auto" label="上传图片" tips=" 请上传高度为80px的PNG透明背景图片"></dm-upload-avatar>
......@@ -91,7 +91,6 @@
<script>
import { _debounce } from '@/utils/index';
import activitySelect from '@/components/activity-select/index.vue';
import { znmDetail, znmSave, znmStrategyList, znmStrategySort, znmStrategyDel } from '@/service/api/gameApi.js';
import { numberToChinese, formatDateTimeByType } from '@/utils/index.js';
import dmUploadAvatar from '@/components/upload/avatar';
......@@ -177,8 +176,7 @@ export default {
dmUploadAvatar,
strategy,
dmShare,
dmThreshold,
activitySelect
dmThreshold
},
computed: {
asideShow() {
......
......@@ -141,7 +141,7 @@ export default {
gameActivityId: this.form.gameActivityId || this.$route.params.id || this.gameActivityId,
strategyName: this.form.strategyName,
prizeReferId: this.cardObj.coupCardId,
prizeReferType: '1',
prizeReferType: '2', // znm只能配卡券,积分有问题
prizeStock: 0,
prizeCount: 0,
prizeIntegral: 0,
......
......@@ -30,7 +30,7 @@
</el-col>
<el-col :span="8">
<span class="primary-font-color">数据对话:</span>
<activity-select style="display:inline-block" :actId.sync="info.marketingActivityId" readOnly></activity-select>
<dm-activity-select style="display:inline-block" :actId.sync="info.marketingActivityId" showText></dm-activity-select>
</el-col>
<el-col :span="24">
<span class="primary-font-color">短信模板:</span>
......
......@@ -3,7 +3,7 @@
<section class="dm-form__wrap">
<h3 class="dm-title__label">场景设置</h3>
<el-form-item label="数据对话">
<activity-select :actId.sync="info.marketingActivityId" :readOnly="isEdit || isInfo"></activity-select>
<dm-activity-select :actId.sync="info.marketingActivityId" :readOnly="isEdit || isInfo"></dm-activity-select>
</el-form-item>
<el-form-item label="发送时间">
<el-select class="w250" v-model="info.sendType">
......@@ -47,7 +47,6 @@
</template>
<script>
import { _debounce } from '@/utils/index';
import activitySelect from '@/components/activity-select/index.vue';
import { saveSendSmsService, checkMessageSendCount } from '@/service/api/messageApi.js';
import smsTemp from '@/components/libs/smsTemp';
import { formatDateTimeByType } from '@/utils/index.js';
......@@ -114,8 +113,7 @@ export default {
};
},
components: {
smsTemp,
activitySelect
smsTemp
},
computed: {
asideShow() {
......
......@@ -5,7 +5,7 @@
<el-select class="dm-select" v-model="listParams.sendStatus" placeholder="选择发送状态" @change="refresh">
<el-option v-for="item in sendStatusOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
<activity-select class="vertical-middle w150 mr5" :actId.sync="listParams.marketingActivityId" onlySelect @actUpdate="refresh"></activity-select>
<dm-activity-select class="vertical-middle w150 mr5" width="150" :actId.sync="listParams.marketingActivityId" onlySelect @actUpdate="refresh"></dm-activity-select>
<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-input v-model="listParams.search" class="w200" placeholder="输入模板名称/ID/内容" clearable @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-button class="fr" type="primary" @click="$router.push('/message/record/add')">新建群发</el-button>
......@@ -39,7 +39,6 @@
</section>
</template>
<script>
import activitySelect from '@/components/activity-select/index.vue';
import { LoadMessageList, invalidsmsRecord } from '@/service/api/messageApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
import timeCounts from '@/components/timeCount/index.vue';
......@@ -47,8 +46,7 @@ import tableMethods from '@/mixins/tableMethods.js';
export default {
name: 'sms-record',
components: {
timeCounts,
activitySelect
timeCounts
},
mixins: [tableMethods],
data() {
......
......@@ -63,7 +63,7 @@
><i class="el-icon-picture"></i><span> 图片</span></span
>
<span @click="preVideo"><i class="iconfont icon-shipin"></i><span> 视频</span></span>
<span @click="cardShow = true"><i class="iconfont icon-qiaquan"></i><span> 卡券</span></span>
<!-- <span @click="cardShow = true"><i class="iconfont icon-qiaquan"></i><span> 卡券</span></span> -->
</div>
<vue-ueditor-wrap ref="ueditor" v-model="activeImgText.content" :destroy="false" :config="config" @ready="ready" :myInit="myInit"></vue-ueditor-wrap>
<el-checkbox class="pt10" v-model="activeImgText.originalStatus" :true-label="1" :false-label="0">原文链接</el-checkbox>
......
......@@ -3,7 +3,7 @@
<section class="dm-form__wrap">
<div class="mb20">
<span class="dm-input_label mr8">数据对话:</span>
<activity-select class="inline-block" :actId.sync="info.marketingActivityId" :readOnly="isEdit || isInfo"></activity-select>
<dm-activity-select class="inline-block" :actId.sync="info.marketingActivityId" :readOnly="isEdit || isInfo"></dm-activity-select>
</div>
<div class="mb20" v-if="!isAdd && info.sceneSettingName">
<span class="dm-input_label mr8">营销场景:</span>
......@@ -89,7 +89,6 @@
</template>
<script>
import { _debounce } from '@/utils/index';
import activitySelect from '@/components/activity-select/index.vue';
import dmImgText from '@/components/libs/imgTextTemp';
import dmImgBox from '@/components/libs/imgTemp/index-box.vue';
import { getIsShowSelf } from '@/service/api/commonApi.js';
......@@ -105,7 +104,6 @@ export default {
components: {
dmImgText,
dmImgBox,
activitySelect,
'wx-text': wxText,
tips
},
......
......@@ -8,7 +8,7 @@
<el-select class="vertical-middle w150" v-model="listParams.sendStatus" placeholder="选择发送状态" @change="search">
<el-option v-for="item in sendStatusOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
<activity-select class="vertical-middle w150 mr5" :actId.sync="listParams.marketingActivityId" onlySelect @actUpdate="search"></activity-select>
<dm-activity-select class="vertical-middle w150 mr5" width="150" :actId.sync="listParams.marketingActivityId" onlySelect @actUpdate="search"></dm-activity-select>
<el-checkbox class="vertical-middle" v-model="listParams.hideInvalid" :true-label="1" :false-label="0" label="隐藏已失效" border @change="search"></el-checkbox>
<el-checkbox class="vertical-middle ml0" v-if="$store.state.marketing.isShowSelf" v-model="listParams.showSelfFlag" :true-label="1" :false-label="0" label="仅看本人" border @change="search" />
<el-input v-model="listParams.clerkName" clearable class="vertical-middle w200" placeholder="请输入发送人名称" @change="search"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
......@@ -70,7 +70,6 @@
</section>
</template>
<script>
import activitySelect from '@/components/activity-select/index.vue';
import { sendRecordList, delWechatMarketingRecord, invalidWechatMarketingRecord } from '@/service/api/wechatApi.js';
import { getIsShowSelf } from '@/service/api/commonApi.js';
import dmDialog from './dialog';
......@@ -80,8 +79,7 @@ export default {
name: 'wechat-record',
components: {
dmDialog,
'time-counts': timeCounts,
activitySelect
'time-counts': timeCounts
},
data() {
return {
......
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