提交 d5e537f5 authored 作者: huhuiqing's avatar huhuiqing

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

......@@ -9,58 +9,8 @@
</div>
<div class="brand-text" @click="handleToHome">
<div class="text-ch">某方向风险监测预警系统</div>
<!-- <div class="text-en">
National Science and Technology Security Risk Monitoring and Early Warning System
</div> -->
</div>
</div>
<!-- <div class="nav-menu">
<el-dropdown @command="handleHomeCommand" class="home-dropdown">
<div class="nav-link dropdown-trigger">
<el-icon>
<House />
</el-icon>
<span>首页</span>
<el-icon class="dropdown-arrow">
<ArrowDown />
</el-icon>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="/billHome">法案首页</el-dropdown-item>
<el-dropdown-item command="/decree">政令首页</el-dropdown-item>
<el-dropdown-item command="/thinkTank">智库首页</el-dropdown-item>
<el-dropdown-item command="/exportControl">出口管制</el-dropdown-item>
<el-dropdown-item command="/finance">投融资限制</el-dropdown-item>
<el-dropdown-item command="/marketAccessRestrictions">市场准入限制</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<div class="nav-link">
<el-icon>
<User />
</el-icon>
<span>国家</span>
</div>
<div class="nav-link">
<el-icon>
<Location />
</el-icon>
<span>领域</span>
</div>
<div class="nav-link">
<el-icon>
<Document />
</el-icon>
<span>要素</span>
</div>
<div class="nav-link">
<el-icon>
<Bell />
</el-icon>
<span>事件</span>
</div>
</div> -->
<div class="user-info">
<div class="email">
<img src="@/assets/icons/header-icon.png" alt="" />
......@@ -73,18 +23,18 @@
</nav>
</el-header>
<!-- 面包屑导航 -->
<!-- <Breadcrumb /> -->
<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 ref="target" class="draggable-box" :style="style">
<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="text">智能问答</div>
</div>
<div class="ai-dialog" v-if="isShowAiBox">
<AiBox @close="closeAiBox" />
</div>
......@@ -93,14 +43,30 @@
</template>
<script setup>
import { ref } from "vue";
import { ref, computed } from "vue";
import { Monitor, House, User, Location, Document, Bell, Message, ArrowDown } from "@element-plus/icons-vue";
import { useRouter } from "vue-router";
import Breadcrumb from "@/components/BreadCrumb/index.vue";
import AiBox from "./components/AiBox.vue";
import { useDraggable } from "@vueuse/core";
const router = useRouter();
const target = ref(null);
const { x, y, isDragging } = useDraggable(target, {
initialValue: { x: 1770, y: 800 },
onStart: () => console.log("开始拖动"),
onEnd: () => console.log("结束拖动")
});
const style = computed(() => ({
position: "absolute",
left: `${x.value}px`,
top: `${y.value}px`,
cursor: isDragging.value ? "grabbing" : "grab"
}));
const handleToHome = () => {
router.push({
path: "/overview"
......@@ -320,12 +286,18 @@ body {
.wrapper {
position: relative;
.target {
// position: absolute;
// bottom: 20%;
// right: 46px;
z-index: 9999;
}
.ai-btn {
position: absolute;
bottom: 20%;
right: 46px;
z-index: 9999;
// position: absolute;
// bottom: 20%;
// right: 46px;
// z-index: 9999;
cursor: pointer;
.icon {
......
import http from './request'
/**
* 智库信息相关的API接口
* 假设您有一个名为 'http' 的对象来处理请求,且已在 http 封装中处理了 token。
* 例如:
* import http from '@/utils/request';
*/
// --- 智库信息接口 ---
/**
* @description 根据智库ID获取智库基本信息
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据,data字段类型为 ThinkTankBasicInfoVO
* @returns {string} data.country - 国家
* @returns {string} data.foundingDate - 成立时间
* @returns {string} data.position - 位置
* @returns {string} data.nature - 机构性质
* @returns {number} data.memnum - 成员数
* @returns {number} data.budget - 年度预算
*/
export const getThinkTankBasicInfo = (params) => {
// 假设 http 封装中会自动处理 token
return http.get(`/thinkTankInfo/basic/${params.id}`);
}
/**
* @description 根据智库ID获取分支机构信息
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据,data字段为数组 List<ThinkTankBranchVO>
* @returns {Array<object>} data[] - 分支机构列表
* @returns {string} data[].city - 城市
* @returns {string} data[].area - 区域
* @returns {boolean} data[].hq - 是否总部
*/
export const getThinkTankBranchInfo = (params) => {
return http.get(`/thinkTankInfo/branch/${params.id}`);
}
/**
* @description 根据智库ID获取经费来源
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据,data字段为数组 List<ThinkTankFundsSourceVO>
* @returns {Array<object>} data[] - 经费来源列表
* @returns {number} data[].amount - 金额
* @returns {string} data[].institution - 机构
* @returns {number} data[].percent - 占比
*/
export const getThinkTankFundsSource = (params) => {
return http.get(`/thinkTankInfo/fundsSource/${params.id}`);
}
/**
* @description 根据智库ID获取经费统计
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据,data字段类型为 ThinkTankFundsTotalVO
* @returns {number} data.totalJe - 总金额
* @returns {number} data.zfJe - 政府资金
* @returns {number} data.otherJe - 非政府资金
*/
export const getThinkTankFundsTotal = (params) => {
return http.get(`/thinkTankInfo/fundsTotal/${params.id}`);
}
/**
* @description 根据智库ID获取成员列表
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据,data字段为数组 List<ThinkTankPersonVO>
* @returns {Array<object>} data[] - 成员列表
* @returns {string} data[].name - 姓名
* @returns {string} data[].describe - 描述
*/
export const getThinkTankPersonList = (params) => {
return http.get(`/thinkTankInfo/person/${params.id}`);
}
/**
* @description 根据智库ID获取政策情况
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @param {Array<string>} [params.researchTypeIds] - 研究类型ID列表 (Query参数)
* @returns {Promise<object>} 响应数据,data字段类型为 ThinkTankPolicyCountVO
* @returns {Array<object>} data.statusVoList[] - 状态列表
* @returns {string} data.statusVoList[].statusName - 状态名称
* @returns {number} data.statusVoList[].statusNum - 状态数量
* @returns {Array<object>} data.policyVoList[] - 政策列表
* @returns {string} data.policyVoList[].content - 政策内容
* @returns {string} data.policyVoList[].status - 政策状态
* @returns {number} data.policyVoList[].reportId - 报告id
* @returns {string} data.policyVoList[].name - 报告名称
* @returns {string} data.policyVoList[].times - 报告时间 (date格式)
*/
export const getThinkTankPolicyInfo = (params) => {
const { id, ...queryParams } = params;
// 假设 http.get 会将 queryParams 作为查询参数传递
return http.get(`/thinkTankInfo/policy/${id}`, { params: queryParams });
}
/**
* @description 获取智库报告类型列表
* @returns {Promise<object>} 响应数据,data字段为数组 List<DThinkTankReportType>
* @returns {Array<object>} data[] - 报告类型列表
* @returns {number} data[].id - 主键
* @returns {string} data[].typeId - 报告类型id
* @returns {string} data[].typeName - 报告类型
*/
export const getThinkTankReportTypeList = () => {
return http.get('/thinkTankInfo/reportType');
}
/**
* @description 根据智库ID获取研究领域情况
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据,data字段为数组 List<ThinkTankResearchAreaVO>
* @returns {Array<object>} data[] - 研究领域列表
* @returns {string} data[].describe - 研究领域描述
* @returns {string} data[].time - 研究时间范围
*/
export const getThinkTankResearchArea = (params) => {
return http.get(`/thinkTankInfo/researchArea/${params.id}`);
}
// /thinkTankInfo/report/{id}
export const getThinkTankReport = (params) => {
return http.get(`/thinkTankInfo/report/${params.id}`);
}
/**
* @description 根据智库ID获取智库全局信息
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据,data字段类型为 ThinkTankInfoVO
* @returns {string} data.name - 智库名称
* @returns {string} data.describe - 智库描述
* @returns {string} data.ename - 智库英文名
* @returns {string} data.url - 智库网址
* @returns {Array<string>} data.tags[] - 智库标签列表
*/
export const getThinkTankSummary = (params) => {
return http.get(`/thinkTankInfo/summary/${params.id}`);
}
// --- 智库报告接口 ---
/**
* @description 根据报告ID获取报告内容
* @param {object} params - 请求参数
* @param {number|string} params.id - 报告id (路径参数, 必须)
* @param {number} [params.currentPage] - 当前页码 (Query参数)
* @param {number} [params.pageSize] - 分页大小 (Query参数)
* @returns {Promise<object>} 响应数据,data字段类型为 Page<ThinkTankReportContentVO> (分页内容对象)
*/
export const getThinkTankReportContent = (params) => {
const { id, ...queryParams } = params;
return http.get(`/thinkTankReport/content/${id}`, { params: queryParams });
}
/**
* @description 根据报告ID获取政策情况
* @param {object} params - 请求参数
* @param {number|string} params.id - 报告id (路径参数, 必须)
* @param {Array<string>} [params.statusList] - 政策状态ID列表 (Query参数)
* @returns {Promise<object>} 响应数据,data字段为数组 List<ThinkTankReportPolicyVO>
* @returns {Array<object>} data[] - 政策列表
* @returns {string} data[].content - 政策内容
* @returns {string} data[].status - 政策状态
*/
export const getThinkTankReportPolicy = (params) => {
const { id, ...queryParams } = params;
return http.get(`/thinkTankReport/policy/${id}`, { params: queryParams });
}
/**
* @description 根据报告ID获取报告全局信息
* @param {object} params - 请求参数
* @param {number|string} params.id - 报告id (路径参数, 必须)
* @returns {Promise<object>} 响应数据,data字段类型为 ThinkTankReportDetailVO
* @returns {string} data.name - 报告名称
* @returns {string} data.times - 报告时间 (date格式)
* @returns {string} data.ename - 报告英文名称
* @returns {string} data.summary - 报告摘要
* @returns {string} data.thinkTankName - 智库名称
* @returns {Array<string>} data.tags[] - 报告标签列表
* @returns {Array<string>} data.researchTypes[] - 报告研究类型列表
*/
export const getThinkTankReportSummary = (params) => {
return http.get(`/thinkTankReport/summary/${params.id}`);
}
// --- 智库概览接口 ---
/**
* @description 获取概览智库政策
* @param {object} [params] - 请求参数
* @param {Array<string>} [params.researchTypeIds] - 研究类型ID列表 (Query参数)
* @param {Array<string>} [params.statusList] - 政策状态ID列表 (Query参数)
* @returns {Promise<object>} 响应数据,data字段为数组 List<ThinkTankPolicyVO>
* @returns {Array<object>} data[] - 政策列表
* @returns {string} data[].content - 政策内容
* @returns {string} data[].status - 政策状态
* @returns {number} data[].reportId - 报告id
* @returns {string} data[].name - 报告名称
* @returns {string} data[].times - 报告时间 (date格式)
*/
export const getOverviewPolicy = (params = {}) => {
// 假设 http.get 会将 params 作为查询参数传递
return http.get('/thinkTankOverview/policy', { params });
}
/**
* @description 获取概览智库报告
* @param {object} [params] - 请求参数
* @param {Array<string>} [params.areas] - 区域名称列表 (Query参数)
* @param {Array<string>} [params.researchTypeIds] - 研究类型ID列表 (Query参数)
* @returns {Promise<object>} 响应数据,data字段为数组 List<ThinkTankSummaryReportVO>
* @returns {Array<object>} data[] - 报告列表
* @returns {number} data[].id - 报告id
* @returns {string} data[].name - 报告名称
* @returns {string} data[].times - 报告时间 (date格式)
* @returns {string} data[].thinkTankName - 智库名称
*/
export const getOverviewReport = (params = {}) => {
return http.get('/thinkTankOverview/report', { params });
}
/**
* @description 获取智库列表
* @returns {Promise<object>} 响应数据,data字段为数组 List<ThinkTankListVO>
* @returns {Array<object>} data[] - 智库列表
* @returns {number} data[].id - 智库id
* @returns {string} data[].name - 智库名称
* @returns {string} data[].describe - 智库描述
* @returns {string} data[].country - 智库国家
* @returns {Array<string>} data[].tags[] - 智库标签列表
*/
export const getThinkTankList = () => {
return http.get('/thinkTankOverview/thinkTanks');
}
// 获取智库报告研究类型 /thinkTankInfo/researchType
export const getThinkTankResearchType = () => {
return http.get('/thinkTankInfo/researchType');
}
export const policyList = [
{
id: 1,
imageUrl: 'https://picsum.photos/60/80?random=101',
title: '允许OPT国际学生出境旅行并持多次入境签证重新进入美国。',
date: '2025年6月24日',
source: '中美经济竞争:复杂经济和地缘政治关系中的收益与风险',
tags: ['人才交流', '移民政策'],
status: 'implemented',
relatedBill: { text: '相关立法已通过:《2024值得关注的国会人口结构法案》' }
},
{
id: 2,
imageUrl: 'https://picsum.photos/60/80?random=102',
title: '增加中国公民可获得的 H-1B 签证数量。',
date: '2025年6月24日',
source: '中美经济竞争:复杂经济和地缘政治关系中的收益与风险',
tags: ['人才交流', '移民政策'],
status: 'unimplemented',
relatedBill: null
},
{
id: 3,
imageUrl: 'https://picsum.photos/60/80?random=103',
title: '通过职业偏好类别增加绿卡的数量。',
date: '2025年6月24日',
source: '中美经济竞争:复杂经济和地缘政治关系中的收益与风险',
tags: ['人才交流', '移民政策'],
status: 'partial',
relatedBill: { text: '存在相关提案:《2024调整签证以吸引国外顶尖人才法案》' }
},
{
id: 4,
imageUrl: 'https://picsum.photos/60/80?random=104',
title: '推动清洁能源生产的内用,化石燃料重新配置出口。',
date: '2025年6月24日',
source: '中美经济竞争:复杂经济和地缘政治关系中的收益与风险',
tags: ['能源政策', '环境保护'],
status: 'partial',
relatedBill: { text: '存在相关提案:《2024清洁能源转型促进法案》' }
},
{
id: 5,
imageUrl: 'https://picsum.photos/60/80?random=105',
title: '加强对关键技术出口的管制措施。',
date: '2025年6月24日',
source: '中美经济竞争:复杂经济和地缘政治关系中的收益与风险',
tags: ['技术安全', '出口管制'],
status: 'implemented',
relatedBill: { text: '相关立法已通过:《2024关键技术保护法案》' }
},
{
id: 6,
imageUrl: 'https://picsum.photos/60/80?random=106',
title: '建立多边技术合作框架,促进盟友间技术共享。',
date: '2025年6月23日',
source: '中美经济竞争:复杂经济和地缘政治关系中的收益与风险',
tags: ['国际合作', '技术共享'],
status: 'unimplemented',
relatedBill: null
},
{
id: 7,
imageUrl: 'https://picsum.photos/60/80?random=107',
title: '完善供应链韧性,减少对单一国家的依赖。',
date: '2025年6月23日',
source: '中美经济竞争:复杂经济和地缘政治关系中的收益与风险',
tags: ['供应链', '经济安全'],
status: 'partial',
relatedBill: { text: '存在相关提案:《2024供应链韧性提升法案》' }
},
{
id: 8,
imageUrl: 'https://picsum.photos/60/80?random=108',
title: '加大对新兴技术研发的投资力度。',
date: '2025年6月22日',
source: '中美经济竞争:复杂经济和地缘政治关系中的收益与风险',
tags: ['科技投资', '研发创新'],
status: 'implemented',
relatedBill: { text: '相关立法已通过:《2024科技创新投资法案》' }
}
]
export const corePersom = [
{
id: 1,
name: '杰森·马西尼',
position: '兰德公司总裁兼首席执行官',
avatar: 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop&crop=face'
},
{
id: 2,
name: '安德鲁·R·霍恩',
position: '高级副总裁,研究与分析',
avatar: 'https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=100&h=100&fit=crop&crop=face'
},
{
id: 3,
name: '杰森·马西尼',
position: '兰德公司总裁兼首席执行官',
avatar: 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop&crop=face'
},
{
id: 4,
name: '梅丽莎·罗',
position: '副总裁,全球研究人才政策分析数据政策分析政策学院',
avatar: 'https://images.unsplash.com/photo-1494790108755-2616b612b786?w=100&h=100&fit=crop&crop=face'
},
{
id: 5,
name: '梅丽莎·罗',
position: '副总裁,全球研究人才政策分析数据政策分析政策学院',
avatar: 'https://images.unsplash.com/photo-1494790108755-2616b612b786?w=100&h=100&fit=crop&crop=face'
},
{
id: 6,
name: '安妮塔·钱德拉',
position: '副总裁兼主任,兰德社会经济福利,高级政策研究员',
avatar: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=100&h=100&fit=crop&crop=face'
},
{
id: 7,
name: '安妮塔·钱德拉',
position: '兰德研究院研究员,兰德公司政策中心临时副总裁兼主任,工程和应用科学部',
avatar: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=100&h=100&fit=crop&crop=face'
},
{
id: 8,
name: '安妮塔·钱德拉',
position: '副总裁兼主任,兰德社会经济福利,高级政策研究员',
avatar: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=100&h=100&fit=crop&crop=face'
},
{
id: 9,
name: '梅丽莎·罗',
position: '副总裁,全球研究人才政策分析数据政策分析政策学院',
avatar: 'https://images.unsplash.com/photo-1494790108755-2616b612b786?w=100&h=100&fit=crop&crop=face'
},
{
id: 10,
name: '安妮塔·钱德拉',
position: '副总裁兼主任,兰德社会经济福利,高级政策研究员政策分析数据',
avatar: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=100&h=100&fit=crop&crop=face'
}
]
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论