+                
                   {{ item.name }}
                 
@@ -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;
diff --git a/packages/wxwork/AnnounceResident/AppAnnounceResident/components/Detail.vue b/packages/wxwork/AnnounceResident/AppAnnounceResident/components/Detail.vue
index c9bae1cb..55887ea8 100644
--- a/packages/wxwork/AnnounceResident/AppAnnounceResident/components/Detail.vue
+++ b/packages/wxwork/AnnounceResident/AppAnnounceResident/components/Detail.vue
@@ -26,7 +26,7 @@
               
                  {{ info.createUserName }}
                 {{ info.createUserName }}
-                (
{{ info.createUserDeptName }})
+                
({{ info.createUserDeptName }})
                
             
             
@@ -42,8 +42,8 @@
             
               
                 {{ info.sendScope === '0' ? '全部' : '按条件筛选的' }}
-                {{ groups.length }}
-                个居民群
+                {{ info.groupList.length }}
+                个居民
                 详情
               
             
@@ -73,25 +73,25 @@
             
               
                 
-                  
计划执行成员
+                  预计执行员工
                 
                 {{ memberInfo.planCount || 0 }}
                
               
                 
-                  
未执行成员
+                  未执行员工
                 
                 {{ memberInfo.unExecutedCount || 0 }}
                
               
                 
-                  
已执行成员
+                  已执行员工
                 
                 {{ memberInfo.executedCount || 0 }}
                
               
                 
-                  
无法执行成员
+                  
无法执行员工
                   
@@ -115,7 +115,7 @@
                     :instance="instance"
                     @pick="e => onUserChange(e, 'search1')" :multiple="false" v-model="user1">
                     
-                      
{{ name1 }}
+                      
                       部门
                       
                       
@@ -151,14 +151,20 @@
         width="890px"
         title="群发范围"
         @onConfirm="isShowGroups = false">
-        
 {}">
-        
+          
+            
+              
+                {{ info.sendScope === '0' ? '全部' : '按条件筛选的' }}
+                {{ info.groupList.length }}
+                个居民
+              
+            
+            
+            {{ info.filterTagsName || '-' }}
+            {{ info.excludeFilterTagsName || '-' }}
+            {{ mapGender(info.gender) }}
+            {{ info.addEndTime + '-' + info.addFromTime }}
+          
       
       
         
@@ -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')
diff --git a/packages/wxwork/AnnounceResident/AppAnnounceResident/components/List.vue b/packages/wxwork/AnnounceResident/AppAnnounceResident/components/List.vue
index f1a2efa2..9e734a8f 100644
--- a/packages/wxwork/AnnounceResident/AppAnnounceResident/components/List.vue
+++ b/packages/wxwork/AnnounceResident/AppAnnounceResident/components/List.vue
@@ -3,7 +3,7 @@
     
       
         
-          管理员统一创建宣发任务,选择要发送的居民群后通知群主发送,群主确认后即可群发到居民群。群主向同一个居民群每天最多可群发10条消息。
+          管理员统一创建任务内容,选择要发送的居民后通知成员发送,成员确认后即可群发给居民。居民每天最多能接收来自1名成员的10条群发消息
         
       
     
@@ -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
diff --git a/packages/wxwork/AnnounceWeChat/AppAnnounceWeChat/components/Add.vue b/packages/wxwork/AnnounceWeChat/AppAnnounceWeChat/components/Add.vue
index 706a723d..bc29bcea 100644
--- a/packages/wxwork/AnnounceWeChat/AppAnnounceWeChat/components/Add.vue
+++ b/packages/wxwork/AnnounceWeChat/AppAnnounceWeChat/components/Add.vue
@@ -41,6 +41,17 @@
                       
{{ form.filterCriteria.length ? '重新选择' : '选择' }}
                      
                   
+                  
+                    
+                    
+                      
+                      
+                        {{ item.name }}
+                      
+                      
请选择
+                      
{{ form.filterTags.length ? '重新选择' : '选择' }}
+                    
+                  
                     消息预计送达居民群数:
                     {{ groupLen }}
@@ -51,16 +62,6 @@
                     
                   
 
                 
-                
-                  
-                    
-                    
-                      {{ item.name }}
-                    
-                    
请选择
-                    
{{ form.filterTags.length ? '重新选择' : '选择' }}
-                  
@@ -126,6 +127,17 @@
                     从本地上传,图片最大支持10MB,支持JPG,PNG格式;视频最大支持10MB,支持MP4格式;文件最大支持20MB
                   
                 
+                
+                  
+                  
+                
                 
                    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 {
diff --git a/packages/wxwork/AnnounceWeChat/AppAnnounceWeChat/components/List.vue b/packages/wxwork/AnnounceWeChat/AppAnnounceWeChat/components/List.vue
index 678995ca..f90367e0 100644
--- a/packages/wxwork/AnnounceWeChat/AppAnnounceWeChat/components/List.vue
+++ b/packages/wxwork/AnnounceWeChat/AppAnnounceWeChat/components/List.vue
@@ -157,6 +157,7 @@
         this.instance.post(`/app/whchatmomentstask/list`, null, {
           params: {
             ...this.search,
+            taskType: 0
           }
         }).then(res => {
           if (res.code == 0) {
diff --git a/ui/packages/basic/AiDialog.vue b/ui/packages/basic/AiDialog.vue
index 9dab9a35..7e98f10b 100644
--- a/ui/packages/basic/AiDialog.vue
+++ b/ui/packages/basic/AiDialog.vue
@@ -47,7 +47,8 @@ export default {
   },
   methods: {
     onCancel() {
-      this.dialog = false
+      this.$emit('update:visible', false)
+      this.$emit('onCancel')
       this.$emit('cancel')
     },
     onConfirm() {
diff --git a/vue.config.js b/vue.config.js
index 61814631..e51ef632 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -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: {
           //地址重写