提交 2399015e authored 作者: huhuiqing's avatar huhuiqing

Merge branch 'master' of http://8.140.26.4:10003/caijian/risk-monitor into dev_hhq

......@@ -2,7 +2,7 @@
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<link rel="icon" href="/logo.svg" type="image/svg+xml">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>某方向风险监测预警系统</title>
</head>
......
<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48.000000" height="48.000000" fill="none" customFrame="#000000">
<rect id="logo" width="48.000000" height="48.000000" x="0.000000" y="0.000000" />
<circle id="椭圆 4" cx="24" cy="24" r="24" fill="rgb(5,95,194)" />
<path id="多边形 2(边框)" d="M35.8806 15.2356C37.3616 16.013 38.2893 17.5475 38.2893 19.2201L38.2893 28.7796C38.2893 30.4522 37.3616 31.9868 35.8806 32.7641L26.0912 37.9022C24.7817 38.5895 23.2181 38.5895 21.9085 37.9022L12.1191 32.7641C10.6381 31.9868 9.71045 30.4522 9.71045 28.7796L9.71045 19.2201C9.71045 17.5475 10.6381 16.013 12.1191 15.2356L21.9085 10.0975C23.2181 9.4102 24.7817 9.4102 26.0912 10.0975L35.8806 15.2356ZM34.1378 18.5561L24.3484 13.4179C24.2939 13.3893 24.2375 13.3678 24.1794 13.3535C24.1214 13.3392 24.0615 13.332 23.9999 13.332C23.9382 13.332 23.8784 13.3392 23.8203 13.3535C23.7622 13.3678 23.7059 13.3893 23.6513 13.4179L13.8619 18.5561C13.8002 18.5884 13.7449 18.6277 13.696 18.6737C13.6471 18.7197 13.6047 18.7725 13.5686 18.8321C13.5326 18.8918 13.5055 18.9539 13.4875 19.0186C13.4695 19.0833 13.4604 19.1505 13.4604 19.2201L13.4605 28.7796C13.4605 28.8493 13.4695 28.9164 13.4875 28.9811C13.5055 29.0458 13.5326 29.1079 13.5686 29.1676C13.6047 29.2272 13.6471 29.28 13.696 29.326C13.7449 29.3721 13.8002 29.4113 13.8619 29.4436L23.6513 34.5818C23.7059 34.6104 23.7622 34.6319 23.8203 34.6462C23.8784 34.6605 23.9382 34.6677 23.9999 34.6677C24.0615 34.6677 24.1213 34.6605 24.1795 34.6462C24.2375 34.6319 24.2939 34.6104 24.3484 34.5818L34.1378 29.4436C34.1995 29.4113 34.2548 29.3721 34.3037 29.3261L34.3037 29.3261C34.3526 29.28 34.3951 29.2272 34.4311 29.1676C34.4672 29.1079 34.4942 29.0458 34.5123 28.9811L34.5123 28.981C34.5303 28.9164 34.5393 28.8492 34.5393 28.7796L34.5393 19.2201C34.5393 19.1505 34.5303 19.0833 34.5123 19.0186C34.4942 18.9539 34.4672 18.8918 34.4311 18.8321C34.3951 18.7725 34.3526 18.7197 34.3038 18.6737L34.3037 18.6736C34.2548 18.6276 34.1995 18.5884 34.1378 18.5561Z" fill="rgb(255,255,255)" fill-rule="evenodd" />
<rect id="矩形 4" width="29.250000" height="7.500000" x="9.375000" y="20.250000" fill="rgb(5,95,194)" />
<path id="椭圆 5(边框)" d="M24 18C27.3137 18 30 20.6863 30 24C30 27.3137 27.3137 30 24 30C20.6863 30 18 27.3137 18 24C18 20.6863 20.6863 18 24 18ZM24 21.75C23.8027 21.75 23.6118 21.7741 23.4271 21.8225L23.4271 21.8225C23.3246 21.8493 23.224 21.8836 23.1253 21.9253C23.013 21.9728 22.9059 22.0286 22.8041 22.0927L22.8041 22.0927C22.6622 22.182 22.5306 22.2875 22.409 22.409C22.2875 22.5305 22.1821 22.6622 22.0928 22.804C22.0286 22.9059 21.9728 23.013 21.9253 23.1253C21.8835 23.224 21.8493 23.3246 21.8224 23.4272L21.8224 23.4272C21.7741 23.6118 21.75 23.8027 21.75 24C21.75 24.1973 21.7741 24.3882 21.8224 24.5728L21.8225 24.5729C21.8493 24.6754 21.8836 24.776 21.9253 24.8746C21.9728 24.987 22.0286 25.0941 22.0927 25.1959L22.0928 25.1959L22.0928 25.196C22.1821 25.3378 22.2875 25.4695 22.409 25.591C22.5305 25.7125 22.6622 25.8179 22.8041 25.9073C22.9059 25.9714 23.013 26.0272 23.1253 26.0747C23.224 26.1164 23.3246 26.1507 23.4271 26.1775C23.6118 26.2258 23.8027 26.25 24 26.25C24.1973 26.25 24.3882 26.2259 24.5728 26.1776L24.5728 26.1776L24.5729 26.1775C24.6754 26.1507 24.776 26.1164 24.8746 26.0747C24.987 26.0272 25.0941 25.9714 25.196 25.9072C25.3378 25.8179 25.4695 25.7125 25.591 25.591C25.7125 25.4695 25.8179 25.3378 25.9072 25.196L25.9072 25.196C25.9714 25.0941 26.0272 24.987 26.0747 24.8747C26.1165 24.776 26.1507 24.6754 26.1776 24.5728C26.2259 24.3882 26.25 24.1973 26.25 24C26.25 23.8027 26.2258 23.6118 26.1775 23.4271C26.1507 23.3246 26.1164 23.224 26.0747 23.1253C26.0272 23.013 25.9714 22.9059 25.9072 22.8041L25.9072 22.804C25.8179 22.6622 25.7125 22.5305 25.591 22.409C25.4695 22.2875 25.3378 22.1821 25.196 22.0928L25.1959 22.0927C25.0941 22.0286 24.987 21.9728 24.8747 21.9253C24.776 21.8836 24.6754 21.8493 24.5729 21.8225L24.5728 21.8224C24.3882 21.7741 24.1973 21.75 24 21.75Z" fill="rgb(255,255,255)" fill-rule="evenodd" />
<rect id="矩形 3" width="3.750000" height="7.500000" x="22.125000" y="28.875000" fill="rgb(255,255,255)" />
</svg>
<template>
<div id="app">
<el-container class="wrapper">
<el-header>
<nav class="navbar">
<div class="nav-brand">
<div class="brand-icon">
<img src="@/assets/icons/header-logo.png" alt="" />
</div>
<div class="brand-text" @click="handleToHome">
<div class="text-ch">某方向风险监测预警系统</div>
</div>
<div class="pro-wrapper">
<div class="navbar">
<div class="nav-brand">
<div class="brand-icon">
<img src="@/assets/icons/header-logo.png" alt="" />
</div>
<div class="user-info">
<div class="email">
<img src="@/assets/icons/header-icon.png" alt="" />
</div>
<div class="avator">
<img src="@/assets/icons/header-avator.png" alt="" />
</div>
<span class="user">管理员</span>
<div class="brand-text" @click="handleToHome">
<div class="text-ch">某方向风险监测预警系统</div>
</div>
</nav>
</el-header>
<el-main class="main-container">
<router-view />
</el-main>
<div class="ai-btn" @click="openAiBox">
<div class="icon">
<img src="@/assets/icons/ai-icon.png" alt="" />
</div>
<div class="user-info">
<div class="email">
<img src="@/assets/icons/header-icon.png" alt="" />
</div>
<div class="text">智能问答</div>
<div class="avator">
<img src="@/assets/icons/header-avator.png" alt="" />
</div>
<span class="user">管理员</span>
</div>
</div>
<div class="main-container">
<router-view />
</div>
<div class="ai-btn" @click="openAiBox">
<div class="icon">
<img src="@/assets/icons/ai-icon.png" alt="" />
</div>
<div class="text">智能问答</div>
</div>
<div class="ai-dialog" v-if="isShowAiBox">
<AiBox @close="closeAiBox" />
</div>
</el-container>
</div>
</div>
</template>
......@@ -46,7 +43,7 @@ import { Monitor, House, User, Location, Document, Bell, Message, ArrowDown } fr
import { useRouter } from "vue-router";
import Breadcrumb from "@/components/BreadCrumb/index.vue";
import AiBox from "./components/AiBox.vue";
import {getPersonType} from '@/api/common/index'
import { getPersonType } from "@/api/common/index";
// import { useDraggable } from "@vueuse/core";
const router = useRouter();
......@@ -86,29 +83,25 @@ const handleHomeCommand = command => {
router.push(command);
};
const personTypeList = ref([])
const personTypeList = ref([]);
// 获取人物类别
const handleGetPersonType = async() => {
const handleGetPersonType = async () => {
try {
const res = await getPersonType()
console.log('res', res);
if(res.code === 200) {
personTypeList.value = res.data
const res = await getPersonType();
console.log("res", res);
if (res.code === 200) {
personTypeList.value = res.data;
} else {
personTypeList.value = []
personTypeList.value = [];
}
window.sessionStorage.setItem('personTypeList', JSON.stringify(personTypeList.value))
} catch (error) {
}
}
window.sessionStorage.setItem("personTypeList", JSON.stringify(personTypeList.value));
} catch (error) {}
};
onMounted(() => {
handleGetPersonType()
})
handleGetPersonType();
});
</script>
<style>
......@@ -141,7 +134,7 @@ body {
text-align: justify;
}
.el-popper[data-popper-placement^=top]>.el-popper__arrow:before {
.el-popper[data-popper-placement^="top"] > .el-popper__arrow:before {
display: none;
}
</style>
......@@ -149,173 +142,106 @@ body {
<style lang="scss" scoped>
#app {
font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
width: 100%;
height: 100vh;
// overflow-y: hidden;
}
/* 确保Element Plus容器组件占满宽度 */
.el-container {
width: 100%;
height: 100%;
}
.navbar {
display: flex;
justify-content: center;
align-items: center;
background: white;
color: #333;
height: 100%;
border-bottom: 1px solid #e5e7eb;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
position: relative;
box-sizing: border-box;
height: 96px;
}
.main-container {
/* 移除宽度限制,让子页面自己控制布局 */
width: 100%;
height: 984px;
.pro-wrapper {
width: 100vw;
height: 100vh;
position: relative;
}
.nav-brand {
display: flex;
align-items: center;
gap: 12px;
position: absolute;
left: 160px;
.brand-icon {
width: 48px;
height: 48px;
img {
width: 100%;
height: 100%;
}
}
}
.brand-icon {
font-size: 24px;
color: #1e3a8a;
}
.brand-text {
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 {
overflow: hidden;
.navbar {
display: flex;
justify-content: center;
align-items: center;
background: #fff;
color: rgba(10, 18, 30, 1);
font-family: Microsoft YaHei;
font-size: 10px;
font-weight: 400;
line-height: 13px;
}
}
.nav-menu {
display: flex;
align-items: center;
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;
}
border-bottom: 1px solid #e5e7eb;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
position: relative;
box-sizing: border-box;
height: 72px;
.nav-brand {
display: flex;
align-items: center;
gap: 12px;
position: absolute;
left: 160px;
.brand-icon {
width: 48px;
height: 48px;
img {
width: 100%;
height: 100%;
}
}
.dropdown-trigger {
cursor: pointer;
}
.brand-text {
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;
}
}
}
.dropdown-arrow {
font-size: 12px;
margin-left: 4px;
transition: transform 0.3s;
}
.user-info {
display: flex;
align-items: center;
gap: 20px;
padding: 8px 12px;
border-radius: 6px;
color: #333;
position: absolute;
right: 160px;
.email {
width: 20px;
height: 20px;
img {
width: 100%;
height: 100%;
}
}
.home-dropdown:hover .dropdown-arrow {
transform: rotate(180deg);
}
.avator {
width: 32px;
height: 32px;
.user-info {
display: flex;
align-items: center;
gap: 20px;
padding: 8px 12px;
border-radius: 6px;
color: #333;
position: absolute;
right: 160px;
.email {
width: 20px;
height: 20px;
img {
width: 100%;
height: 100%;
}
}
.avator {
width: 32px;
height: 32px;
img {
width: 100%;
height: 100%;
}
}
img {
width: 100%;
height: 100%;
.user {
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 30px;
}
}
}
.user {
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 30px;
}
}
.wrapper {
position: relative;
.target {
// position: absolute;
// bottom: 20%;
// right: 46px;
z-index: 9999;
.main-container {
width: 100%;
height: calc(100vh - 72px);
position: relative;
overflow: hidden;
}
.ai-btn {
position: absolute;
bottom: 240px;
......@@ -344,7 +270,6 @@ body {
text-align: center;
}
}
.ai-dialog {
position: absolute;
right: 100px;
......@@ -352,19 +277,4 @@ body {
z-index: 9999;
}
}
.el-header {
padding: 0;
height: 96px;
position: relative;
z-index: 1;
}
.el-main {
padding: 0;
height: calc(100vh - 96px);
overflow: hidden;
overflow-y: auto;
background-color: rgba(246, 251, 255, 1);
}
</style>
......@@ -76,4 +76,23 @@ export function getCoopRestrictionDomain(params) {
url: `/api/cooperationlimitinfo/getLimitArea`,
params
})
}
// 合作限制-获取合作限制列表接口
/**
* @param {area} 涉及领域
* @param {currentPage} 当前页码
* @param {pageSize} 每页数量
* @param {sortOrder} 排序顺序
* @param {source} 合作来源
* @param {sortField} 排序字段
* @param {type} 合作限制类型
* @header token
*/
export function getCoopRestrictionList(params) {
return request({
method: 'GET',
url: `/api/cooperationlimitinfo/statList`,
params
})
}
\ No newline at end of file
<template>
<div class="info-wrapper">
<div class="header-item">国家科技安全</div>
<div class="header-item">></div>
<div class="header-item back-item" @click="handleBackHome">中美博弈概览</div>
<div class="header-item">></div>
<div class="header-item">{{ curTitleName }}</div>
</div>
</template>
<script setup>
import { ref, onMounted } from "vue";
import router from "@/router";
const props = defineProps({
curTitleName: {
type: String,
required: true
}
});
// 返回首页
const handleBackHome = () => {
router.push({
path: "/overview"
});
};
</script>
<style lang="scss" scoped>
.info-wrapper {
height: 64px;
line-height: 64px;
display: flex;
justify-content: flex-end;
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 700;
color: #fff;
.header-item {
margin: 0 3px;
}
.back-item {
cursor: pointer;
&:hover {
color: #ccc;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="menu-wrapper">
<div class="menu-item" @click="handleToOverview">
<div class="menu-item-icon">
<img src="@/assets/icons/home-header-icon1.png" alt="" />
</div>
<div class="menu-item-text">{{ "首页" }}</div>
</div>
<div class="menu-item" @click="handleToGjOverview">
<div class="menu-item-icon1">
<img src="@/assets/icons/home-header-icon2.png" alt="" />
</div>
<div class="menu-item-text">{{ "国家" }}</div>
</div>
<div class="menu-item">
<div class="menu-item-icon2">
<img src="@/assets/icons/home-header-icon3.png" alt="" />
</div>
<div class="menu-item-text">{{ "领域" }}</div>
</div>
<div class="menu-item">
<div class="menu-item-icon3">
<img src="@/assets/icons/home-header-icon4.png" alt="" />
</div>
<div class="menu-item-text">{{ "要素" }}</div>
</div>
<div class="menu-item">
<div class="menu-item-icon4">
<img src="@/assets/icons/home-header-icon5.png" alt="" />
</div>
<div class="menu-item-text">{{ "事件" }}</div>
</div>
</div>
</template>
<script setup>
import {ref, onMounted} from 'vue'
import router from '@/router';
const handleToOverview = () => {
router.push({
path: "/overview"
});
}
const handleToGjOverview = () => {
router.push({
path: "/gjOverview"
});
}
</script>
<style lang="scss" scoped>
.menu-wrapper {
width: 644px;
height: 64px;
display: flex;
justify-content: space-between;
.menu-item {
display: flex;
gap: 11px;
width: 112px;
height: 64px;
justify-content: center;
align-items: center;
cursor: pointer;
&:hover{
background: rgba(5, 95, 194, 0.2);
}
.menu-item-icon {
// margin-top: 2px;
width: 22px;
height: 22px;
img {
width: 100%;
height: 100%;
}
}
.menu-item-icon1 {
// margin-top: 4px;
width: 24px;
height: 24px;
img {
width: 100%;
height: 100%;
}
}
.menu-item-icon2 {
// margin-top: 4px;
width: 24px;
height: 22px;
img {
width: 100%;
height: 100%;
}
}
.menu-item-icon3 {
// margin-top: 2px;
width: 20px;
height: 20px;
img {
width: 100%;
height: 100%;
}
}
.menu-item-icon4 {
width: 22px;
height: 20px;
img {
width: 100%;
height: 100%;
}
}
.menu-item-text {
// margin-top: 16px;
height: 32px;
color: rgba(255, 255, 255, 1);
font-family: Microsoft YaHei;
font-style: Bold;
font-size: 24px;
font-weight: 700;
line-height: 32px;
letter-spacing: 0px;
text-align: left;
}
}
}
</style>
\ No newline at end of file
......@@ -22,7 +22,13 @@ const router = createRouter({
// 路由守卫 - 设置页面标题
router.beforeEach((to, from, next) => {
if (to.meta.title) {
document.title = to.meta.title
if (to.meta.dynamicTitle) {
console.log('to', to);
document.title = window.sessionStorage.getItem("curTabName") || to.meta.title;
} else {
document.title = to.meta.title
}
}
next();
});
......
......@@ -9,16 +9,16 @@ const innovationSubjectRoutes = [
name: "InnovationSubject",
component: InnovationSubject,
meta: {
title: "主要创新主体"
title: "M国主要创新主体分析概览"
}
},
{
path: "/InnovativeInstitutions/:id",
name: "InnovativeInstitutions",
component: InnovationInstitution,
meta: {
title: "学校详情"
},
// meta: {
// title: "学校详情"
// },
}
]
......
......@@ -22,7 +22,7 @@ const billRoutes = [
name: "BillHome",
component: BillHome,
meta: {
title: "法案首页"
title: "科技法案概览"
}
},
{
......@@ -31,7 +31,8 @@ const billRoutes = [
component: BillLayoutContainer,
redirect: "/billLayout/bill",
meta: {
title: "法案布局"
title: "法案详情",
dynamicTitle: true // 标记需要动态设置标题
},
children: [
// 法案分析路由
......@@ -40,27 +41,30 @@ const billRoutes = [
name: "BillLayout",
component: BillLayout,
redirect: "/billLayout/bill/introduction",
meta: {
title: "法案分析"
},
// meta: {
// title: "法案分析",
// },
children: [
{
path: "introduction",
name: "BillIntroduction",
component: BillIntroduction,
meta: { title: "法案简介" }
// meta: {
// title: "法案简介"
// }
},
{
path: "background",
name: "BillBackground",
component: BillBackground,
meta: { title: "法案背景" }
// meta: { title: "法案背景" }
},
{
path: "template",
name: "BillTemplate",
component: BillTemplate,
meta: { title: "内容概要" }
// meta: { title: "内容概要" }
}
]
},
......@@ -70,27 +74,27 @@ const billRoutes = [
name: "BillDeepDigLayout",
component: BillDeepDigLayout,
redirect: "/billLayout/deepDig/processOverview",
meta: {
title: "深度挖掘"
},
// meta: {
// title: "深度挖掘"
// },
children: [
{
path: "processOverview",
name: "BillDeepDigProcessOverview",
component: BillDeepDigProcessOverview,
meta: { title: "流程概要" }
// meta: { title: "流程概要" }
},
{
path: "processAnalysis",
name: "BillDeepDigProcessAnalysis",
component: BillDeepDigProcessAnalysis,
meta: { title: "流程分析" }
// meta: { title: "流程分析" }
},
{
path: "poliContribution",
name: "BillDeepDigPoliContribution",
component: BillDeepDigPoliContribution,
meta: { title: "政治献金" }
// meta: { title: "政治献金" }
}
]
},
......@@ -100,21 +104,21 @@ const billRoutes = [
name: "BillInfluenceLayout",
component: BillInfluenceLayout,
redirect: "/billLayout/influence/industry",
meta: {
title: "影响分析"
},
// meta: {
// title: "影响分析"
// },
children: [
{
path: "industry",
name: "BillInfluenceIndustry",
component: BillInfluenceIndustry,
meta: { title: "对华产业影响" }
// meta: { title: "对华产业影响" }
},
{
path: "scientificResearch",
name: "BillInfluenceScientificResearch",
component: BillInfluenceScientificResearch,
meta: { title: "对华科研影响" }
// meta: { title: "对华科研影响" }
}
]
},
......@@ -122,9 +126,9 @@ const billRoutes = [
path: "relevantCircumstance",
name: "BillRelevantCircumstance",
component: BillRelevantCircumstance,
meta: {
title: "相关情况"
}
// meta: {
// title: "相关情况"
// }
}
]
},
......
......@@ -10,7 +10,8 @@ const characterPageRoutes = [
name: "CharacterPage",
component: CharacterPage,
meta: {
title: "人物主页"
title: "人物主页",
dynamicTitle: true
}
}
......
......@@ -8,7 +8,8 @@ const companyPagesRoutes = [
name: "companyPages",
component: companyPages,
meta: {
title: "企业主页"
title: "企业主页",
dynamicTitle: true
}
},
......
......@@ -10,7 +10,7 @@ const comprehensiveSearchRoutes = [
name: "comprehensiveSearch",
component: ComprehensiveSearch,
meta: {
title: "综合搜索"
title: "搜索-科技安全"
}
},
{
......@@ -18,7 +18,8 @@ const comprehensiveSearchRoutes = [
name: "searchResults",
component: SearchResults,
meta: {
title: "搜索结果"
title: "搜索结果",
dynamicTitle: true
}
},
{
......
......@@ -9,7 +9,7 @@ const cooperationRestrictionsRoutes = [
name: "CooperationRestrictions",
component: CooperationRestrictions,
meta: {
title: "合作限制"
title: "合作限制概览"
}
},
// 合作限制详情
......@@ -18,7 +18,8 @@ const cooperationRestrictionsRoutes = [
name: "CooperationRestrictionsDetail",
component: CooperationRestrictionsDetail,
meta: {
title: "合作限制详情"
title: "合作限制详情",
dynamicTitle: true
}
},
......
......@@ -15,7 +15,7 @@ const decreeRoutes = [
name: "Decree",
component: Decree,
meta: {
title: "政令"
title: "政令概览"
}
},
{
......@@ -23,9 +23,9 @@ const decreeRoutes = [
name: "DecreeLayoutContainer",
component: DecreeLayoutContainer,
redirect: "/decreeLayout/overview",
meta: {
title: "政令布局"
},
// meta: {
// title: "政令布局"
// },
children: [
{
path: "overview",
......@@ -33,20 +33,21 @@ const decreeRoutes = [
component: DecreeOverviewLayout,
redirect: "/decreeLayout/overview/introduction",
meta: {
title: "政令概况"
title: "政令详情",
dynamicTitle: true // 标记需要动态设置标题
},
children: [
{
path: "introduction",
name: "DecreeIntroduction",
component: DecreeIntroduction,
meta: { title: "政令简介" }
// meta: { title: "政令简介" }
},
{
path: "background",
name: "DecreeBackground",
component: DecreeBackground,
meta: { title: "政令背景" }
// meta: { title: "政令背景" }
}
]
},
......@@ -55,18 +56,18 @@ const decreeRoutes = [
path: "deepDig",
name: "DeepDig",
component: DecreeDeepDig,
meta: {
title: "深度挖掘"
}
// meta: {
// title: "深度挖掘"
// }
},
// 影响分析路由
{
path: "influence",
name: "DecreeInfluence",
component: DecreeInfluence,
meta: {
title: "影响分析"
}
// meta: {
// title: "影响分析"
// }
}
]
},
......@@ -75,7 +76,8 @@ const decreeRoutes = [
name: "Institution",
component: Institution,
meta: {
title: "行政机构主页"
title: "行政机构主页",
dynamicTitle: true
}
}
......
......@@ -8,7 +8,7 @@ const exportControlRoutes = [
name: "ExportControl",
component: ExportControl,
meta: {
title: "出口管制"
title: "出口管制概览"
}
},
{
......@@ -92,7 +92,7 @@ const exportControlRoutes = [
name: "entityList",
component: () => import("@/views/exportControl/v2.0EntityList/index.vue"),
meta: {
title: "全部实体清单"
title: "实体清单概览"
}
},
// V2.0单条制裁详情
......@@ -101,7 +101,8 @@ const exportControlRoutes = [
name: "singleSanction",
component: () => import("@/views/exportControl/v2.0SingleSanction/index.vue"),
meta: {
title: "单条制裁详情"
title: "单条制裁详情",
dynamicTitle: true
}
},
// V2.0单条制裁详情-实体清单原文
......@@ -109,9 +110,9 @@ const exportControlRoutes = [
path: "/exportControl/origin",
name: "entityListOrigin",
component: () => import("@/views/exportControl/v2.0SingleSanction/originPage/index.vue"),
meta: {
title: "实体清单原文"
}
// meta: {
// title: "实体清单原文"
// }
},
]
......
......@@ -8,7 +8,7 @@ const financeRoutes = [
name: "finance",
component: Finance,
meta: {
title: "投融资限制"
title: "投融资限制概览"
}
},
......
......@@ -15,35 +15,36 @@ const marketAccessRestrictionsRoutes = [
name: "MarketAccessRestrictions",
component: MarketAccessRestrictions,
meta: {
title: "市场准入限制"
title: "市场准入限制概览"
}
},
{
path: "/marketAccessLayout",
name: "MarketAccessLayout",
component: MarketAccessLayout,
redirect: "/marketAccessLayout/overview",
redirect: "/marketAccessLayout/case",
meta: {
title: "市场准入限制布局"
title: "调查概览",
dynamicTitle: true
},
children: [
{
path: "overview",
name: "MarketAccessOverview",
component: MarketAccessOverview,
meta: {
title: "调查概况"
}
},
{
path: "case",
name: "MarketAccessCase",
component: MarketAccessCase,
meta: {
title: "调查案件"
}
// meta: {
// title: "调查案件"
// }
},
{
path: "overview",
name: "MarketAccessOverview",
component: MarketAccessOverview,
// meta: {
// title: "数据统计"
// }
}
]
},
......@@ -53,24 +54,25 @@ const marketAccessRestrictionsRoutes = [
component: MarketSingleCaseLayout,
redirect: "/marketSingleCaseLayout/overview",
meta: {
title: "单次调查案件布局"
title: "调查详情",
dynamicTitle: true
},
children: [
{
path: "overview",
name: "MarketSingleCaseOverview",
component: MarketSingleCaseOverview,
meta: {
title: "调查简介"
}
// meta: {
// title: "调查简介"
// }
},
{
path: "deepdig",
name: "MarketSingleCaseDeepdig",
component: MarketSingleCaseDeepdig,
meta: {
title: "深度挖掘"
}
// meta: {
// title: "深度挖掘"
// }
}
]
},
......
......@@ -14,7 +14,7 @@ const overViewRoutes = [
name: "overView",
component: overView,
meta: {
title: "中美博弈概览"
title: "中美科技博弈概览"
}
},
// GJ概览页面路由
......
......@@ -9,7 +9,7 @@ const ruleRestrictionsRoutes = [
name: "RuleRestrictions",
component: RuleRestriction,
meta: {
title: "规则限制"
title: "规则限制概览"
}
},
// 规则限制详情
......@@ -18,7 +18,8 @@ const ruleRestrictionsRoutes = [
name: "RuleRestrictionsDetail",
component: RuleRestrictionDetail,
meta: {
title: "规则限制详情"
title: "规则限制详情",
dynamicTitle: true
}
},
......
......@@ -8,7 +8,7 @@ const scientificFundingRoutes = [
name: "ScientificFunding",
component: ScientificFunding,
meta: {
title: "科研资助体系"
title: "M国科研资助体系分析概览"
}
}
......
......@@ -2,13 +2,12 @@
import TechnologyFigures from "@/views/technologyFigures/index.vue";
const technologyFiguresRoutes = [
//创新主体
{
path: "/technologyFigures",
name: "TechnologyFigures",
component: TechnologyFigures,
meta: {
title: "主要创新主体"
title: "M国科技人物观点分析概览"
}
}
......
......@@ -10,7 +10,7 @@ const thinktankRoutes = [
name: "thinkTank",
component: thinkTank,
meta: {
title: "首页"
title: "科技智库概览"
}
},
{
......@@ -18,7 +18,8 @@ const thinktankRoutes = [
name: "ThinkTankDetail",
component: ThinkTankDetail,
meta: {
title: "智库详情"
title: "智库概览",
dynamicTitle: true
}
},
{
......@@ -26,16 +27,17 @@ const thinktankRoutes = [
name: "ReportDetail",
component: ReportDetail,
meta: {
title: "报告详情"
title: "报告详情",
dynamicTitle: true
}
},
{
path: "/thinkTank/reportOriginal/:id",
name: "ReportOriginal",
component: ReportOriginal,
meta: {
title: "报告原文"
}
// meta: {
// title: "报告原文"
// }
},
]
......
......@@ -220,6 +220,7 @@ const handleClickEvent = item => {
// 跳转人员详情
const handleClickUser = item => {
window.sessionStorage.setItem('curTabName', item.name)
const routeData = router.resolve({
path: "/characterPage",
query: {
......
......@@ -116,62 +116,6 @@ const handleClickLeftSiderBtn = (item) => {
}
})
}
const progressList = ref([
{
tip: true,
date: "7月5日",
title:
"特朗普于美国独立日签署法案,​公法编号Pub. L. No. 119-21。白宫举行庆典,B-2轰炸机飞越上空,象征“美国新时代”开启。",
degree: "特别重大风险",
rank: 4,
},
{
tip: true,
date: "7月4日",
title:
"众议院最终表决218票赞成 vs 214票反对,修订版法案以4票优势通过,2名共和党议员倒戈,民主党全员反对。",
degree: "重大风险",
rank: 3,
},
{
tip: true,
date: "7月3日",
title:
"民主党领袖杰弗里斯发表 ​8小时45分钟​ 演讲(众议院现代史最长),抗议法案“劫贫济富”,但仍未阻止表决。",
degree: "较大风险",
rank: 2,
},
{
tip: true,
date: "7月2日",
title:
"众议院以 ​219:213​ 通过程序规则,为最终表决铺路。此前4名共和党议员反对程序规则,议长约翰逊紧急游说挽回1票。",
degree: "低风险",
rank: 1,
},
{
tip: false,
date: "7月1日",
title:
"参议院最终表决投票51:50​,副总统万斯(JD Vance)投出关键票打破平局。3名共和党参议员倒戈(蒂利斯、保罗、柯林斯)。",
degree: "",
},
]);
const wordCloudData = [
{ name: "财政保守主义", value: 100 },
{ name: "移民与边境安全", value: 5 },
{ name: "削减市民福利", value: 77 },
{ name: "债务驱动型经济", value: 35 },
{ name: "传统能源", value: 96 },
{ name: "与马斯克公开冲突", value: 57 },
{ name: "共和党财政鹰派", value: 72 },
{ name: "财政问责法案", value: 18 },
{ name: "强硬边境政策", value: 34 },
{ name: "扩大军费", value: 16 },
{ name: "债务与赤字警告", value: 72 },
{ name: "批评美国债务膨胀", value: 58 },
];
onMounted(() => {});
</script>
......
......@@ -177,7 +177,7 @@
</div>
<div class="info-box">
<div class="info-left">
<img :src="defaultAvatar" alt="" @click="handleClickAvatar(curPerson.id)"/>
<img :src="defaultAvatar" alt="" @click="handleClickAvatar(curPerson)"/>
<div class="usr-icon1">
<img src="./assets/images/usr-icon1.png" alt="" />
</div>
......@@ -360,11 +360,12 @@ const route = useRoute();
const router = useRouter();
// 跳转到人物页面
const handleClickAvatar = id => {
const handleClickAvatar = item => {
window.sessionStorage.setItem('curTabName', item.name)
const routeData = router.resolve({
path: "/characterPage",
query: {
personId: id
personId: item.id
}
});
window.open(routeData.href, "_blank");
......
......@@ -67,14 +67,16 @@
class="content ai-content"
v-html="renderMarkdown(message.content)"
></div>
<div v-if="message.raw_data?.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="answer-title">完整实体列表</div>
<div v-if="message.raw_data?.length || message.raw_data?.rows?.length" class="content row-content">
<div class="row-header">
<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?.industry }}</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 class="row-main">
<div
......@@ -194,6 +196,10 @@ const areaList = ref([
label: "法案",
value: "法案"
},
{
label: "法案RAG",
value: "法案RAG"
},
{
label: "清单",
value: "清单"
......@@ -920,8 +926,9 @@ const sendMessage = async () => {
userInput.value = "";
aiMessage.value = "";
if (curArea.value === "法案") {
// await connectSSE(question);
handleBillChat(question)
handleBillChat(question);
} else if (curArea.value === "法案RAG") {
await connectSSE(question);
} else {
handleListChat(question);
}
......
......@@ -64,7 +64,7 @@
</el-select>
</div> -->
</div>
<div class="summary-box">
<!-- <div class="summary-box">
<div class="summary-header">
<img src="./assets/images/summary-icon.png" alt="" />
</div>
......@@ -73,8 +73,8 @@
` 美国众议院共和党人正在起草一项新提案,以限制美国对中国的投资。此前,参议院已将其纳入国防政策立法中。知情人士向Semafor透露,众议院工作人员希望在11月7日前就该提案达成共识,并将财政部的反馈纳入由肯塔基州共和党众议员安迪·巴尔提出的配套提案中(尽管政府停摆可能推迟这一时间表)。随后,众议员将利用该文本与参议员就最终《国防授权法案》的内容进行协商。此前一届国会中,类似的尝试因北卡罗来纳州前众议员帕特里克·麦克亨利的反对而失败,但本届国会中,“所有人都在共同努力”。知情人士补充说,领导人并不担心此举会剥夺特朗普在周四与中国领导人习近平会谈时的谈判筹码,因为财政部已开始实施类似的指导方针。`
}}
</div>
</div>
<div class="header-right">
</div> -->
<!-- <div class="header-right">
<div class="header-right-header">{{ "关联检索" }}</div>
<div class="header-right-main">
<div class="header-right-main-item" v-for="(item, index) in relatedSearchList" :key="index">
......@@ -84,7 +84,7 @@
<div class="text">{{ item }}</div>
</div>
</div>
</div>
</div> -->
</div>
<div class="main">
<div class="item" v-for="(item, index) in searchResults" :key="index" @click="handleToPage(item)">
......@@ -92,8 +92,8 @@
<img :src="item?.img" alt="" />
</div>
<div class="item-right">
<div class="title" v-html="item?.title"></div>
<div class="content" v-html="item?.description"></div>
<div class="title" v-html="item?.originalTitle"></div>
<div class="content" v-html="item?.originalDescription"></div>
<div class="item-right-footer">
<div class="time">{{ item?.date }}</div>
<div class="tag tag3">
......
......@@ -8,7 +8,7 @@
<div class="left-top-title">合作限制动态</div>
<div class="more" @click="handleClickToDetail">查看详情 ></div>
</div>
<el-carousel
ref="carouselRef"
height="412px"
......@@ -42,8 +42,10 @@
<li>
<span class="ul-title">涉及领域:</span>
<div class="ul-tags" v-if="item.AREA">
<span
v-for="(field, fIndex) in (typeof item.AREA === 'string' ? item.AREA.split(',') : item.AREA)"
<span
v-for="(field, fIndex) in typeof item.AREA === 'string'
? item.AREA.split(',')
: item.AREA"
:key="fIndex"
class="ul-pie"
:class="'cl' + ((fIndex % 3) + 1)"
......@@ -68,7 +70,7 @@
</div>
</div>
</el-carousel-item>
<!-- 无数据时的占位展示 -->
<el-carousel-item v-if="coopRestrictionTrends.length === 0">
<div class="carousel-item-content">
......@@ -99,7 +101,7 @@
</div>
</div>
<div style="margin: 6px 34px 0 23px">
<div v-for="item in riskSignals" :key="item.id" class="right-main" @click="handleToRiskDetail">
<div v-for="item in riskSignals" :key="item.id" class="right-main" @click="handleToRiskDetail">
<div class="main-left" :class="{ cl4: item.title === '特别重大', cl5: item.title === '重大风险' }">
{{ item.title }}
</div>
......@@ -134,7 +136,7 @@ const getCoopRestrictionTrendsData = async () => {
}
} catch (error) {
console.error("获取合作限制最新动态数据失败:", error);
}
}
};
// 轮播图手动切换
......@@ -150,7 +152,7 @@ const handleNext = () => {
};
// 轮播切换回调
const handleCarouselChange = (index) => {
const handleCarouselChange = index => {
activeIndex.value = index;
};
......@@ -160,7 +162,7 @@ const mainTrend = computed(() => {
return coopRestrictionTrends.value[activeIndex.value] || coopRestrictionTrends.value[0];
});
// 右侧风险信号列表
// 右侧风险信号列表
const riskSignals = ref([
{
id: 1,
......@@ -189,13 +191,15 @@ const riskSignals = ref([
]);
// 点击查看详情
const handleClickToDetail = (item) => {
const activeItem = (item && item.ID) ? item : mainTrend.value;
const handleClickToDetail = item => {
const activeItem = item && item.ID ? item : mainTrend.value;
const id = activeItem?.ID;
if (!id) return;
window.sessionStorage.setItem("curTabName", activeItem?.LIMITNAME);
const curRoute = router.resolve({
path: "/cooperationRestrictions/detail",
query: { id: id },
query: { id: id }
});
window.open(curRoute.href, "_blank");
};
......@@ -214,7 +218,7 @@ const handleToMoreRiskSignal = () => {
onMounted(() => {
// 合作限制-最新动态数据-获取数据
getCoopRestrictionTrendsData();
getCoopRestrictionTrendsData();
});
</script>
......@@ -335,6 +339,14 @@ onMounted(() => {
margin-bottom: 12px;
display: flex;
align-items: flex-start;
&::before {
content: "·";
font-size: 24px;
line-height: 20px;
font-weight: bold;
margin-right: 16px;
color: rgb(59, 65, 75);
}
.ul-title {
flex-shrink: 0;
width: 120px;
......@@ -413,6 +425,16 @@ onMounted(() => {
line-height: 24px;
color: rgb(59, 65, 75);
margin-bottom: 10px;
display: flex;
align-items: center;
&::before {
content: "·";
font-size: 24px;
line-height: 20px;
font-weight: bold;
margin-right: 12px;
color: rgb(59, 65, 75);
}
}
}
.left-bottom-content {
......
<template>
<div class="coop-page">
<!-- 吸顶简易搜索框 -->
<div class="search-header" v-show="isShow">
<div class="home-main-header-center">
<input v-model="input" class="search-input" placeholder="搜索合作限制" />
<div class="search-btn-small" @click="handleSearch">
<div class="search-icon">
<img src="./assets/icons/search-icon.png" alt="" />
</div>
<div class="search-text">搜索</div>
</div>
</div>
<div class="home-main-header-btn-box">
<div class="btn" @click="handleToPosi('position1')">
<div class="btn-text">最新动态</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="handleToPosi('position2')">
<div class="btn-text">咨询要闻</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="handleToPosi('position3')">
<div class="btn-text">数据总览</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="handleToPosi('position4')">
<div class="btn-text">资源库</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
</div>
</div>
<!-- 面包屑 -->
<div class="breadcrumb">
<div class="breadcrumb-box">
<div class="breadcrumb-item">国家科技安全</div>
<div class="breadcrumb-item">&nbsp;>&nbsp;</div>
<div class="breadcrumb-item back-item" @click="handleBackHome">中美博弈概览</div>
<div class="breadcrumb-item">&nbsp;>&nbsp;</div>
<div class="breadcrumb-item">合作限制</div>
<div class="breadcrumb" v-show="!isShow">
<div class="header-left">
<HeaderMenu></HeaderMenu>
</div>
<div class="header-right">
<headerInfo curTitleName="合作限制"></headerInfo>
</div>
</div>
<!-- 主页面 -->
<div class="main-content">
<div class="main-content" ref="homeMainRef" :class="{ 'scroll-main': isShow }">
<!-- 搜索栏部分 -->
<div class="search">
<div class="search" v-show="!isShow">
<div class="search-main">
<input v-model="input" placeholder="搜索合作限制" class="search-input" />
<div class="search-btn">
......@@ -36,25 +74,25 @@
</div>
</div> -->
<div class="search-bottom">
<div class="btn" @click="scrollToTop('position1')">
<div class="btn" @click="handleToPosi('position1')">
<div class="btn-text">最新动态</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="scrollToTop('position2')">
<div class="btn" @click="handleToPosi('position2')">
<div class="btn-text">咨询要闻</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="scrollToTop('position3')">
<div class="btn" @click="handleToPosi('position3')">
<div class="btn-text">数据总览</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="scrollToTop('position4')">
<div class="btn" @click="handleToPosi('position4')">
<div class="btn-text">资源库</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
......@@ -95,21 +133,54 @@
</template>
<script setup>
import { ref, onMounted } from "vue";
import { ref, onMounted, nextTick } from "vue";
import { useRouter } from "vue-router";
import HeaderMenu from "@/components/headerMenu.vue";
import headerInfo from "@/components/headerInfo.vue";
import comTitle from "./common/comTitle.vue";
import newData from "./components/dataNew/index.vue";
import askPage from "./components/askPage/index.vue";
import dataSub from "./components/dataSub/index.vue";
import resLib from "./components/resLib/index.vue";
import scrollToTop from "@/utils/scrollToTop";
import { useContainerScroll } from "@/hooks/useScrollShow";
// 搜索框
const input = ref("");
const homeMainRef = ref(null);
const { isShow } = useContainerScroll(homeMainRef);
const router = useRouter();
// 搜索功能
const handleSearch = () => {
console.log("搜索内容:", input.value);
};
// 锚点跳转
const handleToPosi = id => {
const element = document.getElementById(id);
if (element && homeMainRef.value) {
// 如果当前还未显示吸顶搜索栏,先强制切换状态以稳定布局
if (!isShow.value) {
isShow.value = true;
}
// 使用 nextTick 确保 DOM 状态更新(高度变化生效)后再计算
nextTick(() => {
const containerRect = homeMainRef.value.getBoundingClientRect();
const elementRect = element.getBoundingClientRect();
// 使用 getBoundingClientRect 计算元素相对于容器顶部的绝对距离,不受嵌套布局影响
const top = elementRect.top - containerRect.top + homeMainRef.value.scrollTop;
homeMainRef.value.scrollTo({
top: top,
behavior: "smooth"
});
});
}
};
// 返回首页
const handleBackHome = () => {
router.push({
......@@ -131,27 +202,12 @@ const handleBackHome = () => {
height: 64px;
background-image: url("./assets/images/bread-bg.png");
background-size: cover;
padding: 17px 0px 21px 0px;
.breadcrumb-box {
margin-left: 160px;
display: flex;
// align-items: center;
.breadcrumb-item {
font-size: 20px;
font-weight: 700;
font-family: "Microsoft YaHei";
line-height: 30px;
color: #fff;
}
.back-item {
cursor: pointer;
&:hover {
color: #999;
}
}
}
padding: 0 160px;
display: flex;
justify-content: space-between;
}
.main-content {
position: relative;
overflow: auto;
width: 100%;
height: calc(100% - 64px);
......@@ -188,7 +244,11 @@ const handleBackHome = () => {
font-weight: 400;
font-family: "Microsoft YaHei";
line-height: 24px;
color: rgb(132, 136, 142);
color: rgba(59, 65, 75, 1);
&::placeholder {
color: #a8abb2;
}
}
.search-btn {
margin-right: -3px;
......@@ -335,5 +395,132 @@ const handleBackHome = () => {
}
}
}
.search-header {
width: 100%;
height: 144px;
background: #fff;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
overflow: hidden;
.home-main-header-center {
margin-top: 20px;
margin-left: 200px;
width: 800px;
height: 48px;
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
background: rgba(255, 255, 255, 1);
box-sizing: border-box;
padding: 1px;
position: relative;
border: 1px solid transparent;
display: flex;
align-items: center;
&:hover {
border: 1px solid var(--color-main-active);
}
.search-input {
border: none;
outline: none;
width: 800px;
height: 46px;
background-color: transparent;
font-size: 16px;
padding: 12px 16px;
font-weight: 400;
font-family: "Microsoft YaHei";
line-height: 24px;
color: rgb(132, 136, 142);
}
.search-btn-small {
position: absolute;
right: -1px;
top: 0px;
width: 120px;
height: 46px;
border-radius: 10px;
background: var(--color-main-active);
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
.search-icon {
width: 18px;
height: 18px;
img {
width: 100%;
height: 100%;
}
}
.search-text {
margin-left: 8px;
height: 22px;
color: #fff;
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 22px;
}
}
}
.home-main-header-btn-box {
margin-top: 20px;
margin-left: 200px;
display: flex;
gap: 16px;
.btn {
display: flex;
align-items: center;
gap: 9px;
width: 160px;
height: 48px;
border: 1px solid #aed6ff;
box-sizing: border-box;
border-radius: 24px;
background: #e7f3ff;
cursor: pointer;
position: relative;
&:hover {
background: #cae3fc;
}
.btn-text {
width: 80px;
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 400;
line-height: 48px;
margin-left: 36px;
text-align: center;
}
.btn-icon {
position: absolute;
top: 16px;
right: 19px;
width: 6px;
height: 12px;
img {
width: 100%;
height: 100%;
}
}
}
}
}
.scroll-main {
height: calc(100% - 144px) !important;
}
}
</style>
......@@ -2,7 +2,12 @@
<div class="home-wrapper">
<div class="search-header" v-show="isShow">
<div class="home-main-header-center">
<el-input v-model="searchDecreeText" @keyup.enter="handleSearch" style="width: 680px; height: 100%" placeholder="搜索科技政令" />
<el-input
v-model="searchDecreeText"
@keyup.enter="handleSearch"
style="width: 680px; height: 100%"
placeholder="搜索科技政令"
/>
<div class="search">
<div class="search-icon">
<img src="./assets/images/search-icon.png" alt="" />
......@@ -40,14 +45,20 @@
<div class="home-main" :class="{ scrollHomeMain: isShow }" ref="containerRef">
<div class="home-main-header">
<div class="home-main-header-top" v-show="!isShow">
<div class="header-item">国家科技安全</div>
<div class="header-item">></div>
<div class="header-item back-item" @click="handleBackHome">中美博弈概览</div>
<div class="header-item">></div>
<div class="header-item">行政令</div>
<div class="header-left">
<HeaderMenu></HeaderMenu>
</div>
<div class="header-right">
<headerInfo curTitleName="政令"></headerInfo>
</div>
</div>
<div class="home-main-header-center" v-show="!isShow">
<el-input v-model="searchDecreeText" @keyup.enter="handleSearch" style="width: 838px; height: 100%" placeholder="搜索科技政令" />
<el-input
v-model="searchDecreeText"
@keyup.enter="handleSearch"
style="width: 838px; height: 100%"
placeholder="搜索政令"
/>
<div class="search">
<div class="search-icon">
<img src="./assets/images/search-icon.png" alt="" />
......@@ -256,11 +267,12 @@
<div class="title">{{ news.title }}</div>
<div class="time">{{ news.from }}</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>
<div class="right-footer">{{ news.content }}</div>
</template>
</el-popover>
</el-popover> -->
</div>
</div>
</div>
......@@ -357,7 +369,7 @@
class="box7-item"
v-for="(item, index) in keyDecreeList"
:key="index"
@click="handleKeyDecree(item.id)"
@click="handleKeyDecree(item)"
>
<div class="icon">
<img src="./assets/images/warning.png" alt="" />
......@@ -367,11 +379,12 @@
<div class="title">{{ item.title }}</div>
<div class="time">{{ item.time }}</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>
<div class="info-content">{{ item.content ? item.content : "暂无数据" }}</div>
</template>
</el-popover>
</el-popover> -->
</div>
</div>
</div>
......@@ -539,8 +552,9 @@
<script setup>
import { onMounted, ref, computed, watch } from "vue";
import * as echarts from "echarts";
import router from "@/router";
import HeaderMenu from "@/components/headerMenu.vue";
import headerInfo from "@/components/headerInfo.vue";
import {
getDepartmentList,
getLatestDecree,
......@@ -604,6 +618,7 @@ import { ElMessage } from "element-plus";
// 跳转行政机构主页
const handleToInstitution = item => {
window.sessionStorage.setItem("curTabName", item.name);
const curRoute = router.resolve({
path: "/institution",
query: {
......@@ -725,6 +740,7 @@ const handleClickToDetail = () => {
const id = box1DataList.value[activeIndex].id;
window.sessionStorage.setItem("curTabName", box1DataList.value[activeIndex].name);
const route = router.resolve({
path: "/decreeLayout",
query: {
......@@ -736,6 +752,7 @@ const handleClickToDetail = () => {
// 点击政令库政令
const handleClickDecree = decree => {
window.sessionStorage.setItem("curTabName", decree.title);
const route = router.resolve({
path: "/decreeLayout",
query: {
......@@ -745,11 +762,12 @@ const handleClickDecree = decree => {
window.open(route.href, "_blank");
};
const handleKeyDecree = id => {
const handleKeyDecree = item => {
window.sessionStorage.setItem("curTabName", item.title);
const route = router.resolve({
path: "/decreeLayout",
query: {
id: id
id: item.id
}
});
window.open(route.href, "_blank");
......@@ -763,7 +781,6 @@ const warningList = ref([
// postDate: "一天前",
// riskLevel: "特别重大"
// }
]);
const handlegetDecreeRiskSignal = async () => {
try {
......@@ -899,6 +916,7 @@ const handleClickPerson = async item => {
ElMessage.warning("找不到当前人员的类型值!");
return;
}
window.sessionStorage.setItem("curTabName", item.name);
const route = router.resolve({
path: "/characterPage",
query: {
......@@ -1164,7 +1182,7 @@ const pubTime = ref([
{ id: "2023", name: "2023年" },
{ id: "2022", name: "2022年" },
{ id: "2021", name: "2021年" },
{ id: "2020", name: "2020年" },
{ id: "2020", name: "2020年" }
// { id: "更早时间", name: "更早时间" }
]);
const activePubTime = ref(["2025"]);
......@@ -1213,7 +1231,7 @@ const handleGetDecreeOrderList = async () => {
return {
id: item.id,
time: item.postDate,
title: item.proposeOrgName+ ': '+ item.name,
title: item.proposeOrgName + ": " + item.name,
desc: item.describe,
img: item.orgImage,
tagList: item.industryList
......@@ -1274,18 +1292,18 @@ const handleSwithCurDecree = name => {
};
// 搜索
const searchDecreeText = ref('')
const searchDecreeText = ref("");
const handleSearch = () => {
window.sessionStorage.setItem("curTabName", `搜索-${searchDecreeText.value}`);
const curRoute = router.resolve({
path: "/searchResults",
query: {
searchText: searchDecreeText.value,
areaName: '政令'
areaName: "政令"
}
});
window.open(curRoute.href, "_blank");
}
};
onMounted(async () => {
handleGetAreaList();
......@@ -1419,28 +1437,11 @@ onMounted(async () => {
.home-main-header-top {
width: 100%;
height: 64px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 64px;
background: url("./assets/images/header-bg.png");
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 700;
color: #fff;
box-sizing: border-box;
padding-left: 160px;
display: flex;
.header-item {
margin: 0 3px;
}
.back-item {
cursor: pointer;
&:hover {
color: #ccc;
}
}
justify-content: space-between;
padding: 0 160px;
}
.home-main-header-center {
margin-top: 48px;
......@@ -1577,6 +1578,7 @@ onMounted(async () => {
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 0.65);
align-items: center;
gap:17px;
margin: 0 6px 16px 6px;
cursor: pointer;
transition: transform 0.3s ease, box-shadow 0.3s ease;
......@@ -1585,17 +1587,15 @@ onMounted(async () => {
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
}
.item-left {
margin-left: 24px;
width: 48px;
height: 48px;
margin-left: 24px;
margin-top: 12px;
img {
width: 100%;
height: 100%;
}
}
.item-right {
margin-left: 17px;
width: 140px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
......
......@@ -157,6 +157,7 @@ const siderList = ref([
const siderActiveIndex = ref(0);
const handleClickSider = async index => {
siderActiveIndex.value = index;
decreeInfo.value.id = allData.value[index].id
decreeInfo.value.img = allData.value[index].imageUrl;
decreeInfo.value.totalTitle = allData.value[index].name;
decreeInfo.value.eTotalTitle = allData.value[index].ename;
......@@ -263,6 +264,8 @@ const handleGetRelateOrder = async () => {
};
const handleToDecreeDetail = item => {
console.log('item', item.id);
window.sessionStorage.setItem('curTabName', item.totalTitle)
const route = router.resolve({
path: "/decreeLayout/overview/introduction",
query: {
......
......@@ -11,11 +11,11 @@
<div class="info">
<div class="info-box1">{{ summaryInfo.name }}</div>
<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>
......@@ -43,11 +43,20 @@
<div class="name">{{ summaryInfo.orgName }}</div>
</div>
<div class="right-box-bottom">
<!-- <el-button type="plain" size="large" icon="Search" @click="handleSwitchActiveName('法案原文')"
>政令原文</el-button
> -->
<el-button type="plain" size="large" icon="Search" @click="handleShowReport">政令原文</el-button>
<el-button type="primary" size="large" icon="EditPen">分析报告</el-button>
<div class="btn" @click="handleShowReport">
<div class="icon">
<img src="./assets/icons/report-icon.png" alt="" />
</div>
<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>
......@@ -106,7 +115,7 @@
</div>
</div>
</div>
<div class="report" v-if="isShowReport">
<div class="report" v-if="isShowReport">
<div class="report-close" @click="handleCloseReport">
<img src="@/assets/icons/close.png" alt="" />
</div>
......@@ -185,13 +194,13 @@ const mainHeaderBtnList = ref([
activeIcon: icon2Active,
name: "深度挖掘",
path: "/decreeLayout/deepDig"
},
{
icon: icon3,
activeIcon: icon3Active,
name: "影响分析",
path: "/decreeLayout/influence"
}
// {
// icon: icon3,
// activeIcon: icon3Active,
// name: "影响分析",
// path: "/decreeLayout/influence"
// }
]);
const activeTitle = ref("政令概况");
......@@ -237,11 +246,11 @@ const handleGetReport = async () => {
};
const handleCloseReport = () => {
isShowReport.value = false
}
isShowReport.value = false;
};
const handleShowReport = () => {
isShowReport.value = true
}
isShowReport.value = true;
};
onMounted(() => {
handleGetSummary();
......@@ -253,20 +262,17 @@ onMounted(() => {
} else {
activeTitle.value = "影响分析";
}
handleGetReport()
handleGetReport();
});
</script>
<style lang="scss" scoped>
.layout-container {
width: 100vw;
height: 100vh;
min-width: 1920px;
min-height: 1016px;
background: rgba(249, 250, 252, 1);
position: relative;
.report {
width: 100%;
height: 100%;
overflow: hidden;
overflow-y: auto;
.report {
padding: 10px 150px;
position: absolute;
left: 0;
......@@ -335,12 +341,14 @@ onMounted(() => {
}
.layout-main {
width: 100%;
height: 100%;
.layout-main-header {
height: 137px;
background: rgba(255, 255, 255, 1);
display: flex;
justify-content: space-between;
position: sticky;
top: 0;
z-index: 99999999;
.layout-main-header-left-box {
width: 1100px;
margin-left: 160px;
......@@ -359,8 +367,10 @@ onMounted(() => {
}
}
.info {
width: 700px;
margin-left: 9px;
.info-box1 {
width: 700px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 20px;
......@@ -369,6 +379,9 @@ onMounted(() => {
letter-spacing: 0px;
text-align: left;
margin-top: 5px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.info-box2 {
margin-top: 5px;
......@@ -386,6 +399,24 @@ onMounted(() => {
.info-box2-item {
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(() => {
.right-box-bottom {
margin-top: 24px;
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 {
// height: calc(100% - 137px);
overflow: hidden;
}
}
.layout-report-box {
......@@ -558,8 +655,6 @@ onMounted(() => {
.content-left {
width: 680px;
height: 786px;
// background: #eee;
// overflow-y: auto;
img {
width: 100%;
height: 100%;
......@@ -569,8 +664,6 @@ onMounted(() => {
margin-left: 89px;
width: 680px;
height: 786px;
// background: #eee;
// overflow-y: auto;
img {
width: 100%;
height: 100%;
......
......@@ -246,6 +246,7 @@ const handleMouseMove = event => {
};
const handleToBillDetail = item => {
window.sessionStorage.setItem('curTabName', item.title)
const route = router.resolve({
path: "/billLayout",
query: {
......
......@@ -64,7 +64,7 @@
<div class="item">
<div class="item-left">{{ "执行期限:" }}</div>
<div class="item-right text">
{{ basicInfo.deadline+ ' 天' }}
{{ basicInfo.deadline + " 天" }}
</div>
</div>
</div>
......@@ -110,8 +110,8 @@
<div class="box3">
<div class="box-header">
<div class="header-left"></div>
<div class="title">执行机构</div>
<div class="header-btn-box">
<div class="title">发布机构</div>
<!-- <div class="header-btn-box">
<div
class="btn"
:class="{ btnActive: box3ActiveBtn === item }"
......@@ -121,7 +121,7 @@
>
{{ item }}
</div>
</div>
</div> -->
<div class="header-right">
<div class="icon">
<img src="../assets/icons/header-right-icon1.png" alt="" />
......@@ -137,7 +137,7 @@
<img :src="box3TopData.logo ? box3TopData.logo : DefaultIcon2" alt="" />
</div>
<div class="right">
<div class="name">{{ box3TopData.name }}</div>
<div class="name">{{ box3TopData.name + " >" }}</div>
<div class="ename">{{ box3TopData.eName }}</div>
</div>
<!-- <div class="more">
......@@ -148,23 +148,21 @@
</div> -->
</div>
<div class="box3-top-bottom">
<div class="box3-top-right-main">
<div class="main-item">
<div class="item-icon"></div>
<div class="item-left">{{ "成立时间:" }}</div>
<div class="item-right">{{ box3TopData.clsj }}</div>
<div class="box3-top-bottom-header">
<div class="icon">
<img src="./assets/images/box3-icon1.png" alt="" />
</div>
<div class="main-item">
<div class="item-icon"></div>
<div class="item-left">{{ "总部地址:" }}</div>
<div class="item-right">
{{ box3TopData.zbdz }}
<div class="text">{{ "关键人物" }}</div>
</div>
<div class="box3-top-bottom-main">
<div class="box3-top-bottom-item" v-for="(item, index) in box3TopBottomData" :key="index">
<div class="box3-top-bottom-item-left">
<img :src="item.image ? item.image : DefaultIcon1" alt="" />
</div>
<div class="box3-top-bottom-item-right">
<div class="name">{{ item.name }}</div>
<div class="position">{{ item.position }}</div>
</div>
</div>
<div class="main-item">
<div class="item-icon"></div>
<div class="item-left">{{ "部长:" }}</div>
<div class="item-right">{{ box3TopData.bz }}</div>
</div>
</div>
</div>
......@@ -190,9 +188,6 @@
</el-timeline-item>
</el-timeline>
</div>
<!-- <div class="box3-bottom-footer">
<img src="./assets/images/more-icon.png" alt="" />
</div> -->
</div>
</div>
</div>
......@@ -322,6 +317,39 @@ const box3TopData = ref({
bz: ""
});
const box3TopBottomData = ref([
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
},
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
},
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
},
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
},
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
},
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
}
]);
// 跳转行政机构主页
const handleToInstitution = item => {
const curRoute = router.resolve({
......@@ -443,7 +471,7 @@ onMounted(() => {
flex-wrap: wrap;
gap: 5px 8px;
white-space: nowrap;
overflow:hidden;
overflow: hidden;
overflow-y: auto;
padding-right: 5px;
.btn {
......@@ -634,8 +662,8 @@ onMounted(() => {
box-shadow: 0px 0px 15px 0px rgba(60, 87, 126, 0.2);
background: rgba(255, 255, 255, 1);
.box3-top {
margin-top: 30px;
height: 241px;
margin-top: 2px;
// height: 241px;
border-bottom: 1px solid rgba(234, 236, 238, 1);
.box3-top-top {
width: 473px;
......@@ -704,36 +732,90 @@ onMounted(() => {
}
}
.box3-top-bottom {
margin-left: 50px;
.box3-top-right-main {
height: 150px;
width: 473px;
height: 193px;
margin: 0 auto;
.box3-top-bottom-header {
height: 40px;
display: flex;
padding-top: 14px;
box-sizing: border-box;
gap: 12px;
.icon {
margin-top: 5px;
width: 14px;
height: 14px;
img {
width: 100%;
height: 100%;
}
}
.text {
width: 100px;
height: 24px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-style: Bold;
font-size: 16px;
font-weight: 700;
line-height: 24px;
letter-spacing: 1px;
text-align: left;
}
}
.box3-top-bottom-main {
margin-top: 2px;
height: 130px;
overflow: hidden;
overflow-y: auto;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 24px;
margin-top: 4px;
.main-item {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.box3-top-bottom-item {
margin-top: 17px;
height: 48px;
width: 200px;
display: flex;
margin-top: 12px;
// height: 26px;
line-height: 26px;
.item-icon {
width: 4px;
height: 4px;
border-radius: 2px;
background: #3b414b;
margin-top: 11px;
margin-right: 19px;
}
.item-left {
height: 24px;
width: 80px;
justify-content: flex-start;
.box3-top-bottom-item-left {
width: 48px;
height: 48px;
img {
width: 100%;
height: 100%;
}
}
.item-right {
width: 291px;
.box3-top-bottom-item-right {
margin-left: 8px;
width: 144px;
.name {
width: 144px;
height: 24px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-style: Bold;
font-size: 16px;
font-weight: 700;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.position {
margin-top: 1px;
width: 144px;
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;
}
}
}
}
......@@ -770,16 +852,6 @@ onMounted(() => {
overflow: hidden;
overflow-y: auto;
}
// .box3-bottom-footer {
// width: 108px;
// height: 32px;
// margin: 5px auto;
// cursor: pointer;
// img {
// width: 100%;
// height: 100%;
// }
// }
}
}
}
......
......@@ -123,6 +123,7 @@ const router = useRouter();
// 跳转公司详情页
const handleCompClick = item => {
console.log("item", item);
window.sessionStorage.setItem('curTabName', item.entityNameZh || item.entityName)
const route = router.resolve({
name: "companyPages",
params: {
......
......@@ -103,36 +103,37 @@
</div>
</div>
<div class="right-title">
<div class="filter-row">
<!-- <div class="filter-left">
<el-select v-model="filterEntity" placeholder="受制裁实体" style="width: 184px">
<el-option label="受制裁实体" value="1" />
</el-select>
</div> -->
<div class="filter-right">
<el-checkbox v-model="onlyChina" label="只看中国实体" />
<el-select v-model="filterField" placeholder="全部领域" style="width: 150px; margin: 0 12px 0 16px">
<el-option label="全部领域" value="" />
<el-option v-for="item in domainOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-input v-model="searchKeyword" placeholder="搜索实体" style="width: 150px" :suffix-icon="Search" />
</div>
</div>
<div class="stats-row">
<!-- <div class="tabs">
<div class="tabs">
<div class="tab-btn" :class="{ active: activeTab === 'add' }" @click="activeTab = 'add'">新增实体</div>
<div class="tab-btn" :class="{ active: activeTab === 'remove' }" @click="activeTab = 'remove'">移除实体</div>
</div> -->
</div>
<div class="stats-info">
<div class="stat-item">
<span class="dot red"></span>
<span class="text">新增 <span class="num red">{{ addCount }}</span> 家 (50%规则涉及<span class="num red">{{
addRuleCount }}</span>家)</span>
</div>
<!-- <div class="stat-item">
<div class="stat-item">
<span class="dot green"></span>
<span class="text">移除 <span class="num green">{{ removeCount }}</span> 家 (50%规则涉及<span class="num green">{{ removeRuleCount }}</span>家)</span>
</div> -->
</div>
</div>
</div>
<div class="filter-row">
<div class="filter-left">
<!-- <el-select v-model="filterEntity" placeholder="受制裁实体" style="width: 184px">
<el-option label="受制裁实体" value="1" />
</el-select> -->
</div>
<div class="filter-right">
<el-checkbox v-model="onlyChina" label="只看中国实体" />
<el-select v-model="filterField" placeholder="全部领域" style="width: 150px; margin: 0 12px 0 16px">
<el-option label="全部领域" value="" />
<el-option v-for="item in domainOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-input v-model="searchKeyword" placeholder="搜索实体" style="width: 150px" :suffix-icon="Search" />
</div>
</div>
</div>
......@@ -185,6 +186,7 @@
<script setup>
import { ref, defineProps, computed, onMounted, watch } from "vue";
import { useRouter } from "vue-router";
import { ElMessage } from "element-plus";
import { DArrowRight, Search } from "@element-plus/icons-vue";
import { debounce } from "lodash";
import title from "../../assets/title.png"
......@@ -195,14 +197,11 @@ import RuleSubsidiaryDialog from "../../../v2.0EntityList/components/sanctionsOv
// 跳转公司详情页
const handleCompClick = item => {
// console.log("item", item);
// const route = router.resolve({
// path: "/companyPages",
// query: {
// id: item.entityId
// }
// });
// window.open(route.href, "_blank");
if (!item.entityId) {
ElMessage.warning("暂无数据");
return;
}
window.sessionStorage.setItem('curTabName', item.name)
const curRoute = router.resolve({ name: "companyPages", params: { id: item.entityId } });
window.open(curRoute.href, "_blank");
};
......@@ -817,10 +816,9 @@ onMounted(() => {
.filter-row {
display: flex;
// 隐藏使用right,解除使用space-between
justify-content: right;
align-items: center;
margin-bottom: 20px;
// margin-bottom: 20px;
:deep(.el-input__inner) {
font-size: 16px;
......@@ -850,8 +848,8 @@ onMounted(() => {
.stats-row {
display: flex;
// 隐藏使用right,解除使用space-between
justify-content: right;
margin-bottom: 20px;
justify-content: space-between;
align-items: center;
.tabs {
......@@ -1011,6 +1009,7 @@ onMounted(() => {
line-height: 24px;
font-family: "Microsoft YaHei";
color: rgba(59, 65, 75, 1);
cursor: pointer;
}
}
......
<template>
<div class="home-wrapper">
<div class="home-header">
<div class="header-item">国家科技安全</div>
<div class="header-item">></div>
<div class="header-item back-item" @click="handleBackHome">中美博弈概览</div>
<div class="header-item">></div>
<div class="header-item">投融资限制</div>
<div class="header-left">
<HeaderMenu></HeaderMenu>
</div>
<div class="header-right">
<headerInfo curTitleName="投融资限制"></headerInfo>
</div>
</div>
<div class="home-main">
<div class="home-main-header">
......@@ -145,11 +146,7 @@
<custom-container titleType="danger" title="风险信号" :titleIcon="dangerIcon" height="450px">
<template #default>
<div class="box2-main">
<div
class="box2-main-item"
v-for="(item, index) in warningList"
:key="index"
>
<div class="box2-main-item" v-for="(item, index) in warningList" :key="index">
<div
class="item-left"
:class="{
......@@ -517,6 +514,8 @@
<script setup>
import { onMounted, ref, computed } from "vue";
import scrollToTop from "@/utils/scrollToTop";
import HeaderMenu from "@/components/headerMenu.vue";
import headerInfo from "@/components/headerInfo.vue";
import setChart from "@/utils/setChart";
import * as echarts from "echarts";
import { DArrowRight, Warning, Search } from "@element-plus/icons-vue";
......@@ -1317,25 +1316,12 @@ onMounted(async () => {
.home-header {
height: 64px;
color: #fff;
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 700;
line-height: 26px;
line-height: 64px;
background: url("@/assets/images/nav-bg.png");
box-sizing: border-box;
padding-left: 160px;
display: flex;
.header-item {
margin: 0 3px;
}
.back-item {
cursor: pointer;
&:hover {
color: #ccc;
}
}
justify-content: space-between;
padding: 0 160px;
}
.box1 {
......@@ -1698,7 +1684,7 @@ onMounted(async () => {
}
.home-wrapper {
width: 100%;
width: 100%;
height: calc(100vh - 96px);
position: relative;
overflow-y: hidden;
......
......@@ -3,7 +3,7 @@
<div class="content-main">
<!-- 头部按钮 -->
<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)' : '' }">
<img class="title-icon" :src="`src/assets/images/icon/gjOverPreview-icon-${index + 1}.png`" />
{{ value }}
......@@ -119,12 +119,24 @@
<script setup>
import { ref } from 'vue';
import router from '@/router';
import MeansAnalysis from './component/MeansAnalysis.vue';
import ResourceAnalysis from './component/ResourceAnalysis.vue'
import AdvantagesAnalysis from './component/AdvantagesAnalysis.vue'
const page = ref('首页');
const pageList = ['首页', '科技动向感知', '中美博弈概览'];
const handleClickHeader = (value) => {
page.value = value
if(value === '首页' || value === '中美博弈概览') {
router.push({
path: '/overview'
})
}
}
const technologicalTrends = ref({
image: '/testData/gjOverPreview-data-1.png',
imageTitle: {
......
......@@ -41,11 +41,12 @@
<div class="home-main" :class="{ scrollHomeMain: isShow }" ref="containerRef">
<div class="home-main-header">
<div class="home-main-header-top" v-show="!isShow">
<div class="header-item">国家科技安全</div>
<div class="header-item">></div>
<div class="header-item back-item" @click="handleBackHome">中美博弈概览</div>
<div class="header-item">></div>
<div class="header-item">主要创新主体</div>
<div class="header-left">
<HeaderMenu></HeaderMenu>
</div>
<div class="header-right">
<headerInfo curTitleName="主要创新主体"></headerInfo>
</div>
</div>
<div class="home-main-header-center" v-show="!isShow">
<el-input v-model="input" style="width: 838px; height: 100%" placeholder="搜索创新主体" />
......@@ -404,6 +405,8 @@
import { onMounted, ref, computed } from "vue";
import * as echarts from "echarts";
import router from "@/router";
import HeaderMenu from "@/components/headerMenu.vue";
import headerInfo from "@/components/headerInfo.vue";
import DivideHeader from "@/components/DivideHeader.vue";
import scrollToTop from "@/utils/scrollToTop";
import { useContainerScroll } from "@/hooks/useScrollShow";
......@@ -1209,31 +1212,12 @@ onMounted(async () => {
.home-main-header-top {
width: 100%;
height: 64px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 64px;
background: url("./assets/images/header-bg.png");
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 700;
color: #fff;
box-sizing: border-box;
padding-left: 160px;
padding: 0 160px;
display: flex;
justify-content: space-between;
.header-item {
margin: 0 3px;
}
.back-item {
cursor: pointer;
&:hover {
color: #ccc;
}
}
}
.home-main-header-center {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论