|
@@ -0,0 +1,640 @@
|
|
|
+<script setup>
|
|
|
+import {
|
|
|
+ ref,
|
|
|
+ onMounted,
|
|
|
+ onBeforeMount,
|
|
|
+ computed,
|
|
|
+ getCurrentInstance
|
|
|
+} from 'vue'
|
|
|
+import { useRoute } from 'vue-router/composables'
|
|
|
+import { debounce, throttle } from 'lodash'
|
|
|
+import { moneyUnit, replaceKeyword } from '@/utils'
|
|
|
+import { dateFromNow } from '@jy/util'
|
|
|
+// 组件引入
|
|
|
+import ContentHeader from '@/views/article-content/components/ContentHeader.vue'
|
|
|
+import CollectInfo from '@/components/collect-info/CollectInfo.vue'
|
|
|
+import Reward from '@/views/article-content/components/Reward.vue'
|
|
|
+import TimeLine from '@/components/time-line/TimeLine.vue'
|
|
|
+import ContentMask from '@/views/article-content/components/ContentMask.vue'
|
|
|
+import Nps from '../components/Nps.vue'
|
|
|
+import adsense from '@/views/order/components/adsense/index.vue'
|
|
|
+import ContentLayout from '@/components/common/ContentLayout.vue'
|
|
|
+
|
|
|
+import RecommendCustomersList from '@/views/article-content/components/RecommendCustomers.vue'
|
|
|
+import ContentSummary from '@/views/article-content/components/ContentSummary.vue'
|
|
|
+import RecommendEnt from '@/views/article-content/components/RecommendEnt.vue'
|
|
|
+import QuickMonitor from '@/composables/quick-monitor/component/QuickMonitor.vue'
|
|
|
+import {
|
|
|
+ useContentStore,
|
|
|
+ ContentExpandsModel,
|
|
|
+ ContentModel,
|
|
|
+ ContentId,
|
|
|
+ ContentPageLoading,
|
|
|
+ ContentPageExpandsLoading,
|
|
|
+ SummaryModel
|
|
|
+} from '@/views/article-content/composables/useContentStore'
|
|
|
+import DownProjectReport from '@/composables/down-project-report/component/DownProjectReport.vue'
|
|
|
+import {
|
|
|
+ doOpenArticlePage,
|
|
|
+ doOpenCorListPage,
|
|
|
+ doOpenProjectDetailPage,
|
|
|
+ doOpenWinnerPage
|
|
|
+} from '@/views/article-content/composables/useArticleUtil'
|
|
|
+import RecommendOpportunities from '@/views/article-content/components/RecommendOpportunities.vue'
|
|
|
+import FooterAd from '@/views/article-content/components/FooterAd.vue'
|
|
|
+import OriginLink from '@/views/article-content/components/OriginLink.vue'
|
|
|
+import RecommendServes from '@/views/article-content/components/RecommendServes.vue'
|
|
|
+import ContentHeaderSkeleton from '@/views/article-content/components/ContentHeaderSkeleton.vue'
|
|
|
+import PoverTimeLine from '@/components/time-line/PoverTimeLine.vue'
|
|
|
+import { useHoverHighlightTextPopover } from '@/views/article-content/composables/useHoverElementClientRect'
|
|
|
+import attachmentDownload from '@/composables/attachment-download/component/AttachmentDownload.vue'
|
|
|
+import ContentRightTimeLine from '@/views/article-content/components/ContentRightTimeLine.vue'
|
|
|
+import ContentThirdPopover from '@/views/article-content/components/ContentThirdPopover.vue'
|
|
|
+
|
|
|
+useContentStore()
|
|
|
+// 判断在哪个容器
|
|
|
+const InWhichContainer = window.parent !== window ? 'in-app' : 'in-web'
|
|
|
+
|
|
|
+// 注入右侧DOM
|
|
|
+onMounted(() => {
|
|
|
+ if (InWhichContainer === 'in-web') {
|
|
|
+ try {
|
|
|
+ $('#inWebRightElement').append($('#in-web-detail-right-group').clone())
|
|
|
+ $('#in-web-detail-right-group').show()
|
|
|
+ } catch (e) {
|
|
|
+ console.warn('not inject detail-right-group')
|
|
|
+ }
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+const activeContentTab = ref('公告摘要')
|
|
|
+const contentTabs = [
|
|
|
+ {
|
|
|
+ label: '公告摘要'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '公告正文'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '投标服务'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '商机推荐'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '客户推荐'
|
|
|
+ }
|
|
|
+]
|
|
|
+
|
|
|
+const tabContentState = ref({
|
|
|
+ 公告摘要: true,
|
|
|
+ 公告正文: true,
|
|
|
+ 投标服务: true,
|
|
|
+ 商机推荐: true,
|
|
|
+ 客户推荐: true
|
|
|
+})
|
|
|
+
|
|
|
+const tabContentShow = computed(() => {
|
|
|
+ const computedState = {
|
|
|
+ 商机推荐:
|
|
|
+ ContentExpandsModel.value.recommendProjects.total > 0 ||
|
|
|
+ ContentExpandsModel.value.recommendBuyers.total > 0 ||
|
|
|
+ ContentExpandsModel.value.recommendWinners.total > 0,
|
|
|
+ 投标服务: ContentExpandsModel.value.services.length > 0,
|
|
|
+ 公告摘要: SummaryModel.value.list.filter((v) => v.value).length > 0,
|
|
|
+ 公告正文: ContentModel.value.content
|
|
|
+ }
|
|
|
+ const result = Object.assign({}, tabContentState.value, computedState)
|
|
|
+ handleScroll()
|
|
|
+ return result
|
|
|
+})
|
|
|
+const tabContentHeaderList = computed(() => {
|
|
|
+ return contentTabs.filter((v) => {
|
|
|
+ return tabContentShow.value[v.label]
|
|
|
+ })
|
|
|
+})
|
|
|
+
|
|
|
+function doHideTabContent(label) {
|
|
|
+ tabContentState.value[label] = false
|
|
|
+}
|
|
|
+
|
|
|
+function scrollToTop(element, diff = 0) {
|
|
|
+ if (element) {
|
|
|
+ const topOffset = element.getBoundingClientRect().top + window.pageYOffset
|
|
|
+ window.scrollTo({
|
|
|
+ top: topOffset - diff,
|
|
|
+ behavior: 'instant'
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function doSelectTab(item) {
|
|
|
+ activeContentTab.value = item.label
|
|
|
+ const goElement = document.querySelector(
|
|
|
+ '.watch-tab-content[name="' + item.label + '"]'
|
|
|
+ )
|
|
|
+ scrollToTop(goElement, 45)
|
|
|
+}
|
|
|
+
|
|
|
+// 招标、采购进度
|
|
|
+const timeLineList = computed(() => {
|
|
|
+ return (
|
|
|
+ ContentExpandsModel.value.projectProgress.list?.map((v) => {
|
|
|
+ return {
|
|
|
+ content: replaceKeyword(
|
|
|
+ v.title,
|
|
|
+ ContentExpandsModel.value.projectProgress.name,
|
|
|
+ ['<span class="highlight-text">', '</span>']
|
|
|
+ ),
|
|
|
+ contentType: [v._data?.toptype, v._data?.subtype].filter((v) => v),
|
|
|
+ money: v?.bidAmount
|
|
|
+ ? moneyUnit(v?.bidAmount).replace('元', '') + '元'
|
|
|
+ : '',
|
|
|
+ id: v.id,
|
|
|
+ s_id: v.id,
|
|
|
+ tags: [v.tag],
|
|
|
+ time: v.time,
|
|
|
+ isActive: v.isActive
|
|
|
+ }
|
|
|
+ }) || []
|
|
|
+ )
|
|
|
+})
|
|
|
+
|
|
|
+const isFixedHeader = ref(false)
|
|
|
+
|
|
|
+const handleScroll = throttle((e) => {
|
|
|
+ const watchElements = document.querySelectorAll('.watch-tab-content')
|
|
|
+ let lastVisibleElement = null
|
|
|
+
|
|
|
+ for (let i = 0; i < watchElements.length; i++) {
|
|
|
+ const element = watchElements[i]
|
|
|
+ const rect = element.getBoundingClientRect()
|
|
|
+ const watchHeight = window.innerHeight
|
|
|
+ const visible = rect.top >= 0 && rect.top <= watchHeight * 0.6
|
|
|
+ if (visible) {
|
|
|
+ lastVisibleElement = element
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (lastVisibleElement) {
|
|
|
+ activeContentTab.value = lastVisibleElement.getAttribute('name')
|
|
|
+ }
|
|
|
+
|
|
|
+ const headerElement = document.querySelector('.watch-tab-header')
|
|
|
+ const fixedHeaderElement = document.querySelector(
|
|
|
+ '.watch-tab-header .is-fixed-top'
|
|
|
+ )
|
|
|
+ if (fixedHeaderElement) {
|
|
|
+ fixedHeaderElement.style.width = headerElement.clientWidth + 'px'
|
|
|
+ }
|
|
|
+
|
|
|
+ const canShow = headerElement?.getBoundingClientRect().top <= 0
|
|
|
+ isFixedHeader.value = canShow
|
|
|
+}, 240)
|
|
|
+const handleFocus = () => {
|
|
|
+ const activeElement = document.activeElement
|
|
|
+ if (activeElement) {
|
|
|
+ activeElement.blur()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ window.addEventListener('scroll', handleScroll)
|
|
|
+ handleScroll()
|
|
|
+
|
|
|
+ document.addEventListener('visibilitychange', handleFocus)
|
|
|
+})
|
|
|
+
|
|
|
+onBeforeMount(() => {
|
|
|
+ window.removeEventListener('scroll', handleScroll)
|
|
|
+ window.removeEventListener('visibilitychange', handleFocus)
|
|
|
+})
|
|
|
+
|
|
|
+// 打开留资弹窗
|
|
|
+const collectElement = ref(null)
|
|
|
+function doOpenCollectDialog(key) {
|
|
|
+ if (typeof key === 'string') {
|
|
|
+ collectElement.value?.noCallApiFn(key, false)
|
|
|
+ } else if (typeof key === 'object') {
|
|
|
+ const { source, reload = false } = key
|
|
|
+ collectElement.value?.noCallApiFn(source, reload)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 查看原文
|
|
|
+const originLinkElement = ref(null)
|
|
|
+function doOpenOriginLink() {
|
|
|
+ originLinkElement.value?.doGetLinkAction()
|
|
|
+}
|
|
|
+
|
|
|
+// 客户推荐
|
|
|
+function doOpenMore(key) {
|
|
|
+ switch (key) {
|
|
|
+ case 'recommendCustomers': {
|
|
|
+ sessionStorage.setItem(
|
|
|
+ 'potential_cor_list_search',
|
|
|
+ JSON.stringify(
|
|
|
+ ContentExpandsModel.value.recommendCustomers?.search || {}
|
|
|
+ )
|
|
|
+ )
|
|
|
+ doOpenCorListPage({
|
|
|
+ mark: 1
|
|
|
+ })
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 是否有项目进度
|
|
|
+const hasProject = computed(() => {
|
|
|
+ return ContentExpandsModel.value.projectProgress.name
|
|
|
+})
|
|
|
+
|
|
|
+// 联系客服
|
|
|
+const that = getCurrentInstance().proxy
|
|
|
+function doOpenCustomer() {
|
|
|
+ that?.contactCustomer(that)
|
|
|
+}
|
|
|
+// 是否显示遮罩
|
|
|
+const canShowMask = computed(() => {
|
|
|
+ let type = 'free-max'
|
|
|
+ if (ContentModel.value.isNiJian) {
|
|
|
+ type = 'proposed'
|
|
|
+ } else if (ContentModel.value.isCaigouyixiang) {
|
|
|
+ type = 'purchase'
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ show: !ContentModel.value.isCanRead,
|
|
|
+ type: type
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+const popoverElement = ref(null)
|
|
|
+
|
|
|
+// 招标、采购进度
|
|
|
+const winnerTimeLineList = computed(() => {
|
|
|
+ return ContentExpandsModel.value.recommendWinners.list.map((v) => {
|
|
|
+ const tag = v._o.subtype || v._o.toptype || ''
|
|
|
+ return {
|
|
|
+ content: replaceKeyword(
|
|
|
+ v.title,
|
|
|
+ ContentExpandsModel.value.recommendWinners.name,
|
|
|
+ ['<span class="highlight-text">', '</span>']
|
|
|
+ ),
|
|
|
+ id: v.id,
|
|
|
+ s_id: v.id,
|
|
|
+ tags: tag ? [tag] : [],
|
|
|
+ time: v?.time ? dateFromNow(v?.time) : '',
|
|
|
+ isActive: v.isActive
|
|
|
+ }
|
|
|
+ })
|
|
|
+})
|
|
|
+
|
|
|
+const popoverElementType = computed(() => {
|
|
|
+ if (elementState.value.className.indexOf('project-name') !== -1) {
|
|
|
+ return 'project-name'
|
|
|
+ }
|
|
|
+ if (elementState.value.className.indexOf('winner-name') !== -1) {
|
|
|
+ return 'winner-name'
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ elementState.value.className.indexOf('third-party-verify-button') !== -1
|
|
|
+ ) {
|
|
|
+ return 'third-verify'
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+})
|
|
|
+
|
|
|
+// 项目名称、企业名称悬浮窗口
|
|
|
+const popoverTimeLine = computed(() => {
|
|
|
+ if (popoverElementType.value === 'project-name') {
|
|
|
+ return {
|
|
|
+ width: '720',
|
|
|
+ contentType: 'time-line',
|
|
|
+ title: '项目公告',
|
|
|
+ list: timeLineList.value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ elementState.value.text ===
|
|
|
+ ContentExpandsModel.value.recommendWinners.name &&
|
|
|
+ popoverElementType.value === 'winner-name'
|
|
|
+ ) {
|
|
|
+ return {
|
|
|
+ width: '720',
|
|
|
+ contentType: 'time-line',
|
|
|
+ title: '企业最新信息',
|
|
|
+ list: winnerTimeLineList.value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (popoverElementType.value === 'third-verify') {
|
|
|
+ return {
|
|
|
+ width: '623',
|
|
|
+ contentType: 'third-verify',
|
|
|
+ title: '',
|
|
|
+ list: []
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ width: '',
|
|
|
+ contentType: '',
|
|
|
+ title: '',
|
|
|
+ list: []
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+const { elementState, useElementListener } = useHoverHighlightTextPopover({
|
|
|
+ parentSelector: '.content-main-container',
|
|
|
+ hasClass: 'keyword-underline',
|
|
|
+ onCustomClass: (className) => {
|
|
|
+ // 项目名称
|
|
|
+ if (className.indexOf('keyword-underline') !== -1) {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ // 认证服务
|
|
|
+ if (className.indexOf('third-party-verify-button') !== -1) {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ return false
|
|
|
+ },
|
|
|
+ onChangeHover: debounce((isHover) => {
|
|
|
+ popoverElement.value.doChangePopover(isHover)
|
|
|
+ }, 150),
|
|
|
+ onClick: () => {
|
|
|
+ if (popoverElementType.value === 'project-name') {
|
|
|
+ doOpenProjectDetailPage({ id: ContentId.value })
|
|
|
+ }
|
|
|
+ if (popoverElementType.value === 'winner-name') {
|
|
|
+ if (elementState.value.winnerId) {
|
|
|
+ doOpenWinnerPage({ id: elementState.value.winnerId })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+// 事件延迟绑定
|
|
|
+const canAddContentMainEvent = computed(() => {
|
|
|
+ const result = !ContentPageLoading.value && tabContentShow.value['公告正文']
|
|
|
+ if (result) {
|
|
|
+ useElementListener()
|
|
|
+ }
|
|
|
+ return result
|
|
|
+})
|
|
|
+
|
|
|
+// 免费查看
|
|
|
+function doClickFreeView() {
|
|
|
+ doOpenCollectDialog('peugeot_view_infor')
|
|
|
+}
|
|
|
+</script>
|
|
|
+<template>
|
|
|
+ <ContentLayout :need-ad="true" class="article-page-container">
|
|
|
+ <el-skeleton
|
|
|
+ class="default-article-container"
|
|
|
+ :loading="ContentPageLoading"
|
|
|
+ animated
|
|
|
+ :throttle="500"
|
|
|
+ >
|
|
|
+ <template slot="template">
|
|
|
+ <div class="article-container">
|
|
|
+ <content-header-skeleton />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template>
|
|
|
+ <div
|
|
|
+ v-if="!ContentPageLoading"
|
|
|
+ class="article-container"
|
|
|
+ :class="{ 'show-underline': hasProject }"
|
|
|
+ >
|
|
|
+ <!-- 标题 -->
|
|
|
+ <content-header></content-header>
|
|
|
+ <!-- 无权益遮罩 -->
|
|
|
+ <content-mask
|
|
|
+ v-if="canShowMask.show"
|
|
|
+ :type="canShowMask.type"
|
|
|
+ @doOpenCollect="doOpenCollectDialog"
|
|
|
+ @doOpenCustomer="doOpenCustomer"
|
|
|
+ ></content-mask>
|
|
|
+
|
|
|
+ <div v-if="!canShowMask.show">
|
|
|
+ <!-- 顶部提示 -->
|
|
|
+ <div class="content-header-tip" v-if="ContentModel.isSelfSite">
|
|
|
+ <span>
|
|
|
+ 该公告由业主方/采购单位直接发布,急寻供应商,立即报名直接联系业主方/采购单位参与投标采购。
|
|
|
+ </span>
|
|
|
+ <el-button
|
|
|
+ class="action-button"
|
|
|
+ @click="doOpenCollectDialog('peugeot_supplier_regist')"
|
|
|
+ >立即报名</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ <!-- Tab + 吸顶 Tab -->
|
|
|
+ <div class="watch-tab-header">
|
|
|
+ <div class="content-tabs-fixed">
|
|
|
+ <div
|
|
|
+ class="content-tab-label"
|
|
|
+ :class="{ 'is-active': item.label === activeContentTab }"
|
|
|
+ v-for="item in tabContentHeaderList"
|
|
|
+ :key="item.label"
|
|
|
+ @click="doSelectTab(item)"
|
|
|
+ >
|
|
|
+ {{ item.label }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ class="content-tabs-fixed is-fixed-top"
|
|
|
+ v-show="isFixedHeader"
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ class="content-tab-label"
|
|
|
+ :class="{ 'is-active': item.label === activeContentTab }"
|
|
|
+ v-for="item in tabContentHeaderList"
|
|
|
+ :key="item.label"
|
|
|
+ @click="doSelectTab(item)"
|
|
|
+ >
|
|
|
+ {{ item.label }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 摘要 + 正文 -->
|
|
|
+ <div class="first-content-container">
|
|
|
+ <div
|
|
|
+ class="content-card watch-tab-content"
|
|
|
+ name="公告摘要"
|
|
|
+ v-if="tabContentShow['公告摘要']"
|
|
|
+ >
|
|
|
+ <content-summary />
|
|
|
+ <recommend-ent />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div
|
|
|
+ class="content-card watch-tab-content"
|
|
|
+ name="公告正文"
|
|
|
+ v-if="tabContentShow['公告正文']"
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ class="content-main-container"
|
|
|
+ :data-content="canAddContentMainEvent"
|
|
|
+ >
|
|
|
+ <div class="content-block-header">公告正文</div>
|
|
|
+ <div
|
|
|
+ class="content-detail-container"
|
|
|
+ v-event-listener:click="doClickFreeView"
|
|
|
+ data-event-selector=".free-view"
|
|
|
+ >
|
|
|
+ <pre v-html="ContentModel.contentHighlighted"></pre>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-button
|
|
|
+ v-if="ContentModel.originalShow"
|
|
|
+ class="origin-detail-action"
|
|
|
+ @click="doOpenOriginLink"
|
|
|
+ >
|
|
|
+ <span class="iconfont icon-chakanyuanwen"></span>
|
|
|
+ 查看原文链接
|
|
|
+ </el-button>
|
|
|
+
|
|
|
+ <div>
|
|
|
+ <attachment-download
|
|
|
+ :id="ContentId"
|
|
|
+ :title="ContentModel.title"
|
|
|
+ :attachment-list="ContentModel.attachments"
|
|
|
+ @doOpenCollect="doOpenCollectDialog"
|
|
|
+ ></attachment-download>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <Reward />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 投标服务 -->
|
|
|
+ <div
|
|
|
+ class="content-card watch-tab-content"
|
|
|
+ name="投标服务"
|
|
|
+ v-loading="ContentPageExpandsLoading"
|
|
|
+ v-if="tabContentShow['投标服务']"
|
|
|
+ >
|
|
|
+ <div class="content-block-header">投标服务</div>
|
|
|
+ <recommend-serves
|
|
|
+ @open-collect="doOpenCollectDialog"
|
|
|
+ @click-view-origin="doOpenOriginLink"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <!-- 商机推荐 -->
|
|
|
+ <div
|
|
|
+ class="content-card watch-tab-content"
|
|
|
+ name="商机推荐"
|
|
|
+ v-loading="ContentPageExpandsLoading"
|
|
|
+ v-if="tabContentShow['商机推荐']"
|
|
|
+ >
|
|
|
+ <div class="content-block-header">商机推荐</div>
|
|
|
+ <recommend-opportunities></recommend-opportunities>
|
|
|
+ </div>
|
|
|
+ <!-- 客户推荐 -->
|
|
|
+ <div
|
|
|
+ class="content-card watch-tab-content"
|
|
|
+ name="客户推荐"
|
|
|
+ v-loading="ContentPageExpandsLoading"
|
|
|
+ v-if="!ContentPageExpandsLoading && tabContentShow['客户推荐']"
|
|
|
+ >
|
|
|
+ <div class="flex flex-(row items-center justify-between)">
|
|
|
+ <div class="content-block-header">客户推荐</div>
|
|
|
+ <span
|
|
|
+ class="more-text"
|
|
|
+ v-if="ContentExpandsModel.recommendCustomers.more"
|
|
|
+ @click="doOpenMore('recommendCustomers')"
|
|
|
+ >
|
|
|
+ 查看更多 <i class="iconfont icon-more"></i>
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <recommend-customers-list
|
|
|
+ @doHide="doHideTabContent('客户推荐')"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 评分 -->
|
|
|
+ <Nps></Nps>
|
|
|
+ <!-- 内容底部广告 -->
|
|
|
+ <div class="article-content-footer-container">
|
|
|
+ <adsense code="jy-pccontent-bottom"></adsense>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-skeleton>
|
|
|
+ <!-- hover 项目、企业名称时展示 popover 最新标讯 -->
|
|
|
+ <pover-time-line
|
|
|
+ class="article-content-popover"
|
|
|
+ trigger="manual"
|
|
|
+ poperClass="poverStep"
|
|
|
+ poperPlacement="bottom"
|
|
|
+ :title="popoverTimeLine.title"
|
|
|
+ :custom-event="true"
|
|
|
+ @open="doOpenArticlePage"
|
|
|
+ :stepList="popoverTimeLine.list"
|
|
|
+ :poper-width="popoverTimeLine.width"
|
|
|
+ ref="popoverElement"
|
|
|
+ >
|
|
|
+ <div slot="content" :style="elementState.style"></div>
|
|
|
+ <div slot="main" v-if="popoverTimeLine.contentType === 'third-verify'">
|
|
|
+ <!-- 认证服务悬浮弹窗 -->
|
|
|
+ <content-third-popover
|
|
|
+ @open-collect="doOpenCollectDialog"
|
|
|
+ ></content-third-popover>
|
|
|
+ </div>
|
|
|
+ </pover-time-line>
|
|
|
+ <!-- 留资弹窗 -->
|
|
|
+ <collect-info ref="collectElement"></collect-info>
|
|
|
+ <!-- 底部悬浮广告 -->
|
|
|
+ <footer-ad
|
|
|
+ v-if="!canShowMask.show"
|
|
|
+ code="jy-pc-article-bottom-fixed"
|
|
|
+ ></footer-ad>
|
|
|
+ <!-- 查看原文链接 -->
|
|
|
+ <origin-link
|
|
|
+ v-if="!canShowMask.show"
|
|
|
+ ref="originLinkElement"
|
|
|
+ :id="ContentId"
|
|
|
+ @click-collect="doOpenCollectDialog"
|
|
|
+ ></origin-link>
|
|
|
+ <template #right-top v-if="timeLineList.length > 0">
|
|
|
+ <!-- 招标/采购进度 -->
|
|
|
+ <content-right-time-line
|
|
|
+ :content-id="ContentId"
|
|
|
+ :time-line-list="timeLineList"
|
|
|
+ @open="doOpenArticlePage"
|
|
|
+ ></content-right-time-line>
|
|
|
+ </template>
|
|
|
+ <!-- in-web 容器时右侧注入侧边栏 -->
|
|
|
+ <template #right-main v-if="InWhichContainer === 'in-web'">
|
|
|
+ <div id="inWebRightElement"></div>
|
|
|
+ </template>
|
|
|
+ </ContentLayout>
|
|
|
+</template>
|
|
|
+
|
|
|
+<style lang="scss">
|
|
|
+// 兼容不同容器
|
|
|
+.in-app .article-page-container.v-w1200 {
|
|
|
+ width: 1200px;
|
|
|
+}
|
|
|
+.article-page-container.v-w1200 {
|
|
|
+ margin-top: 32px;
|
|
|
+}
|
|
|
+.in-app .article-page-container.v-w1200 {
|
|
|
+ .content-container {
|
|
|
+ &.calc {
|
|
|
+ .content-main {
|
|
|
+ display: block;
|
|
|
+ width: calc(100% - 200px);
|
|
|
+ margin: 0 auto;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .content-right {
|
|
|
+ flex-shrink: 0;
|
|
|
+ width: 200px;
|
|
|
+ margin-left: 16px;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|
|
|
+<style lang="scss" scoped>
|
|
|
+@import 'src/assets/style/page/article.scss';
|
|
|
+</style>
|