提交 93332f82 authored 作者: Vicky's avatar Vicky

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

......@@ -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>
......@@ -48,7 +48,7 @@ export function getCoopRestrictionNews(params) {
export function getCoopRestrictionSocial(params) {
return request({
method: 'GET',
url: `/api/commonFeature/social/${params.moduleId}`
url: `/api/commonFeature/remarks/${params.moduleId}`
})
}
......@@ -76,4 +76,77 @@ export function getCoopRestrictionDomain(params) {
url: `/api/cooperationlimitinfo/getLimitArea`,
params
})
}
\ No newline at end of file
}
// 合作限制-获取合作限制列表接口
/**
* @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
})
}
// 合作限制-查询简介接口
/**
* @param {limitId} 合作限制ID
* @header token
*/
export function getCoopRestrictionIntroduction(params) {
return request({
method: 'GET',
url: `/api/cooperationlimitinfo/searchBlurb`,
params
})
}
// 合作限制-相关实体接口
/**
* @param {limitId} 合作限制ID
* @header token
*/
export function getCoopRestrictionRelated(params) {
return request({
method: 'GET',
url: `/api/cooperationlimitinfo/getLimitEntity`,
params
})
}
// 合作限制-背景分析接口
/**
* @param {limitId} 合作限制ID
* @header token
*/
export function getCoopRestrictionBackground(params) {
return request({
method: 'GET',
url: `/api/cooperationlimitinfo/getLimitBackGround`,
params
})
}
// 合作限制-限制条款接口
/**
* @param {limitId} 合作限制ID
* @header token
*/
export function getCoopRestrictionClause(params) {
return request({
method: 'GET',
url: `/api/cooperationlimitinfo/getLimitClause`,
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}
......
......@@ -79,26 +79,19 @@ export function getIndustryCountByYear(sanTypeId) {
/**
* 不同领域每年数量
* @returns {Promise<{
* data:{
* year?: number
* domainNum: {
* [ key: string]: number;
* }
* }[]
* domains: string[]
* }>}
* @param {Object} data - 请求参数
* @param {boolean} data.isRule - 是否为规则
* @param {string} [data.startYear="2020"] - 开始年份
* @param {string} [data.endYear] - 结束年份
* @param {number} [data.sanTypeId=1] - 制裁类型ID
* @returns {Promise}
*/
export function getCountDomainByYear(isRule, startYear = "2020", endYear = String(new Date().getFullYear())) {
export function getCountDomainByYear(data) {
return request200(
request({
method: "POST",
url: "/api/entitiesDataCount/getAnnualSanDomain",
data: {
isRule,
startYear,
endYear
}
data
})
);
}
......@@ -128,7 +121,7 @@ export function getSanctionsInfoCount() {
* sanReason: string
* }[]>}
*/
export function getSanctionProcess(typeName = "实体清单", pageNum = 1, pageSize = 10) {
export function getSanctionProcess(typeName = "实体清单", pageNum = 1, pageSize = 10,isCn = false) {
return request200(
request({
method: "POST",
......@@ -136,7 +129,8 @@ export function getSanctionProcess(typeName = "实体清单", pageNum = 1, pageS
data: {
typeName,
pageNum,
pageSize
pageSize,
isCn
}
})
);
......@@ -498,14 +492,17 @@ export function getEntitiesUpdateCount(sanTypeId = 1) {
/**
* 制裁领域分析
* @param {string} rule - 规则
* @param {string} type - 类型
*/
export function getSanDomainCount(rule) {
export function getSanDomainCount(rule, type) {
return request200(
request({
method: "GET",
url: "/api/entitiesDataCount/getSanDomainCount",
params: {
rule
rule,
type
}
})
);
......
import request from "@/api/request.js";
// 实体清单-制裁概况-获取实体清单基本信息
export function getEntityInfo() {
export function getEntityInfo(sanType) {
return request({
method: 'GET',
url: `/api/sanctionList/baseInfo/el`
url: `/api/sanctionList/baseInfo/${sanType}`
})
}
......@@ -278,6 +278,7 @@ export function getSingleSanctionBackground(data) {
* @param {Boolean} [data.isOnlyCn=true] - 是否仅查询中国数据
* @param {String} [data.domainId] - 科技领域ID
* @param {String} [data.searchText] - 搜索文本
* @param {String} [data.searchType] - 搜索类型
* @header token
*/
export function getSingleSanctionOverviewList(data) {
......@@ -565,4 +566,76 @@ export function getSingleSanctionEntityInternationalPaper(params) {
url: `/api/organization/paper/icCount`,
params,
})
}
// 商业管制清单-CCL清单简介-基本信息
export function getCCLInfo() {
return request({
method: 'GET',
url: `/api/sanctionList/baseInfo/ccl`
})
}
// 商业管制清单-CCL清单简介-出口管制分类编码
export function getECCN() {
return request({
method: 'GET',
url: `/api/ccl/eccn`
})
}
// 商业管制清单-CCL清单简介-出口管制分类编码信息列表
/**
* @param {Object} params
* @param {Integer} params.id - 上一接口查询的EccnCategoryID
* @header token
*/
export function getECCNList(params) {
return request({
method: 'GET',
url: `/api/ccl/eccn/rank`,
params,
})
}
// 商业管制清单-CCL清单列表-类别字典
export function getECCNCategory() {
return request({
method: 'GET',
url: `/api/commonDict/ccl/eccnCategory`
})
}
// 商业管制清单-CCL清单列表-科技领域字典
export function getAreaType() {
return request({
method: 'GET',
url: `/api/commonDict/areaType`
})
}
// 商业管制清单-CCL清单列表-管控原因字典
export function getControlReason() {
return request({
method: 'GET',
url: `/api/commonDict/ccl/controlReason`
})
}
// 商业管制清单-CCL清单简介-CCL清单查询
/**
* @param {Object} params
* @param {String} params.categoryCode - 类别Id
* @param {List<Integer>} params.techDomainIds - 科技领域I
* @param {String} params.keyword - 搜索物项或ECCN编码
* @param {List<Integer>} params.controlIds - 类别ID
* @param {Boolean} params.isLatest - 查看最近更新内容
* @header token
*/
export function getCclQuery(data) {
return request({
method: 'POST',
url: `/api/ccl/query`,
data,
})
}
\ No newline at end of file
// 智库概览信息
import request from "@/api/request.js";
// 获取新闻资讯
/**
* @param {moduleId}
*/
export function getNews(moduleId = "0105") {
return request({
method: 'GET',
url: `/api/commonFeature/news/${moduleId}`,
})
}
/**
* 社交媒体
*/
export function getSocialMediaInfo(moduleId = "0105") {
return request({
method: "GET",
url: `/api/commonFeature/remarks/${moduleId}`
})
}
// 获取法案风险信号
/**
* @param {moduleId}
*/
export function getBillRiskSignal(moduleId = "0105") {
return request({
method: 'GET',
url: `/api/commonFeature/riskSignal/${moduleId}`,
})
}
//创新主体主页:统计不同创新主体类型对应的主体数量
export function getCountSubjectType() {
return request({
......@@ -40,4 +75,183 @@ export function getOverallRanking(params) {
url: `/api/innovateSubject/overallRanking`,
params
})
}
//创新主体主页:领域布局
export function getResearchField(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/researchField`,
params
})
}
//创新主体主页:主体类型分类领域布局
export function getResearchFieldSubjectType(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/researchFieldSubjectType`,
params
})
}
// 获取行业领域列表
export function getAreaType() {
return request({
method: 'GET',
url: `/api/commonDict/areaType`,
})
}
/***********详情页 */
//创新主体详情:基本信息
export function getInfo(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/info/${params.id}`,
params
})
}
//最新动态
export function getDynamics(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/dynamics/${params.orgId}`,
params
})
}
//创新主体详情:历史事件轴
export function getEventList(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/eventList/${params.id}`,
params
})
}
//创新主体详情:重点人物
export function getPersonList(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/personList/${params.id}`,
params
})
}
//创新主体科研实力:专利数量统计
export function getPatentList(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/patentList/${params.id}`,
params
})
}
// 创新主体科研实力:论文数量统计
export function getPaperList(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/paperList/${params.id}`,
params
})
}
//创新主体科研实力:领域实力分布
export function getStudyFieldList(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/studyFieldList/${params.id}`,
})
}
//创新主体科研实力:经费增长情况
export function getFundGrowth(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/fundGrowth/${params.id}`,
params
})
}
//创新主体科研实力:经费来源
export function getFundFromList(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/fundFromList/${params.id}`,
params
})
}
//创新主体科研实力:经费分配
export function getFundToList(params) {
return request({
method: 'GET',
url: `/api/innovateSubject/fundToList/${params.id}`,
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
import request from "@/api/request.js";
// 规则限制-首页统计接口
export function getRuleRestrictionStatistics() {
return request({
method: 'GET',
url: `/api/ruleLimitInfo/statCount`
})
}
// 规则限制-查询最新动态接口
export function getRuleRestrictionLatest(params) {
return request({
method: 'GET',
url: `/api/ruleLimitInfo/getLatestUpdates`,
params
})
}
// 规则限制-获取风险信号接口
/**
* @param {moduleId} 模块ID
* @header token
*/
export function getRuleRestrictionRiskSignal(params) {
return request({
method: 'GET',
url: `/api/commonFeature/riskSignal/${params.moduleId}`
})
}
// 规则限制-获取新闻资讯接口
/**
* @param {moduleId} 模块ID
* @header token
*/
export function getRuleRestrictionNews(params) {
return request({
method: 'GET',
url: `/api/commonFeature/news/${params.moduleId}`
})
}
// 规则限制-获取社交媒体接口
/**
* @param {moduleId} 模块ID
* @header token
*/
export function getRuleRestrictionSocialMedia(params) {
return request({
method: 'GET',
url: `/api/commonFeature/remarks/${params.moduleId}`
})
}
\ No newline at end of file
// 科研资助体系
import request from "@/api/request.js";
// 资助体系:来源机构列表
/**
* @param {moduleId}
*/
export function getFundSourceOrg() {
return request({
method: 'GET',
url: `/api/fund/fundSourceOrg`,
})
}
/**
* 资助体系:最新资助项目
*/
export function getNewProject() {
return request({
method: "GET",
url: `/api/fund/newProject`
})
}
// 获取新闻资讯
/**
* @param {moduleId}
*/
export function getNews(moduleId = "0107") {
return request({
method: 'GET',
url: `/api/commonFeature/news/${moduleId}`,
})
}
/**
* 社交媒体
*/
export function getSocialMediaInfo(moduleId = "0107") {
return request({
method: "GET",
url: `/api/commonFeature/remarks/${moduleId}`
})
}
// 获取风险信号
/**
* @param {moduleId}
*/
export function getRiskSignal(moduleId = "0107") {
return request({
method: 'GET',
url: `/api/commonFeature/riskSignal/${moduleId}`,
})
}
//资助体系v2.0:资助领域分布情况:资助经费
export function findFundField(params) {
return request({
method: 'GET',
url: `/api/fund/countryFundsAreaList/${params.year}`,
})
}
//资助体系v2.0:资助领域分布情况:资助项目
export function findCountryProjectAreaList(params) {
return request({
method: 'GET',
url: `/api/fund/countryProjectAreaList/${params.year}`,
})
}
//资助体系v2.0:资助经费变化情况:资助经费
export function getCountryFundingChange(params) {
return request({
method: 'GET',
url: `/api/fund/countryFundingChange/${params.startDate}`
})
}
//资助体系v2.0:资助经费变化情况:资助项目
export function getCountryFundProjectChange(params) {
return request({
method: 'GET',
url: `/api/fund/countryFundProjectChange/${params.startDate}`
})
}
//资助体系v2.0:机构资助领域情况
export function getOrgFundsArea(params) {
return request({
method: 'GET',
url: `/api/fund/countryFundsArea/${params.year}`,
})
}
//资助体系v2.0:项目资助强度分布
export function getOrgFundStrength(params) {
return request({
method: 'GET',
url: `/api/fund/orgFundStrength/${params.year}`,
})
}
//资助体系:来源机构列表
export function geFundSourceOrg() {
return request({
method: 'GET',
url: `/api/fund/fundSourceOrg`,
})
}
// 获取行业领域列表
export function getAreaType() {
return request({
method: 'GET',
url: `/api/commonDict/areaType`,
})
}
//资助体系v2.0:资助项目列表分页
export function getProjectListNew(params) {
return request({
method: 'GET',
url: `/api/fund/getProjectListNew`,
params
})
}
<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"
@mouseenter="handleIsShowCountryMore(true)"
@mouseleave="handleIsShowCountryMore(false)"
>
<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>
<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>
<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>
.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: var(--color-main-active);
}
.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;
}
}
}
.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>
\ 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();
});
......
......@@ -3,22 +3,22 @@ import InnovationSubject from "@/views/innovationSubject/index.vue";
import InnovationInstitution from "@/views/innovationSubject/innovativeInstitutions/index.vue";
const innovationSubjectRoutes = [
//创新主体
//创新主体
{
path: "/innovationSubject",
name: "InnovationSubject",
component: InnovationSubject,
meta: {
title: "主要创新主体"
title: "M国主要创新主体分析概览"
}
},
{
path: "/InnovativeInstitutions",
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,10 +110,19 @@ const exportControlRoutes = [
path: "/exportControl/origin",
name: "entityListOrigin",
component: () => import("@/views/exportControl/v2.0SingleSanction/originPage/index.vue"),
// meta: {
// title: "实体清单原文"
// }
},
// V2.0全部实体清单
{
path: "/exportControl/commercialControlList",
name: "commercialControlList",
component: () => import("@/views/exportControl/v2.0CommercialControlList/index.vue"),
meta: {
title: "实体清单原文"
title: "全部实体清单"
}
},
}
]
export default exportControlRoutes
\ No newline at end of file
......@@ -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: "报告原文"
// }
},
]
......
......@@ -39,7 +39,7 @@ const getPieChart = (data, colorList) => {
maxSurfaceAngle: 80
},
labelLayout: function (params) {
const isLeft = params.labelRect.x < 556 / 2;
const isLeft = params.labelRect.x < params.viewWidth / 2;
const points = params.labelLinePoints;
// Update the end point.
points[2][0] = isLeft
......
......@@ -2,7 +2,8 @@
<div class="layout-container">
<!-- 导航菜单 -->
<div class="layout-main">
<div class="layout-main-header">
<div class="header-main">
<div class="layout-main-header">
<div class="layout-main-header-left-box">
<div class="left-box-top">
<div class="icon">
......@@ -68,16 +69,18 @@
</div> -->
</div>
</div>
</div>
</div>
<div class="layout-main-center">
<router-view />
</div>
</div>
<div class="layout-report-box" v-if="activeName === '法案原文'">
<div class="report-close" @click="handleSwitchActiveName('分析报告')">
<img src="./assets/images/report-close-icon.png" alt="" />
</div>
<div class="report-main">
<div class="report-close" @click="handleSwitchActiveName('分析报告')">
<img src="./assets/images/report-close-icon.png" alt="" />
</div>
<div class="report-header">
<div class="report-header-left">
<!-- <div class="text">法案版本:</div>
......@@ -210,18 +213,18 @@ const mainHeaderBtnList = ref([
name: "深度挖掘",
path: "/billLayout/deepDig"
},
{
icon: icon3,
activeIcon: icon3Active,
name: "影响分析",
path: "/billLayout/influence"
},
{
icon: icon4,
activeIcon: icon4Active,
name: "相关情况",
path: "/billLayout/relevantCircumstance"
}
// {
// icon: icon3,
// activeIcon: icon3Active,
// name: "影响分析",
// path: "/billLayout/influence"
// },
// {
// icon: icon4,
// activeIcon: icon4Active,
// name: "相关情况",
// path: "/billLayout/relevantCircumstance"
// }
]);
const activeTitle = ref("法案概况");
......@@ -247,164 +250,33 @@ onMounted(() => {
<style lang="scss" scoped>
.layout-container {
width: 1920px;
height: 1016px;
width: 100%;
// height: 1016px;
background: rgba(249, 250, 252, 1);
position: relative;
// margin: 0 auto;
.layout-header {
width: 1920px;
height: 64px;
// background: #0a121e;
background: #fff;
// border-bottom: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1);
// margin-bottom: 13px;
display: flex;
position: relative;
z-index: 99;
.layout-header-left {
width: 480px;
display: flex;
.logo-box {
width: 36px;
height: 36px;
margin: 14px;
img {
width: 100%;
height: 100%;
border-radius: 6px;
}
}
.title-box {
height: 64px;
width: 350px;
margin: 0 5px;
color: #eee;
line-height: 64px;
font-size: 20px;
font-weight: bold;
color: rgba(10, 18, 30, 1);
font-family: Microsoft YaHei;
font-size: 22px;
font-weight: 700;
text-align: left;
}
}
.layout-header-center {
width: 700px;
display: flex;
justify-content: space-between;
margin-left: 200px;
.nav-item {
border-radius: 5px;
cursor: pointer;
display: flex;
&:hover {
background: rgba(255, 255, 255, 0.2);
}
.nav-icon-box {
width: 25px;
height: 25px;
margin: 22px 0 20px 5px;
.nav-icon {
width: 20px;
height: 20px;
img {
width: 100%;
height: 100%;
}
}
.nav-icon-active {
width: 20px;
height: 20px;
img {
width: 100%;
height: 100%;
}
}
}
.name-box {
margin: 18px 5px;
height: 30px;
text-align: center;
line-height: 30px;
color: rgba(59, 65, 75, 1);
letter-spacing: 2px;
font-size: 18px;
}
// .nameActive {
// color: #ea9518;
// font-weight: bold;
// }
}
.navItemActive {
// background: #295dab;
// border-bottom: 4px solid #ea9518;
// &:hover {
// background: #295dab;
// border-bottom: 4px solid #ea9518;
// }
}
}
.layout-header-right {
flex: 1;
display: flex;
justify-content: flex-end;
.nav-search {
width: 22px;
height: 22px;
margin: 21px 0;
}
.nav-message {
width: 22px;
height: 22px;
margin: 21px 30px;
}
.nav-usr {
width: 110px;
display: flex;
height: 40px;
margin: 12px 5px 12px 0;
.usr-img {
margin-top: 4px;
height: 32px;
width: 32px;
background: rgba(255, 255, 255, 0.5);
border-radius: 100%;
box-sizing: border-box;
padding: 4px;
// img {
// width: 100%;
// height: 100%;
// }
}
.usr-info {
height: 40px;
line-height: 40px;
text-align: center;
font-size: 14px;
margin-left: 10px;
}
}
}
}
.layout-main {
width: 100%;
height: calc(100% - 64px);
height: calc(100vh - 64px);
overflow-y: auto;
.header-main {
position: sticky;
top: 0;
z-index: 1000;
width: 100%;
background-color: #fff;
box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.05);
overflow: hidden;
}
.layout-main-header {
height: 137px;
background: rgba(255, 255, 255, 1);
width: 1744px;
background: #fff;
display: flex;
justify-content: space-between;
margin: 0 auto;
padding-top: 10px;
.layout-main-header-left-box {
width: 900px;
margin-left: 160px;
margin-top: 13px;
.left-box-top {
height: 64px;
display: flex;
......@@ -489,8 +361,8 @@ onMounted(() => {
}
.layout-main-header-right-box {
width: 600px;
margin-right: 150px;
margin-top: 19px;
// margin-right: 150px;
// margin-top: 19px;
.right-box-top {
.time {
height: 24px;
......@@ -651,7 +523,10 @@ onMounted(() => {
}
}
.layout-main-center {
height: calc(100% - 137px);
// height: calc(100% - 137px);
width: 1744px;
margin: 0 auto;
padding-bottom: 100px;
}
}
.layout-report-box {
......@@ -662,25 +537,28 @@ onMounted(() => {
width: 100%;
height: 926px;
background: rgba(248, 249, 250, 1);
.report-close {
position: absolute;
top: 24px;
right: 178px;
width: 32px;
height: 32px;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
}
.report-main {
width: 1600px;
position: relative;
width: 1744px;
height: 926px;
margin: 0 auto;
background: #fff;
box-sizing: border-box;
padding: 0 69px;
// border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.report-close {
position: absolute;
top: 24px;
right: 24px;
width: 32px;
height: 32px;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
}
.report-header {
height: 77px;
border-bottom: 1px solid rgba(240, 242, 244, 1);
......
......@@ -65,9 +65,13 @@ const handleClickLeftSiderBtn = (item,index) => {
.wrap {
display: flex;
height: 879px;
position: relative;
// background: (243, 243, 244, 1);
.sider {
width: 160px;
position: absolute;
top: 0;
left: -160px;
.sider-btn {
margin-top: 20px;
margin-left: 20px;
......
......@@ -933,7 +933,7 @@ onMounted(() => {
width: 1064px;
height: 846px;
.box2 {
width: 1064px;
width: 1210px;
height: 415px;
border: 1px solid rgba(234, 236, 238, 1);
border-radius: 10px;
......@@ -948,7 +948,7 @@ onMounted(() => {
}
.box3 {
margin-top: 16px;
width: 1064px;
width: 1210px;
height: 415px;
border: 1px solid rgba(234, 236, 238, 1);
border-radius: 10px;
......
......@@ -777,7 +777,7 @@ onMounted(async () => {
height: 415px;
background: rgb(255, 255, 255);
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.box1-main {
height: 359px;
.box1-main-center {
......@@ -897,7 +897,7 @@ onMounted(async () => {
height: 415px;
background: rgb(255, 255, 255);
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.box2-main {
height: 359px;
.box2-main-center {
......@@ -1051,77 +1051,6 @@ onMounted(async () => {
}
}
}
// .box2-main-center-content {
// height: 264px;
// display: flex;
// flex-wrap: wrap;
// justify-content: space-between;
// .box2-item {
// width: 402px;
// height: 58px;
// box-sizing: border-box;
// border: 1px solid rgba(243, 243, 244, 1);
// border-radius: 4px;
// margin-bottom: 8px;
// display: flex;
// .box2-item-left {
// width: 36px;
// height: 36px;
// margin-left: 16px;
// margin-top: 11px;
// img {
// width: 100%;
// height: 100%;
// }
// }
// .box2-item-center {
// margin-left: 14px;
// margin-top: 5px;
// width: 220px;
// .box2-item-center-top {
// height: 24px;
// color: rgba(59, 65, 75, 1);
// font-family: Microsoft YaHei;
// font-size: 14px;
// font-weight: 600;
// line-height: 24px;
// }
// .box2-item-center-bottom {
// height: 24px;
// color: rgba(132, 136, 142, 1);
// font-family: Microsoft YaHei;
// font-size: 14px;
// font-weight: 400;
// line-height: 24px;
// }
// }
// .box2-item-right {
// margin-left: 2px;
// .box2-item-right-top {
// height: 24px;
// color: rgba(206, 79, 81, 1);
// font-family: Microsoft YaHei;
// font-size: 14px;
// font-weight: 600;
// line-height: 24px;
// }
// .box2-item-right-bottom {
// height: 24px;
// color: rgba(132, 136, 142, 1);
// font-family: Microsoft YaHei;
// font-size: 14px;
// font-weight: 400;
// line-height: 24px;
// text-align: right;
// }
// }
// }
// }
// .box2-main-center-footer {
// height: 36px;
// display: flex;
// justify-self: center;
// }
}
.box2-main-footer {
width: 830px;
......@@ -1174,14 +1103,14 @@ onMounted(async () => {
.right {
margin-left: 16px;
margin-top: 16px;
width: 860px;
width: 868px;
height: 847px;
background: rgb(255, 255, 255);
.box3 {
width: 100%;
height: 100%;
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.box3-main {
height: 791px;
.box3-main-center {
......
<template>
<div class="home-container">
<!-- <div class="home-top">
<div class="home-top-left-box">
<div class="left-box-top">
<div class="icon">
<img src="./assets/images/USA-logo.png" alt="" />
</div>
<div class="info">
<div class="info-box1">{{ "H.R.1(119th)-大而美法案" }}</div>
<div class="info-box2">
{{ "第119届美国国会众议院第1号法案 One Big Beautiful Bill Act" }}
</div>
</div>
</div>
<div class="left-box-bottom">
<div
class="left-box-bottom-item"
style="border-bottom: 2px solid rgba(22, 119, 255, 1)"
>
<div class="icon">
<img src="./assets/icons/icon1.png" alt="" />
</div>
<div class="name" style="color: rgba(22, 119, 255, 1)">
法案概况
</div>
</div>
<div class="left-box-bottom-item">
<div class="icon">
<img src="./assets/icons/icon2.png" alt="" />
</div>
<div class="name">深度挖掘</div>
</div>
<div class="left-box-bottom-item">
<div class="icon">
<img src="./assets/icons/icon3.png" alt="" />
</div>
<div class="name">影响分析</div>
</div>
<div class="left-box-bottom-item">
<div class="icon">
<img src="./assets/icons/icon4.png" alt="" />
</div>
<div class="name">相关情况</div>
</div>
</div>
</div>
<div class="home-top-right-box">
<div class="right-box-top">
<div class="time">{{ "2025年7月" }}</div>
<div class="name">{{ "乔迪·阿灵顿(Jodey Arrington)​​ " }}</div>
</div>
<div class="right-box-bottom">
<el-button type="plain" size="large" icon="Search"
>法案原文</el-button
>
<el-button type="primary" size="large" icon="EditPen"
>分析报告</el-button
>
</div>
</div>
</div> -->
<div class="home-center">
<div class="home-sider">
<div
......@@ -116,62 +56,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>
......@@ -282,8 +166,12 @@ onMounted(() => {});
.home-center {
display: flex;
height: 879px;
position: relative;
.home-sider {
width: 160px;
position: absolute;
top: 0;
left: -160px;
.sider-btn {
margin-top: 20px;
margin-left: 20px;
......
......@@ -58,9 +58,13 @@ const handleClickLeftSiderBtn = (item,index) => {
.influence-wrap {
display: flex;
height: 879px;
position: relative;
// background: (243, 243, 244, 1);
.sider {
width: 160px;
position: absolute;
top: 0;
left: -160px;
.sider-btn {
margin-top: 20px;
margin-left: 10px;
......
......@@ -811,7 +811,8 @@ onMounted(async () => {
width: 480px;
height: 848px;
background: rgba(255, 255, 255);
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.left-top {
margin: 0 auto;
width: 446px;
......@@ -949,7 +950,8 @@ onMounted(async () => {
width: 1247px;
height: 847px;
background: rgba(255, 255, 255);
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
position: relative;
.graph-dialog {
width: 740px;
......
......@@ -16,7 +16,7 @@
</div>
<div class="box1-main">
<div class="box1-left">
<img src="./assets/images/image1.png" alt="" />
<img :src=" basicInfo.imageUrl || defaultBill" alt="" />
</div>
<div class="box1-right">
<div class="box1-right-item">
......@@ -31,9 +31,6 @@
<div class="box1-right-item">
<div class="item-left">相关领域:</div>
<div class="item-right1">
<!-- <div class="right1-item">跨境电商</div>
<div class="right1-item">新能源产业</div>
<div class="right1-item">半导体产业</div> -->
<div class="right1-item" v-for="item in basicInfo.hylyList" :key="item">{{ item }}</div>
</div>
</div>
......@@ -177,7 +174,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>
......@@ -355,16 +352,18 @@ import STimeline from "./STimeline.vue";
import { getBillInfo, getBillPerson, getBillEvent, getBillDyqk } from "@/api/bill";
import defaultAvatar from "../assets/images/default-icon1.png";
import defaultNew from "../assets/images/default-icon-news.png";
import defaultBill from "./assets/images/image1.png"
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");
......@@ -376,13 +375,6 @@ const handleClcikDialogBoxBtn = index => {
dialogBoxBtnActive.value = index;
};
const handleChangeFaId = val => {
console.log("val", val);
handleGetBillPerson(val);
};
const timelineData = ref([]);
const isShowDialog = ref(false);
......@@ -520,7 +512,7 @@ onMounted(() => {
height: 415px;
background: #fff;
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.box1-main {
display: flex;
height: 394px;
......@@ -528,6 +520,10 @@ onMounted(() => {
margin-left: 23px;
width: 247px;
height: 350px;
img {
width: 100%;
height: 100%;
}
}
.box1-right {
margin-left: 31px;
......@@ -541,49 +537,38 @@ onMounted(() => {
width: 100px;
height: 14px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 600;
font-family: "Microsoft YaHei";
font-size: 16px;
font-weight: 700;
line-height: 14px;
text-align: left;
}
.item-right {
height: 14px;
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 600;
font-family: "Microsoft YaHei";
font-size: 16px;
font-weight: 700;
line-height: 14px;
letter-spacing: 0px;
text-align: left;
}
.item-right1 {
display: flex;
flex-wrap: wrap;
align-items: center;
width: 700px;
height: 40px;
overflow-x: auto;
overflow-y: hidden;
&::-webkit-scrollbar {
height: 4px;
}
&::-webkit-scrollbar-thumb {
border-radius: 4px;
background: #e1e1e1;
}
&::-webkit-scrollbar-track {
background: transparent;
}
min-height: 40px;
.right1-item {
flex-shrink: 0;
margin-right: 10px;
margin-bottom: 8px;
padding: 1px 8px;
box-sizing: border-box;
border: 1px solid rgba(186, 224, 255, 1);
border-radius: 4px;
background: rgba(230, 244, 255, 1);
color: rgba(22, 119, 255, 1);
font-family: Microsoft YaHei;
font-family: "Microsoft YaHei";
font-size: 14px;
font-weight: 400;
line-height: 20px;
......@@ -593,8 +578,8 @@ onMounted(() => {
.right2-item {
height: 14px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-family: "Microsoft YaHei";
font-size: 16px;
font-weight: 400;
line-height: 14px;
text-align: left;
......@@ -604,8 +589,8 @@ onMounted(() => {
.item-right3 {
height: 14px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-family: "Microsoft YaHei";
font-size: 16px;
font-weight: 400;
line-height: 14px;
text-align: left;
......@@ -618,7 +603,7 @@ onMounted(() => {
.step {
height: 28px;
line-height: 26px;
font-size: 14px;
font-size: 16px;
text-align: center;
position: relative;
background: transparent;
......@@ -702,7 +687,7 @@ onMounted(() => {
height: 415px;
background: #fff;
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
position: relative;
.box2-main {
margin-top: 10px;
......@@ -841,7 +826,7 @@ onMounted(() => {
height: 845px;
background: #fff;
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.introduction-wrap-right-main {
.right-main-box1 {
// height: 218px; 将选择框去掉后高度变化
......
......@@ -596,7 +596,7 @@ onMounted(() => {
width: 100%;
height: 100%;
display: flex;
padding: 16px 160px;
padding: 16px 0px;
justify-content: space-between;
.box-header {
height: 45px;
......@@ -680,10 +680,10 @@ onMounted(() => {
}
}
.left {
width: 1068px;
width: 1212px;
height: 847px;
border-radius: 4px;
box-shadow: 0px 0px 15px 0px rgba(60, 87, 126, 0.2);
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.box1 {
position: relative;
......@@ -721,7 +721,7 @@ onMounted(() => {
}
}
.box1-main {
width: 1068px;
width: 1212px;
height: 730px;
// background: orange;
}
......@@ -773,8 +773,8 @@ onMounted(() => {
.right {
width: 520px;
height: 848px;
border-radius: 4px;
box-shadow: 0px 0px 15px 0px rgba(60, 87, 126, 0.2);
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.box2 {
.box2-main {
......
......@@ -103,7 +103,7 @@
<div class="right-box1">
<div class="box-header">
<div class="box-header-left"></div>
<div class="box-header-title">限制方式</div>
<div class="box-header-title">限制手段</div>
<div class="header-right">
<div class="icon">
<img src="@/assets/icons/box-header-icon1.png" alt="" />
......@@ -130,7 +130,7 @@
<div class="right-box2">
<div class="box-header">
<div class="box-header-left"></div>
<div class="box-header-title">涉及行业</div>
<div class="box-header-title">涉及领域</div>
<div class="header-right">
<div class="icon">
<img src="@/assets/icons/box-header-icon1.png" alt="" />
......@@ -182,26 +182,12 @@ const handleSelectBtn = index => {
btnActiveIndex.value = index;
};
const chart1Data = ref([
{ name: "出口管制", value: 24 },
{ name: "金融制裁", value: 30 },
{ name: "资本管制", value: 31 },
{ name: "对台军售", value: 32 },
{ name: "关税贸易", value: 50 },
{ name: "技术封锁", value: 46 },
{ name: "供应链打压", value: 40 }
]);
const chart1Data = ref([]);
const chart1ColorList = ref(["#4096ff", "#b37feb", "#ff7875", "#85a5ff", "#69b1ff", "#ffc069", "#87e8de"]);
const chart2ColorList = ref(["#ff7875", "#85a5ff", "#95de64", "#ffc069", "#85e5db"]);
const chart2Data = ref([
// { name: "军工", value: 85 },
// { name: "金融业", value: 98 },
// { name: "新能源", value: 95 },
// { name: "半导体", value: 80 },
// { name: "跨境电商", value: 71 },
]);
const chart2Data = ref([]);
// 绘制echarts图表
const setChart = (option, chartId) => {
......@@ -367,8 +353,6 @@ onMounted(async () => {
handleGetBillContentTk("N");
await handleGetBillContentXzfs();
await handleGetBillHyly();
let chart1 = getPieChart(chart1Data.value, chart1ColorList.value);
setChart(chart1, "chart1");
});
</script>
......@@ -430,7 +414,8 @@ onMounted(async () => {
margin-top: 16px;
width: 1150px;
height: 845px;
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.left-top {
height: 45px;
......@@ -599,7 +584,8 @@ onMounted(async () => {
.right-box1 {
width: 576px;
height: 415px;
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.right-box1-main {
width: 576px;
......@@ -655,7 +641,8 @@ onMounted(async () => {
margin-top: 15px;
width: 576px;
height: 415px;
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.right-box2-main {
width: 576px;
......
......@@ -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">
......@@ -166,7 +166,7 @@ const tabList = ref([
{
name: "新闻",
id: 8
},
}
// {
// name: "社媒",
// id: 9
......@@ -304,58 +304,61 @@ const handleSearch = async () => {
} catch (error) {}
};
const handleToPage = async (item) => {
if(item.typeStr === '人物') {
const personTypeList = JSON.parse(window.sessionStorage.getItem("personTypeList"));
let type = 0;
let personTypeName = "";
const handleToPage = async item => {
console.log("item", item);
const params = {
personId: item.id
};
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 (item.typeStr === "人物") {
const personTypeList = JSON.parse(window.sessionStorage.getItem("personTypeList"));
let type = 0;
let personTypeName = "";
if (arr && arr.length > 0) {
personTypeName = arr[0].typeName;
console.log("personTypeName", personTypeName);
const params = {
personId: item.id
};
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 === "科技企业领袖") {
type = 1;
} else if (personTypeName === "国会议员") {
type = 2;
} else if (personTypeName === "智库研究人员") {
type = 3;
if (arr && arr.length > 0) {
personTypeName = arr[0].typeName;
console.log("personTypeName", personTypeName);
if (personTypeName === "科技企业领袖") {
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 {
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 {
personTypeName = "";
ElMessage.warning("找不到当前人员的类型值!");
ElMessage.warning("获取人物全局信息错误");
return;
}
} else {
ElMessage.warning("获取人物全局信息错误");
return;
}
} catch (error) {}
} catch (error) {}
}
window.sessionStorage.setItem("curTabName", item.originalTitle);
let curRoute;
switch (item.typeStr) {
case "法案":
......@@ -487,7 +490,7 @@ onMounted(() => {
}
.wrapper {
width: 100%;
height: calc(100vh - 96px);
height: 100%;
background: url("../assets/images/background.png") no-repeat;
background-size: 100% 100%;
.header {
......
<template>
<el-tooltip
effect="dark"
:content="content"
popper-class="common-prompt-popper"
placement="top"
:show-after="500"
>
<div class="text-ellipsis">
<slot>{{ content }}</slot>
</div>
</el-tooltip>
</template>
<script setup>
defineProps({
content: {
type: String,
default: ""
}
});
</script>
<style scoped>
.text-ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
cursor: pointer;
}
</style>
<style>
.common-prompt-popper.el-popper {
padding: 8px 16px !important;
border-radius: 10px !important;
background-color: rgb(59, 65, 75) !important;
font-size: 16px !important;
font-weight: 400 !important;
font-family: "Microsoft YaHei" !important;
line-height: 30px !important;
color: #fff !important;
border: none !important;
}
.common-prompt-popper.el-popper .el-popper__arrow::before {
background-color: rgb(59, 65, 75) !important;
border-color: rgb(59, 65, 75) !important;
}
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论