GterForumWeB/src/views/detail/detailIndex.vue

1194 lines
42 KiB
Vue
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="container">
<div class="detail-head flexacenter">
<div class="detail-section">版块<span class="section-name">香港澳门台湾留学申请</span></div>
<div class="detail-data flexacenter">
<div class="detail-data-item flexacenter">
<img class="detail-data-eye" src="@/assets/img/detail/eye.png">{{ info.views }}
</div>
<div class="detail-data-item flexacenter">
<img class="detail-data-comment" src="@/assets/img/detail/comment.png">{{ info.replies }}
</div>
</div>
</div>
<div class="detail-title-box">
<div class="detail-title-item detail-title-jinghua flexcenter" v-if="info.digest > 0">精华</div>
<div class="detail-title-item detail-title-label flexcenter" v-if="info.typename">{{ info.typename }}</div>
{{ info.subject }}
</div>
<!-- -->
<div class="card flexcenter">
<div class="card-item shadow">
<div class="card-head flexacenter">
<img class="card-head-icon" :src="info.avatar" />
<div class="card-head-content flex1 flexflex">
<div class="card-head-name flexflex">{{ info.author }}</div>
<div class="card-head-time">{{ $formattedDate(info.dateline || '') }}</div>
</div>
<div class="card-head-fool">楼主</div>
</div>
<template v-if="type == 5">
<div class="summary-content">
<div class="summary-content-item" v-for="(item, index) in collegelist" :key="index">
<div class="summary-offer-head flexacenter">
<span class="summary-offer-head-title">Offer {{ index + 1 }}</span>
<a class="flexacenter" :href="item.url">详情<svg-icon icon-class="arrowsBlackLeft"
class-name="summary-offer-head-icon"></svg-icon></a>
</div>
<div class="summary-offer-box">
<template v-for="(it, i) in offerinfoKey">
<div class="summary-offer-item flexacenter" :key="i" v-if="item[it.key]">
<div class="summary-offer-key flexacenter">{{ it.name }}</div>
<div class="summary-offer-value flexacenter">{{ item[it.key] }}</div>
</div>
</template>
</div>
</div>
<div class="summary-content-item">
<div class="summary-offer-head flexacenter">
<span class="summary-offer-head-title">总结</span>
<a class="flexacenter" :href="info.url">详情<svg-icon icon-class="arrowsBlackLeft"
class-name="summary-offer-head-icon"></svg-icon></a>
</div>
<div class="summary-wenzi" v-html="info.message"></div>
</div>
<a class="examine-btn flexcenter" :href="info.url">
查看当前总结详情
<div class="examine-btn-outside flexcenter">
<svg-icon icon-class="arrowsRoundBlackLeft" class-name="examine-btn-icon"></svg-icon>
</div>
</a>
</div>
</template>
<template v-else-if="type == 6">
<div class="offer-content">
<div class="offer-content-box">
<template v-for="(item, index) in offerinfoKey">
<div class="offer-content-item flexacenter" :key="index" v-if="offerinfo[item.key]">
<div class="offer-content-key" v-if="offerinfo[item.key]">{{ item.name }}</div>
<div class="offer-content-value">{{ offerinfo[item.key] }}</div>
</div>
</template>
</div>
<a class="examine-btn flexcenter" :href="offerinfo.url">
查看当前捷报详情
<div class="examine-btn-outside flexcenter">
<svg-icon icon-class="arrowsRoundBlackLeft" class-name="examine-btn-icon"></svg-icon>
</div>
</a>
</div>
</template>
<template v-else-if="type == 2">
<div class="offer-content">
<div class="offer-content-box">
<template v-for="(item, index) in interviewKey">
<div class="offer-content-item flexacenter" :key="index" v-if="info[item.key]">
<div class="offer-content-key" v-if="info[item.key]">{{ item.name }}</div>
<div class="offer-content-value" v-html="info[item.key]"></div>
</div>
</template>
</div>
</div>
</template>
<template v-else-if="type == 3">
<div class="offer-content">
<div class="offer-content-box" v-if="tenementInfoState">
<template v-for="(item, index) in tenementKey">
<div class="offer-content-item flexacenter" :key="index" v-if="info[item.key]">
<div class="offer-content-key" v-if="info[item.key]">{{ item.name }}</div>
<div class="offer-content-value" v-if="item.key != 'school'" v-html="info[item.key]">
</div>
<div class="offer-content-value" v-else>
<template v-for="(it) in info[item.key]">{{ it.name }}</template>
</div>
</div>
</template>
</div>
<div v-html="info.message" class="vHtmlMessage" style="">
</div>
</div>
</template>
<template v-else>
<div class="offer-content">
<div v-html="info.message" style="line-height: normal;" class="vHtmlMessage" >
</div>
</div>
</template>
</div>
<template v-if="false">
<div class="card-item shadow" v-for="(item, index) in 7" :key="index">
<div class="card-head flexacenter">
<img class="card-head-icon"
src="https://axure-file.lanhuapp.com/md516b251fb-9cfa-46fc-a9b6-2a41a7b4dc37__3ad73406ff4bc8b138dafc6dcbf1a635.svg" />
<div class="card-head-content flex1 flexflex">
<div class="card-head-name flexflex">闫旭Mike <div class="landlord flexcenter" v-if="index == 0">
楼主
</div>
</div>
<div class="card-head-time">2022-7-6 14:56</div>
</div>
<div class="card-head-fool">{{ index == 0 ? '楼主' : `${index}楼` }}</div>
</div>
<div class="card-content flex1">
<!-- 回复引用 -->
<div class="quotation flexflex" v-if="index == 1">
<svg-icon icon-class="quotation-left" class-name="quotation-icon"></svg-icon>
<div class="quotation-right flex1 flexflex">
<div class="quotation-wenzi flex1 three-lines">
这个离开香港是否超过180天应该是居籍的判断而非物理空间变化的判断。简单来说只要你在香港纳税你在香港有工作有现金流有房子…这个离开香港是否超过180天应该是居籍的判断而非物理空间变化的判断。简单来说只要你在香港纳税你在香港有工作有现金流有房子…这个离开香港是否超过180天应该是居籍的判断而非物理空间变化的判断。简单来说只要你在香港纳税你在香港有工作有现金流有房子…
</div>
<div class="quotation-bottom flexacenter">zhangsd 发表于 2022-7-6 14:56
<svg-icon icon-class="quotation-right" class-name="quotation-icon"></svg-icon>
</div>
</div>
</div>
之前申请永久居民参考了不少寄托的帖子和经验现在回馈给大家积攒RP。
<!-- 未解锁区域 -->
<div class="flexcenter content-unlock content-unlock-no" v-if="index == 3 || index == 4">
<img class="unlock-icom" src="@/assets/img/detail/unlock.png">
{{ index == 3 ? '作者设置了回复可见' : '' }}
{{ index == 4 ? '作者设置了投币可见' : '' }}
</div>
<!-- 已经解锁区域 -->
<div class="content-unlock content-already" v-if="index == 5 || index == 6">
<div class="content-already-header flexflex">
- 本内容投币可见 -
</div>
<div class="content-unlock-wenzi">
香港身份证件和IANG Visa label
香港购买的保险和MPF的缴费账单
电话账单和当时香港上台的合约文件;
</div>
</div>
之前申请永久居民参考了不少寄托的帖子和经验现在回馈给大家积攒RP。
之前申请永久居民参考了不少寄托的帖子和经验现在回馈给大家积攒RP。
</div>
</div>
</template>
</div>
<!-- 分页 -->
<div class="paging flexcenter">
<el-pagination small background layout="prev, pager, next" :total="1000">
</el-pagination>
</div>
<!-- 底部 -->
<div class="discuss-bottom flexflex flexacenter">
<!-- 底部的轮播 -->
<div class="swiper">
<div class="bottom-item flexacenter">
<div class="bottom-comment flexacenter" @click="setValue('popState', 'discussionSingle')">
<svg-icon icon-class="pen" class-name="bottom-comment-icom"></svg-icon>
想问啥,大胆问
<div class="loginBtn" v-if="!islogin" @click.stop="setValue('isloginBtnState', true, 'boolean')">
</div>
</div>
</div>
</div>
<div class="bottom-item flex1 flexacenter">
<div class="bottom-operation-box flex1 flexacenter">
<div class="bottom-operation-item flex1 flexcolumn flexcenter" @click="tapLike()">
<div class="praise_bubble" id="praise_bubble" @click.stop=""
:style="{ height: prepareLiskeState ? '' : '.5333rem' }">
<div class="bubble" v-for="(item, index) in listlist" :key="index"></div>
</div>
<div class="loginBtn" v-if="!islogin" @click.stop="setValue('isloginBtnState', true, 'boolean')">
</div>
<img class="bottom-operation-icom" :class="{ 'prepareLiskeAnimateState': prepareLiskeAnimateState }"
src="@/assets/img/detail/like.png" />
<div class="bottom-operation-text">{{ stat.like == 0 ? '' : stat.like }}</div>
</div>
<div class="bottom-operation-item flex1 flexcolumn flexcenter" @click="postcollect()">
<div class="loginBtn" v-if="!islogin" @click.stop="setValue('isloginBtnState', true, 'boolean')">
</div>
<img v-if="iscollect == 0" class="bottom-operation-icom" src="@/assets/img/detail/collect.png">
<img v-else class="bottom-operation-icom" src="@/assets/img/detail/collect-c.png">
<div class="bottom-operation-text">收藏</div>
</div>
<div class="bottom-operation-item flex1 flexcolumn flexcenter" @click="transmit()">
<img class="bottom-operation-icom bottom-transmit-icom" src="@/assets/img/detail/share.png" />
<div class="bottom-operation-text">转发</div>
<button class="bottom-operation-button flexcolumn flexcenter" open-type="share"></button>
</div>
</div>
</div>
</div>
<detail-reply :two-comment-data="twoCommentData" :pop-state="popState"></detail-reply>
<coins :coin-config="coinConfig" :pop-state="popState"></coins>
</div>
</template>
<script>
import DetailReply from '@/components/DetailReply'
import Coins from '@/components/unlock/Coins'
export default {
name: 'detailIndex',
data() {
return {
twoCommentData: null,
// avatar: "https://oss.gter.net/avatar/97KwEWANd_4DHWiY6VbnSUFSCKroYWFjYQ~~/middle",
// content: "评论回复",
// },
popState: "",
coinConfig: {
strategy: {
button: "攒币指南",
tips: "你的寄托币不够,快去发帖挣币吧",
url: "https://bbs.gter.net/thread-2543548-1-1.html",
}
},
islogin: true,
prepareLiskeState: false,
prepareLiskeAnimateState: false,
stat: {
like: 0
},
iscollect: 0,
ispostOfferLike: null, // 点击点赞提交状态
offerLikesumTimer: 0, // offer点赞累加定时器
offerLikesumAnimateTimer: 0, // offer点赞动画定时器
listlist: [],
tid: 0, // 帖子id
info: {},
type: 0, // 定位帖 1 面经 2 租房帖 3 总结 5 捷报 6
token: "",
offerinfo: {}, // offer捷报详情
offerinfoKey: [{ // offer 字段汇总
key: "schoolname",
name: "申请学校"
}, {
key: "degree",
name: "学位"
}, {
key: "professional",
name: "专业"
}, {
key: "project",
name: "项目"
}, {
key: "apply_results",
name: "申请结果"
}, {
key: "semester",
name: "入学学期"
}, {
key: "noticedate",
name: "通知时间"
}, {
key: "useperformanceStr",
name: "使用成绩"
}],
shareurl: "", // 分享链接
collegelist: [],// 总结里的 offer 列表数据
tenementKey: [{ // 租房 字段汇总
key: "typeText",
name: "出租方式"
}, {
key: "rent",
name: "月租/"
}, {
key: "property",
name: "房屋类型"
}, {
key: "floor",
name: "所在楼层"
}, {
key: "acreage",
name: "面积(平方呎)"
}, {
key: "locationText",
name: "所在区域"
}, {
key: "addressText",
name: "地段/地址"
}, {
key: "school",
name: "附近学校"
}, {
key: "gender",
name: "性别要求"
}, {
key: "rentaldurationText",
name: "出租时长"
}, {
key: "introduction",
name: "房东或合租人介绍"
}, {
key: "intermediary_text",
name: "发布者身份"
}, {
key: "telText",
name: "电话"
}, {
key: "wechatText",
name: "微信"
}],
interviewKey: [{ // 面经 字段汇总
name: "学校",
key: "school"
}, {
name: "专业",
key: "profession"
}, {
name: "项目",
key: "project"
}, {
name: "毕业时间",
key: "interviewtime"
}, {
name: "面试过程及内容",
key: "message"
}],
};
},
mounted() {
this.tid = this.$route.query['tid']
this.getDetail()
},
methods: {
// 获取详细信息
getDetail() {
this.$http.post("/api/thread", {
tid: this.tid
}).then(res => {
if (res.code != 200) return
let data = res.data
let info = data.info
const reg = new RegExp("\r\n", "g")
info['message'] = info['message'].replaceAll(reg, '<br/>')
info['message'] = info['message'].replace(/<img[^>]*>/g, (match) => {
return match.replace(/width="[^"]*"/g, '').replace(/height="[^"]*"/g, '');
});
this.info = info
this.type = data.type
this.token = data.token
if (this.type == 6) this.getOfferDetail()
else if (this.type == 5) this.getsummaryDetails()
else if (this.type == 3) this.getTenementDetails()
else if (this.type == 2) this.getInterviewDetails()
this.getPostList()
})
},
// 获取offer详情
getOfferDetail() {
this.$http.get("/api/forum/details", {
id: this.token
}, 'offer').then(res => {
let data = res.data
// let offerinfo = data.offerinfo
let offerinfo = data.collegelist[0]
console.log("offerinfo", offerinfo);
let useperformanceStr = ""
offerinfo.useperformance && offerinfo.useperformance.forEach((el, index) => {
useperformanceStr += el + (offerinfo.useperformance.length - 1 == index ? '' : '、')
})
offerinfo['useperformanceStr'] = useperformanceStr
// offerinfo['schoolname'] = offerinfo.school.name
this.offerinfo = offerinfo
// this.shareurl = data.shareurl
})
},
// 获取总结详情
getsummaryDetails() {
this.$http.get(`/api/forum/details`, {
id: this.token
}, 'offer').then(res => {
let data = res.data
let collegelist = data.collegelist
collegelist.forEach((el, index) => {
let useperformanceStr = ""
el.useperformance && el.useperformance.forEach((element, i) => {
useperformanceStr += element + (el.useperformance.length - 1 == i ? '' : '、')
})
el['useperformanceStr'] = useperformanceStr
})
this.info = { ...this.info, ...data.info }
console.log(this.info);
this.collegelist = collegelist
this.shareurl = data.shareurl
})
},
// 获取租房详情 https://app.gter.net/tenement/forum/show
getTenementDetails() {
console.log("ggjlgjkgj");
this.$http.post("/tenement/forum/show", {
// tid: 2540476
token: this.token
}, "tenement").then(res => {
if (res.code == 201) this.tenementInfoState = true
let tenementKey = this.tenementKey
let info = { ...this.info, ...res.info }
info['typeText'] = info.gptype + '>>' + info.type
tenementKey[1].name += info['currency'] ? info['currency'] : '港元'
if (info.cityid == 1) info['locationText'] = info.location
else info['locationText'] = info.country + '>>' + info.city
info['addressText'] = info['address'] || '-'
info['rentaldurationText'] = info.rentalduration || '不限'
info['telText'] = info.tel || '-'
info['wechatText'] = info.wechat || '-'
const reg = new RegExp("\r\n", "g")
info['message'] = info['message'].replaceAll(reg, '<br/>')
info['message'] = info['message'].replace(/<img[^>]*>/g, (match) => {
console.log("match", match);
return match.replace(/width="[^"]*"/g, '').replace(/height="[^"]*"/g, '');
});
this.info = info
})
},
// 获取面经详情
getInterviewDetails() {
// https://app.gter.net/InterviewExperience/thread
this.$http.post("/InterviewExperience/thread", {
// token: this.token,
// tid: this.tid
tid: 2322145,
uniqid: "--G1tS2SCTOQyoOMiedlLKxTnFvHWjBwQezsJjvVJFwgqOtOFeYr4_LAAG5RV37ETvMl2Zd4tSCc-_dqeKpERxXsx-tPfXrUs0kUysTGLzgxYzU~",
token: "5e3c42209eebfbab66e6f0d6c70a53c7",
}, "tenement").then(res => {
console.log(res);
if (res.code != 200) return
let data = res.data
this.info = { ...this.info, ...data }
})
},
// 获取回复列表
getPostList() {
this.$http.post("/api/thread/postList", {
token: this.token,
page: 1,
limit: 20
}).then(res => {
console.log(res);
})
},
// 集中处理回复帖子
postComment(message) {
this.$http.post("/api/operation/reply", {
token: this.token,
message
}).then(res => {
console.log(res);
})
},
// 点击点赞
tapLike() {
this.isState = true
this.prepareLiskeState = true
this.prepareLiskeAnimateState = true
clearTimeout(this.offerLikesumTimer)
clearTimeout(this.offerLikesumAnimateTimer)
let praiseBubble = document.getElementById("praise_bubble");
console.log("praiseBubble", praiseBubble);
let last = 0;
let b = Math.floor(Math.random() * 8) + 1; // 1 到 7的 图片
// b = 1; // 测试写固定的
const bl = Math.floor(Math.random() * 11) + 1; // bl1~bl11
let d = document.createElement("div");
d.style.backgroundImage = `url('./img/bg${b}.png')`
d.style.backgroundSize = 'contain'
d.className = `bubble`;
// d.style.animation = `bubble_1 bubble_${bl} 1.5s linear 1 forwards, bubble_big_${Math.floor(Math.random() * 3) + 1} 0.8s linear 1 forwards, bubble_y 1.5s linear 1 forwards`
// d.style.animation = `bubble_1 1.5s linear 1 forwards`
d.dataset.t = String(Date.now());
praiseBubble.appendChild(d);
// this.$forceUpdate()
this.stat.like++
this.prepareLiskeNum++
this.offerLikesumAnimateTimer = setTimeout(() => {
this.prepareLiskeAnimateState = false
}, 500)
this.offerLikesumTimer = setTimeout(() => {
this.ispostOfferLike = false
this.postOfferLike()
}, 2000)
},
postOfferLike() {
if (this.ispostOfferLike) return
this.ispostOfferLike = true
this.offerLikesum = 0
this.prepareLiskeState = false
let key = new Date().getTime() + ''
// let num = util.base64_encode(key + util.base64_encode(this.data.prepareLiskeNum + ''))
// util.wxpost("/miniprogramApi/offer/behaviour/like", {
// token: this.data.token,
// num,
// key
// }).then(res => {
// if (res.code != 200) return
// let data = res.data
// this.offerLikesum = 0
// }).finally(() => {
// this.setData({
// prepareLiskeState: false
// })
// })
},
// 点击转发
transmit() {
let value = location.href
this.$copy(value, "已经复制链接,欢迎分享!")
},
setValue(key, value) {
this[key] = value
},
// 收藏
postcollect() {
console.log("点击收藏");
}
},
components: {
DetailReply, Coins
}
};
</script>
<style lang="scss" scoped>
.container {
margin-top: 1.3rem;
padding-bottom: 2.8rem;
.aaa {
color: red;
}
.detail-head {
color: #7F7F7F;
padding: .191rem 0.2933rem 0;
justify-content: space-between;
.detail-section {
justify-content: space-between;
font-size: .32rem;
.section-name {
color: #333;
}
}
.detail-data {
color: rgb(127, 127, 127);
.detail-data-item {
color: rgb(127, 127, 127);
font-size: .28rem;
img {
margin-right: .12rem;
}
.detail-data-eye {
width: .36rem;
height: .36rem;
}
.detail-data-comment {
width: .32rem;
height: .32rem;
}
&:last-of-type {
margin-left: .32rem;
}
}
}
}
.detail-title-box {
padding: .72rem 0.2933rem 0;
color: #000;
font-size: .56rem;
font-weight: 650;
.detail-title-item {
font-size: .32rem;
color: #fff;
height: .64rem;
display: inline-flex;
margin-right: .16rem;
font-weight: 400;
&.detail-title-jinghua {
width: 1rem;
border-radius: .5rem .5rem 0;
background: linear-gradient(-57.3808deg, rgb(178, 152, 232) 0%, rgb(88, 70, 195) 100%);
}
&.detail-title-label {
background: rgb(51, 51, 51);
padding: 0 .16rem;
display: inline-flex;
border-radius: .16rem;
}
}
}
.card {
margin-top: .48rem;
flex-direction: column;
.card-item {
width: 9.4rem;
border-radius: .4rem;
background: #fff;
margin-bottom: .4rem;
.card-head {
padding: .48rem .32rem;
border-bottom: .0133rem solid #ebebeb;
.card-head-icon {
width: .96rem;
height: .96rem;
border-radius: 50%;
margin-right: .28rem;
}
.card-head-content {
flex-direction: column;
.card-head-name {
color: #333;
font-size: .32rem;
margin-bottom: .08rem;
.landlord {
color: rgb(127, 127, 127);
font-size: .26rem;
width: .64rem;
height: .44rem;
border: rgb(215, 215, 215) .0133rem solid;
background: rgb(240, 242, 245);
border-radius: .1rem;
margin-left: .16rem;
}
}
.card-head-time {
color: rgb(127, 127, 127);
font-size: .28rem;
}
}
.card-head-fool {
color: rgb(127, 127, 127);
font-size: .32rem;
}
}
.card-content {
color: #333;
font-size: .36rem;
line-height: .6rem;
padding: .5rem .32rem;
word-break: break-word;
.quotation {
width: 100%;
color: #333;
font-size: .32rem;
border-radius: .16rem;
background: rgb(246, 246, 246);
padding: .36rem .24rem;
box-sizing: border-box;
margin-bottom: .48rem;
.quotation-wenzi {
line-height: .52rem;
}
.quotation-icon {
width: .32rem;
height: .26rem;
}
.quotation-right {
flex-direction: column;
margin-left: .28rem;
.quotation-bottom {
color: #7F7F7F;
font-size: .28rem;
margin-top: .258rem;
.quotation-icon {
margin-left: .2rem;
}
}
}
}
.content-unlock {
&.content-unlock-no {
height: 3.2rem;
.unlock-icom {
width: .64rem;
height: .64rem;
margin-right: 0.2rem;
}
}
background: rgba(242, 242, 242, 0.7);
margin: .48rem 0;
color: #555555;
font-size: .32rem;
border-radius: .16rem;
&.content-already {
background: rgba(242, 242, 242, 0.7);
margin: .48rem 0;
padding: .32rem;
color: #555555;
font-size: .32rem;
border-radius: .16rem;
.content-already-header {
color: #7f7f7f;
font-size: .28rem;
justify-content: center;
}
.content-unlock-wenzi {
color: #333;
font-size: .36rem;
line-height: .6rem;
margin-top: .3rem;
}
}
}
}
.offer-content {
padding: .56rem .32rem;
.vHtmlMessage {
font-size: .36rem;
line-height: .6rem;
/deep/ strong {
font-weight: bold;
}
/deep/ img {
max-width: 100%;
}
}
.offer-content-box {
.offer-content-item {
line-height: .6rem;
align-items: flex-start;
&:not(:last-of-type) {
margin-bottom: .52rem;
}
.offer-content-key {
font-size: .32rem;
color: #7f7f7f;
width: 2.04rem;
}
.offer-content-value {
font-size: .36rem;
color: #333;
width: 7.32rem;
white-space: break-spaces;
}
}
}
}
.examine-btn {
color: #333;
font-size: .3rem;
background: rgba(242, 242, 242, 1);
height: .96rem;
border-radius: 4.1rem;
margin-top: .52rem;
.examine-btn-outside {
width: .4rem;
height: .4rem;
margin-left: .24rem;
background: #fddf6d;
border-radius: 50%;
.examine-btn-icon {
width: .22rem;
height: .24rem;
}
}
}
.summary-content {
padding: .56rem .32rem;
.summary-content-item {
border-radius: .16rem;
border: .0133rem solid rgba(235, 235, 235, 1);
margin-bottom: .32rem;
.summary-offer-head {
justify-content: space-between;
height: .8rem;
background: rgba(246, 246, 246, 1);
color: #333;
padding: 0 .24rem;
span,
a {
font-size: .32rem;
color: #333;
}
.summary-offer-head-title {
color: #000;
font-size: .4rem;
font-weight: 650;
}
.summary-offer-head-icon {
width: .14rem;
height: .36rem;
margin-left: .16rem;
}
}
.summary-offer-box {
padding-top: .28rem;
flex-direction: column;
justify-items: center;
.summary-offer-item {
line-height: .6rem;
padding: 0 .24rem;
box-sizing: border-box;
margin-bottom: .2rem;
.summary-offer-key {
width: 1.3rem;
color: #7f7f7f;
font-size: .32rem;
margin-right: .74rem;
}
.summary-offer-value {
font-size: .36rem;
color: #333;
}
}
}
.summary-wenzi {
color: #333;
font-size: .32rem;
line-height: .6rem;
padding: .28rem .24rem;
}
}
}
}
}
.paging {
margin-top: .48rem;
::v-deep {
.el-pagination.is-background .el-pager li:not(.disabled).active {
background: rgba(98, 177, 255, 1);
border-radius: 50%;
}
.el-pagination .btn-next .el-icon,
.el-pagination .btn-prev .el-icon {
font-size: .4rem;
}
}
}
.discuss-bottom {
position: fixed;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 100vw;
background-color: #fff;
padding: 0 0.4rem;
box-sizing: border-box;
z-index: 99;
border-top: 0.0133rem solid #dbdcdd;
padding-right: 0;
height: 2rem;
width: 10rem;
justify-content: space-between;
.swiper {
height: 2rem;
}
.bottom-item {
justify-content: space-between;
height: 100%;
.bottom-comment {
width: 4.6rem;
height: 0.8rem;
border-radius: 1rem;
padding: 0 0.28rem;
font-size: 0.32rem;
color: #aaaaaa;
background-color: #f2f2f2;
border: 0.0133rem solid #ebebeb;
box-sizing: border-box;
position: relative;
.bottom-comment-icom {
width: 0.4rem;
height: 0.4rem;
margin-right: 0.16rem;
}
}
.bottom-operation-box {
width: 3.8667rem;
justify-content: space-between;
}
.bottom-operation-icom {
width: 0.48rem;
height: 0.48rem;
margin-bottom: 0.1333rem;
}
.bottom-operation-item {
position: relative;
padding: 0 0.4rem;
}
.bottom-operation-button {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: transparent;
padding: 0;
margin: 0;
border: none;
outline: none;
&::after {
border: none;
}
}
.bottom-transmit-icom {
width: 0.4rem;
height: 0.4rem;
}
.bottom-operation-text {
font-size: 0.32rem;
color: #555555;
}
.bottom-information {
position: relative;
min-width: 4.6667rem;
max-width: 53.3333rem;
height: 0.8rem;
border-radius: 1rem;
background: linear-gradient(to right, #fff, #50e3c2, #50e3c2, #50e3c2);
}
.bottom-information-avatar {
width: 0.8rem;
height: 0.8rem;
border-radius: 50%;
}
.bottom-information-content {
color: #fff;
font-size: 0.2933rem;
display: flex;
align-items: center;
justify-content: space-around;
padding: 0 0.1333rem;
.vertical {
height: 0.2933rem;
background-color: #fff;
width: 0.0133rem;
}
}
.bottom-information-item:not(:last-of-type) {
justify-content: center;
}
}
.praise_bubble {
width: 50px;
height: 200px;
position: absolute;
bottom: 1.2rem;
background-color: transparent;
/deep/ {
.bubble {
position: absolute;
width: 40px;
height: 40px;
left: 50%;
bottom: 0px;
background-repeat: no-repeat;
background-size: 100%;
transform-origin: bottom;
animation: like 1.8s ease-out forwards;
// animation-fill-mode: forwards;
}
@keyframes like {
0% {
opacity: 1;
transform: translate(-50%, 0);
}
100% {
opacity: 0;
transform: translate(-50%, -200px);
}
}
}
}
}
}
</style>