|
@@ -6,8 +6,10 @@ import {
|
|
|
onMounted,
|
|
|
onBeforeMount,
|
|
|
computed,
|
|
|
- getCurrentInstance
|
|
|
+ getCurrentInstance,
|
|
|
+ watch
|
|
|
} from 'vue'
|
|
|
+import { debounce } from 'lodash'
|
|
|
import { useRoute, useRouter } from 'vue-router/composables'
|
|
|
import Reward from '@/views/article-content/components/Reward.vue'
|
|
|
import TimeLine from '@/components/time-line/TimeLine.vue'
|
|
@@ -39,6 +41,9 @@ 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'
|
|
|
|
|
|
useContentStore()
|
|
|
// 判断在哪个容器
|
|
@@ -194,7 +199,12 @@ const contentId = useRoute().params.id.replace('.html', '')
|
|
|
// 打开留资弹窗
|
|
|
const collectElement = ref(null)
|
|
|
function doOpenCollectDialog(key) {
|
|
|
- collectElement.value?.noCallApiFn(key, false)
|
|
|
+ if (typeof key === 'string') {
|
|
|
+ collectElement.value?.noCallApiFn(key, false)
|
|
|
+ } else if (typeof key === 'object') {
|
|
|
+ const { source, reload = false } = key
|
|
|
+ collectElement.value?.noCallApiFn(source, reload)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 查看原文
|
|
@@ -236,6 +246,22 @@ const canShowMask = computed(() => {
|
|
|
type: type
|
|
|
}
|
|
|
})
|
|
|
+
|
|
|
+const popoverElement = ref(null)
|
|
|
+const popoverTriggerElement = ref(null)
|
|
|
+
|
|
|
+// 项目名称悬浮窗口
|
|
|
+const projectTimeLine = computed(() => {
|
|
|
+ return timeLineList.value
|
|
|
+})
|
|
|
+
|
|
|
+const { elementState } = useHoverHighlightTextPopover({
|
|
|
+ parentSelector: '.article-page-container',
|
|
|
+ hasClass: 'project-name',
|
|
|
+ onChangeHover: debounce((isHover) => {
|
|
|
+ popoverElement.value.doChangePopover(isHover)
|
|
|
+ }, 150)
|
|
|
+})
|
|
|
</script>
|
|
|
<template>
|
|
|
<ContentLayout :need-ad="true" class="article-page-container">
|
|
@@ -330,6 +356,15 @@ const canShowMask = computed(() => {
|
|
|
查看原文链接
|
|
|
</el-button>
|
|
|
|
|
|
+ <div>
|
|
|
+ <attachment-download
|
|
|
+ :id="contentId"
|
|
|
+ :title="ContentModel.title"
|
|
|
+ :attachment-list="ContentModel.attachments"
|
|
|
+ @doOpenCollect="doOpenCollectDialog"
|
|
|
+ ></attachment-download>
|
|
|
+ </div>
|
|
|
+
|
|
|
<Reward />
|
|
|
</div>
|
|
|
</div>
|
|
@@ -420,6 +455,13 @@ const canShowMask = computed(() => {
|
|
|
</template>
|
|
|
</el-skeleton>
|
|
|
|
|
|
+ <pover-time-line
|
|
|
+ trigger="manual"
|
|
|
+ :stepList="projectTimeLine"
|
|
|
+ ref="popoverElement"
|
|
|
+ >
|
|
|
+ <div slot="content" :style="elementState.style"></div>
|
|
|
+ </pover-time-line>
|
|
|
<collect-info ref="collectElement"></collect-info>
|
|
|
<footer-ad
|
|
|
v-if="!canShowMask.show"
|