<template>
    <div class="container">
        <div class="detail-head flexacenter">
            <div class="detail-section" @click="toAllSection()">
                版块：<span class="section-name">{{ info.forum }}</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></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>
                    <a class="edit-box flexcenter" v-if="info.isauthor == 1" :href="`https://www.gter.net/bbs/post/edit.html?tid=${tid}&pid=${info.pid}`">
                        <img class="edit-icom" src="@/assets/img/detail/edit.png" />
                    </a>
                </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" :class="{ isvisiblereply: info['isvisiblereply'] == 1 && !info['isreply'] }" v-html="info[item.key]"></div>
                                </div>
                                <template v-if="item.key == 'message' && info['isvisiblereply'] == 1 && !info['isreply']">
                                    <div :key="item.key" class="flexcenter content-unlock content-unlock-no" :class="{ replyVisible: islogin, registerVisible: !islogin }" @click="islogin ? (popState = 'discussionSingle') : (isloginBtnState = true)">
                                        <img class="unlock-icom" :src="`${$baseURL}/img/unlock.png`" />
                                        详细内容回复可见
                                    </div>
                                </template>
                            </template>
                        </div>
                    </div>
                </template>

                <template v-else-if="type == 3">
                    <div class="offer-content">
                        <div class="offer-content-box">
                            <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="margin: 0.52rem 0;"></div>

                        <img class="tenement-img" v-for="(item, index) in info.images" :key="index" :src="item" />
                    </div>
                </template>

                <template v-else>
                    <div class="offer-content">
                        <div style="line-height: normal;" ref="vHtmlMessage" class="vHtmlMessage"></div>
                    </div>
                </template>
            </div>

            <template v-if="postList.list.length != 0">
                <div class="card-item shadow" v-for="(item, index) in postList.list" :key="index">
                    <div class="card-head flexacenter">
                        <img class="card-head-icon" :src="item.avatar" />
                        <div class="card-head-content flex1 flexflex">
                            <div class="card-head-name flexflex">
                                {{ item.author || "匿名用户" }}
                                <div class="landlord flexcenter" v-if="item.isauthor == 1">楼主</div>
                            </div>
                            <div class="card-head-time">{{ $formattedDate(item.dateline) }}</div>
                        </div>
                        <div class="card-head-fool" v-if="postList.page == 1">{{ `${(postList.page - 1) * postList.limit + index + 2}楼` }}</div>
                        <div class="card-head-fool" v-else>{{ `${(postList.page - 1) * postList.limit + index + 1}楼` }}</div>
                        <div class="edit-box flexcenter" v-if="item.ismyself == 1" @click.stop="openEditPop(item)">
                            <img class="edit-icom" src="@/assets/img/detail/edit.png" />
                        </div>
                    </div>

                    <div class="card-content flex1" @click.stop="handleReplyPop(item)" v-html="item.message"></div>
                </div>
            </template>
        </div>

        <!-- 分页 -->
        <div class="paging flexcenter" v-if="postList.count > postList.limit">
            <el-pagination small background layout="prev, pager, next" @current-change="currentChange" :current-page.sync="postList.page" :page-size="postList.limit" :total="postList.count"> </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="info.islike == 0 ? tapOperate('like') : ''">
                        <div class="loginBtn" v-if="!islogin" @click.stop="setValue('isloginBtnState', true, 'boolean')"></div>
                        <img v-if="info.islike == 0" class="bottom-operation-icom" :class="{ prepareLiskeAnimateState: prepareLiskeAnimateState }" src="@/assets/img/detail/like.png" />
                        <img v-else class="bottom-operation-icom" :class="{ prepareLiskeAnimateState: prepareLiskeAnimateState }" src="@/assets/img/icon/like-o.png" />
                        <div class="bottom-operation-text">{{ info.recommend_add == 0 ? "" : info.recommend_add }}赞</div>
                    </div>
                    <div class="bottom-operation-item flex1 flexcolumn flexcenter" @click="tapOperate(info.isfav == 0 ? 'collect' : 'uncollect')">
                        <div class="loginBtn" v-if="!islogin" @click.stop="setValue('isloginBtnState', true, 'boolean')"></div>
                        <img v-if="info.isfav == 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 transmit" data-clipboard-text="Text to copy" @click="transmit()">
                        <img class="bottom-operation-icom bottom-transmit-icom" src="@/assets/img/detail/share.png" />
                        <div class="bottom-operation-text">转发</div>
                    </div>
                </div>
            </div>
        </div>

        <detail-reply :two-comment-data="twoCommentData" :comment-content="commentContent" :pop-state="popState"></detail-reply>

        <coins :coin-config="coinConfig" :mybalance="mybalance" :pop-state="popState" :info="info"></coins>

        <div class="alert" v-show="alert.state" :class="{ alertState: alert.state }">
            <el-alert :title="alert.message" type="info" center show-icon :closable="false"></el-alert>
        </div>
    </div>
