Commit a90ed774 by zhangmeng

feat:迭代3

parent 6c9eb2bb
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -22,7 +22,7 @@ module.exports = { ...@@ -22,7 +22,7 @@ module.exports = {
// Various Dev Server settings // Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST host: 'localhost', // can be overwritten by process.env.HOST
port: 8888, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined port: 8001, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: false, autoOpenBrowser: false,
errorOverlay: true, errorOverlay: true,
notifyOnErrors: true, notifyOnErrors: true,
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
<!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.e0d1ced3c6a22ac266004670f550551a.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.9ccab0703cb066fbeb2c.js></script><script type=text/javascript src=/marketing/static/js/app.aa441df94fd8ec2346ab.js></script></body></html> <!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.da5671fd371d3d869d900c012cc7ba62.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.b52e32600f8f7c7becf9.js></script><script type=text/javascript src=/marketing/static/js/app.e00bed4283c87a1d185e.js></script></body></html>
\ No newline at end of file \ 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.
...@@ -86,7 +86,7 @@ ...@@ -86,7 +86,7 @@
"vue-template-compiler": "^2.5.2", "vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0", "webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0", "webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-server": "^2.9.1", "webpack-dev-server": "^2.11.3",
"webpack-merge": "^4.1.0" "webpack-merge": "^4.1.0"
}, },
"engines": { "engines": {
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -1000,7 +1000,7 @@ export default { ...@@ -1000,7 +1000,7 @@ export default {
that.selectLinkObj.name = item.proName; that.selectLinkObj.name = item.proName;
that.selectLinkObj.url = item.url; that.selectLinkObj.url = item.url;
that.selectLinkObj.params = {"proId": item.mallProId};// 2018.6.28修改参数 proId that.selectLinkObj.params = {"proId": item.mallProId};// 2018.6.28修改参数 proId
// that.$emit('linkSelect') that.$emit('linkSelect',that.selectLinkObj)
}, },
// 搜索输入 // 搜索输入
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -12,10 +12,11 @@ import vueGicCard from '@gic-test/vue-gic-card'; ...@@ -12,10 +12,11 @@ import vueGicCard from '@gic-test/vue-gic-card';
import vueGicStore from '@gic-test/vue-gic-store'; import vueGicStore from '@gic-test/vue-gic-store';
import vueGicStoreLinkage from '@gic-test/vue-gic-store-linkage/src/lib'; import vueGicStoreLinkage from '@gic-test/vue-gic-store-linkage/src/lib';
import vueGicStoreGroup from '@gic-test/vue-gic-store-group'; import vueGicStoreGroup from '@gic-test/vue-gic-store-group';
import vueGicPeople from '@gic-test/vue-gic-people/src/lib'; import vueGicPeople from '@gic-test/vue-gic-people';
import vueGicConfirmPeople from '@gic-test/vue-gic-confirm-people/src/lib'; import vueGicConfirmPeople from '@gic-test/vue-gic-confirm-people/src/lib';
import vueGicImgPreview from '@gic-test/vue-gic-img-preview'; import vueGicImgPreview from '@gic-test/vue-gic-img-preview';
import { gicStoreCard } from '@gic-test/vue-gic-store-new/src/lib'; import vueGicMemberGroup from '@gic-test/vue-gic-member-group/src/lib'
import { gicStoreCard } from '@gic-test/vue-gic-store-new';
import packele from 'packele'; import packele from 'packele';
Vue.config.productionTip = false; Vue.config.productionTip = false;
Vue.use(packele); Vue.use(packele);
...@@ -30,6 +31,7 @@ Vue.use(vueGicStoreGroup); ...@@ -30,6 +31,7 @@ Vue.use(vueGicStoreGroup);
Vue.use(vueGicPeople); Vue.use(vueGicPeople);
Vue.use(vueGicConfirmPeople); Vue.use(vueGicConfirmPeople);
Vue.use(vueGicImgPreview); Vue.use(vueGicImgPreview);
Vue.use(vueGicMemberGroup);
Vue.use(gicStoreCard); Vue.use(gicStoreCard);
Vue.prototype.axios = axios; Vue.prototype.axios = axios;
Vue.prototype.axios.withCredentials = true; Vue.prototype.axios.withCredentials = true;
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
//智能营销 //智能营销
import ecm from '../../views/ecm' import ecm from '../../views/ecm'
import ecmList from '../../views/ecm/list' import ecmList from '../../views/ecm/list'
import addEdit from '../../views/ecm/addEdit' import ecmForm from '../../views/ecm/form'
import batchList from '../../views/ecm/batch-list' import batchList from '../../views/ecm/batch-list'
import currentList from '../../views/ecm/current-list' import currentList from '../../views/ecm/current-list'
...@@ -24,7 +24,7 @@ export default { ...@@ -24,7 +24,7 @@ export default {
{ {
path: 'edit/:id', path: 'edit/:id',
name: '智能营销编辑', name: '智能营销编辑',
component: addEdit, component: ecmForm,
meta: { meta: {
type: 'edit', type: 'edit',
path:'/ecm/list' path:'/ecm/list'
...@@ -33,7 +33,7 @@ export default { ...@@ -33,7 +33,7 @@ export default {
{ {
path: 'add', path: 'add',
name: '智能营销新增', name: '智能营销新增',
component: addEdit, component: ecmForm,
meta: { meta: {
type: 'add', type: 'add',
path:'/ecm/list' path:'/ecm/list'
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<p class="pl20 pb20">已选择链接:{{jumpUrlInfo.url || '--'}}</p> <p class="pl20 pb20">已选择链接:{{jumpUrlInfo.url || '--'}}</p>
<innerUrl class="ml30" v-if="h5Type === 1" @sendRightUrl="getRightUrl" @sendLeftUrl="getLeftUrl" @sendShopData="getShopData"></innerUrl> <innerUrl class="ml30" v-if="h5Type === 1" @sendRightUrl="getRightUrl" @sendLeftUrl="getLeftUrl" @sendShopData="getShopData"></innerUrl>
<div class="ml30 clearfix" v-if="h5Type === 0" > <div class="ml30 clearfix" v-if="h5Type === 0" >
<el-input v-model="url" class="w300" @blur="checkUrl" placeholder="请输入网址 http或https开头"></el-input> <el-input v-model="jumpUrlInfo.url" class="w300" @blur="checkUrl" placeholder="请输入网址 http或https开头"></el-input>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="小程序链接" name="1"> <el-tab-pane label="小程序链接" name="1">
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
<script> <script>
import Vue from 'vue'; import Vue from 'vue';
import qs from 'qs';
import innerUrl from '@/components/innerUrl/innerUrl'; import innerUrl from '@/components/innerUrl/innerUrl';
import linktoolspage from '@/components/linktools/linktoolspage.vue'; import linktoolspage from '@/components/linktools/linktoolspage.vue';
/** /**
...@@ -62,6 +63,23 @@ export default { ...@@ -62,6 +63,23 @@ export default {
show: { show: {
type:Boolean, type:Boolean,
default:false default:false
},
obj:{
type:Object,
default() {
return {
name:'',
url:'',
type:1
}
}
}
},
watch:{
show(val) {
if(val) {
}
} }
}, },
data() { data() {
...@@ -70,7 +88,7 @@ export default { ...@@ -70,7 +88,7 @@ export default {
activeName:'0', activeName:'0',
url:'', url:'',
h5Type:1, h5Type:1,
jumpUrlInfo:{name:'',url:''} jumpUrlInfo:{name:'',url:''},
} }
}, },
methods:{ methods:{
...@@ -78,8 +96,14 @@ export default { ...@@ -78,8 +96,14 @@ export default {
this.$emit('update:show',false); this.$emit('update:show',false);
}, },
submit() { submit() {
// this.close();
if (this.activeName == '0' && this.h5Type === 1) {
this.transfromUrl(); this.transfromUrl();
} else {
this.close();
this.jumpUrlInfo.name = this.linkText;
this.$emit('urlInfo',this.jumpUrlInfo);
}
}, },
getRightUrl(data){ getRightUrl(data){
console.log(data); console.log(data);
...@@ -94,7 +118,11 @@ export default { ...@@ -94,7 +118,11 @@ export default {
}, },
// linktoolspage // linktoolspage
linkSelect(val) { // 选择小程序链接的返回值 linkSelect(val) { // 选择小程序链接的返回值
console.log(val) if (val.url) {
this.jumpUrlInfo.url = val.url;
} else {
this.jumpUrlInfo.url = 'pages/mall/mall-product-detail/mall-product-detail?proId=' + val.params.proId;
}
}, },
checkUrl() { checkUrl() {
if (this.h5Type === 1 && checkUrl(this.url)) { if (this.h5Type === 1 && checkUrl(this.url)) {
...@@ -102,21 +130,20 @@ export default { ...@@ -102,21 +130,20 @@ export default {
return; return;
} }
}, },
//转换 url //转换 url 内部链接
transfromUrl(url) { transfromUrl(url) {
let params = { let params = {
jumpUrlInfo:{ url:this.jumpUrlInfo.url,
name:'',
url:''
},
urlType: this.activeName == '0' ? (this.h5Type) : 2,
requestProject:'marketing' requestProject:'marketing'
} }
this.axios.post('/api-marketing/change-to-WXUrl',qs.stringify(params)).then(res => { this.axios.post('/api-marketing/change-to-WXUrl',qs.stringify(params)).then(res => {
this.jumpUrlInfo.url = res.data.response.result;
this.jumpUrlInfo.name = this.linkText;
this.$emit('urlInfo',this.jumpUrlInfo);
this.close();
console.log(res); console.log(res);
}) })
} }
} }
} }
</script> </script>
......
...@@ -6,15 +6,61 @@ ...@@ -6,15 +6,61 @@
<div class="wx-text__opt"> <div class="wx-text__opt">
<a @click="addLink" class="iconfont icon-lianjie" title="添加链接"></a> <a @click="addLink" class="iconfont icon-lianjie" title="添加链接"></a>
<a @click="removeLink" class="iconfont icon-duankailianjie" title="取消链接"></a> <a @click="removeLink" class="iconfont icon-duankailianjie" title="取消链接"></a>
<a @click="removeLink" class="iconfont icon-17" title="变量"></a> <el-popover placement="top" trigger="hover" width="680">
<p>1.支持插入会员信息变量,如下表所示,{数字}为可插入变量,注意变量值长度,一面超过300字文本上限。</p>
<p>2.支持插入H5链接;支持插入小程序链接。</p>
<p>3.支持换行;不支持富文本格式。</p>
<p>会员信息变量表:</p>
<div class="clearfix">
<ul class="fl pr10">
<li>{1}={姓名}</li>
<li>{2}={姓名+先生/女士}</li>
<li>{3}={生日日期}</li>
<li>{4}={生日天数}</li>
<li>{5}={关注日期}</li>
<li>{6}={关注天数}</li>
<li>{7}={主门店品牌名称}</li>
</ul>
<ul class="fl pr10">
<li>{8}={主门店名称}</li>
<li>{9}={主门店电话}</li>
<li>{10}={专属导购姓名}</li>
<li>{11}={专属导购手机号}</li>
<li>{12}={开卡日期}</li>
<li>{13}={开卡天数}</li>
<li>{14}={开卡门店名称}</li>
</ul>
<ul class="fl pr10">
<li>{15}={会员卡号}</li>
<li>{16}={会员等级名称}</li>
<li>{17}={主门店地址}</li>
<li>{18}={会员等级剩余有效天数}</li>
<li>{19}={积分余额}</li>
<li>{20}={30天内将过期积分额度}</li>
<li>{21}={储值余额}</li>
</ul>
<ul class="fl">
<li>{22}={消费总额}</li>
<li>{23}={消费次数}</li>
<li>{24}={最近消费日期}</li>
<li>{25}={最近消费间隔}</li>
<li>{26}={最高单笔消费}</li>
<li>{27}={最近消费门店名称}</li>
<li>{28}={最近消费品牌名称}</li>
</ul>
</div>
<a @click="removeLink" class="iconfont icon-17" title="变量" slot="reference"></a>
</el-popover>
<span>还可以输入300字,按下回车键换行</span> <span>还可以输入300字,按下回车键换行</span>
</div> </div>
<my-dialog :show.sync="dialogShow"></my-dialog> <my-dialog :show.sync="dialogShow" @urlInfo="getUrlInfo"></my-dialog>
</section> </section>
</template> </template>
<script> <script>
import qs from 'qs';
import myDialog from './dialog'; import myDialog from './dialog';
const hrefReg = /href=['"]([^"]*)['"].*?/g;
export default { export default {
name:'dm-text', name:'dm-text',
components:{ components:{
...@@ -37,9 +83,13 @@ export default { ...@@ -37,9 +83,13 @@ export default {
data() { data() {
return { return {
textarea:'', textarea:'',
dialogShow:false dialogShow:false,
appid:''
} }
}, },
created() {
this.getAppid();
},
methods:{ methods:{
// 添加链接 // 添加链接
addLink() { addLink() {
...@@ -52,21 +102,56 @@ export default { ...@@ -52,21 +102,56 @@ export default {
// 获取内容 // 获取内容
getTextValue() { getTextValue() {
const reg = /<(?!(a|\/a|div|\/div|br)).*?>/img ; // 只保留a 和 div 标签 const reg = /<(?!(a|\/a|div|\/div|br)).*?>/img ; // 只保留a 和 div 标签
const hrefReg = /href=['"]([^"]*)['"].*?/g;
let text = this.$refs.myTextarea.innerHTML.replace(reg,""); let text = this.$refs.myTextarea.innerHTML.replace(reg,"");
text = text.replace(/<\/div>|&nbsp;/g,"").replace(/<((div)).*?>/g,"<br>").split('<br>').filter(v=>v).join('<br>'); text = text.replace(/<\/div>|&nbsp;/g,"").replace(/<((div)).*?>/g,"<br>").split('<br>').filter(v=>v).join('<br>');
// this.hasATag(text,flag => {
// if (flag) {
// var href = text.match(hrefReg)[0];
// text = text.replace(/<((a)).*?>/g,'<a '+href+'">'); // 获取 <a> 并替代
// }
// });
this.$emit('update:value',text);
},
getUrlInfo(obj) {
console.log(obj)
this.hasATag(this.textarea,flag => {
if (flag) {
this.textarea += '<a href="'+obj.url+'">'+obj.name+'</a>';
// this.$nextTick(_ => {
// this.getTextValue();
// })
}
})
},
// 辅助函数 是否有a标签
hasATag(text,cb) {
debugger;
if(hrefReg.test(text)){ if(hrefReg.test(text)){
var hrefArr = text.match(hrefReg); var hrefArr = text.match(hrefReg);
if(hrefArr.length > 1){ if(hrefArr.length >= 1){
this.$message({type:'warning',message:'只能添加一个链接'}); this.$message({type:'warning',message:'只能添加一个链接'});
return; cb && cb(false);
} } else {
var href = text.match(hrefReg)[0]; cb && cb(true);
text = text.replace(/<((a)).*?>/g,'<a '+href+'">'); // 获取 <a> 并替代
} }
console.log(text) } else {
this.$emit('update:value',text); cb && cb(true);
} }
},
getAppid() {
this.axios.post('/api-marketing/get-enterprise-wechat-appid',qs.stringify({
requestProject:'marketing'
})).then(res => {
this.appid = res.data.result;
console.log(res);
})
},
// 清除a链接
removeLink(){
this.textarea = this.$refs.myTextarea.innerText.replace(/\n/g,'<br>');
this.$emit('update:value',this.textarea);
},
} }
} }
</script> </script>
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
<template> <template>
<section> <section>
<div class="dm-wrap clearfix"> <div class="dm-wrap clearfix">
<el-date-picker class="w250" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="search"></el-date-picker> <el-date-picker class="w250" v-model="dateTime" :clearable="false" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="search"></el-date-picker>
<el-select class="dm-select" clearable v-model="listParams.success" placeholder="所有条件" @change="search"> <el-select class="dm-select" clearable v-model="listParams.success" placeholder="所有条件" @change="search">
<el-option v-for="(v,i) in successOptions" :key="i" :label="v.label" :value="v.value"></el-option> <el-option v-for="(v,i) in successOptions" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select> </el-select>
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
</el-table> </el-table>
</div> </div>
<div class="dm-wrap"> <div class="dm-wrap">
<el-table tooltipEffect="light" :data="tableList" style="width: 100%" v-loading="loading" element-loading-text="拼命加载中" > <el-table tooltipEffect="light" :data="tableList" style="width: 100%" v-loading="loading">
<el-table-column type="index" width="50" label="序号"></el-table-column> <el-table-column type="index" width="50" label="序号"></el-table-column>
<el-table-column v-for="(v,i) in tableHeader" :fixed="v.fixed" :show-overflow-tooltip="v.tooltip" :width="v.width" :min-width="v.minWidth" :align="v.align" :key="i" :prop="v.prop" :label="v.label" :formatter="v.formatter"> <el-table-column v-for="(v,i) in tableHeader" :fixed="v.fixed" :show-overflow-tooltip="v.tooltip" :width="v.width" :min-width="v.minWidth" :align="v.align" :key="i" :prop="v.prop" :label="v.label" :formatter="v.formatter">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -58,7 +58,7 @@ export default { ...@@ -58,7 +58,7 @@ export default {
memberInfo:'', memberInfo:'',
success:'', success:'',
beginTime:'', beginTime:'',
beginTime:'', endTime:'',
}, },
total:0, total:0,
loading:false, loading:false,
...@@ -94,33 +94,29 @@ export default { ...@@ -94,33 +94,29 @@ export default {
}}, }},
{label:'备注',prop:'errMsg',minWidth:'120',align:'left'}, {label:'备注',prop:'errMsg',minWidth:'120',align:'left'},
], ],
multipleSelection:[],
} }
}, },
beforeDestroy() {
this.$store.commit('mutations_layoutTips','');
},
created() { created() {
this.ecmCurrentSendInfos(); this.ecmCurrentSendInfos();
this.$store.commit('mutations_breadcrumb',[{name:'营销管理',path:''},{name:'智能营销',path:'/ecm'},{name:this.$route.params.name + ' - 实时发送记录',path:''}]); this.$store.commit('mutations_breadcrumb',[{name:'营销管理',path:''},{name:'智能营销',path:'/ecm'},{name:this.$route.params.name + ' - 实时发送记录',path:''}]);
this.$store.commit('mutations_layoutTips',`<div class="layout--tips"> this.$store.commit('mutations_layoutTips',`<div class="layout--tips"><i class="el-icon-info"></i>历史数据限制:2018年11月15日之前的历史营销计划,没有详细数据</div>`);
<i class="el-icon-info"></i>
历史数据限制:2018年11月15日之前的历史营销计划,没有详细数据
</div>
`);
setTimeout(_ => { setTimeout(_ => {
this.$store.commit('mutations_layoutTips',''); this.$store.commit('mutations_layoutTips','');
},5000) },5000);
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips','');
}, },
methods: { methods: {
handleSelectionChange(val) { handleSelectionChange(val) {
this.multipleSelection = val; let list = val.map(v => v.ecmMarketingTypeRelationId).filter(v => v).join(',');
this.listParams.ecmMarketingTypeRelationIds = val.map(v => v.ecmMarketingTypeRelationId).filter(v => v).join(','); this.listParams.ecmMarketingTypeRelationIds = list;
this.ecmCurrentSendDetails(); this.ecmCurrentSendDetails();
}, },
search() { search() {
this.listParams.currentPage = 1; this.listParams.currentPage = 1;
this.ecmCurrentSendDetails(); this.ecmCurrentSendInfos();
// this.ecmCurrentSendDetails();
}, },
handleSizeChange(val) { handleSizeChange(val) {
this.listParams.pageSize = val; this.listParams.pageSize = val;
...@@ -130,31 +126,47 @@ export default { ...@@ -130,31 +126,47 @@ export default {
this.listParams.currentPage = val; this.listParams.currentPage = val;
this.ecmCurrentSendDetails(); this.ecmCurrentSendDetails();
}, },
// 上面列表
async ecmCurrentSendInfos() { async ecmCurrentSendInfos() {
this.loading = true; this.loading = true;
let res = await ecmCurrentSendInfos({ecmPlanId:this.$route.params.id}); this.formatterTimeFunc();
let res = await ecmCurrentSendInfos({
ecmPlanId:this.$route.params.id,
beginTime:this.listParams.beginTime,
endTime:this.listParams.endTime,
memberInfo:this.listParams.memberInfo,
success:this.listParams.success
});
this.infoList = res.result || []; this.infoList = res.result || [];
this.$nextTick(_ => { this.$nextTick(_ => {
this.$refs.multipleTable.toggleAllSelection(); this.$refs.multipleTable.toggleAllSelection();
}) });
this.listParams.ecmMarketingTypeRelationIds = this.infoList.map(v => v.ecmMarketingTypeRelationId).filter(v => v).join(','); let list = this.infoList.map(v => v.ecmMarketingTypeRelationId).filter(v => v).join(',');
this.listParams.ecmMarketingTypeRelationIds = list;
this.loading = false; this.loading = false;
}, },
// 下面列表
async ecmCurrentSendDetails() { async ecmCurrentSendDetails() {
this.loading = true; this.loading = true;
if (this.dateTime) { this.formatterTimeFunc();
this.listParams.beginTime = formateDateTimeByType(this.dateTime[0],'yyyy-MM-dd');
this.listParams.endTime = formateDateTimeByType(this.dateTime[1],'yyyy-MM-dd');
} else {
this.listParams.beginTime = this.listParams.senendTimedEndTime = '';
}
let res = await ecmCurrentSendDetails(this.listParams); let res = await ecmCurrentSendDetails(this.listParams);
this.tableList = res.result.result || []; this.tableList = res.result.result || [];
this.total = res.result.totalCount || 0; this.total = res.result.totalCount || 0;
this.loading = false; this.loading = false;
}, },
// 导出
exportCurrentSendDetails() { exportCurrentSendDetails() {
window.location = `${exportCurrentSendDetails}?memberInfo=${this.listParams.memberInfo}&success=${this.listParams.success}&ecmPlanId=${this.listParams.ecmPlanId}&ecmPlanName=${this.$route.params.name}&beginTime=${this.listParams.beginTime}&endTime=${this.listParams.endTime}&ecmMarketingTypeRelationIds=${this.listParams.ecmMarketingTypeRelationIds}&requestProject=gic-web`; window.location = `${exportCurrentSendDetails}?memberInfo=${this.listParams.memberInfo}&success=${this.listParams.success}&ecmPlanId=${this.listParams.ecmPlanId}&ecmPlanName=${this.$route.params.name}&beginTime=${this.listParams.beginTime}&endTime=${this.listParams.endTime}&ecmMarketingTypeRelationIds=${this.listParams.ecmMarketingTypeRelationIds}&requestProject=gic-web`;
},
/*-----------辅助方法-------------*/
formatterTimeFunc() {
if (this.dateTime) {
this.listParams.beginTime = formateDateTimeByType(this.dateTime[0],'yyyy-MM-dd');
this.listParams.endTime = formateDateTimeByType(this.dateTime[1],'yyyy-MM-dd');
} else {
this.listParams.beginTime = this.listParams.senendTimedEndTime = '';
}
} }
} }
} }
......
...@@ -24,8 +24,8 @@ ...@@ -24,8 +24,8 @@
实时发送调用微信客服接口,不占用每个用户每月4条的群发次数 实时发送调用微信客服接口,不占用每个用户每月4条的群发次数
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="触发行为" class="width50" v-if="!form.effectType"> <el-form-item label="触发行为" class="width50" v-if="!form.effectType" >
<el-select class="w400" v-model="form.effectAction" placeholder="选择发送状态"> <el-select class="w400" v-model="form.effectAction" placeholder="选择发送状态" @change="effectActionChange">
<el-option v-for="(v,i) in effectActionOptions" :key="i" :label="v.label" :value="v.value"></el-option> <el-option v-for="(v,i) in effectActionOptions" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -53,6 +53,50 @@ ...@@ -53,6 +53,50 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</section> </section>
<!-- 消费触发配置 -->
<section class="dm-form__wrap" v-if="!form.effectType && form.effectAction === 'consume'">
<h3 class="dm-title__label">消费触发配置
<i class="iconfont icon-xinxixianshi pl5 gray"></i>
<span class="gray fz13">仅适用于线下单笔消费</span>
</h3>
<el-form-item label="最低消费金额">
<el-input-number controls-position="right" :min="0" style="width:244px;" v-model="form.lowest_cost"></el-input-number>
</el-form-item>
<el-form-item label="最低消费件数">
<el-input-number controls-position="right" :min="0" style="width:244px;" v-model="form.lowest_cost_count"></el-input-number>
<span class="pl20 fz13 gray"> * 不包含赠品</span>
</el-form-item>
<el-form-item label="指定消费门店">
<el-radio-group v-model="form.store_mode" @change="initStoreCardLeft">
<el-radio :label="0">所有门店</el-radio>
<el-radio :label="1">部分门店</el-radio>
</el-radio-group>
</el-form-item>
<vue-gic-store-card class="pt10" v-show="form.store_mode" ref="storeCard" :uuid.sync="form.order_store"></vue-gic-store-card>
</section>
<!-- 会员卡升/降级触发设置 -->
<section class="dm-form__wrap" v-if="form.effectAction === 'degrade' || form.effectAction === 'upgrade'">
<h3 class="dm-title__label">会员卡{{form.effectAction === 'degrade'?'降':'升'}}级触发设置</h3>
<el-form-item :label="`会员卡${form.effectAction === 'degrade'?'降':'升'}级至`">
<el-select v-model="form.gradeIds" multiple placeholder="请选择" class="w300">
<el-option v-for="v in gradeList" :key="v.gradeId" :label="v.gradeName" :value="v.gradeId" :disabled="v.disabled"></el-option>
</el-select>
</el-form-item>
</section>
<!-- 营销次数配置 -->
<section class="dm-form__wrap" v-if="!form.effectType && (form.effectAction === 'consume' || form.effectAction === 'upgrade' || form.effectAction === 'degrade')">
<h3 class="dm-title__label">营销次数配置
<i class="iconfont icon-xinxixianshi pl5 gray"></i>
<span class="gray fz13">设置本营销计划对同个会员的触发次数</span>
</h3>
<el-form-item label="营销次数配置" prop="marketingTimesType">
<el-select v-model="form.marketingTimesType" class="w150 vertical-middle">
<el-option v-for="(v,i) in marketingTimesTypeOptions" :key="i" :value="v.value" :label="v.label"></el-option>
</el-select>
<span class="vertical-middle" v-if="form.marketingTimesType !== 5"><el-input-number controls-position="right" class="w150" :min="1" v-model="form.marketingTimes"></el-input-number></span>
<span class="pl20 fz13 gray"> * 该营销计划{{marketingTimesTips}}</span>
</el-form-item>
</section>
<!-- 有效时间 --> <!-- 有效时间 -->
<section class="dm-form__wrap"> <section class="dm-form__wrap">
<h3 class="dm-title__label">有效时间</h3> <h3 class="dm-title__label">有效时间</h3>
...@@ -73,20 +117,24 @@ ...@@ -73,20 +117,24 @@
<!-- 人群筛选器 --> <!-- 人群筛选器 -->
<section class="dm-form__wrap"> <section class="dm-form__wrap">
<h3 class="dm-title__label">适用人群</h3> <h3 class="dm-title__label">适用人群</h3>
<div class="mb20"> <el-radio-group class="pl20 pb20" v-model="form.memberType">
<el-radio :label="0">会员筛选</el-radio>
<el-radio :label="1">会员分组</el-radio>
</el-radio-group>
<div class="mb20" v-if="form.memberType === 0">
<vue-gic-people :projectName="projectName" :useId="useId" :hasSearchData="hasSearchData" :sceneValue="sceneValue" ref="peopleFilter" @findFilter="findFilter" @getBackData="getBackData" @editHide= "editHide" @editShow="editShow" @hideBtn="hideBtn"/> <vue-gic-people :projectName="projectName" :useId="useId" :hasSearchData="hasSearchData" :sceneValue="sceneValue" ref="peopleFilter" @findFilter="findFilter" @getBackData="getBackData" @editHide= "editHide" @editShow="editShow" @hideBtn="hideBtn"/>
<div class="gic-people--button" v-show="toggleTag"> <div class="gic-people--button" v-show="toggleTag">
<el-button size="small" type="primary" @click="getData">确 定</el-button> <el-button size="small" type="primary" @click="getData">确 定</el-button>
<el-button size="small" @click="cancelFilter">取 消</el-button> <el-button size="small" @click="cancelFilter">取 消</el-button>
</div> </div>
</div> </div>
<vue-gic-member-group v-if="form.memberType === 1" :defaltSelected="defaltSelected" :height='500' :projectName="projectName" :headerList='headerList' @handleDataTransferred="handleDataTransferred" @handleDataLeft="handleDataLeft"></vue-gic-member-group>
</section> </section>
<!-- 营销事件 --> <!-- 营销事件 -->
<section class="dm-form__wrap"> <section class="dm-form__wrap">
<h3 class="dm-title__label">营销事件</h3> <h3 class="dm-title__label">营销事件</h3>
<marketing-event ref="marketingEvent" @has-card="hasCard" v-if="ecmPlanId" :ecmPlanId="ecmPlanId" :code="code" :enabledMessageState="enabledMessageState"></marketing-event> <marketing-event ref="marketingEvent" @has-card="hasCard" v-if="ecmPlanId" :ecmPlanId="ecmPlanId" :code="code" :enabledMessageState="enabledMessageState"></marketing-event>
</section> </section>
<!-- 只有存在卡券的情况下出现卡券通知方式 --> <!-- 只有存在卡券的情况下出现卡券通知方式 -->
<section class="dm-form__wrap" v-if="currentCard.comName"> <section class="dm-form__wrap" v-if="currentCard.comName">
<h3 class="dm-title__label">卡券通知方式配置</h3> <h3 class="dm-title__label">卡券通知方式配置</h3>
...@@ -157,7 +205,7 @@ ...@@ -157,7 +205,7 @@
<el-button @click="$router.go(-1)">返 回</el-button> <el-button @click="$router.go(-1)">返 回</el-button>
</div> </div>
<var-dialog :options="options" :show.sync="varShow" @get-data="insetVar"></var-dialog> <var-dialog :options="options" :show.sync="varDialogShow" @get-data="insetVar"></var-dialog>
<el-dialog title="修改模板消息" :visible.sync="editDialogShow" width="600px" :before-close="close"> <el-dialog title="修改模板消息" :visible.sync="editDialogShow" width="600px" :before-close="close">
<div class="ecm-msg__edit"> <div class="ecm-msg__edit">
...@@ -199,6 +247,7 @@ import {getEcmInfo,saveEcmInfo} from '@/service/api/ecmApi.js'; ...@@ -199,6 +247,7 @@ import {getEcmInfo,saveEcmInfo} from '@/service/api/ecmApi.js';
import {listTemplateVariables} from '@/service/api/msgApi.js'; import {listTemplateVariables} from '@/service/api/msgApi.js';
import {sceneSettingList} from '@/service/api/commonApi.js'; import {sceneSettingList} from '@/service/api/commonApi.js';
import {checkMessageSendCount} from '@/service/api/messageApi.js'; import {checkMessageSendCount} from '@/service/api/messageApi.js';
import {klflStrategy} from '@/service/api/gameApi.js'; // 会员列表接口
import marketingEvent from './marketing-event/index.vue'; import marketingEvent from './marketing-event/index.vue';
import {formateDateTimeByType} from '@/utils/index.js' import {formateDateTimeByType} from '@/utils/index.js'
import itemCard from './partials/item-card.vue'; import itemCard from './partials/item-card.vue';
...@@ -210,11 +259,12 @@ export default { ...@@ -210,11 +259,12 @@ export default {
ecmPlanId:'', // 必传, ecmPlanId:'', // 必传,
code:'1001', code:'1001',
loading:false, loading:false,
effectActionOptions:[{value:'subscribe',label:'关注触发'},{value:'authentication',label:'认证触发'}], effectActionOptions:[{value:'subscribe',label:'关注触发'},{value:'authentication',label:'认证触发'},{value:'consume',label:'消费触发'},{value:'upgrade',label:'会员卡升级触发'},{value:'degrade',label:'会员卡降级触发'}],
// {value:'consume',label:'消费触发'} marketingTimesTypeOptions:[{value:0,label:'总共触发'},{value:1,label:'每天触发'},{value:2,label:'每周触发'},{value:3,label:'每月触发'},{value:4,label:'每年触发'},{value:-1,label:'无限次触发'}],
dayOptions:Array(24).fill().map((v,i) =>({value:i,label:i+':00'})), dayOptions:Array(24).fill().map((v,i) =>({value:i,label:i+':00'})),
sceneSettingIdOptions:[], sceneSettingIdOptions:[],
form:{ form:{
memberType:0,
ecmPlanName:'', ecmPlanName:'',
effectType:0, effectType:0,
effectTime:0, effectTime:0,
...@@ -233,13 +283,21 @@ export default { ...@@ -233,13 +283,21 @@ export default {
attention_day:'', attention_day:'',
lastCost_day:'', lastCost_day:'',
memberSearchDTO:'', memberSearchDTO:'',
memberGroupIds:'',
beginDate:'', beginDate:'',
endDate:'', endDate:'',
cardNoticeType:2, cardNoticeType:2,
templateNoticeFlag:0, templateNoticeFlag:0,
// 判断模板消息能否使用 // 判断模板消息能否使用
templateUseEnable:1, templateUseEnable:1,
marketingTimesType:0,
marketingTimes:1,
gradeIds:[],
//消费触发
lowest_cost:0,
lowest_cost_count: 0,
store_mode: 0,
order_store: ''
}, },
template:{ template:{
headerColor:'#173177', headerColor:'#173177',
...@@ -275,14 +333,19 @@ export default { ...@@ -275,14 +333,19 @@ export default {
toggleTag: false, // 控制按钮显示的参数,仅供参考,可自行修改 toggleTag: false, // 控制按钮显示的参数,仅供参考,可自行修改
getSaveData:'', getSaveData:'',
saveTag:false, saveTag:false,
enabledMessageState:0,
showMessage:false,
enabledMessageState:0, // 能否发送短信,接口获取
showMessage:false, // 有效时间展示错误信息flag
currentCard:{}, currentCard:{},
varShow:false, varDialogShow:false, // 常量弹窗show
currentTxet:'', currentTxet:'',
options:[], options:[],
editDialogShow:false editDialogShow:false,
gradeList:[],
// 会员分组可传参数
defaltSelected: [], // 默认穿梭窗已选入数据
projectName:'marketing', // 默认是memberTag
headerList: [ 'effectiveStatus'] // 表头配置,默认全部,分组名称默认显示不可配置
} }
}, },
components:{ components:{
...@@ -293,6 +356,30 @@ export default { ...@@ -293,6 +356,30 @@ export default {
computed: { computed: {
asideShow() { asideShow() {
return this.$store.state.marketing.asideShow return this.$store.state.marketing.asideShow
},
marketingTimesTips() {
let tips = '';
switch(this.form.marketingTimesType) {
case 0:
tips = `总共对同个会员触发${this.form.marketingTimes}次`;
break;
case 1:
tips = `在一天内对同个会员触发${this.form.marketingTimes}次,每天0:00刷新触发次数`;
break;
case 2:
tips = `在一周内对同个会员触发${this.form.marketingTimes}次,每周一0:00刷新触发次数`;
break;
case 3:
tips = `在一个月内对同个会员触发${this.form.marketingTimes}次,每月1号0:00刷新触发次数`;
break;
case 4:
tips = `在一年内对同个会员触发${this.form.marketingTimes}次,每年1月1号0:00刷新触发次数`;
break;
case 5:
tips = `对同个会员触发无限次`;
break;
}
return tips;
} }
}, },
created(){ created(){
...@@ -333,6 +420,7 @@ export default { ...@@ -333,6 +420,7 @@ export default {
if (!isResetTemplate) { if (!isResetTemplate) {
const result = res.result.ecmDTO; const result = res.result.ecmDTO;
const commonScene = res.result.commonScene; const commonScene = res.result.commonScene;
const consumTrigger = res.result.consumTrigger;
this.enabledMessageState = res.result.enabledMessageState || 0; this.enabledMessageState = res.result.enabledMessageState || 0;
if(result && this.isEdit) { if(result && this.isEdit) {
this.ecmPlanId = this.form.ecmPlanId = result.ecmPlanId || ''; this.ecmPlanId = this.form.ecmPlanId = result.ecmPlanId || '';
...@@ -342,8 +430,27 @@ export default { ...@@ -342,8 +430,27 @@ export default {
this.form.effectAction = result.effectAction; this.form.effectAction = result.effectAction;
this.form.sceneSettingId = result.sceneSettingId; this.form.sceneSettingId = result.sceneSettingId;
this.form.sceneSettingName = result.sceneSettingName; this.form.sceneSettingName = result.sceneSettingName;
this.form.memberSearchDTO = result.filterJson;
this.form.memberType = result.memberType;
this.form.expireType = result.expireType; this.form.expireType = result.expireType;
//处理会员等级
this.form.gradeIds = (result.gradeIds && result.gradeIds.split(',').filter(v => v)) || [];
//营销次数配置
this.form.marketingTimesType = result.marketingTimesType || 0;
this.form.marketingTimes = result.marketingTimes || 1;
//'0-不通知 1-微信对话框 2-模板消息 补发通知 0-不补发 1-补发'
this.form.cardNoticeType = result.cardNoticeType || 0;
this.form.templateNoticeFlag = result.templateNoticeFlag || 0;
// 判断回显
if (this.form.memberType === 0) {
this.form.memberSearchDTO = result.filterJson;
} else {
this.defaltSelected = res.result.tagGroupList || [];
}
if (this.form.expireType){ if (this.form.expireType){
this.form.beginDate = result.beginDate || ''; this.form.beginDate = result.beginDate || '';
this.form.endDate = result.endDate || ''; this.form.endDate = result.endDate || '';
...@@ -364,14 +471,30 @@ export default { ...@@ -364,14 +471,30 @@ export default {
this.checked = ['lastCost_day'] this.checked = ['lastCost_day']
} }
} }
/** '0-不通知 1-微信对话框 2-模板消息' **/
/** '客服接口发送失败是否使用模板消息进行补发通知 0-不补发 1-补发' **/
this.form.cardNoticeType = result.cardNoticeType || 0;
this.form.templateNoticeFlag = result.templateNoticeFlag || 0;
} else if (this.isAdd) { } else if (this.isAdd) {
this.ecmPlanId = res.result.templateEcmPlanId || ''; this.ecmPlanId = res.result.templateEcmPlanId || '';
} }
this.form.templateUseEnable = res.result.templateUseEnable; this.form.templateUseEnable = res.result.templateUseEnable;
this.$nextTick(_ => {
this.effectActionChange(true);
});
// 处理消费触发
if (consumTrigger) {
this.form.lowest_cost = consumTrigger.lowest_cost || 0; /** 最低消费 0: 无限制 **/
this.form.lowest_cost_count = consumTrigger.lowest_cost_count || 0; /** 最低消费数量 0: 无限制 **/
this.form.store_mode = consumTrigger.store_mode || 0; /** 门店类型: 0: 所有门店, 1: 部分(包含部分门店, 部分分组等) **/
this.form.order_store = consumTrigger.order_store || ''; /** 消费门店key值 **/
}
// 触发门店初始化
if (this.form.effectAction ==='consume' && this.form.store_mode) {
this.$nextTick(_ => {
this.$refs.storeCard.init();
})
}
} }
const template = res.result.marketingTemplate; const template = res.result.marketingTemplate;
...@@ -440,7 +563,7 @@ export default { ...@@ -440,7 +563,7 @@ export default {
}, },
// 预插入变量 // 预插入变量
insetVarPre(val) { insetVarPre(val) {
this.varShow = true this.varDialogShow = true
this.currentTxet = val; this.currentTxet = val;
}, },
// 插入变量 // 插入变量
...@@ -461,7 +584,7 @@ export default { ...@@ -461,7 +584,7 @@ export default {
}, },
// 保存 校验 // 保存 校验
submit (formName) { async submit (formName) {
// 判断时间 // 判断时间
if(this.checkBeginEndTime()) return; if(this.checkBeginEndTime()) return;
if(this.isMessageForbidden()) return; if(this.isMessageForbidden()) return;
...@@ -474,6 +597,11 @@ export default { ...@@ -474,6 +597,11 @@ export default {
this.$tips({type:'warning',message:'人群筛选未保存条件'}) this.$tips({type:'warning',message:'人群筛选未保存条件'})
return; return;
} }
if (this.form.memberType === 1 && !this.form.memberGroupIds) {
this.$tips({type:'warning',message:'会员分组不能为空'});
return;
}
let params = { let params = {
ecmPlanId:this.form.ecmPlanId || '', ecmPlanId:this.form.ecmPlanId || '',
templateEcmPlanId:this.isAdd?this.ecmPlanId:'', templateEcmPlanId:this.isAdd?this.ecmPlanId:'',
...@@ -482,14 +610,27 @@ export default { ...@@ -482,14 +610,27 @@ export default {
effectTime:this.form.effectTime, //否 int effectType = 1每天时必填, 时效为时间为0-23 effectTime:this.form.effectTime, //否 int effectType = 1每天时必填, 时效为时间为0-23
effectAction:this.form.effectAction, // 否 string effectType = 0实时时必填, 关注触发: ‘subscribe’; 认证触发: ‘authentication’ effectAction:this.form.effectAction, // 否 string effectType = 0实时时必填, 关注触发: ‘subscribe’; 认证触发: ‘authentication’
marketingType:this.form.marketingType, //是 String 营销方式: 卡券营销: ‘card’; 短信营销 : ‘message’; 图文营销: ‘teletext’; 文本营销: ‘text’; 话务: ‘teltask’; 微信图片: ‘image’ marketingType:this.form.marketingType, //是 String 营销方式: 卡券营销: ‘card’; 短信营销 : ‘message’; 图文营销: ‘teletext’; 文本营销: ‘text’; 话务: ‘teltask’; 微信图片: ‘image’
memberSearchDTO:this.form.memberSearchDTO, memberType:this.form.memberType,
memberSearchDTO: this.form.memberType ? this.form.memberGroupIds : this.form.memberSearchDTO,
searchJson:this.getSaveData, searchJson:this.getSaveData,
expireType:this.form.expireType, expireType:this.form.expireType,
beginDate:this.form.expireType ? formateDateTimeByType(this.form.beginDate,'yyyy-MM-dd-HH-mm-ss') : '', beginDate:this.form.expireType ? formateDateTimeByType(this.form.beginDate,'yyyy-MM-dd-HH-mm-ss') : '',
endDate:this.form.expireType ? formateDateTimeByType(this.form.endDate,'yyyy-MM-dd-HH-mm-ss') : '', endDate:this.form.expireType ? formateDateTimeByType(this.form.endDate,'yyyy-MM-dd-HH-mm-ss') : '',
cardNoticeType:this.form.cardNoticeType, cardNoticeType:this.form.cardNoticeType,
templateNoticeFlag:this.form.templateNoticeFlag templateNoticeFlag:this.form.templateNoticeFlag,
gradeIds:this.form.gradeIds.join(',') || '',
marketingTimesType:this.form.marketingTimesType,
marketingTimes:this.form.marketingTimes,
}
// 如果是消费触发
if (this.form.effectAction === 'consume') {
params = Object.assign(params,{
lowest_cost:this.form.lowest_cost,
lowest_cost_count:this.form.lowest_cost_count,
store_mode:this.form.store_mode,
order_store:this.form.order_store
});
} }
if (this.form.effectType) { if (this.form.effectType) {
...@@ -537,6 +678,16 @@ export default { ...@@ -537,6 +678,16 @@ export default {
params.marketingTemplate = JSON.stringify(marketingTemplate); params.marketingTemplate = JSON.stringify(marketingTemplate);
} }
// 这里判断部分门店是否为空
if (this.form.store_mode) {
let data = await this.$refs.storeCard.getRightList();
if (!data.length) {
this.$tips({type:'warning',message:'部分门店不能为空'});
return;
}
}
this.$refs[formName].validate((valid) => { this.$refs[formName].validate((valid) => {
if (valid) { if (valid) {
this.saveEcmInfo(params); this.saveEcmInfo(params);
...@@ -570,6 +721,39 @@ export default { ...@@ -570,6 +721,39 @@ export default {
this.loading = false; this.loading = false;
}) })
}, },
//加载会员卡等级
getGradeList() {
return new Promise((resolve,reject) => {
klflStrategy({}).then(res => {
if (res.errorCode === 0) {
resolve(res.result.gradeList || []);
}
reject();
})
})
},
// 触发行为变化 会员卡升降级
effectActionChange(isInit = false) {
if (this.form.effectAction === 'upgrade') {
if (isInit !== true) this.form.gradeIds = [];
this.getGradeList().then(data => {
this.gradeList = data.map((v,i) => {
if (!i) {v.disabled = true}
return v;
})
// console.log(this.gradeList)
});
} else if (this.form.effectAction === 'degrade') {
if (isInit !== true) this.form.gradeIds = [];
this.getGradeList().then(data => {
this.gradeList = data.reverse().map((v,i) => {
if (!i) {v.disabled = true}
return v;
})
// console.log(this.gradeList )
})
}
},
/* ----------------辅助方法--------------- */ /* ----------------辅助方法--------------- */
// 对比开始时间结束时间 // 对比开始时间结束时间
...@@ -608,7 +792,21 @@ export default { ...@@ -608,7 +792,21 @@ export default {
hasCard(value) { hasCard(value) {
this.currentCard = value; this.currentCard = value;
}, },
// 初始化门店左侧数据
initStoreCardLeft() {
if (this.form.store_mode) {
if (this.isAdd) {
// 这里新增的情况下也要初始化 门店组件
this.$nextTick(_ => {
this.$refs.storeCard.init();
});
} else {
this.$nextTick(_ => {
this.$refs.storeCard.initLeftList();
})
}
}
},
/* ----------------人群筛选器的方法--------------- */ /* ----------------人群筛选器的方法--------------- */
getData() { getData() {
this.$refs.peopleFilter.confirmSet() this.$refs.peopleFilter.confirmSet()
...@@ -640,6 +838,15 @@ export default { ...@@ -640,6 +838,15 @@ export default {
this.toggleTag = false; this.toggleTag = false;
this.saveTag = false this.saveTag = false
}, },
handleDataTransferred(data) {
// 会员分组 情况下 memberSearchDTO 传数组字符串
if (this.form.memberType === 1) {
this.form.memberGroupIds = data.map(v => v.memberTagGroupId).filter(v => v).join(',');
}
},
handleDataLeft(selectedData, selectionToRemove) {
console.log(selectedData, selectionToRemove)
}
}, },
filters:{ filters:{
filterDate(val) { filterDate(val) {
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
<template>
<section class="dm-form__wrap">
<h3 class="dm-title__label">分享设置</h3>
<el-form-item label="分享到朋友圈" class="width50 is-required">
<el-radio-group v-model="shareGroup">
<el-radio :label="1">可分享</el-radio>
<el-radio :label="2">不可分享</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="分享给朋友" class="width50 is-required">
<el-radio-group v-model="shareFriend">
<el-radio :label="1">可分享</el-radio>
<el-radio :label="2">不可分享</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="分享图" class="width50 is-required">
<dm-upload-avatar :model.sync="shareImg" fileType="fileShare" label="上传图片" tips="图片建议尺寸:高度200px*200px" :disabled="isInfo"></dm-upload-avatar>
</el-form-item>
<el-form-item label="分享标题" prop="shareTitle" class="width50">
<dm-input v-model="shareTitle" class="w400" placeholder="请输入分享标题" :disabled="isInfo" :maxlength="20"></dm-input>
</el-form-item>
<el-form-item label="分享描述" prop="shareTextInfo" class="width50">
<dm-input type="textarea" class="w400" :rows="4" v-model="shareTextInfo" placeholder="请输入分享描述" :disabled="isInfo" :maxlength="50"></dm-input>
</el-form-item>
</section>
</template>
<script>
export default {
props:{
shareGroup: {
type: Number,
default: 1
},
shareFriend: {
type: Number,
default: 1
},
shareImg: {
type: Object,
default() {
return {
imgUrl: '',
code: ''
}
}
},
shareTitle: {
type: String,
default: ''
},
shareTextInfo : {
type:String,
default:''
},
isInfo: {
type: Boolean,
default:false
}
},
watch: {
childData : {
handler(val) {
},
deep:true
}
}
}
</script>
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
</el-input-number> 积分 </el-input-number> 积分
</el-form-item> </el-form-item>
</section> </section>
<section class="dm-form__wrap clearfix" > <section class="dm-form__wrap clearfix">
<h3 class="dm-title__label">参与门槛 <h3 class="dm-title__label">参与门槛
<i class="iconfont icon-xinxixianshi pl5 gray"></i> <i class="iconfont icon-xinxixianshi pl5 gray"></i>
<span class="gray fz13">满足参与门槛会员才可以参与游戏</span> <span class="gray fz13">满足参与门槛会员才可以参与游戏</span>
...@@ -111,6 +111,8 @@ ...@@ -111,6 +111,8 @@
</section> </section>
<!-- TODO 后期改造 -->
<!-- <shareCom :shareGroup="form.shareGroup"></shareCom> -->
<section class="dm-form__wrap"> <section class="dm-form__wrap">
<h3 class="dm-title__label">分享设置</h3> <h3 class="dm-title__label">分享设置</h3>
<el-form-item label="分享到朋友圈" class="width50 is-required"> <el-form-item label="分享到朋友圈" class="width50 is-required">
...@@ -126,7 +128,7 @@ ...@@ -126,7 +128,7 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="分享图" class="width50 is-required"> <el-form-item label="分享图" class="width50 is-required">
<dm-upload-avatar :model.sync="form.shareImg" fileType="fileShare" label="上传图片" tips="图片建议尺寸:高度200px*200px" :disabled="isInfo"></dm-upload-avatar> <dm-upload-avatar :model.sync="form.shareImg" fileType="fileShare" label="上传图片" tips="图片建议尺寸:高度300px*300px" :disabled="isInfo"></dm-upload-avatar>
</el-form-item> </el-form-item>
<el-form-item label="分享标题" prop="shareTitle" class="width50"> <el-form-item label="分享标题" prop="shareTitle" class="width50">
<dm-input v-model="form.shareTitle" class="w400" placeholder="请输入分享标题" :disabled="isInfo" :maxlength="20"></dm-input> <dm-input v-model="form.shareTitle" class="w400" placeholder="请输入分享标题" :disabled="isInfo" :maxlength="20"></dm-input>
...@@ -135,6 +137,15 @@ ...@@ -135,6 +137,15 @@
<dm-input type="textarea" class="w400" :rows="4" v-model="form.shareTextInfo" placeholder="请输入分享描述" :disabled="isInfo" :maxlength="50"></dm-input> <dm-input type="textarea" class="w400" :rows="4" v-model="form.shareTextInfo" placeholder="请输入分享描述" :disabled="isInfo" :maxlength="50"></dm-input>
</el-form-item> </el-form-item>
</section> </section>
<section class="dm-form__wrap">
<h3 class="dm-title__label">游戏背景音乐设置</h3>
<el-form-item label="开启音乐">
<el-radio-group v-model="form.shareGroup">
<el-radio :label="1">可分享</el-radio>
<el-radio :label="2">不可分享</el-radio>
</el-radio-group>
</el-form-item>
</section>
<div class="btn-wrap_fixed" :class="{'on':asideShow}" v-if="!isInfo"> <div class="btn-wrap_fixed" :class="{'on':asideShow}" v-if="!isInfo">
<el-button type="primary" @click="savePtyx('form')">保 存</el-button> <el-button type="primary" @click="savePtyx('form')">保 存</el-button>
<el-button @click="$router.go(-1)">返 回</el-button> <el-button @click="$router.go(-1)">返 回</el-button>
...@@ -149,7 +160,7 @@ import {numberToChinese,formateDateTimeByType} from '@/utils/index.js'; ...@@ -149,7 +160,7 @@ import {numberToChinese,formateDateTimeByType} from '@/utils/index.js';
import dmUploadAvatar from '@/components/upload/avatar'; import dmUploadAvatar from '@/components/upload/avatar';
import dmUploadImg from '@/components/upload/img'; import dmUploadImg from '@/components/upload/img';
import nonnegative from '@/mixins/nonnegative.js' import nonnegative from '@/mixins/nonnegative.js'
import shareCom from '../components/share';
let gameInfo = {}; let gameInfo = {};
export default { export default {
mixins:[nonnegative], mixins:[nonnegative],
...@@ -201,7 +212,8 @@ export default { ...@@ -201,7 +212,8 @@ export default {
}, },
components:{ components:{
dmUploadAvatar, dmUploadAvatar,
dmUploadImg dmUploadImg,
shareCom
}, },
computed: { computed: {
asideShow() { asideShow() {
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -20,15 +20,17 @@ ...@@ -20,15 +20,17 @@
<span class="dm-input_label">选择会员:</span> <span class="dm-input_label">选择会员:</span>
<el-radio v-model="info.memberType" :label="0">会员筛选</el-radio> <el-radio v-model="info.memberType" :label="0">会员筛选</el-radio>
<el-radio v-model="info.memberType" :label="1">指定会员</el-radio> <el-radio v-model="info.memberType" :label="1">指定会员</el-radio>
<el-radio v-model="info.memberType" :label="2">会员分组</el-radio>
</div> </div>
<div v-show="!info.memberType"> <div v-show="info.memberType === 0">
<vue-gic-people :projectName="projectName" :useId="useId" :hasSearchData="hasSearchData" :sceneValue="sceneValue" ref="peopleFilter" @findFilter="findFilter" @getBackData="getBackData" @editHide= "editHide" @editShow="editShow" @hideBtn="hideBtn"/> <vue-gic-people :projectName="projectName" :useId="useId" :hasSearchData="hasSearchData" :sceneValue="sceneValue" ref="peopleFilter" @findFilter="findFilter" @getBackData="getBackData" @editHide= "editHide" @editShow="editShow" @hideBtn="hideBtn"/>
<div class="gic-people--button" v-show="toggleTag"> <div class="gic-people--button" v-show="toggleTag">
<el-button size="small" type="primary" @click="getData">确 定</el-button> <el-button size="small" type="primary" @click="getData">确 定</el-button>
<el-button size="small" @click="cancelFilter">取 消</el-button> <el-button size="small" @click="cancelFilter">取 消</el-button>
</div> </div>
</div> </div>
<vue-gic-confirm-people v-if="info.memberType" idType="memberId" :onlyWxMember="0" @get-data="getConfirmData"></vue-gic-confirm-people> <vue-gic-confirm-people v-if="info.memberType === 1" idType="memberId" :onlyWxMember="0" :isMessage="true" @get-data="getConfirmData"></vue-gic-confirm-people>
<vue-gic-member-group v-if="info.memberType === 2" :defaltSelected="defaltSelected" :height='500' :projectName="projectName" :headerList='headerList' @handleDataTransferred="handleDataTransferred" @handleDataLeft="handleDataLeft"></vue-gic-member-group>
</section> </section>
<section class="dm-form__wrap"> <section class="dm-form__wrap">
<h3 class="dm-title__label">短信模板设置 <h3 class="dm-title__label">短信模板设置
...@@ -99,7 +101,13 @@ export default { ...@@ -99,7 +101,13 @@ export default {
openIds:'', openIds:'',
smsTemplateId:'', smsTemplateId:'',
}, },
smsType:0 // 短信类型 1为营销短信 营销短信要做判断 smsType:0, // 短信类型 1为营销短信 营销短信要做判断
// 会员分组可传参数
defaltSelected: [], // 默认穿梭窗已选入数据
projectName:'marketing', // 默认是memberTag
headerList: [ 'effectiveStatus',] // 表头配置,默认全部,分组名称默认显示不可配置
} }
}, },
components:{ components:{
...@@ -119,55 +127,29 @@ export default { ...@@ -119,55 +127,29 @@ export default {
let res = await sceneSettingList(); let res = await sceneSettingList();
this.sceneSettingIdOptions = res.result || []; this.sceneSettingIdOptions = res.result || [];
}, },
getData() {
this.$refs.peopleFilter.confirmSet()
},
// 子组件触发父组件事件,返回过滤条件数据
findFilter(value){
console.log(value)
this.info.memberSearchDTO = value;
},
// 取消
cancelFilter(){
this.$refs.peopleFilter.cancelSet()
},
// 获取需要回显的数据, 供保存时候使用
getBackData(val) {
this.getSaveData = val;
},
// 显示编辑,保存按钮隐藏,确认按钮显示 (子组件会调用)
editShow() {
this.toggleTag = true
this.saveTag = false
},
// 显示保存按钮,隐藏确认按钮显示 (子组件会调用)
editHide() {
this.toggleTag = false
this.saveTag = true
},
// 隐藏保存按钮和确认按钮 (子组件会调用)
hideBtn() {
this.toggleTag = false;
this.saveTag = false
},
//获取指定会员
getConfirmData(val) {
this.info.openIds = val;
},
onSmsItemInfo(val) { onSmsItemInfo(val) {
this.smsType = val.type; this.smsType = val.type;
console.log(val) console.log(val)
}, },
//提交表单验证人数 只有人员筛选需要 //提交表单验证人数 人员筛选和会员分组 需要
async checkMessageSendCount() { async checkMessageSendCount() {
if (!this.info.memberType) { if (this.info.memberType === 0 || this.info.memberType === 2) {
const params = { const params = {
memberSearchDTO:this.info.memberSearchDTO, memberSearchDTO:this.info.memberSearchDTO,
marketingType:0 marketingType:0,
// 区分人员筛选和会员分组,需要传这个flag
groupType: this.info.memberType === 0 ? 0 : 1
} }
const res = await checkMessageSendCount(params); const res = await checkMessageSendCount(params);
if (res.errorCode === 0) { if (res.errorCode === 0) {
this.$confirm(`合计发送${res.result}人,短信按67字/条分割成多条并按条计费,请注意控制短信文本长度,是否发送?`, '提示', { this.$confirm(`<div>
<div class="inline-block w300 vertical-middle ">
<p>短信按67字/条分割成多条并按条计费</p>
<p>合计发送${res.result}人,已过滤无手机号码会员</p>
<p>是否发送?</p>
</div>
</div>`, '提示', {
dangerouslyUseHTMLString: true,
confirmButtonText: '确定', confirmButtonText: '确定',
cancelBUttonText: '取消', cancelBUttonText: '取消',
type: 'warning' type: 'warning'
...@@ -196,7 +178,9 @@ export default { ...@@ -196,7 +178,9 @@ export default {
memberSearchDTO:this.info.memberSearchDTO, memberSearchDTO:this.info.memberSearchDTO,
searchJson:this.getSaveData searchJson:this.getSaveData
} }
if (this.info.memberType) { console.log(params);
// return;
if (this.info.memberType === 1) {
params.openIds = this.info.openIds; params.openIds = this.info.openIds;
} }
if (this.info.sendType) { if (this.info.sendType) {
...@@ -246,18 +230,64 @@ export default { ...@@ -246,18 +230,64 @@ export default {
this.$tips({type:'warning',message:'请选择短信模板'}); this.$tips({type:'warning',message:'请选择短信模板'});
return; return;
} }
if (this.info.memberType) { if (this.info.memberType === 1 && !this.info.openIds) {
if (!this.info.openIds) {
this.$tips({type:'warning',message:'指定会员不能为空'}); this.$tips({type:'warning',message:'指定会员不能为空'});
return; return;
} }
} else { if (this.info.memberType === 2 && !this.info.memberSearchDTO) {
// if (!this.info.memberSearchDTO) { this.$tips({type:'warning',message:'会员分组不能为空'});
// this.$tips({type:'warning',message:'会员筛选不能为空'}); return;
// return;
// }
} }
this.checkMessageSendCount(); this.checkMessageSendCount();
},
/** ----------人群筛选器的方法----------- */
//获取指定会员
getConfirmData(val) {
this.info.openIds = val;
},
getData() {
this.$refs.peopleFilter.confirmSet()
},
// 子组件触发父组件事件,返回过滤条件数据
findFilter(value){
console.log(value)
this.info.memberSearchDTO = value;
},
// 取消
cancelFilter(){
this.$refs.peopleFilter.cancelSet()
},
// 获取需要回显的数据, 供保存时候使用
getBackData(val) {
this.getSaveData = val;
},
// 显示编辑,保存按钮隐藏,确认按钮显示 (子组件会调用)
editShow() {
this.toggleTag = true
this.saveTag = false
},
// 显示保存按钮,隐藏确认按钮显示 (子组件会调用)
editHide() {
this.toggleTag = false
this.saveTag = true
},
// 隐藏保存按钮和确认按钮 (子组件会调用)
hideBtn() {
this.toggleTag = false;
this.saveTag = false
},
handleDataTransferred(data) {
// 会员分组 情况下 memberSearchDTO 传数组字符串
if (this.info.memberType === 2) {
this.info.memberSearchDTO = data.map(v => v.memberTagGroupId).filter(v => v).join(',');
}
// console.log(data);
},
handleDataLeft(selectedData, selectionToRemove) {
console.log(selectedData, selectionToRemove)
} }
}, },
} }
......
<template> <template>
<div> <div>
<el-form class="dm-form__wrap" ref="form" :model="messageInfo" label-width="90px"> <el-form class="dm-form__wrap" ref="form" :model="info" label-width="90px">
<h3 class="dm-title__label">基本信息</h3> <h3 class="dm-title__label">基本信息</h3>
<el-row :gutter="20" class="message-detail__label"> <el-row :gutter="20" class="message-detail__label">
<el-col :span="8"> <el-col :span="8">
<span class="primary-font-color">发送时间:</span> <span class="primary-font-color">发送时间:</span>
<span class="regular-font-color">{{formateDateTimeByType(messageInfo.sendTime,'yyyy-MM-dd-HH-mm-ss')}}</span> <span class="regular-font-color">{{formateDateTimeByType(info.sendTime,'yyyy-MM-dd-HH-mm-ss')}}</span>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<span class="primary-font-color">发送人数:</span> <span class="primary-font-color">发送人数:</span>
<span class="regular-font-color">{{messageInfo.sendCount}}</span> <span class="regular-font-color">{{info.sendCount}}</span>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<span class="primary-font-color">发送条数:</span> <span class="primary-font-color">发送条数:</span>
<span class="regular-font-color">{{messageInfo.countNum}}</span> <span class="regular-font-color">{{info.countNum}}</span>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<span class="primary-font-color">模板名称:</span> <span class="primary-font-color">模板名称:</span>
<span class="regular-font-color">{{messageInfo.templateName}}(ID:{{messageInfo.templateId}})</span> <span class="regular-font-color">{{info.templateName}}(ID:{{info.templateId}})</span>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<span class="primary-font-color">模板类型:</span> <span class="primary-font-color">模板类型:</span>
<span class="regular-font-color">{{messageInfo.sendType===0?'普通短信':'营销短信'}}</span> <span class="regular-font-color">{{info.sendType===0?'普通短信':'营销短信'}}</span>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<span class="primary-font-color">营销场景:</span> <span class="primary-font-color">营销场景:</span>
<span class="regular-font-color">{{messageInfo.sceneSettingName}}</span> <span class="regular-font-color">{{info.sceneSettingName}}</span>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<span class="primary-font-color">短信模板:</span> <span class="primary-font-color">短信模板:</span>
<span class="regular-font-color" style="max-width: 100%;overflow: auto;line-height:2;">{{messageInfo.templateContent}}</span> <span class="regular-font-color" style="max-width: 100%;overflow: auto;line-height:2;">{{info.templateContent}}</span>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="dm-form__wrap"> <section class="dm-form__wrap">
<h3 class="dm-title__label">会员设置</h3>
<div class="pt10 pb20">
<span class="dm-input_label">选择会员:</span>
<el-radio v-model="info.memberType" :label="0" disabled>会员筛选</el-radio>
<el-radio v-model="info.memberType" :label="1" disabled>指定会员</el-radio>
<el-radio v-model="info.memberType" :label="2" disabled>会员分组</el-radio>
</div>
<div v-show="!info.memberType">
<vue-gic-people :projectName="projectName" :useId="useId" :hasSearchData="hasSearchData" :sceneValue="sceneValue" ref="peopleFilter" @findFilter="findFilter" @getBackData="getBackData" @editHide= "editHide" @editShow="editShow" @hideBtn="hideBtn"/>
<div class="gic-people--button" v-show="toggleTag">
<el-button size="small" type="primary" @click="getData">确 定</el-button>
<el-button size="small" @click="cancelFilter">取 消</el-button>
</div>
</div>
<vue-gic-confirm-people v-if="info.memberType === 1" idType="memberId" :onlyWxMember="0" :isMessage="true" @get-data="getConfirmData" :list="memberList" :disabled="true"></vue-gic-confirm-people>
<vue-gic-member-group v-if="info.memberType === 2" :defaltSelected="defaltSelected" :height='500' :projectName="projectName" :headerList='headerList' @handleDataTransferred="handleDataTransferred" @handleDataLeft="handleDataLeft"></vue-gic-member-group>
</section>
<section class="dm-form__wrap">
<div class="clearfix pb22"> <div class="clearfix pb22">
<el-select class="dm-select" v-model="listParams.sendStatus" placeholder="选择发送状态" @change="LoadMessageDetailList"> <el-select class="dm-select" v-model="listParams.sendStatus" placeholder="选择发送状态" @change="LoadMessageDetailList">
<el-option v-for="(v,i) in sendStatusOptions" :key="i" :label="v.label" :value="v.value"></el-option></el-select> <el-option v-for="(v,i) in sendStatusOptions" :key="i" :label="v.label" :value="v.value"></el-option></el-select>
...@@ -71,7 +89,7 @@ ...@@ -71,7 +89,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-show="messageList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></el-pagination> <el-pagination v-show="messageList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></el-pagination>
</div> </section>
<error-code-dialog :show.sync="errorCodeShow"></error-code-dialog> <error-code-dialog :show.sync="errorCodeShow"></error-code-dialog>
</div> </div>
</template> </template>
...@@ -85,7 +103,11 @@ import filterAvatar from '@/mixins/filterAvater.js'; ...@@ -85,7 +103,11 @@ import filterAvatar from '@/mixins/filterAvater.js';
data() { data() {
return { return {
formateDateTimeByType, formateDateTimeByType,
messageInfo:{}, info:{
searchParams:'',
memberType:0,
},
memberList:[],
messageList:[], messageList:[],
messageLoading:false, messageLoading:false,
messageHeader:[ messageHeader:[
...@@ -108,7 +130,18 @@ import filterAvatar from '@/mixins/filterAvater.js'; ...@@ -108,7 +130,18 @@ import filterAvatar from '@/mixins/filterAvater.js';
}, },
total:0, total:0,
sendStatusOptions:[{value:'',label:'所有状态'},{value:0,label:'成功'},{value:1,label:'未发送'},{value:2,label:'失败'}], sendStatusOptions:[{value:'',label:'所有状态'},{value:0,label:'成功'},{value:1,label:'未发送'},{value:2,label:'失败'}],
errorCodeShow:false errorCodeShow:false,
// 人群筛选器可传参数
projectName: '', // 当前项目名
sceneValue: 'member', // 场景值
useId: '', // 模板id
hasSearchData: '' , // 当前页回显的数据(接口返回)
toggleTag: true, // 控制按钮显示的参数,仅供参考,可自行修改
getSaveData:'',
// 会员分组可传参数
defaltSelected: [], // 默认穿梭窗已选入数据
projectName:'marketing', // 默认是memberTag
headerList: [ 'effectiveStatus'] // 表头配置,默认全部,分组名称默认显示不可配置
}; };
}, },
created() { created() {
...@@ -129,7 +162,19 @@ import filterAvatar from '@/mixins/filterAvater.js'; ...@@ -129,7 +162,19 @@ import filterAvatar from '@/mixins/filterAvater.js';
let params = {smsId:id} let params = {smsId:id}
let res = await LoadMessageDetail(params); let res = await LoadMessageDetail(params);
console.log(res) console.log(res)
this.messageInfo = res.result || {}; this.info = res.result.smsDTO || {};
this.info.memberType = res.result.smsDTO.memberType;
if (this.info.memberType === 0) {
this.info.searchParams = res.result.smsDTO.searchParams;
this.hasSearchData = res.result.smsDTO.searchParams;
} else if (this.info.memberType === 1) {
this.$nextTick(_ => {
this.memberList = res.result.memberList || [];
});
} else if (this.info.memberType === 2) {
this.defaltSelected = res.result.tagGroupList || [];
}
}, },
async LoadMessageDetailList() { async LoadMessageDetailList() {
this.messageLoading = true; this.messageLoading = true;
...@@ -154,7 +199,49 @@ import filterAvatar from '@/mixins/filterAvater.js'; ...@@ -154,7 +199,49 @@ import filterAvatar from '@/mixins/filterAvater.js';
const downLoadUrl = url + res.result; const downLoadUrl = url + res.result;
window.location = downLoadUrl; window.location = downLoadUrl;
}) })
},
/** ----------人群筛选器的方法----------- */
//获取指定会员
getConfirmData(val) {
this.info.openIds = val;
},
getData() {
this.$refs.peopleFilter.confirmSet()
},
// 子组件触发父组件事件,返回过滤条件数据
findFilter(value){
console.log(value)
this.info.searchParams = value;
},
// 取消
cancelFilter(){
this.$refs.peopleFilter.cancelSet()
},
// 获取需要回显的数据, 供保存时候使用
getBackData(val) {
this.getSaveData = val;
},
// 显示编辑,保存按钮隐藏,确认按钮显示 (子组件会调用)
editShow() {
this.toggleTag = true
this.saveTag = false
},
// 显示保存按钮,隐藏确认按钮显示 (子组件会调用)
editHide() {
this.toggleTag = false
this.saveTag = true
},
// 隐藏保存按钮和确认按钮 (子组件会调用)
hideBtn() {
this.toggleTag = false;
this.saveTag = false
},
handleDataTransferred(data) {
},
handleDataLeft(selectedData, selectionToRemove) {
console.log(selectedData, selectionToRemove)
} }
} }
}; };
</script> </script>
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -56,7 +56,7 @@ import timeCounts from '@/components/timeCount/index.vue' ...@@ -56,7 +56,7 @@ import timeCounts from '@/components/timeCount/index.vue'
{value:4,label:'定时执行',type:'info'}, {value:4,label:'定时执行',type:'info'},
{value:5,label:'执行中',type:'primary--flash'}, {value:5,label:'执行中',type:'primary--flash'},
{value:-1,label:'已失效',type:'danger'}], {value:-1,label:'已失效',type:'danger'}],
sceneSettingIdOptions:[], sceneSettingIdOptions:[{sceneSettingId:-1,sceneName:"所有营销场景"}],
recordLoading:false, recordLoading:false,
messageList:[], messageList:[],
recordHeader:[ recordHeader:[
...@@ -146,8 +146,7 @@ import timeCounts from '@/components/timeCount/index.vue' ...@@ -146,8 +146,7 @@ import timeCounts from '@/components/timeCount/index.vue'
}, },
async sceneSettingList() { async sceneSettingList() {
let res = await sceneSettingList(); let res = await sceneSettingList();
this.sceneSettingIdOptions = res.result || []; this.sceneSettingIdOptions = this.sceneSettingIdOptions.concat(res.result || []);
this.sceneSettingIdOptions.unshift({sceneSettingId:-1,sceneName:"所有营销场景"});
}, },
filterStatus(val) { filterStatus(val) {
let result = {label:'执行错误',type:'warning'}; let result = {label:'执行错误',type:'warning'};
......
...@@ -4,8 +4,15 @@ ...@@ -4,8 +4,15 @@
<el-select class="dm-select" v-model="listParams.type" placeholder="选择营销场景" @change="search"> <el-select class="dm-select" v-model="listParams.type" placeholder="选择营销场景" @change="search">
<el-option v-for="(v,i) in libTypeOptions" :key="i" :label="v.label" :value="v.value"></el-option> <el-option v-for="(v,i) in libTypeOptions" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select> </el-select>
<el-date-picker class="w250" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="search"></el-date-picker>
<el-input v-model="listParams.content" class="w200" placeholder="输入模板名称/ID/内容" clearable @change="search"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input> <el-input v-model="listParams.content" class="w200" placeholder="输入模板名称/ID/内容" clearable @change="search"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-button class="fr" type="primary" @click="$router.push('/message/temp/add')">新建短信模板</el-button> <el-button class="fr" type="primary" @click="addTemp">新建短信模板</el-button>
<span class="fr pt10 pr20">
<el-tooltip effect="dark" placement="top" content="审核失败不占用模板数,删除模板可释放占用模板数。如需更多的短信模板请联系GIC运营。">
<i class="iconfont icon-xinxixianshi pl5 gray"></i>
</el-tooltip>
<span class="gray fz13">可用模板数: {{allUsableCount}} | 已用模板数:{{usedCount}}</span>
</span>
</div> </div>
<el-row :gutter="20" v-loading="loading"> <el-row :gutter="20" v-loading="loading">
<el-col :span="12" v-for="(v,i) in smsTempList" :key="i"> <el-col :span="12" v-for="(v,i) in smsTempList" :key="i">
...@@ -55,9 +62,14 @@ export default { ...@@ -55,9 +62,14 @@ export default {
type:'', type:'',
content:'', content:'',
currentPage:1, currentPage:1,
pageSize:20 pageSize:20,
startTime:'',
endTime:''
}, },
total:0, total:0,
allUsableCount:0,
usedCount:0,
dateTime:[]
} }
}, },
created() { created() {
...@@ -79,10 +91,18 @@ export default { ...@@ -79,10 +91,18 @@ export default {
}, },
async LoadLibList() { async LoadLibList() {
this.loading = true; this.loading = true;
if (this.dateTime) {
this.listParams.startTime = formateDateTimeByType(this.dateTime[0],'yyyy-MM-dd');
this.listParams.endTime = formateDateTimeByType(this.dateTime[1],'yyyy-MM-dd');
} else {
this.listParams.startTime = this.listParams.endTime = '';
}
try{ try{
let res = await LoadLibList(this.listParams); let res = await LoadLibList(this.listParams);
if(res.errorCode === 0 &&res.result){ if(res.errorCode === 0 &&res.result){
this.smsTempList = res.result.result || []; this.smsTempList = res.result.result || [];
this.allUsableCount = res.result.params.allUsableCount || 0;
this.usedCount = res.result.params.usedCount || 0;
this.total = res.result.totalCount; this.total = res.result.totalCount;
} else { } else {
this.smsTempList = []; this.smsTempList = [];
...@@ -93,6 +113,21 @@ export default { ...@@ -93,6 +113,21 @@ export default {
this.loading = false; this.loading = false;
} }
}, },
addTemp() {
if (this.usedCount >= this.allUsableCount) {
this.$alert(`<div>
<i class="el-icon-warning warning-color fz30 vertical-middle mr20"></i>
<p class="inline-block vertical-middle w300">已超过可用短信模板数量,请删除不用短信模板释放数量或直接与GIC运营联系。</p>
</div>`, '提示', {
dangerouslyUseHTMLString: true,
showCancelButton:true,
showConfirmButton:false,
cancelButtonText:'关 闭'
})
} else {
this.$router.push('/message/temp/add');
}
},
delData(row) { delData(row) {
delTempService({templateId:row.templateId,smsTemplateId:row.smsTemplateId}).then(res => { delTempService({templateId:row.templateId,smsTemplateId:row.smsTemplateId}).then(res => {
if (res.errorCode === 0) { if (res.errorCode === 0) {
......
...@@ -94,6 +94,17 @@ ...@@ -94,6 +94,17 @@
</div> </div>
</div> </div>
</section> </section>
<section class="dm-form__wrap" v-if="info.triggerCode === 'integralexpires'">
<h3 class="dm-title__label">发送时间配置</h3>
<el-form-item label="积分即将过期前" label-width="120px">
<el-input-number controls-position="right" v-model="info.remindDay"></el-input-number> 天发送该模板消息提醒。
</el-form-item>
<el-form-item label="发送时间设置" label-width="120px">
<el-select v-model="info.sendTime" class="w300">
<el-option v-for="(v,i) in dayOptions" :key="i" :value="v.value" :label="v.label"></el-option>
</el-select>
</el-form-item>
</section>
<div class="btn-wrap_fixed" :class="{'on':asideShow}"> <div class="btn-wrap_fixed" :class="{'on':asideShow}">
<el-button type="primary" @click="updateTempAdvice">保 存</el-button> <el-button type="primary" @click="updateTempAdvice">保 存</el-button>
<el-button @click="$router.go(-1)">返 回</el-button> <el-button @click="$router.go(-1)">返 回</el-button>
...@@ -116,6 +127,10 @@ export default { ...@@ -116,6 +127,10 @@ export default {
color1:'#173177', color1:'#173177',
templateKeyDataList:[], templateKeyDataList:[],
info:{ info:{
triggerCode:'',
sendTime:10,
sendType:0,
remindDay:3,
headerColor:'#173177', headerColor:'#173177',
remarkColor:'#173177', remarkColor:'#173177',
headerText:'', headerText:'',
...@@ -124,6 +139,7 @@ export default { ...@@ -124,6 +139,7 @@ export default {
app:{}, app:{},
h5:'http://' h5:'http://'
}, },
dayOptions:Array(15).fill().map((v,i) =>({value:i+8,label:i+8 + ':00'})),
formateDateTimeByType, formateDateTimeByType,
options:[], options:[],
checked1:false, checked1:false,
...@@ -235,6 +251,7 @@ export default { ...@@ -235,6 +251,7 @@ export default {
this.info.typeName = result.typeName; this.info.typeName = result.typeName;
this.info.header = result.header; this.info.header = result.header;
this.info.remark = result.remark; this.info.remark = result.remark;
this.info.triggerCode = result.triggerCode;
this.info.headerText = this.info.header ? this.info.header.split('#')[0] : ''; this.info.headerText = this.info.header ? this.info.header.split('#')[0] : '';
this.info.headerColor = this.info.header ? '#'+ (this.info.header.split('#')[1] || '173177') :'#173177'; this.info.headerColor = this.info.header ? '#'+ (this.info.header.split('#')[1] || '173177') :'#173177';
this.info.remarkText = this.info.remark ? this.info.remark.split('#')[0] :''; this.info.remarkText = this.info.remark ? this.info.remark.split('#')[0] :'';
...@@ -286,6 +303,13 @@ export default { ...@@ -286,6 +303,13 @@ export default {
} }
} }
} }
// 如果是积分即将过期
if (this.info.triggerCode === 'integralexpires') {
this.info.sendTime = parseInt(result.sendTime || 10);
this.info.sendType = 1;
this.info.remindDay = result.remindDay;
}
} }
this.loading = false; this.loading = false;
}, },
...@@ -342,6 +366,19 @@ export default { ...@@ -342,6 +366,19 @@ export default {
v.datas = v.type + v.color v.datas = v.type + v.color
}); });
params.list = this.templateKeyDataList; params.list = this.templateKeyDataList;
// 如果是积分即将过期
if (this.info.triggerCode === 'integralexpires') {
params.sendTime = this.info.sendTime ;
params.sendType = 1;
params.remindDay = this.info.remindDay;
} else {
params.sendType = 0;
}
let jumpUrlInfoJson = {},app = {},h5 = ''; let jumpUrlInfoJson = {},app = {},h5 = '';
if (this.checked1 && !this.checked2) { if (this.checked1 && !this.checked2) {
jumpUrlInfoJson = { jumpUrlInfoJson = {
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -25,15 +25,17 @@ ...@@ -25,15 +25,17 @@
<span class="dm-input_label">选择会员:</span> <span class="dm-input_label">选择会员:</span>
<el-radio v-model="info.memberType" :disabled="isInfo" :label="0">会员筛选</el-radio> <el-radio v-model="info.memberType" :disabled="isInfo" :label="0">会员筛选</el-radio>
<el-radio v-model="info.memberType" :disabled="isInfo" :label="1">指定会员</el-radio> <el-radio v-model="info.memberType" :disabled="isInfo" :label="1">指定会员</el-radio>
<el-radio v-model="info.memberType" :disabled="isInfo" :label="2">会员分组</el-radio>
</div> </div>
<div v-show="!info.memberType"> <div v-show="info.memberType === 0">
<vue-gic-people :projectName="projectName" :useId="useId" :hasSearchData="hasSearchData" :sceneValue="sceneValue" ref="peopleFilter" @findFilter="findFilter" @getBackData="getBackData" @editHide= "editHide" @editShow="editShow" @hideBtn="hideBtn"/> <vue-gic-people :projectName="projectName" :useId="useId" :hasSearchData="hasSearchData" :sceneValue="sceneValue" ref="peopleFilter" @findFilter="findFilter" @getBackData="getBackData" @editHide= "editHide" @editShow="editShow" @hideBtn="hideBtn"/>
<div class="gic-people--button" v-show="toggleTag"> <div class="gic-people--button" v-show="toggleTag">
<el-button size="small" type="primary" @click="getData">确 定</el-button> <el-button size="small" type="primary" @click="getData">确 定</el-button>
<el-button size="small" @click="cancelFilter">取 消</el-button> <el-button size="small" @click="cancelFilter">取 消</el-button>
</div> </div>
</div> </div>
<vue-gic-confirm-people v-show="info.memberType" @get-data="getConfirmData" :list="memberList"></vue-gic-confirm-people> <vue-gic-confirm-people v-show="info.memberType === 1" @get-data="getConfirmData" :list="memberList"></vue-gic-confirm-people>
<vue-gic-member-group v-if="info.memberType === 2" :defaltSelected="defaltSelected" :height='500' :projectName="projectName" :headerList='headerList' @handleDataTransferred="handleDataTransferred" @handleDataLeft="handleDataLeft"></vue-gic-member-group>
</section> </section>
<section class="dm-form__wrap" v-if="$route.meta.type !== 'imgText'"> <section class="dm-form__wrap" v-if="$route.meta.type !== 'imgText'">
<h3 class="dm-title__label">群发内容设置</h3> <h3 class="dm-title__label">群发内容设置</h3>
...@@ -49,10 +51,7 @@ ...@@ -49,10 +51,7 @@
</div> </div>
<dm-img-box v-show="info.contentType === 2" :mediaId="info.mediaId" @get-data="getImgData"></dm-img-box> <dm-img-box v-show="info.contentType === 2" :mediaId="info.mediaId" @get-data="getImgData"></dm-img-box>
<div v-show="info.contentType === 1"> <div v-show="info.contentType === 1">
<!-- <div class="tinymce-contain"> -->
<wxText :msgText="info.content" @listenWxText="getWxText"></wxText> <wxText :msgText="info.content" @listenWxText="getWxText"></wxText>
<!-- </div> -->
<!-- <vue-ueditor-wrap ref="ueditor" v-model="info.content" :destroy="false" :config="configs" @ready="ready" :init="myInit"></vue-ueditor-wrap> -->
</div> </div>
</div> </div>
</section> </section>
...@@ -108,7 +107,6 @@ export default { ...@@ -108,7 +107,6 @@ export default {
loading:false, loading:false,
pickerOptions: { pickerOptions: {
disabledDate(val) { disabledDate(val) {
// console.log(val.getTime())
return Date.now() >= (val.getTime() + 24*60*60*1000) return Date.now() >= (val.getTime() + 24*60*60*1000)
} }
}, },
...@@ -135,6 +133,7 @@ export default { ...@@ -135,6 +133,7 @@ export default {
contentType:0, contentType:0,
openIds:'', openIds:'',
memberSearchDTO:'', memberSearchDTO:'',
memberGroupIds:'',
imageTextId:'', imageTextId:'',
imageTextWechatId:'', imageTextWechatId:'',
wechatTextId:'', wechatTextId:'',
...@@ -148,6 +147,10 @@ export default { ...@@ -148,6 +147,10 @@ export default {
isAdd:this.$route.meta.type === 'add', isAdd:this.$route.meta.type === 'add',
isInfo:this.$route.meta.type === 'info', isInfo:this.$route.meta.type === 'info',
imgTextFlag:this.$route.meta.type === 'imgText', imgTextFlag:this.$route.meta.type === 'imgText',
// 会员分组可传参数
defaltSelected: [], // 默认穿梭窗已选入数据
projectName:'marketing', // 默认是memberTag
headerList: [ 'effectiveStatus'] // 表头配置,默认全部,分组名称默认显示不可配置
} }
}, },
created(){ created(){
...@@ -182,19 +185,20 @@ export default { ...@@ -182,19 +185,20 @@ export default {
this.info.sendType = result.sendType; this.info.sendType = result.sendType;
this.info.contentType = result.contentType; this.info.contentType = result.contentType;
this.info.memberType = result.memberType; this.info.memberType = result.memberType;
this.info.openIds = this.info.memberType?res.result.openIds:''; this.info.openIds = this.info.memberType === 1 ? res.result.openIds : '';
this.info.imageTextId = result.imageTextId || ''; this.info.imageTextId = result.imageTextId || '';
this.info.imageTextWechatId = result.imageTextWechatId || ''; this.info.imageTextWechatId = result.imageTextWechatId || '';
this.info.wechatTextId = result.wechatTextId || ''; this.info.wechatTextId = result.wechatTextId || '';
this.info.content = result.content || ''; this.info.content = result.content || '';
this.info.mediaId = result.mediaId || ''; this.info.mediaId = result.mediaId || '';
this.info.memberSearchDTO = result.searchParams
if (res.result.searchId) { if (res.result.searchId) {
this.useId = res.result.searchId this.useId = res.result.searchId
this.hasSearchData = result.searchParams; this.hasSearchData = result.searchParams;
} this.info.memberSearchDTO = result.searchParams
if (this.info.memberType) { } else if (this.info.memberType === 1) {
this.memberList = res.result.memberList; this.memberList = res.result.memberList;
} else if (this.info.memberType === 2) {
this.defaltSelected = res.result.tagGroupList || [];
} }
} }
}, },
...@@ -215,42 +219,6 @@ export default { ...@@ -215,42 +219,6 @@ export default {
let res = await sceneSettingList(); let res = await sceneSettingList();
this.sceneSettingIdOptions = res.result; this.sceneSettingIdOptions = res.result;
}, },
getData() {
this.$refs.peopleFilter.confirmSet()
},
// 子组件触发父组件事件,返回过滤条件数据
findFilter(value){
console.log(value)
this.info.memberSearchDTO = value;
},
// 取消
cancelFilter(){
this.$refs.peopleFilter.cancelSet()
},
// 获取需要回显的数据, 供保存时候使用
getBackData(val) {
this.getSaveData = val;
},
// 显示编辑,保存按钮隐藏,确认按钮显示 (子组件会调用)
editShow() {
this.toggleTag = true
this.saveTag = false
},
// 显示保存按钮,隐藏确认按钮显示 (子组件会调用)
editHide() {
this.toggleTag = false
this.saveTag = true
},
// 隐藏保存按钮和确认按钮 (子组件会调用)
hideBtn() {
this.toggleTag = false;
this.saveTag = false
},
//获取指定会员
getConfirmData(val) {
console.log(val)
this.info.openIds = val;
},
//获取图文 //获取图文
getImgTextData(val) { getImgTextData(val) {
this.info.imageTextId = val.imageTextId; this.info.imageTextId = val.imageTextId;
...@@ -284,18 +252,20 @@ export default { ...@@ -284,18 +252,20 @@ export default {
this.$tips({type:'warning',message:'请选择图片'}); this.$tips({type:'warning',message:'请选择图片'});
return; return;
} }
if (this.info.memberType) { if (this.info.memberType === 1 && !this.info.openIds) {
if (!this.info.openIds) {
this.$tips({type:'warning',message:'指定会员不能为空'}); this.$tips({type:'warning',message:'指定会员不能为空'});
return; return;
} }
if (this.info.memberType === 2 && !this.info.memberGroupIds) {
this.$tips({type:'warning',message:'会员分组不能为空'});
return;
} }
if (this.info.contentType === 1 ) { if (this.info.contentType === 1 ) {
console.log(this.info.textNum) console.log(this.info.textNum)
if(this.info.textNum >= 300){ if(this.info.textNum >= 300) {
this.$tips({type:'warning',message:'最多300个字符哦'}); this.$tips({type:'warning',message:'最多300个字符哦'});
return return;
} }
var reg = /<(?!(a|\/a|div|\/div|br)).*?>/img ; // 只保留a 和 div 标签 var reg = /<(?!(a|\/a|div|\/div|br)).*?>/img ; // 只保留a 和 div 标签
var str = this.info.content.replace(reg,""); var str = this.info.content.replace(reg,"");
...@@ -321,15 +291,17 @@ export default { ...@@ -321,15 +291,17 @@ export default {
this.info.content = str3 this.info.content = str3
} }
} }
this.checkMessageSendCount(); this.checkMessageSendCount();
}, },
//提交表单验证人数 只有人员筛选需要 //提交表单验证人数 只有人员筛选需要
async checkMessageSendCount() { async checkMessageSendCount() {
if (!this.info.memberType) { if (this.info.memberType === 0 || this.info.memberType === 2) {
const params = { const params = {
memberSearchDTO:this.info.memberSearchDTO, memberSearchDTO: this.info.memberType ? this.info.memberGroupIds : this.info.memberSearchDTO,
marketingType:1 marketingType:1,
// 区分人员筛选和会员分组,需要传这个flag
groupType: this.info.memberType === 0 ? 0 : 1
} }
const res = await checkMessageSendCount(params); const res = await checkMessageSendCount(params);
if (res.errorCode === 0) { if (res.errorCode === 0) {
...@@ -361,7 +333,7 @@ export default { ...@@ -361,7 +333,7 @@ export default {
contentType:this.info.contentType, contentType:this.info.contentType,
sendType:this.info.sendType, sendType:this.info.sendType,
sendTime:this.info.sendTime, sendTime:this.info.sendTime,
memberSearchDTO:this.info.memberSearchDTO, memberSearchDTO:this.info.memberType ? this.info.memberGroupIds : this.info.memberSearchDTO,
searchJson:this.getSaveData searchJson:this.getSaveData
} }
//微信营销主键ID (注意: 新建时null, 修改必传) //微信营销主键ID (注意: 新建时null, 修改必传)
...@@ -404,6 +376,53 @@ export default { ...@@ -404,6 +376,53 @@ export default {
}).catch(() => { }).catch(() => {
// this.$tips({type: 'info',message: '已取消提交'}); // this.$tips({type: 'info',message: '已取消提交'});
}); });
},
/** ----------人群筛选器的方法----------- */
getData() {
this.$refs.peopleFilter.confirmSet()
},
// 子组件触发父组件事件,返回过滤条件数据
findFilter(value){
console.log(value)
this.info.memberSearchDTO = value;
},
// 取消
cancelFilter(){
this.$refs.peopleFilter.cancelSet()
},
// 获取需要回显的数据, 供保存时候使用
getBackData(val) {
this.getSaveData = val;
},
// 显示编辑,保存按钮隐藏,确认按钮显示 (子组件会调用)
editShow() {
this.toggleTag = true
this.saveTag = false
},
// 显示保存按钮,隐藏确认按钮显示 (子组件会调用)
editHide() {
this.toggleTag = false
this.saveTag = true
},
// 隐藏保存按钮和确认按钮 (子组件会调用)
hideBtn() {
this.toggleTag = false;
this.saveTag = false
},
//获取指定会员
getConfirmData(val) {
console.log(val)
this.info.openIds = val;
},
handleDataTransferred(data) {
// 会员分组 情况下 memberSearchDTO 传数组字符串
if (this.info.memberType === 2) {
this.info.memberGroupIds = data.map(v => v.memberTagGroupId).filter(v => v).join(',');
}
},
handleDataLeft(selectedData, selectionToRemove) {
console.log(selectedData, selectionToRemove)
} }
} }
} }
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
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