提交 17770a7d authored 作者: 李智林's avatar 李智林

update

<template> <template>
<div id="app"> <div id="app">
<div class="wrapper"> <div class="pro-wrapper">
<div class="navbar"> <div class="navbar">
<div class="nav-brand"> <div class="nav-brand">
<div class="brand-icon"> <div class="brand-icon">
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<div class="main-container"> <div class="main-container">
<router-view /> <router-view />
</div> </div>
<div class="ai-btn" @click="openAiBox"> <div class="ai-btn" @click="openAiBox">
<div class="icon"> <div class="icon">
<img src="@/assets/icons/ai-icon.png" alt="" /> <img src="@/assets/icons/ai-icon.png" alt="" />
</div> </div>
...@@ -142,8 +142,12 @@ body { ...@@ -142,8 +142,12 @@ body {
<style lang="scss" scoped> <style lang="scss" scoped>
#app { #app {
font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif; font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
width: 100%; }
.pro-wrapper {
width: 100vw;
height: 100vh; height: 100vh;
<<<<<<< HEAD
// overflow-y: hidden; // overflow-y: hidden;
} }
...@@ -202,106 +206,103 @@ body { ...@@ -202,106 +206,103 @@ body {
.text-ch { .text-ch {
height: 37px; height: 37px;
=======
position: relative;
overflow: hidden;
.navbar {
display: flex;
justify-content: center;
align-items: center;
background: #fff;
>>>>>>> c1d8a1e364a6650ee4e3e5b1049b0a673ec53337
color: rgba(10, 18, 30, 1); color: rgba(10, 18, 30, 1);
font-family: Microsoft YaHei; border-bottom: 1px solid #e5e7eb;
font-size: 32px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
font-weight: 700; position: relative;
line-height: 37px; box-sizing: border-box;
} height: 72px;
.nav-brand {
.text-en { display: flex;
color: rgba(10, 18, 30, 1); align-items: center;
font-family: Microsoft YaHei; gap: 12px;
font-size: 10px; position: absolute;
font-weight: 400; left: 160px;
line-height: 13px;
} .brand-icon {
} width: 48px;
height: 48px;
.nav-menu { img {
display: flex; width: 100%;
align-items: center; height: 100%;
gap: 32px; }
} }
.nav-link {
display: flex;
align-items: center;
gap: 6px;
color: #333;
text-decoration: none;
padding: 8px 12px;
border-radius: 6px;
transition: all 0.3s;
font-size: 14px;
cursor: pointer;
}
.nav-link:hover,
.nav-link.router-link-active {
background-color: #1459bb;
color: #fff;
}
.home-dropdown {
display: inline-block;
}
.dropdown-trigger {
cursor: pointer;
}
.dropdown-arrow {
font-size: 12px;
margin-left: 4px;
transition: transform 0.3s;
}
.home-dropdown:hover .dropdown-arrow { .brand-text {
transform: rotate(180deg); cursor: pointer;
} .text-ch {
height: 37px;
color: rgba(10, 18, 30, 1);
font-family: Microsoft YaHei;
font-size: 32px;
font-weight: 700;
line-height: 37px;
}
.text-en {
color: rgba(10, 18, 30, 1);
font-family: Microsoft YaHei;
font-size: 10px;
font-weight: 400;
line-height: 13px;
}
}
}
.user-info { .user-info {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 20px; gap: 20px;
padding: 8px 12px; padding: 8px 12px;
border-radius: 6px; border-radius: 6px;
color: #333; color: #333;
position: absolute; position: absolute;
right: 160px; right: 160px;
.email {
width: 20px;
height: 20px;
img {
width: 100%;
height: 100%;
}
}
.email { .avator {
width: 20px; width: 32px;
height: 20px; height: 32px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.avator {
width: 32px;
height: 32px;
img { .user {
width: 100%; color: rgba(59, 65, 75, 1);
height: 100%; font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 30px;
}
} }
} }
.main-container {
.user { width: 100%;
color: rgba(59, 65, 75, 1); height: calc(100vh - 72px);
font-family: Microsoft YaHei; position: relative;
font-size: 16px; overflow: hidden;
font-weight: 400;
line-height: 30px;
} }
}
.wrapper {
position: relative;
.ai-btn { .ai-btn {
position: absolute; position: absolute;
bottom: 240px; bottom: 240px;
...@@ -337,5 +338,4 @@ body { ...@@ -337,5 +338,4 @@ body {
z-index: 9999; z-index: 9999;
} }
} }
</style> </style>
...@@ -36,6 +36,18 @@ export function getDecreeOrganization(params) { ...@@ -36,6 +36,18 @@ export function getDecreeOrganization(params) {
}) })
} }
// 发布机构
/**
* @param {id}
*/
export function getDecreeIssueOrganization(params) {
return request({
method: 'GET',
url: `/api/administrativeOrderInfo/issueOrganization/${params.id}`,
params
})
}
// 获取全局信息 // 获取全局信息
/** /**
* @param {id} * @param {id}
......
...@@ -94,6 +94,14 @@ export function getResearchFieldSubjectType(params) { ...@@ -94,6 +94,14 @@ export function getResearchFieldSubjectType(params) {
params params
}) })
} }
// 获取行业领域列表
export function getAreaType() {
return request({
method: 'GET',
url: `/api/commonDict/areaType`,
})
}
/***********详情页 */ /***********详情页 */
//创新主体详情:基本信息 //创新主体详情:基本信息
export function getInfo(params) { export function getInfo(params) {
...@@ -150,6 +158,14 @@ export function getPaperList(params) { ...@@ -150,6 +158,14 @@ export function getPaperList(params) {
}) })
} }
//创新主体科研实力:领域实力分布
export function getStudyFieldList(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/studyFieldList/${params.id}`,
})
}
//创新主体科研实力:经费增长情况 //创新主体科研实力:经费增长情况
export function getFundGrowth(params) { export function getFundGrowth(params) {
return request({ return request({
...@@ -177,3 +193,65 @@ export function getFundToList(params) { ...@@ -177,3 +193,65 @@ export function getFundToList(params) {
}) })
} }
//合作情况:与中国合作数量变化
export function getCooperateNumWithChina(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/cooperateNumWithChina/${params.id}`,
params
})
}
// 合作情况:与中国合作类型变化
export function getCooperateTypeWithChina(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/cooperateTypeWithChina/${params.year}/${params.id}`,
params
})
}
// 合作情况:与中国合作领域变化
export function getCooperateAreaWithChina(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/cooperateAreaWithChina/${params.id}`,
params
})
}
//合作情况:与中国合作经费变化
export function getCooperateFundWithChina(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/cooperateFundWithChina/${params.id}`,
params
})
}
//合作情况:与中国合作事例
export function getCooperateExampleWithChina(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/cooperateExampleWithChina/${params.id}`,
params
})
}
//创新主体其他情况:重点实验室
export function getLabList(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/labList/${params.id}`,
})
}
//创新主体其他情况:政策文件
export function getPolicyList(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/policyList/${params.id}`,
params
})
}
\ No newline at end of file
<template> <template>
<div class="menu-wrapper"> <div class="menu-wrapper">
<div class="menu-item"> <div class="menu-item" @click="handleToOverview">
<div class="menu-item-icon"> <div class="menu-item-icon">
<img src="@/assets/icons/home-header-icon1.png" alt="" /> <img src="@/assets/icons/home-header-icon1.png" alt="" />
</div> </div>
<div class="menu-item-text">{{ "首页" }}</div> <div class="menu-item-text">{{ "首页" }}</div>
</div> </div>
<div class="menu-item"> <div
class="menu-item"
@click="handleToGjOverview"
@mouseenter="handleIsShowCountryMore(true)"
@mouseleave="handleIsShowCountryMore(false)"
>
<div class="menu-item-icon1"> <div class="menu-item-icon1">
<img src="@/assets/icons/home-header-icon2.png" alt="" /> <img src="@/assets/icons/home-header-icon2.png" alt="" />
</div> </div>
...@@ -31,14 +36,138 @@ ...@@ -31,14 +36,138 @@
<div class="menu-item-text">{{ "事件" }}</div> <div class="menu-item-text">{{ "事件" }}</div>
</div> </div>
</div> </div>
<div
class="more-wrapper"
v-if="isShowCountryMore"
@mouseenter="handleIsShowCountryMore(true)"
@mouseleave="handleIsShowCountryMore(false)"
>
<div class="left">
<div class="left-header">
<div class="title">{{ "中美科技博弈概览" }}</div>
<div class="icon">
<img src="@/assets/icons/more.png" alt="" />
</div>
</div>
<div class="left-main">
<div class="item" v-for="(item, index) in leftList" :key="index" @click="handleClickItem(item)">
<div class="icon"></div>
<div class="text">{{ item.name }}</div>
</div>
</div>
</div>
<div class="right">
<div class="right-header">
<div class="title">{{ "风险检测" }}</div>
<div class="icon">
<img src="@/assets/icons/more.png" alt="" />
</div>
</div>
<div class="right-main">
<div class="item" v-for="(item, index) in rightList" :key="index">
<div class="icon"></div>
<div class="text">{{ item.name }}</div>
</div>
</div>
</div>
</div>
</template> </template>
<script setup>
import { ref, onMounted } from "vue";
import router from "@/router";
const isShowCountryMore = ref(false);
const handleIsShowCountryMore = isShow => {
isShowCountryMore.value = isShow;
};
const handleToOverview = () => {
router.push({
path: "/overview"
});
};
const handleToGjOverview = () => {
router.push({
path: "/gjOverview"
});
};
const leftList = ref([
{
name: "科技法案",
path: "/billHome"
},
{
name: "政令",
path: "/decree"
},
{
name: "美国科技智库",
path: "/thinkTank"
},
{
name: "出口管制",
path: "/exportControl"
},
{
name: "投融资限制",
path: "/finance"
},
{
name: "市场准入限制",
path: "/marketAccessRestrictions"
},
{
name: "合作限制",
path: "/cooperationRestrictions"
},
{
name: "规则限制",
path: "/ruleRestrictions"
},
{
name: "美国主要创新主体",
path: "/innovationSubject"
},
{
name: "美国科技人物观点",
path: "/technologyFigures"
},
{
name: "美国科研资助体系",
path: "/scientificFunding"
}
]);
const handleClickItem = item => {
const curRoute = router.resolve({
path: item.path
});
window.open(curRoute.href, "_blank");
};
const rightList = ref([
{
name: "科技战略布局",
path: ""
},
{
name: "创新体系位势分析",
path: ""
}
]);
</script>
<style lang="scss" scoped> <style lang="scss" scoped>
.menu-wrapper { .menu-wrapper {
width: 644px; width: 644px;
height: 64px; height: 64px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.menu-item { .menu-item {
display: flex; display: flex;
gap: 11px; gap: 11px;
...@@ -46,6 +175,10 @@ ...@@ -46,6 +175,10 @@
height: 64px; height: 64px;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
cursor: pointer;
&:hover {
background: var(--color-main-active);
}
.menu-item-icon { .menu-item-icon {
// margin-top: 2px; // margin-top: 2px;
width: 22px; width: 22px;
...@@ -104,4 +237,162 @@ ...@@ -104,4 +237,162 @@
} }
} }
} }
.more-wrapper {
position: absolute;
z-index: 99999;
top: 64px;
left: 0;
width: 100%;
height: 299px;
background: #fff;
display: flex;
.left {
margin-top: 35px;
margin-left: 179px;
width: 769px;
height: 218px;
.left-header {
display: flex;
height: 26px;
align-items: center;
.title {
width: 160px;
height: 26px;
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-style: Bold;
font-size: 20px;
font-weight: 700;
line-height: 26px;
letter-spacing: 0px;
text-align: left;
}
.icon {
margin-top: -8px;
margin-left: 8px;
width: 10px;
height: 10px;
img {
width: 100%;
height: 100%;
}
}
}
.left-main {
height: 192px;
display: flex;
flex-wrap: wrap;
.item {
margin-top: 18px;
display: flex;
width: 256px;
height: 36px;
align-items: center;
cursor: pointer;
&:hover {
background: var(--color-bg-hover);
.icon {
background: var(--color-main-active) !important;
}
.text {
color: var(--color-main-active) !important;
font-weight: 700;
font-size: 20px;
}
}
.icon {
width: 6px;
height: 6px;
border-radius: 3px;
background: rgba(95, 101, 108, 1);
}
.text {
margin-left: 10px;
height: 24px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-style: Regular;
font-size: 18px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
}
}
}
.right {
margin-top: 35px;
margin-left: 53px;
width: 192px;
height: 116px;
.right-header {
display: flex;
height: 26px;
align-items: center;
.title {
width: 80px;
height: 26px;
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-style: Bold;
font-size: 20px;
font-weight: 700;
line-height: 26px;
letter-spacing: 0px;
text-align: left;
}
.icon {
margin-top: -8px;
margin-left: 8px;
width: 10px;
height: 10px;
img {
width: 100%;
height: 100%;
}
}
}
.right-main {
.item {
margin-top: 18px;
display: flex;
width: 256px;
height: 36px;
align-items: center;
cursor: pointer;
&:hover {
background: var(--color-bg-hover);
.icon {
background: var(--color-main-active) !important;
}
.text {
color: var(--color-main-active) !important;
font-weight: 700;
font-size: 20px;
}
}
.icon {
width: 6px;
height: 6px;
border-radius: 3px;
background: rgba(95, 101, 108, 1);
}
.text {
margin-left: 10px;
height: 24px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-style: Regular;
font-size: 18px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
}
}
}
}
</style> </style>
\ No newline at end of file
...@@ -22,12 +22,11 @@ const router = createRouter({ ...@@ -22,12 +22,11 @@ const router = createRouter({
// 路由守卫 - 设置页面标题 // 路由守卫 - 设置页面标题
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
if (to.meta.title) { if (to.meta.title) {
if (to.meta.dynamicTitle) { if (to.meta.dynamicTitle) {
console.log('to', to); console.log('to', to);
document.title = window.sessionStorage.getItem("curTabName") || to.meta.title;
document.title = window.sessionStorage.getItem("billId");
} else { } else {
document.title = to.meta.title document.title = to.meta.title
} }
} }
......
...@@ -9,16 +9,16 @@ const innovationSubjectRoutes = [ ...@@ -9,16 +9,16 @@ const innovationSubjectRoutes = [
name: "InnovationSubject", name: "InnovationSubject",
component: InnovationSubject, component: InnovationSubject,
meta: { meta: {
title: "主要创新主体" title: "M国主要创新主体分析概览"
} }
}, },
{ {
path: "/InnovativeInstitutions/:id", path: "/InnovativeInstitutions/:id",
name: "InnovativeInstitutions", name: "InnovativeInstitutions",
component: InnovationInstitution, component: InnovationInstitution,
meta: { // meta: {
title: "学校详情" // title: "学校详情"
}, // },
} }
] ]
......
...@@ -31,7 +31,8 @@ const billRoutes = [ ...@@ -31,7 +31,8 @@ const billRoutes = [
component: BillLayoutContainer, component: BillLayoutContainer,
redirect: "/billLayout/bill", redirect: "/billLayout/bill",
meta: { meta: {
title: "法案布局" title: "法案详情",
dynamicTitle: true // 标记需要动态设置标题
}, },
children: [ children: [
// 法案分析路由 // 法案分析路由
...@@ -40,10 +41,9 @@ const billRoutes = [ ...@@ -40,10 +41,9 @@ const billRoutes = [
name: "BillLayout", name: "BillLayout",
component: BillLayout, component: BillLayout,
redirect: "/billLayout/bill/introduction", redirect: "/billLayout/bill/introduction",
meta: { // meta: {
title: "法案分析", // title: "法案分析",
dynamicTitle: true // 标记需要动态设置标题 // },
},
children: [ children: [
{ {
path: "introduction", path: "introduction",
......
...@@ -10,7 +10,8 @@ const characterPageRoutes = [ ...@@ -10,7 +10,8 @@ const characterPageRoutes = [
name: "CharacterPage", name: "CharacterPage",
component: CharacterPage, component: CharacterPage,
meta: { meta: {
title: "人物主页" title: "人物主页",
dynamicTitle: true
} }
} }
......
...@@ -8,7 +8,8 @@ const companyPagesRoutes = [ ...@@ -8,7 +8,8 @@ const companyPagesRoutes = [
name: "companyPages", name: "companyPages",
component: companyPages, component: companyPages,
meta: { meta: {
title: "企业主页" title: "企业主页",
dynamicTitle: true
} }
}, },
......
...@@ -10,7 +10,7 @@ const comprehensiveSearchRoutes = [ ...@@ -10,7 +10,7 @@ const comprehensiveSearchRoutes = [
name: "comprehensiveSearch", name: "comprehensiveSearch",
component: ComprehensiveSearch, component: ComprehensiveSearch,
meta: { meta: {
title: "综合搜索" title: "搜索-科技安全"
} }
}, },
{ {
...@@ -18,7 +18,8 @@ const comprehensiveSearchRoutes = [ ...@@ -18,7 +18,8 @@ const comprehensiveSearchRoutes = [
name: "searchResults", name: "searchResults",
component: SearchResults, component: SearchResults,
meta: { meta: {
title: "搜索结果" title: "搜索结果",
dynamicTitle: true
} }
}, },
{ {
......
...@@ -9,7 +9,7 @@ const cooperationRestrictionsRoutes = [ ...@@ -9,7 +9,7 @@ const cooperationRestrictionsRoutes = [
name: "CooperationRestrictions", name: "CooperationRestrictions",
component: CooperationRestrictions, component: CooperationRestrictions,
meta: { meta: {
title: "合作限制" title: "合作限制概览"
} }
}, },
// 合作限制详情 // 合作限制详情
...@@ -18,7 +18,8 @@ const cooperationRestrictionsRoutes = [ ...@@ -18,7 +18,8 @@ const cooperationRestrictionsRoutes = [
name: "CooperationRestrictionsDetail", name: "CooperationRestrictionsDetail",
component: CooperationRestrictionsDetail, component: CooperationRestrictionsDetail,
meta: { meta: {
title: "合作限制详情" title: "合作限制详情",
dynamicTitle: true
} }
}, },
......
...@@ -15,7 +15,7 @@ const decreeRoutes = [ ...@@ -15,7 +15,7 @@ const decreeRoutes = [
name: "Decree", name: "Decree",
component: Decree, component: Decree,
meta: { meta: {
title: "政令" title: "政令概览"
} }
}, },
{ {
...@@ -23,9 +23,9 @@ const decreeRoutes = [ ...@@ -23,9 +23,9 @@ const decreeRoutes = [
name: "DecreeLayoutContainer", name: "DecreeLayoutContainer",
component: DecreeLayoutContainer, component: DecreeLayoutContainer,
redirect: "/decreeLayout/overview", redirect: "/decreeLayout/overview",
meta: { // meta: {
title: "政令布局" // title: "政令布局"
}, // },
children: [ children: [
{ {
path: "overview", path: "overview",
...@@ -33,20 +33,21 @@ const decreeRoutes = [ ...@@ -33,20 +33,21 @@ const decreeRoutes = [
component: DecreeOverviewLayout, component: DecreeOverviewLayout,
redirect: "/decreeLayout/overview/introduction", redirect: "/decreeLayout/overview/introduction",
meta: { meta: {
title: "政令概况" title: "政令详情",
dynamicTitle: true // 标记需要动态设置标题
}, },
children: [ children: [
{ {
path: "introduction", path: "introduction",
name: "DecreeIntroduction", name: "DecreeIntroduction",
component: DecreeIntroduction, component: DecreeIntroduction,
meta: { title: "政令简介" } // meta: { title: "政令简介" }
}, },
{ {
path: "background", path: "background",
name: "DecreeBackground", name: "DecreeBackground",
component: DecreeBackground, component: DecreeBackground,
meta: { title: "政令背景" } // meta: { title: "政令背景" }
} }
] ]
}, },
...@@ -55,18 +56,18 @@ const decreeRoutes = [ ...@@ -55,18 +56,18 @@ const decreeRoutes = [
path: "deepDig", path: "deepDig",
name: "DeepDig", name: "DeepDig",
component: DecreeDeepDig, component: DecreeDeepDig,
meta: { // meta: {
title: "深度挖掘" // title: "深度挖掘"
} // }
}, },
// 影响分析路由 // 影响分析路由
{ {
path: "influence", path: "influence",
name: "DecreeInfluence", name: "DecreeInfluence",
component: DecreeInfluence, component: DecreeInfluence,
meta: { // meta: {
title: "影响分析" // title: "影响分析"
} // }
} }
] ]
}, },
...@@ -75,7 +76,8 @@ const decreeRoutes = [ ...@@ -75,7 +76,8 @@ const decreeRoutes = [
name: "Institution", name: "Institution",
component: Institution, component: Institution,
meta: { meta: {
title: "行政机构主页" title: "行政机构主页",
dynamicTitle: true
} }
} }
......
...@@ -8,7 +8,7 @@ const exportControlRoutes = [ ...@@ -8,7 +8,7 @@ const exportControlRoutes = [
name: "ExportControl", name: "ExportControl",
component: ExportControl, component: ExportControl,
meta: { meta: {
title: "出口管制" title: "出口管制概览"
} }
}, },
{ {
...@@ -92,7 +92,7 @@ const exportControlRoutes = [ ...@@ -92,7 +92,7 @@ const exportControlRoutes = [
name: "entityList", name: "entityList",
component: () => import("@/views/exportControl/v2.0EntityList/index.vue"), component: () => import("@/views/exportControl/v2.0EntityList/index.vue"),
meta: { meta: {
title: "全部实体清单" title: "实体清单概览"
} }
}, },
// V2.0单条制裁详情 // V2.0单条制裁详情
...@@ -101,7 +101,8 @@ const exportControlRoutes = [ ...@@ -101,7 +101,8 @@ const exportControlRoutes = [
name: "singleSanction", name: "singleSanction",
component: () => import("@/views/exportControl/v2.0SingleSanction/index.vue"), component: () => import("@/views/exportControl/v2.0SingleSanction/index.vue"),
meta: { meta: {
title: "单条制裁详情" title: "单条制裁详情",
dynamicTitle: true
} }
}, },
// V2.0单条制裁详情-实体清单原文 // V2.0单条制裁详情-实体清单原文
...@@ -109,9 +110,9 @@ const exportControlRoutes = [ ...@@ -109,9 +110,9 @@ const exportControlRoutes = [
path: "/exportControl/origin", path: "/exportControl/origin",
name: "entityListOrigin", name: "entityListOrigin",
component: () => import("@/views/exportControl/v2.0SingleSanction/originPage/index.vue"), component: () => import("@/views/exportControl/v2.0SingleSanction/originPage/index.vue"),
meta: { // meta: {
title: "实体清单原文" // title: "实体清单原文"
} // }
}, },
] ]
......
...@@ -8,7 +8,7 @@ const financeRoutes = [ ...@@ -8,7 +8,7 @@ const financeRoutes = [
name: "finance", name: "finance",
component: Finance, component: Finance,
meta: { meta: {
title: "投融资限制" title: "投融资限制概览"
} }
}, },
......
...@@ -15,7 +15,7 @@ const marketAccessRestrictionsRoutes = [ ...@@ -15,7 +15,7 @@ const marketAccessRestrictionsRoutes = [
name: "MarketAccessRestrictions", name: "MarketAccessRestrictions",
component: MarketAccessRestrictions, component: MarketAccessRestrictions,
meta: { meta: {
title: "市场准入限制" title: "市场准入限制概览"
} }
}, },
{ {
...@@ -24,7 +24,8 @@ const marketAccessRestrictionsRoutes = [ ...@@ -24,7 +24,8 @@ const marketAccessRestrictionsRoutes = [
component: MarketAccessLayout, component: MarketAccessLayout,
redirect: "/marketAccessLayout/case", redirect: "/marketAccessLayout/case",
meta: { meta: {
title: "市场准入限制布局" title: "调查概览",
dynamicTitle: true
}, },
children: [ children: [
...@@ -32,17 +33,17 @@ const marketAccessRestrictionsRoutes = [ ...@@ -32,17 +33,17 @@ const marketAccessRestrictionsRoutes = [
path: "case", path: "case",
name: "MarketAccessCase", name: "MarketAccessCase",
component: MarketAccessCase, component: MarketAccessCase,
meta: { // meta: {
title: "调查案件" // title: "调查案件"
} // }
}, },
{ {
path: "overview", path: "overview",
name: "MarketAccessOverview", name: "MarketAccessOverview",
component: MarketAccessOverview, component: MarketAccessOverview,
meta: { // meta: {
title: "数据统计" // title: "数据统计"
} // }
} }
] ]
}, },
...@@ -53,24 +54,25 @@ const marketAccessRestrictionsRoutes = [ ...@@ -53,24 +54,25 @@ const marketAccessRestrictionsRoutes = [
component: MarketSingleCaseLayout, component: MarketSingleCaseLayout,
redirect: "/marketSingleCaseLayout/overview", redirect: "/marketSingleCaseLayout/overview",
meta: { meta: {
title: "单次调查案件布局" title: "调查详情",
dynamicTitle: true
}, },
children: [ children: [
{ {
path: "overview", path: "overview",
name: "MarketSingleCaseOverview", name: "MarketSingleCaseOverview",
component: MarketSingleCaseOverview, component: MarketSingleCaseOverview,
meta: { // meta: {
title: "调查简介" // title: "调查简介"
} // }
}, },
{ {
path: "deepdig", path: "deepdig",
name: "MarketSingleCaseDeepdig", name: "MarketSingleCaseDeepdig",
component: MarketSingleCaseDeepdig, component: MarketSingleCaseDeepdig,
meta: { // meta: {
title: "深度挖掘" // title: "深度挖掘"
} // }
} }
] ]
}, },
......
...@@ -9,7 +9,7 @@ const ruleRestrictionsRoutes = [ ...@@ -9,7 +9,7 @@ const ruleRestrictionsRoutes = [
name: "RuleRestrictions", name: "RuleRestrictions",
component: RuleRestriction, component: RuleRestriction,
meta: { meta: {
title: "规则限制" title: "规则限制概览"
} }
}, },
// 规则限制详情 // 规则限制详情
...@@ -18,7 +18,8 @@ const ruleRestrictionsRoutes = [ ...@@ -18,7 +18,8 @@ const ruleRestrictionsRoutes = [
name: "RuleRestrictionsDetail", name: "RuleRestrictionsDetail",
component: RuleRestrictionDetail, component: RuleRestrictionDetail,
meta: { meta: {
title: "规则限制详情" title: "规则限制详情",
dynamicTitle: true
} }
}, },
......
...@@ -8,7 +8,7 @@ const scientificFundingRoutes = [ ...@@ -8,7 +8,7 @@ const scientificFundingRoutes = [
name: "ScientificFunding", name: "ScientificFunding",
component: ScientificFunding, component: ScientificFunding,
meta: { meta: {
title: "科研资助体系" title: "M国科研资助体系分析概览"
} }
} }
......
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
import TechnologyFigures from "@/views/technologyFigures/index.vue"; import TechnologyFigures from "@/views/technologyFigures/index.vue";
const technologyFiguresRoutes = [ const technologyFiguresRoutes = [
//创新主体
{ {
path: "/technologyFigures", path: "/technologyFigures",
name: "TechnologyFigures", name: "TechnologyFigures",
component: TechnologyFigures, component: TechnologyFigures,
meta: { meta: {
title: "主要创新主体" title: "M国科技人物观点分析概览"
} }
} }
......
...@@ -10,7 +10,7 @@ const thinktankRoutes = [ ...@@ -10,7 +10,7 @@ const thinktankRoutes = [
name: "thinkTank", name: "thinkTank",
component: thinkTank, component: thinkTank,
meta: { meta: {
title: "首页" title: "科技智库概览"
} }
}, },
{ {
...@@ -18,7 +18,8 @@ const thinktankRoutes = [ ...@@ -18,7 +18,8 @@ const thinktankRoutes = [
name: "ThinkTankDetail", name: "ThinkTankDetail",
component: ThinkTankDetail, component: ThinkTankDetail,
meta: { meta: {
title: "智库详情" title: "智库概览",
dynamicTitle: true
} }
}, },
{ {
...@@ -26,16 +27,17 @@ const thinktankRoutes = [ ...@@ -26,16 +27,17 @@ const thinktankRoutes = [
name: "ReportDetail", name: "ReportDetail",
component: ReportDetail, component: ReportDetail,
meta: { meta: {
title: "报告详情" title: "报告详情",
dynamicTitle: true
} }
}, },
{ {
path: "/thinkTank/reportOriginal/:id", path: "/thinkTank/reportOriginal/:id",
name: "ReportOriginal", name: "ReportOriginal",
component: ReportOriginal, component: ReportOriginal,
meta: { // meta: {
title: "报告原文" // title: "报告原文"
} // }
}, },
] ]
......
...@@ -220,6 +220,7 @@ const handleClickEvent = item => { ...@@ -220,6 +220,7 @@ const handleClickEvent = item => {
// 跳转人员详情 // 跳转人员详情
const handleClickUser = item => { const handleClickUser = item => {
window.sessionStorage.setItem('curTabName', item.name)
const routeData = router.resolve({ const routeData = router.resolve({
path: "/characterPage", path: "/characterPage",
query: { query: {
......
...@@ -2,7 +2,12 @@ ...@@ -2,7 +2,12 @@
<div class="home-wrapper"> <div class="home-wrapper">
<div class="search-header" v-show="isShow"> <div class="search-header" v-show="isShow">
<div class="home-main-header-center"> <div class="home-main-header-center">
<el-input v-model="searchBillText" style="width: 680px; height: 100%" placeholder="搜索科技法案" /> <el-input
v-model="searchBillText"
@keyup.enter="handleSearch"
style="width: 680px; height: 100%"
placeholder="搜索科技法案"
/>
<div class="search"> <div class="search">
<div class="search-icon"> <div class="search-icon">
<img src="./assets/images/search-icon.png" alt="" /> <img src="./assets/images/search-icon.png" alt="" />
...@@ -49,7 +54,12 @@ ...@@ -49,7 +54,12 @@
<div class="home-main"> <div class="home-main">
<div class="home-main-header" v-show="!isShow"> <div class="home-main-header" v-show="!isShow">
<div class="home-main-header-center"> <div class="home-main-header-center">
<el-input v-model="searchBillText" style="width: 800px; height: 100%" placeholder="搜索科技法案" /> <el-input
v-model="searchBillText"
@keyup.enter="handleSearch"
style="width: 800px; height: 100%"
placeholder="搜索科技法案"
/>
<div class="search"> <div class="search">
<div class="search-icon"> <div class="search-icon">
<img src="./assets/images/search-icon.png" alt="" /> <img src="./assets/images/search-icon.png" alt="" />
...@@ -305,7 +315,7 @@ ...@@ -305,7 +315,7 @@
</div> </div>
<div class="box4-main"> <div class="box4-main">
<div class="box4-main-item" v-for="(item, index) in messageList" :key="index"> <div class="box4-main-item" v-for="(item, index) in messageList" :key="index">
<div class="left" @click="handleClcikToCharacter(item.personId)"> <div class="left" @click="handleClcikToCharacter(item.personId, item.personName)">
<img <img
:src="getProxyUrl(item.personImage) || Message3" :src="getProxyUrl(item.personImage) || Message3"
alt="" alt=""
...@@ -479,7 +489,7 @@ ...@@ -479,7 +489,7 @@
class="box8-main-item" class="box8-main-item"
v-for="(item, index) in box8Data" v-for="(item, index) in box8Data"
:key="index" :key="index"
@click="handleClcikToCharacter(item.memberId)" @click="handleClcikToCharacter(item.memberId, item.name)"
> >
<div class="box8-main-item-left"> <div class="box8-main-item-left">
<img :src="getProxyUrl(item.img)" alt="" referrerpolicy="no-referrer" class="left-img" /> <img :src="getProxyUrl(item.img)" alt="" referrerpolicy="no-referrer" class="left-img" />
...@@ -846,7 +856,7 @@ const formatMessageTime = timeStr => { ...@@ -846,7 +856,7 @@ const formatMessageTime = timeStr => {
}; };
// 跳转人物主页 // 跳转人物主页
const handleClcikToCharacter = async id => { const handleClcikToCharacter = async (id, name) => {
const personTypeList = JSON.parse(window.sessionStorage.getItem("personTypeList")); const personTypeList = JSON.parse(window.sessionStorage.getItem("personTypeList"));
let type = 0; let type = 0;
...@@ -879,6 +889,7 @@ const handleClcikToCharacter = async id => { ...@@ -879,6 +889,7 @@ const handleClcikToCharacter = async id => {
ElMessage.warning("找不到当前人员的类型值!"); ElMessage.warning("找不到当前人员的类型值!");
return; return;
} }
window.sessionStorage.setItem("curTabName", name);
const route = router.resolve({ const route = router.resolve({
path: "/characterPage", path: "/characterPage",
query: { query: {
...@@ -950,6 +961,7 @@ const curBill = ref({ ...@@ -950,6 +961,7 @@ const curBill = ref({
// 查看详情 // 查看详情
const handleClickToDetail = () => { const handleClickToDetail = () => {
window.sessionStorage.setItem("billId", curBill.value.billId); window.sessionStorage.setItem("billId", curBill.value.billId);
window.sessionStorage.setItem("curTabName", curBill.value.billName);
const route = router.resolve({ const route = router.resolve({
path: "/billLayout", path: "/billLayout",
query: { query: {
...@@ -963,6 +975,7 @@ const handleClickToDetail = () => { ...@@ -963,6 +975,7 @@ const handleClickToDetail = () => {
// 查看详情 传递参数 // 查看详情 传递参数
const handleClickToDetailO = item => { const handleClickToDetailO = item => {
window.sessionStorage.setItem("billId", item.billId); window.sessionStorage.setItem("billId", item.billId);
window.sessionStorage.setItem("curTabName", item.name);
const route = router.resolve("/billLayout?billId=" + item.billId); const route = router.resolve("/billLayout?billId=" + item.billId);
window.open(route.href, "_blank"); window.open(route.href, "_blank");
}; };
...@@ -1690,6 +1703,7 @@ const footerSelect2 = ref("全部提出议员"); ...@@ -1690,6 +1703,7 @@ const footerSelect2 = ref("全部提出议员");
// ]); // ]);
const handleSearch = () => { const handleSearch = () => {
window.sessionStorage.setItem("curTabName", `搜索-${searchBillText.value}`);
const curRoute = router.resolve({ const curRoute = router.resolve({
path: "/searchResults", path: "/searchResults",
query: { query: {
...@@ -1746,7 +1760,7 @@ onUnmounted(() => { ...@@ -1746,7 +1760,7 @@ onUnmounted(() => {
} }
.home-wrapper { .home-wrapper {
width: 100%; width: 100%;
height: calc(100vh - 96px); height: 100%;
position: relative; position: relative;
overflow-y: hidden; overflow-y: hidden;
.search-header { .search-header {
......
...@@ -174,7 +174,7 @@ ...@@ -174,7 +174,7 @@
</div> </div>
<div class="info-box"> <div class="info-box">
<div class="info-left"> <div class="info-left">
<img :src="defaultAvatar" alt="" @click="handleClickAvatar(curPerson.id)"/> <img :src="defaultAvatar" alt="" @click="handleClickAvatar(curPerson)"/>
<div class="usr-icon1"> <div class="usr-icon1">
<img src="./assets/images/usr-icon1.png" alt="" /> <img src="./assets/images/usr-icon1.png" alt="" />
</div> </div>
...@@ -358,11 +358,12 @@ const route = useRoute(); ...@@ -358,11 +358,12 @@ const route = useRoute();
const router = useRouter(); const router = useRouter();
// 跳转到人物页面 // 跳转到人物页面
const handleClickAvatar = id => { const handleClickAvatar = item => {
window.sessionStorage.setItem('curTabName', item.name)
const routeData = router.resolve({ const routeData = router.resolve({
path: "/characterPage", path: "/characterPage",
query: { query: {
personId: id personId: item.id
} }
}); });
window.open(routeData.href, "_blank"); window.open(routeData.href, "_blank");
......
...@@ -67,14 +67,16 @@ ...@@ -67,14 +67,16 @@
class="content ai-content" class="content ai-content"
v-html="renderMarkdown(message.content)" v-html="renderMarkdown(message.content)"
></div> ></div>
<div v-if="message.raw_data?.length" class="answer-title">完整实体列表</div> <div v-if="message.raw_data?.length || message.raw_data?.rows?.length" class="answer-title">完整实体列表</div>
<div v-if="message.raw_data?.length" class="content row-content"> <div v-if="message.raw_data?.length || message.raw_data?.rows?.length" class="content row-content">
<div class="row-header"> <div class="row-header">
<div class="row-header-item1">{{ message.raw_data.columns?.name_zhs }}</div> <div class="row-header-item1">{{ message.raw_data.columns?.name_zhs }}</div>
<div class="row-header-item">{{ message.raw_data.columns?.date }}</div> <div class="row-header-item">{{ message.raw_data.columns?.date }}</div>
<div class="row-header-item">{{ message.raw_data.columns?.industry }}</div> <div class="row-header-item">{{ message.raw_data.columns?.industry }}</div>
<div class="row-header-item">{{ message.raw_data.columns?.category }}</div> <div class="row-header-item">{{ message.raw_data.columns?.category }}</div>
<div class="row-header-item2">{{ message.raw_data.columns?.sanction_reason }}</div> <div class="row-header-item2">
{{ message.raw_data.columns?.sanction_reason }}
</div>
</div> </div>
<div class="row-main"> <div class="row-main">
<div <div
...@@ -194,6 +196,10 @@ const areaList = ref([ ...@@ -194,6 +196,10 @@ const areaList = ref([
label: "法案", label: "法案",
value: "法案" value: "法案"
}, },
{
label: "法案RAG",
value: "法案RAG"
},
{ {
label: "清单", label: "清单",
value: "清单" value: "清单"
...@@ -920,8 +926,9 @@ const sendMessage = async () => { ...@@ -920,8 +926,9 @@ const sendMessage = async () => {
userInput.value = ""; userInput.value = "";
aiMessage.value = ""; aiMessage.value = "";
if (curArea.value === "法案") { if (curArea.value === "法案") {
// await connectSSE(question); handleBillChat(question);
handleBillChat(question) } else if (curArea.value === "法案RAG") {
await connectSSE(question);
} else { } else {
handleListChat(question); handleListChat(question);
} }
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
</el-select> </el-select>
</div> --> </div> -->
</div> </div>
<div class="summary-box"> <!-- <div class="summary-box">
<div class="summary-header"> <div class="summary-header">
<img src="./assets/images/summary-icon.png" alt="" /> <img src="./assets/images/summary-icon.png" alt="" />
</div> </div>
...@@ -73,8 +73,8 @@ ...@@ -73,8 +73,8 @@
` 美国众议院共和党人正在起草一项新提案,以限制美国对中国的投资。此前,参议院已将其纳入国防政策立法中。知情人士向Semafor透露,众议院工作人员希望在11月7日前就该提案达成共识,并将财政部的反馈纳入由肯塔基州共和党众议员安迪·巴尔提出的配套提案中(尽管政府停摆可能推迟这一时间表)。随后,众议员将利用该文本与参议员就最终《国防授权法案》的内容进行协商。此前一届国会中,类似的尝试因北卡罗来纳州前众议员帕特里克·麦克亨利的反对而失败,但本届国会中,“所有人都在共同努力”。知情人士补充说,领导人并不担心此举会剥夺特朗普在周四与中国领导人习近平会谈时的谈判筹码,因为财政部已开始实施类似的指导方针。` ` 美国众议院共和党人正在起草一项新提案,以限制美国对中国的投资。此前,参议院已将其纳入国防政策立法中。知情人士向Semafor透露,众议院工作人员希望在11月7日前就该提案达成共识,并将财政部的反馈纳入由肯塔基州共和党众议员安迪·巴尔提出的配套提案中(尽管政府停摆可能推迟这一时间表)。随后,众议员将利用该文本与参议员就最终《国防授权法案》的内容进行协商。此前一届国会中,类似的尝试因北卡罗来纳州前众议员帕特里克·麦克亨利的反对而失败,但本届国会中,“所有人都在共同努力”。知情人士补充说,领导人并不担心此举会剥夺特朗普在周四与中国领导人习近平会谈时的谈判筹码,因为财政部已开始实施类似的指导方针。`
}} }}
</div> </div>
</div> </div> -->
<div class="header-right"> <!-- <div class="header-right">
<div class="header-right-header">{{ "关联检索" }}</div> <div class="header-right-header">{{ "关联检索" }}</div>
<div class="header-right-main"> <div class="header-right-main">
<div class="header-right-main-item" v-for="(item, index) in relatedSearchList" :key="index"> <div class="header-right-main-item" v-for="(item, index) in relatedSearchList" :key="index">
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
<div class="text">{{ item }}</div> <div class="text">{{ item }}</div>
</div> </div>
</div> </div>
</div> </div> -->
</div> </div>
<div class="main"> <div class="main">
<div class="item" v-for="(item, index) in searchResults" :key="index" @click="handleToPage(item)"> <div class="item" v-for="(item, index) in searchResults" :key="index" @click="handleToPage(item)">
...@@ -92,8 +92,8 @@ ...@@ -92,8 +92,8 @@
<img :src="item?.img" alt="" /> <img :src="item?.img" alt="" />
</div> </div>
<div class="item-right"> <div class="item-right">
<div class="title" v-html="item?.title"></div> <div class="title" v-html="item?.originalTitle"></div>
<div class="content" v-html="item?.description"></div> <div class="content" v-html="item?.originalDescription"></div>
<div class="item-right-footer"> <div class="item-right-footer">
<div class="time">{{ item?.date }}</div> <div class="time">{{ item?.date }}</div>
<div class="tag tag3"> <div class="tag tag3">
...@@ -166,7 +166,7 @@ const tabList = ref([ ...@@ -166,7 +166,7 @@ const tabList = ref([
{ {
name: "新闻", name: "新闻",
id: 8 id: 8
}, }
// { // {
// name: "社媒", // name: "社媒",
// id: 9 // id: 9
...@@ -304,58 +304,61 @@ const handleSearch = async () => { ...@@ -304,58 +304,61 @@ const handleSearch = async () => {
} catch (error) {} } catch (error) {}
}; };
const handleToPage = async (item) => { const handleToPage = async item => {
if(item.typeStr === '人物') { console.log("item", item);
const personTypeList = JSON.parse(window.sessionStorage.getItem("personTypeList"));
let type = 0;
let personTypeName = "";
const params = { if (item.typeStr === "人物") {
personId: item.id const personTypeList = JSON.parse(window.sessionStorage.getItem("personTypeList"));
}; let type = 0;
try { let personTypeName = "";
const res = await getPersonSummaryInfo(params);
console.log("人物全局信息", res);
if (res.code === 200 && res.data) {
const arr = personTypeList.filter(item => {
return item.typeId === res.data.personType;
});
console.log("arr", arr);
if (arr && arr.length > 0) { const params = {
personTypeName = arr[0].typeName; personId: item.id
console.log("personTypeName", personTypeName); };
try {
const res = await getPersonSummaryInfo(params);
console.log("人物全局信息", res);
if (res.code === 200 && res.data) {
const arr = personTypeList.filter(item => {
return item.typeId === res.data.personType;
});
console.log("arr", arr);
if (personTypeName === "科技企业领袖") { if (arr && arr.length > 0) {
type = 1; personTypeName = arr[0].typeName;
} else if (personTypeName === "国会议员") { console.log("personTypeName", personTypeName);
type = 2;
} else if (personTypeName === "智库研究人员") { if (personTypeName === "科技企业领袖") {
type = 3; type = 1;
} else if (personTypeName === "国会议员") {
type = 2;
} else if (personTypeName === "智库研究人员") {
type = 3;
} else {
personTypeName = "";
ElMessage.warning("找不到当前人员的类型值!");
return;
}
const route = router.resolve({
path: "/characterPage",
query: {
type: type, // type=1为科技企业领袖,2为国会议员,3为智库研究人员
personId: id
}
});
window.open(route.href, "_blank");
} else { } else {
personTypeName = ""; personTypeName = "";
ElMessage.warning("找不到当前人员的类型值!"); ElMessage.warning("找不到当前人员的类型值!");
return; return;
} }
const route = router.resolve({
path: "/characterPage",
query: {
type: type, // type=1为科技企业领袖,2为国会议员,3为智库研究人员
personId: id
}
});
window.open(route.href, "_blank");
} else { } else {
personTypeName = ""; ElMessage.warning("获取人物全局信息错误");
ElMessage.warning("找不到当前人员的类型值!");
return; return;
} }
} else { } catch (error) {}
ElMessage.warning("获取人物全局信息错误");
return;
}
} catch (error) {}
} }
window.sessionStorage.setItem("curTabName", item.originalTitle);
let curRoute; let curRoute;
switch (item.typeStr) { switch (item.typeStr) {
case "法案": case "法案":
...@@ -487,7 +490,7 @@ onMounted(() => { ...@@ -487,7 +490,7 @@ onMounted(() => {
} }
.wrapper { .wrapper {
width: 100%; width: 100%;
height: calc(100vh - 96px); height: 100%;
background: url("../assets/images/background.png") no-repeat; background: url("../assets/images/background.png") no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
.header { .header {
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<div class="left-top-title">合作限制动态</div> <div class="left-top-title">合作限制动态</div>
<div class="more" @click="handleClickToDetail">查看详情 ></div> <div class="more" @click="handleClickToDetail">查看详情 ></div>
</div> </div>
<el-carousel <el-carousel
ref="carouselRef" ref="carouselRef"
height="412px" height="412px"
...@@ -42,8 +42,10 @@ ...@@ -42,8 +42,10 @@
<li> <li>
<span class="ul-title">涉及领域:</span> <span class="ul-title">涉及领域:</span>
<div class="ul-tags" v-if="item.AREA"> <div class="ul-tags" v-if="item.AREA">
<span <span
v-for="(field, fIndex) in (typeof item.AREA === 'string' ? item.AREA.split(',') : item.AREA)" v-for="(field, fIndex) in typeof item.AREA === 'string'
? item.AREA.split(',')
: item.AREA"
:key="fIndex" :key="fIndex"
class="ul-pie" class="ul-pie"
:class="'cl' + ((fIndex % 3) + 1)" :class="'cl' + ((fIndex % 3) + 1)"
...@@ -68,7 +70,7 @@ ...@@ -68,7 +70,7 @@
</div> </div>
</div> </div>
</el-carousel-item> </el-carousel-item>
<!-- 无数据时的占位展示 --> <!-- 无数据时的占位展示 -->
<el-carousel-item v-if="coopRestrictionTrends.length === 0"> <el-carousel-item v-if="coopRestrictionTrends.length === 0">
<div class="carousel-item-content"> <div class="carousel-item-content">
...@@ -162,7 +164,7 @@ const getCoopRestrictionTrendsData = async () => { ...@@ -162,7 +164,7 @@ const getCoopRestrictionTrendsData = async () => {
} }
} catch (error) { } catch (error) {
console.error("获取合作限制最新动态数据失败:", error); console.error("获取合作限制最新动态数据失败:", error);
} }
}; };
// 轮播图手动切换 // 轮播图手动切换
...@@ -178,7 +180,7 @@ const handleNext = () => { ...@@ -178,7 +180,7 @@ const handleNext = () => {
}; };
// 轮播切换回调 // 轮播切换回调
const handleCarouselChange = (index) => { const handleCarouselChange = index => {
activeIndex.value = index; activeIndex.value = index;
}; };
...@@ -192,13 +194,15 @@ const mainTrend = computed(() => { ...@@ -192,13 +194,15 @@ const mainTrend = computed(() => {
const riskSignals = ref([]); const riskSignals = ref([]);
// 点击查看详情 // 点击查看详情
const handleClickToDetail = (item) => { const handleClickToDetail = item => {
const activeItem = (item && item.ID) ? item : mainTrend.value; const activeItem = item && item.ID ? item : mainTrend.value;
const id = activeItem?.ID; const id = activeItem?.ID;
if (!id) return; if (!id) return;
window.sessionStorage.setItem("curTabName", activeItem?.LIMITNAME);
const curRoute = router.resolve({ const curRoute = router.resolve({
path: "/cooperationRestrictions/detail", path: "/cooperationRestrictions/detail",
query: { id: id }, query: { id: id }
}); });
window.open(curRoute.href, "_blank"); window.open(curRoute.href, "_blank");
}; };
......
...@@ -61,8 +61,8 @@ ...@@ -61,8 +61,8 @@
<div class="right-top"> <div class="right-top">
<img class="img1" src="./assets/bluetitle.png" alt="" /> <img class="img1" src="./assets/bluetitle.png" alt="" />
<div class="right-top-title">背景分析</div> <div class="right-top-title">背景分析</div>
<div class="btn cl1" :class="{'active': active === '涉华背景'}" @click="active = '涉华背景'">涉华背景</div> <div class="btn cl1" :class="{ active: active === '涉华背景' }" @click="active = '涉华背景'">涉华背景</div>
<div class="btn cl2" :class="{'active': active === '全部背景'}" @click="active = '全部背景'">全部背景</div> <div class="btn cl2" :class="{ active: active === '全部背景' }" @click="active = '全部背景'">全部背景</div>
<div class="right-top-content"> <div class="right-top-content">
<div v-for="(item, index) in filteredBackgroundList" :key="index" class="right-top-item"> <div v-for="(item, index) in filteredBackgroundList" :key="index" class="right-top-item">
<span class="id">{{ index + 1 }}</span> <span class="id">{{ index + 1 }}</span>
...@@ -367,8 +367,8 @@ const dataList3 = ref([ ...@@ -367,8 +367,8 @@ const dataList3 = ref([
{ {
id: 5, id: 5,
name: "本公告发布日起不迟于 90 天内,司法部长与国土安全部长应通过总统国家安全事务助理共同向总统提交建议,决定是否延长或续期本公告第 1 条中暂停和限制入境的条款符合美国利益。" name: "本公告发布日起不迟于 90 天内,司法部长与国土安全部长应通过总统国家安全事务助理共同向总统提交建议,决定是否延长或续期本公告第 1 条中暂停和限制入境的条款符合美国利益。"
}, }
]) ]);
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -388,6 +388,9 @@ const dataList3 = ref([ ...@@ -388,6 +388,9 @@ const dataList3 = ref([
padding: 19px 0 20px; padding: 19px 0 20px;
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1); box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
position: sticky;
top: 0;
z-index: 99999999;
.nav-main { .nav-main {
width: 1600px; width: 1600px;
height: 81px; height: 81px;
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
<HeaderMenu></HeaderMenu> <HeaderMenu></HeaderMenu>
</div> </div>
<div class="header-right"> <div class="header-right">
<headerInfo curTitleName="政令"></headerInfo> <headerInfo curTitleName="政令"></headerInfo>
</div> </div>
</div> </div>
<div class="home-main-header-center" v-show="!isShow"> <div class="home-main-header-center" v-show="!isShow">
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
v-model="searchDecreeText" v-model="searchDecreeText"
@keyup.enter="handleSearch" @keyup.enter="handleSearch"
style="width: 838px; height: 100%" style="width: 838px; height: 100%"
placeholder="搜索科技政令" placeholder="搜索政令"
/> />
<div class="search"> <div class="search">
<div class="search-icon"> <div class="search-icon">
...@@ -267,11 +267,12 @@ ...@@ -267,11 +267,12 @@
<div class="title">{{ news.title }}</div> <div class="title">{{ news.title }}</div>
<div class="time">{{ news.from }}</div> <div class="time">{{ news.from }}</div>
</div> </div>
<el-popover effect="dark" :width="1000" :content="news.content" placement="top-start"> <div class="right-footer">{{ news.content }}</div>
<!-- <el-popover effect="dark" :width="1000" :content="news.content" placement="top-start">
<template #reference> <template #reference>
<div class="right-footer">{{ news.content }}</div> <div class="right-footer">{{ news.content }}</div>
</template> </template>
</el-popover> </el-popover> -->
</div> </div>
</div> </div>
</div> </div>
...@@ -368,7 +369,7 @@ ...@@ -368,7 +369,7 @@
class="box7-item" class="box7-item"
v-for="(item, index) in keyDecreeList" v-for="(item, index) in keyDecreeList"
:key="index" :key="index"
@click="handleKeyDecree(item.id)" @click="handleKeyDecree(item)"
> >
<div class="icon"> <div class="icon">
<img src="./assets/images/warning.png" alt="" /> <img src="./assets/images/warning.png" alt="" />
...@@ -378,11 +379,12 @@ ...@@ -378,11 +379,12 @@
<div class="title">{{ item.title }}</div> <div class="title">{{ item.title }}</div>
<div class="time">{{ item.time }}</div> <div class="time">{{ item.time }}</div>
</div> </div>
<el-popover effect="dark" :width="800" :content="item.content" placement="top-start"> <div class="info-content">{{ item.content ? item.content : "暂无数据" }}</div>
<!-- <el-popover effect="dark" :width="800" :content="item.content" placement="top-start">
<template #reference> <template #reference>
<div class="info-content">{{ item.content ? item.content : "暂无数据" }}</div> <div class="info-content">{{ item.content ? item.content : "暂无数据" }}</div>
</template> </template>
</el-popover> </el-popover> -->
</div> </div>
</div> </div>
</div> </div>
...@@ -616,6 +618,7 @@ import { ElMessage } from "element-plus"; ...@@ -616,6 +618,7 @@ import { ElMessage } from "element-plus";
// 跳转行政机构主页 // 跳转行政机构主页
const handleToInstitution = item => { const handleToInstitution = item => {
window.sessionStorage.setItem("curTabName", item.name);
const curRoute = router.resolve({ const curRoute = router.resolve({
path: "/institution", path: "/institution",
query: { query: {
...@@ -737,6 +740,7 @@ const handleClickToDetail = () => { ...@@ -737,6 +740,7 @@ const handleClickToDetail = () => {
const id = box1DataList.value[activeIndex].id; const id = box1DataList.value[activeIndex].id;
window.sessionStorage.setItem("curTabName", box1DataList.value[activeIndex].name);
const route = router.resolve({ const route = router.resolve({
path: "/decreeLayout", path: "/decreeLayout",
query: { query: {
...@@ -748,6 +752,7 @@ const handleClickToDetail = () => { ...@@ -748,6 +752,7 @@ const handleClickToDetail = () => {
// 点击政令库政令 // 点击政令库政令
const handleClickDecree = decree => { const handleClickDecree = decree => {
window.sessionStorage.setItem("curTabName", decree.title);
const route = router.resolve({ const route = router.resolve({
path: "/decreeLayout", path: "/decreeLayout",
query: { query: {
...@@ -757,11 +762,12 @@ const handleClickDecree = decree => { ...@@ -757,11 +762,12 @@ const handleClickDecree = decree => {
window.open(route.href, "_blank"); window.open(route.href, "_blank");
}; };
const handleKeyDecree = id => { const handleKeyDecree = item => {
window.sessionStorage.setItem("curTabName", item.title);
const route = router.resolve({ const route = router.resolve({
path: "/decreeLayout", path: "/decreeLayout",
query: { query: {
id: id id: item.id
} }
}); });
window.open(route.href, "_blank"); window.open(route.href, "_blank");
...@@ -910,6 +916,7 @@ const handleClickPerson = async item => { ...@@ -910,6 +916,7 @@ const handleClickPerson = async item => {
ElMessage.warning("找不到当前人员的类型值!"); ElMessage.warning("找不到当前人员的类型值!");
return; return;
} }
window.sessionStorage.setItem("curTabName", item.name);
const route = router.resolve({ const route = router.resolve({
path: "/characterPage", path: "/characterPage",
query: { query: {
...@@ -1287,6 +1294,7 @@ const handleSwithCurDecree = name => { ...@@ -1287,6 +1294,7 @@ const handleSwithCurDecree = name => {
// 搜索 // 搜索
const searchDecreeText = ref(""); const searchDecreeText = ref("");
const handleSearch = () => { const handleSearch = () => {
window.sessionStorage.setItem("curTabName", `搜索-${searchDecreeText.value}`);
const curRoute = router.resolve({ const curRoute = router.resolve({
path: "/searchResults", path: "/searchResults",
query: { query: {
...@@ -1313,7 +1321,7 @@ onMounted(async () => { ...@@ -1313,7 +1321,7 @@ onMounted(async () => {
} }
.home-wrapper { .home-wrapper {
width: 100%; width: 100%;
height: calc(100vh - 96px); height: 100%;
position: relative; position: relative;
overflow-y: hidden; overflow-y: hidden;
.search-header { .search-header {
...@@ -1570,6 +1578,7 @@ onMounted(async () => { ...@@ -1570,6 +1578,7 @@ onMounted(async () => {
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1); box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 0.65); background: rgba(255, 255, 255, 0.65);
align-items: center; align-items: center;
gap:17px;
margin: 0 6px 16px 6px; margin: 0 6px 16px 6px;
cursor: pointer; cursor: pointer;
transition: transform 0.3s ease, box-shadow 0.3s ease; transition: transform 0.3s ease, box-shadow 0.3s ease;
...@@ -1578,17 +1587,15 @@ onMounted(async () => { ...@@ -1578,17 +1587,15 @@ onMounted(async () => {
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
} }
.item-left { .item-left {
margin-left: 24px;
width: 48px; width: 48px;
height: 48px; height: 48px;
margin-left: 24px;
margin-top: 12px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.item-right { .item-right {
margin-left: 17px;
width: 140px; width: 140px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
......
...@@ -157,6 +157,7 @@ const siderList = ref([ ...@@ -157,6 +157,7 @@ const siderList = ref([
const siderActiveIndex = ref(0); const siderActiveIndex = ref(0);
const handleClickSider = async index => { const handleClickSider = async index => {
siderActiveIndex.value = index; siderActiveIndex.value = index;
decreeInfo.value.id = allData.value[index].id
decreeInfo.value.img = allData.value[index].imageUrl; decreeInfo.value.img = allData.value[index].imageUrl;
decreeInfo.value.totalTitle = allData.value[index].name; decreeInfo.value.totalTitle = allData.value[index].name;
decreeInfo.value.eTotalTitle = allData.value[index].ename; decreeInfo.value.eTotalTitle = allData.value[index].ename;
...@@ -263,6 +264,8 @@ const handleGetRelateOrder = async () => { ...@@ -263,6 +264,8 @@ const handleGetRelateOrder = async () => {
}; };
const handleToDecreeDetail = item => { const handleToDecreeDetail = item => {
console.log('item', item.id);
window.sessionStorage.setItem('curTabName', item.totalTitle)
const route = router.resolve({ const route = router.resolve({
path: "/decreeLayout/overview/introduction", path: "/decreeLayout/overview/introduction",
query: { query: {
......
...@@ -11,11 +11,11 @@ ...@@ -11,11 +11,11 @@
<div class="info"> <div class="info">
<div class="info-box1">{{ summaryInfo.name }}</div> <div class="info-box1">{{ summaryInfo.name }}</div>
<div class="info-box2"> <div class="info-box2">
<div class="info-box2-item">{{ summaryInfo.order }}</div> <div class="info-box2-item item1">{{ summaryInfo.order }}</div>
| |
<div class="info-box2-item">{{ summaryInfo.type }}</div> <div class="info-box2-item item2">{{ summaryInfo.type }}</div>
| |
<div class="info-box2-item">{{ summaryInfo.ename }}</div> <div class="info-box2-item item3">{{ summaryInfo.ename }}</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -43,11 +43,20 @@ ...@@ -43,11 +43,20 @@
<div class="name">{{ summaryInfo.orgName }}</div> <div class="name">{{ summaryInfo.orgName }}</div>
</div> </div>
<div class="right-box-bottom"> <div class="right-box-bottom">
<!-- <el-button type="plain" size="large" icon="Search" @click="handleSwitchActiveName('法案原文')" <div class="btn" @click="handleShowReport">
>政令原文</el-button <div class="icon">
> --> <img src="./assets/icons/report-icon.png" alt="" />
<el-button type="plain" size="large" icon="Search" @click="handleShowReport">政令原文</el-button> </div>
<el-button type="primary" size="large" icon="EditPen">分析报告</el-button> <div class="text">{{ "政令原文" }}</div>
</div>
<div class="btn-active">
<div class="icon-active">
<img src="./assets/icons/edit-icon.png" alt="" />
</div>
<div class="text-active">{{ "分析报告" }}</div>
</div>
<!-- <el-button type="plain" size="large" icon="Search" @click="handleShowReport">政令原文</el-button>
<el-button type="primary" size="large" icon="EditPen">分析报告</el-button> -->
</div> </div>
</div> </div>
</div> </div>
...@@ -106,7 +115,7 @@ ...@@ -106,7 +115,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="report" v-if="isShowReport"> <div class="report" v-if="isShowReport">
<div class="report-close" @click="handleCloseReport"> <div class="report-close" @click="handleCloseReport">
<img src="@/assets/icons/close.png" alt="" /> <img src="@/assets/icons/close.png" alt="" />
</div> </div>
...@@ -185,13 +194,13 @@ const mainHeaderBtnList = ref([ ...@@ -185,13 +194,13 @@ const mainHeaderBtnList = ref([
activeIcon: icon2Active, activeIcon: icon2Active,
name: "深度挖掘", name: "深度挖掘",
path: "/decreeLayout/deepDig" path: "/decreeLayout/deepDig"
},
{
icon: icon3,
activeIcon: icon3Active,
name: "影响分析",
path: "/decreeLayout/influence"
} }
// {
// icon: icon3,
// activeIcon: icon3Active,
// name: "影响分析",
// path: "/decreeLayout/influence"
// }
]); ]);
const activeTitle = ref("政令概况"); const activeTitle = ref("政令概况");
...@@ -237,11 +246,11 @@ const handleGetReport = async () => { ...@@ -237,11 +246,11 @@ const handleGetReport = async () => {
}; };
const handleCloseReport = () => { const handleCloseReport = () => {
isShowReport.value = false isShowReport.value = false;
} };
const handleShowReport = () => { const handleShowReport = () => {
isShowReport.value = true isShowReport.value = true;
} };
onMounted(() => { onMounted(() => {
handleGetSummary(); handleGetSummary();
...@@ -253,20 +262,17 @@ onMounted(() => { ...@@ -253,20 +262,17 @@ onMounted(() => {
} else { } else {
activeTitle.value = "影响分析"; activeTitle.value = "影响分析";
} }
handleGetReport() handleGetReport();
}); });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.layout-container { .layout-container {
width: 100vw; width: 100%;
height: 100vh; height: 100%;
min-width: 1920px; overflow: hidden;
min-height: 1016px; overflow-y: auto;
background: rgba(249, 250, 252, 1); .report {
position: relative;
.report {
padding: 10px 150px; padding: 10px 150px;
position: absolute; position: absolute;
left: 0; left: 0;
...@@ -335,12 +341,14 @@ onMounted(() => { ...@@ -335,12 +341,14 @@ onMounted(() => {
} }
.layout-main { .layout-main {
width: 100%; width: 100%;
height: 100%;
.layout-main-header { .layout-main-header {
height: 137px; height: 137px;
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
position: sticky;
top: 0;
z-index: 99999999;
.layout-main-header-left-box { .layout-main-header-left-box {
width: 1100px; width: 1100px;
margin-left: 160px; margin-left: 160px;
...@@ -359,8 +367,10 @@ onMounted(() => { ...@@ -359,8 +367,10 @@ onMounted(() => {
} }
} }
.info { .info {
width: 700px;
margin-left: 9px; margin-left: 9px;
.info-box1 { .info-box1 {
width: 700px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 20px; font-size: 20px;
...@@ -369,6 +379,9 @@ onMounted(() => { ...@@ -369,6 +379,9 @@ onMounted(() => {
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
margin-top: 5px; margin-top: 5px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
.info-box2 { .info-box2 {
margin-top: 5px; margin-top: 5px;
...@@ -386,6 +399,24 @@ onMounted(() => { ...@@ -386,6 +399,24 @@ onMounted(() => {
.info-box2-item { .info-box2-item {
padding: 0 10px; padding: 0 10px;
} }
.item1 {
width: 100px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.item2 {
width: 180px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.item3 {
width: 420px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
} }
} }
} }
...@@ -460,12 +491,78 @@ onMounted(() => { ...@@ -460,12 +491,78 @@ onMounted(() => {
.right-box-bottom { .right-box-bottom {
margin-top: 24px; margin-top: 24px;
text-align: right; text-align: right;
display: flex;
justify-content: flex-end;
gap: 8px;
.btn {
width: 120px;
height: 36px;
box-sizing: border-box;
border: 1px solid rgba(230, 231, 232, 1);
border-radius: 6px;
background: rgba(255, 255, 255, 1);
display: flex;
justify-content: center;
gap: 8px;
align-items: center;
cursor: pointer;
.icon {
width: 16px;
height: 16px;
img {
width: 100%;
height: 100%;
}
}
.text {
width: 64px;
height: 24px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-style: Regular;
font-size: 16px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
}
.btn-active {
width: 120px;
height: 36px;
border-radius: 6px;
background: var(--color-main-active);
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
cursor: pointer;
.icon-active {
width: 16px;
height: 16px;
img {
width: 100%;
height: 100%;
}
}
.text-active {
width: 64px;
height: 24px;
color: rgba(255, 255, 255, 1);
font-family: Microsoft YaHei;
font-style: Regular;
font-size: 16px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: center;
}
}
} }
} }
} }
.layout-main-center { .layout-main-center {
// height: calc(100% - 137px);
overflow: hidden;
} }
} }
.layout-report-box { .layout-report-box {
...@@ -558,8 +655,6 @@ onMounted(() => { ...@@ -558,8 +655,6 @@ onMounted(() => {
.content-left { .content-left {
width: 680px; width: 680px;
height: 786px; height: 786px;
// background: #eee;
// overflow-y: auto;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -569,8 +664,6 @@ onMounted(() => { ...@@ -569,8 +664,6 @@ onMounted(() => {
margin-left: 89px; margin-left: 89px;
width: 680px; width: 680px;
height: 786px; height: 786px;
// background: #eee;
// overflow-y: auto;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
......
...@@ -246,6 +246,7 @@ const handleMouseMove = event => { ...@@ -246,6 +246,7 @@ const handleMouseMove = event => {
}; };
const handleToBillDetail = item => { const handleToBillDetail = item => {
window.sessionStorage.setItem('curTabName', item.title)
const route = router.resolve({ const route = router.resolve({
path: "/billLayout", path: "/billLayout",
query: { query: {
......
...@@ -104,9 +104,8 @@ onMounted(() => { ...@@ -104,9 +104,8 @@ onMounted(() => {
}); });
onUnmounted(() => { onUnmounted(() => {
window.sessionStorage.removeItem('institutionActiveTabName') window.sessionStorage.removeItem("institutionActiveTabName");
}) });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -139,6 +138,9 @@ onUnmounted(() => { ...@@ -139,6 +138,9 @@ onUnmounted(() => {
} }
.header-right { .header-right {
margin-left: 24px; margin-left: 24px;
width: 1350px;
overflow: hidden;
overflow-y: auto;
.title { .title {
margin-top: 26px; margin-top: 26px;
height: 42px; height: 42px;
...@@ -149,6 +151,9 @@ onUnmounted(() => { ...@@ -149,6 +151,9 @@ onUnmounted(() => {
line-height: 42px; line-height: 42px;
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
.en-title { .en-title {
margin-top: 8px; margin-top: 8px;
...@@ -160,10 +165,12 @@ onUnmounted(() => { ...@@ -160,10 +165,12 @@ onUnmounted(() => {
line-height: 24px; line-height: 24px;
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
.desc { .desc {
margin-top: 6px; margin-top: 6px;
height: 24px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
......
...@@ -794,6 +794,7 @@ const handleToPosi = id => { ...@@ -794,6 +794,7 @@ const handleToPosi = id => {
// 跳转到单项制裁页面 // 跳转到单项制裁页面
const handleToRiskSignalDetail = item => { const handleToRiskSignalDetail = item => {
window.sessionStorage.setItem("curTabName", item.title);
const routeData = router.resolve({ const routeData = router.resolve({
path: "/exportControl/singleSanction", path: "/exportControl/singleSanction",
query: { query: {
...@@ -856,6 +857,7 @@ const checkedTime = ref(["全部时间"]); ...@@ -856,6 +857,7 @@ const checkedTime = ref(["全部时间"]);
// 跳转到单条制裁页面,单独打开一个新页面 // 跳转到单条制裁页面,单独打开一个新页面
const handleTitleClick = item => { const handleTitleClick = item => {
window.sessionStorage.setItem("curTabName", `${item.year}-${item.dateStr}${item.title}》`);
const route = router.resolve({ const route = router.resolve({
path: "/exportControl/singleSanction", path: "/exportControl/singleSanction",
query: { query: {
...@@ -872,6 +874,7 @@ import _ from "lodash"; ...@@ -872,6 +874,7 @@ import _ from "lodash";
const handleCompClick = item => { const handleCompClick = item => {
// console.log("item", item); // console.log("item", item);
// if (item.entityType != 2) return; // if (item.entityType != 2) return;
window.sessionStorage.setItem("curTabName", item.name);
const route = router.resolve({ const route = router.resolve({
name: "companyPages", name: "companyPages",
params: { params: {
...@@ -1052,6 +1055,7 @@ const processYearDomainCountData = yearDomainCountData => { ...@@ -1052,6 +1055,7 @@ const processYearDomainCountData = yearDomainCountData => {
const handleEntityClick = item => { const handleEntityClick = item => {
console.log("item", item); console.log("item", item);
window.sessionStorage.setItem("curTabName", item.name || item.entityNameZh);
const route = router.resolve({ const route = router.resolve({
name: "companyPages", name: "companyPages",
params: { params: {
...@@ -1101,6 +1105,10 @@ const handleToEntityList = item => { ...@@ -1101,6 +1105,10 @@ const handleToEntityList = item => {
const currentItem = entitiesDataInfoList.value[currentCarouselIndex.value]; const currentItem = entitiesDataInfoList.value[currentCarouselIndex.value];
id = currentItem?.id; id = currentItem?.id;
} }
window.sessionStorage.setItem(
"curTabName",
entitiesDataInfoList.value[currentCarouselIndex.value].postDate + " 《实体清单新增条目》"
);
const routeData = router.resolve({ const routeData = router.resolve({
path: "/exportControl/singleSanction", path: "/exportControl/singleSanction",
query: { query: {
...@@ -1566,6 +1574,7 @@ const fetchNewsInfo = async () => { ...@@ -1566,6 +1574,7 @@ const fetchNewsInfo = async () => {
const handlePerClick = item => { const handlePerClick = item => {
// console.log("点击了社交媒体消息:", item); // console.log("点击了社交媒体消息:", item);
window.sessionStorage.setItem("curTabName", item.name);
const route = router.resolve({ const route = router.resolve({
path: "/characterPage", path: "/characterPage",
query: { query: {
...@@ -1654,6 +1663,7 @@ const chart1Data = ref({ ...@@ -1654,6 +1663,7 @@ const chart1Data = ref({
const handleSanc = item => { const handleSanc = item => {
console.log(item); console.log(item);
window.sessionStorage.setItem("curTabName", `${item.postDate}${item.title}》`);
const route = router.resolve({ const route = router.resolve({
path: "/exportControl/singleSanction", path: "/exportControl/singleSanction",
query: { query: {
...@@ -1698,6 +1708,7 @@ const handleSwithCurPolicy = name => { ...@@ -1698,6 +1708,7 @@ const handleSwithCurPolicy = name => {
}; };
const handleSearch = () => { const handleSearch = () => {
window.sessionStorage.setItem("curTabName", `搜索-${searchExportControlText.value}`);
const curRoute = router.resolve({ const curRoute = router.resolve({
path: "/searchResults", path: "/searchResults",
query: { query: {
...@@ -2239,7 +2250,7 @@ const handleMediaClick = item => { ...@@ -2239,7 +2250,7 @@ const handleMediaClick = item => {
.home-wrapper { .home-wrapper {
width: 100%; width: 100%;
height: calc(100vh - 96px); height: 100%;
position: relative; position: relative;
overflow-y: hidden; overflow-y: hidden;
......
...@@ -201,6 +201,7 @@ const handlePerClick = item => { ...@@ -201,6 +201,7 @@ const handlePerClick = item => {
// 处理点击实体名称的方法 // 处理点击实体名称的方法
const handleClick = item => { const handleClick = item => {
// console.log("点击了实体名称:", item); // console.log("点击了实体名称:", item);
window.sessionStorage.setItem("curTabName", `${item.year}-${item.date}《${item.name}》`);
const route = router.resolve({ const route = router.resolve({
path: "/exportControl/singleSanction", path: "/exportControl/singleSanction",
query: { query: {
......
...@@ -123,6 +123,7 @@ const router = useRouter(); ...@@ -123,6 +123,7 @@ const router = useRouter();
// 跳转公司详情页 // 跳转公司详情页
const handleCompClick = item => { const handleCompClick = item => {
console.log("item", item); console.log("item", item);
window.sessionStorage.setItem('curTabName', item.entityNameZh || item.entityName)
const route = router.resolve({ const route = router.resolve({
name: "companyPages", name: "companyPages",
params: { params: {
......
...@@ -40,15 +40,15 @@ ...@@ -40,15 +40,15 @@
</template> </template>
<script setup> <script setup>
import { ref } from 'vue' import { ref } from "vue";
import sanctionsOverview from "./components/sanctionsOverview/index.vue" import sanctionsOverview from "./components/sanctionsOverview/index.vue";
import dataStatistics from "./components/dataStatistics/index.vue" import dataStatistics from "./components/dataStatistics/index.vue";
import deepMining from "./components/deepMining/index.vue" import deepMining from "./components/deepMining/index.vue";
import impactAnalysis from "./components/impactAnalysis/index.vue" import impactAnalysis from "./components/impactAnalysis/index.vue";
import title from "./assets/title.png" import title from "./assets/title.png";
import icon01 from "./assets/icon01.png" import icon01 from "./assets/icon01.png";
import icon1 from "../assets/icons/icon1.png"; import icon1 from "../assets/icons/icon1.png";
import icon1Active from "../assets/icons/icon1_active.png"; import icon1Active from "../assets/icons/icon1_active.png";
import icon5 from "../assets/icons/icon5.png"; import icon5 from "../assets/icons/icon5.png";
...@@ -58,7 +58,6 @@ import icon2Active from "../assets/icons/icon2_active.png"; ...@@ -58,7 +58,6 @@ import icon2Active from "../assets/icons/icon2_active.png";
import icon3 from "../assets/icons/icon3.png"; import icon3 from "../assets/icons/icon3.png";
import icon3Active from "../assets/icons/icon3_active.png"; import icon3Active from "../assets/icons/icon3_active.png";
const headerTitle = ref({ const headerTitle = ref({
// img: title, // img: title,
// title: "实体清单", // title: "实体清单",
...@@ -82,159 +81,156 @@ const handleUpdateEntityInfo = (data) => { ...@@ -82,159 +81,156 @@ const handleUpdateEntityInfo = (data) => {
const activeIndex = ref(0) const activeIndex = ref(0)
const headerNavList = ref([ const headerNavList = ref([
{ {
img: icon1, img: icon1,
imgActive: icon1Active, imgActive: icon1Active,
title: "制裁概况" title: "制裁概况"
}, },
{ {
img: icon5, img: icon5,
imgActive: icon5Active, imgActive: icon5Active,
title: "数据统计" title: "数据统计"
}, },
{ {
img: icon2, img: icon2,
imgActive: icon2Active, imgActive: icon2Active,
title: "深度挖掘" title: "深度挖掘"
}, }
// { // {
// img: icon3, // img: icon3,
// imgActive: icon3Active, // imgActive: icon3Active,
// title: "影响分析" // title: "影响分析"
// } // }
]) ]);
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
*{ * {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
.entity-list{ .entity-list {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow-y: auto; overflow-y: auto;
.header{ .header {
width: 100%; width: 100%;
height: 148px; height: 148px;
background-color: #fff; background-color: #fff;
padding-top: 16px; padding-top: 16px;
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 1000; z-index: 1000;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.05); box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.05);
.header-title{ .header-title {
width: 1601px; width: 1601px;
height: 72px; height: 72px;
background-color: rgba(246, 250, 255, 1); background-color: rgba(246, 250, 255, 1);
margin: 0 auto; margin: 0 auto;
border-radius: 10px; border-radius: 10px;
border: 2px solid rgba(174, 214, 255, 1); border: 2px solid rgba(174, 214, 255, 1);
display: flex; display: flex;
align-items: center; align-items: center;
margin-bottom: 12px; margin-bottom: 12px;
position: relative; position: relative;
img { img {
width: 54px; width: 54px;
height: 54px; height: 54px;
margin-left: 15px; margin-left: 15px;
margin-right: 11px; margin-right: 11px;
} }
.title { .title {
font-size: 20px; font-size: 20px;
font-weight: 700; font-weight: 700;
font-family: "Microsoft YaHei"; font-family: "Microsoft YaHei";
line-height: 26px; line-height: 26px;
color: rgb(59, 65, 75); color: rgb(59, 65, 75);
span { span {
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-family: "Microsoft YaHei"; font-family: "Microsoft YaHei";
line-height: 24px; line-height: 24px;
color: rgb(95, 101, 108); color: rgb(95, 101, 108);
margin-left: 11px; margin-left: 11px;
} }
} }
.department { .department {
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-family: "Microsoft YaHei"; font-family: "Microsoft YaHei";
line-height: 24px; line-height: 24px;
color: rgb(95, 101, 108); color: rgb(95, 101, 108);
} }
.btn { .btn {
cursor: pointer; cursor: pointer;
display: flex; display: flex;
align-items: center; align-items: center;
position: absolute; position: absolute;
right: 16px; right: 16px;
top: 25px; top: 25px;
font-size: 18px; font-size: 18px;
font-weight: 700; font-weight: 700;
font-family: "Microsoft YaHei"; font-family: "Microsoft YaHei";
line-height: 24px; line-height: 24px;
color: rgb(5, 95, 194); color: rgb(5, 95, 194);
img { img {
width: 20px; width: 20px;
height: 20px; height: 20px;
margin-right: 7px; margin-right: 7px;
} }
} }
} }
.header-nav { .header-nav {
width: 1601px; width: 1601px;
margin: 0 auto; margin: 0 auto;
height: 48px; height: 48px;
display: flex; display: flex;
align-items: center; align-items: center;
.nav-item {
display: flex;
align-items: center;
height: 100%;
margin-right: 32px;
cursor: pointer;
position: relative;
font-size: 18px;
font-weight: 400;
font-family: "Microsoft YaHei";
color: rgb(59, 65, 75);
&:last-child {
margin-right: 0;
}
img { .nav-item {
width: 16px; display: flex;
height: 16px; align-items: center;
margin-right: 4px; height: 100%;
} margin-right: 32px;
cursor: pointer;
position: relative;
font-size: 18px;
font-weight: 400;
font-family: "Microsoft YaHei";
color: rgb(59, 65, 75);
&.active { &:last-child {
color: rgb(5, 95, 194); margin-right: 0;
font-weight: 700; }
}
.active-line { img {
position: absolute; width: 16px;
bottom: 0; height: 16px;
left: 0; margin-right: 4px;
width: 100%; }
height: 3px;
background-color: #055fc2; &.active {
border-radius: 1.5px; color: rgb(5, 95, 194);
} font-weight: 700;
} }
}
} .active-line {
.main{ position: absolute;
width: 100%; bottom: 0;
height: auto; left: 0;
min-height: calc(100% - 148px); width: 100%;
background-color: #F7F8F9; height: 3px;
} background-color: #055fc2;
border-radius: 1.5px;
}
}
}
}
.main {
width: 100%;
height: auto;
min-height: calc(100% - 148px);
background-color: #f7f8f9;
}
} }
</style> </style>
...@@ -201,6 +201,7 @@ const handleCompClick = item => { ...@@ -201,6 +201,7 @@ const handleCompClick = item => {
ElMessage.warning("暂无数据"); ElMessage.warning("暂无数据");
return; return;
} }
window.sessionStorage.setItem('curTabName', item.name)
const curRoute = router.resolve({ name: "companyPages", params: { id: item.entityId } }); const curRoute = router.resolve({ name: "companyPages", params: { id: item.entityId } });
window.open(curRoute.href, "_blank"); window.open(curRoute.href, "_blank");
}; };
...@@ -208,6 +209,7 @@ const handleCompClick = item => { ...@@ -208,6 +209,7 @@ const handleCompClick = item => {
// 跳转发布机构详情页 // 跳转发布机构详情页
const handleClickDp = () => { const handleClickDp = () => {
// console.log("点击了发布机构:", props.data); // console.log("点击了发布机构:", props.data);
window.sessionStorage.setItem('curTabName', props.data.postOrgName)
const route = router.resolve({ const route = router.resolve({
path: "/institution", path: "/institution",
query: { query: {
...@@ -366,6 +368,7 @@ const props = defineProps({ ...@@ -366,6 +368,7 @@ const props = defineProps({
}); });
// 跳转到人物页 // 跳转到人物页
const handleClick = () => { const handleClick = () => {
window.sessionStorage.setItem("curTabName", props.data.postPersonName)
const route = router.resolve({ const route = router.resolve({
path: "/characterPage", path: "/characterPage",
query: { query: {
...@@ -1008,6 +1011,7 @@ onMounted(() => { ...@@ -1008,6 +1011,7 @@ onMounted(() => {
line-height: 24px; line-height: 24px;
font-family: "Microsoft YaHei"; font-family: "Microsoft YaHei";
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
cursor: pointer;
} }
} }
......
...@@ -1685,7 +1685,7 @@ onMounted(async () => { ...@@ -1685,7 +1685,7 @@ onMounted(async () => {
.home-wrapper { .home-wrapper {
width: 100%; width: 100%;
height: calc(100vh - 96px); height: 100%;
position: relative; position: relative;
overflow-y: hidden; overflow-y: hidden;
.home-main { .home-main {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<div class="content-main"> <div class="content-main">
<!-- 头部按钮 --> <!-- 头部按钮 -->
<div class="content-title"> <div class="content-title">
<div v-for="(value, index) in pageList" :key="index" @click="page = value"> <div v-for="(value, index) in pageList" :key="index" @click="handleClickHeader(value)">
<div class="content-title-item" :style="{ background: page === value ? 'rgba(5, 95, 194, 1)' : '' }"> <div class="content-title-item" :style="{ background: page === value ? 'rgba(5, 95, 194, 1)' : '' }">
<img class="title-icon" :src="`src/assets/images/icon/gjOverPreview-icon-${index + 1}.png`" /> <img class="title-icon" :src="`src/assets/images/icon/gjOverPreview-icon-${index + 1}.png`" />
{{ value }} {{ value }}
...@@ -119,12 +119,24 @@ ...@@ -119,12 +119,24 @@
<script setup> <script setup>
import { ref } from 'vue'; import { ref } from 'vue';
import router from '@/router';
import MeansAnalysis from './component/MeansAnalysis.vue'; import MeansAnalysis from './component/MeansAnalysis.vue';
import ResourceAnalysis from './component/ResourceAnalysis.vue' import ResourceAnalysis from './component/ResourceAnalysis.vue'
import AdvantagesAnalysis from './component/AdvantagesAnalysis.vue' import AdvantagesAnalysis from './component/AdvantagesAnalysis.vue'
const page = ref('首页'); const page = ref('首页');
const pageList = ['首页', '科技动向感知', '中美博弈概览']; const pageList = ['首页', '科技动向感知', '中美博弈概览'];
const handleClickHeader = (value) => {
page.value = value
if(value === '首页' || value === '中美博弈概览') {
router.push({
path: '/overview'
})
}
}
const technologicalTrends = ref({ const technologicalTrends = ref({
image: '/testData/gjOverPreview-data-1.png', image: '/testData/gjOverPreview-data-1.png',
imageTitle: { imageTitle: {
......
...@@ -361,8 +361,9 @@ ...@@ -361,8 +361,9 @@
</div> </div>
</div> </div>
<div class="select-box"> <div class="select-box">
<el-select v-model="value" placeholder="全部领域" style="width: 120px"> <el-select v-model="areaSelect" placeholder="全部领域" style="width: 120px"
<el-option v-for="item in areaList" :key="item.value" :label="item.label" :value="item.value" /> @change="handleFindListBySubjectTypeId">
<el-option v-for="item in areaList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</div> </div>
</div> </div>
...@@ -415,6 +416,7 @@ import getCalendarHeatChart from "./utils/cleandarHeat"; ...@@ -415,6 +416,7 @@ import getCalendarHeatChart from "./utils/cleandarHeat";
import EChart from "@/components/Chart/index.vue"; import EChart from "@/components/Chart/index.vue";
import { pieOption, raderOption } from "./utils/charts"; import { pieOption, raderOption } from "./utils/charts";
import { import {
getAreaType,
getNews, getNews,
getSocialMediaInfo, getSocialMediaInfo,
getBillRiskSignal, getBillRiskSignal,
...@@ -973,6 +975,19 @@ const areaList = ref([ ...@@ -973,6 +975,19 @@ const areaList = ref([
value: "全部领域" value: "全部领域"
} }
]); ]);
const areaSelect = ref([])
//获取行业领域列表
const handleGetAreaType = async () => {
try {
const res = await getAreaType();
console.log("行业领域列表 ", res);
if (res.code === 200 && res.data) {
areaList.value = res.data
}
} catch (error) {
console.error("获取行业领域列表 error", error);
}
};
const categoryList1 = ref(["研究型大学", "国家实验室", "科技企业", "国防承包商"]); const categoryList1 = ref(["研究型大学", "国家实验室", "科技企业", "国防承包商"]);
const activeCate1 = ref(''); const activeCate1 = ref('');
...@@ -1005,7 +1020,7 @@ const handleFindListBySubjectTypeId = async () => { ...@@ -1005,7 +1020,7 @@ const handleFindListBySubjectTypeId = async () => {
try { try {
let params = { let params = {
subjectTypeId: activeCate1.value, subjectTypeId: activeCate1.value,
// arealist: arealist: areaSelect.value,
currentPage: currentPage.value, currentPage: currentPage.value,
pageSize: 16, pageSize: 16,
...@@ -1040,6 +1055,7 @@ const handleToPosi = id => { ...@@ -1040,6 +1055,7 @@ const handleToPosi = id => {
}; };
onMounted(async () => { onMounted(async () => {
handleGetAreaType()
handleGetNews() handleGetNews()
handleGetSocialMediaInfo() handleGetSocialMediaInfo()
handleGetBillRiskSignal() handleGetBillRiskSignal()
...@@ -1063,7 +1079,7 @@ onMounted(async () => { ...@@ -1063,7 +1079,7 @@ onMounted(async () => {
.home-wrapper { .home-wrapper {
width: 100%; width: 100%;
height: calc(100vh - 96px); height: 100%;
position: relative; position: relative;
overflow-y: hidden; overflow-y: hidden;
......
<template>
<div class="timeline-wrapper">
<button class="arrow left" :disabled="index <= 0" @click="index--">
{{ '<' }} </button>
<div class="timeline-box">
<div class="line"></div>
<div v-for="(item, i) in showList" :key="item[idKey]" class="node" :style="leftOffset(i)">
<div class="node" :style="leftOffset(i)">
<div class="time">
{{ item.cooperateDate }}
</div>
<!-- 圆环 -->
<div class="dot" :class="linePos(i, flip)"></div>
<!-- 卡片:放到线右侧 -->
<div class="card" :class="[cardPos(i, flip), 'right-side']" @click="$emit('click-card', item)">
<div class="tag">
{{ item.typeName }}
</div>
<div class="title">
{{ '合作主体:' + item.subjectlist.join(',') }}
<img class="item-header-icon" src="@/assets/images/icon/copy.png" style="cursor: pointer;" />
</div>
<div class="content">
{{ item.cooperateName }}
</div>
</div>
</div>
</div>
</div>
<button class="arrow right" :disabled="index >= total - 5" @click="index++">
{{ '>' }}
</button>
</div>
</template>
<script>
export default {
name: 'TimeLine',
props: {
data: { // 父组件传入的数组
type: Array,
required: true
},
textKey: { // 要显示的文本字段
type: String,
default: 'text'
},
idKey: { // 唯一标识字段
type: String,
default: 'id'
}
},
data() {
return { index: 0 };
},
computed: {
total() {
return this.data.length;
},
showList() {
return this.data.slice(this.index, this.index + 5);
},
flip() { return this.index % 2 === 1; }
},
methods: {
leftOffset(i) {
return { left: `${(i * 100) / 5}%` };
},
/* 上下层翻转(保留上次逻辑) */
cardPos(i, flip = false) {
// return (i % 2) ^ flip ? 'down' : 'up';
return 'down';
},
/* 线延伸方向 = 卡片出现方向 */
linePos(i, flip = false) {
return this.cardPos(i, flip); // up / down
}
}
};
</script>
<style scoped>
/* 样式与之前完全一致,不再重复 */
.timeline-wrapper {
display: flex;
align-items: center;
width: 100%;
position: relative;
padding: 0 40px;
}
.arrow {
position: absolute;
top: 45px;
/* 左右切换按钮 */
width: 24px;
height: 48px;
font-size: 24px;
border-color: #E7F3FF;
border: 0;
background: #E7F3FF;
cursor: pointer;
z-index: 10;
color: #3E84D1;
}
.arrow:disabled {
color: #c0c4cc;
cursor: not-allowed;
}
.left {
left: 0;
border-radius: 0px 4px 4px 0px;
}
.right {
right: 0;
border-radius: 4px 0px 0px 4px;
}
.timeline-box {
flex: 1;
height: 100%;
position: relative;
}
.line {
position: absolute;
left: 0;
right: 0;
top: 50%;
height: 6px;
background-image: url("@/assets/images/bg/timeLine-bg.jpg");
transform: translateY(-50%);
background-size: auto 100%;
}
.node {
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
z-index: 2;
}
/* ===== 圆环基础 ===== */
.dot {
top: -30px;
width: 14px;
height: 14px;
border-radius: 50%;
border: 3px solid #409eff;
background: #fff;
position: relative;
margin: 0 auto;
z-index: 2;
}
/* ===== 延伸线 ===== */
.dot::after {
content: '';
position: absolute;
left: 50%;
transform: translateX(-1px);
/* 居中细线 */
width: 1px;
background: #409eff;
}
/* 向上节点:线往下伸 */
.dot.up::after {
bottom: 100%;
height: 165px;
/* 圆环底部 → 卡片顶 */
}
/* 向下节点:线往上伸 */
.dot.down::after {
top: 100%;
height: 165px;
}
.card {
position: absolute;
padding: 8px 12px;
text-align: left;
cursor: pointer;
font-size: 14px;
/* 容器 299 */
width: 273px;
height: 210px;
border-radius: 4px;
/* 业务系统/模块阴影 */
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: var(--主色/白色主色, rgba(255, 255, 255, 1));
}
.time {
width: 125px;
color: rgba(5, 95, 194, 1);
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 700;
line-height: 26px;
letter-spacing: 0px;
text-align: justify;
margin-bottom: 35px;
margin-left: 125px;
}
.title {
color: rgba(59, 65, 75, 1);
height: 85px;
font-family: Microsoft YaHei;
font-style: Regular;
font-size: 18px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
.content {
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-style: Bold;
font-size: 18px;
font-weight: 700;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
.card.up {
bottom: 20px;
}
.card.down {
top: 55px;
left: 115px;
}
</style>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论