添加投币和回应

This commit is contained in:
A1300399510 2024-07-26 18:49:40 +08:00
parent e7f6bbeaa4
commit 21ed7d94ef
8 changed files with 1241 additions and 89 deletions

353
app.vue
View File

@ -205,11 +205,14 @@
<img class="operate-icon operate-collect-icon" style="width: 13px; height: 8px;" src="./img/view-icon.svg" /> <img class="operate-icon operate-collect-icon" style="width: 13px; height: 8px;" src="./img/view-icon.svg" />
{{ detailsInfo["viewnum"] || 0 }} {{ detailsInfo["viewnum"] || 0 }}
</div> </div>
<ClientOnly>
<div class="operate-item flexacenter" @click="operateCollect()"> <div class="operate-item flexacenter" @click="operateCollect()">
<img class="operate-icon operate-collect-icon" v-if="detailsIscollection == 0" src="./img/collect-icon.png" /> <img class="operate-icon operate-collect-icon" v-if="detailsIscollection == 0" src="./img/collect-icon.png" />
<img class="operate-icon operate-collect-icon" v-else src="./img/collect-icon-colours.svg" /> <img class="operate-icon operate-collect-icon" v-else src="./img/collect-icon-colours.svg" />
{{ detailsInfo["collectionnum"] > 0 ? detailsInfo["collectionnum"] : "收藏" }} {{ detailsInfo["collectionnum"] > 0 ? detailsInfo["collectionnum"] : "收藏" }}
</div> </div>
</ClientOnly>
<div class="operate-item flexacenter operate-transmit" @mouseenter.stop="closeTransmitState()" @mouseleave.stop="closeAllTransmitState()"> <div class="operate-item flexacenter operate-transmit" @mouseenter.stop="closeTransmitState()" @mouseleave.stop="closeAllTransmitState()">
<img class="operate-icon operate-transmit-icon" src="./img/transmit-icon.png" /> <img class="operate-icon operate-transmit-icon" src="./img/transmit-icon.png" />
转发 转发
@ -246,6 +249,10 @@
<div class="answer-box-item" v-for="(item, index) in answerList" :key="index"> <div class="answer-box-item" v-for="(item, index) in answerList" :key="index">
<img class="aa" src="@/img/A.png" /> <img class="aa" src="@/img/A.png" />
<div class="edit-btn flexcenter" v-if="item['ismyself'] == 1" @click="openIAnswer(index)">
<img class="edit-icon" src="./img/edit-icon.png" />
</div>
<div class="answer-text" v-html="item['content']" @click="handleAnswerText"></div> <div class="answer-text" v-html="item['content']" @click="handleAnswerText"></div>
<div class="info-box flexacenter"> <div class="info-box flexacenter">
<div class="user-info flexacenter" @click="openUserInfo(index)"> <div class="user-info flexacenter" @click="openUserInfo(index)">
@ -269,23 +276,24 @@
</div> </div>
<div class="operate-box flexacenter"> <div class="operate-box flexacenter">
<div class="edit-box"> <div class="interaction-box flexacenter flex1">
<div class="edit-btn flexcenter" v-if="item['ismyself'] == 1" @click="openIAnswer(index)"> <div class="interaction-item flexacenter pitch">
<img class="edit-icon" src="./img/edit-icon.png" /> <template v-if="item.ripostecount?.total"> 回应 <span class="amount">{{ item.ripostecount?.total }}</span> </template>
<template v-else>添加回应</template>
</div> </div>
<div class="interaction-item flexacenter">讨论 <span class="amount">19</span></div>
<div class="interaction-item flexacenter">投币 <span class="amount">19</span></div>
</div> </div>
<div class="operate-list flexacenter"> <div class="operate-list flexacenter">
<div class="operate-item flexacenter" @click="operateLike(item['token'], index)"> <!-- <div class="operate-item flexacenter" @click="operateLike(item['token'], index)">
<img class="operate-icon operate-like-icon" v-if="item['islike'] == 1" src="./img/like-icon-colours.png" /> <img class="operate-icon operate-like-icon" v-if="item['islike'] == 1" src="./img/like-icon-colours.png" />
<img class="operate-icon operate-like-icon" v-else src="./img/like-icon.png" /> <img class="operate-icon operate-like-icon" v-else src="./img/like-icon.png" />
{{ item["likenum"] }} {{ item["likenum"] }}
</div> </div>
<!-- <div class="operate-item flexacenter" :class="{ commentnum: item['commentState'] }" @click="openCommentState(index)"> -->
<div class="operate-item flexacenter" :class="{ commentnum: item['commentState'] }"> <div class="operate-item flexacenter" :class="{ commentnum: item['commentState'] }">
<img class="operate-icon operate-comment-icon" src="./img/comment-icon.png" /> <img class="operate-icon operate-comment-icon" src="./img/comment-icon.png" />
<!-- {{ item["commentnum"] }} -->
{{ item["commentnum"] }} {{ item["commentnum"] }}
</div> </div> -->
<div class="operate-item flexacenter" @click="operateCollect(item['token'], index)"> <div class="operate-item flexacenter" @click="operateCollect(item['token'], index)">
<img class="operate-icon operate-collect-icon" v-if="item['iscollection'] == 1" src="./img/collect-icon-colours.svg" /> <img class="operate-icon operate-collect-icon" v-if="item['iscollection'] == 1" src="./img/collect-icon-colours.svg" />
<img class="operate-icon operate-collect-icon" v-else src="./img/collect-icon.png" /> <img class="operate-icon operate-collect-icon" v-else src="./img/collect-icon.png" />
@ -319,6 +327,47 @@
</div> </div>
</div> </div>
<div class="answer-coins" v-if="false">
<div class="coins-show flexacenter">
<img class="coins-icon" src="@/img/bi-icon.png" />
<div class="coins-text flexacenter flex1">该回答已获 <span class="quantity">0</span> 个寄托币</div>
<div class="coins-btn flexcenter">给TA投币</div>
</div>
<div class="answer-coins-list">
<div class="answer-coins-item flexacenter" v-for="(item, index) in 9" :key="index">
<div class="ranking">{{ index + 1 }}</div>
<div class="coins-user flexacenter flex1">
<img class="coins-user-img" src="https://axure-file.lanhuapp.com/md5__1f472a5724af5648ff3ece07a2d77b36.svg" />
<div class="coins-user-name flex1">君语</div>
</div>
<div class="bi flexacenter">
<div class="bi-amount">12</div>
</div>
</div>
</div>
</div>
<div class="respond-area" v-if="true">
<div class="respond-already-item flexacenter" :class="{ 'pitch': it.selected }" v-for="(it, i) in item.ripostelist" :key="i" @click="selectEomji(it.item, index)">
<div class="code flexacenter" v-html="jointriposte(it.item)"></div>
{{ it.num }}
</div>
<div v-if="item.ripostelist?.length <= 3" class="respond-select flexacenter">
<template v-for="(it, i) in randomEmojis.slice(0, item.ripostelist?.length == 0 ? 8 : 5)" :key="i">
<div class="respond-select-item" v-html="jointriposte(it)" @click="selectEomji(it, index)"></div>
</template>
<RespondAdd :riposteoptions="riposteoptions" @selectEomji="selectEomji" :index="index"></RespondAdd>
</div>
<RespondAdd v-else :riposteoptions="riposteoptions" :index="index" @selectEomji="selectEomji"></RespondAdd>
</div>
<div class="respond-list-btn" v-if="item.ripostecount?.user > 0" @click="openRespondDetails(index)">
<span class="respond-list-btn-amount">{{ item.ripostecount?.user }}</span>
人回应
<img class="respond-list-btn-icon" src="@/img/arrowsRight.svg" />
</div>
<template v-if="item['commentState']"> <template v-if="item['commentState']">
<div class="post-comment flexacenter" :class="{ 'post-comment-radius': item.commentnum == 0 }"> <div class="post-comment flexacenter" :class="{ 'post-comment-radius': item.commentnum == 0 }">
<input class="post-input flex1" placeholder="说点什么…" v-model="item['commentInput']" /> <input class="post-input flex1" placeholder="说点什么…" v-model="item['commentInput']" />
@ -439,18 +488,6 @@
<img class="more-comments-icon" src="@/img/arrow-circular-gray.png" /> <img class="more-comments-icon" src="@/img/arrow-circular-gray.png" />
</div> </div>
</div> </div>
<!-- 评论为空时 -->
<!-- <div class="comments-empty-box flexflex" v-else>
<div class="empty-box flexcenter">
<div class="dot-list flexacenter">
<img class="dot-item" src="./img/dot-yellow.svg" v-for="item in 3" :key="item" />
<img class="dot-item" src="./img/dot-gray.svg" v-for="item in 3" :key="item" />
</div>
<img class="empty-icon" src="./img/empty-icon.svg" />
</div>
<div class="empty-hint">和我说说你的想法或疑问吧</div>
</div> -->
</template> </template>
</div> </div>
@ -727,7 +764,7 @@
<div class="form"> <div class="form">
<div class="radio-area flexacenter"> <div class="radio-area flexacenter">
<div class="radio-area-item flexacenter" :class="{ pitch: checkList.includes(s) }" v-for="(s, i) in reasonList" :key="i" @click="selectRadio(s)"> <div class="radio-area-item flexacenter" :class="{ pitch: checkList.includes(s) }" v-for="(s, i) in reasonList" :key="i" @click="selectRadio(s)">
<div class="radio-area-frame"></div> <div cdivlass="radio-area-frame"></div>
{{ s }} {{ s }}
</div> </div>
</div> </div>
@ -742,6 +779,8 @@
</div> </div>
</div> </div>
</div> </div>
<RespondPop v-if="respondPopState" :respondDetail="respondDetail" :respondPopObj="respondPopObj" @closePopList="closePopList" @selectEomji="selectEomji"></RespondPop>
</div> </div>
</div> </div>
</template> </template>
@ -757,9 +796,8 @@
// "todaysigned": 0 // "todaysigned": 0
// } // }
import { onMounted, onUnmounted, ref, nextTick, watchEffect, watch } from "vue" import { onMounted, onUnmounted, ref, nextTick, watchEffect, watch, provide } from "vue"
import axios from "axios" import axios from "axios"
export default { export default {
name: "#answer-app", name: "#answer-app",
async setup() { async setup() {
@ -771,8 +809,7 @@ export default {
emulateJSON: true, emulateJSON: true,
withCredentials: true, withCredentials: true,
headers: { headers: {
authorization: process.env.NODE_ENV !== "production" && "223fe8a4ea0ede029244b3b01f0bdaad", // ada authorization: process.env.NODE_ENV !== "production" && "c5438975031a43a61c13252623753fc5", //
// "7a89997c2ccd8cb5ed8cb20d843dafdd", // ada
}, },
}) })
.then(function (res) { .then(function (res) {
@ -806,8 +843,7 @@ export default {
emulateJSON: true, emulateJSON: true,
withCredentials: true, withCredentials: true,
headers: { headers: {
authorization: process.env.NODE_ENV !== "production" && "223fe8a4ea0ede029244b3b01f0bdaad", // authorization: process.env.NODE_ENV !== "production" && "c5438975031a43a61c13252623753fc5", //
// "7a89997c2ccd8cb5ed8cb20d843dafdd", //
}, },
}) })
.then(function (res) { .then(function (res) {
@ -884,6 +920,8 @@ export default {
const params = route.query const params = route.query
// console.log(params);
// getDetails(params.uniqid)
// //
setTimeout(() => { setTimeout(() => {
if (params["ispublish"]) questionsInit() if (params["ispublish"]) questionsInit()
@ -1290,14 +1328,22 @@ export default {
let data = res.data let data = res.data
data.data.forEach((element, index) => { data.data.forEach((element, index) => {
element["commentList"] = [] console.log("element", element)
if (element["commentnum"] > 0) {
element["showOneCommentState"] = true
nextTick(() => { // element["commentList"] = []
openCommentState(index) // if (element["commentnum"] > 0) {
}) // element["showOneCommentState"] = true
} else element["commentState"] = true // nextTick(() => {
// openCommentState(index)
// })
// } else element["commentState"] = true
if (element.ripostes > 0) {
nextTick(() => getRiposte(index))
} else {
element["ripostelist"] = []
element["ripostecount"] = {}
}
}) })
// console.log("data.data", data.data) showOneCommentState // console.log("data.data", data.data) showOneCommentState
@ -1663,7 +1709,6 @@ export default {
targetAnswerList[index]["commentList"][ind]["child"] = merged1 targetAnswerList[index]["commentList"][ind]["child"] = merged1
answerList.value = targetAnswerList answerList.value = targetAnswerList
}) })
} }
@ -2304,6 +2349,7 @@ export default {
// URLPV // URLPV
if (window._czc) window._czc.push(["_trackPageview", contentUrl]) if (window._czc) window._czc.push(["_trackPageview", contentUrl])
} }
// url key // url key
const deleteState = (keys = []) => { const deleteState = (keys = []) => {
if (typeof window === "undefined") return if (typeof window === "undefined") return
@ -2581,40 +2627,8 @@ export default {
replaceState({ uniqid: params["uniqid"] }) replaceState({ uniqid: params["uniqid"] })
seo.value = data.seo seo.value = data.seo
// handleInsertRelatedlist(params["uniqid"]);
}) })
.catch(error => console.error(error)) .catch(error => console.error(error))
// if (process.server) {
// await $ajax("/api/details", {uniqid: params["uniqid"]})
// .then(res => {
// if (res.code != 200) return
// let data = res.data
// detailsInfo.value = data["info"] || {}
// detailsIsanswered.value = data["isanswered"] || 0
// detailsIscollection.value = data["iscollection"] || 0
// detailsIsmyself.value = data["ismyself"] || 0
// detailsToken = data["token"] || ""
// detailShare.value = data["share"] || {}
// type.value = "details"
// calculateListIndex(data.info, params["uniqid"])
// answerList.value = []
// answerPage.value = 1
// getAnswerList()
// closeAllTransmitState()
// replaceState({uniqid: params["uniqid"]})
// seo.value = data.seo
// })
// .finally(() => {
// detailLoading.value = false
// })
// }
} }
await $ajax("/api/lists", { await $ajax("/api/lists", {
@ -2786,7 +2800,6 @@ export default {
// //
const sendMessage = uin => { const sendMessage = uin => {
console.log("uin", uin)
if (uin && typeof messagePrivateItem == "function") { if (uin && typeof messagePrivateItem == "function") {
messagePrivateItem({ uin: uin }) messagePrivateItem({ uin: uin })
return return
@ -2836,7 +2849,211 @@ export default {
answerList.value[index]["showOneCommentState"] = false answerList.value[index]["showOneCommentState"] = false
} }
return { handleLookOnly, zeroreply, replaceNumberObj, closeMyModel, myModelList, myModelState, listHeight, bottomTpsStyle, TAHomePage, sendMessage, avatarState, openUserInfo, isNeedLogin, handleInputYou, openListIAnswer, isListEmptyState, cutYourAnswerAnonymous, handleYourAnswer, yourAnswer, handleLogo, inTheEndState, setItemUrl, seo, originUrl, handleMenuState, reasonList, checkList, alertShow, alertText, selectRadio, alertSubmit, cutType, dialogSrc, answerPage, handleDetailsScroll, replaceState, copyText, boxClass, questionPlaceholderState, yourAnswerPlaceholderState, handleInput, handlePaste, itemStyle, listStyle, listBoxStyle, myType, type, pitchIndex, cut, list, keyword, keywordText, getList, total, typeList, typePitch, getDetails, detailsInfo, detailsIsanswered, detailsIscollection, detailsIsmyself, detailShare, detailLoading, answerList, operateLike, operateCollect, IAnswerState, IAnswerEditState, IAnswerInfo, amendIAnswer, openIAnswer, closeIAnswer, submitAnswer, openCommentState, submitAnswerComments, operateAnswerCommentsLike, openAnswerCommentsChild, closeAnswerCommentsChild, alsoCommentsData, handleAllComment, myCollectionList, myCollectionCount, myQuestionsList, myQuestionsCount, myAnswerList, myAnswerCount, cutAnswerPopupState, handleDate, handleCollectionScroll, handleAnswersScroll, handleQuestionsScroll, cancelCollection, getMyCollection, questionsSetp, questionsObj, cutAnonymous, cutQuestionsSetp, cutQuestionsPopupState, questionsTypeList, postingIssue, choosingTheme, handleMy, changeAnonymous, changeAnonymousQuestions, pageHeaderHeight, pageListHeight, questionsTransmitState, questionsTransmitMaskState, closeAllTransmitState, closeTransmitState, handleAnswerTransmitList, closeDetailMode, tabListFixeState, handleListScroll, historicalSearchState, historicalSearchList, searchFocus, searchBlur, searchClick, handleClickHistoricalItem, handleClickClear, isSearchMode, questionsInit, myCount, msg, myOpenDetails, handleAnswerText, getCurrentUrl, loading, showComments } //
const jointriposte = item => {
return `&#x${item};`
}
let ripostelist = ref([])
let ripostecount = ref({})
let riposteoptions = ref([
{
"name": "默认",
"baseUrl": "{@}riposte/img",
"data": {
"c150": "c150.png",
"c162": "c162.png",
"c126": "c126.png",
"c133": "c133.png",
"c157": "c157.png",
"c069": "c069.png",
"c005": "c005.png",
"c081": "c081.png",
"c026": "c026.png",
"c004": "c004.png",
"c011": "c011.png",
"c002": "c002.png",
"c059": "c059.png",
"c140": "c140.png",
"c167": "c167.png",
"c168": "c168.png",
"c169": "c169.png",
"c170": "c170.png",
"c171": "c171.png",
"c172": "c172.png",
"c173": "c173.png",
},
},
{
"name": "旗帜",
"baseUrl": "{@}riposte/img",
"data": {
"c093": "c093.png",
"c094": "c094.png",
"c095": "c095.png",
"c096": "c096.png",
"c097": "c097.png",
"c098": "c098.png",
"c099": "c099.png",
"c100": "c100.png",
"c101": "c101.png",
"c102": "c102.png",
"c103": "c103.png",
"c104": "c104.png",
"c105": "c105.png",
"c106": "c106.png",
"c107": "c107.png",
"c108": "c108.png",
"c109": "c109.png",
"c110": "c110.png",
"c111": "c111.png",
"c112": "c112.png",
"c113": "c113.png",
"c114": "c114.png",
"c115": "c115.png",
},
},
])
const getRiposte = index => {
let target = answerList.value[index]
$ajax("/api/riposte/riposteGet", { token: target.token }).then(res => {
console.log("res", res)
if (res.code != 200) return
let data = res.data
target.ripostecount = data.count || {}
target.ripostelist = data.list || []
answerList.value[index] = target
// if (ripostelist.value.length <= 3) randomEmoji()
})
}
let randomEmojis = ref(["c150", "c167", "c002", "c162", "c157", "c133", "c011", "c004"]) // emoji
// 7 Emoji
const randomEmoji = () => {
let emojiList = ripostelist.value
// Emoji
let exclude = []
emojiList.forEach(element => {
exclude.push(element.item)
})
let selectedList = [] // Emoji To be selected
//
for (const key in riposteoptions.value[0].data) {
if (key != "c150") selectedList.push(key)
}
const random = []
if (!exclude.includes("c150")) random.push("c150") // emoji
selectedList = selectedList.filter(itemB => !exclude.includes(itemB))
//
let indexes = []
while (indexes.length < 7) {
let randomIndex = Math.floor(Math.random() * selectedList.length)
if (indexes.indexOf(randomIndex) === -1) {
indexes.push(randomIndex)
random.push(selectedList[randomIndex])
}
}
randomEmojis.value = random
}
const get = () => {
// /api/riposte/riposteGet
}
const selectEomji = (code, index, ispop = false, islist = false) => {
let target = answerList.value[index]
let ispitch = false
let isindex = target.ripostelist.findIndex(element => element.item === code)
if (isindex >= 0) ispitch = target.ripostelist[isindex].selected
if (ispitch && ispop) return
riposteSubmit(code, target.token).then(res => {
const data = res.data
target.ripostecount = data.count
if (isindex >= 0) {
target.ripostelist[isindex].num += ispitch ? -1 : 1
target.ripostelist[isindex].selected = !ispitch && target.ripostelist[isindex].num !== 0
if (target.ripostelist[isindex].num === 0) {
target.ripostelist.splice(isindex, 1)
}
} else {
target.ripostelist.push({
item: code,
num: 1,
selected: true,
})
}
if (islist) handleRiposteListData(code, data)
})
}
//
const handleRiposteListData = (code, data) => {
let target = respondDetail.value
// console.log("target", target)
if (target[code].selected) {
target[code].user = target[code].user.filter(item => item.uin != data.uin)
if (target[code].user.length == 0) delete target[code]
} else {
target[code].user.push({
avatar: data.avatar,
nickname: data.username,
uid: data.uid,
uin: data.uin,
})
}
target[code].selected = !target[code].selected
}
const riposteSubmit = (item, token) => {
return new Promise((resolve, reject) => {
$ajax("/api/riposte/riposteSubmit", { token, item }).then(res => {
if (res.code != 200) {
handleMsg("error", res["message"] || "报错了,请重试!!!")
reject(res)
} else {
handleMsg("success", res["message"] || "回应成功")
resolve(res)
}
})
})
}
let respondDetail = ref({})
let respondPopState = ref(false)
let respondPopObj = ref({})
//
const openRespondDetails = index => {
let target = answerList.value[index]
respondPopObj.value.index = index
respondPopObj.value.user = target.ripostecount?.user
$ajax("/api/riposte/riposteDetail", { token: target.token }).then(res => {
console.log("res", res)
if (res.code != 200) return
respondDetail.value = res.data
respondPopState.value = true
})
}
const closePopList = () => {
respondPopState.value = false
}
return { handleLookOnly, zeroreply, replaceNumberObj, closeMyModel, myModelList, myModelState, listHeight, bottomTpsStyle, TAHomePage, sendMessage, avatarState, openUserInfo, isNeedLogin, handleInputYou, openListIAnswer, isListEmptyState, cutYourAnswerAnonymous, handleYourAnswer, yourAnswer, handleLogo, inTheEndState, setItemUrl, seo, originUrl, handleMenuState, reasonList, checkList, alertShow, alertText, selectRadio, alertSubmit, cutType, dialogSrc, answerPage, handleDetailsScroll, replaceState, copyText, boxClass, questionPlaceholderState, yourAnswerPlaceholderState, handleInput, handlePaste, itemStyle, listStyle, listBoxStyle, myType, type, pitchIndex, cut, list, keyword, keywordText, getList, total, typeList, typePitch, getDetails, detailsInfo, detailsIsanswered, detailsIscollection, detailsIsmyself, detailShare, detailLoading, answerList, operateLike, operateCollect, IAnswerState, IAnswerEditState, IAnswerInfo, amendIAnswer, openIAnswer, closeIAnswer, submitAnswer, openCommentState, submitAnswerComments, operateAnswerCommentsLike, openAnswerCommentsChild, closeAnswerCommentsChild, alsoCommentsData, handleAllComment, myCollectionList, myCollectionCount, myQuestionsList, myQuestionsCount, myAnswerList, myAnswerCount, cutAnswerPopupState, handleDate, handleCollectionScroll, handleAnswersScroll, handleQuestionsScroll, cancelCollection, getMyCollection, questionsSetp, questionsObj, cutAnonymous, cutQuestionsSetp, cutQuestionsPopupState, questionsTypeList, postingIssue, choosingTheme, handleMy, changeAnonymous, changeAnonymousQuestions, pageHeaderHeight, pageListHeight, questionsTransmitState, questionsTransmitMaskState, closeAllTransmitState, closeTransmitState, handleAnswerTransmitList, closeDetailMode, tabListFixeState, handleListScroll, historicalSearchState, historicalSearchList, searchFocus, searchBlur, searchClick, handleClickHistoricalItem, handleClickClear, isSearchMode, questionsInit, myCount, msg, myOpenDetails, handleAnswerText, getCurrentUrl, loading, showComments, jointriposte, ripostelist, ripostecount, riposteoptions, randomEmojis, selectEomji, openRespondDetails, respondPopState, respondDetail, respondPopObj, closePopList }
}, },
} }
</script> </script>

44
components/RespondAdd.vue Normal file
View File

@ -0,0 +1,44 @@
<template>
<div class="respond-add flexcenter" @click="open">
<img class="respond-add-icon" src="@/img/plus-sign.svg" />
<template v-if="selectEomjiPop">
<div class="respond-list-mask" @click.stop="close"></div>
<div class="respond-list-box" @click.stop="">
<div class="respond-list-title">选择你的回应</div>
<div class="respond-list">
<template v-for="item in riposteoptions" :key="item">
<div class="respond-item" v-for="(item, key) in item.data" :key="key" v-html="jointriposte(key)" @click="selectEomji(key)"></div>
</template>
</div>
</div>
</template>
</div>
</template>
<script setup>
const props = defineProps({
riposteoptions: Array,
index: Number,
})
const open = () => {
selectEomjiPop.value = true
}
const close = () => {
selectEomjiPop.value = false
}
let selectEomjiPop = ref(false)
const emit = defineEmits(["selectEomji"])
const selectEomji = key => {
close()
emit("selectEomji", key, props.index, true)
}
const jointriposte = item => {
return `&#x${item};`
}
</script>
<style scoped></style>

66
components/RespondPop.vue Normal file
View File

@ -0,0 +1,66 @@
<template>
<div class="respond-pop-mask">
<div class="respond-pop">
<div class="respond-pop-no flexcenter" v-if="JSON.stringify(respondDetail) == '{}'">
<img class="respond-title-icon" @click="closePopList()" src="//app.gter.net/image/gter/offer/imgdetails/cross-grey.png?v=5.1.78_206050707" />
<img src="//app.gter.net/image/gter/offer/imgdetails/no-discussion.png?v=5.1.78_206050707" class="respond-pop-no-icon" />
<div class="respond-pop-no-text">- 暂无数据 -</div>
</div>
<template v-else>
<div class="respond-pop-title">
<span class="respond-pop-amount">{{ respondPopObj.user }}</span
>人回应
<img class="respond-title-icon" @click="closePopList()" src="//app.gter.net/image/gter/offer/imgdetails/cross-grey.png?v=5.1.78_206050707" />
</div>
<div class="respond-list">
<div class="respond-item" v-for="(item, index) in respondDetail" :key="index">
<div class="respond-code" :class="{ 'pitch': item.selected }" v-html="jointriposte(item.item)" @click="selectEomjiListPop(item.item, index)"></div>
<div class="respond-content flex1">
<div class="respond-total">{{ item.user.length }} 人作此回应</div>
<div class="user-item" v-for="(item, index) in item.user" :key="index" @click="TAHomePage(item.uin)">
<img class="user-avatar" :src="item.avatar" />
{{ item.nickname || item.username }}
</div>
</div>
</div>
</div>
</template>
</div>
</div>
</template>
<script setup>
const props = defineProps({
respondDetail: Array,
respondPopObj: Object,
})
// ta
const TAHomePage = uin => {
redirectToExternalWebsite(`https://bbs.gter.net/home.php?mod=space&uid=${uin}`)
}
// url
const redirectToExternalWebsite = url => {
const link = document.createElement("a")
link.href = url
link.target = "_blank"
link.click()
}
let selectEomjiPop = ref(false)
const emit = defineEmits(["closePopList","selectEomji"])
const selectEomjiListPop = key => {
console.log("key",key);
emit("selectEomji", key, props.respondPopObj.index || 0, false, true)
}
const closePopList = () => {
emit("closePopList")
}
const jointriposte = item => {
return `&#x${item};`
}
</script>
<style scoped></style>

6
img/arrowsRight.svg Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="6px" height="10px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -341 -2901 )">
<path d="M 5.89690721649484 4.76953907815631 C 5.96563573883162 4.83633934535738 6 4.91315965263861 6 5 C 6 5.08684034736139 5.96563573883162 5.16366065464262 5.89690721649484 5.23046092184369 L 1.09278350515464 9.8997995991984 C 1.02405498281787 9.96659986639947 0.945017182130584 10 0.855670103092783 10 C 0.766323024054983 10 0.687285223367698 9.96659986639947 0.618556701030928 9.8997995991984 L 0.103092783505155 9.39879759519038 C 0.0343642611683849 9.33199732798931 0 9.25517702070808 0 9.16833667334669 C 0 9.0814963259853 0.0343642611683849 9.00467601870407 0.103092783505155 8.93787575150301 L 4.15463917525773 5 L 0.103092783505155 1.06212424849699 C 0.0343642611683849 0.995323981295925 0 0.918503674014696 0 0.831663326653307 C 0 0.744822979291916 0.0343642611683849 0.668002672010687 0.103092783505155 0.601202404809619 L 0.618556701030928 0.100200400801603 C 0.687285223367698 0.0334001336005341 0.766323024054983 0 0.855670103092783 0 C 0.945017182130584 0 1.02405498281787 0.0334001336005341 1.09278350515464 0.100200400801603 L 5.89690721649484 4.76953907815631 Z " fill-rule="nonzero" fill="#000000" stroke="none" transform="matrix(1 0 0 1 341 2901 )" />
</g>
</svg>

BIN
img/bi-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

6
img/plus-sign.svg Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="14px" height="14px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -1279 -955 )">
<path d="M 13.7215909090909 5.36931818181818 C 13.907196969697 5.55492424242424 14 5.78030303030303 14 6.04545454545454 L 14 7.95454545454545 C 14 8.21969696969697 13.907196969697 8.44507575757576 13.7215909090909 8.63068181818182 C 13.5359848484848 8.81628787878788 13.3106060606061 8.90909090909091 13.0454545454545 8.90909090909091 L 8.90909090909091 8.90909090909091 L 8.90909090909091 13.0454545454545 C 8.90909090909091 13.3106060606061 8.81628787878788 13.5359848484848 8.63068181818182 13.7215909090909 C 8.44507575757576 13.907196969697 8.21969696969697 14 7.95454545454546 14 L 6.04545454545455 14 C 5.78030303030303 14 5.55492424242424 13.907196969697 5.36931818181818 13.7215909090909 C 5.18371212121212 13.5359848484848 5.09090909090909 13.3106060606061 5.09090909090909 13.0454545454545 L 5.09090909090909 8.90909090909091 L 0.954545454545454 8.90909090909091 C 0.689393939393939 8.90909090909091 0.464015151515152 8.81628787878788 0.278409090909091 8.63068181818182 C 0.0928030303030303 8.44507575757576 0 8.21969696969697 0 7.95454545454545 L 0 6.04545454545454 C 0 5.78030303030303 0.0928030303030303 5.55492424242424 0.278409090909091 5.36931818181818 C 0.464015151515152 5.18371212121212 0.689393939393939 5.09090909090909 0.954545454545454 5.09090909090909 L 5.09090909090909 5.09090909090909 L 5.09090909090909 0.954545454545455 C 5.09090909090909 0.689393939393939 5.18371212121212 0.464015151515151 5.36931818181818 0.278409090909091 C 5.55492424242424 0.0928030303030298 5.78030303030303 0 6.04545454545455 0 L 7.95454545454546 0 C 8.21969696969697 0 8.44507575757576 0.0928030303030298 8.63068181818182 0.278409090909091 C 8.81628787878788 0.464015151515151 8.90909090909091 0.689393939393939 8.90909090909091 0.954545454545455 L 8.90909090909091 5.09090909090909 L 13.0454545454545 5.09090909090909 C 13.3106060606061 5.09090909090909 13.5359848484848 5.18371212121212 13.7215909090909 5.36931818181818 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 1279 955 )" />
</g>
</svg>

397
index.css
View File

@ -17,6 +17,10 @@ body {
body::-webkit-scrollbar { body::-webkit-scrollbar {
width: 0 !important; width: 0 !important;
} }
@font-face {
font-family: "emojifont";
src: url("https://oss.x-php.com/static/riposte/emojifont-sbix.ttf?t=questions");
}
#answer-app * { #answer-app * {
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -728,6 +732,20 @@ a {
margin-bottom: 21px; margin-bottom: 21px;
position: relative; position: relative;
} }
#answer-app .main .details-area-box .details-box .answer-box-item .edit-btn {
cursor: pointer;
width: 24px;
height: 24px;
border-radius: 50%;
background-color: #f6f6f6;
position: absolute;
top: 10px;
right: 10px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .edit-btn .edit-icon {
width: 16px;
height: 16px;
}
#answer-app .main .details-area-box .details-box .answer-box-item * { #answer-app .main .details-area-box .details-box .answer-box-item * {
white-space: break-spaces !important; white-space: break-spaces !important;
} }
@ -764,18 +782,185 @@ a {
cursor: pointer; cursor: pointer;
} }
#answer-app .main .details-area-box .details-box .answer-box-item .operate-box { #answer-app .main .details-area-box .details-box .answer-box-item .operate-box {
padding: 0 24px; padding: 0 24px 22px;
background-color: #fbfbfb;
} }
#answer-app .main .details-area-box .details-box .answer-box-item .operate-box .edit-box .edit-btn { #answer-app .main .details-area-box .details-box .answer-box-item .operate-box .interaction-box .interaction-item {
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-style: normal;
color: #555555;
font-size: 13px;
line-height: 20px;
cursor: pointer; cursor: pointer;
position: relative;
}
#answer-app .main .details-area-box .details-box .answer-box-item .operate-box .interaction-box .interaction-item .amount {
color: #555555;
font-weight: 400;
}
#answer-app .main .details-area-box .details-box .answer-box-item .operate-box .interaction-box .interaction-item:not(:last-of-type) {
margin-right: 40px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .operate-box .interaction-box .interaction-item.pitch {
font-weight: 650;
color: #000000;
}
#answer-app .main .details-area-box .details-box .answer-box-item .operate-box .interaction-box .interaction-item.pitch::after {
content: "";
position: absolute;
top: 24px;
width: 100%;
height: 4px;
background-color: #fddf6d;
border-radius: 43px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins {
background-color: #fbfbfb;
padding: 0 22px 40px;
border-radius: 0 0 8px 8px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .coins-show {
height: 56px;
background-color: #ffffff;
border: 1px solid #ebebeb;
border-radius: 10px;
padding-left: 20px;
padding-right: 8px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .coins-show .coins-icon {
width: 31px;
height: 36px;
margin-right: 10px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .coins-show .coins-text {
font-size: 14px;
color: #333333;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .coins-show .coins-text .quantity {
font-family: "Arial-Black", "Arial Black", sans-serif;
font-weight: 900;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .coins-show .coins-btn {
width: 125px;
height: 40px;
background-color: #62b1ff;
border-radius: 150px;
font-size: 14px;
color: #ffffff;
cursor: pointer;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .answer-coins-list {
margin-top: 20px;
max-height: 253px;
overflow: auto;
background-color: #ffffff;
border: 1px solid #ebebeb;
border-radius: 10px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .answer-coins-list .answer-coins-item {
padding: 16px 20px 14px 32px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .answer-coins-list .answer-coins-item .ranking {
width: 118px;
font-family: "Arial-BoldMT", "Arial Bold", "Arial", sans-serif;
font-weight: 700;
font-size: 13px;
color: #333333;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .answer-coins-list .answer-coins-item .coins-user .coins-user-img {
width: 24px; width: 24px;
height: 24px; height: 24px;
margin-right: 18px;
border-radius: 50%; border-radius: 50%;
background-color: #f6f6f6;
} }
#answer-app .main .details-area-box .details-box .answer-box-item .operate-box .edit-box .edit-btn .edit-icon { #answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .answer-coins-list .answer-coins-item .coins-user .coins-user-name {
width: 16px; font-weight: 400;
height: 16px; color: #555555;
font-size: 13px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .answer-coins-list .answer-coins-item .bi {
color: #000000;
font-size: 13px;
line-height: 16px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .answer-coins .answer-coins-list .answer-coins-item .bi .bi-amount {
font-size: 16px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .respond-area {
background-color: #fbfbfb;
padding: 0 24px 24px;
display: flex;
flex-wrap: wrap;
border-radius: 0 0 8px 8px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .respond-area .respond-already-item {
font-size: 12px;
color: #555555;
text-align: center;
padding: 0 6px;
width: fit-content;
height: 30px;
line-height: 30px;
border: 1px solid #d7d7d7;
border-radius: 8px;
margin-right: 10px;
margin-bottom: 10px;
cursor: pointer;
}
#answer-app .main .details-area-box .details-box .answer-box-item .respond-area .respond-already-item.pitch {
background: #f2f2f2;
border: none;
}
#answer-app .main .details-area-box .details-box .answer-box-item .respond-area .respond-already-item .code {
font-family: "emojifont";
margin-right: 4px;
font-size: 15px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .respond-area .respond-select {
height: 30px;
background-color: #ffffff;
border: 1px solid #ebebeb;
border-radius: 6px 15px 15px 6px;
margin-right: 10px;
padding-left: 16px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .respond-area .respond-select .respond-select-item {
font-family: "emojifont";
margin-right: 16px;
font-size: 15px;
cursor: pointer;
}
#answer-app .main .details-area-box .details-box .answer-box-item .respond-area .plus-add {
width: 30px;
height: 30px;
background-color: #62b1ff;
border-radius: 15px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .respond-area .plus-add .plus-icon {
width: 14px;
height: 14px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .respond-list-btn {
font-weight: 400;
cursor: pointer;
color: #555555;
font-size: 13px;
display: flex;
align-items: center;
justify-content: center;
background-color: #fbfbfb;
border-radius: 0 0 8px 8px;
padding-bottom: 20px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .respond-list-btn .respond-list-btn-amount {
font-weight: 650;
color: #333;
margin: 0 5px;
}
#answer-app .main .details-area-box .details-box .answer-box-item .respond-list-btn .respond-list-btn-icon {
width: 6px;
margin-left: 5px;
} }
#answer-app .main .details-area-box .details-box .answer-box-item .post-comment { #answer-app .main .details-area-box .details-box .answer-box-item .post-comment {
background-color: #f6f6f6; background-color: #f6f6f6;
@ -1061,6 +1246,7 @@ a {
height: 54px; height: 54px;
border-top: 1px dotted #ebebeb; border-top: 1px dotted #ebebeb;
padding: 0 24px; padding: 0 24px;
flex: 1;
} }
#answer-app .main .details-area-box .details-box .operate-box .operate-list .operate-item { #answer-app .main .details-area-box .details-box .operate-box .operate-list .operate-item {
font-size: 13px; font-size: 13px;
@ -2047,3 +2233,202 @@ a {
height: 16px; height: 16px;
margin-right: 5px; margin-right: 5px;
} }
#answer-app .respond-add {
width: 30px;
height: 30px;
background-color: #62b1ff;
border-radius: 50%;
cursor: pointer;
position: relative;
}
#answer-app .respond-add.angle::after {
content: "";
background: #f6f6f6;
border: 1px solid #e4e7ed;
border-bottom-color: transparent !important;
border-right-color: transparent !important;
border-top-left-radius: 2px;
width: 10px;
height: 10px;
position: absolute;
bottom: -17px;
left: 50%;
transform: translateX(-50%) rotate(45deg);
z-index: 3000;
}
#answer-app .respond-add .respond-add-icon {
width: 14px;
height: 14px;
}
#answer-app .respond-list-box {
width: 470px;
background: #f6f6f6;
border: 1px solid #ebebeb;
border-radius: 10px;
position: absolute;
z-index: 2;
top: 45px;
}
#answer-app .respond-list-box::after {
content: "";
background: #f6f6f6;
border: 1px solid #e4e7ed;
border-bottom-color: transparent !important;
border-right-color: transparent !important;
border-top-left-radius: 2px;
width: 10px;
height: 10px;
position: absolute;
top: -6px;
left: 50%;
transform: translateX(-50%) rotate(45deg);
z-index: 3000;
}
#answer-app .respond-list-box .respond-list-title {
font-size: 14px;
line-height: 22px;
color: #333333;
padding-top: 16px;
padding-left: 20px;
padding-bottom: 25px;
}
#answer-app .respond-list-box .respond-list {
display: flex;
flex-wrap: wrap;
display: grid;
grid-template-columns: repeat(10, 1fr);
}
#answer-app .respond-list-box .respond-list .respond-item {
font-size: 20px;
font-family: "emojifont";
text-align: center;
margin-bottom: 20px;
cursor: pointer;
}
#answer-app .respond-pop-mask {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
background: rgba(0, 0, 0, 0.6);
z-index: 10;
display: flex;
justify-content: center;
align-items: center;
}
#answer-app .respond-pop-mask .respond-pop {
width: 600px;
height: 500px;
background-color: #fff;
border: 1px solid #e5e5e5;
border-radius: 20px;
box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.21);
-webkit-box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.21);
}
#answer-app .respond-pop-mask .respond-pop .respond-pop-title {
height: 50px;
display: flex;
justify-content: center;
border-bottom: 1px dotted rgba(215, 215, 215, 0.5);
align-items: center;
color: #555555;
position: relative;
font-size: 16px;
}
#answer-app .respond-pop-mask .respond-pop .respond-pop-title .respond-pop-amount {
margin: 0 8px;
font-weight: 650;
color: #000000;
}
#answer-app .respond-pop-mask .respond-pop .respond-pop-title .respond-title-icon {
position: absolute;
width: 20px;
right: 20px;
cursor: pointer;
}
#answer-app .respond-pop-mask .respond-pop .respond-list {
overflow: auto;
height: 450px;
}
#answer-app .respond-pop-mask .respond-pop .respond-list::-webkit-scrollbar-track {
border-radius: 10px;
}
#answer-app .respond-pop-mask .respond-pop .respond-list::-webkit-scrollbar-thumb {
background-color: #0003;
border-radius: 10px;
transition: all 0.2s ease-in-out;
}
#answer-app .respond-pop-mask .respond-pop .respond-list::-webkit-scrollbar {
width: 6px;
}
#answer-app .respond-pop-mask .respond-pop .respond-list .respond-item {
display: flex;
padding: 20px 0 0 20px;
}
#answer-app .respond-pop-mask .respond-pop .respond-list .respond-item:not(:last-of-type) .respond-content {
border-bottom: 1px dotted rgba(215, 215, 215, 0.5);
}
#answer-app .respond-pop-mask .respond-pop .respond-list .respond-item .respond-code {
width: 60px;
height: 60px;
background-color: #f6f6f6;
border-radius: 10px;
font-family: "emojifont";
font-size: 25px;
display: flex;
justify-content: center;
align-items: center;
margin-right: 20px;
cursor: pointer;
box-sizing: border-box;
}
#answer-app .respond-pop-mask .respond-pop .respond-list .respond-item .respond-code.pitch {
background-color: #f6f6bd;
border: 1px solid #ccd003;
}
#answer-app .respond-pop-mask .respond-pop .respond-list .respond-item .respond-content {
padding-bottom: 10px;
}
#answer-app .respond-pop-mask .respond-pop .respond-list .respond-item .respond-content .respond-total {
font-size: 14px;
color: #7f7f7f;
margin-bottom: 10px;
}
#answer-app .respond-pop-mask .respond-pop .respond-list .respond-item .respond-content .user-item {
font-size: 14px;
color: #555555;
display: inline-flex;
margin-right: 20px;
margin-bottom: 10px;
align-items: center;
cursor: pointer;
}
#answer-app .respond-pop-mask .respond-pop .respond-list .respond-item .respond-content .user-item .user-avatar {
width: 26px;
height: 26px;
border-radius: 50%;
margin-right: 10px;
}
#answer-app .respond-pop-mask .respond-pop .respond-pop-no {
width: 100%;
height: 100%;
flex-direction: column;
position: relative;
}
#answer-app .respond-pop-mask .respond-pop .respond-pop-no .respond-title-icon {
position: absolute;
width: 20px;
top: 20px;
right: 20px;
cursor: pointer;
}
#answer-app .respond-pop-mask .respond-pop .respond-pop-no .respond-pop-no-icon {
width: 90px;
margin-bottom: 15px;
}
#answer-app .respond-pop-mask .respond-pop .respond-pop-no .respond-pop-no-text {
font-size: 13px;
color: #7f7f7f;
line-height: 22px;
}