</template>

<script>
import DetailReply from "@/components/DetailReply"
import Coins from "@/components/unlock/Coins"
import { coinNo } from "@/utils/bizarreUrl"
import emojiList from "@/assets/emojiList.json"
export default {
    name: "detailIndex",
    data() {
        return {
            twoCommentData: null,
            editCommentPid: null, // 编辑回复的 id
            popState: "", // discussionSingle    discussionMulti
            coinConfig: {
                strategy: {
                    button: "攒币指南",
                    tips: "你的寄托币不够，快去发帖挣币吧",
                    url: coinNo,
                },
            },

            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",
                },
            ],

            postList: {
                // 回复列表数据
                list: [],
                page: 1,
                limit: 20,
                count: 0,
            },

            loading: null, // 加载中

            commentContent: "", // 评论的文本
            operateState: false, // 操作请求的状态

            mybalance: 0, // 一共有多个寄托币

            islogin: false, // 登录状态

            alert: {
                state: false,
                message: "",
            },

            isloginBtnState: false,
        }
    },

    watch: {
        popState(newV, oldV) {
            if (newV) this.$pageStop()
            else this.$pageMove()
        },
        "$store.state.user": {
            handler(newV, oldV) {
                if (JSON.stringify(newV) != "{}") {
                    this.islogin = newV.uid > 0 ? true : false
                    this.tid = this.$route.query["tid"]
                    this.postList.page = this.$route.query["page"] || 1

                    this.getDetail()
                }
            },
            immediate: true,
        },
        isloginBtnState(newV, oldV) {
            if (newV) this.$goTologin()
        },
    },
    mounted() {
        window.scrollTo(0, 0)
    },

    methods: {
        // 获取详细信息
        getDetail() {
            this.$startupUnderLoading(this)
            this.$http
                .post("/api/thread", {
                    tid: this.tid,
                })
                .then(res => {
                    if (res.code != 200) return

                    let data = res.data
                    let info = data.info

                    info["message"] = info["message"].trim()

                    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, "")
                    })

                    // 回复和投币可见解锁前的html
                    let replyVisibleHtml = `<div class="flexcenter content-unlock content-unlock-no ${this.islogin ? "replyVisible" : "registerVisible"} " @click="setValue('popState', ${this.islogin ? "discussionSingle" : "isloginBtnState"})"><img class="unlock-icom" src="${this.$baseURL}/img/unlock.png"/>作者设置了${this.islogin ? "回复" : "登录"}可见</div>`
                    let coinVisibleHtml = `<div class="flexcenter content-unlock content-unlock-no coinVisible"><img class="unlock-icom" src="${this.$baseURL}/img/unlock.png"/>作者设置了投币可见</div>`

                    // 回复和投币可见解锁后的html
                    let replyVisibleHtmlAlready = `<div class="content-unlock content-already"><div class="content-already-header flexflex">- 本内容投币可见 -</div><div class="content-unlock-wenzi">标记</div></div>`

                    let ispost = data.info.ispost // 是否已经回复
                    let price = data.info.price // 是否需要投币
                    let isbuy = data.info.isbuy // 是否已经投币
                    let isauthor = data.info.isauthor // 是否是作者

                    if (price > 0 && isbuy == 0 && isauthor != 1) {
                        let message = info["message"]
                        info["message"] = ""
                        const regex = /\[(free|hide)\]([^[]+)\[\/(free|hide)\]/g
                        let result = message.match(regex) || []
                        for (let i = 0; i < result.length; i++) {
                            result[i] = result[i].replace("[free]", "")
                            result[i] = result[i].replace("[/free]", "")
                            info["message"] += result[i]
                        }
                        info["message"] += coinVisibleHtml
                        // }
                    }

                    if (isbuy == 1 || isauthor == 1) {
                        let message = info["message"]
                        let mubiao = "" // 目标 message
                        // const regex = /\[(free|hide|\/free|\/hide)\]/g;
                        // const regex = /\[(free|hide|\/free|\/hide)\]/g;

                        // const regex = /\[(free|hide(?:=[0-9]+)?|\/free|\/hide)\]/g;
                        // const regex = /\[(free|hide(?:=[0-9]+)?|\/free|\/hide)\]/g;
                        // const regex = /\[(free|hide=\d+\|\/free|\/hide)\]/g;
                        // (?:=[0-9]+)?\
                        // const regex = /\[(free|hide(?:=[0-9]+)?|\/free|\/hide)\]/g;

                        const regex = /\[free\]|\[\/free\]|\[hide\]|\[\/hide\]|\[hide=[^\]]+\]/g

                        const numericIndices = Array.from(message.matchAll(regex), match => match.index)
                        const result2D = []
                        for (let i = 0; i < numericIndices.length; i += 2) {
                            const pair = [numericIndices[i], numericIndices[i + 1]]
                            result2D.push(pair)
                        }

                        result2D.forEach((element, index) => {
                            if (index != 0) {
                                let temporary = message.slice(result2D[index - 1][1] + 7, element[0])
                                temporary = this.goEmpty(temporary)
                                if (temporary) mubiao += replyVisibleHtmlAlready.replace("标记", message.slice(result2D[index - 1][1] + 7, element[0]))
                            }

                            // 第一个
                            if (index == 0) {
                                let temporary = message.slice(0, element[0])
                                temporary = this.goEmpty(temporary)
                                // if (temporary) mubiao += replyVisibleHtmlAlready.replace('标记', message.slice(0, element[0]))
                                if (temporary) mubiao += message.slice(0, element[0])
                            }

                            // 最后一个
                            if (index == result2D.length - 1) {
                                let temporary = message.slice(element[1] + 7, message.length - 1)
                                temporary = this.goEmpty(temporary)
                                if (temporary) mubiao += replyVisibleHtmlAlready.replace("标记", message.slice(element[1] + 7, message.length - 1))
                            }
                            mubiao += message.slice(element[0], element[1] + 7)
                        })

                        mubiao = mubiao.replaceAll("[free]", "")
                        mubiao = mubiao.replaceAll("[/free]", "")

                        info["message"] = mubiao
                    }

                    const regex1 = /\[hide(?:=[0-9]+)?\]/
                    if (regex1.test(info["message"])) {
                        const regex = /\[hide\].*?\[\/hide\]/g // 获取所有[hide] 中间内容的正则
                        if (ispost == 0 && isauthor != 1) info["message"] = info["message"].replace(regex, replyVisibleHtml)
                        if (ispost == 1 || isauthor == 1) {
                            var pattern = /\[hide(=\d+)?\]/g
                            info["message"] = info["message"].replaceAll(pattern, `<div class="content-unlock content-already"><div class="content-already-header flexflex">- 本内容回复可见 -</div><div class="content-unlock-wenzi">`)
                            info["message"] = info["message"].replaceAll("[/hide]", `</div></div>`)
                        }
                    }

                    if (!this.islogin && isbuy == 0) {
                        info["message"] = info["message"].replaceAll("[free]", "")
                        info["message"] = info["message"].replaceAll("[/free]", "")
                    }

                    data.type == 0 ? (this.$refs["vHtmlMessage"] ? (this.$refs.vHtmlMessage.innerHTML = info["message"]) : "") : ""

                    let replyVisibleList = document.getElementsByClassName("replyVisible")
                    if (!Array.isArray(replyVisibleList)) {
                        for (let i = 0; i < replyVisibleList.length; i++) {
                            replyVisibleList[i].addEventListener("click", () => {
                                this.$emit("replyVisibleClick")
                            })
                        }
                        this.$on("replyVisibleClick", () => {
                            this.popState = "discussionSingle"
                        })
                    }

                    let coinVisibleList = document.getElementsByClassName("coinVisible")
                    if (!Array.isArray(coinVisibleList)) {
                        for (let i = 0; i < coinVisibleList.length; i++) {
                            coinVisibleList[i].addEventListener("click", () => {
                                this.$emit("coinVisibleClick")
                            })
                        }
                        this.$on("coinVisibleClick", () => {
                            this.popState = data.mybalance > price ? "coindisplayuser" : "coinNo"
                        })
                    }

                    let registerVisibleList = document.getElementsByClassName("registerVisible")
                    if (!Array.isArray(registerVisibleList)) {
                        for (let i = 0; i < registerVisibleList.length; i++) {
                            registerVisibleList[i].addEventListener("click", () => {
                                this.$emit("registerVisibleClick")
                            })
                        }
                        this.$on("registerVisibleClick", () => {
                            this.isloginBtnState = true
                        })
                    }

                    this.info = info
                    this.type = data.type
                    this.token = data.token
                    this.mybalance = data.mybalance

                    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()

                    info["replies"] != 0 ? this.getPostList() : ""
                    // this.getPostList()
                })
                .finally(() => {
                    this.$closeUnderLoading(this)
                })
        },

        // 去 回车和去前后的空格
        goEmpty(temporary) {
            temporary = temporary.trim()
            while (temporary.indexOf("<br/>") != -1) {
                temporary = temporary.replace("<br/>", "")
            }

            return temporary
        },

        // 获取offer详情
        getOfferDetail() {
            this.$http
                .get(
                    "/api/forum/details",
                    {
                        id: this.token,
                    },
                    "offer"
                )
                .then(res => {
                    let data = res.data
                    let offerinfo = data.collegelist[0]
                    let useperformanceStr = ""
                    offerinfo.useperformance &&
                        offerinfo.useperformance.forEach((el, index) => {
                            useperformanceStr += el + (offerinfo.useperformance.length - 1 == index ? "" : "、")
                        })

                    offerinfo["useperformanceStr"] = useperformanceStr
                    this.offerinfo = offerinfo
                })
        },

        // 获取总结详情
        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 }
                    this.collegelist = collegelist
                    this.shareurl = data.shareurl
                })
        },

        // 租房
        getTenementDetails() {
            this.$http
                .post(
                    "/tenement/forum/show",
                    {
                        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 => {
                        return match.replace(/width="[^"]*"/g, "").replace(/height="[^"]*"/g, "")
                    })

                    this.info = info
                })
        },

        // 获取面经详情
        getInterviewDetails() {
            this.$http
                .post(
                    "/InterviewExperience/thread",
                    {
                        tid: this.tid,
                        token: this.token,
                    },
                    "tenement"
                )
                .then(res => {
                    if (res.code != 200) return
                    let data = res.data
                    this.info = { ...this.info, ...data }
                    // console.log("data", data["isreply"])
                    if (data["isvisiblereply"] == 1 && !data["isreply"]) {
                        console.log("需要回复看详情")
                        console.log("this.info", this.info["message"])
                    }
                })
        },

        // 获取回复列表
        getPostList() {
            this.$startupUnderLoading(this)

            let { page, limit } = this.postList
            this.$http
                .post("/api/thread/postList", {
                    token: this.token,
                    page,
                    limit,
                })
                .then(res => {
                    if (res.code != 200) return
                    let data = res.data
                    const ispost = this.info.ispost
                    // console.log("ispost", ispost)
                    data.data.forEach(el => {
                        el["message"] = el["message"].trim()

                        const reg = new RegExp("\r\n", "g")

                        el["message"] = el["message"].replaceAll(reg, "<br/>")
                        el["message"] = el["message"].replace(/<img[^>]*>/g, match => {
                            return match.replace(/width="[^"]*"/g, "").replace(/height="[^"]*"/g, "")
                        })

                        // 回复和投币可见解锁前的html
                        let replyVisibleHtml = `<div class="flexcenter content-unlock content-unlock-no ${this.islogin ? "replyVisible" : "registerVisible"} " @click="setValue('popState', ${this.islogin ? "discussionSingle" : "isloginBtnState"})"><img class="unlock-icom" src="${this.$baseURL}/img/unlock.png"/>作者设置了${this.islogin ? "回复" : "登录"}可见</div>`

                        const regex1 = /\[hide(?:=[0-9]+)?\]/
                        if (regex1.test(el["message"])) {
                            const regex = /\[hide\].*?\[\/hide\]/g // 获取所有[hide] 中间内容的正则
                            if (this.islogin) {
                                var pattern = /\[hide(=\d+)?\]/g
                                el["message"] = el["message"].replaceAll(pattern, `<div class="content-unlock content-already"><div class="content-already-header flexflex">- 本内容回复可见 -</div><div class="content-unlock-wenzi">`)
                                el["message"] = el["message"].replaceAll("[/hide]", `</div></div>`)
                            } else el["message"] = el["message"].replace(regex, replyVisibleHtml)
                        }

                        if (!this.islogin) {
                            el["message"] = el["message"].replaceAll("[free]", "")
                            el["message"] = el["message"].replaceAll("[/free]", "")
                        }

                        // for (const key in emojiList) {
                        //     el.message = el.message.replaceAll(key, `<img class="gif" src="${emojiList[key]}" />`)
                        // }
                    })

                    this.postList.list = data.data
                    this.postList.page = data.page
                    this.postList.limit = data.limit
                    this.postList.count = data.count
                })
                .finally(() => {
                    this.$closeUnderLoading(this)
                })
        },

        // 打开编辑评论
        openEditPop(item) {
            let message = item.message
            message = message.replace(/<div[^>]*>[\s\S]*?<\/div>/gi, "") //  清除掉引有的结构
            // message = message.replace(/<[^>]*>/g, '');   //  清除掉引有的结构

            message = message.trim()

            this.commentContent = message
            this.editCommentPid = item.pid

            this.popState = "discussionMulti"
        },

        // 处理回复点击弹出弹窗
        handleReplyPop(item) {
            if (!this.islogin) this.isloginBtnState = true

            let message = item.message
            // message = message.replace(/<(*?)[^>]*>[\s\S]*?<\/(*?)>/gi, '');   //  清除掉引有的结构
            message = message.replace(/<[^>]*>/g, "") //  清除掉引有的结构
            message = message.trim()

            this.twoCommentData = {
                avatar: item.avatar,
                content: message,
                pid: item.pid,
            }
            this.popState = "discussionSingle"
        },

        // 集中处理回复帖子
        postComment(message) {
            let url = ""

            if (this.editCommentPid) url = "/api/operation/redactPost"
            // 回复评论或者评论
            else url = "/api/operation/reply" // 编辑评论

            this.$http
                .post(url, {
                    token: this.token,
                    message: this.commentContent,
                    pid: this.editCommentPid || (this.twoCommentData && this.twoCommentData.pid),
                })
                .then(res => {
                    if (res.code != 200) return

                    this.$Message.success("发布成功")

                    this.popState = ""
                    this.twoCommentData = null
                    if (this.editCommentPid) {
                        // 编辑 状态
                        setTimeout(() => {
                            this.$router.go(0)
                        }, 800)
                        return
                    }

                    this.editCommentPid = null

                    let { count, limit } = this.postList

                    let page = Math.ceil((count + 1) / limit)

                    setTimeout(() => {
                        if (page == this.postList.page) {
                            this.$router.go(0)
                            clearTimeout(timer)
                            return
                        }

                        let query = {
                            page,
                            tid: this.tid,
                        }

                        this.$router.push({ path: `/detailIndex`, query })
                    }, 800)
                })
        },

        // 点击改变页数
        currentChange() {
            let query = {
                page: this.postList.page,
                tid: this.tid,
            }

            this.getPostList()

            this.$updateURLSearchParams(query)
        },

        // 点击点赞和收藏操作
        tapOperate(key) {
            // like collect uncollect
            // this.openHintBox("dfl;kgjdfkljgklioj")

            if (this.operateState) return
            this.operateState = true

            let url = ""
            if (key == "like") url = "/api/operation/threadLike"
            else if (key == "collect") url = "/api/operation/threadFav"
            else if (key == "uncollect") url = "/api/operation/threadunFav"

            this.$http
                .post(url, { tid: this.tid })
                .then(res => {
                    if (res.code != 200) return
                    if (key == "like") (this.info.islike = 1), this.info.recommends + 1
                    if (key == "collect") this.info.isfav = 1
                    if (key == "uncollect") this.info.isfav = 0
                    // this.$message(res.message)
                    this.openHintBox(res.message)
                })
                .finally(() => {
                    this.operateState = false
                })
        },

        // 点击转发
        transmit() {
            let value = location.href
            this.$copy(value, "已经复制链接，欢迎分享！")
        },

        setValue(key, value) {
            console.log("key", key, value)
            this[key] = value
        },

        // 跳转全部板块的列表
        toAllSection() {
            this.$router.push({ path: `/allSections`, query: { fid: this.info.fid } })
        },

        // 处理点击编辑自己的回复
        handleIsmyself(item) {
            this.popState = "discussionMulti"
            this.commentContent = item.message
        },

        // 投币
        postCoin() {
            this.$http
                .post("/api/operation/coinPurchase", {
                    token: this.token,
                })
                .then(res => {
                    if (res.code != 200) return
                    this.openHintBox(res.message)
                    this.popState = ""
                    this.$router.go(0)
                })
        },

        // 提示框 自定义
        openHintBox(message) {
            this.alert.state = true
            this.alert.message = message
            setTimeout(() => {
                this.alert.state = false
            }, 1500)
        },
    },

    components: {
        DetailReply,
        Coins,
    },
}
</script>

