forked from mkaoj697q/WeChat
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
6.8 KiB
189 lines
6.8 KiB
<template>
|
|
<el-dialog title="筛选模板消息目标用户" :close-on-click-modal="false" :visible.sync="visible">
|
|
<el-form :inline="true" :model="dataForm" ref="dataForm" clearable @keyup.enter.native="getWxUsers()">
|
|
<el-form-item>
|
|
<el-select v-model="dataForm.tagid" filterable placeholder="用户标签" @change="getWxUsers()">
|
|
<el-option v-for="item in wxUserTags" :key="item.id" :label="item.name" :value="item.id+''"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-input v-model="dataForm.nickname" placeholder="昵称" @change="getWxUsers()" clearable></el-input>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-input v-model="dataForm.province" placeholder="省份" @change="getWxUsers()" clearable></el-input>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-input v-model="dataForm.city" placeholder="城市" @change="getWxUsers()" clearable></el-input>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-input v-model="dataForm.remark" placeholder="备注" @change="getWxUsers()" clearable></el-input>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-input v-model="dataForm.qrScene" placeholder="扫码场景值" @change="getWxUsers()" clearable></el-input>
|
|
</el-form-item>
|
|
</el-form>
|
|
<div class="text-bold">本消息将发送给:</div>
|
|
<div class="user-list" v-loading="wxUsersLoading">
|
|
<div class="user-card" v-for="item in wxUserList" :key="item.openid">
|
|
<el-avatar :src="item.headimgurl"></el-avatar>
|
|
<div class="nickname">{{item.nickname}}</div>
|
|
</div>
|
|
<div class="text-bold">
|
|
<span v-show="totalCount>10">...</span>
|
|
等共<span class="text-success">{{totalCount}}</span>个用户
|
|
</div>
|
|
</div>
|
|
<div class="margin-top text-bold">消息预览:</div>
|
|
<div class="margin-top-xs">
|
|
<el-input type="textarea" disabled autosize v-model="msgReview" placeholder="模版"></el-input>
|
|
</div>
|
|
<span slot="footer" class="dialog-footer">
|
|
<el-button @click="send" type="success" :disabled="totalCount<=0 || sending">{{sending?'发送中...':'发送'}}</el-button>
|
|
<el-button @click="visible=false">关闭</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
</template>
|
|
<script>
|
|
import { mapState } from 'vuex'
|
|
export default {
|
|
name:'template-msg-task',
|
|
props:{
|
|
wxUserTagName:{
|
|
type:String,
|
|
required:false
|
|
}
|
|
},
|
|
data(){
|
|
return{
|
|
visible:false,
|
|
wxUsersLoading:false,
|
|
sending:false,
|
|
msgTemplate:{},
|
|
dataForm: {
|
|
page:1,
|
|
sidx: 'subscribe_time',
|
|
order: 'desc',
|
|
tagid:'',
|
|
nickname: '',
|
|
city:'',
|
|
province:'',
|
|
remark:'',
|
|
qrScene:''
|
|
},
|
|
wxUserList:[],
|
|
totalCount:0
|
|
}
|
|
},
|
|
computed: mapState({
|
|
wxUserTags:state=>state.wxUserTags.tags,
|
|
msgReview(){
|
|
if(!this.msgTemplate.data) return ""
|
|
let content = this.msgTemplate.content
|
|
this.msgTemplate.data.forEach(item=>{
|
|
content = content.replace("{{"+item.name+".DATA}}",item.value)
|
|
})
|
|
return content
|
|
}
|
|
}),
|
|
mounted() {
|
|
this.getWxUserTags().then((taglist)=>{
|
|
if(this.wxUserTagName){
|
|
let tagItem = taglist.find(tag=>tag.name==this.wxUserTagName)
|
|
console.log(tagItem)
|
|
if(tagItem) {
|
|
this.dataForm.tagid=tagItem.id+''
|
|
}
|
|
}
|
|
this.getWxUsers()
|
|
});
|
|
},
|
|
methods:{
|
|
init(msgTemplate){
|
|
if(!msgTemplate || !msgTemplate.templateId){
|
|
this.$message.error('消息模板无效')
|
|
return
|
|
}
|
|
if(!msgTemplate.data || !(msgTemplate.data instanceof Array)){
|
|
this.$message.error('请现配置此模板填充数据')
|
|
return
|
|
}
|
|
this.msgTemplate=msgTemplate
|
|
this.visible=true;
|
|
},
|
|
getWxUserTags() {
|
|
return new Promise((resolve,reject)=>{
|
|
this.$http({
|
|
url: this.$http.adornUrl('/manage/wxUserTags/list'),
|
|
method: 'get',
|
|
}).then(({ data }) => {
|
|
if (data && data.code === 200) {
|
|
this.$store.commit('wxUserTags/updateTags', data.list)
|
|
resolve(data.list)
|
|
} else {
|
|
this.$message.error(data.msg)
|
|
reject(data.msg)
|
|
}
|
|
}).catch(err=>reject(err))
|
|
})
|
|
},
|
|
getWxUsers() {
|
|
this.wxUsersLoading = true
|
|
this.$http({
|
|
url: this.$http.adornUrl('/manage/wxUser/list'),
|
|
method: 'get',
|
|
params: this.$http.adornParams(this.dataForm)
|
|
}).then(({ data }) => {
|
|
if (data && data.code === 200) {
|
|
this.wxUserList = data.page.list
|
|
this.totalCount = data.page.totalCount
|
|
} else {
|
|
this.$message.error(data.msg)
|
|
}
|
|
this.wxUsersLoading = false
|
|
})
|
|
},
|
|
send(){
|
|
if(this.sending)return
|
|
this.sending=true
|
|
this.$http({
|
|
url: this.$http.adornUrl('/manage/msgTemplate/sendMsgBatch'),
|
|
method: 'post',
|
|
data:this.$http.adornData({
|
|
wxUserFilterParams : this.dataForm,
|
|
templateId : this.msgTemplate.templateId,
|
|
url : this.msgTemplate.url,
|
|
miniprogram : this.msgTemplate.miniprogram,
|
|
data : this.msgTemplate.data,
|
|
})
|
|
}).then(({ data }) => {
|
|
this.sending = false
|
|
if (data && data.code === 200) {
|
|
this.$message.success("消息将在后台发送")
|
|
this.visible=false
|
|
} else {
|
|
this.$message.error(data.msg)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
<style scoped>
|
|
.user-list{
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
}
|
|
.user-card{
|
|
overflow: hidden;
|
|
max-width: 60px;
|
|
margin: 5px;
|
|
text-align: center;
|
|
}
|
|
.nickname{
|
|
color: #999999;
|
|
overflow: hidden;
|
|
text-overflow:ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
</style> |