|
@@ -0,0 +1,1023 @@
|
|
|
|
+small-tab
|
|
|
|
+<template>
|
|
|
|
+ <div class="article-content">
|
|
|
|
+ <van-skeleton
|
|
|
|
+ :row="4"
|
|
|
|
+ :row-width="['100%', '100%', '60%', '20%']"
|
|
|
|
+ :class="{ 'bg-white': reqState.loading }"
|
|
|
|
+ :loading="reqState.loading"
|
|
|
|
+ >
|
|
|
|
+ <Error v-if="isError" :error-text="errorText" />
|
|
|
|
+ <div v-else class="j-container page-container">
|
|
|
|
+ <div
|
|
|
|
+ ref="scrollWrapper"
|
|
|
|
+ class="j-main article-content-main"
|
|
|
|
+ :class="{
|
|
|
|
+ 'show-underline': otherModel.hasProject,
|
|
|
|
+ 'no-scroll': showBindPhone,
|
|
|
|
+ }"
|
|
|
|
+ @click="onScrollWrapperClick"
|
|
|
|
+ @scroll.passive="onScroll"
|
|
|
|
+ >
|
|
|
|
+ <ContentHeader
|
|
|
|
+ :class="{ 'z-index10': showBindPhone }"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ />
|
|
|
|
+ <ContentHeaderBannerTip
|
|
|
|
+ v-if="showContentHeaderBannerTip"
|
|
|
|
+ :id="pageState.id"
|
|
|
|
+ :class="{ 'z-index10': showBindPhone }"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ />
|
|
|
|
+ <OneClickBinding
|
|
|
|
+ v-if="showBindPhone"
|
|
|
|
+ :class="{ 'z-index10': showBindPhone }"
|
|
|
|
+ />
|
|
|
|
+ <van-overlay
|
|
|
|
+ class-name="custom-overlay"
|
|
|
|
+ :show="showBindPhone"
|
|
|
|
+ :lock-scroll="false"
|
|
|
|
+ />
|
|
|
|
+
|
|
|
|
+ <van-tabs
|
|
|
|
+ v-if="canReadConf.show"
|
|
|
|
+ v-model="pageState.tabActive"
|
|
|
|
+ :class="{ 'small-tab': yyszbContent }"
|
|
|
|
+ :offset-top="offsetTop"
|
|
|
|
+ scrollspy
|
|
|
|
+ sticky
|
|
|
|
+ >
|
|
|
|
+ <!-- 摘要 -->
|
|
|
|
+ <van-tab v-if="baseModuleShow.summary" key="abstract" title="摘要">
|
|
|
|
+ <div class="tab-module">
|
|
|
|
+ <ContentAbstract
|
|
|
|
+ :custom-skip="toBCustom"
|
|
|
|
+ class="content-abstract-module"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ />
|
|
|
|
+ <section
|
|
|
|
+ v-if="!toBCustom"
|
|
|
|
+ class="content-abstract-other bg-white"
|
|
|
|
+ >
|
|
|
|
+ <ContentAbstractEntList
|
|
|
|
+ v-if="!toBCustom"
|
|
|
|
+ class="content-abstract-ent-list-module"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ />
|
|
|
|
+ <section class="data-export-banner-module">
|
|
|
|
+ <DataExportBanner :before-leave-page="beforeLeavePage" />
|
|
|
|
+ </section>
|
|
|
|
+ </section>
|
|
|
|
+ </div>
|
|
|
|
+ </van-tab>
|
|
|
|
+ <!-- 正文 -->
|
|
|
|
+ <van-tab v-if="baseModuleShow.content" key="mainText" title="正文">
|
|
|
|
+ <ContentMainText
|
|
|
|
+ class="tab-module"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ :show-mask="!canReadConf.showContentModule"
|
|
|
|
+ />
|
|
|
|
+ <NpsCard
|
|
|
|
+ v-if="canShowNpsModule"
|
|
|
|
+ ref="npsCard"
|
|
|
|
+ class="nps-module"
|
|
|
|
+ />
|
|
|
|
+ </van-tab>
|
|
|
|
+ <!-- 进度 -->
|
|
|
|
+ <van-tab
|
|
|
|
+ v-if="advancedModuleShow.timeline"
|
|
|
|
+ key="timeline"
|
|
|
|
+ title="进度"
|
|
|
|
+ >
|
|
|
|
+ <ContentProjectTimeline
|
|
|
|
+ class="tab-module"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ />
|
|
|
|
+ </van-tab>
|
|
|
|
+ <!-- 商机推荐 -->
|
|
|
|
+ <van-tab
|
|
|
|
+ v-if="advancedModuleShow.zbRecommend"
|
|
|
|
+ key="businessRecommend"
|
|
|
|
+ title="商机推荐"
|
|
|
|
+ >
|
|
|
|
+ <ContentBusinessRecommend
|
|
|
|
+ class="tab-module"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ />
|
|
|
|
+ </van-tab>
|
|
|
|
+ <!-- 客户推荐 -->
|
|
|
|
+ <van-tab
|
|
|
|
+ v-if="customerRecommendModuleShow"
|
|
|
|
+ key="customerRecommend"
|
|
|
|
+ title="客户推荐"
|
|
|
|
+ >
|
|
|
|
+ <ContentCustomerRecommend
|
|
|
|
+ class="tab-module"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ />
|
|
|
|
+ </van-tab>
|
|
|
|
+ <!-- 投标服务 -->
|
|
|
|
+ <van-tab
|
|
|
|
+ v-if="advancedModuleShow.tbService"
|
|
|
|
+ key="tbService"
|
|
|
|
+ title="投标服务"
|
|
|
|
+ >
|
|
|
|
+ <ContentTouBiaoService
|
|
|
|
+ class="tab-module"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ />
|
|
|
|
+ </van-tab>
|
|
|
|
+ </van-tabs>
|
|
|
|
+ <template v-if="!canReadConf.show">
|
|
|
|
+ <FreeUserAdvancedMask
|
|
|
|
+ v-if="content.isNiJian || content.isCaigouyixiang"
|
|
|
|
+ :type="content.isNiJian ? 'nijian' : 'caigouyixiang'"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ />
|
|
|
|
+ <FreeUserBiddingMask v-else :before-leave-page="beforeLeavePage" />
|
|
|
|
+ </template>
|
|
|
|
+ <AdSingle
|
|
|
|
+ v-if="!toBCustom"
|
|
|
|
+ :ad="getContentAdID"
|
|
|
|
+ :show-close-icon="false"
|
|
|
|
+ radius
|
|
|
|
+ :before-open="beforeLeavePage"
|
|
|
|
+ class="mg-box"
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+ <div class="j-footer article-content-footer">
|
|
|
|
+ <TabActions
|
|
|
|
+ v-if="showTabActions"
|
|
|
|
+ :show-monitor="showMonitor"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </van-skeleton>
|
|
|
|
+ <!-- 客服 -->
|
|
|
|
+ <CustomerCorner :scroll-status="scrollStatus" bottom-position="12%" />
|
|
|
|
+ <ThirdPartyVerifyPopup
|
|
|
|
+ v-model="popup.thirdPartyVerify"
|
|
|
|
+ :before-leave-page="beforeLeavePage"
|
|
|
|
+ />
|
|
|
|
+ <CheckUserDialog />
|
|
|
|
+ <appShareSheet
|
|
|
|
+ v-model="shareShow"
|
|
|
|
+ popup-title="分享有礼"
|
|
|
|
+ :share-title="shareConf.title"
|
|
|
|
+ :share-content="shareConf.content"
|
|
|
|
+ :share-link="shareConf.link"
|
|
|
|
+ @share="calcAppShareInfo"
|
|
|
|
+ >
|
|
|
|
+ <div slot="subtitle" class="share-subtitle-container">
|
|
|
|
+ <span class="share-subtitle-left j-icon icon-points" />
|
|
|
|
+ <span class="share-subtitle-content">
|
|
|
|
+ 分享招标信息及文档,好友访问立得剑鱼币
|
|
|
|
+ </span>
|
|
|
|
+ <a href="/page_points_mobile/share" class="share-subtitle-right">
|
|
|
|
+ 了解详情
|
|
|
|
+ </a>
|
|
|
|
+ </div>
|
|
|
|
+ </appShareSheet>
|
|
|
|
+ <wxShareGuide v-model="guideMask" />
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+import { Icon, Overlay, Skeleton, Tab, Tabs } from 'vant'
|
|
|
|
+import { checkAncestorClass, isElementInScrollArea } from '@jy/util'
|
|
|
|
+import { throttle } from 'lodash'
|
|
|
|
+import { mapActions, mapGetters, mapMutations, mapState } from 'vuex'
|
|
|
|
+import { mixinHeader } from '@/utils/mixins/header'
|
|
|
|
+import { appWxShareMixin } from '@/utils/mixins/modules/app-wx-share'
|
|
|
|
+import ContentHeader from '@/views/article/components/ContentHeader.vue'
|
|
|
|
+import ContentHeaderBannerTip from '@/views/article/components/ContentHeaderBannerTip.vue'
|
|
|
|
+import ContentAbstract from '@/views/article/components/ContentAbstract.vue'
|
|
|
|
+import DataExportBanner from '@/views/article/components/DataExportBanner.vue'
|
|
|
|
+import ContentAbstractEntList from '@/views/article/components/ContentAbstractEntList.vue'
|
|
|
|
+import ContentMainText from '@/views/article/components/ContentMainText.vue'
|
|
|
|
+import ContentProjectTimeline from '@/views/article/components/ContentProjectTimeline.vue'
|
|
|
|
+import ContentTouBiaoService from '@/views/article/components/ContentTouBiaoService.vue'
|
|
|
|
+import ContentBusinessRecommend from '@/views/article/components/ContentBusinessRecommend.vue'
|
|
|
|
+import ContentCustomerRecommend from '@/views/article/components/ContentCustomerRecommend.vue'
|
|
|
|
+import NpsCard from '@/views/article/components/NpsCard.vue'
|
|
|
|
+import TabActions from '@/views/article/components/TabActions.vue'
|
|
|
|
+import AdSingle from '@/components/ad/Ad.vue'
|
|
|
|
+import FreeUserBiddingMask from '@/views/article/components/FreeUserBiddingMask.vue'
|
|
|
|
+import FreeUserAdvancedMask from '@/views/article/components/FreeUserAdvancedMask.vue'
|
|
|
|
+import ThirdPartyVerifyPopup from '@/views/article/components/ThirdPartyVerifyPopup.vue'
|
|
|
|
+import CheckUserDialog from '@/views/identity/components/CheckUserDialog'
|
|
|
|
+import CustomerCorner from '@/components/customer/index'
|
|
|
|
+import Error from '@/views/article/components/Error.vue'
|
|
|
|
+import OneClickBinding from '@/components/one-click-binding/index'
|
|
|
|
+import {
|
|
|
|
+ getArticleShareInfo,
|
|
|
|
+ getContentShareEncrypt
|
|
|
|
+} from '@/api/modules/article'
|
|
|
|
+import { LINKS } from '@/data'
|
|
|
|
+import { openAppOrWxPage } from '@/utils/'
|
|
|
|
+import setPageTdk from '@/utils/mixins/modules/set-tdk'
|
|
|
|
+
|
|
|
|
+export default {
|
|
|
|
+ name: 'ArticleContent',
|
|
|
|
+ components: {
|
|
|
|
+ [Tabs.name]: Tabs,
|
|
|
|
+ [Tab.name]: Tab,
|
|
|
|
+ [Icon.name]: Icon,
|
|
|
|
+ [Skeleton.name]: Skeleton,
|
|
|
|
+ [Overlay.name]: Overlay,
|
|
|
|
+ ContentHeader,
|
|
|
|
+ ContentHeaderBannerTip,
|
|
|
|
+ ContentAbstract,
|
|
|
|
+ DataExportBanner,
|
|
|
|
+ ContentMainText,
|
|
|
|
+ ContentAbstractEntList,
|
|
|
|
+ ContentProjectTimeline,
|
|
|
|
+ ContentTouBiaoService,
|
|
|
|
+ ContentBusinessRecommend,
|
|
|
|
+ ContentCustomerRecommend,
|
|
|
|
+ FreeUserBiddingMask,
|
|
|
|
+ FreeUserAdvancedMask,
|
|
|
|
+ ThirdPartyVerifyPopup,
|
|
|
|
+ CheckUserDialog,
|
|
|
|
+ NpsCard,
|
|
|
|
+ TabActions,
|
|
|
|
+ AdSingle,
|
|
|
|
+ CustomerCorner,
|
|
|
|
+ Error,
|
|
|
|
+ OneClickBinding
|
|
|
|
+ },
|
|
|
|
+ mixins: [mixinHeader, setPageTdk, appWxShareMixin],
|
|
|
|
+ data() {
|
|
|
|
+ const { inApp } = this.$envs
|
|
|
|
+ return {
|
|
|
|
+ pageLayoutConf: {
|
|
|
|
+ actionRightStyle: {
|
|
|
|
+ display: 'flex',
|
|
|
|
+ flexDirection: 'column',
|
|
|
|
+ alignItems: 'center',
|
|
|
|
+ color: '#171826',
|
|
|
|
+ fontSize: '10px',
|
|
|
|
+ lineHeight: '18px'
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ shareEnableConf: {
|
|
|
|
+ shareActionImmediate: false,
|
|
|
|
+ getDomainImmediate: inApp,
|
|
|
|
+ app: true, // 开启app分享
|
|
|
|
+ wx: true // 开启wx分享
|
|
|
|
+ },
|
|
|
|
+ shareConf: {
|
|
|
|
+ fetchDomain: true,
|
|
|
|
+ title: '',
|
|
|
|
+ content: '',
|
|
|
|
+ pathname: '',
|
|
|
|
+ origin: location.origin,
|
|
|
|
+ link: ''
|
|
|
|
+ },
|
|
|
|
+ shareInfoRes: {},
|
|
|
|
+ offsetTop: 0,
|
|
|
|
+ // tabList: [
|
|
|
|
+ // {
|
|
|
|
+ // label: '摘要',
|
|
|
|
+ // value: 'abstract'
|
|
|
|
+ // },
|
|
|
|
+ // {
|
|
|
|
+ // label: '正文',
|
|
|
|
+ // value: 'mainText'
|
|
|
|
+ // },
|
|
|
|
+ // {
|
|
|
|
+ // label: '进度',
|
|
|
|
+ // value: 'timeline'
|
|
|
|
+ // },
|
|
|
|
+ // {
|
|
|
|
+ // label: '投标服务',
|
|
|
|
+ // value: 'service'
|
|
|
|
+ // },
|
|
|
|
+ // {
|
|
|
|
+ // label: '商机推荐',
|
|
|
|
+ // value: 'businessRecommend'
|
|
|
|
+ // },
|
|
|
|
+ // {
|
|
|
|
+ // label: '客户推荐',
|
|
|
|
+ // value: 'customerRecommend'
|
|
|
|
+ // }
|
|
|
|
+ // ],
|
|
|
|
+ reqState: {
|
|
|
|
+ loading: true,
|
|
|
|
+ loaded: false
|
|
|
|
+ },
|
|
|
|
+ popup: {
|
|
|
|
+ thirdPartyVerify: false
|
|
|
|
+ },
|
|
|
|
+ wxShareCache: {
|
|
|
|
+ encryptid: '',
|
|
|
|
+ subhref: ''
|
|
|
|
+ },
|
|
|
|
+ pageState: {
|
|
|
|
+ id: '',
|
|
|
|
+ tabActive: ''
|
|
|
|
+ },
|
|
|
|
+ scrollStatus: true,
|
|
|
|
+ isError: false,
|
|
|
|
+ errorText: ''
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ computed: {
|
|
|
|
+ ...mapState({
|
|
|
|
+ preAgentInfo: state => state.article.preAgentInfo,
|
|
|
|
+ content: state => state.article.mainModel.content,
|
|
|
|
+ summary: state => state.article.mainModel.summary,
|
|
|
|
+ mainModel: state => state.article.mainModel,
|
|
|
|
+ expandModel: state => state.article.expandModel,
|
|
|
|
+ otherModel: state => state.article.otherModel,
|
|
|
|
+ bindPhone: state => state.article.bindPhone
|
|
|
|
+ }),
|
|
|
|
+ IsCustomTopNet() {
|
|
|
|
+ return this.content.IsCustomTopNet || false
|
|
|
|
+ },
|
|
|
|
+ yyszbContent() {
|
|
|
|
+ return this.content.yyszbContent || location.pathname.includes('/yyszb')
|
|
|
|
+ },
|
|
|
|
+ toBCustom() {
|
|
|
|
+ return (
|
|
|
|
+ this.IsCustomTopNet || this.yyszbContent || this.IsSunPublishContent
|
|
|
|
+ )
|
|
|
|
+ },
|
|
|
|
+ showMonitor() {
|
|
|
|
+ return !this.yyszbContent
|
|
|
|
+ },
|
|
|
|
+ hasPowerToReadSunPublishContent() {
|
|
|
|
+ return this.content.hasPowerToReadSunPublishContent || false
|
|
|
|
+ },
|
|
|
|
+ IsSunPublishContent() {
|
|
|
|
+ return this.content.IsSunPublishContent || false
|
|
|
|
+ },
|
|
|
|
+ showContentHeaderBannerTip() {
|
|
|
|
+ if (this.toBCustom) {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ return this.content.recommendedService
|
|
|
|
+ },
|
|
|
|
+ openid() {
|
|
|
|
+ return this.preAgentInfo.openid
|
|
|
|
+ },
|
|
|
|
+ ...mapGetters('user', [
|
|
|
|
+ 'isLogin',
|
|
|
|
+ 'isSuper',
|
|
|
|
+ 'isMember',
|
|
|
|
+ 'isNewBusiness',
|
|
|
|
+ 'bigMemberPower'
|
|
|
|
+ ]),
|
|
|
|
+ canReadConf() {
|
|
|
|
+ if (this.IsSunPublishContent) {
|
|
|
|
+ return {
|
|
|
|
+ show: this.content.isCanRead, // 是否展示全部内容
|
|
|
|
+ showContentModule: this.hasPowerToReadSunPublishContent
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ return {
|
|
|
|
+ show: this.content.isCanRead,
|
|
|
|
+ showContentModule: true
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ canShowNpsModule() {
|
|
|
|
+ if (this.IsCustomTopNet) {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ if (this.yyszbContent) {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ return this.canReadConf.show
|
|
|
|
+ },
|
|
|
|
+ showTabActions() {
|
|
|
|
+ if (this.toBCustom) {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ return this.canReadConf.show
|
|
|
|
+ },
|
|
|
|
+ baseModuleShow() {
|
|
|
|
+ return this.mainModel.moduleShow
|
|
|
|
+ },
|
|
|
|
+ advancedModuleShow() {
|
|
|
|
+ const { tbService, customerRecommend, timeline, zbRecommend }
|
|
|
|
+ = this.expandModel.moduleShow
|
|
|
|
+ const toBCustom
|
|
|
|
+ = this.IsCustomTopNet || this.IsSunPublishContent || this.yyszbContent
|
|
|
|
+ return Object.assign({}, this.expandModel.moduleShow, {
|
|
|
|
+ tbService: toBCustom ? false : tbService,
|
|
|
|
+ customerRecommend: toBCustom ? false : customerRecommend,
|
|
|
|
+ timeline: toBCustom ? false : timeline,
|
|
|
|
+ zbRecommend: toBCustom ? false : zbRecommend
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ // 客户推荐模块是否展示
|
|
|
|
+ customerRecommendModuleShow() {
|
|
|
|
+ if (this.IsCustomTopNet) {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ if (this.toBCustom) {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ // 如果是有权限用户(权限7),则有数据展示,无数据不展示。无权限7用户则一直展示,展示广告引导
|
|
|
|
+ if (this.hasCustomerModulePower) {
|
|
|
|
+ return this.advancedModuleShow.customerRecommend
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ return true
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ hasCustomerModulePower() {
|
|
|
|
+ // 潜在客户挖掘权限。权限7
|
|
|
|
+ return this.expandModel.recommendCustomers?.isPower
|
|
|
|
+ },
|
|
|
|
+ getContentAdID() {
|
|
|
|
+ const sun = this.IsSunPublishContent ? '-sun' : ''
|
|
|
|
+ return `${this.$envs.inWX ? 'jy' : 'jyapp'}${sun}-wxcontent-bottom`
|
|
|
|
+ },
|
|
|
|
+ getContentAdID() {
|
|
|
|
+ return `${this.$envs.inWX ? 'jy' : 'jyapp'}-wxcontent-bottom`
|
|
|
|
+ },
|
|
|
|
+ // 是否展示绑定手机号弹窗
|
|
|
|
+ showBindPhone() {
|
|
|
|
+ const { wxpush } = this.$route?.query
|
|
|
|
+ return wxpush === 'bind' && this.$envs.inWX && !this.isBindPhone
|
|
|
|
+ },
|
|
|
|
+ // 从baseInfo获取是否绑定手机号(P607新增)
|
|
|
|
+ isBindPhone() {
|
|
|
|
+ return this.bindPhone
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ async created() {
|
|
|
|
+ this.appHeaderActions()
|
|
|
|
+ await this.getPageState()
|
|
|
|
+ this.initAppWxShare()
|
|
|
|
+ },
|
|
|
|
+ mounted() {
|
|
|
|
+ this.getStickyOffset()
|
|
|
|
+ this.restoreScrollTop()
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ ...mapMutations('article', [
|
|
|
|
+ 'setOtherModelChild',
|
|
|
|
+ 'setMainContentModelChild'
|
|
|
|
+ ]),
|
|
|
|
+ ...mapActions('article', [
|
|
|
|
+ 'pageStateReset',
|
|
|
|
+ 'pageStateRestore',
|
|
|
|
+ 'saveStateToStorage',
|
|
|
|
+ 'getPreAgentInfo',
|
|
|
|
+ 'getBaseInfo',
|
|
|
|
+ 'getAdvancedInfo'
|
|
|
|
+ ]),
|
|
|
|
+ finishLoading() {
|
|
|
|
+ this.reqState.loading = false
|
|
|
|
+ this.reqState.loaded = true
|
|
|
|
+ },
|
|
|
|
+ async getPageState() {
|
|
|
|
+ // 1. 重置数据
|
|
|
|
+ await this.pageStateReset()
|
|
|
|
+ this.getParams()
|
|
|
|
+ // 2. 检测缓存
|
|
|
|
+ this.storage = await this.pageStateRestore()
|
|
|
|
+ if (this.storage) {
|
|
|
|
+ // 缓存中获取,恢复滚动高度
|
|
|
|
+ this.finishLoading()
|
|
|
|
+ this.$nextTick(() => {
|
|
|
|
+ // console.log('恢复滚动高度', this.storage)
|
|
|
|
+ const scrollWrapper = this.$refs.scrollWrapper
|
|
|
|
+ if (scrollWrapper) {
|
|
|
|
+ scrollWrapper.scrollTop = this.otherModel.scrollTop
|
|
|
|
+ }
|
|
|
|
+ this.checkNpsView()
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ try {
|
|
|
|
+ await this.getPreAgentInfo()
|
|
|
|
+ const { data, msg } = await this.getBaseInfo()
|
|
|
|
+ if (data) {
|
|
|
|
+ this.finishLoading()
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ this.finishLoading()
|
|
|
|
+ this.isError = true
|
|
|
|
+ // 无效参数 = d解析错误
|
|
|
|
+ // 未查到当前招标信息 = 文章不存在
|
|
|
|
+ if (msg.includes('未查到当前招标信息')) {
|
|
|
|
+ this.errorText = '由于相关部门要求,该信息已下架,敬请原谅'
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ this.errorText = '该页面信息不存在'
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ catch (error) {
|
|
|
|
+ console.error(error)
|
|
|
|
+ }
|
|
|
|
+ finally {
|
|
|
|
+ // console.log('基础接口请求完成')
|
|
|
|
+ }
|
|
|
|
+ if (this.canReadConf.show) {
|
|
|
|
+ this.getAdvancedInfo()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ this.changeTdk()
|
|
|
|
+ },
|
|
|
|
+ changeTdk() {
|
|
|
|
+ const { title, keywords, description } = this.content.tdk || {}
|
|
|
|
+ const { listShareTitle } = this.content
|
|
|
|
+ this.setPageTdkCall({
|
|
|
|
+ title,
|
|
|
|
+ keywords,
|
|
|
|
+ description
|
|
|
|
+ })
|
|
|
|
+ this.setAMiniProgramShareTitle(title, listShareTitle)
|
|
|
|
+ },
|
|
|
|
+ setAMiniProgramShareTitle(title, otherTitle) {
|
|
|
|
+ // if (!this.$envs.inWxMini) return
|
|
|
|
+ let subType = ''
|
|
|
|
+ try {
|
|
|
|
+ subType = this.content?._ob?.subType
|
|
|
|
+ }
|
|
|
|
+ catch (error) {
|
|
|
|
+ console.log(error)
|
|
|
|
+ }
|
|
|
|
+ let prefix = ''
|
|
|
|
+ if (subType) {
|
|
|
|
+ prefix = `【${subType}】`
|
|
|
|
+ }
|
|
|
|
+ const newTitle = prefix + title
|
|
|
|
+ if (otherTitle) {
|
|
|
|
+ this.postMessageToMiniProgram(otherTitle)
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ this.postMessageToMiniProgram(newTitle)
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ postMessageToMiniProgram(title) {
|
|
|
|
+ try {
|
|
|
|
+ wx.miniProgram.postMessage({
|
|
|
|
+ data: {
|
|
|
|
+ post: 'share',
|
|
|
|
+ type: 'common',
|
|
|
|
+ desc: '标讯详情',
|
|
|
|
+ title
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ catch (e) {
|
|
|
|
+ console.log(e)
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ getParams() {
|
|
|
|
+ const { params } = this.$route
|
|
|
|
+ // 保持获取到的id和接口返回的id一致
|
|
|
|
+ this.pageState.id = params.id
|
|
|
|
+ this.setMainContentModelChild({ key: 'id', data: this.pageState.id })
|
|
|
|
+ },
|
|
|
|
+ appHeaderActions() {
|
|
|
|
+ const { $envs } = this
|
|
|
|
+ if (!$envs.inApp)
|
|
|
|
+ return
|
|
|
|
+ if (this.yyszbContent) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ const actionRightConf = {
|
|
|
|
+ actionRightText:
|
|
|
|
+ '<div class="j-icon icon-points" style="width:24px;height:24px"></div><p>分享有礼</p>',
|
|
|
|
+ onClickRight: this.clickRight
|
|
|
|
+ }
|
|
|
|
+ for (const key in actionRightConf) {
|
|
|
|
+ this.$set(this.pageLayoutConf, key, actionRightConf[key])
|
|
|
|
+ }
|
|
|
|
+ this.mergePageConf()
|
|
|
|
+ },
|
|
|
|
+ getStickyOffset() {
|
|
|
|
+ const header = document.querySelector('.common-app-header')
|
|
|
|
+ if (header) {
|
|
|
|
+ const offsetTop = header?.clientHeight || 0
|
|
|
|
+ if (offsetTop > 0) {
|
|
|
|
+ this.offsetTop = offsetTop - 1
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ onScrollWrapperClick(e) {
|
|
|
|
+ const checkUnderline = checkAncestorClass(e, 'keyword-underline', 3)
|
|
|
|
+ // project-name事件委托
|
|
|
|
+ if (checkUnderline.status) {
|
|
|
|
+ this.clickKeywordUnderline(e)
|
|
|
|
+ }
|
|
|
|
+ else if (e.target.classList.contains('free-view')) {
|
|
|
|
+ this.clickFreeView(e)
|
|
|
|
+ }
|
|
|
|
+ else if (e.target.className.includes('third-party-popover')) {
|
|
|
|
+ this.popup.thirdPartyVerify = true
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ // 页面下划线高内容亮事件委托
|
|
|
|
+ clickKeywordUnderline(e) {
|
|
|
|
+ const checkProjectName = checkAncestorClass(e, 'project-name', 3)
|
|
|
|
+ const checkWinnerName = checkAncestorClass(e, 'winner-name', 3)
|
|
|
|
+ if (checkProjectName.status) {
|
|
|
|
+ // 标题跳转添加ABTest手机号绑定弹框
|
|
|
|
+ this.$testBindPhone({
|
|
|
|
+ props: {
|
|
|
|
+ name: '标讯详情页-标题'
|
|
|
|
+ },
|
|
|
|
+ next: () => {
|
|
|
|
+ this.goMemberFollowPage()
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ else if (checkWinnerName.status) {
|
|
|
|
+ this.goToEntPortraitPage(checkWinnerName.target)
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ goMemberFollowPage() {
|
|
|
|
+ const { _ob } = this.content || {}
|
|
|
|
+ const { fid, id } = this.otherModel.projectFollowState || {}
|
|
|
|
+ const params = {
|
|
|
|
+ fid,
|
|
|
|
+ sid: id
|
|
|
|
+ }
|
|
|
|
+ sessionStorage.setItem('bigvip-fid', JSON.stringify(params))
|
|
|
|
+ this.beforeLeavePage()
|
|
|
|
+ if (this.isNewBusiness) {
|
|
|
|
+ openAppOrWxPage(LINKS.商机管理项目进度监控, {
|
|
|
|
+ query: {
|
|
|
|
+ from: 'client',
|
|
|
|
+ industry: _ob ? _ob.buyerClass : undefined
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ openAppOrWxPage(LINKS.项目详情页)
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ goToEntPortraitPage(target) {
|
|
|
|
+ const id = target.dataset.eid
|
|
|
|
+ const eName = target.innerText
|
|
|
|
+ ?.replace(/#/g, '%23')
|
|
|
|
+ ?.replace(/\?/g, '%3F')
|
|
|
|
+ if (!id) {
|
|
|
|
+ return this.$toast('暂无数据')
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ const noPower
|
|
|
|
+ = !this.bigMemberPower.includes(4)
|
|
|
|
+ && !this.bigMemberPower.includes(12)
|
|
|
|
+ && !this.bigMemberPower.includes(13)
|
|
|
|
+ if (this.isMember && noPower) {
|
|
|
|
+ if (eName) {
|
|
|
|
+ this.beforeLeavePage()
|
|
|
|
+ openAppOrWxPage({
|
|
|
|
+ wx: LINKS.旧版企业信息前缀.wx + eName,
|
|
|
|
+ app: LINKS.旧版企业信息前缀.app + eName,
|
|
|
|
+ h5: LINKS.旧版企业信息前缀.h5 + eName
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ return this.$toast('暂无数据')
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ this.beforeLeavePage()
|
|
|
|
+ sessionStorage.removeItem('$data-ent_portrait')
|
|
|
|
+ openAppOrWxPage(LINKS.企业画像页面, {
|
|
|
|
+ query: {
|
|
|
|
+ eId: id
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ clickFreeView() {
|
|
|
|
+ this.$testBindPhone({
|
|
|
|
+ props: {
|
|
|
|
+ name: '标讯详情页-采购联系人/联系电话'
|
|
|
|
+ },
|
|
|
|
+ next: () => {
|
|
|
|
+ this.beforeLeavePage()
|
|
|
|
+ let source = 'peugeot_view_infor'
|
|
|
|
+ if (this.toBCustom) {
|
|
|
|
+ source = `${this.$env.platform}_sunlight_viewdetails`
|
|
|
|
+ }
|
|
|
|
+ openAppOrWxPage(LINKS.留资, {
|
|
|
|
+ query: {
|
|
|
|
+ source,
|
|
|
|
+ infoid: this.content.id
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ beforeLeavePage() {
|
|
|
|
+ this.saveStateToStorage()
|
|
|
|
+ // 返回true,广告位才能正常跳转
|
|
|
|
+ return true
|
|
|
|
+ },
|
|
|
|
+ clickRight() {
|
|
|
|
+ this.checkTestBindPhone('标讯详情页-分享有礼', this.doShare)
|
|
|
|
+ },
|
|
|
|
+ doShare() {
|
|
|
|
+ this.shareShow = true
|
|
|
|
+ },
|
|
|
|
+ async initAppWxShare() {
|
|
|
|
+ if (this.$envs.inWX) {
|
|
|
|
+ try {
|
|
|
|
+ await this.getShareInfoReq()
|
|
|
|
+ }
|
|
|
|
+ catch (error) {
|
|
|
|
+ console.log(error)
|
|
|
|
+ }
|
|
|
|
+ await this.calcWxShareInfo()
|
|
|
|
+ this.initShareMixin()
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ this.getShareInfoReq()
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ async getShareInfoReq() {
|
|
|
|
+ const {
|
|
|
|
+ data = {},
|
|
|
|
+ error_code: code,
|
|
|
|
+ error_msg: msg = ''
|
|
|
|
+ } = await getArticleShareInfo()
|
|
|
|
+ if (code === 0 && data) {
|
|
|
|
+ this.shareInfoRes = data
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ async calcWxShareInfo() {
|
|
|
|
+ const host = location.host
|
|
|
|
+ const id = this.content.id
|
|
|
|
+ const openid = this.openid ? encodeURIComponent(this.openid) : '-1'
|
|
|
|
+
|
|
|
|
+ // 计算title
|
|
|
|
+ const title = this.content.title
|
|
|
|
+ .replace(/<\/?.+?>/g, '')
|
|
|
|
+ .replace(/ /g, '')
|
|
|
|
+
|
|
|
|
+ // 计算content
|
|
|
|
+ const contentList = ['您的好友']
|
|
|
|
+ // 分享到微信或者朋友圈带上昵称
|
|
|
|
+ if (this.shareInfoRes.nickname) {
|
|
|
|
+ contentList.push(this.shareInfoRes.nickname)
|
|
|
|
+ }
|
|
|
|
+ contentList.push('向您推荐了剑鱼标讯')
|
|
|
|
+ const content = contentList.join('')
|
|
|
|
+
|
|
|
|
+ let link = `${host}/swordfish/about?param=${openid}__jy_extend&qrcodeType=wx_infocontent_timeline_z`
|
|
|
|
+ if (window.location.href.includes('open_infocontent')) {
|
|
|
|
+ const query = window.location.search.slice(1)
|
|
|
|
+ link += `${query}`
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ link += '&source=wx_infocontentshare'
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let subhref = location.href
|
|
|
|
+ let encryptid = ''
|
|
|
|
+ if (id) {
|
|
|
|
+ try {
|
|
|
|
+ const data = await getContentShareEncrypt({ id })
|
|
|
|
+ if (data.flag === 'T') {
|
|
|
|
+ encryptid = data.sid_openid
|
|
|
|
+ this.wxShareCache.encryptid = encryptid
|
|
|
|
+ const add1 = subhref.substring(0, subhref.indexOf('/content/'))
|
|
|
|
+ const add2 = subhref.substring(subhref.indexOf('.html'))
|
|
|
|
+ subhref = `${add1}/content/${encryptid}${add2}`
|
|
|
|
+ this.wxShareCache.subhref = subhref
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ catch (error) {
|
|
|
|
+ console.warn(error)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (encryptid) {
|
|
|
|
+ link = subhref
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ link = window.location.href
|
|
|
|
+ }
|
|
|
|
+ if (!link.includes('?')) {
|
|
|
|
+ link += '?'
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ link += '&'
|
|
|
|
+ }
|
|
|
|
+ if (!encryptid) {
|
|
|
|
+ link += `openid=${openid}&`
|
|
|
|
+ }
|
|
|
|
+ link += 'source=wx_infocontentshare'
|
|
|
|
+
|
|
|
|
+ this.shareConf.title = title
|
|
|
|
+ this.shareConf.content = content
|
|
|
|
+ this.shareConf.link = link
|
|
|
|
+
|
|
|
|
+ // const url = new URL(link)
|
|
|
|
+ // this.shareConf.pathname = url.pathname
|
|
|
|
+ // this.refreshShareLink()
|
|
|
|
+ console.log(JSON.stringify(this.shareConf))
|
|
|
|
+ },
|
|
|
|
+ calcAppShareInfo(t) {
|
|
|
|
+ const shareType = t.id
|
|
|
|
+
|
|
|
|
+ const contentList = ['您的好友']
|
|
|
|
+ // 分享到微信或者朋友圈带上昵称
|
|
|
|
+ if (this.shareInfoRes.nickname && shareType !== 2) {
|
|
|
|
+ contentList.push(this.shareInfoRes.nickname)
|
|
|
|
+ }
|
|
|
|
+ contentList.push('向您推荐了剑鱼标讯')
|
|
|
|
+ const content = contentList.join('')
|
|
|
|
+
|
|
|
|
+ const shareToWx = shareType === 1 || shareType === 3
|
|
|
|
+
|
|
|
|
+ let link = `/swordfish/about?source=app_infocontentshare&from=${
|
|
|
|
+ this.shareInfoRes.userId || ''
|
|
|
|
+ }`
|
|
|
|
+ let shareTitle = this.content.title
|
|
|
|
+ .replace(/<\/?.+?>/g, '')
|
|
|
|
+ .replace(/ /g, '')
|
|
|
|
+ if (shareType === 1) {
|
|
|
|
+ // 分享给微信好友
|
|
|
|
+ link = location.pathname
|
|
|
|
+ .replace(import.meta.env.VITE_APP_BASE_URL, '')
|
|
|
|
+ .replace('/jyapp', '')
|
|
|
|
+ if (location.search) {
|
|
|
|
+ link += `${location.search}&source=app_infocontentshare&from=${
|
|
|
|
+ this.shareInfoRes.userId || ''
|
|
|
|
+ }`
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ link += `?source=app_infocontentshare&from=${
|
|
|
|
+ this.shareInfoRes.userId || ''
|
|
|
|
+ }`
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else if (shareType === 3) {
|
|
|
|
+ // 分享到朋友圈
|
|
|
|
+ link += '&qrcodeType=app_infocontent_timeline_z'
|
|
|
|
+ shareTitle = this.getRandomShareText()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ this.shareConf.title = shareTitle
|
|
|
|
+ this.shareConf.content = content
|
|
|
|
+ this.shareConf.pathname = link
|
|
|
|
+ // this.shareConf.link = link
|
|
|
|
+ if (this.$envs.inApp && shareToWx) {
|
|
|
|
+ this.refreshShareLink(this.domainConf.wx)
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ this.refreshShareLink()
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ onScroll: throttle(function (e) {
|
|
|
|
+ this.checkNpsView()
|
|
|
|
+ this.saveScrollTop()
|
|
|
|
+ this.scrollStatus = e.target.scrollTop < 60
|
|
|
|
+ }, 300),
|
|
|
|
+ saveScrollTop() {
|
|
|
|
+ const scrollWrapper = this.$refs.scrollWrapper
|
|
|
|
+ const scrollTop = scrollWrapper.scrollTop
|
|
|
|
+ this.setOtherModelChild({
|
|
|
|
+ key: 'scrollTop',
|
|
|
|
+ data: Number.parseInt(scrollTop)
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ restoreScrollTop() {
|
|
|
|
+ // const toDayShow = this.$storage.get(this.cacheKey, false)
|
|
|
|
+ // const scrollWrapper = this.$refs.scrollWrapper
|
|
|
|
+ },
|
|
|
|
+ checkNpsView() {
|
|
|
|
+ const targetVm = this.$refs.npsCard
|
|
|
|
+ if (!targetVm)
|
|
|
|
+ return
|
|
|
|
+ const target = targetVm.$el
|
|
|
|
+ const scrollWrapper = this.$refs.scrollWrapper
|
|
|
|
+ const visible = isElementInScrollArea(target, scrollWrapper)
|
|
|
|
+ if (visible) {
|
|
|
|
+ targetVm.getIsView()
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ checkTestBindPhone(name, next) {
|
|
|
|
+ this.$testBindPhone({
|
|
|
|
+ props: {
|
|
|
|
+ name
|
|
|
|
+ },
|
|
|
|
+ next
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
+::v-deep {
|
|
|
|
+ .van-tabs__wrap {
|
|
|
|
+ padding-bottom: 4px;
|
|
|
|
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
|
|
|
|
+ }
|
|
|
|
+ .van-tabs__line {
|
|
|
|
+ width: 24px;
|
|
|
|
+ }
|
|
|
|
+ .van-tab {
|
|
|
|
+ padding: 0 8px;
|
|
|
|
+ color: #5f5e64;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .tab-module.content-module-card {
|
|
|
|
+ margin-top: 8px;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .keyword-underline {
|
|
|
|
+ border-bottom: 1px solid $main;
|
|
|
|
+ padding-bottom: 1px;
|
|
|
|
+ }
|
|
|
|
+ .keyword.hide-underline {
|
|
|
|
+ border-bottom-width: 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .van-skeleton {
|
|
|
|
+ padding-top: 24px;
|
|
|
|
+ height: 100%;
|
|
|
|
+ .van-skeleton__row {
|
|
|
|
+ height: 20px;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.show-underline {
|
|
|
|
+ ::v-deep {
|
|
|
|
+ .hide-underline {
|
|
|
|
+ border-bottom-width: 1px;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.small-tab {
|
|
|
|
+ ::v-deep {
|
|
|
|
+ .van-tab {
|
|
|
|
+ flex: none;
|
|
|
|
+ }
|
|
|
|
+ .van-tabs__nav {
|
|
|
|
+ padding-left: 16px;
|
|
|
|
+ padding-right: 16px;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.page-container {
|
|
|
|
+ height: calc(100% - 1px - 1px);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.nps-module {
|
|
|
|
+ margin-top: 8px;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.content-abstract-ent-list-module + .data-export-banner-module {
|
|
|
|
+ padding-top: 0;
|
|
|
|
+}
|
|
|
|
+.content-abstract-other {
|
|
|
|
+ border-top: 0.5px solid rgba(0, 0, 0, 0.05);
|
|
|
|
+ padding: 12px;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.share-subtitle-container {
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ white-space: nowrap;
|
|
|
|
+ font-size: 13px;
|
|
|
|
+ padding: 0 16px;
|
|
|
|
+ .share-subtitle-content {
|
|
|
|
+ margin: 0 6px;
|
|
|
|
+ }
|
|
|
|
+ .share-subtitle-right {
|
|
|
|
+ color: $main;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.mg-box {
|
|
|
|
+ margin: 8px 16px;
|
|
|
|
+ margin-bottom: 32px;
|
|
|
|
+}
|
|
|
|
+.custom-overlay {
|
|
|
|
+ background: linear-gradient(#ededed66 80%, #f9f9f9 100%);
|
|
|
|
+}
|
|
|
|
+.z-index10 {
|
|
|
|
+ position: relative;
|
|
|
|
+ z-index: 10;
|
|
|
|
+}
|
|
|
|
+.no-scroll {
|
|
|
|
+ overflow: hidden;
|
|
|
|
+}
|
|
|
|
+</style>
|
|
|
|
+
|
|
|
|
+<style>
|
|
|
|
+.no-select {
|
|
|
|
+ user-select: unset !important;
|
|
|
|
+}
|
|
|
|
+</style>
|