web端宣发
This commit is contained in:
		| @@ -0,0 +1,657 @@ | ||||
| <template> | ||||
|   <ai-detail class="AppAnnounceDetail"> | ||||
|     <template slot="title"> | ||||
|       <ai-title title="群发详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)"> | ||||
|       </ai-title> | ||||
|     </template> | ||||
|     <template slot="content"> | ||||
|       <ai-card title="基础信息"> | ||||
|         <template #right> | ||||
|           <div class="right-tips" v-if="info.status === '4'"> | ||||
|             <el-tooltip | ||||
|               placement="top" | ||||
|               content="任务开始后,3天内15分钟更新1次,3天后访问页面时触发更新,1小时最多刷新1次"> | ||||
|               <i class="iconfont iconDetails"></i> | ||||
|             </el-tooltip> | ||||
|             <span>数据更新于{{ info.dataUpdateTime }}</span> | ||||
|           </div> | ||||
|         </template> | ||||
|         <template #content> | ||||
|           <ai-wrapper> | ||||
|             <ai-info-item label="任务名称" isLine :value="info.taskTitle"></ai-info-item> | ||||
|             <ai-info-item label="任务状态" isLine> | ||||
|               <span :style="{ color: dict.getColor('mstStatus', info.status) }">{{ dict.getLabel('mstStatus', info.status) }}</span> | ||||
|             </ai-info-item> | ||||
|             <ai-info-item label="创建人" isLine> | ||||
|               <div class="user"> | ||||
|                 <img src="https://cdn.cunwuyun.cn/dvcp/announce/user.png" /> | ||||
|                 <span>{{ info.createUserName }}</span> | ||||
|                 <span>({{ info.createUserDeptName }})</span> | ||||
|               </div> | ||||
|             </ai-info-item> | ||||
|             <ai-info-item label="审批人" isLine v-if="info.enableExamine === '1'"> | ||||
|               <div class="user-wrapper"> | ||||
|                 <div class="user" v-for="(item, index) in info.examines" :key="index"> | ||||
|                   <img src="https://cdn.cunwuyun.cn/dvcp/announce/user.png" /> | ||||
|                   <span>{{ item.examineUserName }}</span> | ||||
|                 </div> | ||||
|               </div> | ||||
|             </ai-info-item> | ||||
|             <ai-info-item label="创建时间" :value="info.createTime"></ai-info-item> | ||||
|             <ai-info-item label="群发时间" :value="info.choiceTime"></ai-info-item> | ||||
|             <ai-info-item label="群发范围" isLine> | ||||
|               <div class="text"> | ||||
|                 <span>{{ info.sendScope === '0' ? '全部' : '按条件筛选的' }}</span> | ||||
|                 <i>{{ info.executorList.length }}</i> | ||||
|                 <span>个居民</span> | ||||
|                 <em @click="isShowGroups = true">详情</em> | ||||
|               </div> | ||||
|             </ai-info-item> | ||||
|             <ai-info-item label="消息内容" isLine> | ||||
|               <div class="msg"> | ||||
|                 <p>{{ content }}</p> | ||||
|                 <div class="msg-bottom"> | ||||
|                   <div class="left" v-if="fileList.length"> | ||||
|                     <img :src="mapIcon(fileList[0].msgType)" /> | ||||
|                     <span>{{ mapType(fileList[0].msgType) }}{{ fileList[0].mpTitle || fileList[0].name || fileList[0].linkTitle  }} 等</span> | ||||
|                     <i>{{ fileList.length }}</i> | ||||
|                     <span>个附件</span> | ||||
|                   </div> | ||||
|                   <div class="left" v-else> | ||||
|                     <span>暂无附件</span> | ||||
|                   </div> | ||||
|                   <div class="right" @click="isShowPhone = true">预览消息</div> | ||||
|                 </div> | ||||
|               </div> | ||||
|             </ai-info-item> | ||||
|           </ai-wrapper> | ||||
|         </template> | ||||
|       </ai-card> | ||||
|       <ai-card title="成员统计"> | ||||
|         <template #content> | ||||
|           <div class="content-item"> | ||||
|             <div class="top"> | ||||
|               <div class="top-item"> | ||||
|                 <div class="top-item__title"> | ||||
|                   <h3>预计执行员工</h3> | ||||
|                 </div> | ||||
|                 <p>{{ memberInfo.planCount || 0 }}</p> | ||||
|               </div> | ||||
|               <div class="top-item"> | ||||
|                 <div class="top-item__title"> | ||||
|                   <h3>未执行员工</h3> | ||||
|                 </div> | ||||
|                 <p>{{ memberInfo.unExecutedCount || 0 }}</p> | ||||
|               </div> | ||||
|               <div class="top-item"> | ||||
|                 <div class="top-item__title"> | ||||
|                   <h3>已执行员工</h3> | ||||
|                 </div> | ||||
|                 <p>{{ memberInfo.executedCount || 0 }}</p> | ||||
|               </div> | ||||
|               <div class="top-item"> | ||||
|                 <div class="top-item__title"> | ||||
|                   <h3>无法执行员工</h3> | ||||
|                   <el-tooltip | ||||
|                     placement="top" | ||||
|                     content="由于员工不在可见范围、离职、客户群接收已达到上限等原因,无法执行群发任务的成员总数"> | ||||
|                     <i class="iconfont iconDetails"></i> | ||||
|                   </el-tooltip> | ||||
|                 </div> | ||||
|                 <p>{{ memberInfo.cannotExecuteCount || 0 }}</p> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div class="bottom"> | ||||
|               <div class="bottom-search"> | ||||
|                 <div class="left"> | ||||
|                   <el-radio-group v-model="search1.sendStatus" size="small" @change="search1.current = 1, getMemberInfo()"> | ||||
|                     <el-radio-button size="small" label="0">未执行</el-radio-button> | ||||
|                     <el-radio-button size="small" label="1">已执行</el-radio-button> | ||||
|                     <el-radio-button size="small" label="2">无法执行</el-radio-button> | ||||
|                   </el-radio-group> | ||||
|                   <ai-picker | ||||
|                     dialogTitle="选择部门" | ||||
|                     action="/app/wxcp/wxdepartment/departList" | ||||
|                     :instance="instance" | ||||
|                     @pick="e => onUserChange(e, 'search1')" :multiple="false" v-model="user1"> | ||||
|                     <div class="userSelcet"> | ||||
|                       <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> | ||||
|                     </div> | ||||
|                   </ai-picker> | ||||
|                 </div> | ||||
|                 <el-button :type="isDisabled ? '' : 'primary'" :disabled="isDisabled" @click="sendMsg(0)" v-if="info.status === '4'">{{ isDisabled ? min + '分钟后可再次提醒' : '提醒成员发送' }}</el-button> | ||||
|               </div> | ||||
|               <ai-table | ||||
|                 :tableData="tableData1" | ||||
|                 :col-configs="colConfigs1" | ||||
|                 :total="total1" | ||||
|                 border | ||||
|                 tableSize="small" | ||||
|                 :current.sync="search1.current" | ||||
|                 :size.sync="search1.size" | ||||
|                 @getList="getMemberInfo"> | ||||
|                 <el-table-column slot="user" label="成员" align="left"> | ||||
|                   <template slot-scope="{ row }"> | ||||
|                     <div class="userinfo"> | ||||
|                       <span>{{ row.groupOwnerName }}</span> | ||||
|                       <span style="color: #999">{{ row.mainDepartmentName }}</span> | ||||
|                     </div> | ||||
|                   </template> | ||||
|                 </el-table-column> | ||||
|               </ai-table> | ||||
|             </div> | ||||
|           </div> | ||||
|         </template> | ||||
|       </ai-card> | ||||
|       <ai-dialog | ||||
|         :visible.sync="isShowGroups" | ||||
|         width="890px" | ||||
|         title="群发范围" | ||||
|         @onConfirm="isShowGroups = false"> | ||||
|           <ai-wrapper> | ||||
|             <ai-info-item label="消息发送" isLine :value="info.taskTitle"> | ||||
|               <div class="text"> | ||||
|                 <span>{{ info.sendScope === '0' ? '全部' : '按条件筛选的' }}</span> | ||||
|                 <i>{{ info.executorList.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-wrapper> | ||||
|       </ai-dialog> | ||||
|       <div class="detail-phone" v-if="isShowPhone"> | ||||
|         <div class="mask"></div> | ||||
|         <Phone :avatar="user.info.avatar" @close="isShowPhone = false" :isShowClose="true" :content="content" :fileList="fileList"></Phone> | ||||
|       </div> | ||||
|     </template> | ||||
|   </ai-detail> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import { mapState } from 'vuex' | ||||
|   import Phone from './Phone' | ||||
|   export default { | ||||
|     name: 'Detail', | ||||
|  | ||||
|     props: { | ||||
|       instance: Function, | ||||
|       dict: Object, | ||||
|       params: Object | ||||
|     }, | ||||
|  | ||||
|     components: { | ||||
|       Phone | ||||
|     }, | ||||
|  | ||||
|     data () { | ||||
|       return { | ||||
|         total1: 0, | ||||
|         isShowGroups: false, | ||||
|         isShowPhone: false, | ||||
|         user1: [], | ||||
|         user2: [], | ||||
|         radio1: '未执行', | ||||
|         search1: { | ||||
|           current: 1, | ||||
|           size: 10, | ||||
|           deptartId: '', | ||||
|           type: 0, | ||||
|           sendStatus: '0' | ||||
|         }, | ||||
|         memberInfo: {}, | ||||
|         groupInfo: {}, | ||||
|         tableData1: [], | ||||
|         fileList: [], | ||||
|         tableData2: [], | ||||
|         info: {}, | ||||
|         content: '', | ||||
|         currIndex: 0, | ||||
|         colConfigs3: [ | ||||
|           { prop: 'groupOwnerName', label: '群主' }, | ||||
|           { prop: 'groupNames', label: '群名称' } | ||||
|         ], | ||||
|         colConfigs1: [ | ||||
|           { slot: 'user', label: '成员' }, | ||||
|           { prop: 'groupCount', label: '预计送达居民群', align: 'center' } | ||||
|         ], | ||||
|         groups: [], | ||||
|         timer: null, | ||||
|         min: 60, | ||||
|         isDisabled: false, | ||||
|         rejecterId: '', | ||||
|         userNames: '' | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     computed: { | ||||
|       ...mapState(['user']) | ||||
|     }, | ||||
|  | ||||
|     created () { | ||||
|       this.getInfo(this.params.id) | ||||
|       this.getMemberInfo() | ||||
|     }, | ||||
|  | ||||
|     destroyed () { | ||||
|       clearInterval(this.timer) | ||||
|     }, | ||||
|  | ||||
|     methods: { | ||||
|       getMemberInfo () { | ||||
|         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.memberInfo = res.data | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|  | ||||
|       onUserChange (e, search) { | ||||
|         if (e.length) { | ||||
|           this[search].deptartId = e[0].id | ||||
|         } else { | ||||
|           this[search].deptartId = '' | ||||
|         } | ||||
|  | ||||
|         this[search].current = 1 | ||||
|         this.getMemberInfo() | ||||
|       }, | ||||
|  | ||||
|       sendMsg () { | ||||
|         this.instance.post(`/app/whchatmomentstask/remindExamine?id=${this.params.id}`).then(res => { | ||||
|           if (res.code === 0) { | ||||
|             this.$message.success('提醒成功') | ||||
|             this.getInfo(this.params.id) | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|  | ||||
|       countdown () { | ||||
|         this.timer = setInterval(() => { | ||||
|           const nowTime = this.$moment(new Date()) | ||||
|           const min = nowTime.diff(this.info.remindTime, 'minute') | ||||
|           this.min = (60 - min) | ||||
|  | ||||
|           if (this.min <= 0) { | ||||
|             this.isDisabled = false | ||||
|             clearInterval(this.timer) | ||||
|           } else { | ||||
|             this.isDisabled = true | ||||
|           } | ||||
|         }, 1000) | ||||
|       }, | ||||
|  | ||||
|       getInfo (id) { | ||||
|         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) { | ||||
|               this.countdown() | ||||
|             } | ||||
|  | ||||
|             const content = res.data.contents.filter(v => v.msgType === '0') | ||||
|  | ||||
|             if (content.length) { | ||||
|               this.content = content[0].content | ||||
|             } | ||||
|  | ||||
|             this.fileList = res.data.contents.filter(v => v.msgType !== '0').map(v => { | ||||
|               return { | ||||
|                 ...v, | ||||
|                 ...v.sysFile | ||||
|               } | ||||
|             }) | ||||
|  | ||||
|             let userNames = '' | ||||
|             res.data.executorList.forEach(e => { | ||||
|               userNames = e.executorName + userNames | ||||
|             }) | ||||
|  | ||||
|             this.userNames = res.data.executorList.map(e => e.executorName).join(',') | ||||
|  | ||||
|             if (res.data.examines && res.data.examines.length) { | ||||
|               const user = res.data.examines.filter(v => v.examineStatus === '2') | ||||
|  | ||||
|               if (user.length) { | ||||
|                 this.rejecterId = user[0].examineUserId | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|  | ||||
|       mapType (type) { | ||||
|         return { | ||||
|           1: '图片', | ||||
|           2: '视频', | ||||
|           3: '文件', | ||||
|           4: '网站', | ||||
|           5: '小程序' | ||||
|         }[type] | ||||
|       }, | ||||
|  | ||||
|       mapIcon (type) { | ||||
|         return { | ||||
|           1: 'https://cdn.cunwuyun.cn/dvcp/announce/img.png', | ||||
|           2: 'https://cdn.cunwuyun.cn/dvcp/announce/video.png', | ||||
|           3: 'https://cdn.cunwuyun.cn/dvcp/announce/folder.png', | ||||
|           4: 'https://cdn.cunwuyun.cn/dvcp/announce/site.png', | ||||
|           5: 'https://cdn.cunwuyun.cn/dvcp/announce/miniapp.png' | ||||
|         }[type] | ||||
|       }, | ||||
|  | ||||
|       cancel (isRefresh) { | ||||
|         this.$emit('change', { | ||||
|           type: 'list', | ||||
|           isRefresh: !!isRefresh | ||||
|         }) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </script> | ||||
|  | ||||
| <style scoped lang="scss"> | ||||
|   .AppAnnounceDetail { | ||||
|     position: relative; | ||||
|     .user-wrapper { | ||||
|       display: flex; | ||||
|       flex-wrap: wrap; | ||||
|     } | ||||
|  | ||||
|     .detail-phone { | ||||
|       position: fixed; | ||||
|       left: 0%; | ||||
|       top: 0%; | ||||
|       z-index: 11; | ||||
|       width: 100%; | ||||
|       height: 100%; | ||||
|  | ||||
|       .mask { | ||||
|         position: absolute; | ||||
|         width: 100%; | ||||
|         height: 100%; | ||||
|         left: 0; | ||||
|         top: 0; | ||||
|         z-index: 1; | ||||
|         background: rgba($color: #000000, $alpha: 0.6); | ||||
|       } | ||||
|  | ||||
|       :deep( .phone-container ){ | ||||
|         position: absolute; | ||||
|         left: 50%; | ||||
|         top: 50%; | ||||
|         z-index: 11; | ||||
|         transform: translate(-50%, -50%); | ||||
|       } | ||||
|     } | ||||
|     .userSelcet { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       justify-content: space-between; | ||||
|       width: 215px; | ||||
|       height: 32px; | ||||
|       line-height: 32px; | ||||
|       margin-left: 12px; | ||||
|       border-radius: 4px; | ||||
|       border: 1px solid #d0d4dc; | ||||
|       overflow: hidden; | ||||
|       cursor: pointer; | ||||
|       transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); | ||||
|  | ||||
|       &:hover { | ||||
|         border-color: #26f; | ||||
|       } | ||||
|  | ||||
|       i { | ||||
|         display: flex; | ||||
|         position: relative; | ||||
|         align-items: center; | ||||
|         justify-content: center; | ||||
|         width: 30px; | ||||
|         height: 100%; | ||||
|         line-height: 32px; | ||||
|         font-size: 14px; | ||||
|         text-align: center; | ||||
|         color: #d0d4dc; | ||||
|         transform: rotateZ(180deg); | ||||
|       } | ||||
|  | ||||
|       .el-icon-circle-close:hover { | ||||
|         opacity: 0.6; | ||||
|       } | ||||
|  | ||||
|       span { | ||||
|         flex: 1; | ||||
|         padding: 0 15px; | ||||
|         font-size: 12px; | ||||
|         color: $placeholderColor; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .userinfo { | ||||
|       display: flex; | ||||
|       flex-direction: column; | ||||
|       justify-content: center; | ||||
|       line-height: 1; | ||||
|  | ||||
|       span:first-child { | ||||
|         margin-bottom: 4px; | ||||
|       } | ||||
|     } | ||||
|     .user { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       line-height: 1; | ||||
|       margin-right: 8px; | ||||
|  | ||||
|       img { | ||||
|         width: 16px; | ||||
|         height: 16px; | ||||
|         margin-right: 2px; | ||||
|       } | ||||
|  | ||||
|       span { | ||||
|         position: relative; | ||||
|         top: 2px; | ||||
|         color: #222222; | ||||
|         font-size: 12px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .text { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|  | ||||
|       i { | ||||
|         color: #2266FF; | ||||
|         font-style: normal; | ||||
|       } | ||||
|  | ||||
|       em { | ||||
|         margin-left: 8px; | ||||
|         color: #2266FF; | ||||
|         font-size: 12px; | ||||
|         font-style: normal; | ||||
|         cursor: pointer; | ||||
|         transition: all ease 0.3s; | ||||
|  | ||||
|         &:hover { | ||||
|           opacity: 0.6; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .msg { | ||||
|       background: #F9F9F9; | ||||
|       border-radius: 2px; | ||||
|       border: 1px solid #D0D4DC; | ||||
|  | ||||
|       p { | ||||
|         display: -webkit-box; | ||||
|         -webkit-line-clamp: 1; | ||||
|         -webkit-box-orient: vertical; | ||||
|         line-height: 38px; | ||||
|         padding: 0px 12px; | ||||
|         overflow: hidden; | ||||
|       } | ||||
|  | ||||
|       .msg-bottom { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: space-between; | ||||
|         height: 38px; | ||||
|         padding: 0 16px; | ||||
|         border-top: 1px solid #D0D4DC; | ||||
|  | ||||
|         .left { | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|  | ||||
|           img { | ||||
|             width: 16px; | ||||
|             height: 16px; | ||||
|             margin-right: 8px; | ||||
|           } | ||||
|  | ||||
|           span { | ||||
|             color: #222222; | ||||
|             font-size: 14px; | ||||
|           } | ||||
|  | ||||
|           i { | ||||
|             color: #2266FF; | ||||
|             font-size: 14px; | ||||
|             font-style: normal; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         .right { | ||||
|           color: #2266FF; | ||||
|           font-size: 12px; | ||||
|           cursor: pointer; | ||||
|  | ||||
|           &:hover { | ||||
|             opacity: 0.6; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     :deep( .AppAnnounceDetail-title ){ | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|  | ||||
|       span { | ||||
|         height: 100%; | ||||
|         line-height: 56px; | ||||
|         margin-right: 32px; | ||||
|         color: #888888; | ||||
|         font-size: 16px; | ||||
|         font-weight: 600; | ||||
|         transition: all ease 0.3s; | ||||
|         border-bottom: 3px solid transparent; | ||||
|         cursor: pointer; | ||||
|         user-select: none; | ||||
|  | ||||
|         &:hover { | ||||
|           color: #222; | ||||
|         } | ||||
|  | ||||
|         &:last-child { | ||||
|           margin-right: 0; | ||||
|         } | ||||
|  | ||||
|         &.active { | ||||
|           color: #222222; | ||||
|           border-bottom: 3px solid #2266FF; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .content-item { | ||||
|       .top { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         margin-bottom: 16px; | ||||
|  | ||||
|         .top-item { | ||||
|           display: flex; | ||||
|           flex-direction: column; | ||||
|           justify-content: center; | ||||
|           flex: 1; | ||||
|           height: 90px; | ||||
|           margin-right: 16px; | ||||
|           padding: 0 16px; | ||||
|           background: #F9F9F9; | ||||
|           border-radius: 2px; | ||||
|  | ||||
|           &:last-child { | ||||
|             margin-right: 0; | ||||
|           } | ||||
|  | ||||
|           .top-item__title { | ||||
|             display: flex; | ||||
|             align-items: center; | ||||
|             margin-bottom: 8px; | ||||
|  | ||||
|             i { | ||||
|               margin-left: 4px; | ||||
|               color: #8899bb; | ||||
|               font-size: 16px; | ||||
|             } | ||||
|           } | ||||
|  | ||||
|           h3 { | ||||
|             color: #222222; | ||||
|             font-size: 14px; | ||||
|             font-weight: 700; | ||||
|           } | ||||
|  | ||||
|           p { | ||||
|             color: #2266FF; | ||||
|             font-size: 24px; | ||||
|             font-weight: 700; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .bottom-search { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: space-between; | ||||
|         margin-bottom: 16px; | ||||
|  | ||||
|         .left { | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     :deep( .right-tips ){ | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|  | ||||
|       i { | ||||
|         margin-right: 4px; | ||||
|         color: #8899bb; | ||||
|         font-size: 16px; | ||||
|       } | ||||
|  | ||||
|       span { | ||||
|         color: #888888; | ||||
|         font-size: 12px; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </style> | ||||
		Reference in New Issue
	
	Block a user