<style lang="scss" scoped>
.alert {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background: #f4f4f5;
    border: 1px solid #ebeef5;
    border-radius: 0.2rem;
    width: 50%;
    opacity: 0;
    transition: opacity 0.3s;

    &.alertState {
        opacity: 1;
    }
}

.container {
    margin-top: 1.3rem;
    padding-bottom: 2.8rem;

    .detail-head {
        color: #7f7f7f;
        padding: 0.191rem 0.2933rem 0;
        justify-content: space-between;

        .detail-section {
            justify-content: space-between;
            font-size: 0.32rem;

            .section-name {
                color: #333;
            }
        }

        .detail-data {
            color: rgb(127, 127, 127);

            .detail-data-item {
                color: rgb(127, 127, 127);
                font-size: 0.28rem;

                img {
                    margin-right: 0.12rem;
                }

                .detail-data-eye {
                    width: 0.36rem;
                    height: 0.36rem;
                }

                .detail-data-comment {
                    width: 0.32rem;
                    height: 0.32rem;
                }

                &:last-of-type {
                    margin-left: 0.32rem;
                }
            }
        }
    }

    .detail-title-box {
        padding: 0.72rem 0.2933rem 0;
        color: #000;
        font-size: 0.56rem;
        font-weight: 650;
        line-height: 0.86rem;

        .detail-title-item {
            font-size: 0.32rem;
            color: #fff;
            height: 0.64rem;
            display: inline-flex;
            margin-right: 0.16rem;
            font-weight: 400;

            line-height: 0.56rem;

            &.detail-title-jinghua {
                width: 1rem;
                border-radius: 0.5rem 0.5rem 0;
                background: linear-gradient(-57.3808deg, rgb(178, 152, 232) 0%, rgb(88, 70, 195) 100%);
                vertical-align: middle;
            }

            &.detail-title-label {
                background: rgb(51, 51, 51);
                padding: 0 0.16rem;
                display: inline-flex;
                border-radius: 0.16rem;
                vertical-align: middle;
                // vertical-align: top;
            }
        }
    }

    .card {
        margin-top: 0.48rem;
        flex-direction: column;

        .card-item {
            width: 9.4rem;
            border-radius: 0.4rem;
            background: #fff;
            margin-bottom: 0.4rem;

            .card-head {
                padding: 0.48rem 0.32rem;
                border-bottom: 0.0133rem solid #ebebeb;

                .card-head-icon {
                    width: 0.96rem;
                    height: 0.96rem;
                    border-radius: 50%;
                    margin-right: 0.28rem;
                }

                .card-head-content {
                    flex-direction: column;

                    .card-head-name {
                        color: #333;
                        font-size: 0.32rem;
                        margin-bottom: 0.08rem;
                        word-break: break-word;
                        margin-right: 0.2667rem;

                        .landlord {
                            color: rgb(127, 127, 127);
                            font-size: 0.26rem;
                            width: 0.64rem;
                            height: 0.44rem;
                            border: rgb(215, 215, 215) 0.0133rem solid;
                            background: rgb(240, 242, 245);
                            border-radius: 0.1rem;
                            margin-left: 0.16rem;
                        }
                    }

                    .card-head-time {
                        color: rgb(127, 127, 127);
                        font-size: 0.28rem;
                    }
                }

                .card-head-fool {
                    color: rgb(127, 127, 127);
                    font-size: 0.32rem;
                }

                .edit-box {
                    width: 0.64rem;
                    height: 0.64rem;
                    border-radius: 50%;
                    background: #f6f6f6;
                    margin-left: 0.32rem;

                    .edit-icom {
                        width: 0.4rem;
                    }
                }
            }

            .card-content {
                color: #333;
                font-size: 0.36rem;
                line-height: 0.6rem;
                padding: 0.5rem 0.32rem;
                word-break: break-word;

                /deep/ {
                    img {
                        max-width: 100% !important;
                        height: auto !important;

                        &.gif {
                            width: auto !important;
                        }
                    }

                    .quote {
                        width: 100%;
                        color: #333;
                        font-size: 0.32rem;
                        border-radius: 0.16rem;
                        background: rgb(246, 246, 246) url(@/assets/img/detail/quotation-left.png) no-repeat 0.32rem 0.2666rem;
                        padding: 0.1333rem 0.1333rem 0.1333rem 1rem;

                        box-sizing: border-box;
                        margin-bottom: 0.48rem;

                        blockquote {
                            margin: 0;
                            padding: 0 0.8667rem 0.0667rem 0;
                            background: url(@/assets/img/detail/quotation-right.png) no-repeat 100% 100%;
                            line-height: 1.6;
                            zoom: 1;
                            display: inline;
                        }

                        .quotation-wenzi {
                            line-height: 0.52rem;
                        }

                        .quotation-icon {
                            width: 0.32rem;
                            height: 0.26rem;
                        }

                        .quotation-right {
                            flex-direction: column;
                            margin-left: 0.28rem;

                            .quotation-bottom {
                                color: #7f7f7f;
                                font-size: 0.28rem;
                                margin-top: 0.258rem;

                                .quotation-icon {
                                    margin-left: 0.2rem;
                                }
                            }
                        }
                    }

                    .content-unlock {
                        &.content-unlock-no {
                            height: 3.2rem;

                            .unlock-icom {
                                width: 0.64rem;
                                height: 0.64rem;
                                margin-right: 0.2rem;
                                vertical-align: middle;
                            }
                        }

                        background: rgba(242, 242, 242, 0.7);
                        margin: 0.48rem 0;
                        color: #555555;
                        font-size: 0.32rem;
                        border-radius: 0.16rem;

                        &.content-already {
                            background: rgba(242, 242, 242, 0.7);
                            margin: 0.48rem 0;
                            padding: 0.32rem;
                            color: #555555;
                            font-size: 0.32rem;
                            border-radius: 0.16rem;

                            .content-already-header {
                                color: #7f7f7f;
                                font-size: 0.28rem;
                                justify-content: center;
                            }

                            .content-unlock-wenzi {
                                color: #333;
                                font-size: 0.36rem;
                                line-height: 0.6rem;
                                margin-top: 0.3rem;
                            }
                        }
                    }
                }
            }

            .offer-content {
                padding: 0.56rem 0.32rem;

                .vHtmlMessage {
                    font-size: 0.36rem;
                    line-height: 0.6rem;
                    word-break: break-word;

                    /deep/ {
                        strong {
                            font-weight: bold;
                        }

                        img {
                            max-width: 100%;
                        }

                        .content-unlock {
                            &.content-unlock-no {
                                height: 3.2rem;

                                .unlock-icom {
                                    width: 0.64rem;
                                    height: 0.64rem;
                                    margin-right: 0.2rem;
                                    vertical-align: middle;
                                }
                            }

                            background: rgba(242, 242, 242, 0.7);
                            margin: 0.48rem 0;
                            color: #555555;
                            font-size: 0.32rem;
                            border-radius: 0.16rem;

                            &.content-already {
                                background: rgba(242, 242, 242, 0.7);
                                margin: 0.48rem 0;
                                padding: 0.32rem;
                                color: #555555;
                                font-size: 0.32rem;
                                border-radius: 0.16rem;

                                .content-already-header {
                                    color: #7f7f7f;
                                    font-size: 0.28rem;
                                    justify-content: center;
                                }

                                .content-unlock-wenzi {
                                    color: #333;
                                    font-size: 0.36rem;
                                    line-height: 0.6rem;
                                    margin-top: 0.3rem;
                                }
                            }
                        }
                    }
                }

                .tenement-img {
                    width: 100%;
                }

                .offer-content-box {
                    .offer-content-item {
                        line-height: 0.6rem;

                        align-items: flex-start;

                        &:not(:last-of-type) {
                            margin-bottom: 0.52rem;
                        }

                        .offer-content-key {
                            font-size: 0.32rem;
                            color: #7f7f7f;
                            width: 2.04rem;
                        }

                        .offer-content-value {
                            font-size: 0.36rem;
                            color: #333;
                            width: 7.32rem;
                            white-space: break-spaces;

                            &.isvisiblereply {
                                overflow: hidden;
                                display: -webkit-box;
                                -webkit-line-clamp: 3;
                                -webkit-box-orient: vertical;
                                text-overflow: ellipsis;
                            }
                        }
                    }
                }

                /deep/ {
                    img {
                        width: 100% !important;
                        height: auto !important;

                        &.gif {
                            width: auto !important;
                        }
                    }

                    .quote {
                        width: 100%;
                        color: #333;
                        font-size: 0.32rem;
                        border-radius: 0.16rem;
                        background: rgb(246, 246, 246) url(@/assets/img/detail/quotation-left.png) no-repeat 0.32rem 0.2666rem;
                        padding: 0.1333rem 0.1333rem 0.1333rem 1rem;

                        box-sizing: border-box;
                        margin-bottom: 0.48rem;

                        blockquote {
                            margin: 0;
                            padding: 0 0.8667rem 0.0667rem 0;
                            background: url(@/assets/img/detail/quotation-right.png) no-repeat 100% 100%;
                            line-height: 1.6;
                            zoom: 1;
                            display: inline;
                        }

                        .quotation-wenzi {
                            line-height: 0.52rem;
                        }

                        .quotation-icon {
                            width: 0.32rem;
                            height: 0.26rem;
                        }

                        .quotation-right {
                            flex-direction: column;
                            margin-left: 0.28rem;

                            .quotation-bottom {
                                color: #7f7f7f;
                                font-size: 0.28rem;
                                margin-top: 0.258rem;

                                .quotation-icon {
                                    margin-left: 0.2rem;
                                }
                            }
                        }
                    }

                    .content-unlock {
                        &.content-unlock-no {
                            height: 3.2rem;

                            .unlock-icom {
                                width: 0.64rem !important;
                                height: 0.64rem !important;
                                margin-right: 0.2rem;
                                vertical-align: middle;
                            }
                        }

                        background: rgba(242, 242, 242, 0.7);
                        margin: 0.48rem 0;
                        color: #555555;
                        font-size: 0.32rem;
                        border-radius: 0.16rem;

                        &.content-already {
                            background: rgba(242, 242, 242, 0.7);
                            margin: 0.48rem 0;
                            padding: 0.32rem;
                            color: #555555;
                            font-size: 0.32rem;
                            border-radius: 0.16rem;

                            .content-already-header {
                                color: #7f7f7f;
                                font-size: 0.28rem;
                                justify-content: center;
                            }

                            .content-unlock-wenzi {
                                color: #333;
                                font-size: 0.36rem;
                                line-height: 0.6rem;
                                margin-top: 0.3rem;
                            }
                        }
                    }
                }
            }

            .examine-btn {
                color: #333;
                font-size: 0.3rem;
                background: rgba(242, 242, 242, 1);
                height: 0.96rem;
                border-radius: 4.1rem;
                margin-top: 0.52rem;

                .examine-btn-outside {
                    width: 0.4rem;
                    height: 0.4rem;
                    margin-left: 0.24rem;
                    background: #fddf6d;
                    border-radius: 50%;

                    .examine-btn-icon {
                        width: 0.22rem;
                        height: 0.24rem;
                    }
                }
            }

            .summary-content {
                padding: 0.56rem 0.32rem;

                .summary-content-item {
                    border-radius: 0.16rem;
                    border: 0.0133rem solid rgba(235, 235, 235, 1);
                    margin-bottom: 0.32rem;

                    .summary-offer-head {
                        justify-content: space-between;
                        height: 0.8rem;
                        background: rgba(246, 246, 246, 1);
                        color: #333;
                        padding: 0 0.24rem;

                        span,
                        a {
                            font-size: 0.32rem;
                            color: #333;
                        }

                        .summary-offer-head-title {
                            color: #000;
                            font-size: 0.4rem;
                            font-weight: 650;
                        }

                        .summary-offer-head-icon {
                            width: 0.14rem;
                            height: 0.36rem;
                            margin-left: 0.16rem;
                        }
                    }

                    .summary-offer-box {
                        padding-top: 0.28rem;
                        flex-direction: column;
                        justify-items: center;

                        .summary-offer-item {
                            line-height: 0.6rem;
                            padding: 0 0.24rem;
                            box-sizing: border-box;
                            margin-bottom: 0.2rem;

                            .summary-offer-key {
                                width: 1.3rem;
                                color: #7f7f7f;
                                font-size: 0.32rem;
                                margin-right: 0.74rem;
                            }

                            .summary-offer-value {
                                font-size: 0.36rem;
                                color: #333;
                            }
                        }
                    }

                    .summary-wenzi {
                        color: #333;
                        font-size: 0.32rem;
                        line-height: 0.6rem;
                        padding: 0.28rem 0.24rem;
                    }
                }
            }
        }
    }

    .paging {
        margin-top: 0.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: 0.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;
                -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
            }

            .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;
            }
        }
    }

    .loginBtn {
        position: absolute;
        top: 0;
        left: 0;
        height: 100%;
        width: 100%;
        // background: #50e3c2;
    }
}
</style>