View File

@ -23,6 +23,11 @@ body {
-ms-overflow-style: none; -ms-overflow-style: none;
} }
@font-face {
font-family: "emojifont";
src: url("https://oss.x-php.com/static/riposte/emojifont-sbix.ttf?t=questions");
}
#answer-app * { #answer-app * {
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -905,6 +910,21 @@ a {
margin-bottom: 21px; margin-bottom: 21px;
position: relative; position: relative;
// overflow: hidden; // overflow: hidden;
.edit-btn {
cursor: pointer;
width: 24px;
height: 24px;
border-radius: 50%;
background-color: #f6f6f6;
position: absolute;
top: 10px;
right: 10px;
.edit-icon {
width: 16px;
height: 16px;
}
}
* { * {
white-space: break-spaces !important; white-space: break-spaces !important;
@ -948,21 +968,209 @@ a {
} }
.operate-box { .operate-box {
padding: 0 24px; padding: 0 24px 22px;
background-color: rgba(251, 251, 251, 1);
.edit-box { .interaction-box {
.edit-btn { .interaction-item {
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-style: normal;
color: #555555;
font-size: 13px;
line-height: 20px;
cursor: pointer; cursor: pointer;
position: relative;
.amount {
color: #555555;
font-weight: 400;
}
&:not(:last-of-type) {
margin-right: 40px;
}
&.pitch {
font-weight: 650;
color: #000000;
&::after {
content: "";
position: absolute;
top: 24px;
width: 100%;
height: 4px;
background-color: rgba(253, 223, 109, 1);
border-radius: 43px;
}
}
}
}
}
.answer-coins {
background-color: #fbfbfb;
padding: 0 22px 40px;
border-radius: 0 0 8px 8px;
.coins-show {
height: 56px;
background-color: rgba(255, 255, 255, 1);
border: 1px solid rgba(235, 235, 235, 1);
border-radius: 10px;
padding-left: 20px;
padding-right: 8px;
.coins-icon {
width: 31px;
height: 36px;
margin-right: 10px;
}
.coins-text {
font-size: 14px;
color: #333333;
.quantity {
font-family: "Arial-Black", "Arial Black", sans-serif;
font-weight: 900;
}
}
.coins-btn {
width: 125px;
height: 40px;
background-color: rgba(98, 177, 255, 1);
border-radius: 150px;
font-size: 14px;
color: #ffffff;
cursor: pointer;
}
}
.answer-coins-list {
margin-top: 20px;
max-height: 253px;
overflow: auto;
background-color: rgba(255, 255, 255, 1);
border: 1px solid rgba(235, 235, 235, 1);
border-radius: 10px;
.answer-coins-item {
padding: 16px 20px 14px 32px;
.ranking {
width: 118px;
font-family: "Arial-BoldMT", "Arial Bold", "Arial", sans-serif;
font-weight: 700;
font-size: 13px;
color: #333333;
}
.coins-user {
.coins-user-img {
width: 24px; width: 24px;
height: 24px; height: 24px;
margin-right: 18px;
border-radius: 50%; border-radius: 50%;
background-color: #f6f6f6; }
.coins-user-name {
font-weight: 400;
color: #555555;
font-size: 13px;
}
}
.bi {
color: #000000;
font-size: 13px;
line-height: 16px;
.bi-amount {
font-size: 16px;
}
}
}
}
}
.edit-icon { .respond-area {
width: 16px; background-color: rgba(251, 251, 251, 1);
height: 16px; padding: 0 24px 24px;
display: flex;
flex-wrap: wrap;
border-radius: 0 0 8px 8px;
.respond-already-item {
font-size: 12px;
color: #555555;
text-align: center;
padding: 0 6px;
width: fit-content;
height: 30px;
line-height: 30px;
border: 1px solid rgba(215, 215, 215, 1);
border-radius: 8px;
margin-right: 10px;
margin-bottom: 10px;
cursor: pointer;
&.pitch {
background: rgba(242, 242, 242, 1);
border: none;
}
.code {
font-family: "emojifont";
margin-right: 4px;
font-size: 15px;
} }
} }
.respond-select {
height: 30px;
background-color: rgba(255, 255, 255, 1);
border: 1px solid rgba(235, 235, 235, 1);
border-radius: 6px 15px 15px 6px;
margin-right: 10px;
padding-left: 16px;
.respond-select-item {
font-family: "emojifont";
margin-right: 16px;
font-size: 15px;
cursor: pointer;
}
}
.plus-add {
width: 30px;
height: 30px;
background-color: rgba(98, 177, 255, 1);
border-radius: 15px;
.plus-icon {
width: 14px;
height: 14px;
}
}
}
.respond-list-btn {
font-weight: 400;
cursor: pointer;
color: #555555;
font-size: 13px;
display: flex;
align-items: center;
justify-content: center;
background-color: #fbfbfb;
border-radius: 0 0 8px 8px;
padding-bottom: 20px;
.respond-list-btn-amount {
font-weight: 650;
color: #333;
margin: 0 5px;
}
.respond-list-btn-icon {
width: 6px;
margin-left: 5px;
} }
} }
@ -1323,6 +1531,7 @@ a {
height: 54px; height: 54px;
border-top: 1px dotted #ebebeb; border-top: 1px dotted #ebebeb;
padding: 0 24px; padding: 0 24px;
flex: 1;
.operate-list { .operate-list {
.operate-item { .operate-item {
@ -2535,4 +2744,223 @@ a {
margin-right: 5px; margin-right: 5px;
} }
} }
.respond-add {
width: 30px;
height: 30px;
background-color: rgba(98, 177, 255, 1);
border-radius: 50%;
cursor: pointer;
position: relative;
&.angle {
&::after {
content: "";
background: #f6f6f6;
border: 1px solid #e4e7ed;
border-bottom-color: transparent !important;
border-right-color: transparent !important;
border-top-left-radius: 2px;
width: 10px;
height: 10px;
position: absolute;
bottom: -17px;
left: 50%;
transform: translateX(-50%) rotate(45deg);
z-index: 3000;
}
}
.respond-add-icon {
width: 14px;
height: 14px;
}
}
.respond-list-box {
width: 470px;
background: #f6f6f6;
border: 1px solid #ebebeb;
border-radius: 10px;
position: absolute;
z-index: 2;
top: 45px;
&::after {
content: "";
background: #f6f6f6;
border: 1px solid #e4e7ed;
border-bottom-color: transparent !important;
border-right-color: transparent !important;
border-top-left-radius: 2px;
width: 10px;
height: 10px;
position: absolute;
top: -6px;
left: 50%;
transform: translateX(-50%) rotate(45deg);
z-index: 3000;
}
.respond-list-title {
font-size: 14px;
line-height: 22px;
color: #333333;
padding-top: 16px;
padding-left: 20px;
padding-bottom: 25px;
}
.respond-list {
display: flex;
flex-wrap: wrap;
display: grid;
grid-template-columns: repeat(10, 1fr);
.respond-item {
font-size: 20px;
font-family: "emojifont";
text-align: center;
margin-bottom: 20px;
cursor: pointer;
}
}
}
.respond-pop-mask {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
background: rgba(0, 0, 0, 0.6);
z-index: 10;
display: flex;
justify-content: center;
align-items: center;
.respond-pop {
width: 600px;
height: 500px;
background-color: #fff;
border: 1px solid #e5e5e5;
border-radius: 20px;
box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.21);
-webkit-box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.21);
.respond-pop-title {
height: 50px;
display: flex;
justify-content: center;
border-bottom: 1px dotted rgba(215, 215, 215, 0.5);
align-items: center;
color: #555555;
position: relative;
font-size: 16px;
.respond-pop-amount {
margin: 0 8px;
font-weight: 650;
color: #000000;
}
.respond-title-icon {
position: absolute;
width: 20px;
right: 20px;
cursor: pointer;
}
}
.respond-list {
overflow: auto;
height: 450px;
&::-webkit-scrollbar-track {
border-radius: 10px;
}
&::-webkit-scrollbar-thumb {
background-color: #0003;
border-radius: 10px;
transition: all 0.2s ease-in-out;
}
&::-webkit-scrollbar {
width: 6px;
}
.respond-item {
display: flex;
padding: 20px 0 0 20px;
&:not(:last-of-type) .respond-content {
border-bottom: 1px dotted rgba(215, 215, 215, 0.5);
}
.respond-code {
width: 60px;
height: 60px;
background-color: rgba(246, 246, 246, 1);
border-radius: 10px;
font-family: "emojifont";
font-size: 25px;
display: flex;
justify-content: center;
align-items: center;
margin-right: 20px;
cursor: pointer;
box-sizing: border-box;
&.pitch {
background-color: #f6f6bd;
border: 1px solid #ccd003;
}
}
.respond-content {
padding-bottom: 10px;
.respond-total {
font-size: 14px;
color: #7f7f7f;
margin-bottom: 10px;
}
.user-item {
font-size: 14px;
color: #555555;
display: inline-flex;
margin-right: 20px;
margin-bottom: 10px;
align-items: center;
cursor: pointer;
.user-avatar {
width: 26px;
height: 26px;
border-radius: 50%;
margin-right: 10px;
}
}
}
}
}
.respond-pop-no {
width: 100%;
height: 100%;
flex-direction: column;
position: relative;
.respond-title-icon {
position: absolute;
width: 20px;
top: 20px;
right: 20px;
cursor: pointer;
}
.respond-pop-no-icon {
width: 90px;
margin-bottom: 15px;
}
.respond-pop-no-text {
font-size: 13px;
color: #7f7f7f;
line-height: 22px;
}
}
}
}
} }