协同宣发
This commit is contained in:
		| @@ -15,12 +15,12 @@ | ||||
|                 </el-form-item> | ||||
|                 <el-form-item label="发送范围" style="width: 100%;" prop="sendScope" :rules="[{ required: true, message: '请选择发送范围', trigger: 'change' }]"> | ||||
|                   <el-radio-group v-model="form.sendScope" @change="onScopeChange"> | ||||
|                     <el-radio label="0">全部居民群</el-radio> | ||||
|                     <el-radio label="0">全部居民</el-radio> | ||||
|                     <el-radio label="1">按部门选择</el-radio> | ||||
|                     <el-radio label="2">按网格选择</el-radio> | ||||
|                   </el-radio-group> | ||||
|                 </el-form-item> | ||||
|                 <el-form-item label="添加人" v-if="form.sendScope !== '0'" prop="wxGroupsName" style="width: 100%;" :rules="[{ required: true, message: '请选择选择群主', trigger: 'change' }]"> | ||||
|                 <el-form-item label="添加人" v-if="form.sendScope !== '0'" prop="wxGroupsName" style="width: 100%;" :rules="[{ required: true, message: '请选择添加人', trigger: 'change' }]"> | ||||
|                   <ai-picker | ||||
|                     :instance="instance" | ||||
|                     multiple | ||||
| @@ -33,14 +33,59 @@ | ||||
|                     @change="onSelcetChange"> | ||||
|                     <div class="AppAnnounceDetail-select"> | ||||
|                       <el-input size="small" class="AppAnnounceDetail-select__input" placeholder="请选择..." disabled v-model="form.wxGroupsName"></el-input> | ||||
|                       <div class="select-left" v-if="form.wxGroups.length"> | ||||
|                         <span v-for="(item, index) in form.wxGroups" :key="index" v-if="index < 9">{{ item.groupOwnerName }}</span> | ||||
|                         <em v-if="form.wxGroups.length > 9">等{{ form.wxGroups.length }}个</em> | ||||
|                       <div class="select-left" v-if="form.groupList.length"> | ||||
|                         <span v-for="(item, index) in form.groupList" :key="index" v-if="index < 9">{{ item.userName }}</span> | ||||
|                         <em v-if="form.groupList.length > 9">等{{ form.groupList.length }}个</em> | ||||
|                       </div> | ||||
|                       <i v-if="!form.wxGroups.length">请选择</i> | ||||
|                       <div class="select-right">{{ form.filterCriteria.length ? '重新选择' : '选择' }}</div> | ||||
|                       <i v-if="!form.groupList.length">请选择</i> | ||||
|                       <div class="select-right">{{ form.groupList.length ? '重新选择' : '选择' }}</div> | ||||
|                     </div> | ||||
|                   </ai-picker> | ||||
|                   <div class="filter-item"> | ||||
|                     <label>添加时间</label> | ||||
|                     <el-date-picker | ||||
|                       type="daterange" | ||||
|                       align="right" | ||||
|                       unlink-panels | ||||
|                       size="small" | ||||
|                       v-model="form.addTime" | ||||
|                       value-format="yyyy-MM-dd" | ||||
|                       range-separator="至" | ||||
|                       start-placeholder="开始日期" | ||||
|                       end-placeholder="结束日期" | ||||
|                       @change="getWxGroups"> | ||||
|                     </el-date-picker> | ||||
|                   </div> | ||||
|                   <div class="filter-item"> | ||||
|                     <label>标签</label> | ||||
|                     <div class="AppAnnounceDetail-select" @click="isShowTags = true"> | ||||
|                       <el-input class="AppAnnounceDetail-select__input" size="small" placeholder="请选择..." v-model="form.filterTagsName"></el-input> | ||||
|                       <div class="select-left" v-if="form.filterTags.length"> | ||||
|                         <span v-for="(item, index) in form.filterTags" :key="index">{{ item.name }}</span> | ||||
|                       </div> | ||||
|                       <i v-if="!form.filterTags.length">请选择</i> | ||||
|                       <div class="select-right">{{ form.filterTags.length ? '重新选择' : '选择' }}</div> | ||||
|                     </div> | ||||
|                   </div> | ||||
|                   <div class="filter-item"> | ||||
|                     <label>剔除标签</label> | ||||
|                     <div class="AppAnnounceDetail-select" @click="isShowRemoveTags = true"> | ||||
|                       <el-input class="AppAnnounceDetail-select__input" size="small" placeholder="请选择..." v-model="form.excludeFilterTagsName"></el-input> | ||||
|                       <div class="select-left" v-if="form.excludeFilterTags.length"> | ||||
|                         <span v-for="(item, index) in form.excludeFilterTags" :key="index">{{ item.name }}</span> | ||||
|                       </div> | ||||
|                       <i v-if="!form.excludeFilterTags.length">请选择</i> | ||||
|                         <div class="select-right">{{ form.excludeFilterTags.length ? '重新选择' : '选择' }}</div> | ||||
|                     </div> | ||||
|                   </div> | ||||
|                   <div class="filter-item"> | ||||
|                     <label>性别</label> | ||||
|                     <el-radio-group v-model="form.gender" @change="getWxGroups"> | ||||
|                       <el-radio label="2">全部</el-radio> | ||||
|                       <el-radio label="1">男</el-radio> | ||||
|                       <el-radio label="0">女</el-radio> | ||||
|                     </el-radio-group> | ||||
|                   </div> | ||||
|                   <div class="tips"> | ||||
|                     <p>消息预计送达居民数:</p> | ||||
|                     <span>{{ groupLen }}</span> | ||||
| @@ -51,47 +96,6 @@ | ||||
|                     </el-tooltip> | ||||
|                   </div> | ||||
|                 </el-form-item> | ||||
|                 <el-form-item label="添加时间" v-if="form.sendScope !== '0'" prop="wxGroupsName"> | ||||
|                   <el-date-picker | ||||
|                     type="daterange" | ||||
|                     align="right" | ||||
|                     unlink-panels | ||||
|                     size="small" | ||||
|                     range-separator="至" | ||||
|                     start-placeholder="开始日期" | ||||
|                     end-placeholder="结束日期"> | ||||
|                   </el-date-picker> | ||||
|                 </el-form-item> | ||||
|                 <el-form-item label="标签" style="width: 100%" v-if="form.sendScope !== '0'" prop="wxGroupsName"> | ||||
|                   <div class="AppAnnounceDetail-select" @click="isShowTags = true"> | ||||
|                     <el-input class="AppAnnounceDetail-select__input" size="small" placeholder="请选择..." v-model="form.examinesName"></el-input> | ||||
|                     <div class="select-left" v-if="form.examines.length"> | ||||
|                       <span v-for="(item, index) in form.examines" :key="index"> | ||||
|                         <ai-open-data type="userName" :openid="item.wxOpenUserId"></ai-open-data> | ||||
|                       </span> | ||||
|                     </div> | ||||
|                     <i v-if="!form.examines.length">请选择</i> | ||||
|                       <div class="select-right">{{ form.examines.length ? '重新选择' : '选择' }}</div> | ||||
|                   </div> | ||||
|                 </el-form-item> | ||||
|                 <el-form-item label="剔除标签" style="width: 100%" v-if="form.sendScope !== '0'" prop="wxGroupsName"> | ||||
|                   <div class="AppAnnounceDetail-select" @click="isShowTags = true"> | ||||
|                     <el-input class="AppAnnounceDetail-select__input" size="small" placeholder="请选择..." v-model="form.examinesName"></el-input> | ||||
|                     <div class="select-left" v-if="form.examines.length"> | ||||
|                       <span v-for="(item, index) in form.examines" :key="index"> | ||||
|                         <ai-open-data type="userName" :openid="item.wxOpenUserId"></ai-open-data> | ||||
|                       </span> | ||||
|                     </div> | ||||
|                     <i v-if="!form.examines.length">请选择</i> | ||||
|                       <div class="select-right">{{ form.examines.length ? '重新选择' : '选择' }}</div> | ||||
|                   </div> | ||||
|                 </el-form-item> | ||||
|                 <el-form-item v-if="form.sendScope !== '0'" label="性别" style="width: 100%;" prop="sendScope" :rules="[{ required: true, message: '请选择性别', trigger: 'change' }]"> | ||||
|                   <el-radio-group v-model="form.sendScope" @change="onScopeChange"> | ||||
|                     <el-radio label="0">男</el-radio> | ||||
|                     <el-radio label="1">女</el-radio> | ||||
|                   </el-radio-group> | ||||
|                 </el-form-item> | ||||
|                 <el-form-item label="发送内容" prop="content" style="width: 100%;" :rules="[{ required: true, message: '请输入发送内容', trigger: 'blur' }]"> | ||||
|                   <el-input size="small" type="textarea" :rows="6" maxlength="1300" show-word-limit placeholder="请输入文本内容..." v-model="form.content"></el-input> | ||||
|                   <div class="add"> | ||||
| @@ -177,6 +181,17 @@ | ||||
|                     <em>从本地上传,图片最大支持10MB,支持JPG,PNG格式;视频最大支持10MB,支持MP4格式;文件最大支持20MB</em> | ||||
|                   </div> | ||||
|                 </el-form-item> | ||||
|                 <el-form-item label="任务结束时间" style="width: 100%;" prop="taskEndTime" :rules="[{ required: true, message: '请选择任务结束时间', trigger: 'change' }]"> | ||||
|                   <el-date-picker | ||||
|                     style="width: 100%;" | ||||
|                     v-model="form.taskEndTime" | ||||
|                     type="datetime" | ||||
|                     size="small" | ||||
|                     :picker-options="pickerOptions" | ||||
|                     value-format="yyyy-MM-dd HH:mm:ss" | ||||
|                     placeholder="请选择任务结束时间"> | ||||
|                   </el-date-picker> | ||||
|                 </el-form-item> | ||||
|                 <el-form-item label="宣发审批" prop="enableExamine" style="width: 100%;" :rules="[{ required: true, message: '请输入任务名称', trigger: 'blur' }]"> | ||||
|                   <el-switch | ||||
|                       v-model="form.enableExamine" | ||||
| @@ -310,7 +325,7 @@ | ||||
|         <ai-dialog | ||||
|           :visible.sync="isShowTags" | ||||
|           width="800px" | ||||
|           :title="isRemoveTag ? '批量移除标签' : '批量打标签'" | ||||
|           title="批量打标签" | ||||
|           @close="onClose" | ||||
|           @onConfirm="onTagsConfirm"> | ||||
|           <div class="tags"> | ||||
| @@ -318,9 +333,30 @@ | ||||
|               <h2>{{ item.name }}</h2> | ||||
|               <div class="tag-item__right"> | ||||
|                 <el-button | ||||
|                   :type="chooseTags.indexOf(item.id) === -1 ? '' : 'primary'" | ||||
|                   :type="chooseTags.map(v => v.id).indexOf(item.id) === -1 ? '' : 'primary'" | ||||
|                   v-for="(item, index) in item.tagList" | ||||
|                   @click="choose(item.id)" | ||||
|                   @click="choose(item)" | ||||
|                   :key="index"> | ||||
|                   {{ item.name }} | ||||
|                 </el-button> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|         </ai-dialog> | ||||
|         <ai-dialog | ||||
|           :visible.sync="isShowRemoveTags" | ||||
|           width="800px" | ||||
|           title="批量移除标签" | ||||
|           @close="onClose" | ||||
|           @onConfirm="onRemoveTagsConfirm"> | ||||
|           <div class="tags"> | ||||
|             <div class="tag-item" v-for="(item, index) in tags" :key="index"> | ||||
|               <h2>{{ item.name }}</h2> | ||||
|               <div class="tag-item__right"> | ||||
|                 <el-button | ||||
|                   :type="removeTags.map(v => v.id).indexOf(item.id) === -1 ? '' : 'primary'" | ||||
|                   v-for="(item, index) in item.tagList" | ||||
|                   @click="removeChoose(item)" | ||||
|                   :key="index"> | ||||
|                   {{ item.name }} | ||||
|                 </el-button> | ||||
| @@ -364,11 +400,13 @@ export default { | ||||
|       isRemoveTag: false, | ||||
|       fileList: [], | ||||
|       tags: [], | ||||
|       isShowRemoveTags: false, | ||||
|       isShowAddLink: false, | ||||
|       isShowAddMiniapp: false, | ||||
|       isShowDate: false, | ||||
|       isShowTags: false, | ||||
|       chooseTags: [], | ||||
|       removeTags: [], | ||||
|       isLoading: false, | ||||
|       linkForm: { | ||||
|         linkPicUrl: [], | ||||
| @@ -391,14 +429,23 @@ export default { | ||||
|         contents: [], | ||||
|         enableExamine: '0', | ||||
|         examines: [], | ||||
|         wxGroups: [], | ||||
|         wxGroupsName: '', | ||||
|         sendScope: '0', | ||||
|         sendType: 0, | ||||
|         name: '', | ||||
|         taskEndTime: '', | ||||
|         groupList: [], | ||||
|         addTime: '', | ||||
|         gender: '2', | ||||
|         addEndTime: '', | ||||
|         addFromTime: '', | ||||
|         filterCriteria: [], | ||||
|         taskTitle: '', | ||||
|         examinesName: '' | ||||
|         examinesName: '', | ||||
|         filterTags: [], | ||||
|         filterTagsName: '', | ||||
|         excludeFilterTagsName: '', | ||||
|         excludeFilterTags: [] | ||||
|       }, | ||||
|       girdNames: '', | ||||
|       id: '', | ||||
| @@ -415,12 +462,7 @@ export default { | ||||
|     ...mapState(['user']), | ||||
|  | ||||
|     groupLen() { | ||||
|       let i = 0 | ||||
|       this.form.wxGroups.forEach(v => { | ||||
|         i = i + v.groupIds.split(',').length | ||||
|       }) | ||||
|  | ||||
|       return i | ||||
|       return this.form.groupList.length | ||||
|     } | ||||
|   }, | ||||
|  | ||||
| @@ -447,6 +489,15 @@ export default { | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     removeChoose (id) { | ||||
|       const index = this.removeTags.indexOf(id) | ||||
|       if (index === -1) { | ||||
|         this.removeTags.push(id) | ||||
|       } else { | ||||
|         this.removeTags.splice(index, 1) | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     getTags () { | ||||
|       this.instance.post(`/app/wxcp/wxcorptag/listAll?size=100`).then(res => { | ||||
|         if (res.code == 0) { | ||||
| @@ -455,18 +506,34 @@ export default { | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     onTagsConfirm () { | ||||
|     onRemoveTagsConfirm () { | ||||
|       this.form.excludeFilterTagsName = this.removeTags.map(v => v.name).join(',') | ||||
|       this.form.excludeFilterTags = [...this.removeTags] | ||||
|  | ||||
|       this.isShowRemoveTags = false | ||||
|  | ||||
|       this.getWxGroups() | ||||
|     }, | ||||
|  | ||||
|     onTagsConfirm () { | ||||
|       this.form.filterTagsName = this.chooseTags.map(v => v.name).join(',') | ||||
|       this.form.filterTags = [...this.chooseTags] | ||||
|  | ||||
|       this.isShowTags = false | ||||
|       this.getWxGroups() | ||||
|     }, | ||||
|  | ||||
|     getInfo(id) { | ||||
|       this.instance.post(`/app/appmasssendingtask/queryDetailById?id=${id}`).then(res => { | ||||
|       this.instance.post(`/app/whchatmomentstask/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.form = { | ||||
|             ...this.form, | ||||
|             ...res.data, | ||||
|             wxGroupsName: '1', | ||||
|             filterCriteria: res.data.filterCriteria.split(',') | ||||
|             filterTags: res.data.filterTags ? res.data.filterTags.split(',') : [], | ||||
|             excludeFilterTags: res.data.excludeFilterTags ? res.data.excludeFilterTags.split(',') : [], | ||||
|             filterCriteria: res.data.filterCriteria.split(','), | ||||
|             addTime: res.data.addEndTime ? [res.data.addFromTime, res.data.addEndTime] : '' | ||||
|           } | ||||
|  | ||||
|           if (res.data.girdNames) { | ||||
| @@ -514,11 +581,14 @@ export default { | ||||
|  | ||||
|     onScopeChange(e) { | ||||
|       this.form.filterCriteria = [] | ||||
|       this.form.wxGroups = [] | ||||
|       this.form.groupList = [] | ||||
|       this.girdNames = '' | ||||
|       this.form.wxGroupsName = '' | ||||
|  | ||||
|       if (e === '0') { | ||||
|         this.getWxGroups() | ||||
|         this.$nextTick(() => { | ||||
|           this.getWxGroups() | ||||
|         }) | ||||
|       } else { | ||||
|         this.form.filterCriteria = [] | ||||
|       } | ||||
| @@ -539,22 +609,23 @@ export default { | ||||
|         }) | ||||
|       } else { | ||||
|         this.form.wxGroupsName = '' | ||||
|         this.form.wxGroups = [] | ||||
|         this.form.groupList = [] | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     getWxGroups() { | ||||
|       this.instance.post(`/app/appmasssendingtask/queryWxGroups?sendScope=${this.form.sendScope}`, null, { | ||||
|         data: { | ||||
|           filterCriteria: this.form.filterCriteria.join(',') | ||||
|         }, | ||||
|         headers: {'Content-Type': 'application/json;charset=utf-8'}, | ||||
|         transformRequest: [function (data) { | ||||
|           return data.filterCriteria | ||||
|         }] | ||||
|       this.instance.post(`/app/whchatmomentstask/getSendScope`, { | ||||
|         sendScope: this.form.sendScope, | ||||
|         tags: this.form.filterTags.map(v => v.id).join(','), | ||||
|         filterCriteria: this.form.filterCriteria.join(','), | ||||
|         taskType: 1, | ||||
|         gender: this.form.gender, | ||||
|         excludeTags: this.form.excludeFilterTags.map(v => v.id).join(','), | ||||
|         addEndTime: this.form.addTime ? this.form.addTime[0] : '', | ||||
|         addFromTime: this.form.addTime ? this.form.addTime[1] : '' | ||||
|       }).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.form.wxGroups = res.data | ||||
|           this.form.groupList = res.data | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
| @@ -689,8 +760,8 @@ export default { | ||||
|     confirm(sendType) { | ||||
|       this.$refs.form.validate((valid) => { | ||||
|         if (valid) { | ||||
|           if (!this.form.wxGroups.length) { | ||||
|             return this.$message.error('居民群数量不能为0') | ||||
|           if (!this.form.groupList.length) { | ||||
|             return this.$message.error('居民数量不能为0') | ||||
|           } | ||||
|  | ||||
|           if (sendType === 1 && !this.dateForm.choiceTime) { | ||||
| @@ -711,12 +782,17 @@ export default { | ||||
|           } else { | ||||
|             this.isLoading2 = true | ||||
|           } | ||||
|           this.instance.post(`/app/appmasssendingtask/addOrUpdate`, { | ||||
|           this.instance.post(`/app/whchatmomentstask/addOrUpdate`, { | ||||
|             ...this.form, | ||||
|             id: this.params.id, | ||||
|             wxGroups: this.form.wxGroups, | ||||
|             groupList: this.form.groupList, | ||||
|             contents, | ||||
|             sendType, | ||||
|             taskType: 1, | ||||
|             excludeFilterTags: this.form.excludeFilterTags.map(v => v.id).join(','), | ||||
|             addEndTime: this.form.addTime ? this.form.addTime[0] : '', | ||||
|             addFromTime: this.form.addTime ? this.form.addTime[1] : '', | ||||
|             filterTags: this.form.filterTags.map(v => v.id).join(','), | ||||
|             choiceTime: this.dateForm.choiceTime, | ||||
|             filterCriteria: this.form.filterCriteria.join(','), | ||||
|             examines: this.form.examines.length ? this.form.examines.map(v => { | ||||
| @@ -836,6 +912,22 @@ export default { | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .filter-item { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     margin-top: 20px; | ||||
|  | ||||
|     .AppAnnounceDetail-select { | ||||
|       flex: 1; | ||||
|     } | ||||
|  | ||||
|     label { | ||||
|       width: 60px; | ||||
|       margin-right: 20px; | ||||
|       color: #666; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .ai-form { | ||||
|     textarea { | ||||
|       border-radius: 4px 4px 0 0!important; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user