Files
dvcp_v2_webapp/project/sass/apps/Announce/AppAnnounce/components/Detail.vue

776 lines
23 KiB
Vue
Raw Normal View History

2022-07-13 09:13:31 +08:00
<template>
2022-07-15 10:40:02 +08:00
<ai-detail class="AppAnnounceDetail">
2022-07-13 09:13:31 +08:00
<template slot="title">
2022-07-15 10:40:02 +08:00
<ai-title title="群发详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)">
2022-07-13 09:13:31 +08:00
</ai-title>
</template>
<template slot="content">
2022-07-15 10:40:02 +08:00
<ai-card title="基础信息">
<template #right>
2022-07-26 18:01:59 +08:00
<div class="right-tips" v-if="info.status === '4'">
2022-07-15 10:40:02 +08:00
<el-tooltip
placement="top"
2022-07-27 15:51:06 +08:00
content="任务开始后3天内15分钟更新1次3天后访问页面时触发更新1小时最多刷新1次">
2022-07-15 10:40:02 +08:00
<i class="iconfont iconDetails"></i>
</el-tooltip>
2022-07-25 11:36:32 +08:00
<span>数据更新于{{ info.dataUpdateTime }}</span>
2022-07-13 09:13:31 +08:00
</div>
</template>
2022-07-15 10:40:02 +08:00
<template #content>
<ai-wrapper>
2022-07-25 11:36:32 +08:00
<ai-info-item label="任务名称" isLine :value="info.taskTitle"></ai-info-item>
2022-07-15 10:40:02 +08:00
<ai-info-item label="任务状态" isLine>
2022-08-08 11:54:03 +08:00
<span :style="{ color: dict.getColor('mstStatus', info.status) }">{{ dict.getLabel('mstStatus', info.status) }}</span>
2022-07-15 10:40:02 +08:00
</ai-info-item>
2022-08-01 16:56:55 +08:00
<ai-info-item label="创建人" isLine>
2022-07-15 10:40:02 +08:00
<div class="user">
<img src="https://cdn.cunwuyun.cn/dvcp/announce/user.png" />
2022-07-25 11:36:32 +08:00
<span><ai-open-data type="userName" :openid="info.createUserId"></ai-open-data></span>
2022-07-28 10:45:05 +08:00
<span><ai-open-data type="departmentName" :openid="info.createUserDept"></ai-open-data></span>
2022-07-15 10:40:02 +08:00
</div>
</ai-info-item>
2022-08-01 16:56:55 +08:00
<ai-info-item label="审批人" v-if="info.enableExamine === '1'">
2022-07-25 14:10:46 +08:00
<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" />
2022-07-26 18:01:59 +08:00
<span><ai-open-data type="userName" :openid="item.examineUserId"></ai-open-data></span>
2022-07-25 14:10:46 +08:00
</div>
2022-07-15 10:40:02 +08:00
</div>
</ai-info-item>
2022-08-02 13:48:45 +08:00
<ai-info-item label="审批拒绝人" v-if="info.enableExamine === '1' && rejecterId">
2022-08-01 16:56:55 +08:00
<div class="user">
<img src="https://cdn.cunwuyun.cn/dvcp/announce/user.png" />
<span><ai-open-data type="userName" :openid="rejecterId"></ai-open-data></span>
</div>
</ai-info-item>
2022-07-25 11:36:32 +08:00
<ai-info-item label="创建时间" :value="info.createTime"></ai-info-item>
<ai-info-item label="群发时间" :value="info.choiceTime"></ai-info-item>
2022-07-15 10:40:02 +08:00
<ai-info-item label="群发范围" isLine>
2022-07-15 14:37:02 +08:00
<div class="text">
2022-07-29 11:01:18 +08:00
<span>{{ info.sendScope === '0' ? '全部' : '按条件筛选的' }}</span>
2022-07-25 17:53:45 +08:00
<i>{{ groups.length }}</i>
2022-08-01 11:05:25 +08:00
<span>个居民群</span>
2022-07-25 17:53:45 +08:00
<em @click="isShowGroups = true">详情</em>
2022-07-15 10:40:02 +08:00
</div>
</ai-info-item>
<ai-info-item label="消息内容" isLine>
<div class="msg">
2022-07-25 11:36:32 +08:00
<p>{{ content }}</p>
2022-07-26 09:43:18 +08:00
<div class="msg-bottom">
<div class="left" v-if="fileList.length">
2022-07-25 14:10:46 +08:00
<img :src="mapIcon(fileList[0].msgType)" />
<span>{{ mapType(fileList[0].msgType) }}{{ fileList[0].mpTitle || fileList[0].name || fileList[0].linkTitle }} </span>
2022-07-25 11:36:32 +08:00
<i>{{ fileList.length }}</i>
<span>个附件</span>
2022-07-15 10:40:02 +08:00
</div>
2022-07-26 09:43:18 +08:00
<div class="left" v-else>
<span>暂无附件</span>
</div>
2022-07-26 09:26:49 +08:00
<div class="right" @click="isShowPhone = true">预览消息</div>
2022-07-15 10:40:02 +08:00
</div>
</div>
</ai-info-item>
</ai-wrapper>
</template>
2022-07-13 09:13:31 +08:00
</ai-card>
2022-07-15 10:40:02 +08:00
<ai-card>
<template #title>
<div class="AppAnnounceDetail-title">
<span :class="[currIndex === 0 ? 'active' : '']" @click="currIndex = 0">成员统计</span>
<span :class="[currIndex === 1 ? 'active' : '']" @click="currIndex = 1">居民群统计</span>
</div>
</template>
2022-07-13 09:13:31 +08:00
<template #content>
2022-07-15 10:40:02 +08:00
<div class="content-item" v-if="currIndex === 0">
<div class="top">
<div class="top-item">
<div class="top-item__title">
<h3>计划执行成员</h3>
</div>
2022-07-25 15:07:15 +08:00
<p>{{ memberInfo.planCount || 0 }}</p>
2022-07-15 10:40:02 +08:00
</div>
<div class="top-item">
<div class="top-item__title">
<h3>未执行成员</h3>
</div>
2022-07-27 17:23:12 +08:00
<p>{{ memberInfo.unExecutedCount || 0 }}</p>
2022-07-15 10:40:02 +08:00
</div>
<div class="top-item">
<div class="top-item__title">
<h3>已执行成员</h3>
</div>
2022-07-25 15:07:15 +08:00
<p>{{ memberInfo.executedCount || 0 }}</p>
2022-07-15 10:40:02 +08:00
</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>
2022-07-27 17:23:12 +08:00
<p>{{ memberInfo.cannotExecuteCount || 0 }}</p>
2022-07-15 10:40:02 +08:00
</div>
</div>
<div class="bottom">
<div class="bottom-search">
<div class="left">
2022-07-25 15:07:15 +08:00
<el-radio-group v-model="search1.sendStatus" size="small" @change="search1.current = 1, getMemberInfo()">
2022-07-25 14:10:46 +08:00
<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>
2022-07-15 10:40:02 +08:00
</el-radio-group>
2022-08-08 11:24:16 +08:00
<ai-user-get :instance="instance" @change="e => onUserChange(e, 'search1')" isChooseUnit isStrictly :isMultiple="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>
2022-08-08 17:44:47 +08:00
<span v-else>部门</span>
2022-08-08 11:24:16 +08:00
<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-user-get>
2022-07-15 10:40:02 +08:00
</div>
2022-07-27 14:47:15 +08:00
<el-button :type="isDisabled ? '' : 'primary'" :disabled="isDisabled" @click="sendMsg(0)" v-if="info.status === '4'">{{ isDisabled ? min + '分钟后可再次提醒' : '提醒成员发送' }}</el-button>
2022-07-15 10:40:02 +08:00
</div>
<ai-table
2022-07-25 15:07:15 +08:00
:tableData="tableData1"
:col-configs="colConfigs1"
:total="total1"
2022-07-15 10:40:02 +08:00
border
tableSize="small"
2022-07-25 14:10:46 +08:00
:current.sync="search1.current"
:size.sync="search1.size"
2022-07-25 15:07:15 +08:00
@getList="getMemberInfo">
2022-07-25 16:38:02 +08:00
<el-table-column slot="user" label="成员" align="left">
2022-07-25 15:40:02 +08:00
<template slot-scope="{ row }">
<div class="userinfo">
<span>
<ai-open-data type="userName" :openid="row.groupOwnerId"></ai-open-data>
</span>
<span style="color: #999">
<ai-open-data type="departmentName" :openid="row.mainDepartment"></ai-open-data>
</span>
</div>
</template>
</el-table-column>
2022-07-15 10:40:02 +08:00
</ai-table>
</div>
</div>
<div class="content-item" v-if="currIndex === 1">
<div class="top">
<div class="top-item">
<div class="top-item__title">
<h3>计划送达居民群</h3>
</div>
2022-07-25 15:07:15 +08:00
<p>{{ groupInfo.planCount || 0 }}</p>
2022-07-15 10:40:02 +08:00
</div>
<div class="top-item">
<div class="top-item__title">
<h3>未送达居民群</h3>
</div>
2022-07-27 17:23:12 +08:00
<p>{{ groupInfo.unExecutedCount || 0 }}</p>
2022-07-15 10:40:02 +08:00
</div>
<div class="top-item">
<div class="top-item__title">
<h3>已送达居民群</h3>
</div>
2022-07-27 17:23:12 +08:00
<p>{{ groupInfo.executedCount || 0 }}</p>
2022-07-15 10:40:02 +08:00
</div>
<div class="top-item">
<div class="top-item__title">
<h3>无法送达居民群</h3>
</div>
2022-07-27 17:23:12 +08:00
<p>{{ groupInfo.cannotExecuteCount || 0 }}</p>
2022-07-15 10:40:02 +08:00
</div>
</div>
<div class="bottom">
<div class="bottom-search">
<div class="left">
2022-07-25 15:07:15 +08:00
<el-radio-group v-model="search2.sendStatus" size="small" @change="search2.current = 1, getGroupInfo()">
2022-07-28 13:46:02 +08:00
<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>
2022-07-15 10:40:02 +08:00
</el-radio-group>
2022-08-08 11:24:16 +08:00
<ai-user-get :instance="instance" isStrictly @change="e => onUserChange(e, 'search2')" isChooseUnit :isMultiple="false" v-model="user2">
<div class="userSelcet">
<span style="color: #606266;" v-if="search2.deptartId"><ai-open-data type="departmentName" :openid="search2.deptartId"></ai-open-data></span>
2022-08-08 17:44:47 +08:00
<span v-else>部门</span>
2022-08-08 11:24:16 +08:00
<i class="el-icon-arrow-up" v-if="!search2.deptartId"></i>
<i class="el-icon-circle-close" v-if="search2.deptartId" @click.stop="user2 = [], search2.deptartId = '', search2.current = 1, getGroupInfo()"></i>
</div>
</ai-user-get>
2022-07-15 10:40:02 +08:00
</div>
2022-07-27 14:47:15 +08:00
<el-button :type="isDisabled ? '' : 'primary'" :disabled="isDisabled" @click="sendMsg(1)" v-if="info.status === '4'">{{ isDisabled ? min + '分钟后可再次提醒' : '提醒成员发送' }}</el-button>
2022-07-15 10:40:02 +08:00
</div>
<ai-table
2022-07-25 15:07:15 +08:00
:tableData="tableData2"
:col-configs="colConfigs2"
:total="total2"
2022-07-15 10:40:02 +08:00
border
tableSize="small"
2022-07-25 14:10:46 +08:00
:current.sync="search2.current"
:size.sync="search2.size"
2022-07-25 15:07:15 +08:00
@getList="getGroupInfo">
2022-07-26 17:37:12 +08:00
<el-table-column slot="user" label="群主" align="center">
2022-07-25 15:40:02 +08:00
<template slot-scope="{ row }">
<div class="userinfo">
<span>
<ai-open-data type="userName" :openid="row.groupOwnerId"></ai-open-data>
</span>
<span style="color: #999">
<ai-open-data type="departmentName" :openid="row.mainDepartment"></ai-open-data>
</span>
</div>
</template>
</el-table-column>
2022-07-15 10:40:02 +08:00
</ai-table>
</div>
</div>
2022-07-13 09:13:31 +08:00
</template>
</ai-card>
2022-07-25 17:53:45 +08:00
<ai-dialog
:visible.sync="isShowGroups"
width="890px"
title="群发范围"
@onConfirm="isShowGroups = false">
<ai-table
:tableData="info.wxGroups"
:col-configs="colConfigs3"
border
tableSize="small"
:isShowPagination="false"
@getList="() => {}">
</ai-table>
</ai-dialog>
2022-07-26 09:26:49 +08:00
<div class="detail-phone" v-if="isShowPhone">
2022-07-25 17:53:45 +08:00
<div class="mask"></div>
2022-07-26 09:26:49 +08:00
<Phone :avatar="user.info.avatar" @close="isShowPhone = false" :isShowClose="true" :content="content" :fileList="fileList"></Phone>
2022-07-25 17:53:45 +08:00
</div>
2022-07-13 09:13:31 +08:00
</template>
</ai-detail>
</template>
<script>
2022-07-25 17:53:45 +08:00
import { mapState } from 'vuex'
import Phone from './Phone'
2022-07-13 09:13:31 +08:00
export default {
name: 'Detail',
props: {
instance: Function,
dict: Object,
params: Object
},
2022-07-25 17:53:45 +08:00
components: {
Phone
},
2022-07-13 09:13:31 +08:00
data () {
return {
2022-07-25 15:07:15 +08:00
total1: 0,
2022-07-25 17:53:45 +08:00
isShowGroups: false,
2022-07-26 09:26:49 +08:00
isShowPhone: false,
2022-07-25 15:07:15 +08:00
total2: 0,
2022-07-25 16:38:02 +08:00
user1: [],
user2: [],
2022-07-15 10:40:02 +08:00
radio1: '未执行',
2022-07-25 14:10:46 +08:00
search1: {
current: 1,
size: 10,
deptartId: '',
type: 0,
sendStatus: '0'
},
search2: {
2022-07-15 10:40:02 +08:00
current: 1,
2022-07-25 14:10:46 +08:00
size: 10,
deptartId: '',
type: 1,
sendStatus: '0'
2022-07-13 09:13:31 +08:00
},
2022-07-25 15:07:15 +08:00
memberInfo: {},
groupInfo: {},
tableData1: [],
2022-07-25 11:36:32 +08:00
fileList: [],
2022-07-25 15:07:15 +08:00
tableData2: [],
2022-07-25 11:36:32 +08:00
info: {},
content: '',
2022-07-15 10:40:02 +08:00
currIndex: 0,
2022-07-25 17:53:45 +08:00
colConfigs3: [
{ prop: 'groupOwnerId', label: '群主', openType: 'userName' },
2022-07-26 09:26:49 +08:00
{ prop: 'groupNames', label: '群名称' }
2022-07-25 17:53:45 +08:00
],
2022-07-25 15:07:15 +08:00
colConfigs1: [
2022-07-25 15:40:02 +08:00
{ slot: 'user', label: '成员', openType: 'userName' },
2022-07-25 15:07:15 +08:00
{ prop: 'groupCount', label: '预计送达居民群', align: 'center' }
],
colConfigs2: [
{ prop: 'groupName', label: '居民群' },
{ prop: 'memberCount', label: '群人数', align: 'center' },
2022-07-25 15:40:02 +08:00
{ slot: 'user', label: '群主', align: 'center' },
2022-07-25 17:53:45 +08:00
],
2022-07-27 14:47:15 +08:00
groups: [],
timer: null,
min: 60,
2022-08-01 16:56:55 +08:00
isDisabled: false,
rejecterId: ''
2022-07-13 09:13:31 +08:00
}
},
2022-07-25 17:53:45 +08:00
computed: {
...mapState(['user'])
},
2022-07-13 09:13:31 +08:00
created () {
2022-07-25 11:36:32 +08:00
this.getInfo(this.params.id)
2022-07-25 14:10:46 +08:00
this.getMemberInfo()
this.getGroupInfo()
2022-07-13 09:13:31 +08:00
},
2022-07-27 14:47:15 +08:00
destroyed () {
clearInterval(this.timer)
},
2022-07-13 09:13:31 +08:00
methods: {
2022-07-25 14:10:46 +08:00
getMemberInfo () {
this.instance.post(`/app/appmasssendingtask/detailStatistics`, null, {
params: {
...this.search1,
taskId: this.params.id
}
}).then(res => {
if (res.code === 0) {
2022-07-25 15:07:15 +08:00
this.tableData1 = res.data.executedList.records
this.total1 = res.data.executedList.total
this.memberInfo = res.data
}
})
},
2022-07-25 16:38:02 +08:00
onUserChange (e, search) {
if (e.length) {
this[search].deptartId = e[0].id
} else {
this[search].deptartId = ''
}
this[search].current = 1
if (search === 'search1') {
this.getMemberInfo()
} else {
this.getGroupInfo()
}
},
sendMsg () {
2022-07-25 15:07:15 +08:00
this.instance.post(`/app/appmasssendingtask/remindSend?id=${this.params.id}`).then(res => {
if (res.code === 0) {
this.$message.success('提醒成功')
2022-07-27 14:47:15 +08:00
this.getInfo(this.params.id)
2022-07-25 14:10:46 +08:00
}
})
},
getGroupInfo () {
this.instance.post(`/app/appmasssendingtask/detailStatistics`, null, {
params: {
...this.search2,
taskId: this.params.id
}
}).then(res => {
if (res.code === 0) {
2022-07-26 17:42:19 +08:00
this.tableData2 = res.data.executedList.records.map(v => {
return {
...v,
groupName: v.groupName || '未命名群聊'
}
})
2022-07-25 15:07:15 +08:00
this.total2 = res.data.executedList.total
this.groupInfo = res.data
2022-07-25 14:10:46 +08:00
}
})
},
2022-07-27 14:47:15 +08:00
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
2022-07-28 14:26:50 +08:00
clearInterval(this.timer)
2022-07-27 14:47:15 +08:00
} else {
this.isDisabled = true
}
}, 1000)
},
2022-07-13 09:13:31 +08:00
getInfo (id) {
2022-07-25 11:36:32 +08:00
this.instance.post(`/app/appmasssendingtask/queryDetailById?id=${id}`).then(res => {
2022-07-13 09:13:31 +08:00
if (res.code === 0) {
2022-07-25 11:36:32 +08:00
this.info = res.data
2022-07-27 14:47:15 +08:00
if (res.data.status === '4' && res.data.remindTime) {
this.countdown()
}
2022-07-25 11:36:32 +08:00
const content = res.data.contents.filter(v => v.msgType === '0')
if (content.length) {
this.content = content[0].content
2022-07-13 09:13:31 +08:00
}
2022-07-25 11:36:32 +08:00
this.fileList = res.data.contents.filter(v => v.msgType !== '0').map(v => {
return {
...v,
...v.sysFile
}
})
2022-07-25 17:53:45 +08:00
this.info.wxGroups = res.data.wxGroups.map(v => {
this.groups.push(...v.groupIds.split(','))
return {
...v,
groupIds: v.groupIds.split(',')
}
})
2022-08-01 16:56:55 +08:00
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
}
}
2022-07-13 09:13:31 +08:00
}
})
},
2022-07-25 14:10:46 +08:00
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]
},
2022-07-13 09:13:31 +08:00
cancel (isRefresh) {
this.$emit('change', {
type: 'list',
isRefresh: !!isRefresh
})
}
}
}
</script>
<style scoped lang="scss">
2022-07-15 10:40:02 +08:00
.AppAnnounceDetail {
2022-07-25 17:53:45 +08:00
position: relative;
2022-07-25 14:10:46 +08:00
.user-wrapper {
display: flex;
flex-wrap: wrap;
}
2022-07-25 15:40:02 +08:00
2022-07-25 17:53:45 +08:00
.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);
}
::v-deep .phone-container {
position: absolute;
left: 50%;
top: 50%;
z-index: 11;
transform: translate(-50%, -50%);
}
}
2022-07-25 16:38:02 +08:00
.userSelcet {
display: flex;
align-items: center;
2022-08-08 11:24:16 +08:00
justify-content: space-between;
width: 215px;
2022-07-25 16:38:02 +08:00
height: 32px;
line-height: 32px;
margin-left: 12px;
border-radius: 4px;
border: 1px solid #d0d4dc;
overflow: hidden;
2022-08-08 11:24:16 +08:00
cursor: pointer;
transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
2022-07-25 16:38:02 +08:00
2022-08-08 11:24:16 +08:00
&: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;
2022-07-25 16:38:02 +08:00
text-align: center;
2022-08-08 11:24:16 +08:00
color: #d0d4dc;
transform: rotateZ(180deg);
}
2022-07-25 16:38:02 +08:00
2022-08-08 11:24:16 +08:00
.el-icon-circle-close:hover {
opacity: 0.6;
2022-07-25 16:38:02 +08:00
}
span {
2022-08-08 11:24:16 +08:00
flex: 1;
2022-07-25 16:38:02 +08:00
padding: 0 15px;
font-size: 12px;
2022-08-09 09:01:36 +08:00
color: $placeholderColor;
2022-07-25 16:38:02 +08:00
}
}
2022-07-25 15:40:02 +08:00
.userinfo {
display: flex;
flex-direction: column;
justify-content: center;
line-height: 1;
span:first-child {
margin-bottom: 4px;
}
}
2022-07-15 10:40:02 +08:00
.user {
display: flex;
align-items: center;
line-height: 1;
2022-07-25 14:10:46 +08:00
margin-right: 8px;
2022-07-15 10:40:02 +08:00
img {
width: 16px;
height: 16px;
margin-right: 2px;
}
span {
position: relative;
top: 2px;
color: #222222;
font-size: 12px;
}
}
2022-07-15 14:37:02 +08:00
.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;
}
}
}
2022-07-15 10:40:02 +08:00
.msg {
background: #F9F9F9;
border-radius: 2px;
border: 1px solid #D0D4DC;
p {
2022-08-08 17:24:06 +08:00
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
line-height: 38px;
padding: 0px 12px;
overflow: hidden;
2022-07-15 10:40:02 +08:00
}
.msg-bottom {
display: flex;
align-items: center;
justify-content: space-between;
height: 38px;
padding: 0 16px;
2022-07-25 14:10:46 +08:00
border-top: 1px solid #D0D4DC;
2022-07-15 10:40:02 +08:00
.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;
}
}
}
}
::v-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;
2022-07-25 16:38:02 +08:00
.left {
display: flex;
align-items: center;
}
2022-07-15 10:40:02 +08:00
}
}
::v-deep .right-tips {
display: flex;
align-items: center;
i {
margin-right: 4px;
color: #8899bb;
font-size: 16px;
}
span {
color: #888888;
font-size: 12px;
}
}
}
2022-07-13 09:13:31 +08:00
</style>