|
@@ -1,155 +1,63 @@
|
|
|
<script setup>
|
|
|
import { nextTick, reactive, ref } from 'vue'
|
|
|
import { SearchIcon,InfoCircleFilledIcon } from 'tdesign-icons-vue-next';
|
|
|
-import { useRouter } from 'vue-router'
|
|
|
+import { useRoute, useRouter } from 'vue-router'
|
|
|
+import { apiEtaReport } from '@/api/etaReport'
|
|
|
+import { useReportStore } from '@/store/modules/report'
|
|
|
+import { useReport } from './hooks/useReport'
|
|
|
import moment from 'moment'
|
|
|
import 'moment/locale/zh-cn';
|
|
|
moment.locale('zh-cn')
|
|
|
import LoadList from '@/components/LoadList.vue'
|
|
|
|
|
|
const router = useRouter()
|
|
|
+const route = useRoute()
|
|
|
|
|
|
-const searchText = ref('')
|
|
|
+const { handleToDetail } = useReport();
|
|
|
+const reportStore = useReportStore();
|
|
|
|
|
|
const listState = reactive({
|
|
|
- list: [
|
|
|
- {
|
|
|
- "report_id": 9716,
|
|
|
- "report_chapter_id": 0,
|
|
|
- "classify_id_first": 749,
|
|
|
- "classify_name_first": "自由报告",
|
|
|
- "classify_id_second": 0,
|
|
|
- "classify_name_second": "",
|
|
|
- "report_chapter_type_id": 0,
|
|
|
- "publish_time": "2025-05-19T16:21:51+08:00",
|
|
|
- "title": "智能布局pdf生成",
|
|
|
- "content_sub": "<div style=\"-webkit-line-clamp: 3;-webkit-box-orient: vertical;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;\">给他人工我跟热范围废物费恶无非王菲菲</div>",
|
|
|
- "classify_id": 0,
|
|
|
- "classify_name": "",
|
|
|
- "report_detail_show_type": 0,
|
|
|
- "rai_report_id": 0
|
|
|
- },
|
|
|
- {
|
|
|
- "report_id": 9714,
|
|
|
- "report_chapter_id": 0,
|
|
|
- "classify_id_first": 749,
|
|
|
- "classify_name_first": "自由报告",
|
|
|
- "classify_id_second": 0,
|
|
|
- "classify_name_second": "",
|
|
|
- "report_chapter_type_id": 0,
|
|
|
- "publish_time": "2025-05-19T14:29:44+08:00",
|
|
|
- "title": "测试报告常规布局",
|
|
|
- "content_sub": "<div style=\"-webkit-line-clamp: 3;-webkit-box-orient: vertical;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;\">带我去多无群大青蛙单位群单位</div>",
|
|
|
- "classify_id": 0,
|
|
|
- "classify_name": "",
|
|
|
- "report_detail_show_type": 0,
|
|
|
- "rai_report_id": 0
|
|
|
- },
|
|
|
- {
|
|
|
- "report_id": 9716,
|
|
|
- "report_chapter_id": 0,
|
|
|
- "classify_id_first": 749,
|
|
|
- "classify_name_first": "自由报告",
|
|
|
- "classify_id_second": 0,
|
|
|
- "classify_name_second": "",
|
|
|
- "report_chapter_type_id": 0,
|
|
|
- "publish_time": "2025-05-19T16:21:51+08:00",
|
|
|
- "title": "智能布局pdf生成",
|
|
|
- "content_sub": "<div style=\"-webkit-line-clamp: 3;-webkit-box-orient: vertical;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;\">给他人工我跟热范围废物费恶无非王菲菲</div>",
|
|
|
- "classify_id": 0,
|
|
|
- "classify_name": "",
|
|
|
- "report_detail_show_type": 0,
|
|
|
- "rai_report_id": 0
|
|
|
- },
|
|
|
- {
|
|
|
- "report_id": 9714,
|
|
|
- "report_chapter_id": 0,
|
|
|
- "classify_id_first": 749,
|
|
|
- "classify_name_first": "自由报告",
|
|
|
- "classify_id_second": 0,
|
|
|
- "classify_name_second": "",
|
|
|
- "report_chapter_type_id": 0,
|
|
|
- "publish_time": "2025-05-19T14:29:44+08:00",
|
|
|
- "title": "测试报告常规布局",
|
|
|
- "content_sub": "<div style=\"-webkit-line-clamp: 3;-webkit-box-orient: vertical;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;\">带我去多无群大青蛙单位群单位</div>",
|
|
|
- "classify_id": 0,
|
|
|
- "classify_name": "",
|
|
|
- "report_detail_show_type": 0,
|
|
|
- "rai_report_id": 0
|
|
|
- },
|
|
|
- {
|
|
|
- "report_id": 9716,
|
|
|
- "report_chapter_id": 0,
|
|
|
- "classify_id_first": 749,
|
|
|
- "classify_name_first": "自由报告",
|
|
|
- "classify_id_second": 0,
|
|
|
- "classify_name_second": "",
|
|
|
- "report_chapter_type_id": 0,
|
|
|
- "publish_time": "2025-05-19T16:21:51+08:00",
|
|
|
- "title": "智能布局pdf生成",
|
|
|
- "content_sub": "<div style=\"-webkit-line-clamp: 3;-webkit-box-orient: vertical;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;\">给他人工我跟热范围废物费恶无非王菲菲</div>",
|
|
|
- "classify_id": 0,
|
|
|
- "classify_name": "",
|
|
|
- "report_detail_show_type": 0,
|
|
|
- "rai_report_id": 0
|
|
|
- },
|
|
|
- {
|
|
|
- "report_id": 9714,
|
|
|
- "report_chapter_id": 0,
|
|
|
- "classify_id_first": 749,
|
|
|
- "classify_name_first": "自由报告",
|
|
|
- "classify_id_second": 0,
|
|
|
- "classify_name_second": "",
|
|
|
- "report_chapter_type_id": 0,
|
|
|
- "publish_time": "2025-05-19T14:29:44+08:00",
|
|
|
- "title": "测试报告常规布局",
|
|
|
- "content_sub": "<div style=\"-webkit-line-clamp: 3;-webkit-box-orient: vertical;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;\">带我去多无群大青蛙单位群单位</div>",
|
|
|
- "classify_id": 0,
|
|
|
- "classify_name": "",
|
|
|
- "report_detail_show_type": 0,
|
|
|
- "rai_report_id": 0
|
|
|
- },
|
|
|
- {
|
|
|
- "report_id": 9716,
|
|
|
- "report_chapter_id": 0,
|
|
|
- "classify_id_first": 749,
|
|
|
- "classify_name_first": "自由报告",
|
|
|
- "classify_id_second": 0,
|
|
|
- "classify_name_second": "",
|
|
|
- "report_chapter_type_id": 0,
|
|
|
- "publish_time": "2025-05-19T16:21:51+08:00",
|
|
|
- "title": "智能布局pdf生成",
|
|
|
- "content_sub": "<div style=\"-webkit-line-clamp: 3;-webkit-box-orient: vertical;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;\">给他人工我跟热范围废物费恶无非王菲菲</div>",
|
|
|
- "classify_id": 0,
|
|
|
- "classify_name": "",
|
|
|
- "report_detail_show_type": 0,
|
|
|
- "rai_report_id": 0
|
|
|
- },
|
|
|
- {
|
|
|
- "report_id": 9714,
|
|
|
- "report_chapter_id": 0,
|
|
|
- "classify_id_first": 749,
|
|
|
- "classify_name_first": "自由报告",
|
|
|
- "classify_id_second": 0,
|
|
|
- "classify_name_second": "",
|
|
|
- "report_chapter_type_id": 0,
|
|
|
- "publish_time": "2025-05-19T14:29:44+08:00",
|
|
|
- "title": "测试报告常规布局",
|
|
|
- "content_sub": "<div style=\"-webkit-line-clamp: 3;-webkit-box-orient: vertical;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;\">带我去多无群大青蛙单位群单位</div>",
|
|
|
- "classify_id": 0,
|
|
|
- "classify_name": "",
|
|
|
- "report_detail_show_type": 0,
|
|
|
- "rai_report_id": 0
|
|
|
- }
|
|
|
- ],
|
|
|
- showAll: false,
|
|
|
+ list: [],
|
|
|
+ showAll: reportStore.showAllReport||false,
|
|
|
page: 1,
|
|
|
pageSize: 20,
|
|
|
finished: true,
|
|
|
loading: false,
|
|
|
- dateArr: [],//日期数据
|
|
|
+ searchText: ''
|
|
|
})
|
|
|
|
|
|
+async function getList() {
|
|
|
+ listState.loading=true
|
|
|
+ const res = await apiEtaReport.reportList({
|
|
|
+ PageSize: listState.pageSize,
|
|
|
+ CurrentIndex: listState.page,
|
|
|
+ ShowAll: listState.showAll,
|
|
|
+ IsToday: false,
|
|
|
+ PermissionId: Number(selectSubType.value)
|
|
|
+ })
|
|
|
+
|
|
|
+ listState.loading=false
|
|
|
+ if(listState.page===1){
|
|
|
+ document.body.scrollTop=document.documentElement.scrollTop=0
|
|
|
+ }
|
|
|
+
|
|
|
+ if(res.Ret !== 200) return
|
|
|
+
|
|
|
+ if(res.Data.Paging.IsEnd){
|
|
|
+ listState.finished=true
|
|
|
+ }
|
|
|
+ let arr=res.Data.List||[];
|
|
|
+ listState.list=[...listState.list,...arr];
|
|
|
+}
|
|
|
+function onLoad() {
|
|
|
+ listState.page++
|
|
|
+ getList()
|
|
|
+}
|
|
|
+function initList() {
|
|
|
+ listState.page = 1;
|
|
|
+ getList()
|
|
|
+}
|
|
|
+
|
|
|
// 格式化列表日期
|
|
|
const formatDate=(e)=>{
|
|
|
const isSameYear=moment(e).isSame(new Date(), 'year');
|
|
@@ -160,113 +68,55 @@ const formatDate=(e)=>{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-const latestNewsList = ref([
|
|
|
- { img: '',title:'带我去带我去多带我去带我去多' },
|
|
|
- { img: '',title:'带我去带我去多带我去带我去多' },
|
|
|
- { img: '',title:'带我去带我去多带我去带我去多' },
|
|
|
- { img: '',title:'带我去带我去多带我去带我去多',abstract: '带我去多无群单位娶老婆德莱文【的利物浦【 单 ' },
|
|
|
- { img: '',title:'带我去带我去多带我去带我去多' },
|
|
|
- { img: '',title:'带我去带我去多带我去带我去多' },
|
|
|
- { img: '',title:'带我去带我去多带我去带我去多' },
|
|
|
-])
|
|
|
-
|
|
|
|
|
|
|
|
|
const selectFirstType = ref('')
|
|
|
const selectSubType = ref('')
|
|
|
-const firstClassifyList = ref([
|
|
|
- { classify_name: '宏观经济',icon_url:'',id: 0 },
|
|
|
- { classify_name: '宏观经济2',icon_url:'',id: 1 },
|
|
|
- { classify_name: '宏观经济3',icon_url:'',id: 2 },
|
|
|
- { classify_name: '宏观经济4',icon_url:'',id: 3 },
|
|
|
- { classify_name: '宏观经济6',icon_url:'',id: 4 },
|
|
|
-])
|
|
|
-const subClassifyList = ref([
|
|
|
- {
|
|
|
- "chart_permission_name": "宏观经济",
|
|
|
- "chart_permission_id": 1,
|
|
|
- "sort": -999,
|
|
|
- "auth_ok": true,
|
|
|
- "pirce_driven_state": 0
|
|
|
- },
|
|
|
- {
|
|
|
- "chart_permission_name": "利率债",
|
|
|
- "chart_permission_id": 16,
|
|
|
- "sort": -997,
|
|
|
- "auth_ok": true,
|
|
|
- "pirce_driven_state": 0
|
|
|
- },
|
|
|
- {
|
|
|
- "chart_permission_name": "资产配置",
|
|
|
- "chart_permission_id": 45,
|
|
|
- "sort": -997,
|
|
|
- "auth_ok": true,
|
|
|
- "pirce_driven_state": 1
|
|
|
- },
|
|
|
- {
|
|
|
- "chart_permission_name": "汇率",
|
|
|
- "chart_permission_id": 46,
|
|
|
- "sort": -994,
|
|
|
- "auth_ok": true,
|
|
|
- "pirce_driven_state": 1
|
|
|
- },
|
|
|
- {
|
|
|
- "chart_permission_name": "贵金属",
|
|
|
- "chart_permission_id": 47,
|
|
|
- "sort": -994,
|
|
|
- "auth_ok": true,
|
|
|
- "pirce_driven_state": 1
|
|
|
- },
|
|
|
- {
|
|
|
- "chart_permission_name": "名字超长名字超长名字超长名字超长名字超长名字超长名字超长名字超长名字超长",
|
|
|
- "chart_permission_id": 108,
|
|
|
- "sort": 2,
|
|
|
- "auth_ok": false,
|
|
|
- "pirce_driven_state": 1
|
|
|
- },
|
|
|
- {
|
|
|
- "chart_permission_name": "股票交易权限",
|
|
|
- "chart_permission_id": 76,
|
|
|
- "sort": 23,
|
|
|
- "auth_ok": false,
|
|
|
- "pirce_driven_state": 1
|
|
|
- },
|
|
|
- {
|
|
|
- "chart_permission_name": "jinyon",
|
|
|
- "chart_permission_id": 107,
|
|
|
- "sort": 63,
|
|
|
- "auth_ok": false,
|
|
|
- "pirce_driven_state": 1
|
|
|
- }
|
|
|
-])
|
|
|
+const firstClassifyList = ref([])
|
|
|
+const subClassifyList = ref([])
|
|
|
+async function getPermissionList() {
|
|
|
+ const res = await apiEtaReport.permissionList()
|
|
|
+ if(res.Ret !== 200) return
|
|
|
+ firstClassifyList.value = res.Data || [];
|
|
|
+
|
|
|
+ let item = route.query.permissionId
|
|
|
+ ? firstClassifyList.value.find(_ => _.PermissionId===Number(route.query.permissionId))
|
|
|
+ : firstClassifyList.value[0];
|
|
|
+ handleClickFirstType(item)
|
|
|
+}
|
|
|
+getPermissionList()
|
|
|
+
|
|
|
function handleClickFirstType(item) {
|
|
|
- selectFirstType.value = item.classify_name
|
|
|
- // subTypeList.value = item.list;
|
|
|
+ selectFirstType.value = item.PermissionName;
|
|
|
+ subClassifyList.value = item.Child;
|
|
|
|
|
|
- // handleClickSubType(item.list[0])
|
|
|
- // nextTick(() => {
|
|
|
- // resetHeaderWidthHandle();
|
|
|
- // });
|
|
|
+ handleClickSubType(subClassifyList.value[0])
|
|
|
+ nextTick(() => {
|
|
|
+ resetHeaderWidthHandle();
|
|
|
+ });
|
|
|
}
|
|
|
function handleClickSubType(item) {
|
|
|
- selectSubType.value = item.chart_permission_id
|
|
|
+ selectSubType.value = item.PermissionId
|
|
|
listState.list = []
|
|
|
listState.page = 1
|
|
|
listState.finished = false
|
|
|
- getReportList()
|
|
|
- handleShowAuthData(item)
|
|
|
- getLatestNews()
|
|
|
+ getList()
|
|
|
}
|
|
|
|
|
|
|
|
|
+const latestNewsList = ref([])
|
|
|
+async function getReCommandList() {
|
|
|
+ const res = await apiEtaReport.recommandList();
|
|
|
+ if(res.Ret !== 200) return
|
|
|
+ latestNewsList.value = res.Data||[];
|
|
|
+}
|
|
|
+getReCommandList()
|
|
|
+
|
|
|
|
|
|
function handleToIndex() {
|
|
|
router.replace('/etaReport/index')
|
|
|
}
|
|
|
|
|
|
-function handleToDetail() {
|
|
|
- router.push(`/etaReport/detail?id=`)
|
|
|
-}
|
|
|
|
|
|
// 实现头部的适配
|
|
|
const contentRef=ref('')
|
|
@@ -297,7 +147,7 @@ onUnmounted(() => {
|
|
|
<div class="flex">
|
|
|
<h2 @click="handleToIndex">今日研报</h2>
|
|
|
<div class="flex" style="flex-shrink:0">
|
|
|
- <t-radio allow-uncheck v-model="listState.showAll">显示全部 </t-radio>
|
|
|
+ <t-radio allow-uncheck v-model="listState.showAll" @change="reportStore.changeShowAll(listState.showAll);initList()">显示全部 </t-radio>
|
|
|
<t-tooltip
|
|
|
content="未勾选时展示所有客户有阅读权限的报告,勾选时展示弘则ETA所有已发布的报告"
|
|
|
>
|
|
@@ -307,19 +157,22 @@ onUnmounted(() => {
|
|
|
|
|
|
<div class="first-tab flex">
|
|
|
<div
|
|
|
- :class="['item', item.classify_name == selectFirstType && 'item-active']"
|
|
|
+ :class="['item', item.PermissionName == selectFirstType && 'item-active']"
|
|
|
v-for="item in firstClassifyList"
|
|
|
- :key="item.classify_name"
|
|
|
+ :key="item.PermissionName"
|
|
|
@click="handleClickFirstType(item)"
|
|
|
- >{{ item.classify_name }}</div>
|
|
|
+ >{{ item.PermissionName }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<t-input
|
|
|
- v-model="searchText"
|
|
|
+ v-model="listState.searchText"
|
|
|
placeholder="请输入搜索内容"
|
|
|
clearable
|
|
|
+ size="large"
|
|
|
style="width:240px"
|
|
|
+ readonly
|
|
|
+ @click="router.push({path:'/etaReport/search'})"
|
|
|
>
|
|
|
<template #prefixIcon>
|
|
|
<SearchIcon />
|
|
@@ -330,11 +183,11 @@ onUnmounted(() => {
|
|
|
|
|
|
<div class="sub-tab">
|
|
|
<span
|
|
|
- :class="['sub-item', item.chart_permission_id === selectSubType && 'sub-active']"
|
|
|
+ :class="['sub-item', item.PermissionId === selectSubType && 'sub-active']"
|
|
|
v-for="item in subClassifyList"
|
|
|
- :key="item.chart_permission_id"
|
|
|
+ :key="item.PermissionId"
|
|
|
@click="handleClickSubType(item)"
|
|
|
- >{{ item.chart_permission_name }}</span>
|
|
|
+ >{{ item.PermissionName }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
@@ -349,22 +202,28 @@ onUnmounted(() => {
|
|
|
@listOnload="onLoad"
|
|
|
>
|
|
|
<div class="report-list-wrap" v-if="listState.list.length" :style="{'margin-top':`${headerHight}px`}">
|
|
|
- <div class="content-item" v-for="item in listState.list" :key="item.date" @click="handleGoReportDetail">
|
|
|
+ <div
|
|
|
+ class="content-item"
|
|
|
+ :class="!item.HasAuth?'noAuth':''"
|
|
|
+ v-for="item in listState.list"
|
|
|
+ :key="`${item.ReportId}_${item.ReportChapterId}`"
|
|
|
+ @click="handleToDetail(item)"
|
|
|
+ >
|
|
|
<div class="report-item-info">
|
|
|
- <img src="" class="report-img">
|
|
|
+ <img :src="item.ClassifyCoverImg" class="report-img">
|
|
|
<div class="right-info">
|
|
|
<div class="c-stage flex">
|
|
|
<div>
|
|
|
- <t-tag theme="primary">能源化工</t-tag>
|
|
|
- {{ '第五期' }}
|
|
|
- | {{ item.classify_name_first }}
|
|
|
+ <t-tag theme="primary" v-if="item.PermissionNames">{{item.PermissionNames[0]}}</t-tag>
|
|
|
+ {{ `第${item.Stage}期` }}
|
|
|
+ | {{ item.ClassifyName }}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
- <div class="c-time">{{ moment(item.publish_time).format('YYYY-MM-DD') }}</div>
|
|
|
+ <div class="c-time">{{ item.PublishTime }}</div>
|
|
|
</div>
|
|
|
- <div class="c-title">{{ item.title }}</div>
|
|
|
- <div class="desc" v-html="item.content_sub"></div>
|
|
|
+ <div class="c-title text-ellipsis--l1">{{ item.Title }}</div>
|
|
|
+ <div class="desc text-ellipsis--l1" v-html="item.Abstract"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -380,14 +239,14 @@ onUnmounted(() => {
|
|
|
<div
|
|
|
class="recmd-item"
|
|
|
v-for="(item,index) in latestNewsList"
|
|
|
- :key="item.report_id"
|
|
|
+ :key="item.ReportId"
|
|
|
@click="handleToDetail(item)"
|
|
|
>
|
|
|
<div class="title text-ellipsis--l1">
|
|
|
<span class="sort-num" :class="index>2?'grey':'notice'">{{index+1}}</span>
|
|
|
- {{item.title}}
|
|
|
+ {{item.Title}}
|
|
|
</div>
|
|
|
- <div class="abstract text-ellipsis--l1" v-html="item.abstract" v-if="item.abstract"></div>
|
|
|
+ <div class="abstract text-ellipsis--l1" v-html="item.abstract" v-if="item.Abstract"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
@@ -482,7 +341,7 @@ onUnmounted(() => {
|
|
|
}
|
|
|
}
|
|
|
.report-main {
|
|
|
-
|
|
|
+ .content-box { overflow: hidden; }
|
|
|
.report-list-wrap {
|
|
|
margin-top: 130px;
|
|
|
|
|
@@ -490,9 +349,15 @@ onUnmounted(() => {
|
|
|
padding: 20px 0;
|
|
|
border-bottom: 1px solid #DCDFE6;
|
|
|
position: relative;
|
|
|
-
|
|
|
+ &.noAuth {
|
|
|
+ color: #C0C4CC;
|
|
|
+ .c-time,.desc {
|
|
|
+ color: #C0C4CC;
|
|
|
+ }
|
|
|
+ }
|
|
|
.right-info{
|
|
|
flex: 1;
|
|
|
+ overflow: hidden;
|
|
|
}
|
|
|
|
|
|
.report-item-info {
|