feat: 新增海外资讯页面及相关接口,优化用户体验
This commit is contained in:
parent
38d425cfab
commit
c7ebc4d5a3
|
|
@ -0,0 +1,33 @@
|
|||
import request from '/@/utils/requestCankao';
|
||||
|
||||
// 登录
|
||||
export const login = (data: any) => {
|
||||
return request({
|
||||
url: '/common/tenantLogin',
|
||||
method: 'post',
|
||||
data,
|
||||
});
|
||||
};
|
||||
|
||||
// 编辑精选接口
|
||||
export const editTopNews = (data: any) => {
|
||||
return request({
|
||||
url: '/news/list/published',
|
||||
method: 'post',
|
||||
data,
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取文章详情
|
||||
* @param data
|
||||
* @id * 文章id number
|
||||
* @returns
|
||||
*/
|
||||
export const fetchArticleDetail = (data: any) => {
|
||||
return request({
|
||||
url: `/news/detail/${data.id}`,
|
||||
method: 'get',
|
||||
data,
|
||||
});
|
||||
};
|
||||
|
|
@ -87,7 +87,68 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
|
|||
// icon: 'iconfont icon-shouye',
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
path: '/realtimeInfo',
|
||||
name: 'realtimeInfo',
|
||||
component: () => import('/@/views/pages/cankao/index.vue'),
|
||||
meta: {
|
||||
title: '海外资讯',
|
||||
isLink: '',
|
||||
isHide: true,
|
||||
isKeepAlive: true,
|
||||
isAffix: false,
|
||||
isIframe: false,
|
||||
roles: [
|
||||
'admin',
|
||||
'common',
|
||||
'subCommon',
|
||||
'subCenter',
|
||||
'Director',
|
||||
'CSRC',
|
||||
'QJJG',
|
||||
'DFJG',
|
||||
'JYS',
|
||||
'QJJGC',
|
||||
'DFJGC',
|
||||
'JYSC',
|
||||
'operate',
|
||||
'Bank',
|
||||
'SubBank',
|
||||
],
|
||||
// icon: 'iconfont icon-shouye',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/indexPC',
|
||||
name: 'indexPC',
|
||||
component: () => import('/@/views/pages/cankao/indexPC.vue'),
|
||||
meta: {
|
||||
title: '海外资讯',
|
||||
isLink: '',
|
||||
isHide: true,
|
||||
isKeepAlive: false,
|
||||
isAffix: false,
|
||||
isIframe: false,
|
||||
roles: [
|
||||
'admin',
|
||||
'common',
|
||||
'subCommon',
|
||||
'subCenter',
|
||||
'Director',
|
||||
'CSRC',
|
||||
'QJJG',
|
||||
'DFJG',
|
||||
'JYS',
|
||||
'QJJGC',
|
||||
'DFJGC',
|
||||
'JYSC',
|
||||
'operate',
|
||||
'Bank',
|
||||
'SubBank',
|
||||
],
|
||||
// icon: 'iconfont icon-shouye',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/caixun',
|
||||
name: 'caixun',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,90 @@
|
|||
import axios, { AxiosInstance } from 'axios';
|
||||
import { ElMessage, ElMessageBox } from 'element-plus';
|
||||
import { Session } from '/@/utils/storage';
|
||||
import qs from 'qs';
|
||||
import Cookies from 'js-cookie';
|
||||
|
||||
// 配置新建一个 axios 实例
|
||||
const service: AxiosInstance = axios.create({
|
||||
baseURL: import.meta.env.VITE_API_CANKAO,
|
||||
timeout: 50000,
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
paramsSerializer: {
|
||||
serialize(params) {
|
||||
return qs.stringify(params, { allowDots: true });
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// 添加请求拦截器
|
||||
service.interceptors.request.use(
|
||||
(config) => {
|
||||
config.headers!['auth-token'] = window.token;
|
||||
// config.headers!['auth-token'] = `${Cookies.get('token')}`;
|
||||
// config.headers!['auth-token'] = `${Session.get('token')}`;
|
||||
if (window.phone) {
|
||||
config.headers!['phone'] = window.phone;
|
||||
} else {
|
||||
config.headers!['phone'] = window.username;
|
||||
}
|
||||
// 在发送请求之前做些什么 token
|
||||
// if (Session.get('token')) {
|
||||
// config.headers!['auth-token'] = window.token;
|
||||
// // config.headers!['auth-token'] = `${Cookies.get('token')}`;
|
||||
// // config.headers!['auth-token'] = `${Session.get('token')}`;
|
||||
// config.headers!['phone'] = window.phone;
|
||||
// }
|
||||
return config;
|
||||
},
|
||||
(error) => {
|
||||
// 对请求错误做些什么
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
// 添加响应拦截器
|
||||
service.interceptors.response.use(
|
||||
(response) => {
|
||||
// 对响应数据做点什么
|
||||
const res = response.data;
|
||||
if (res.code && res.code !== 200) {
|
||||
// `token` 过期或者账号已在别处登录
|
||||
// if (res.code === 401 || res.code === 402 || res.code === 4001) {
|
||||
// Session.clear(); // 清除浏览器全部临时缓存
|
||||
// window.location.href = '/'; // 去登录页
|
||||
// ElMessageBox.alert('登录已过期,请重新登录', '提示', {})
|
||||
// .then(() => {})
|
||||
// .catch(() => {});
|
||||
// } else {
|
||||
// ElMessage.error(res.msg);
|
||||
// }
|
||||
return Promise.reject(service.interceptors.response);
|
||||
} else {
|
||||
return res;
|
||||
}
|
||||
},
|
||||
(error) => {
|
||||
console.log('🚀 ~ error:', error);
|
||||
// 对响应错误做点什么
|
||||
if (error.message.indexOf('timeout') != -1) {
|
||||
ElMessage.error('网络超时');
|
||||
} else if (error.message == 'Network Error') {
|
||||
ElMessage.error('网络连接错误');
|
||||
} else if (error.message.indexOf('token') != -1) {
|
||||
Session.clear(); // 清除浏览器全部临时缓存
|
||||
window.location.href = '/'; // 去登录页
|
||||
} else {
|
||||
if (error.response.data) {
|
||||
ElMessage.error(error.response.statusText);
|
||||
} else {
|
||||
Session.clear(); // 清除浏览器全部临时缓存
|
||||
window.location.href = '/'; // 去登录页
|
||||
ElMessage.error('接口路径找不到');
|
||||
}
|
||||
}
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
// 导出 axios 实例
|
||||
export default service;
|
||||
|
|
@ -0,0 +1,405 @@
|
|||
<template>
|
||||
<div class="pc_all">
|
||||
<div class="content">
|
||||
<div class="mb24">
|
||||
<el-breadcrumb separator="/" class="font16">
|
||||
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
|
||||
<el-breadcrumb-item>海外资讯</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<div class="top_title">
|
||||
<text class="pageTitle">编辑<text class="strong">精选</text></text>
|
||||
|
||||
<div class="r_input">
|
||||
<input
|
||||
v-model="form.keyword"
|
||||
placeholder="请输入搜索内容"
|
||||
class="input"
|
||||
@keyup.enter="getNewsList"
|
||||
@clear="getNewsList"
|
||||
@blur="getNewsList"
|
||||
/>
|
||||
<div class="input_button" @click="getNewsList">搜索</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="line"></div>
|
||||
|
||||
<div class="r_list">
|
||||
<div class="list_item" v-for="(item, index) in newsList" :key="index">
|
||||
<div class="list_item_content">
|
||||
<text class="item_title" @click="goDetail(item)" v-html="item.title"></text>
|
||||
<text class="item_summary" v-html="item.summary"></text>
|
||||
|
||||
<div class="item_bottom">
|
||||
<div>
|
||||
<text class="time">中国证券报</text>
|
||||
<text class="time" style="margin-left: 15px">{{ formatTime(item.time) }}</text>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pagination" style="width: 100%; display: flex; justify-content: flex-end" v-if="newsList && newsList.length > 0">
|
||||
<el-pagination
|
||||
popper-class="popper-style"
|
||||
background
|
||||
v-model:current-page="currentPage"
|
||||
:page-size="form.size"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="form.total"
|
||||
@current-change="currentChange"
|
||||
@size-change="sizeChange"
|
||||
>
|
||||
</el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, onUnmounted, reactive } from 'vue';
|
||||
import { editTopNews } from '/@/api/cankao';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
|
||||
const pageSizes = ref([10, 20, 30, 40]);
|
||||
const form = reactive({
|
||||
keyword: '',
|
||||
page: 1,
|
||||
size: 10,
|
||||
total: 10,
|
||||
});
|
||||
const currentPage = ref(form.page);
|
||||
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
|
||||
const pageType = ref(4);
|
||||
const newsList = ref([]);
|
||||
|
||||
function formatTime(timestamp) {
|
||||
const date = new Date(Number(timestamp).toString().length === 10 ? timestamp * 1000 : timestamp);
|
||||
return (
|
||||
[date.getFullYear(), (date.getMonth() + 1).toString().padStart(2, '0'), date.getDate().toString().padStart(2, '0')].join('-') +
|
||||
' ' +
|
||||
[date.getHours().toString().padStart(2, '0'), date.getMinutes().toString().padStart(2, '0'), date.getSeconds().toString().padStart(2, '0')].join(
|
||||
':'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
async function getNewsList() {
|
||||
// 编辑精选
|
||||
let { code, data } = await editTopNews({
|
||||
...form,
|
||||
});
|
||||
if (code == 200) {
|
||||
newsList.value = data.list;
|
||||
form.total = data.total;
|
||||
data.list.forEach((item) => {
|
||||
item._title_ = item.title;
|
||||
item.summary = item.summary.replace(form.keyword, "<span style='color: #007aff'>" + form.keyword + '</span>');
|
||||
item.title = item.title.replace(form.keyword, "<span style='color: #007aff'>" + form.keyword + '</span>');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function goDetail(item) {
|
||||
let id = null;
|
||||
if (pageType.value != 4) {
|
||||
id = item.news_id;
|
||||
} else {
|
||||
id = item.id;
|
||||
}
|
||||
|
||||
router.push({
|
||||
path: '/indexPC',
|
||||
query: {
|
||||
id: id,
|
||||
type: pageType.value,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function currentChange(page) {
|
||||
form.page = page;
|
||||
getNewsList();
|
||||
}
|
||||
|
||||
function sizeChange(size) {
|
||||
form.page = 1;
|
||||
currentPage.value = 1;
|
||||
form.size = size;
|
||||
getNewsList();
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getNewsList();
|
||||
});
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.pc_all {
|
||||
background: #f5f7fd;
|
||||
width: 100vw;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
// align-items: center;
|
||||
}
|
||||
|
||||
.content {
|
||||
background-color: white;
|
||||
// width: 55vw;
|
||||
width: 100vw;
|
||||
min-height: 100vh;
|
||||
padding: 24px 32px;
|
||||
}
|
||||
|
||||
.top_title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.pageTitle {
|
||||
font-family: AlibabaPuHuiTiM;
|
||||
font-size: 26px;
|
||||
color: #1a1a1a;
|
||||
font-weight: bold;
|
||||
|
||||
.strong {
|
||||
color: #007aff;
|
||||
}
|
||||
}
|
||||
|
||||
.title_icon {
|
||||
width: 90px;
|
||||
height: 25px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.line {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
background-color: #f0f0f0;
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
.r_list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.list_item {
|
||||
display: flex;
|
||||
min-height: 100px;
|
||||
padding: 15px 0;
|
||||
border-bottom: 1px solid #f6f6f6;
|
||||
margin-top: 15px;
|
||||
|
||||
.r_list_item_num {
|
||||
width: 50px;
|
||||
|
||||
display: flex;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.list_item_num {
|
||||
margin-top: 5px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
|
||||
display: flex;
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 500;
|
||||
font-size: 18px;
|
||||
color: #ffffff;
|
||||
padding-bottom: 2.5px;
|
||||
}
|
||||
|
||||
.num1 {
|
||||
background: linear-gradient(168deg, #ffb505 0%, #fdcf1b 100%);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.num2 {
|
||||
background: linear-gradient(169deg, #a9c3e3 0%, #92b2e0 100%);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.num3 {
|
||||
background: linear-gradient(169deg, #f2996e 0%, #f77741 100%);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.nol_num {
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 500;
|
||||
font-size: 20px;
|
||||
color: #93a2b3;
|
||||
line-height: 28px;
|
||||
text-align: left;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.list_item_content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.item_title:hover {
|
||||
color: #007aff;
|
||||
}
|
||||
|
||||
.item_title {
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
color: #1a1a1a;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.item_summary {
|
||||
font-family: 'Microsoft YaHei', 'PingFangSC', 'PingFang SC';
|
||||
font-weight: normal;
|
||||
font-size: 16px;
|
||||
color: #333333;
|
||||
margin-top: 10px;
|
||||
|
||||
/* 必须:限制内容不溢出容器 */
|
||||
overflow: hidden;
|
||||
/* 必须:超出部分显示省略号 */
|
||||
text-overflow: ellipsis;
|
||||
/* 必须:将元素设置为webkit弹性盒模型(用于控制行数) */
|
||||
display: -webkit-box;
|
||||
/* 关键:限制显示的行数(这里设为2行) */
|
||||
-webkit-line-clamp: 2;
|
||||
/* 必须:设置弹性盒的排列方向为垂直(让文本换行) */
|
||||
-webkit-box-orient: vertical;
|
||||
|
||||
/* 可选:调整行高和容器高度,确保刚好容纳2行文本 */
|
||||
line-height: 1.5;
|
||||
/* 行高 */
|
||||
max-height: 3em;
|
||||
/* 2行总高度 = 行高 × 2(1.5×2=3) */
|
||||
}
|
||||
}
|
||||
|
||||
.item_bottom {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 15px;
|
||||
margin-bottom: 5px;
|
||||
|
||||
.time {
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #919191;
|
||||
line-height: 20px;
|
||||
text-align: left;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.score {
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 600;
|
||||
font-size: 18px;
|
||||
color: #ffa800;
|
||||
line-height: 25px;
|
||||
text-align: right;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
||||
.search_btn {
|
||||
border: none;
|
||||
display: flex;
|
||||
width: 56px;
|
||||
height: 44px;
|
||||
padding: 8px 15px;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
flex-shrink: 0;
|
||||
border-radius: 8px;
|
||||
background: #007aff;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.input {
|
||||
border: none;
|
||||
flex: 1;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.input_button {
|
||||
display: flex;
|
||||
width: 140px;
|
||||
height: 100%;
|
||||
// padding: 8px 15px;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
flex-shrink: 0;
|
||||
border-radius: 0 10px 10px 0;
|
||||
background: #007aff;
|
||||
|
||||
color: white;
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
color: #ffffff;
|
||||
line-height: 25px;
|
||||
text-align: left;
|
||||
font-style: normal;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.r_input {
|
||||
background-color: white;
|
||||
border-radius: 10px;
|
||||
border: 1px solid #e3e3e3;
|
||||
flex: 1;
|
||||
height: 52px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-left: 30px;
|
||||
margin-top: 3px;
|
||||
|
||||
:deep(.input::placeholder) {
|
||||
color: #ccc;
|
||||
font-family: 'PingFang SC';
|
||||
font-size: 16px;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
:deep(.el-input__wrapper) {
|
||||
box-shadow: 0 0 0 #fff;
|
||||
}
|
||||
}
|
||||
.pagination {
|
||||
margin-top: 24px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
// :deep(.el-pager li){
|
||||
// border: 1px solid #ccc;
|
||||
// background: transparent;
|
||||
// }
|
||||
}
|
||||
|
||||
:deep(.el-select-dropdown__item.is-selected) {
|
||||
color: #007aff;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,301 @@
|
|||
<template>
|
||||
<div class="pc_all">
|
||||
<!-- <PageTop></PageTop> -->
|
||||
|
||||
<div class="content">
|
||||
<!-- <div class="top" @click="goBack">
|
||||
<el-icon><ArrowLeft /></el-icon>
|
||||
<text>返回列表</text>
|
||||
</div>
|
||||
<div class="line"></div> -->
|
||||
|
||||
<div class="mb30">
|
||||
<el-breadcrumb separator="/" class="font16">
|
||||
<el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
|
||||
<el-breadcrumb-item :to="{ path: '/realtimeInfo' }">海外资讯</el-breadcrumb-item>
|
||||
<el-breadcrumb-item>{{ infoData?.title }}</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<div class="title">
|
||||
{{ infoData?.title }}
|
||||
</div>
|
||||
|
||||
<div class="sub_title">
|
||||
<text class="srouse"> {{ infoData?.tag }}</text>
|
||||
<text class="time"> {{ infoData?.publishTime }}</text>
|
||||
</div>
|
||||
|
||||
<div class="abstract" v-if="infoData?.summary">
|
||||
{{ infoData?.summary }}
|
||||
</div>
|
||||
|
||||
<!-- 两个标签 start -->
|
||||
<div class="r_tag_two">
|
||||
<div style="display: flex" v-if="infoData?.industryLabels && infoData?.industryLabels.length > 0">
|
||||
<text class="tag_title">行业分类:</text>
|
||||
<div class="r_tags">
|
||||
<div class="tag" style="background-color: #fff9ec; color: #ffb100" v-for="(item, index) in infoData?.industryLabels" :key="index">
|
||||
{{ item }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="display: flex" v-if="infoData?.conceptLabels && infoData?.conceptLabels.length > 0">
|
||||
<text class="tag_title">概念标签:</text>
|
||||
<div class="r_tags">
|
||||
<div class="tag" style="background-color: #f5f8fe; color: #007aff" v-for="(item, index) in infoData?.conceptLabels" :key="index">
|
||||
{{ item }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 两个标签 end -->
|
||||
|
||||
<div class="text" v-html="infoData.content" style="white-space: pre-wrap"></div>
|
||||
<!-- <div class="text">
|
||||
<text >{{ infoData.content }}</text>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onMounted, ref } from 'vue';
|
||||
import { fetchArticleDetail } from '/@/api/cankao';
|
||||
import { Session } from '/@/utils/storage';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { ArrowLeft } from '@element-plus/icons-vue';
|
||||
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
|
||||
function goBack() {
|
||||
// uni.navigateBack();
|
||||
|
||||
// router.back();
|
||||
router.push({
|
||||
path: '/realtimeInfo',
|
||||
});
|
||||
// uni.navigateTo({
|
||||
// url: '/pages/realtimeInfo/pc/index?type=' + type.value,
|
||||
// });
|
||||
}
|
||||
|
||||
const type = ref(0);
|
||||
const infoData = ref({});
|
||||
onMounted(async () => {
|
||||
console.log('🚀 ~ router:', route.query.type);
|
||||
if (route.query.type) {
|
||||
type.value = route.query.type;
|
||||
}
|
||||
|
||||
// uni.showLoading();
|
||||
const res = await fetchArticleDetail({
|
||||
id: route.query?.id,
|
||||
});
|
||||
console.log('🚀 ~ res:', res);
|
||||
// uni.hideLoading();
|
||||
if (res.code === 200) {
|
||||
infoData.value = res.data;
|
||||
window.document.title = res.data.title;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.pc_all {
|
||||
background: #f5f7fd;
|
||||
width: 100vw;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.content {
|
||||
background-color: white;
|
||||
width: 100%;
|
||||
// min-width: 1200px;
|
||||
min-height: 100vh;
|
||||
padding: 24px 32px;
|
||||
background-color: #fff;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.page_top {
|
||||
width: 100vw;
|
||||
height: 60px;
|
||||
background-color: white;
|
||||
margin-bottom: 15px;
|
||||
box-shadow: 0 2.5px 1px rgba($color: #6d6d6d, $alpha: 0.1);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
.logo {
|
||||
width: 95px;
|
||||
height: 25px;
|
||||
margin-right: 25px;
|
||||
}
|
||||
|
||||
.r_menu {
|
||||
width: 55vw;
|
||||
min-width: 1250px;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.r_menu_item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.menu_item {
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: bold;
|
||||
font-size: 16px;
|
||||
color: #1a1a1a;
|
||||
}
|
||||
|
||||
.line {
|
||||
width: 64px;
|
||||
height: 4px;
|
||||
background: #007aff;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.top {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
// padding-left: 15px;
|
||||
|
||||
.icon_back {
|
||||
width: 17px;
|
||||
height: 19px;
|
||||
}
|
||||
|
||||
text {
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: normal;
|
||||
font-size: 19px;
|
||||
color: #919191;
|
||||
text-align: left;
|
||||
font-style: normal;
|
||||
margin-left: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.line {
|
||||
width: 100%;
|
||||
height: 4px;
|
||||
background: #f0f0f0;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: bold;
|
||||
font-size: 24px;
|
||||
color: #1a1a1a;
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
.sub_title {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 5px;
|
||||
|
||||
.srouse {
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
color: #919191;
|
||||
}
|
||||
|
||||
.time {
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
color: #919191;
|
||||
}
|
||||
}
|
||||
|
||||
.abstract {
|
||||
font-family: 'Microsoft YaHei', 'PingFangSC', 'PingFang SC';
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
color: #666666;
|
||||
line-height: 26px;
|
||||
text-align: left;
|
||||
font-style: normal;
|
||||
|
||||
background: #f5f8fe;
|
||||
border: 1px solid #e3ecfd;
|
||||
|
||||
padding: 15px;
|
||||
border-radius: 10px;
|
||||
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
.r_tag_two {
|
||||
display: flex;
|
||||
margin-top: 20px;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.r_tags {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
|
||||
.tag {
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 13px;
|
||||
color: #ffb100;
|
||||
line-height: 18px;
|
||||
text-align: left;
|
||||
font-style: normal;
|
||||
|
||||
padding: 2.5px 10px;
|
||||
border-radius: 5px;
|
||||
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
.tag_title {
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #999999;
|
||||
line-height: 20px;
|
||||
text-align: left;
|
||||
font-style: normal;
|
||||
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-family: 'Microsoft YaHei', 'PingFangSC', 'PingFang SC';
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
color: #333;
|
||||
line-height: 28px;
|
||||
text-align: left;
|
||||
font-style: normal;
|
||||
margin-top: 35px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -506,11 +506,13 @@ function jumpHaiwaiUrl() {
|
|||
}
|
||||
}
|
||||
|
||||
getCankaoUrl({}).then((res) => {
|
||||
if (res.code == 200) {
|
||||
window.open(res.data);
|
||||
}
|
||||
});
|
||||
// getCankaoUrl({}).then((res) => {
|
||||
// if (res.code == 200) {
|
||||
// window.open(res.data);
|
||||
// }
|
||||
// });
|
||||
|
||||
router.push('/realtimeInfo')
|
||||
}
|
||||
|
||||
const newsList = ref([]);
|
||||
|
|
|
|||
|
|
@ -167,6 +167,8 @@ import icon_4 from '/@/assets/yuqingNew/icon_4.png';
|
|||
import { useRoute } from 'vue-router';
|
||||
import { Session } from '/@/utils/storage';
|
||||
import RankList from './component/RankList.vue'; // 路径根据实际调整
|
||||
import JSON5 from 'json5';
|
||||
import router from '/@/router';
|
||||
|
||||
// 定义需要缩小的分辨率阈值,例如小于1024px时缩小
|
||||
const SCALE_THRESHOLD = 1480;
|
||||
|
|
@ -390,7 +392,6 @@ async function getWangkuangJinduiFn() {
|
|||
jingduiList.value = data;
|
||||
}
|
||||
}
|
||||
import JSON5 from 'json5';
|
||||
// 舆情首页-词云
|
||||
const cloudWordList = ref([]);
|
||||
async function getWangkuangCloudWordFn() {
|
||||
|
|
@ -470,11 +471,13 @@ function jumpHaiwaiUrl() {
|
|||
}
|
||||
}
|
||||
|
||||
getCankaoUrl({}).then((res) => {
|
||||
if (res.code == 200) {
|
||||
window.open(res.data);
|
||||
}
|
||||
});
|
||||
// getCankaoUrl({}).then((res) => {
|
||||
// if (res.code == 200) {
|
||||
// window.open(res.data);
|
||||
// }
|
||||
// });
|
||||
|
||||
router.push('/realtimeInfo')
|
||||
}
|
||||
|
||||
const hadRole = ref(true);
|
||||
|
|
|
|||
Loading…
Reference in New Issue