Merge remote-tracking branch 'origin/build' into build
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; | ||||
|   | ||||
| @@ -26,7 +26,7 @@ | ||||
|               <div class="user"> | ||||
|                 <img src="https://cdn.cunwuyun.cn/dvcp/announce/user.png" /> | ||||
|                 <span>{{ info.createUserName }}</span> | ||||
|                 (<span>{{ info.createUserDeptName }}</span>) | ||||
|                 <span>({{ info.createUserDeptName }})</span> | ||||
|               </div> | ||||
|             </ai-info-item> | ||||
|             <ai-info-item label="审批人" isLine v-if="info.enableExamine === '1'"> | ||||
| @@ -42,8 +42,8 @@ | ||||
|             <ai-info-item label="群发范围" isLine> | ||||
|               <div class="text"> | ||||
|                 <span>{{ info.sendScope === '0' ? '全部' : '按条件筛选的' }}</span> | ||||
|                 <i>{{ groups.length }}</i> | ||||
|                 <span>个居民群</span> | ||||
|                 <i>{{ info.groupList.length }}</i> | ||||
|                 <span>个居民</span> | ||||
|                 <em @click="isShowGroups = true">详情</em> | ||||
|               </div> | ||||
|             </ai-info-item> | ||||
| @@ -73,25 +73,25 @@ | ||||
|             <div class="top"> | ||||
|               <div class="top-item"> | ||||
|                 <div class="top-item__title"> | ||||
|                   <h3>计划执行成员</h3> | ||||
|                   <h3>预计执行员工</h3> | ||||
|                 </div> | ||||
|                 <p>{{ memberInfo.planCount || 0 }}</p> | ||||
|               </div> | ||||
|               <div class="top-item"> | ||||
|                 <div class="top-item__title"> | ||||
|                   <h3>未执行成员</h3> | ||||
|                   <h3>未执行员工</h3> | ||||
|                 </div> | ||||
|                 <p>{{ memberInfo.unExecutedCount || 0 }}</p> | ||||
|               </div> | ||||
|               <div class="top-item"> | ||||
|                 <div class="top-item__title"> | ||||
|                   <h3>已执行成员</h3> | ||||
|                   <h3>已执行员工</h3> | ||||
|                 </div> | ||||
|                 <p>{{ memberInfo.executedCount || 0 }}</p> | ||||
|               </div> | ||||
|               <div class="top-item"> | ||||
|                 <div class="top-item__title"> | ||||
|                   <h3>无法执行成员</h3> | ||||
|                   <h3>无法执行员工</h3> | ||||
|                   <el-tooltip | ||||
|                     placement="top" | ||||
|                     content="由于员工不在可见范围、离职、客户群接收已达到上限等原因,无法执行群发任务的成员总数"> | ||||
| @@ -115,7 +115,7 @@ | ||||
|                     :instance="instance" | ||||
|                     @pick="e => onUserChange(e, 'search1')" :multiple="false" v-model="user1"> | ||||
|                     <div class="userSelcet"> | ||||
|                       <span style="color: #606266;" v-if="search1.deptartId">{{ name1 }}</span> | ||||
|                       <span style="color: #606266;" v-if="search1.deptartId"><ai-open-data type="departmentName" :openid="search1.deptartId"></ai-open-data></span> | ||||
|                       <span v-else>部门</span> | ||||
|                       <i class="el-icon-arrow-up"  v-if="!search1.deptartId"></i> | ||||
|                       <i class="el-icon-circle-close" v-if="search1.deptartId" @click.stop="user1 = [], search1.deptartId = '', search1.current = 1, getMemberInfo()"></i> | ||||
| @@ -151,14 +151,20 @@ | ||||
|         width="890px" | ||||
|         title="群发范围" | ||||
|         @onConfirm="isShowGroups = false"> | ||||
|         <ai-table | ||||
|           :tableData="info.wxGroups" | ||||
|           :col-configs="colConfigs3" | ||||
|           border | ||||
|           tableSize="small" | ||||
|           :isShowPagination="false" | ||||
|           @getList="() => {}"> | ||||
|         </ai-table> | ||||
|           <ai-wrapper> | ||||
|             <ai-info-item label="消息发送" isLine :value="info.taskTitle"> | ||||
|               <div class="text"> | ||||
|                 <span>{{ info.sendScope === '0' ? '全部' : '按条件筛选的' }}</span> | ||||
|                 <i>{{ info.groupList.length }}</i> | ||||
|                 <span>个居民</span> | ||||
|               </div> | ||||
|             </ai-info-item> | ||||
|             <ai-info-item label="添加人" isLine :value="userNames"></ai-info-item> | ||||
|             <ai-info-item label="标签" isLine>{{ info.filterTagsName || '-' }}</ai-info-item> | ||||
|             <ai-info-item label="剔除标签" isLine>{{ info.excludeFilterTagsName || '-' }}</ai-info-item> | ||||
|             <ai-info-item label="性别" isLine>{{ mapGender(info.gender) }}</ai-info-item> | ||||
|             <ai-info-item label="添加时间" isLine>{{ info.addEndTime + '-' + info.addFromTime }}</ai-info-item> | ||||
|           </ai-wrapper> | ||||
|       </ai-dialog> | ||||
|       <div class="detail-phone" v-if="isShowPhone"> | ||||
|         <div class="mask"></div> | ||||
| @@ -189,11 +195,8 @@ | ||||
|         total1: 0, | ||||
|         isShowGroups: false, | ||||
|         isShowPhone: false, | ||||
|         total2: 0, | ||||
|         user1: [], | ||||
|         user2: [], | ||||
|         name1: '', | ||||
|         name2: '', | ||||
|         radio1: '未执行', | ||||
|         search1: { | ||||
|           current: 1, | ||||
| @@ -202,13 +205,6 @@ | ||||
|           type: 0, | ||||
|           sendStatus: '0' | ||||
|         }, | ||||
|         search2: { | ||||
|           current: 1, | ||||
|           size: 10, | ||||
|           deptartId: '', | ||||
|           type: 1, | ||||
|           sendStatus: '0' | ||||
|         }, | ||||
|         memberInfo: {}, | ||||
|         groupInfo: {}, | ||||
|         tableData1: [], | ||||
| @@ -229,7 +225,8 @@ | ||||
|         timer: null, | ||||
|         min: 60, | ||||
|         isDisabled: false, | ||||
|         rejecterId: '' | ||||
|         rejecterId: '', | ||||
|         userNames: '' | ||||
|       } | ||||
|     }, | ||||
|  | ||||
| @@ -240,7 +237,6 @@ | ||||
|     created () { | ||||
|       this.getInfo(this.params.id) | ||||
|       this.getMemberInfo() | ||||
|       this.getGroupInfo() | ||||
|     }, | ||||
|  | ||||
|     destroyed () { | ||||
| @@ -249,39 +245,41 @@ | ||||
|  | ||||
|     methods: { | ||||
|       getMemberInfo () { | ||||
|         this.instance.post(`/app/appmasssendingtask/detailStatistics`, null, { | ||||
|         this.instance.post(`/app/whchatmomentstask/detailStatistics`, null, { | ||||
|           params: { | ||||
|             ...this.search1, | ||||
|             taskId: this.params.id | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res.code === 0) { | ||||
|             this.tableData1 = res.data.executedList.records | ||||
|             this.total1 = res.data.executedList.total | ||||
|             // this.tableData1 = res.data.executedList.records | ||||
|             // this.total1 = res.data.executedList.total | ||||
|             this.memberInfo = res.data | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|  | ||||
|       mapGender (v) { | ||||
|         return { | ||||
|           '2': '全部', | ||||
|           '1': '男', | ||||
|           '0': '女' | ||||
|         }[v] | ||||
|       }, | ||||
|  | ||||
|       onUserChange (e, search) { | ||||
|         if (e.length) { | ||||
|           search === 'search1' ? this.name1 = e[0].name : this.name2 = e[0].name | ||||
|           this[search].deptartId = e[0].id | ||||
|         } else { | ||||
|           this[search].deptartId = '' | ||||
|           search === 'search1' ? this.name1 = '' : this.name2 = '' | ||||
|         } | ||||
|  | ||||
|         this[search].current = 1 | ||||
|         if (search === 'search1') { | ||||
|           this.getMemberInfo() | ||||
|         } else { | ||||
|           this.getGroupInfo() | ||||
|         } | ||||
|         this.getMemberInfo() | ||||
|       }, | ||||
|  | ||||
|       sendMsg () { | ||||
|         this.instance.post(`/app/appmasssendingtask/remindSend?id=${this.params.id}`).then(res => { | ||||
|         this.instance.post(`/app/whchatmomentstask/remindExamine?id=${this.params.id}`).then(res => { | ||||
|           if (res.code === 0) { | ||||
|             this.$message.success('提醒成功') | ||||
|             this.getInfo(this.params.id) | ||||
| @@ -289,26 +287,6 @@ | ||||
|         }) | ||||
|       }, | ||||
|  | ||||
|       getGroupInfo () { | ||||
|         this.instance.post(`/app/appmasssendingtask/detailStatistics`, null, { | ||||
|           params: { | ||||
|             ...this.search2, | ||||
|             taskId: this.params.id | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res.code === 0) { | ||||
|             this.tableData2 = res.data.executedList.records.map(v => { | ||||
|               return { | ||||
|                 ...v, | ||||
|                 groupName: v.groupName || '未命名群聊' | ||||
|               } | ||||
|             }) | ||||
|             this.total2 = res.data.executedList.total | ||||
|             this.groupInfo = res.data | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|  | ||||
|       countdown () { | ||||
|         this.timer = setInterval(() => { | ||||
|           const nowTime = this.$moment(new Date()) | ||||
| @@ -325,7 +303,7 @@ | ||||
|       }, | ||||
|  | ||||
|       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.info = res.data | ||||
|             if (res.data.status === '4' && res.data.remindTime) { | ||||
| @@ -345,14 +323,8 @@ | ||||
|               } | ||||
|             }) | ||||
|  | ||||
|             this.info.wxGroups = res.data.wxGroups.map(v => { | ||||
|               this.groups.push(...v.groupIds.split(',')) | ||||
|  | ||||
|               return { | ||||
|                 ...v, | ||||
|                 groupIds: v.groupIds.split(',') | ||||
|               } | ||||
|             }) | ||||
|             this.userNames = res.data.groupList.map(e => e.userName).join(',') | ||||
|  | ||||
|             if (res.data.examines && res.data.examines.length) { | ||||
|               const user = res.data.examines.filter(v => v.examineStatus === '2') | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|     <template slot="title"> | ||||
|       <ai-title title="群发居民" isShowBottomBorder> | ||||
|         <template #sub> | ||||
|           <span>管理员统一创建宣发任务,选择要发送的居民群后通知群主发送,群主确认后即可群发到居民群。群主向同一个居民群每天最多可群发10条消息。</span> | ||||
|           <span>管理员统一创建任务内容,选择要发送的居民后通知成员发送,成员确认后即可群发给居民。居民每天最多能接收来自1名成员的10条群发消息</span> | ||||
|         </template> | ||||
|       </ai-title> | ||||
|     </template> | ||||
| @@ -106,7 +106,6 @@ | ||||
|           startTime: '', | ||||
|           endTime: '' | ||||
|         }, | ||||
|         name: '', | ||||
|         user: [], | ||||
|         tableData: [], | ||||
|         loading: false, | ||||
| @@ -155,16 +154,17 @@ | ||||
|  | ||||
|       getList() { | ||||
|         this.loading = true | ||||
|         this.instance.post(`/app/appmasssendingtask/list`, null, { | ||||
|         this.instance.post(`/app/whchatmomentstask/list`, null, { | ||||
|           params: { | ||||
|             ...this.search, | ||||
|             taskType: 1 | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res.code == 0) { | ||||
|             this.tableData = res.data.records.map(v => { | ||||
|               return { | ||||
|                 ...v, | ||||
|                 typeName: '群发居民群' | ||||
|                 typeName: '群发居民' | ||||
|               } | ||||
|             }) | ||||
|             this.total = res.data.total | ||||
|   | ||||
| @@ -41,6 +41,17 @@ | ||||
|                       <div class="select-right">{{ form.filterCriteria.length ? '重新选择' : '选择' }}</div> | ||||
|                     </div> | ||||
|                   </ai-picker> | ||||
|                   <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="tips"> | ||||
|                     <p>消息预计送达居民群数:</p> | ||||
|                     <span>{{ groupLen }}</span> | ||||
| @@ -51,16 +62,6 @@ | ||||
|                     </el-tooltip> | ||||
|                   </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.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> | ||||
|                 </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"> | ||||
| @@ -126,6 +127,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" | ||||
| @@ -298,6 +310,7 @@ export default { | ||||
|         wxGroupsName: '', | ||||
|         sendScope: '0', | ||||
|         sendType: 0, | ||||
|         taskEndTime: '', | ||||
|         name: '', | ||||
|         filterTags: [], | ||||
|         filterTagsName: '', | ||||
| @@ -360,17 +373,18 @@ export default { | ||||
|     onTagsConfirm () { | ||||
|       this.form.filterTagsName = this.chooseTags.map(v => v.name).join(',') | ||||
|       this.form.filterTags = [...this.chooseTags] | ||||
|       this.getWxGroups() | ||||
|  | ||||
|       this.isShowTags = false | ||||
|     }, | ||||
|  | ||||
|     getInfo(id) { | ||||
|       this.instance.post(`/app/whchatmomentstask/customerTasKDetail?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', | ||||
|             filterTags: res.data.filterTags ? res.data.filterTags.split(',') : [], | ||||
|             filterCriteria: res.data.filterCriteria.split(',') | ||||
|           } | ||||
|  | ||||
| @@ -451,7 +465,7 @@ export default { | ||||
|     getWxGroups() { | ||||
|       this.instance.post(`/app/whchatmomentstask/getSendScope`, { | ||||
|         sendScope: this.form.sendScope, | ||||
|         filterTags: this.form.filterTags.map(v => v.id).join(','), | ||||
|         tags: this.form.filterTags.map(v => v.id).join(','), | ||||
|         filterCriteria: this.form.filterCriteria.join(','), | ||||
|         taskType: 0 | ||||
|       }).then(res => { | ||||
| @@ -589,7 +603,7 @@ export default { | ||||
|       this.$refs.form.validate((valid) => { | ||||
|         if (valid) { | ||||
|           if (!this.form.executorList.length) { | ||||
|             return this.$message.error('居民群数量不能为0') | ||||
|             return this.$message.error('居民数量不能为0') | ||||
|           } | ||||
|  | ||||
|           if (sendType === 1 && !this.dateForm.choiceTime) { | ||||
| @@ -736,6 +750,21 @@ export default { | ||||
|       overflow: hidden; | ||||
|     } | ||||
|   } | ||||
|   .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 { | ||||
|   | ||||
| @@ -157,6 +157,7 @@ | ||||
|         this.instance.post(`/app/whchatmomentstask/list`, null, { | ||||
|           params: { | ||||
|             ...this.search, | ||||
|             taskType: 0 | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res.code == 0) { | ||||
|   | ||||
| @@ -47,7 +47,8 @@ export default { | ||||
|   }, | ||||
|   methods: { | ||||
|     onCancel() { | ||||
|       this.dialog = false | ||||
|       this.$emit('update:visible', false) | ||||
|       this.$emit('onCancel') | ||||
|       this.$emit('cancel') | ||||
|     }, | ||||
|     onConfirm() { | ||||
|   | ||||
| @@ -57,7 +57,7 @@ module.exports = { | ||||
|     proxy: { | ||||
|       //设置代理,可解决跨5 | ||||
|       '/lan': { | ||||
|         target: 'http://192.168.1.87:9000', | ||||
|         target: 'http://192.168.1.87:39000', | ||||
|         changeOrigin: true, | ||||
|         pathRewrite: { | ||||
|           //地址重写 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user