提交 0809f3bb authored 作者: 李顺's avatar 李顺

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

{
"name": "think-tank",
"name": "zm-system",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "think-tank",
"name": "zm-system",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
......
......@@ -10,12 +10,14 @@
<div class="title-box">
<div
class="title"
:aria-disabled="item.disabled"
v-for="(item, index) in homeTitleList"
:key="index"
@mouseenter="handleShowMenu(index, true)"
@mouseleave="handleShowMenu(index, false)"
>
<div class="text" :class="{ textActive: homeActiveTitleIndex === index }">{{ item.name }}</div>
<div class="text" :class="{ textActive: homeActiveTitleIndex === index }">
{{ item.name }}</div>
<div class="bottom-line" v-if="homeActiveTitleIndex === index"></div>
</div>
</div>
......@@ -28,7 +30,7 @@
<img src="@/assets/icons/overview/search.png" alt="" />
</div>
</div>
<div class="info-box">
<div class="info-box" aria-disabled="true">
<div class="mail">
<img src="@/assets/icons/overview/mail.png" alt="" />
</div>
......@@ -78,6 +80,21 @@
</div>
</div>
<div class="right-btn" aria-disabled="true">
<div class="item">
<div class="icon">
<img src="@/assets/icons/overview/domain.png" alt="" />
</div>
<div class="text">{{ "领域" }}</div>
</div>
<div class="item">
<div class="icon">
<img src="@/assets/icons/overview/element.png" alt="" />
</div>
<div class="text">{{ "要素" }}</div>
</div>
</div>
<div class="ai-btn" @click="openAiBox">
<div class="icon">
<img src="@/assets/icons/ai-icon.png" alt="" />
......@@ -116,7 +133,7 @@ import Menu11 from "@/assets/icons/overview/menu11.png";
import Menu12 from "@/assets/icons/overview/menu12.png";
const router = useRouter();
const route = useRoute()
const route = useRoute();
// const target = ref(null);
......@@ -166,21 +183,30 @@ const handleGetPersonType = async () => {
} catch (error) {}
};
const isCurrentOverview = ref(true);
const isCurrentOverview = computed(() => {
if (route.path === "/ZMOverView") {
return true;
} else {
return false;
}
});
// 概览页标题列表
const homeTitleList = ref([
{
name: "中美科技博弈",
path: "/ZMOverView"
path: "/ZMOverView",
disabled: false
},
{
name: "主要国家科技动向感知",
path: ""
path: "",
disabled: true
},
{
name: "主要国家竞争科技安全",
path: ""
path: "",
disabled: true
}
]);
......@@ -281,11 +307,6 @@ const handleSearch = () => {
onMounted(() => {
handleGetPersonType();
if (route.path === "/ZMOverView") {
isCurrentOverview.value = true;
} else {
isCurrentOverview.value = false;
}
});
</script>
......@@ -619,6 +640,47 @@ body {
}
}
.right-btn {
position: absolute;
top: 132px;
right: 0;
.item {
width: 108px;
height: 40px;
box-sizing: border-box;
border: 1px solid #fff;
border-radius: 50px 0px 0px 50px;
background: rgba(255, 255, 255, 0.65);
display: flex;
margin-bottom: 8px;
cursor: pointer;
.icon {
width: 36px;
height: 36px;
margin-top: 2px;
margin-left: 2px;
img {
width: 100%;
height: 100%;
}
}
.text {
width: 36px;
height: 24px;
color: rgba(59, 65, 75, 1);
font-family: Source Han Sans CN;
font-style: Regular;
font-size: 18px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
margin-top: 8px;
margin-left: 10px;
}
}
}
.ai-btn {
position: absolute;
bottom: 240px;
......@@ -656,7 +718,7 @@ body {
}
:deep(.el-input__wrapper) {
height: 34px;
height: 100%;
box-shadow: none;
border-radius: 10px;
background: transparent;
......@@ -668,4 +730,23 @@ body {
:deep(.el-input__wrapper.is-focus) {
box-shadow: none !important;
}
.title[aria-disabled="true"] {
opacity: 0.3;
cursor: not-allowed;
pointer-events: none;
}
.info-box[aria-disabled="true"] {
opacity: 0.3;
cursor: not-allowed;
pointer-events: none;
}
.right-btn[aria-disabled="true"] {
opacity: 0.3;
cursor: not-allowed;
pointer-events: none;
}
</style>
import request from "@/api/request.js";
// 全政府-获取美国政府部门制裁数据
/**
* @header token
* * @param {String} params.monthNum // 月份数
*/
export function getAllGovernmentList(params) {
return request({
method: 'GET',
url: `/api/rivalryIndex/governmentSanctionsData`,
params
})
}
// 全政府-获取美对华制裁措施数量趋势
/**
* @header token
* @param {Object} params
* @param {String} params.field // 领域
* @param {String} params.monthNum // 月份数
* @param {String} params.orgId // 机构ID
* @param {String} params.sanType // 制裁手段
*/
export function getUSChinaSanctionTrend(params) {
return request({
method: 'GET',
url: `/api/rivalryIndex/sanctionsQuantitativeTrend`,
params
})
}
// 全政府-美政府部门打压遏制最新动态
/**
* @header token
*/
export function getUSGovernmentLatestDynamic() {
return request({
method: 'GET',
url: `/api/rivalryIndex/governmentSanctionsDynamics`
})
}
// 全政府-美政府部门联合制裁排行
/**
* @header token
*/
export function getUSGovernmentJointSanctionRank() {
return request({
method: 'GET',
url: `/api/rivalryIndex/governmentJointSanctionsRanking`
})
}
// 全政府-美政府部门对我打压遏制时间线
/**
* @header token
* @param {Object} params
* @param {String} params.currentPage = 1 // 当前页
* @param {String} params.pageSize = 1000 // 每页数量
*/
export function getUSGovernmentSanctionHistory(params) {
return request({
method: 'GET',
url: `/api/rivalryIndex/getSanctionProcess`,
params
})
}
// 全政府-获取部门数据
/**
* @header token
*/
export function getDepartmentList() {
return request({
method: 'GET',
url: `/api/organization/summaryDepartList`
})
}
\ No newline at end of file
......@@ -3,11 +3,13 @@ import request from "@/api/request.js";
// 全联盟-获取联盟列表
/**
* @header token
* @param {Object} params
* @param {String} params.date - 日期
*/
export function getAllUnionList() {
export function getAllUnionList(params) {
return request({
method: 'GET',
url: `/api/union/union/unionList`
url: `/api/union/union/unionList/${params.date}`
})
}
......
......@@ -77,4 +77,12 @@ export function getDecreehylyList(params) {
url: `/api/billImpactAnalysis/industry/hylyList`,
params
})
}
// 发布机构
export function getDecreeTypeList() {
return request({
method: 'GET',
url: `/api/administrativeDict/type`,
})
}
\ No newline at end of file
import request from "@/api/request.js";
// 全领域
// 全领域统计
/**
* @header token
* @param {Object} params
* @param {String} params.startDate - 开始日期
* @param {String} params.endDate - 结束日期
*/
export function getAllDomainCount(params) {
return request({
method: "GET",
url: `/api/rivalryIndexV2/AllDomainCount`,
params
});
}
// 美对华制裁措施数量趋势
/**
* @header token
* @param {Object} params
* @param {String} params.byYOrM - 按月统计或按年统计
*/
export function getDomainContainmentTrend(params) {
return request({
method: "GET",
url: `/api/rivalryIndexV2/DomainContainmentTrend`,
params
});
}
// 中美科技博弈分析
export function getTechnologyGameAnalysis(domain = 1) {
return request({
method: "GET",
url: `/api/rivalryIndexV2/TechnologyGameAnalysis?domain=${domain}`
});
}
// 领域打压遏制排行
/**
* @param {currentPage, pageSize}
*/
export function getDomainContainmentRanking(ContainmentOrg = "对我打压机构", Domains = "") {
return request({
method: "GET",
url: !!Domains
? `/api/rivalryIndexV2/DomainContainmentRanking?ContainmentOrg=${ContainmentOrg}&Domains=${Domains}`
: `/api/rivalryIndexV2/DomainContainmentRanking?ContainmentOrg=${ContainmentOrg}`
});
}
// 领域打压遏制时间线
/**
* @param {currentPage, pageSize}
*/
export function getDomainContainmentTimeline(params) {
return request({
method: "GET",
url: `/api/rivalryIndexV2/DomainContainmentTimeline`,
params
});
}
import request from "@/api/request.js";
// 全要素统计
export function getElementCount(params) {
return request({
method: 'GET',
url: `/api/element/elementCount/${params.date}`,
})
}
// 最新动态
export function getNewDynamics() {
return request({
method: 'GET',
url: `/api/element/newDynamics`,
})
}
// 美对我要素打压情况
/**
* @param {currentPage, pageSize}
*/
export function getElementSuppress(params) {
return request({
method: 'GET',
url: `/api/element/elementSuppress/${params.date}`,
params
})
}
// 关键词云-上
/**
* @param {date}
*/
export function getKeyWordUp(params) {
return request({
method: 'GET',
url: `/api/element/getKeyWordUp/${params.date}`,
})
}
// 美自身要素发展情况
/**
* @param {currentPage, pageSize}
*/
export function getElementDevelop(params) {
return request({
method: 'GET',
url: `/api/element/elementDevelop/${params.date}`,
params
})
}
// 关键词云-下
/**
* @param {currentPage, pageSize}
*/
export function getKeyWordDown(params) {
return request({
method: 'GET',
url: `/api/element/getKeyWordDown/${params.date}`,
})
}
// 通过id获取政令详细信息
/**
* @param {id}
*/
export function getOrderInfo(params) {
return request({
method: 'GET',
url: `/api/element/getOrderInfo/${params.id}`,
params
})
}
\ No newline at end of file
import request from "@/api/request.js";
// 中美博弈概览V2:最新风险动态统计
export function getLatestRiskUpdates(params) {
return request({
method: 'GET',
url: `/api/rivalryIndexV2/LatestRiskUpdates`,
params: params
})
}
// 中美博弈概览V2:最新风险信号
export function getLatestRisks() {
return request({
method: 'GET',
url: `/api/rivalryIndexV2/LatestRisks`,
})
}
// 中美博弈概览V2:美对华制裁措施数量趋势
export function geDomainContainmentTrend(params) {
return request({
method: 'GET',
url: `/api/rivalryIndexV2/DomainContainmentTrend`,
params: params
})
}
// 中美博弈概况:获取榜单字典
export function getChartDict() {
return request({
method: 'GET',
url: `/api/union/summary/chartDict`,
})
}
// 中美博弈概况:中美科技实力对比
export function getCompare(id) {
return request({
method: 'GET',
url: `/api/union/summary/compare/${id}`,
})
}
// 中美博弈分析
export function getTechnologyGameAnalysis() {
return request({
method: 'GET',
url: `/api/rivalryIndexV2/TechnologyGameAnalysis`,
})
}
//中美博弈概览V7:美国政府部门对华制裁最新动态
export function getGovernmentSanctionsDynamics() {
return request({
method: 'GET',
url: `/api/rivalryIndex/governmentSanctionsDynamics`,
})
}
\ No newline at end of file
......@@ -87,7 +87,8 @@ const handleInfoClick = () => {
border-radius: 12px;
padding: 10px 16px;
position: relative;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
border: 1px solid rgba(231, 243, 255, 1);
/* box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); */
}
.bubble-header {
......
......@@ -2,6 +2,10 @@
import ZMOverview from "@/views/ZMOverView/index.vue";
const ZMOverviewRoutes = [
{
path: "/",
redirect: "/ZMOverView"
},
{
path: "/ZMOverView",
name: "ZMOverView",
......
......@@ -7,6 +7,7 @@ import DecreeBackground from "@/views/decree/decreeLayout/overview/background/in
import DecreeDeepDig from "@/views/decree/decreeLayout/deepdig/index.vue";
import DecreeInfluence from "@/views/decree/decreeLayout/influence/index.vue";
import Institution from "@/views/decree/institution/index.vue"
import DecreeOriginal from "@/views/decree/decreeOriginal/index.vue"
const decreeRoutes = [
// 政令首页
......@@ -68,18 +69,26 @@ const decreeRoutes = [
// meta: {
// title: "影响分析"
// }
}
},
]
},
{
path: "/institution",
path: "/institution",
name: "Institution",
component: Institution,
meta: {
title: "行政机构主页",
dynamicTitle: true
dynamicTitle: true
}
}
},
{
path: "/decree/decreeOriginal",
name: "DecreeOriginal",
component: DecreeOriginal,
// meta: {
// title: "政令原文"
// }
},
]
......
//新闻速览
import newsBrief from "@/views/newsBrief/index.vue"
import newsBrief from "@/views/newsBrief/index.vue";
// 新闻事件分析
import NewsAnalysis from "@/views/newsAnalysis/index.vue";
const newsRoutes = [
//新闻速览页面路由
{
path: "/newsBrief",
name: "newsBrief",
component: newsBrief,
meta: {
title: "新闻速览"
}
},
//新闻速览页面路由
{
path: "/newsBrief",
name: "newsBrief",
component: newsBrief,
meta: {
title: "新闻速览"
}
},
// 新闻事件分析
{
path: "/newsAnalysis",
name: "newsAnalysis",
component: NewsAnalysis,
meta: {
title: "新闻事件分析"
}
},
// 新闻事件分析
{
path: "/newsAnalysis",
name: "newsAnalysis",
component: NewsAnalysis,
meta: {
title: "新闻事件分析"
}
}
];
]
export default newsRoutes
\ No newline at end of file
export default newsRoutes;
......@@ -5,10 +5,10 @@ import gjOverView from "@/views/gjOverView/index.vue";
const overViewRoutes = [
// 中美博弈概览页面路由
{
path: "/",
redirect: "/overview"
},
// {
// path: "/",
// redirect: "/overview"
// },
{
path: "/overview",
name: "overView",
......
......@@ -7,9 +7,12 @@
:style="sections[index].waveBall.length === 2 ? 'width: 350px' : 'width:503px'">
<img class="section-title" :src="`/public/icon/riskToday/btn-` + index + `.png`" />
<div class="stats">
<div v-for="value in sections[index].waveBall">
<WaveBall :percent="value.percent" :data="value" :color="section.waterColor" :size="128" />
<div class="waveBall-text">{{ value.title }}</div>
<div v-for="value in sections[index].waveBall" @click="highLight(value)">
<div @click="highLight(value.title)" style="cursor: pointer;">
<WaveBall :percent="value.percent" :data="value" :color="section.waterColor" :size="128"
@click="highLight(value)" />
<div class="waveBall-text">{{ value.title }}</div>
</div>
</div>
</div>
<div class="bottm-box">
......@@ -27,13 +30,13 @@
<div class="content-title">
<img class="section-title" src="./icon/title-icon-2.png" />
<div>风险信号</div>
<div>风险信号3323</div>
<div class="num">12</div>
</div>
<div style="display: flex">
<div class="risk-signals">
<div class="risk-signals-item" v-for="(item, index) in warningList" :key="index"
@click="handleClickToDetailO(item)">
@click="handleClickToDetailO(item)" :class="{ 'highlighted': item.eventType === highlightedEventType }">
<div class="item-left" :class="{
itemLeftStatus1: item.signalLevel === '特别重大',
itemLeftStatus2: item.signalLevel === '重大风险'
......@@ -257,6 +260,26 @@ const handleSwithCurNews = name => {
carouselRef.value.next();
}
};
// 查看详情 传递参数
const handleClickToDetailO = item => {
window.sessionStorage.setItem("billId", item.billId);
window.sessionStorage.setItem("curTabName", item.name || item.signalTitle);
const route = router.resolve("/billLayout?billId=" + item.billId);
window.open(route.href, "_blank");
};
const highlightedEventType = ref('')
const highLight = (title) => {
console.log(title)
// 如果再次点击同一个,取消高亮
if (highlightedEventType.value === title) {
highlightedEventType.value = null;
} else {
highlightedEventType.value = title;
}
};
onMounted(() => {
// 这里可以添加从后端获取数据的代码
handlegetBillRiskSignal();
......
{
"code": 200,
"message": "操作成功",
"success": true,
"data": [
{
"eventType": "行政令",
"eventName": "为了美国和委内瑞拉人民的利益保障委内瑞拉的石油收入",
"eventDesc": null,
"eventId": "248914",
"eventDomainList": [
{
"domainId": "1",
"domainName": "人工智能"
},
{
"domainId": "3",
"domainName": "新一代通信网络"
}
],
"eventOrgName": null,
"eventDate": "2026-01-10"
},
{
"eventType": "行政令",
"eventName": null,
"eventDesc": null,
"eventId": "248863",
"eventDomainList": [
{
"domainId": "8",
"domainName": "先进制造"
},
{
"domainId": "9",
"domainName": "新材料"
}
],
"eventOrgName": null,
"eventDate": "2026-01-09"
},
{
"eventType": "行政令",
"eventName": "使美国退出与美国利益相悖的国际组织、公约、条约",
"eventDesc": null,
"eventId": "249004",
"eventDomainList": [
{
"domainId": "2",
"domainName": "生物科技"
},
{
"domainId": "4",
"domainName": "量子科技"
},
{
"domainId": "5",
"domainName": "新能源"
},
{
"domainId": "3",
"domainName": "新一代通信网络"
}
],
"eventOrgName": null,
"eventDate": "2026-01-08"
},
{
"eventType": "行政令",
"eventName": "在国防合同中优先考虑作战人员",
"eventDesc": null,
"eventId": "248915",
"eventDomainList": [
{
"domainId": "99",
"domainName": "其他"
},
{
"domainId": "8",
"domainName": "先进制造"
},
{
"domainId": "10",
"domainName": "航空航天"
}
],
"eventOrgName": null,
"eventDate": "2026-01-08"
},
{
"eventType": "行政令",
"eventName": "大西洋高度洄游物种;商业性大西洋黑鼻鲨和娱乐性大西洋鲨鱼渔业管理措施的修订",
"eventDesc": "NMFS提议对商业和休闲大西洋鲨鱼渔业进行几项改革。具体来说,NMFS正在考虑取消大西洋地区黑鼻鲨管理边界,修改商业保留限额...",
"eventId": "163447",
"eventDomainList": [
{
"domainId": "14",
"domainName": "核"
},
{
"domainId": "7",
"domainName": "海洋"
}
],
"eventOrgName": null,
"eventDate": "2026-01-05"
},
{
"eventType": "行政令",
"eventName": "关于Hiefo Corporation收购Emcore Corporation部分资产",
"eventDesc": null,
"eventId": "248916",
"eventDomainList": [
{
"domainId": "3",
"domainName": "新一代通信网络"
},
{
"domainId": "8",
"domainName": "先进制造"
},
{
"domainId": "6",
"domainName": "集成电路"
}
],
"eventOrgName": null,
"eventDate": "2026-01-03"
},
{
"eventType": "行政令",
"eventName": "汽车贷款利息扣除",
"eventDesc": "本文件包含关于某些纳税人扣除高达10,000美元的合格乘用车贷款利息的拟议法规。本文件还包含关于新信息报告的拟议法规...",
"eventId": "163443",
"eventDomainList": [
{
"domainId": "13",
"domainName": "太空"
},
{
"domainId": "14",
"domainName": "核"
}
],
"eventOrgName": null,
"eventDate": "2026-01-02"
},
{
"eventType": "行政令",
"eventName": "品牌处方药费用法规的法定更新",
"eventDesc": "本文件建议修订有关对从事制造或进口某些品牌处方药业务的相关实体征收年费的法规。为了应对覆盖缺口折扣的替代...",
"eventId": "163444",
"eventDomainList": [
{
"domainId": "2",
"domainName": "生物科技"
},
{
"domainId": "3",
"domainName": "新一代通信网络"
}
],
"eventOrgName": null,
"eventDate": "2026-01-02"
},
{
"eventType": "337",
"eventName": "外国制造的半导体器件及其下游产品和组件",
"eventDesc": "美国ITC发布对外国制造的半导体器件及其下游产品和组件的337部分终裁",
"eventId": "111",
"eventDomainList": [
{
"domainId": "1",
"domainName": "人工智能"
},
{
"domainId": "5",
"domainName": "新能源"
}
],
"eventOrgName": "美国商务部",
"eventDate": "2026-01-01"
},
{
"eventType": "行政令",
"eventName": "美国东北部的渔业;大西洋冲浪蛤和海洋圆蛤渔业管理计划修正案21",
"eventDesc": "NMFS宣布,中大西洋渔业管理委员会已提交大西洋冲浪蛤和海洋圆蛤渔业管理计划第21号修正案,供商务部长审查和批准。我们正在征求意见...",
"eventId": "163426",
"eventDomainList": [
{
"domainId": "7",
"domainName": "海洋"
},
{
"domainId": "3",
"domainName": "新一代通信网络"
}
],
"eventOrgName": null,
"eventDate": "2025-12-29"
}
]
}
\ No newline at end of file
......@@ -10,6 +10,7 @@ const getMultiLineChart = (data) => {
const echartsSeries = series.map((item, index) => ({
name: item.name,
type: 'line',
smooth: true,
symbol: 'circle',
symbolSize: 8,
itemStyle: {
......@@ -88,8 +89,8 @@ const getMultiLineChart = (data) => {
{
type: 'value',
min: 0,
max: 100,
interval: 20,
// max: 100,
// interval: 20,
axisLine: {
show: false
},
......
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论