提交 01a8b2b3 authored 作者: 张伊明's avatar 张伊明

合并分支 'zym-dev' 到 'pre'

Zym dev 查看合并请求 !212
流水线 #13 已失败 于阶段
in 58 秒
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<img src="./assets/rightbtn.png" alt="" class="right-btn" @click="handleNext" /> <img src="./assets/rightbtn.png" alt="" class="right-btn" @click="handleNext" />
<div class="left-top"> <div class="left-top">
<img src="./assets/icon01.png" alt="" /> <img src="./assets/icon01.png" alt="" />
<div class="left-top-title">合作限制动</div> <div class="left-top-title">?/div>
<div class="more" @click="handleClickToDetail">祕 ></div> <div class="more" @click="handleClickToDetail">祕 ></div>
</div> </div>
...@@ -16,23 +16,23 @@ ...@@ -16,23 +16,23 @@
<div class="left-center"> <div class="left-center">
<img :src="item.IMAGEURL || defaultImg" alt="" /> <img :src="item.IMAGEURL || defaultImg" alt="" />
<div class="left-center-main"> <div class="left-center-main">
<div class="left-center-main-title">{{ item.LIMITNAME || "暂无动态" }}</div> <div class="left-center-main-title">{{ item.LIMITNAME || "? }}</div>
<div class="left-center-main-ul"> <div class="left-center-main-ul">
<ul> <ul>
<li> <li>
<span class="ul-title">数据来源</span> <span class="ul-title">皞?/span>
<span class="ul-content">{{ item.ORGNAME || "" }}</span> <span class="ul-content">{{ item.ORGNAME || "" }}</span>
</li> </li>
<li> <li>
<span class="ul-title">合作限制类型</span> <span class="ul-title">蝐餃?/span>
<span class="ul-content">{{ item.LIMITTYPE || "" }}</span> <span class="ul-content">{{ item.LIMITTYPE || "" }}</span>
</li> </li>
<li> <li>
<span class="ul-title">发布日期</span> <span class="ul-title">?/span>
<span class="ul-content">{{ item.LIMITDATE || "" }}</span> <span class="ul-content">{{ item.LIMITDATE || "" }}</span>
</li> </li>
<li> <li>
<span class="ul-title">涉及领域</span> <span class="ul-title">瘨?/span>
<div class="ul-tags" v-if="item.AREA"> <div class="ul-tags" v-if="item.AREA">
<span v-for="(field, fIndex) in typeof item.AREA === 'string' <span v-for="(field, fIndex) in typeof item.AREA === 'string'
? item.AREA.split(',') ? item.AREA.split(',')
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
</div> </div>
<div class="left-bottom"> <div class="left-bottom">
<ul> <ul>
<li class="left-bottom-li">内容摘要</li> <li class="left-bottom-li">捆?/li>
</ul> </ul>
<div class="left-bottom-content"> <div class="left-bottom-content">
{{ item.INTRODUCTION || "捆" }} {{ item.INTRODUCTION || "捆" }}
...@@ -58,18 +58,18 @@ ...@@ -58,18 +58,18 @@
</div> </div>
</el-carousel-item> </el-carousel-item>
<!-- 无数据时的占位展--> <!-- ?-->
<el-carousel-item v-if="coopRestrictionTrends.length === 0"> <el-carousel-item v-if="coopRestrictionTrends.length === 0">
<div class="carousel-item-content"> <div class="carousel-item-content">
<div class="left-center"> <div class="left-center">
<img :src="defaultImg" alt="" /> <img :src="defaultImg" alt="" />
<div class="left-center-main"> <div class="left-center-main">
<div class="left-center-main-title">暂无合作限制动</div> <div class="left-center-main-title">?/div>
<div class="left-center-main-ul"> <div class="left-center-main-ul">
<ul> <ul>
<li><span class="ul-title">数据来源</span><span class="ul-content">未知</span></li> <li><span class="ul-title">皞?/span><span class="ul-content"></span></li>
<li><span class="ul-title">合作限制类型</span><span class="ul-content">未知</span></li> <li><span class="ul-title">蝐餃?/span><span class="ul-content"></span></li>
<li><span class="ul-title">发布日期</span><span class="ul-content">未知</span></li> <li><span class="ul-title">?/span><span class="ul-content"></span></li>
<li><span class="ul-title"></span><span class="ul-content"></span></li> <li><span class="ul-title"></span><span class="ul-content"></span></li>
</ul> </ul>
</div> </div>
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
<div style="margin: 6px 34px 0 23px"> <div style="margin: 6px 34px 0 23px">
<div v-for="item in riskSignals" :key="item.id" class="right-main" @click="handleToRiskDetail(item)"> <div v-for="item in riskSignals" :key="item.id" class="right-main" @click="handleToRiskDetail(item)">
<div class="main-left" <div class="main-left"
:class="{ cl4: item.title === '特别重大', cl5: item.title === '重大风险', cl6: item.title === '一般风险' }"> :class="{ cl4: item.title === '之', cl5: item.title === '之憌', cl6: item.title === '銝憌? }">
{{ item.title }} {{ item.title }}
</div> </div>
<div class="item-right"> <div class="item-right">
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
</template> </template>
<script setup> <script setup>
import RiskSignal from "@/components/base/RiskSignal/index.vue"; import RiskSignal from "@/components/base/riskSignal/index.vue";
import { ref, onMounted, computed } from "vue"; import { ref, onMounted, computed } from "vue";
import router from "@/router"; import router from "@/router";
import { getCoopRestrictionTrends, getCoopRestrictionSignals } from "@/api/coopRestriction/coopRestriction.js"; import { getCoopRestrictionTrends, getCoopRestrictionSignals } from "@/api/coopRestriction/coopRestriction.js";
...@@ -144,7 +144,7 @@ const coopRestrictionTrends = ref([]); ...@@ -144,7 +144,7 @@ const coopRestrictionTrends = ref([]);
const carouselRef = ref(null); const carouselRef = ref(null);
const activeIndex = ref(0); const activeIndex = ref(0);
// 获取合作限制-最新动态数 // -?
const getCoopRestrictionTrendsData = async () => { const getCoopRestrictionTrendsData = async () => {
try { try {
const res = await getCoopRestrictionTrends(); const res = await getCoopRestrictionTrends();
...@@ -152,11 +152,11 @@ const getCoopRestrictionTrendsData = async () => { ...@@ -152,11 +152,11 @@ const getCoopRestrictionTrendsData = async () => {
coopRestrictionTrends.value = res.data || []; coopRestrictionTrends.value = res.data || [];
} }
} catch (error) { } catch (error) {
console.error("获取合作限制最新动态数据失败:", error); console.error("憭梯?", error);
} }
}; };
// 轮播图手动切 // 頧格?
const handlePrev = () => { const handlePrev = () => {
if (carouselRef.value) { if (carouselRef.value) {
carouselRef.value.prev(); carouselRef.value.prev();
...@@ -173,7 +173,7 @@ const handleCarouselChange = index => { ...@@ -173,7 +173,7 @@ const handleCarouselChange = index => {
activeIndex.value = index; activeIndex.value = index;
}; };
// 左侧展示的主动 // 撌虫儒撅內蜓?
const mainTrend = computed(() => { const mainTrend = computed(() => {
if (coopRestrictionTrends.value.length === 0) return null; if (coopRestrictionTrends.value.length === 0) return null;
return coopRestrictionTrends.value[activeIndex.value] || coopRestrictionTrends.value[0]; return coopRestrictionTrends.value[activeIndex.value] || coopRestrictionTrends.value[0];
...@@ -212,7 +212,7 @@ const handleToMoreRiskSignal = () => { ...@@ -212,7 +212,7 @@ const handleToMoreRiskSignal = () => {
}; };
onMounted(() => { onMounted(() => {
// 合作限制-最新动态数据-获取数据 // -?
getCoopRestrictionTrendsData(); getCoopRestrictionTrendsData();
// -憌靽∪- // -憌靽∪-
getCoopRestrictionSignalsData(); getCoopRestrictionSignalsData();
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
</div> </div>
<div class="home-main-header-btn-box"> <div class="home-main-header-btn-box">
<div class="btn" @click="handleToPosi('position1')"> <div class="btn" @click="handleToPosi('position1')">
<div class="btn-text">{{ "最新动态" }}</div> <div class="btn-text">{{ "最新动? }}</div>
<div class="btn-icon"> <div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" /> <img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div> </div>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
</div> </div>
</div> </div>
<div class="btn" @click="handleToPosi('position4')"> <div class="btn" @click="handleToPosi('position4')">
<div class="btn-text">{{ "资源库" }}</div> <div class="btn-text">{{ "资源? }}</div>
<div class="btn-icon"> <div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" /> <img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div> </div>
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
:subtitle="item.nameAbbr" :subtitle="item.nameAbbr"
:description="item.description" :description="item.description"
:quantity="item.postCount" :quantity="item.postCount"
unit="次" unit="?
:color="infoListColor[index]" :color="infoListColor[index]"
@click="handleToEntityListNoId(item)" @click="handleToEntityListNoId(item)"
/> />
...@@ -73,9 +73,9 @@ ...@@ -73,9 +73,9 @@
</div> </div>
<el-row :gutter="15" style="width: 1600px; margin: 0 auto; height: 528px; margin-top: 64px"> <el-row :gutter="15" style="width: 1600px; margin: 0 auto; height: 528px; margin-top: 64px">
<CustomTitle id="position1" title="最新动态" /> <CustomTitle id="position1" title="最新动? />
<el-col :span="16"> <el-col :span="16">
<custom-container titleType="primary" title="最新出口管制政策" :titleIcon="houseIcon" height="450px"> <custom-container titleType="primary" title="最新出口管制政? :titleIcon="houseIcon" height="450px">
<template #header-right> <template #header-right>
<el-button type="primary" @click="handleToEntityList()" link> <el-button type="primary" @click="handleToEntityList()" link>
{{ "查看详情 >" }} {{ "查看详情 >" }}
...@@ -107,19 +107,19 @@ ...@@ -107,19 +107,19 @@
<div> <div>
<div class="box1-top"> <div class="box1-top">
<div class="box1-top-title"> <div class="box1-top-title">
{{ item.postDate }}——BIS《实体清单增列与修订条目 {{ item.postDate }}——BIS《实体清单增列与修订条目?
</div> </div>
<div class="box1-top-content"> <div class="box1-top-content">
<div class="box1-top-content-item"> <div class="box1-top-content-item">
<span class="box1-top-content-item-title">· 发布机构</span> <span class="box1-top-content-item-title">· 发布机构?/span>
<span class="box1-top-content-item-content">{{ item.postOrgName }}</span> <span class="box1-top-content-item-content">{{ item.postOrgName }}</span>
</div> </div>
<div class="box1-top-content-item"> <div class="box1-top-content-item">
<span class="box1-top-content-item-title">· 生效日期</span> <span class="box1-top-content-item-title">· 生效日期?/span>
<span class="box1-top-content-item-content">{{ item.postDate }}</span> <span class="box1-top-content-item-content">{{ item.postDate }}</span>
</div> </div>
<div class="box1-top-content-item"> <div class="box1-top-content-item">
<span class="box1-top-content-item-title">· 涉及领域</span> <span class="box1-top-content-item-title">· 涉及领域?/span>
<div <div
class="box1-top-content-item-tags" class="box1-top-content-item-tags"
v-for="(domainItem, index) in item.domains" v-for="(domainItem, index) in item.domains"
...@@ -131,7 +131,7 @@ ...@@ -131,7 +131,7 @@
</div> </div>
</div> </div>
<div class="box1-bottom"> <div class="box1-bottom">
<div class="box1-bottom-title">· 涉及主要实体</div> <div class="box1-bottom-title">· 涉及主要实体?/div>
<div class="box1-bottom-content"> <div class="box1-bottom-content">
<div <div
class="box1-bottom-content-item" class="box1-bottom-content-item"
...@@ -165,7 +165,7 @@ ...@@ -165,7 +165,7 @@
</el-icon> </el-icon>
<span>新增中国实体</span> <span>新增中国实体</span>
</div> </div>
<div class="box1-absolute-num">{{ item.cnEntityCount }}</div> <div class="box1-absolute-num">{{ item.cnEntityCount }}?/div>
</div> </div>
</div> </div>
</el-carousel-item> </el-carousel-item>
...@@ -193,7 +193,7 @@ ...@@ -193,7 +193,7 @@
<div <div
class="item-left" class="item-left"
:class="{ :class="{
itemLeftStatus1: item.status === '一般风险', itemLeftStatus1: item.status === '一般风?,
itemLeftStatus2: item.status === '重大风险' itemLeftStatus2: item.status === '重大风险'
}" }"
> >
...@@ -284,7 +284,7 @@ ...@@ -284,7 +284,7 @@
<el-table-column label="发布次数" width="300"> <el-table-column label="发布次数" width="300">
<template #default="scope"> <template #default="scope">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}?/span>
<el-progress <el-progress
:percentage="scope.row.percent * 100" :percentage="scope.row.percent * 100"
:show-text="false" :show-text="false"
...@@ -313,7 +313,7 @@ ...@@ -313,7 +313,7 @@
<el-table-column label="发布次数" width="300"> <el-table-column label="发布次数" width="300">
<template #default="scope"> <template #default="scope">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}?/span>
<el-progress <el-progress
:percentage="scope.row.percent * 100" :percentage="scope.row.percent * 100"
:show-text="false" :show-text="false"
...@@ -336,13 +336,13 @@ ...@@ -336,13 +336,13 @@
</el-table> </el-table>
</div> </div>
<div class="box3-content" style="display: none"> <div class="box3-content" style="display: none">
<div class="box3-content-title">关键与新兴技术清单(CETs)</div> <div class="box3-content-title">关键与新兴技术清?CETs)</div>
<el-table :data="tableData1" stripe style="width: 100%"> <el-table :data="tableData1" stripe style="width: 100%">
<el-table-column prop="year" label="年份" width="100" /> <el-table-column prop="year" label="年份" width="100" />
<el-table-column label="发布次数" width="180"> <el-table-column label="发布次数" width="180">
<template #default="scope"> <template #default="scope">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}?/span>
<el-progress <el-progress
:percentage="scope.row.percent * 100" :percentage="scope.row.percent * 100"
:show-text="false" :show-text="false"
...@@ -397,7 +397,7 @@ ...@@ -397,7 +397,7 @@
</el-row> </el-row>
<el-row :gutter="20" style="width: 1600px; margin: 0 auto; margin-top: 39px"> <el-row :gutter="20" style="width: 1600px; margin: 0 auto; margin-top: 39px">
<CustomTitle id="position4" title="资源库" style="margin-top: 0px" /> <CustomTitle id="position4" title="资源? style="margin-top: 0px" />
<div class="resource-tabs"> <div class="resource-tabs">
<div <div
v-for="tab in resourceTabs" v-for="tab in resourceTabs"
...@@ -462,7 +462,7 @@ ...@@ -462,7 +462,7 @@
<el-col :span="16"> <el-col :span="16">
<custom-container title="制裁实体清单" :titleIcon="entityIcon" height="845px"> <custom-container title="制裁实体清单" :titleIcon="entityIcon" height="845px">
<template #header-right> <template #header-right>
<div class="box5-header-right">{{ total }}家实</div> <div class="box5-header-right">{{ total }}家实?/div>
</template> </template>
<template #default> <template #default>
<div class="box5"> <div class="box5">
...@@ -530,30 +530,30 @@ ...@@ -530,30 +530,30 @@
<!-- <el-table-column prop="revenue" label="营收(亿元)" width="140" align="right"> <!-- <el-table-column prop="revenue" label="营收(亿元)" width="140" align="right">
<template #default="scope"> <template #default="scope">
<span <span
:class="['revenue-cell', scope.row.revenue === '无营收数据' ? 'no-revenue' : '']" :class="['revenue-cell', scope.row.revenue === '无营收数? ? 'no-revenue' : '']"
> >
{{ scope.row.revenue }} {{ scope.row.revenue }}
</span> </span>
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column prop="revenue" label="50%规则子企业" width="280" align="right"> <el-table-column prop="revenue" label="50%规则子企? width="280" align="right">
<template #default="scope"> <template #default="scope">
<div class="num-item" v-if="scope.row.ruleOrgCount > 0"> <div class="num-item" v-if="scope.row.ruleOrgCount > 0">
<div <div
class="name-item" class="name-item"
:class="[ :class="[
'revenue-cell', 'revenue-cell',
scope.row.revenue === '无营收数据' ? 'no-revenue' : '' scope.row.revenue === '无营收数? ? 'no-revenue' : ''
]" ]"
> >
{{ scope.row.ruleOrgList[0].orgName }}... {{ scope.row.ruleOrgList[0].orgName }}...?
</div> </div>
<div <div
style="width: 50px; color: #409eff; cursor: pointer" style="width: 50px; color: #409eff; cursor: pointer"
@click="handleOrgClick(scope.row)" @click="handleOrgClick(scope.row)"
> >
{{ scope.row.ruleOrgCount }}家> {{ scope.row.ruleOrgCount }}?
</div> </div>
</div> </div>
</template> </template>
...@@ -562,7 +562,7 @@ ...@@ -562,7 +562,7 @@
<div class="table-footer"> <div class="table-footer">
<!-- <div class="pagination-info"> <!-- <div class="pagination-info">
第{{ currentPage }}页,共{{ totalPages }} 第{{ currentPage }}页,共{{ totalPages }}?
</div> --> </div> -->
<el-pagination <el-pagination
v-model:current-page="currentPage" v-model:current-page="currentPage"
...@@ -637,7 +637,7 @@ ...@@ -637,7 +637,7 @@
</div> </div>
</div> </div>
<div class="right-footer"> <div class="right-footer">
<div class="total-count">{{ totalAll }}</div> <div class="total-count">?{{ totalAll }} ?/div>
<el-pagination <el-pagination
v-model:current-page="currentPageAll" v-model:current-page="currentPageAll"
:page-size="pageSizeAll" :page-size="pageSizeAll"
...@@ -655,7 +655,7 @@ ...@@ -655,7 +655,7 @@
</div> </div>
<!-- <el-dialog v-model="dialogVisible" width="800" :before-close="handleClose"> <!-- <el-dialog v-model="dialogVisible" width="800" :before-close="handleClose">
<template #title> <template #title>
<div class="dialog-title">50%规则子企业</div> <div class="dialog-title">50%规则子企?/div>
</template> </template>
<div class="dialog-ett-wrpper"> <div class="dialog-ett-wrpper">
<div <div
...@@ -701,9 +701,9 @@ ...@@ -701,9 +701,9 @@
</template> </template>
<script setup> <script setup>
//这是一个备 //这是一个备?
import NewsList from "@/components/base/newsList/index.vue"; import NewsList from "@/components/base/newsList/index.vue";
import RiskSignal from "@/components/base/RiskSignal/index.vue"; import RiskSignal from "@/components/base/riskSignal/index.vue";
import { onMounted, ref, computed, reactive, shallowRef, watch, nextTick } from "vue"; import { onMounted, ref, computed, reactive, shallowRef, watch, nextTick } from "vue";
import { useContainerScroll } from "@/hooks/useScrollShow"; import { useContainerScroll } from "@/hooks/useScrollShow";
const homeMainRef = ref(null); const homeMainRef = ref(null);
...@@ -773,7 +773,7 @@ const handleToPosi = id => { ...@@ -773,7 +773,7 @@ const handleToPosi = id => {
isShow.value = true; isShow.value = true;
} }
// 2. 使用 nextTick 等待 DOM 布局(如高度切换)完成后再进行坐标计 // 2. 使用 nextTick 等待 DOM 布局(如高度切换)完成后再进行坐标计?
nextTick(() => { nextTick(() => {
const containerRect = homeMainRef.value.getBoundingClientRect(); const containerRect = homeMainRef.value.getBoundingClientRect();
const elementRect = element.getBoundingClientRect(); const elementRect = element.getBoundingClientRect();
...@@ -788,7 +788,7 @@ const handleToPosi = id => { ...@@ -788,7 +788,7 @@ const handleToPosi = id => {
} }
}; };
// 跳转到单项制裁页 // 跳转到单项制裁页?
const handleToRiskSignalDetail = item => { const handleToRiskSignalDetail = item => {
window.sessionStorage.setItem("curTabName", item.title); window.sessionStorage.setItem("curTabName", item.title);
const routeData = router.resolve({ const routeData = router.resolve({
...@@ -797,7 +797,7 @@ const handleToRiskSignalDetail = item => { ...@@ -797,7 +797,7 @@ const handleToRiskSignalDetail = item => {
id: item.sanId id: item.sanId
} }
}); });
// 打开新页 // 打开新页?
window.open(routeData.href, "_blank"); window.open(routeData.href, "_blank");
}; };
...@@ -807,53 +807,53 @@ const techOptions = [ ...@@ -807,53 +807,53 @@ const techOptions = [
{ label: "全部领域", value: 0 }, { label: "全部领域", value: 0 },
{ label: "人工智能", value: 1 }, { label: "人工智能", value: 1 },
{ label: "生物科技", value: 2 }, { label: "生物科技", value: 2 },
{ label: "新一代信息技术", value: 3 }, { label: "新一代信息技?, value: 3 },
{ label: "量子科技", value: 4 }, { label: "量子科技", value: 4 },
{ label: "新能源", value: 5 }, { label: "新能?, value: 5 },
{ label: "集成电路", value: 6 }, { label: "集成电路", value: 6 },
{ label: "海洋", value: 7 }, { label: "海洋", value: 7 },
{ label: "先进制造", value: 8 }, { label: "先进制?, value: 8 },
{ label: "新材料", value: 9 }, { label: "新材?, value: 9 },
{ label: "航空航天", value: 10 }, { label: "航空航天", value: 10 },
{ label: "深海", value: 11 }, { label: "深海", value: 11 },
{ label: "极地", value: 12 }, { label: "极地", value: 12 },
{ label: "太空", value: 13 }, { label: "太空", value: 13 },
{ label: "核", value: 14 } { label: "?, value: 14 }
]; ];
const timeOptions = [ const timeOptions = [
"全部时间", "全部时间",
"2025年", "2025?,
"2024年", "2024?,
"2023年", "2023?,
"2022年", "2022?,
"2021年", "2021?,
"2020年", "2020?,
"2019年", "2019?,
"2018年", "2018?,
"2017年", "2017?,
"2016年", "2016?,
"2015年", "2015?,
"2014年", "2014?,
"2013年", "2013?,
"2012年", "2012?,
"2011年", "2011?,
"2010年", "2010?,
"2009年", "2009?,
"2008年", "2008?,
"2007年", "2007?,
"2006年", "2006?,
"2005年", "2005?,
"2004年", "2004?,
"2003年", "2003?,
"2002年", "2002?,
"2001年" "2001?
]; ];
const checkedTech = ref([0]); const checkedTech = ref([0]);
const checkedTime = ref(["全部时间"]); const checkedTime = ref(["全部时间"]);
// 跳转到单条制裁页面,单独打开一个新页面 // 跳转到单条制裁页面,单独打开一个新页面
const handleTitleClick = item => { const handleTitleClick = item => {
window.sessionStorage.setItem("curTabName", `${item.year}-${item.dateStr}${item.title}》`); window.sessionStorage.setItem("curTabName", `${item.year}-${item.dateStr}?{item.title}》`);
const route = router.resolve({ const route = router.resolve({
path: "/exportControl/singleSanction", path: "/exportControl/singleSanction",
query: { query: {
...@@ -888,16 +888,16 @@ const getTagType = tag => { ...@@ -888,16 +888,16 @@ const getTagType = tag => {
人工智能: "danger", 人工智能: "danger",
集成电路: "warning", 集成电路: "warning",
量子科技: "success", 量子科技: "success",
生物技: "info", 生物技? "info",
新一代信息技: "primary", 新一代信息技? "primary",
新能: "success", 新能? "success",
航空航天: "primary", 航空航天: "primary",
先进制: "warning", 先进制? "warning",
海洋: "info", 海洋: "info",
新材: "danger", 新材? "danger",
深海: "primary", 深海: "primary",
极地: "info", 极地: "info",
: "danger", ? "danger",
其他: "info" 其他: "info"
}; };
if (tagColorMap[strTag]) { if (tagColorMap[strTag]) {
...@@ -909,7 +909,7 @@ const getTagType = tag => { ...@@ -909,7 +909,7 @@ const getTagType = tag => {
//数据定义 //数据定义
const entitiesDataInfoList = shallowRef([]); const entitiesDataInfoList = shallowRef([]);
// 趋势 // 趋势?
const trendOption = ref({}); const trendOption = ref({});
const trendChecked = ref(false); const trendChecked = ref(false);
const selectedEntityId = ref(1); const selectedEntityId = ref(1);
...@@ -938,7 +938,7 @@ onMounted(async () => { ...@@ -938,7 +938,7 @@ onMounted(async () => {
getIndustryCountByYear(1), getIndustryCountByYear(1),
getIndustryCountByYear(13) getIndustryCountByYear(13)
]); ]);
// 交换第二个和第三个元 // 交换第二个和第三个元?
[dataCount[1], dataCount[2]] = [dataCount[2], dataCount[1]]; [dataCount[1], dataCount[2]] = [dataCount[2], dataCount[1]];
infoList.value = dataCount.slice(0, 2); infoList.value = dataCount.slice(0, 2);
allSanTypeIds.value = infoList.value.map(item => item.id); allSanTypeIds.value = infoList.value.map(item => item.id);
...@@ -946,10 +946,10 @@ onMounted(async () => { ...@@ -946,10 +946,10 @@ onMounted(async () => {
label: item.nameZh, label: item.nameZh,
value: tabMap[item.id], value: tabMap[item.id],
id: [item.id], id: [item.id],
disabled: item.id == "13" // 商业管制清单不展 disabled: item.id == "13" // 商业管制清单不展?
})); }));
resourceTabs.value.unshift({ label: "全部制裁", value: "all", id: "", disabled: false }); resourceTabs.value.unshift({ label: "全部制裁", value: "all", id: "", disabled: false });
console.log("返回的数据结构 infoList =》", infoList.value); console.log("返回的数据结?infoList =?, infoList.value);
const entityList = _.map(entitiesDataInfo?.sanEntities ?? [], ({ entityNameZh, entityName }) => { const entityList = _.map(entitiesDataInfo?.sanEntities ?? [], ({ entityNameZh, entityName }) => {
return { name: entityNameZh, enName: entityName }; return { name: entityNameZh, enName: entityName };
}); });
...@@ -982,7 +982,7 @@ onMounted(async () => { ...@@ -982,7 +982,7 @@ onMounted(async () => {
}; };
}); });
// 获取趋势图数 // 获取趋势图数?
await fetchTrendData(); await fetchTrendData();
await fetchRiskSignals("0103"); await fetchRiskSignals("0103");
...@@ -992,7 +992,7 @@ onMounted(async () => { ...@@ -992,7 +992,7 @@ onMounted(async () => {
await fetchNewsInfo(); await fetchNewsInfo();
await fetchEntitiesList(currentPage.value, pageSize.value); await fetchEntitiesList(currentPage.value, pageSize.value);
await fetchSanctionProcess(sanctionPage.value, 10); await fetchSanctionProcess(sanctionPage.value, 10);
// 获取雷达图数 // 获取雷达图数?
await fetchRadarData(domainChecked.value); await fetchRadarData(domainChecked.value);
// 获取出口管制制裁措施 // 获取出口管制制裁措施
await fetchSanctionList(); await fetchSanctionList();
...@@ -1010,7 +1010,7 @@ const handleToSocialDetail = item => { ...@@ -1010,7 +1010,7 @@ const handleToSocialDetail = item => {
}); });
window.open(route.href, "_blank"); window.open(route.href, "_blank");
}; };
// 获取趋势图数 // 获取趋势图数?
const fetchTrendData = async () => { const fetchTrendData = async () => {
try { try {
const res = await getCountDomainByYear({ const res = await getCountDomainByYear({
...@@ -1023,7 +1023,7 @@ const fetchTrendData = async () => { ...@@ -1023,7 +1023,7 @@ const fetchTrendData = async () => {
trendOption.value = processYearDomainCountData(res[0].yearDomainCount); trendOption.value = processYearDomainCountData(res[0].yearDomainCount);
} }
} catch (error) { } catch (error) {
console.error("获取趋势图数据失败:", error); console.error("获取趋势图数据失?", error);
} }
}; };
...@@ -1034,22 +1034,22 @@ watch( ...@@ -1034,22 +1034,22 @@ watch(
} }
); );
// 新增函数:处理 yearDomainCount 数据并使用 getMultipleBarChart_m 方法生成图表配置 // 新增函数:处?yearDomainCount 数据并使?getMultipleBarChart_m 方法生成图表配置
const processYearDomainCountData = yearDomainCountData => { const processYearDomainCountData = yearDomainCountData => {
// 提取所有年份并排序 // 提取所有年份并排序
const years = [...new Set(yearDomainCountData.map(item => item.year))].sort(); const years = [...new Set(yearDomainCountData.map(item => item.year))].sort();
// 提取所有领域名 // 提取所有领域名?
const allDomains = [...new Set(yearDomainCountData.flatMap(item => item.domainCountInfo.map(domain => domain.name)))]; const allDomains = [...new Set(yearDomainCountData.flatMap(item => item.domainCountInfo.map(domain => domain.name)))];
// 构造 getMultipleBarChart_m 所需的数据结构 // 构?getMultipleBarChart_m 所需的数据结?
const chartData = { const chartData = {
domains: allDomains, domains: allDomains,
data: years.map(year => { data: years.map(year => {
const yearData = yearDomainCountData.find(item => item.year === year); const yearData = yearDomainCountData.find(item => item.year === year);
const domainCounts = {}; const domainCounts = {};
// 初始化所有领域的计数为0 // 初始化所有领域的计数?
allDomains.forEach(domain => { allDomains.forEach(domain => {
domainCounts[domain] = 0; domainCounts[domain] = 0;
}); });
...@@ -1092,9 +1092,9 @@ const carouselRef = ref(null); ...@@ -1092,9 +1092,9 @@ const carouselRef = ref(null);
// activeIndex = carouselRef.value.activeIndex; // activeIndex = carouselRef.value.activeIndex;
// } // }
// console.log("当前 Carousel 激活索引:", activeIndex); // console.log("当前 Carousel 激活索?", activeIndex);
// // 使用当前激活项的数 // // 使用当前激活项的数?
// const currentItem = entitiesDataInfoList.value[activeIndex]; // const currentItem = entitiesDataInfoList.value[activeIndex];
// if (currentItem) { // if (currentItem) {
// const route = router.resolve({ // const route = router.resolve({
...@@ -1120,7 +1120,7 @@ const handleToEntityList = item => { ...@@ -1120,7 +1120,7 @@ const handleToEntityList = item => {
} }
window.sessionStorage.setItem( window.sessionStorage.setItem(
"curTabName", "curTabName",
entitiesDataInfoList.value[currentCarouselIndex.value].postDate + " 《实体清单新增条目》" entitiesDataInfoList.value[currentCarouselIndex.value].postDate + " 《实体清单新增条目?
); );
const routeData = router.resolve({ const routeData = router.resolve({
path: "/exportControl/singleSanction", path: "/exportControl/singleSanction",
...@@ -1134,7 +1134,7 @@ const handleToEntityList = item => { ...@@ -1134,7 +1134,7 @@ const handleToEntityList = item => {
// 跳转到V2.0实体清单无ID // 跳转到V2.0实体清单无ID
const handleToEntityListNoId = item => { const handleToEntityListNoId = item => {
console.log("这是什么数=>", item); console.log("这是什么数?=>", item);
if (item.nameZh == "实体清单") { if (item.nameZh == "实体清单") {
const routeData = router.resolve({ const routeData = router.resolve({
path: "/exportControl/entityList", path: "/exportControl/entityList",
...@@ -1166,7 +1166,7 @@ const infoListColor = ref(["rgba(206, 79, 81, 1)", "rgba(114, 46, 209, 1)", "rgb ...@@ -1166,7 +1166,7 @@ const infoListColor = ref(["rgba(206, 79, 81, 1)", "rgba(114, 46, 209, 1)", "rgb
const infoList = ref([]); const infoList = ref([]);
const allSanTypeIds = ref(["1", "13"]); const allSanTypeIds = ref(["1", "13"]);
// 雷达 // 雷达?
const domainChecked = ref(false); const domainChecked = ref(false);
const radarOption = ref({ const radarOption = ref({
title: { title: {
...@@ -1219,7 +1219,7 @@ const radarOption = ref({ ...@@ -1219,7 +1219,7 @@ const radarOption = ref({
] ]
}); });
// 获取雷达图数 // 获取雷达图数?
const fetchRadarData = async checked => { const fetchRadarData = async checked => {
try { try {
const data = await getSanDomainCount(checked, "export"); const data = await getSanDomainCount(checked, "export");
...@@ -1236,7 +1236,7 @@ const fetchRadarData = async checked => { ...@@ -1236,7 +1236,7 @@ const fetchRadarData = async checked => {
const domainNames = Array.from(allDomains); const domainNames = Array.from(allDomains);
// 为每个制裁类型准备数 // 为每个制裁类型准备数?
const radarColors = [ const radarColors = [
"rgba(45, 123, 248, 1)", "rgba(45, 123, 248, 1)",
"rgba(206, 79, 81, 1)", "rgba(206, 79, 81, 1)",
...@@ -1255,7 +1255,7 @@ const fetchRadarData = async checked => { ...@@ -1255,7 +1255,7 @@ const fetchRadarData = async checked => {
}); });
} }
// 按照统一的领域顺序创建值数 // 按照统一的领域顺序创建值数?
const values = domainNames.map(name => domainMap[name] || 0); const values = domainNames.map(name => domainMap[name] || 0);
// 确定颜色 // 确定颜色
...@@ -1270,17 +1270,17 @@ const fetchRadarData = async checked => { ...@@ -1270,17 +1270,17 @@ const fetchRadarData = async checked => {
}; };
}); });
// 更新雷达图指 // 更新雷达图指?
let maxValue = Math.max(...seriesData.flatMap(item => item.value)) * 1.2; let maxValue = Math.max(...seriesData.flatMap(item => item.value)) * 1.2;
// 向上取整到最近的100的倍数,避免小数导致 ticks 不可读警告 // 向上取整到最近的100的倍数,避免小数导?ticks 不可读警?
maxValue = Math.ceil(maxValue / 100) * 100; maxValue = Math.ceil(maxValue / 100) * 100;
const indicators = domainNames.map(name => ({ const indicators = domainNames.map(name => ({
name: name, name: name,
max: maxValue || 100 // 防止max为0的情况 max: maxValue || 100 // 防止max?的情?
})); }));
// 更新雷达图配 // 更新雷达图配?
radarOption.value.radar.indicator = indicators; radarOption.value.radar.indicator = indicators;
radarOption.value.series[0].data = seriesData; radarOption.value.series[0].data = seriesData;
radarOption.value.legend.data = seriesData.map(item => { radarOption.value.legend.data = seriesData.map(item => {
...@@ -1293,7 +1293,7 @@ const fetchRadarData = async checked => { ...@@ -1293,7 +1293,7 @@ const fetchRadarData = async checked => {
}); });
} }
} catch (error) { } catch (error) {
console.error("获取雷达图数据失败:", error); console.error("获取雷达图数据失?", error);
} }
}; };
...@@ -1302,7 +1302,7 @@ watch( ...@@ -1302,7 +1302,7 @@ watch(
() => fetchRadarData(domainChecked.value) () => fetchRadarData(domainChecked.value)
); );
// 进度条状 // 进度条状?
const getStatus = _percent => { const getStatus = _percent => {
const percent = _percent * 100; const percent = _percent * 100;
if (percent >= 90) { if (percent >= 90) {
...@@ -1314,7 +1314,7 @@ const getStatus = _percent => { ...@@ -1314,7 +1314,7 @@ const getStatus = _percent => {
} }
}; };
// 制裁实体 // 制裁实体
const currentPage = ref(1); // 默认显示第5页 const currentPage = ref(1); // 默认显示??
const pageSize = ref(10); const pageSize = ref(10);
const total = ref(0); const total = ref(0);
...@@ -1362,8 +1362,8 @@ const fetchSanctionList = async () => { ...@@ -1362,8 +1362,8 @@ const fetchSanctionList = async () => {
let year = ""; let year = "";
let dateStr = fullTime; let dateStr = fullTime;
if (typeof fullTime === "string") { if (typeof fullTime === "string") {
if (fullTime.includes("年")) { if (fullTime.includes("?)) {
const parts = fullTime.split("年"); const parts = fullTime.split("?);
year = parts[0]; year = parts[0];
dateStr = parts[1].replace(/\s+/g, ""); dateStr = parts[1].replace(/\s+/g, "");
} else if (fullTime.includes("-")) { } else if (fullTime.includes("-")) {
...@@ -1465,7 +1465,7 @@ const fetchEntitiesList = async (page = 1, size = 10) => { ...@@ -1465,7 +1465,7 @@ const fetchEntitiesList = async (page = 1, size = 10) => {
sanctionDate: item.startTime sanctionDate: item.startTime
})); }));
total.value = res.totalElements; total.value = res.totalElements;
currentPage.value = res.number + 1; // API返回的页码从0开始,前端从1开始 currentPage.value = res.number + 1; // API返回的页码从0开始,前端?开?
} }
} catch (err) { } catch (err) {
console.error(err); console.error(err);
...@@ -1485,7 +1485,7 @@ const handleGetMore = async () => { ...@@ -1485,7 +1485,7 @@ const handleGetMore = async () => {
desc: `${item.cnEntityCount} 家中国实体`, desc: `${item.cnEntityCount} 家中国实体`,
content: content:
item.summary || item.summary ||
"2025年3月25日,美国商务部工业与安全局以从事有悖于美国国家安全和外交政策利益的活动为由,宣布将来自中国的54家实体新增至“实体清单”。" "2025??5日,美国商务部工业与安全局以从事有悖于美国国家安全和外交政策利益的活动为由,宣布将来自中国?4家实体新增至“实体清单”?
})); }));
// 合并新数据到现有列表 // 合并新数据到现有列表
...@@ -1514,7 +1514,7 @@ const fetchSanctionProcess = async (page = 1, size = 10) => { ...@@ -1514,7 +1514,7 @@ const fetchSanctionProcess = async (page = 1, size = 10) => {
desc: `${item.cnEntityCount} 家中国实体`, desc: `${item.cnEntityCount} 家中国实体`,
content: content:
item.summary || item.summary ||
"2025年3月25日,美国商务部工业与安全局以从事有悖于美国国家安全和外交政策利益的活动为由,宣布将来自中国的54家实体新增至“实体清单”。" "2025??5日,美国商务部工业与安全局以从事有悖于美国国家安全和外交政策利益的活动为由,宣布将来自中国?4家实体新增至“实体清单”?
})); }));
} }
} catch (err) { } catch (err) {
...@@ -1530,17 +1530,17 @@ const handlePageChange = page => { ...@@ -1530,17 +1530,17 @@ const handlePageChange = page => {
const searchKeyword = ref(""); const searchKeyword = ref("");
// 资源Tab 数据 // 资源?Tab 数据
const resourceTabs = ref([ const resourceTabs = ref([
// { label: "全部制裁", value: "all", disabled: false }, // { label: "全部制裁", value: "all", disabled: false },
// { label: "实体清单", value: "entity", disabled: false }, // { label: "实体清单", value: "entity", disabled: false },
// { label: "商业管制清单", value: "commerce", disabled: true } // { label: "商业管制清单", value: "commerce", disabled: true }
// { label: "关键与新兴技术清单", value: "tech", disabled: true }, // { label: "关键与新兴技术清?, value: "tech", disabled: true },
// { label: "军事最终用户清单", value: "military", disabled: true } // { label: "军事最终用户清?, value: "military", disabled: true }
]); ]);
const activeResourceTab = ref("all"); const activeResourceTab = ref("all");
const activeResourceTabItem = ref({}); const activeResourceTabItem = ref({});
// 数据对应,便宜行 // 数据对应,便宜行?
const tabMap = { const tabMap = {
1: "entity", 1: "entity",
13: "commerce" 13: "commerce"
...@@ -1558,10 +1558,10 @@ const handleResourceTabClick = tab => { ...@@ -1558,10 +1558,10 @@ const handleResourceTabClick = tab => {
}; };
const strengthLabels = { const strengthLabels = {
strong: "强", strong: "?,
medium: "中", medium: "?,
weak: "弱", weak: "?,
none: "无" none: "?
}; };
// 获取风险信号数据 // 获取风险信号数据
...@@ -1584,7 +1584,7 @@ const fetchRiskSignals = async () => { ...@@ -1584,7 +1584,7 @@ const fetchRiskSignals = async () => {
} }
}; };
// 添加获取社交媒体信息的方 // 添加获取社交媒体信息的方?
const fetchSocialMediaInfo = async () => { const fetchSocialMediaInfo = async () => {
try { try {
const data = await getSocialMediaInfo(); const data = await getSocialMediaInfo();
...@@ -1604,7 +1604,7 @@ const fetchSocialMediaInfo = async () => { ...@@ -1604,7 +1604,7 @@ const fetchSocialMediaInfo = async () => {
} }
}; };
// 添加获取新闻资讯的方 // 添加获取新闻资讯的方?
const fetchNewsInfo = async () => { const fetchNewsInfo = async () => {
try { try {
const data = await getNewsInfo(); const data = await getNewsInfo();
...@@ -1623,7 +1623,7 @@ const fetchNewsInfo = async () => { ...@@ -1623,7 +1623,7 @@ const fetchNewsInfo = async () => {
}; };
const handlePerClick = item => { const handlePerClick = item => {
// console.log("点击了社交媒体消息:", item); // console.log("点击了社交媒体消?", item);
window.sessionStorage.setItem("curTabName", item.name); window.sessionStorage.setItem("curTabName", item.name);
const route = router.resolve({ const route = router.resolve({
path: "/characterPage", path: "/characterPage",
...@@ -1634,7 +1634,7 @@ const handlePerClick = item => { ...@@ -1634,7 +1634,7 @@ const handlePerClick = item => {
}); });
window.open(route.href, "_blank"); window.open(route.href, "_blank");
}; };
// 处理点击社交媒体消息的方 // 处理点击社交媒体消息的方?
// const handleInfoClick = item => { // const handleInfoClick = item => {
// console.log("点击了社交媒体消息的更多信息:", item); // console.log("点击了社交媒体消息的更多信息:", item);
// // 这里可以添加打开详情页的逻辑 // // 这里可以添加打开详情页的逻辑
...@@ -1653,7 +1653,7 @@ const handlePerClick = item => { ...@@ -1653,7 +1653,7 @@ const handlePerClick = item => {
const formatTime = timeStr => { const formatTime = timeStr => {
// 空值兜底,避免报错 // 空值兜底,避免报错
if (!timeStr) return "暂无时间"; if (!timeStr) return "暂无时间";
// 核心:替换T为空 // 核心:替换T为空?
return timeStr.replace("T", " "); return timeStr.replace("T", " ");
}; };
...@@ -1661,7 +1661,7 @@ const warningList = ref([]); ...@@ -1661,7 +1661,7 @@ const warningList = ref([]);
const curBillList = ref([]); const curBillList = ref([]);
const releaseTime = ref("近一年发布"); const releaseTime = ref("近一年发?);
const categoryList = ref([]); const categoryList = ref([]);
...@@ -1713,7 +1713,7 @@ const chart1Data = ref({ ...@@ -1713,7 +1713,7 @@ const chart1Data = ref({
const handleSanc = item => { const handleSanc = item => {
console.log(item); console.log(item);
window.sessionStorage.setItem("curTabName", `${item.postDate}${item.title}》`); window.sessionStorage.setItem("curTabName", `${item.postDate}?{item.title}》`);
const route = router.resolve({ const route = router.resolve({
path: "/exportControl/singleSanction", path: "/exportControl/singleSanction",
query: { query: {
...@@ -1964,7 +1964,7 @@ const handleMediaClick = item => { ...@@ -1964,7 +1964,7 @@ const handleMediaClick = item => {
align-items: center; align-items: center;
justify-content: flex-start; justify-content: flex-start;
width: 48%; width: 48%;
/* 留出2%的间*/ /* 留出2%的间?*/
// margin-bottom: 6px; // margin-bottom: 6px;
box-sizing: border-box; box-sizing: border-box;
gap: 10px; gap: 10px;
...@@ -3113,7 +3113,7 @@ const handleMediaClick = item => { ...@@ -3113,7 +3113,7 @@ const handleMediaClick = item => {
// align-items: center; // align-items: center;
justify-content: flex-start; justify-content: flex-start;
width: 48%; width: 48%;
/* 留出2%的间*/ /* 留出2%的间?*/
// margin-bottom: 6px; // margin-bottom: 6px;
box-sizing: border-box; box-sizing: border-box;
gap: 10px; gap: 10px;
......
...@@ -5,14 +5,14 @@ ...@@ -5,14 +5,14 @@
<HeaderMenu></HeaderMenu> <HeaderMenu></HeaderMenu>
</div> </div>
<div class="header-right"> <div class="header-right">
<headerInfo curTitleName="投融资限制"></headerInfo> <headerInfo curTitleName="投融资限?></headerInfo>
</div> </div>
</div> --> </div> -->
<div class="home-main" ref="containerRef"> <div class="home-main" ref="containerRef">
<div class="home-top-bg"></div> <div class="home-top-bg"></div>
<div class="home-main-header"> <div class="home-main-header">
<div class="home-main-header-center"> <div class="home-main-header-center">
<SearchContainer style="margin-bottom: 0; height: fit-content" v-if="containerRef" placeholder="搜索投融资限制政策" <SearchContainer style="margin-bottom: 0; height: fit-content" v-if="containerRef" placeholder="搜索投融资限制政?
:containerRef="containerRef" areaName="" /> :containerRef="containerRef" areaName="" />
<!-- <el-input <!-- <el-input
v-model="searchKey" v-model="searchKey"
...@@ -40,12 +40,12 @@ ...@@ -40,12 +40,12 @@
</div> </div>
<div class="home-main-header-footer-item"> <div class="home-main-header-footer-item">
<div class="item-top">326</div> <div class="item-top">326</div>
<div class="item-footer">关键和新型技术清</div> <div class="item-footer">关键和新型技术清?/div>
</div> </div>
</div> --> </div> -->
<!-- <div class="home-main-header-btn-box"> <!-- <div class="home-main-header-btn-box">
<div class="btn" @click="scrollToTop('position1')"> <div class="btn" @click="scrollToTop('position1')">
<div class="btn-text">{{ "最新动态" }}</div> <div class="btn-text">{{ "最新动? }}</div>
<div class="btn-icon"> <div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" /> <img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div> </div>
...@@ -63,30 +63,30 @@ ...@@ -63,30 +63,30 @@
</div> </div>
</div> </div>
<div class="btn" @click="scrollToTop('position4')"> <div class="btn" @click="scrollToTop('position4')">
<div class="btn-text">{{ "资源库" }}</div> <div class="btn-text">{{ "资源? }}</div>
<div class="btn-icon"> <div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" /> <img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div> </div>
</div> </div>
</div> --> </div> -->
<!-- <div class="home-main-header-footer-link"> <!-- <div class="home-main-header-footer-link">
<ClickableCard text="最新动态" @click="scrollToTop('position1')" target="_blank" /> <ClickableCard text="最新动? @click="scrollToTop('position1')" target="_blank" />
<ClickableCard text="资讯要闻" @click="scrollToTop('position2')" target="_blank" /> <ClickableCard text="资讯要闻" @click="scrollToTop('position2')" target="_blank" />
<ClickableCard text="数据总览" @click="scrollToTop('position3')" target="_blank" /> <ClickableCard text="数据总览" @click="scrollToTop('position3')" target="_blank" />
<ClickableCard text="资源库" @click="scrollToTop('position4')" target="_blank" /> <ClickableCard text="资源? @click="scrollToTop('position4')" target="_blank" />
</div> --> </div> -->
<div class="home-main-header-footer-info"> <div class="home-main-header-footer-info">
<div class="card" v-for="(item, index) in infoList" :key="index"> <div class="card" v-for="(item, index) in infoList" :key="index">
<div class="icon" :style="{ background: item.color }"></div> <div class="icon" :style="{ background: item.color }"></div>
<div class="title">{{ item.title }}</div> <div class="title">{{ item.title }}</div>
<div class="content">{{ item.des }}</div> <div class="content">{{ item.des }}</div>
<div class="num" :style="{ color: item.color }">{{ item.num + "项" }}</div> <div class="num" :style="{ color: item.color }">{{ item.num + "? }}</div>
</div> </div>
</div> </div>
</div> </div>
<el-row :gutter="20" style="width: 1600px; margin: 0 auto"> <el-row :gutter="20" style="width: 1600px; margin: 0 auto">
<CustomTitle id="position1" title="最新动态" style="margin-top: 24px" /> <CustomTitle id="position1" title="最新动? style="margin-top: 24px" />
<el-col :span="16"> <el-col :span="16">
<custom-container titleType="primary" title="最新投融资限制政策" :titleIcon="houseIcon" height="450px"> <custom-container titleType="primary" title="最新投融资限制政策" :titleIcon="houseIcon" height="450px">
<template #header-right> <template #header-right>
...@@ -98,18 +98,18 @@ ...@@ -98,18 +98,18 @@
<template #default> <template #default>
<div class="box1"> <div class="box1">
<div class="box1-top"> <div class="box1-top">
<div class="box1-top-title">2025年9月12日——BIS《实体清单增列与修订条目》</div> <div class="box1-top-title">2025??2日——BIS《实体清单增列与修订条目?/div>
<div class="box1-top-content"> <div class="box1-top-content">
<div class="box1-top-content-item"> <div class="box1-top-content-item">
<span class="box1-top-content-item-title">· 发布机构</span> <span class="box1-top-content-item-title">· 发布机构?/span>
<span class="box1-top-content-item-content">美国商务部工业与安全局</span> <span class="box1-top-content-item-content">美国商务部工业与安全局</span>
</div> </div>
<div class="box1-top-content-item"> <div class="box1-top-content-item">
<span class="box1-top-content-item-title">· 生效日期</span> <span class="box1-top-content-item-title">· 生效日期?/span>
<span class="box1-top-content-item-content">2025年9月12日</span> <span class="box1-top-content-item-content">2025??2?/span>
</div> </div>
<div class="box1-top-content-item"> <div class="box1-top-content-item">
<span class="box1-top-content-item-title">· 涉及领域</span> <span class="box1-top-content-item-title">· 涉及领域?/span>
<div class="box1-top-content-item-tags" v-for="item in ['航空航天', '人工智能', '集成电路']" :key="item"> <div class="box1-top-content-item-tags" v-for="item in ['航空航天', '人工智能', '集成电路']" :key="item">
<el-tag :type="item === '航空航天' ? 'primary' : item === '人工智能' ? 'danger' : 'info' <el-tag :type="item === '航空航天' ? 'primary' : item === '人工智能' ? 'danger' : 'info'
">{{ item }}</el-tag> ">{{ item }}</el-tag>
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
</div> </div>
</div> </div>
<div class="box1-bottom"> <div class="box1-bottom">
<div class="box1-bottom-title">· 涉及主要实体</div> <div class="box1-bottom-title">· 涉及主要实体?/div>
<div class="box1-bottom-content"> <div class="box1-bottom-content">
<div class="box1-bottom-content-item" v-for="(item, index) in entityList" :key="index"> <div class="box1-bottom-content-item" v-for="(item, index) in entityList" :key="index">
<el-image class="box1-bottom-content-item-img" :src="item.img" alt=""></el-image> <el-image class="box1-bottom-content-item-img" :src="item.img" alt=""></el-image>
...@@ -133,7 +133,7 @@ ...@@ -133,7 +133,7 @@
</el-icon> </el-icon>
<span>新增中国实体</span> <span>新增中国实体</span>
</div> </div>
<div class="box1-absolute-num">23</div> <div class="box1-absolute-num">23?/div>
</div> </div>
</div> </div>
</template> </template>
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
<div <div
class="item-left" class="item-left"
:class="{ :class="{
itemLeftStatus1: item.status === '一般风险', itemLeftStatus1: item.status === '一般风?,
itemLeftStatus2: item.status === '重大风险' itemLeftStatus2: item.status === '重大风险'
}" }"
> >
...@@ -211,14 +211,14 @@ ...@@ -211,14 +211,14 @@
:source="customMessage.source" :source="customMessage.source"
:content="customMessage.content" :content="customMessage.content"
/> -- /> --
<MessageBubble :avatar="trumpAvatar" name="唐纳德·特朗普" time="16:02" source="发布于真实社交" <MessageBubble :avatar="trumpAvatar" name="唐纳德·特朗普" time="16:02" source="发布于真实社?
content="埃隆·马斯克在强力支持我竞选总统之前,早就知道我强烈反对‘电动汽车强制令’。这太荒谬了,这一直是我竞选活动的主要部分。电动汽车没问题,但不应该强迫每个人都拥有一辆。埃隆获得的补贴可能远远超过历史上任何一个人。如果没有补贴,埃隆可能不得不关门大吉,回到南非老家。" /> content="埃隆·马斯克在强力支持我竞选总统之前,早就知道我强烈反对‘电动汽车强制令’。这太荒谬了,这一直是我竞选活动的主要部分。电动汽车没问题,但不应该强迫每个人都拥有一辆。埃隆获得的补贴可能远远超过历史上任何一个人。如果没有补贴,埃隆可能不得不关门大吉,回到南非老家? />
<MessageBubble :avatar="elongAvatar" name="埃隆·马斯克" time="16:02" source="发布于真实社交" <MessageBubble :avatar="elongAvatar" name="埃隆·马斯? time="16:02" source="发布于真实社?
content="如果这个疯狂的支出法案获得通过,‘美国党’将在第二天成立。" /> content="如果这个疯狂的支出法案获得通过,‘美国党’将在第二天成立? />
<MessageBubble :avatar="elongAvatar" name="埃隆·马斯克" time="16:02" source="发布于真实社交" <MessageBubble :avatar="elongAvatar" name="埃隆·马斯? time="16:02" source="发布于真实社?
content="提出特朗普政府的AI政策强调技术开放与快速应用,但可能以牺牲安全防范为代价,开启了“潘多拉魔盒”。" /> content="提出特朗普政府的AI政策强调技术开放与快速应用,但可能以牺牲安全防范为代价,开启了“潘多拉魔盒”? />
</div> </div>
</template> </template>
</custom-container> </custom-container>
...@@ -238,7 +238,7 @@ ...@@ -238,7 +238,7 @@
<el-table-column label="发布次数" width="180"> <el-table-column label="发布次数" width="180">
<template #default="scope"> <template #default="scope">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}?/span>
<el-progress :percentage="scope.row.percent * 100" :show-text="false" <el-progress :percentage="scope.row.percent * 100" :show-text="false"
:status="getStatus(scope.row.percent)" /> :status="getStatus(scope.row.percent)" />
</div> </div>
...@@ -263,7 +263,7 @@ ...@@ -263,7 +263,7 @@
<el-table-column label="发布次数" width="180"> <el-table-column label="发布次数" width="180">
<template #default="scope"> <template #default="scope">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}?/span>
<el-progress :percentage="scope.row.percent * 100" :show-text="false" <el-progress :percentage="scope.row.percent * 100" :show-text="false"
:status="getStatus(scope.row.percent)" /> :status="getStatus(scope.row.percent)" />
</div> </div>
...@@ -282,13 +282,13 @@ ...@@ -282,13 +282,13 @@
</el-table> </el-table>
</div> </div>
<div class="box3-content"> <div class="box3-content">
<div class="box3-content-title">关键与新兴技术清单(CETs)</div> <div class="box3-content-title">关键与新兴技术清?CETs)</div>
<el-table :data="tableData1" stripe style="width: 100%"> <el-table :data="tableData1" stripe style="width: 100%">
<el-table-column prop="year" label="年份" width="100" /> <el-table-column prop="year" label="年份" width="100" />
<el-table-column label="发布次数" width="180"> <el-table-column label="发布次数" width="180">
<template #default="scope"> <template #default="scope">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}?/span>
<el-progress :percentage="scope.row.percent * 100" :show-text="false" <el-progress :percentage="scope.row.percent * 100" :show-text="false"
:status="getStatus(scope.row.percent)" /> :status="getStatus(scope.row.percent)" />
</div> </div>
...@@ -336,7 +336,7 @@ ...@@ -336,7 +336,7 @@
</el-row> </el-row>
<el-row :gutter="20" style="width: 1600px; margin: 0 auto"> <el-row :gutter="20" style="width: 1600px; margin: 0 auto">
<CustomTitle id="position4" title="资源库" style="margin-top: 54px" /> <CustomTitle id="position4" title="资源? style="margin-top: 54px" />
<el-col :span="8"> <el-col :span="8">
<custom-container title="制裁历程" :titleIcon="listIcon" height="845px"> <custom-container title="制裁历程" :titleIcon="listIcon" height="845px">
<template #default> <template #default>
...@@ -370,7 +370,7 @@ ...@@ -370,7 +370,7 @@
<el-col :span="16"> <el-col :span="16">
<custom-container title="制裁实体清单" :titleIcon="entityIcon" height="845px"> <custom-container title="制裁实体清单" :titleIcon="entityIcon" height="845px">
<template #header-right> <template #header-right>
<div class="box5-header-right">共1329家实体</div> <div class="box5-header-right">?329家实?/div>
</template> </template>
<template #default> <template #default>
<div class="box5"> <div class="box5">
...@@ -426,16 +426,16 @@ ...@@ -426,16 +426,16 @@
<!-- <el-table-column prop="revenue" label="营收(亿元)" width="140" align="right"> <!-- <el-table-column prop="revenue" label="营收(亿元)" width="140" align="right">
<template #default="scope"> <template #default="scope">
<span <span
:class="['revenue-cell', scope.row.revenue === '无营收数据' ? 'no-revenue' : '']" :class="['revenue-cell', scope.row.revenue === '无营收数? ? 'no-revenue' : '']"
> >
{{ scope.row.revenue }} {{ scope.row.revenue }}
</span> </span>
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column prop="revenue" label="50%规则子企业" width="140" align="right"> <el-table-column prop="revenue" label="50%规则子企? width="140" align="right">
<template #default="scope"> <template #default="scope">
<span :class="['revenue-cell', scope.row.revenue === '无营收数据' ? 'no-revenue' : '']"> <span :class="['revenue-cell', scope.row.revenue === '无营收数? ? 'no-revenue' : '']">
{{ scope.row.revenue }} {{ scope.row.revenue }}
</span> </span>
</template> </template>
...@@ -444,7 +444,7 @@ ...@@ -444,7 +444,7 @@
<div class="table-footer"> <div class="table-footer">
<!-- <div class="pagination-info"> <!-- <div class="pagination-info">
第{{ currentPage }}页,共{{ totalPages }} 第{{ currentPage }}页,共{{ totalPages }}?
</div> --> </div> -->
<el-pagination v-model:current-page="currentPage" :page-size="pageSize" :total="total" <el-pagination v-model:current-page="currentPage" :page-size="pageSize" :total="total"
:pager-count="5" layout="prev, pager, next" background /> :pager-count="5" layout="prev, pager, next" background />
...@@ -459,7 +459,7 @@ ...@@ -459,7 +459,7 @@
</template> </template>
<script setup> <script setup>
import RiskSignal from "@/components/base/RiskSignal/index.vue"; import RiskSignal from "@/components/base/riskSignal/index.vue";
import { onMounted, ref, computed } from "vue"; import { onMounted, ref, computed } from "vue";
import scrollToTop from "@/utils/scrollToTop"; import scrollToTop from "@/utils/scrollToTop";
import setChart from "@/utils/setChart"; import setChart from "@/utils/setChart";
...@@ -523,7 +523,7 @@ import shenggongIcon from "./assets/images/shenggong.png"; ...@@ -523,7 +523,7 @@ import shenggongIcon from "./assets/images/shenggong.png";
import shoushiIcon from "./assets/images/shoushi.png"; import shoushiIcon from "./assets/images/shoushi.png";
import tianyiIcon from "./assets/images/tianyi.png"; import tianyiIcon from "./assets/images/tianyi.png";
import aircasIcon from "./assets/images/aircas.png"; import aircasIcon from "./assets/images/aircas.png";
// 父组件中定义 messageList 数据(avatar 对应子组件 imageUrl 字段,需用 import 的图片才能正确显示) // 父组件中定义 messageList 数据(avatar 对应子组?imageUrl 字段,需?import 的图片才能正确显示)
const messageList = ref([ const messageList = ref([
{ {
avatar: trumpAvatar, avatar: trumpAvatar,
...@@ -531,21 +531,21 @@ const messageList = ref([ ...@@ -531,21 +531,21 @@ const messageList = ref([
time: "2025-05-12 16:02:37", time: "2025-05-12 16:02:37",
source: "真实社交", source: "真实社交",
content: content:
"埃隆·马斯克在强力支持我竞选总统之前,早就知道我强烈反对‘电动汽车强制令’。这太荒谬了,这一直是我竞选活动的主要部分。电动汽车没问题,但不应该强迫每个人都拥有一辆。埃隆获得的补贴可能远远超过历史上任何一个人。如果没有补贴,埃隆可能不得不关门大吉,回到南非老家。" "埃隆·马斯克在强力支持我竞选总统之前,早就知道我强烈反对‘电动汽车强制令’。这太荒谬了,这一直是我竞选活动的主要部分。电动汽车没问题,但不应该强迫每个人都拥有一辆。埃隆获得的补贴可能远远超过历史上任何一个人。如果没有补贴,埃隆可能不得不关门大吉,回到南非老家?
}, },
{ {
avatar: elongAvatar, avatar: elongAvatar,
name: "埃隆·马斯克", name: "埃隆·马斯?,
time: "2025-05-12 16:02:37", time: "2025-05-12 16:02:37",
source: "真实社交", source: "真实社交",
content: "如果这个疯狂的支出法案获得通过,‘美国党’将在第二天成立。" content: "如果这个疯狂的支出法案获得通过,‘美国党’将在第二天成立?
}, },
{ {
avatar: elongAvatar, avatar: elongAvatar,
name: "埃隆·马斯克", name: "埃隆·马斯?,
time: "2025-05-12 16:02:37", time: "2025-05-12 16:02:37",
source: "真实社交", source: "真实社交",
content: "提出特朗普政府的AI政策强调技术开放与快速应用,但可能以牺牲安全防范为代价,开启了“潘多拉魔盒”。" content: "提出特朗普政府的AI政策强调技术开放与快速应用,但可能以牺牲安全防范为代价,开启了“潘多拉魔盒”?
} }
]); ]);
// 查看更多风险信号 // 查看更多风险信号
...@@ -568,13 +568,13 @@ const searchKey = ref(""); ...@@ -568,13 +568,13 @@ const searchKey = ref("");
const infoList = ref([ const infoList = ref([
{ {
title: "SDN清单", title: "SDN清单",
des: "由美国财政部海外资产控制办公室(OFAC)管理,通过切断目标实体或个人与美国金融体系的联系,以实现美国的外交政策和国家安全目标。", des: "由美国财政部海外资产控制办公室(OFAC)管理,通过切断目标实体或个人与美国金融体系的联系,以实现美国的外交政策和国家安全目标?,
num: 87, num: 87,
color: "rgba(5, 95, 194, 1)" color: "rgba(5, 95, 194, 1)"
}, },
{ {
title: "CMIC清单", title: "CMIC清单",
des: "由美国财政部海外资产控制办公室(OFAC)管理,通过切断目标实体或个人与美国金融体系的联系,以实现美国的外交政策和国家安全目标。", des: "由美国财政部海外资产控制办公室(OFAC)管理,通过切断目标实体或个人与美国金融体系的联系,以实现美国的外交政策和国家安全目标?,
num: 3, num: 3,
color: "rgba(114, 46, 209, 1)" color: "rgba(114, 46, 209, 1)"
} }
...@@ -582,15 +582,15 @@ const infoList = ref([ ...@@ -582,15 +582,15 @@ const infoList = ref([
const entityList = ref([ const entityList = ref([
{ {
name: "北京复旦微电子技术有限公司", name: "北京复旦微电子技术有限公?,
img: fudanIcon img: fudanIcon
}, },
{ {
name: "北京福康微电子技术有限公司", name: "北京福康微电子技术有限公?,
img: fukongIcon img: fukongIcon
}, },
{ {
name: "北京华岭微电子技术有限公司", name: "北京华岭微电子技术有限公?,
img: hualingIcon img: hualingIcon
}, },
{ {
...@@ -598,15 +598,15 @@ const entityList = ref([ ...@@ -598,15 +598,15 @@ const entityList = ref([
img: jimuxiIcon img: jimuxiIcon
}, },
{ {
name: "北京盛工微电子技术有限公司", name: "北京盛工微电子技术有限公?,
img: shenggongIcon img: shenggongIcon
}, },
{ {
name: "北京首时微电子技术有限公司", name: "北京首时微电子技术有限公?,
img: shoushiIcon img: shoushiIcon
}, },
{ {
name: "北京天易微电子技术有限公司", name: "北京天易微电子技术有限公?,
img: tianyiIcon img: tianyiIcon
}, },
{ {
...@@ -618,42 +618,42 @@ const entityList = ref([ ...@@ -618,42 +618,42 @@ const entityList = ref([
const customNewsData = ref([ const customNewsData = ref([
{ {
newsImage: newsImg, newsImage: newsImg,
title: "美国智库激辩人工智能监管路径", title: "美国智库激辩人工智能监管路?,
time: "11-4", time: "11-4",
source: "华盛顿邮报", source: "华盛顿邮?,
from: "11-4 · 华盛顿邮报", from: "11-4 · 华盛顿邮?,
description: "各方就AI监管模式展开讨论。有观点认为碎片化州级监管比全面联邦法规更灵活,也有分析..." description: "各方就AI监管模式展开讨论。有观点认为碎片化州级监管比全面联邦法规更灵活,也有分析..."
}, },
{ {
newsImage: newsImg, newsImage: newsImg,
title: "美国智库激辩人工智能监管路径", title: "美国智库激辩人工智能监管路?,
time: "11-4", time: "11-4",
source: "华盛顿邮报", source: "华盛顿邮?,
from: "11-4 · 华盛顿邮报", from: "11-4 · 华盛顿邮?,
description: "各方就AI监管模式展开讨论。有观点认为碎片化州级监管比全面联邦法规更灵活,也有分析..." description: "各方就AI监管模式展开讨论。有观点认为碎片化州级监管比全面联邦法规更灵活,也有分析..."
}, },
{ {
newsImage: newsImg, newsImage: newsImg,
title: "美国智库激辩人工智能监管路径", title: "美国智库激辩人工智能监管路?,
time: "11-4", time: "11-4",
source: "华盛顿邮报", source: "华盛顿邮?,
from: "11-4 · 华盛顿邮报", from: "11-4 · 华盛顿邮?,
description: "各方就AI监管模式展开讨论。有观点认为碎片化州级监管比全面联邦法规更灵活,也有分析..." description: "各方就AI监管模式展开讨论。有观点认为碎片化州级监管比全面联邦法规更灵活,也有分析..."
}, },
{ {
newsImage: newsImg, newsImage: newsImg,
title: "美国智库激辩人工智能监管路径", title: "美国智库激辩人工智能监管路?,
time: "11-4", time: "11-4",
source: "华盛顿邮报", source: "华盛顿邮?,
from: "11-4 · 华盛顿邮报", from: "11-4 · 华盛顿邮?,
description: "各方就AI监管模式展开讨论。有观点认为碎片化州级监管比全面联邦法规更灵活,也有分析..." description: "各方就AI监管模式展开讨论。有观点认为碎片化州级监管比全面联邦法规更灵活,也有分析..."
}, },
{ {
newsImage: newsImg, newsImage: newsImg,
title: "美国智库激辩人工智能监管路径", title: "美国智库激辩人工智能监管路?,
time: "11-4", time: "11-4",
source: "华盛顿邮报", source: "华盛顿邮?,
from: "11-4 · 华盛顿邮报", from: "11-4 · 华盛顿邮?,
description: "各方就AI监管模式展开讨论。有观点认为碎片化州级监管比全面联邦法规更灵活,也有分析..." description: "各方就AI监管模式展开讨论。有观点认为碎片化州级监管比全面联邦法规更灵活,也有分析..."
} }
]); ]);
...@@ -692,7 +692,7 @@ const tableData1 = ref([ ...@@ -692,7 +692,7 @@ const tableData1 = ref([
} }
]); ]);
// 雷达 // 雷达?
const radarOption = ref({ const radarOption = ref({
title: { title: {
text: "" text: ""
...@@ -703,7 +703,7 @@ const radarOption = ref({ ...@@ -703,7 +703,7 @@ const radarOption = ref({
legend: { legend: {
top: 0, top: 0,
icon: "circle", icon: "circle",
data: ["实体清单", "商业管制清单", "关键和新型技术清单"] data: ["实体清单", "商业管制清单", "关键和新型技术清?]
}, },
radar: { radar: {
// shape: 'circle', // shape: 'circle',
...@@ -743,7 +743,7 @@ const radarOption = ref({ ...@@ -743,7 +743,7 @@ const radarOption = ref({
}, },
{ {
value: [4000, 14000, 18000, 21000, 32000, 10000], value: [4000, 14000, 18000, 21000, 32000, 10000],
name: "关键和新型技术清单", name: "关键和新型技术清?,
areaStyle: { areaStyle: {
color: "rgba(250, 140, 22, 0.2)" color: "rgba(250, 140, 22, 0.2)"
} }
...@@ -753,7 +753,7 @@ const radarOption = ref({ ...@@ -753,7 +753,7 @@ const radarOption = ref({
] ]
}); });
// 趋势 // 趋势?
const trendOption = ref({ const trendOption = ref({
tooltip: { tooltip: {
trigger: "axis", trigger: "axis",
...@@ -873,36 +873,36 @@ const trendOption = ref({ ...@@ -873,36 +873,36 @@ const trendOption = ref({
// 历次制裁过程 // 历次制裁过程
const sanctionProcessList = ref([ const sanctionProcessList = ref([
{ {
title: "2025年3月—SDN清单", title: "2025?月—SDN清单",
desc: "54家中国实体", desc: "54家中国实?,
content: content:
"2025年3月25日,美国商务部工业与安全局以从事有悖于美国国家安全和外交政策利益的活动为由,宣布将来自中国的54家实体新增至“实体清单”。" "2025??5日,美国商务部工业与安全局以从事有悖于美国国家安全和外交政策利益的活动为由,宣布将来自中国?4家实体新增至“实体清单”?
}, },
{ {
title: "2025年1月—SDN清单", title: "2025?月—SDN清单",
desc: "25家中国实体", desc: "25家中国实?,
content: content:
"2025年1月15日,美国商务部工业和安全局宣布更新《出口管理条例》(EAR),并发布两项最终规则,将25家中国企业及其相关实体列入实体清单。" "2025??5日,美国商务部工业和安全局宣布更新《出口管理条例》(EAR),并发布两项最终规则,?5家中国企业及其相关实体列入实体清单?
}, },
{ {
title: "2025年12月—SDN清单", title: "2025?2月—SDN清单",
desc: "12家中国实体", desc: "12家中国实?,
content: content:
"2024年12月20日,美国商务部工业与安全局以从事有悖于美国国家安全和外交政策利益的活动为由,宣布将来自中国的12家实体新增至“商业管制清单”。" "2024?2?0日,美国商务部工业与安全局以从事有悖于美国国家安全和外交政策利益的活动为由,宣布将来自中国?2家实体新增至“商业管制清单”?
}, },
{ {
title: "2024年10月—CMIC清单", title: "2024?0月—CMIC清单",
desc: "6家中国实体", desc: "6家中国实?,
content: "2024年10月21日,美国商务部将6个中国实体加入其“实体清单”,同时将 1 个中国实体移出该清单。" content: "2024?0?1日,美国商务部将6个中国实体加入其“实体清单”,同时?1 个中国实体移出该清单?
}, },
{ {
title: "2024年8月—SDN清单", title: "2024?月—SDN清单",
desc: "39家中国实体", desc: "39家中国实?,
content: "2024年8月23日,美国商务部工业安全局发布公告,将多个外国实体加入其“实体清单”,其中包括39个中国实体。" content: "2024??3日,美国商务部工业安全局发布公告,将多个外国实体加入其“实体清单”,其中包括39个中国实体?
} }
]); ]);
// 进度条状 // 进度条状?
const getStatus = _percent => { const getStatus = _percent => {
const percent = _percent * 100; const percent = _percent * 100;
if (percent >= 90) { if (percent >= 90) {
...@@ -914,29 +914,29 @@ const getStatus = _percent => { ...@@ -914,29 +914,29 @@ const getStatus = _percent => {
} }
}; };
// 制裁实体 // 制裁实体
const currentPage = ref(1); // 默认显示第5页 const currentPage = ref(1); // 默认显示??
const pageSize = ref(10); const pageSize = ref(10);
const searchKeyword = ref(""); const searchKeyword = ref("");
const strengthLabels = { const strengthLabels = {
strong: "强", strong: "?,
medium: "中", medium: "?,
weak: "弱", weak: "?,
none: "无" none: "?
}; };
// 模拟数据 // 模拟数据
const mockData = [ const mockData = [
{ {
name: "科大讯飞股份有限公司", name: "科大讯飞股份有限公司",
domains: ["人工智能"], domains: ["人工智能"],
sanctionDate: "2025年9月", sanctionDate: "2025??,
strength: "strong", strength: "strong",
revenue: "325", revenue: "325",
listingLocation: "深圳" listingLocation: "深圳"
}, },
{ {
name: "华为技术有限公司", name: "华为技术有限公?,
domains: ["通信网络", "集成电路"], domains: ["通信网络", "集成电路"],
sanctionDate: "2025年9月", sanctionDate: "2025??,
strength: "medium", strength: "medium",
revenue: "290", revenue: "290",
listingLocation: "" listingLocation: ""
...@@ -944,15 +944,15 @@ const mockData = [ ...@@ -944,15 +944,15 @@ const mockData = [
{ {
name: "中国航空工业集团", name: "中国航空工业集团",
domains: ["航空航天"], domains: ["航空航天"],
sanctionDate: "2025年9月", sanctionDate: "2025??,
strength: "medium", strength: "medium",
revenue: "288", revenue: "288",
listingLocation: "" listingLocation: ""
}, },
{ {
name: "杭州海康威视数字技术股份有限公司", name: "杭州海康威视数字技术股份有限公?,
domains: ["人工智能"], domains: ["人工智能"],
sanctionDate: "2025年9月", sanctionDate: "2025??,
strength: "weak", strength: "weak",
revenue: "203", revenue: "203",
listingLocation: "深圳" listingLocation: "深圳"
...@@ -960,39 +960,39 @@ const mockData = [ ...@@ -960,39 +960,39 @@ const mockData = [
{ {
name: "浪潮集团有限公司", name: "浪潮集团有限公司",
domains: ["人工智能"], domains: ["人工智能"],
sanctionDate: "2025年9月", sanctionDate: "2025??,
strength: "medium", strength: "medium",
revenue: "195", revenue: "195",
listingLocation: "香港" listingLocation: "香港"
}, },
{ {
name: "中芯国际集成电路制造有限公司", name: "中芯国际集成电路制造有限公?,
domains: ["集成电路"], domains: ["集成电路"],
sanctionDate: "2025年9月", sanctionDate: "2025??,
strength: "medium", strength: "medium",
revenue: "190", revenue: "190",
listingLocation: "" listingLocation: ""
}, },
{ {
name: "北京复旦微电子技术有限公司", name: "北京复旦微电子技术有限公?,
domains: ["集成电路"], domains: ["集成电路"],
sanctionDate: "2025年9月", sanctionDate: "2025??,
strength: "medium", strength: "medium",
revenue: "184", revenue: "184",
listingLocation: "" listingLocation: ""
}, },
{ {
name: "哈尔滨工业大学", name: "哈尔滨工业大?,
domains: ["人工智能", "集成电路"], domains: ["人工智能", "集成电路"],
sanctionDate: "2025年9月", sanctionDate: "2025??,
strength: "medium", strength: "medium",
revenue: "无营收数据", revenue: "无营收数?,
listingLocation: "" listingLocation: ""
}, },
{ {
name: "中兴通讯股份有限公司", name: "中兴通讯股份有限公司",
domains: ["通信网络", "集成电路"], domains: ["通信网络", "集成电路"],
sanctionDate: "2025年9月", sanctionDate: "2025??,
strength: "medium", strength: "medium",
revenue: "117", revenue: "117",
listingLocation: "上海" listingLocation: "上海"
...@@ -1000,17 +1000,17 @@ const mockData = [ ...@@ -1000,17 +1000,17 @@ const mockData = [
{ {
name: "大疆创新科技有限公司", name: "大疆创新科技有限公司",
domains: ["航空航天"], domains: ["航空航天"],
sanctionDate: "2025年9月", sanctionDate: "2025??,
strength: "medium", strength: "medium",
revenue: "1", revenue: "1",
listingLocation: "纽约" listingLocation: "纽约"
} }
]; ];
// 生成更多数据以模拟1329家实体 // 生成更多数据以模?329家实?
const generateMoreData = () => { const generateMoreData = () => {
const moreData = []; const moreData = [];
const companySuffixes = ["有限公司", "集团", "股份有限公司", "技术有限公司", "研究所"]; const companySuffixes = ["有限公司", "集团", "股份有限公司", "技术有限公?, "研究所"];
const domainsList = [ const domainsList = [
["人工智能"], ["人工智能"],
["通信网络"], ["通信网络"],
...@@ -1032,7 +1032,7 @@ const generateMoreData = () => { ...@@ -1032,7 +1032,7 @@ const generateMoreData = () => {
moreData.push({ moreData.push({
name: companyName, name: companyName,
domains: domains, domains: domains,
sanctionDate: "2025年9月", sanctionDate: "2025??,
strength: strength, strength: strength,
revenue: revenue.toString() revenue: revenue.toString()
}); });
...@@ -1043,7 +1043,7 @@ const generateMoreData = () => { ...@@ -1043,7 +1043,7 @@ const generateMoreData = () => {
const allData = [...mockData, ...generateMoreData()]; const allData = [...mockData, ...generateMoreData()];
// 计算属 // 计算属?
const total = computed(() => allData.length); const total = computed(() => allData.length);
const totalPages = computed(() => Math.ceil(total.value / pageSize.value)); const totalPages = computed(() => Math.ceil(total.value / pageSize.value));
...@@ -1085,7 +1085,7 @@ const warningList = ref([ ...@@ -1085,7 +1085,7 @@ const warningList = ref([
status: "特别重大" status: "特别重大"
}, },
{ {
title: "首次提出“限制外国敏感实体获取补贴", title: "首次提出“限制外国敏感实体获取补?,
time: "一天前", time: "一天前",
status: "重大风险" status: "重大风险"
}, },
...@@ -1095,97 +1095,97 @@ const warningList = ref([ ...@@ -1095,97 +1095,97 @@ const warningList = ref([
status: "重大风险" status: "重大风险"
}, },
{ {
title: "H.R.8333《生物安全法案》将华大基因等...", title: "H.R.8333《生物安全法案》将华大基因?..",
time: "一天前", time: "一天前",
status: "一般风险" status: "一般风?
} }
]); ]);
const curBillList = ref([ const curBillList = ref([
{ {
billName: "大而美法案", billName: "大而美法案",
introductionDate: "2025年7月4日", introductionDate: "2025???,
img: bill1 img: bill1
}, },
{ {
billName: "GENIUS稳定币法案", billName: "GENIUS稳定币法?,
introductionDate: "2025年7月5日", introductionDate: "2025???,
img: bill2 img: bill2
}, },
{ {
billName: "美越贸易协议", billName: "美越贸易协议",
introductionDate: "2025年7月6日", introductionDate: "2025???,
img: bill3 img: bill3
}, },
{ {
billName: "美越贸易协议", billName: "美越贸易协议",
introductionDate: "2025年7月7日", introductionDate: "2025???,
img: bill4 img: bill4
}, },
{ {
billName: "汽车零部件25%关税实施规则", billName: "汽车零部?5%关税实施规则",
introductionDate: "2025年7月10日", introductionDate: "2025??0?,
img: bill5 img: bill5
}, },
{ {
billName: "汽车零部件25%关税实施规则", billName: "汽车零部?5%关税实施规则",
introductionDate: "2025年7月12日", introductionDate: "2025??2?,
img: bill6 img: bill6
}, },
{ {
billName: "小额豁免包裹政策调整", billName: "小额豁免包裹政策调整",
introductionDate: "2025年7月14日", introductionDate: "2025??4?,
img: bill7 img: bill7
}, },
{ {
billName: "NIH预算否决案", billName: "NIH预算否决?,
introductionDate: "2025年7月15日", introductionDate: "2025??5?,
img: bill8 img: bill8
}, },
{ {
billName: "得州国会选区重划法案", billName: "得州国会选区重划法案",
introductionDate: "2025年7月17日", introductionDate: "2025??7?,
img: bill9 img: bill9
}, },
{ {
billName: "美越贸易协议", billName: "美越贸易协议",
introductionDate: "2025年7月24日", introductionDate: "2025??4?,
img: bill10 img: bill10
}, },
{ {
billName: "美越贸易协议", billName: "美越贸易协议",
introductionDate: "2025年8月4日", introductionDate: "2025???,
img: bill11 img: bill11
}, },
{ {
billName: "美越贸易协议", billName: "美越贸易协议",
introductionDate: "2025年8月8日", introductionDate: "2025???,
img: bill12 img: bill12
} }
]); ]);
const releaseTime = ref("近一年发布"); const releaseTime = ref("近一年发?);
const releaseTimeList = ref([ const releaseTimeList = ref([
{ {
label: "近半年发布", label: "近半年发?,
value: "近半年发布" value: "近半年发?
}, },
{ {
label: "近一年发布", label: "近一年发?,
value: "近一年发布" value: "近一年发?
}, },
{ {
label: "近两年发布", label: "近两年发?,
value: "近两年发布" value: "近两年发?
}, },
{ {
label: "近三年发布", label: "近三年发?,
value: "近三年发布" value: "近三年发?
}, },
{ {
label: "近五年发布", label: "近五年发?,
value: "近五年发布" value: "近五年发?
} }
]); ]);
...@@ -1195,11 +1195,11 @@ const categoryList = ref([ ...@@ -1195,11 +1195,11 @@ const categoryList = ref([
// "集成电路", // "集成电路",
// "通信网络", // "通信网络",
// "量子科技", // "量子科技",
// "新能源", // "新能?,
// "新一代信息技术", // "新一代信息技?,
// "海洋", // "海洋",
// "先进制造", // "先进制?,
// "新材料", // "新材?,
// "航空航天", // "航空航天",
]); ]);
...@@ -1392,7 +1392,7 @@ onMounted(async () => { ...@@ -1392,7 +1392,7 @@ onMounted(async () => {
align-items: center; align-items: center;
justify-content: flex-start; justify-content: flex-start;
width: 48%; width: 48%;
/* 留出2%的间*/ /* 留出2%的间?*/
// margin-bottom: 6px; // margin-bottom: 6px;
box-sizing: border-box; box-sizing: border-box;
gap: 10px; gap: 10px;
...@@ -2558,7 +2558,7 @@ onMounted(async () => { ...@@ -2558,7 +2558,7 @@ onMounted(async () => {
.center-center-news { .center-center-news {
flex-shrink: 0; flex-shrink: 0;
/* 保证内部 NewsList 的滚动条与外box3 右侧对齐 */ /* 保证内部 NewsList 的滚动条与外?box3 右侧对齐 */
:deep(.box3-main) { :deep(.box3-main) {
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
</div> </div>
</div> </div>
<div class="home-main-center"> <div class="home-main-center">
<DivideHeader id="position1" class="divide-header" :titleText="'最新动态'"></DivideHeader> <DivideHeader id="position1" class="divide-header" :titleText="'最新动?"></DivideHeader>
<div class="center-top"> <div class="center-top">
<div class="box1"> <div class="box1">
<overviewMainBox title="调查进展" @toDetail="handleClickToDetail()"> <overviewMainBox title="调查进展" @toDetail="handleClickToDetail()">
...@@ -91,33 +91,33 @@ ...@@ -91,33 +91,33 @@
<div class="list-box"> <div class="list-box">
<div class="list-item"> <div class="list-item">
<div class="icon"></div> <div class="icon"></div>
<div class="list-left">{{ "调查案号:" }}</div> <div class="list-left">{{ "调查案号? }}</div>
<div class="list-right">{{ item.searchnum }}</div> <div class="list-right">{{ item.searchnum }}</div>
</div> </div>
<div class="list-item"> <div class="list-item">
<div class="icon"></div> <div class="icon"></div>
<div class="list-left">{{ "涉及产品:" }}</div> <div class="list-left">{{ "涉及产品? }}</div>
<div class="list-right"> <div class="list-right">
{{ item.product }} {{ item.product }}
</div> </div>
</div> </div>
<div class="list-item"> <div class="list-item">
<div class="icon"></div> <div class="icon"></div>
<div class="list-left">{{ "原告:" }}</div> <div class="list-left">{{ "原告? }}</div>
<div class="list-right"> <div class="list-right">
{{ item.plaintiff }} {{ item.plaintiff }}
</div> </div>
</div> </div>
<div class="list-item"> <div class="list-item">
<div class="icon"></div> <div class="icon"></div>
<div class="list-left">{{ "被告:" }}</div> <div class="list-left">{{ "被告? }}</div>
<div class="list-right"> <div class="list-right">
{{ item.defendant }} {{ item.defendant }}
</div> </div>
</div> </div>
<div class="list-item"> <div class="list-item">
<div class="icon"></div> <div class="icon"></div>
<div class="list-left">{{ "涉案专利:" }}</div> <div class="list-left">{{ "涉案专利? }}</div>
<div class="list-right"> <div class="list-right">
{{ item.patent }} {{ item.patent }}
</div> </div>
...@@ -189,7 +189,7 @@ ...@@ -189,7 +189,7 @@
</div> </div>
<div class="center-footer1"> <div class="center-footer1">
<div class="box7"> <div class="box7">
<OverviewNormalBox title="受调查国家分布" width="1064px"> <OverviewNormalBox title="受调查国家分? width="1064px">
<template #header-icon> <template #header-icon>
<img style="width: 100%; height: 100%;" src="./assets/icons/icon4.svg" alt="" /> <img style="width: 100%; height: 100%;" src="./assets/icons/icon4.svg" alt="" />
</template> </template>
...@@ -242,7 +242,7 @@ ...@@ -242,7 +242,7 @@
</div> </div>
</div> </div>
<div class="home-main-footer"> <div class="home-main-footer">
<DivideHeader id="position4" class="divide-header" :titleText="'资源库'"></DivideHeader> <DivideHeader id="position4" class="divide-header" :titleText="'资源?"></DivideHeader>
<div class="home-main-footer-header"> <div class="home-main-footer-header">
<SourceTabList :sourceTabList="categoryList" :activeSouceTabId="activeCateId" @clickTab="handleClickCate"> <SourceTabList :sourceTabList="categoryList" :activeSouceTabId="activeCateId" @clickTab="handleClickCate">
</SourceTabList> </SourceTabList>
...@@ -306,7 +306,7 @@ ...@@ -306,7 +306,7 @@
<div class="left-box2"> <div class="left-box2">
<div class="left-box2-header"> <div class="left-box2-header">
<div class="icon"></div> <div class="icon"></div>
<div class="title">{{ "受调查国家/地区" }}</div> <div class="title">{{ "受调查国?地区" }}</div>
</div> </div>
<div class="left-box2-main"> <div class="left-box2-main">
<el-checkbox-group class="checkbox-group" v-model="checkedCountryList" <el-checkbox-group class="checkbox-group" v-model="checkedCountryList"
...@@ -328,7 +328,7 @@ ...@@ -328,7 +328,7 @@
</div> </div>
<div class="right-main"> <div class="right-main">
<el-empty v-if="surveyInfoList.length === 0" description="当前条件下暂无数据" :image-size="200" /> <el-empty v-if="surveyInfoList.length === 0" description="当前条件下暂无数? :image-size="200" />
<div v-else class="right-main-item" v-for="(item, index) in surveyInfoList" :key="index" <div v-else class="right-main-item" v-for="(item, index) in surveyInfoList" :key="index"
@click="handleClickToSurveyDetail(item.sortcode)"> @click="handleClickToSurveyDetail(item.sortcode)">
<div class="item-left"> <div class="item-left">
...@@ -375,7 +375,7 @@ ...@@ -375,7 +375,7 @@
</div> </div>
<div class="right-footer"> <div class="right-footer">
<div class="footer-left"> <div class="footer-left">
{{ `${totalDiscussNum} 项` }} {{ `?${totalDiscussNum} 项` }}
</div> </div>
<div class="footer-right"> <div class="footer-right">
<el-pagination @current-change="handleCurrentChange" :pageSize="pageSize" :current-page="currentPage" <el-pagination @current-change="handleCurrentChange" :pageSize="pageSize" :current-page="currentPage"
...@@ -394,7 +394,7 @@ import { onMounted, ref, nextTick } from "vue"; ...@@ -394,7 +394,7 @@ import { onMounted, ref, nextTick } from "vue";
import LeftBtn from "@/components/base/PageBtn/LeftBtn.vue"; import LeftBtn from "@/components/base/PageBtn/LeftBtn.vue";
import RightBtn from "@/components/base/PageBtn/RightBtn.vue"; import RightBtn from "@/components/base/PageBtn/RightBtn.vue";
import RiskSignal from "@/components/base/RiskSignal/index.vue"; import RiskSignal from "@/components/base/riskSignal/index.vue";
import TipTab from "@/components/base/TipTab/index.vue" import TipTab from "@/components/base/TipTab/index.vue"
import MessageBubble from "@/components/base/MessageBubble/index.vue" import MessageBubble from "@/components/base/MessageBubble/index.vue"
import NewsList from "@/components/base/NewsList/index.vue"; import NewsList from "@/components/base/NewsList/index.vue";
...@@ -434,7 +434,7 @@ const handleToPosi = id => { ...@@ -434,7 +434,7 @@ const handleToPosi = id => {
// isShow.value = true; // isShow.value = true;
// } // }
// 2. 使用 nextTick 等待 DOM 布局(如高度切换)完成后再进行坐标计 // 2. 使用 nextTick 等待 DOM 布局(如高度切换)完成后再进行坐标计?
nextTick(() => { nextTick(() => {
const containerRect = containerRef.value.getBoundingClientRect(); const containerRect = containerRef.value.getBoundingClientRect();
const elementRect = element.getBoundingClientRect(); const elementRect = element.getBoundingClientRect();
...@@ -459,9 +459,9 @@ const formatDate = (dateStr, dateType) => { ...@@ -459,9 +459,9 @@ const formatDate = (dateStr, dateType) => {
if (dateType === 'year') { if (dateType === 'year') {
return year return year
} else { } else {
return `${month.toString().padStart(2, "0")}月${day.toString().padStart(2, "0")}日` return `${month.toString().padStart(2, "0")}?{day.toString().padStart(2, "0")}日`
} }
// return `${year}${month.toString().padStart(2, "0")}月${day.toString().padStart(2, "0")}日`; // return `${year}?{month.toString().padStart(2, "0")}?{day.toString().padStart(2, "0")}日`;
} }
let containerRef = ref(null); let containerRef = ref(null);
...@@ -495,7 +495,7 @@ const handleClickToDetail = () => { ...@@ -495,7 +495,7 @@ const handleClickToDetail = () => {
activeIndex = carouselRef.value.activeIndex; activeIndex = carouselRef.value.activeIndex;
} }
console.log("当前 Carousel 激活索引:", activeIndex); console.log("当前 Carousel 激活索?", activeIndex);
const id = box1DataList.value[activeIndex].SEARCHSORT; const id = box1DataList.value[activeIndex].SEARCHSORT;
window.sessionStorage.setItem("curTabName", id + "调查概览"); window.sessionStorage.setItem("curTabName", id + "调查概览");
...@@ -567,7 +567,7 @@ const handleGetBox3Data = async () => { ...@@ -567,7 +567,7 @@ const handleGetBox3Data = async () => {
} }
} catch (error) { } } catch (error) { }
}; };
// 点击新闻条目,跳转到新闻分析 // 点击新闻条目,跳转到新闻分析?
const handleToNewsAnalysis = news => { const handleToNewsAnalysis = news => {
const route = router.resolve({ const route = router.resolve({
path: "/newsAnalysis", path: "/newsAnalysis",
...@@ -644,7 +644,7 @@ const handleClickPerson = async item => { ...@@ -644,7 +644,7 @@ const handleClickPerson = async item => {
const route = router.resolve({ const route = router.resolve({
path: "/characterPage", path: "/characterPage",
query: { query: {
type: type, // type=1为科技企业领袖,2为国会议员,3为智库研究人员 type: type, // type=1为科技企业领袖?为国会议员,3为智库研究人?
personId: item.personId personId: item.personId
} }
}); });
...@@ -664,11 +664,11 @@ const handleClickPerson = async item => { ...@@ -664,11 +664,11 @@ const handleClickPerson = async item => {
// 调查数量 // 调查数量
const box5BtnList = ref([ const box5BtnList = ref([
{ {
name: "按月度", name: "按月?,
value: 1 value: 1
}, },
{ {
name: "按年度", name: "按年?,
value: 12 value: 12
} }
]); ]);
...@@ -688,14 +688,14 @@ function transformAllData(originalData) { ...@@ -688,14 +688,14 @@ function transformAllData(originalData) {
// 2. 获取所有调查类型并去重 // 2. 获取所有调查类型并去重
const allCategories = [...new Set(originalData.map(item => item.sortName))]; const allCategories = [...new Set(originalData.map(item => item.sortName))];
// 3. 为每个类别创建值数 // 3. 为每个类别创建值数?
const categoryData = allCategories.map(category => { const categoryData = allCategories.map(category => {
// 对于每个年份,查找对应的数据 // 对于每个年份,查找对应的数据
const values = allYears.map(year => { const values = allYears.map(year => {
// 查找匹配当前类别和年份的数据 // 查找匹配当前类别和年份的数据
const matchingItem = originalData.find(item => item.sortName === category && String(item.searchYorM) === year); const matchingItem = originalData.find(item => item.sortName === category && String(item.searchYorM) === year);
// 如果找到则返回searchCount,否则返回0 // 如果找到则返回searchCount,否则返?
return matchingItem ? matchingItem.searchCount : 0; return matchingItem ? matchingItem.searchCount : 0;
}); });
...@@ -705,7 +705,7 @@ function transformAllData(originalData) { ...@@ -705,7 +705,7 @@ function transformAllData(originalData) {
}; };
}); });
// 4. 构建最终结 // 4. 构建最终结?
return { return {
title: allYears, title: allYears,
data: categoryData data: categoryData
...@@ -726,7 +726,7 @@ function transformAllData1(originalData) { ...@@ -726,7 +726,7 @@ function transformAllData1(originalData) {
const [year, month] = dateStr.split("-").map(Number); const [year, month] = dateStr.split("-").map(Number);
return { year, month: month || 0 }; return { year, month: month || 0 };
} else { } else {
// 处理纯年份格 // 处理纯年份格?
return { year: Number(dateStr), month: 0 }; return { year: Number(dateStr), month: 0 };
} }
}; };
...@@ -734,7 +734,7 @@ function transformAllData1(originalData) { ...@@ -734,7 +734,7 @@ function transformAllData1(originalData) {
const dateA = parseDate(a); const dateA = parseDate(a);
const dateB = parseDate(b); const dateB = parseDate(b);
// 先比较年份,再比较月 // 先比较年份,再比较月?
if (dateA.year !== dateB.year) { if (dateA.year !== dateB.year) {
return dateA.year - dateB.year; return dateA.year - dateB.year;
} }
...@@ -744,14 +744,14 @@ function transformAllData1(originalData) { ...@@ -744,14 +744,14 @@ function transformAllData1(originalData) {
// 2. 获取所有调查类型并去重 // 2. 获取所有调查类型并去重
const allCategories = [...new Set(originalData.map(item => item.sortName))]; const allCategories = [...new Set(originalData.map(item => item.sortName))];
// 3. 为每个类别创建值数 // 3. 为每个类别创建值数?
const categoryData = allCategories.map(category => { const categoryData = allCategories.map(category => {
// 对于每个日期,查找对应的数据 // 对于每个日期,查找对应的数据
const values = allDates.map(date => { const values = allDates.map(date => {
// 查找匹配当前类别和日期的数据 // 查找匹配当前类别和日期的数据
const matchingItem = originalData.find(item => item.sortName === category && String(item.searchYorM) === date); const matchingItem = originalData.find(item => item.sortName === category && String(item.searchYorM) === date);
// 如果找到则返回searchCount,否则返回0 // 如果找到则返回searchCount,否则返?
return matchingItem ? matchingItem.searchCount : 0; return matchingItem ? matchingItem.searchCount : 0;
}); });
...@@ -761,7 +761,7 @@ function transformAllData1(originalData) { ...@@ -761,7 +761,7 @@ function transformAllData1(originalData) {
}; };
}); });
// 4. 构建最终结 // 4. 构建最终结?
return { return {
title: allDates, title: allDates,
data: categoryData data: categoryData
...@@ -787,7 +787,7 @@ const box5ChartData = ref({ ...@@ -787,7 +787,7 @@ const box5ChartData = ref({
}); });
const hadleGetStatNum = async () => { const hadleGetStatNum = async () => {
const params = { const params = {
byYorM: box5BtnActive.value // 月度:1 年度:12 byYorM: box5BtnActive.value // 月度? 年度?2
}; };
try { try {
const res = await getStatNum(params); const res = await getStatNum(params);
...@@ -930,7 +930,7 @@ const handleBox6 = async () => { ...@@ -930,7 +930,7 @@ const handleBox6 = async () => {
setChart(chart2, "chart2"); setChart(chart2, "chart2");
}; };
// 受调查国家分 // 受调查国家分?
const box7SurveyList = ref([ const box7SurveyList = ref([
{ {
label: "337调查", label: "337调查",
...@@ -994,7 +994,7 @@ const handleGetBox7Data = async () => { ...@@ -994,7 +994,7 @@ const handleGetBox7Data = async () => {
}; };
try { try {
const res = await getSearchCountry(params); const res = await getSearchCountry(params);
console.log("受调查国家分布", res); console.log("受调查国家分?, res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
box7Data.value.title = res.data.map(item => { box7Data.value.title = res.data.map(item => {
return { return {
...@@ -1070,7 +1070,7 @@ const handleChangeBox8Survey = () => { ...@@ -1070,7 +1070,7 @@ const handleChangeBox8Survey = () => {
handleBox8(); handleBox8();
}; };
// 资源 // 资源?
const pageSize = ref(10); const pageSize = ref(10);
const currentPage = ref(1); const currentPage = ref(1);
const totalDiscussNum = ref(0); const totalDiscussNum = ref(0);
...@@ -1114,7 +1114,7 @@ const releaseTimeList = ref([ ...@@ -1114,7 +1114,7 @@ const releaseTimeList = ref([
value: true value: true
}, },
{ {
label: "按发布时间升序", label: "按发布时间升?,
value: false value: false
} }
]); ]);
...@@ -1130,23 +1130,23 @@ const handlePxChange = val => { ...@@ -1130,23 +1130,23 @@ const handlePxChange = val => {
const surveyYearList = ref([ const surveyYearList = ref([
{ {
name: "2025年", name: "2025?,
id: "2025" id: "2025"
}, },
{ {
name: "2024年", name: "2024?,
id: "2024" id: "2024"
}, },
{ {
name: "2023年", name: "2023?,
id: "2023" id: "2023"
}, },
{ {
name: "2022年", name: "2022?,
id: "2022" id: "2022"
}, },
{ {
name: "2021年", name: "2021?,
id: "2021" id: "2021"
} }
]); ]);
...@@ -1201,15 +1201,15 @@ const handleChangeCheckedAreas = (val) => { ...@@ -1201,15 +1201,15 @@ const handleChangeCheckedAreas = (val) => {
// 发布机构 // 发布机构
const insList = ref([ const insList = ref([
{ {
name: "商务部", name: "商务?,
id: "54" id: "54"
}, },
{ {
name: "国际贸易委员会", name: "国际贸易委员?,
id: "262" id: "262"
}, },
{ {
name: "贸易代表办公室", name: "贸易代表办公?,
id: "491" id: "491"
} }
]); ]);
...@@ -1251,7 +1251,7 @@ const handleChangeCheckedIns = (val) => { ...@@ -1251,7 +1251,7 @@ const handleChangeCheckedIns = (val) => {
handleGetSurveyList(); handleGetSurveyList();
}; };
// 受调查国家/地区 // 受调查国?地区
const countryList = ref([ const countryList = ref([
]); ]);
const checkedCountryList = ref(['全部']); const checkedCountryList = ref(['全部']);
...@@ -1259,7 +1259,7 @@ const handleGetAllSearchCountry = async () => { ...@@ -1259,7 +1259,7 @@ const handleGetAllSearchCountry = async () => {
try { try {
const res = await getSearchAllCountry() const res = await getSearchAllCountry()
console.log('受调查国家/地区', res); console.log('受调查国?地区', res);
if (res.code && res.data) { if (res.code && res.data) {
countryList.value = res.data.map(item => { countryList.value = res.data.map(item => {
return { return {
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<img src="./assets/rightbtn.png" alt class="right-btn" @click="changeIndex(1)" /> <img src="./assets/rightbtn.png" alt class="right-btn" @click="changeIndex(1)" />
<div class="left-top"> <div class="left-top">
<img src="./assets/icon01.png" alt /> <img src="./assets/icon01.png" alt />
<div class="left-top-title">限制动态</div> <div class="left-top-title">?/div>
<div class="more" @click="handleClickToDetail">祕 ></div> <div class="more" @click="handleClickToDetail">祕 ></div>
</div> </div>
<div class="left-center"> <div class="left-center">
...@@ -15,22 +15,22 @@ ...@@ -15,22 +15,22 @@
<div class="left-center-main-ul"> <div class="left-center-main-ul">
<ul> <ul>
<li> <li>
<span class="ul-title">布机构:</span> <span class="ul-title">?/span>
<span class="ul-content">{{ latestUpdateList[latestUpdateIndex].PUBLISHORGNAME }}</span> <span class="ul-content">{{ latestUpdateList[latestUpdateIndex].PUBLISHORGNAME }}</span>
</li> </li>
<li> <li>
<span class="ul-title">布日期:</span> <span class="ul-title">?/span>
<span class="ul-content">{{ latestUpdateList[latestUpdateIndex].PUBLISHDATE }}</span> <span class="ul-content">{{ latestUpdateList[latestUpdateIndex].PUBLISHDATE }}</span>
</li> </li>
<li> <li>
<span class="ul-title">领域:</span> <span class="ul-title">?/span>
<span class="ul-pie cl1" v-for="item in latestUpdateList[latestUpdateIndex].ruleAreas">{{ item }}</span> <span class="ul-pie cl1" v-for="item in latestUpdateList[latestUpdateIndex].ruleAreas">{{ item }}</span>
<!-- <span class="ul-pie cl2"></span> <!-- <span class="ul-pie cl2"></span>
<span class="ul-pie cl3">材料</span> <span class="ul-pie cl3">?/span>
<span class="ul-pie cl4"></span>--> <span class="ul-pie cl4"></span>-->
</li> </li>
<li> <li>
<span class="ul-title">实体:</span> <span class="ul-title">?/span>
<span class="ul-content" v-for="item in latestUpdateList[latestUpdateIndex].ruleEntities">{{ <span class="ul-content" v-for="item in latestUpdateList[latestUpdateIndex].ruleEntities">{{
item.ORGNAME }} &nbsp;</span> item.ORGNAME }} &nbsp;</span>
</li> </li>
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
</div> </div>
<div class="left-bottom"> <div class="left-bottom">
<ul> <ul>
<li class="left-bottom-li">摘要:</li> <li class="left-bottom-li">?/li>
</ul> </ul>
<div class="left-bottom-content">{{ latestUpdateList[latestUpdateIndex].RULEINTRODUCTION }}</div> <div class="left-bottom-content">{{ latestUpdateList[latestUpdateIndex].RULEINTRODUCTION }}</div>
</div> </div>
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
<div v-for="(item, index) in list" :key="index" class="right-main"> <div v-for="(item, index) in list" :key="index" class="right-main">
<div <div
class="main-left" class="main-left"
:class="{ cl4: item.signalLevel === '特别重大', cl5: item.signalLevel === '重大风险', cl6: item.signalLevel === '一般风险'}" :class="{ cl4: item.signalLevel === '之', cl5: item.signalLevel === '之憌', cl6: item.signalLevel === '銝憌?}"
>{{ item.signalLevel }}</div> >{{ item.signalLevel }}</div>
<div class="main-center">{{ item.signalTitle }}</div> <div class="main-center">{{ item.signalTitle }}</div>
<div class="main-right">{{ item.signalTime }}</div> <div class="main-right">{{ item.signalTime }}</div>
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
</template> </template>
<script setup> <script setup>
import RiskSignal from "@/components/base/RiskSignal/index.vue"; import RiskSignal from "@/components/base/riskSignal/index.vue";
import { ref, onBeforeMount, computed } from "vue"; import { ref, onBeforeMount, computed } from "vue";
import router from "@/router"; import router from "@/router";
import { getLatestUpdates, getRiskSignal } from '@/api/ruleRestriction/index.js' import { getLatestUpdates, getRiskSignal } from '@/api/ruleRestriction/index.js'
...@@ -84,7 +84,7 @@ const list = ref([ ...@@ -84,7 +84,7 @@ const list = ref([
{ {
id: 1, id: 1,
title: "之", title: "之",
content: "保护美国资金与业知识免受敌对研究利用法案", content: "靽蝢韏霂笆弦瘜?,
time: "銝憭拙" time: "銝憭拙"
}, },
{ {
...@@ -96,7 +96,7 @@ const list = ref([ ...@@ -96,7 +96,7 @@ const list = ref([
{ {
id: 3, id: 3,
title: "之憌", title: "之憌",
content: "众议院“美中略竞争特别委员会”向国会提...", content: "隡悅葉蝡憪隡?..",
time: "銝憭拙" time: "銝憭拙"
}, },
{ {
...@@ -107,7 +107,7 @@ const list = ref([ ...@@ -107,7 +107,7 @@ const list = ref([
} }
]); ]);
// 新动态列表 // ?
const latestUpdateList = ref([{}]) const latestUpdateList = ref([{}])
// 敶蝷箸 // 敶蝷箸
const latestUpdateIndex = ref(0) const latestUpdateIndex = ref(0)
...@@ -115,14 +115,14 @@ const latestUpdateIndex = ref(0) ...@@ -115,14 +115,14 @@ const latestUpdateIndex = ref(0)
// //
const changeIndex = (num) => { const changeIndex = (num) => {
if (num === -1) { if (num === -1) {
// 判断当前是否是第一个,是的话则将序号设置为最后一个 // 敶蝚砌銝迎霈曄蔭銝箸銝?
if (latestUpdateIndex.value === 0) { if (latestUpdateIndex.value === 0) {
latestUpdateIndex.value = latestUpdateList.value.length - 1 latestUpdateIndex.value = latestUpdateList.value.length - 1
} else { } else {
latestUpdateIndex.value-- latestUpdateIndex.value--
} }
} else { } else {
// 判断当前是否是最后一个,是的话则将序号设置为第一个 // 敶銝迎霈曄蔭銝箇洵銝銝?
if (latestUpdateIndex.value === latestUpdateList.value.length - 1) { if (latestUpdateIndex.value === latestUpdateList.value.length - 1) {
latestUpdateIndex.value = 0 latestUpdateIndex.value = 0
} else { } else {
...@@ -141,7 +141,7 @@ const getLatestUpdateInfo = async () => { ...@@ -141,7 +141,7 @@ const getLatestUpdateInfo = async () => {
latestUpdateList.value = res.data latestUpdateList.value = res.data
} }
} catch (error) { } catch (error) {
console.error("获取最新动态接口失败:", error); console.error("憭梯?", error);
} }
} }
...@@ -165,7 +165,7 @@ const handleClickToDetail = () => { ...@@ -165,7 +165,7 @@ const handleClickToDetail = () => {
window.open(`/ruleRestrictions/detail?id=${latestUpdateList.value[latestUpdateIndex.value].RULEID}`, "_blank"); window.open(`/ruleRestrictions/detail?id=${latestUpdateList.value[latestUpdateIndex.value].RULEID}`, "_blank");
}; };
// 左侧展示的主动态 // 撌虫儒撅內蜓?
const mainTrend = computed(() => { const mainTrend = computed(() => {
if (riskSignalList.value.length === 0) return null; if (riskSignalList.value.length === 0) return null;
return riskSignalList.value[activeIndex.value] || riskSignalList.value[0]; return riskSignalList.value[activeIndex.value] || riskSignalList.value[0];
...@@ -194,7 +194,7 @@ const handleToRiskDetail = (item) => { ...@@ -194,7 +194,7 @@ const handleToRiskDetail = (item) => {
// window.open(curRoute.href, "_blank"); // window.open(curRoute.href, "_blank");
// }; // };
// 查看更多动态 // 憭?
const handleToMoreRiskSignal = () => { const handleToMoreRiskSignal = () => {
const route = router.resolve("/viewRiskSignal"); const route = router.resolve("/viewRiskSignal");
window.open(route.href, "_blank"); window.open(route.href, "_blank");
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<img src="./assets/rightbtn.png" alt="" class="right-btn" @click="handleSwithCurDecree('right')" /> <img src="./assets/rightbtn.png" alt="" class="right-btn" @click="handleSwithCurDecree('right')" />
<div class="left-top"> <div class="left-top">
<img src="./assets/icon01.png" alt="" /> <img src="./assets/icon01.png" alt="" />
<div class="left-top-title">最新资助项</div> <div class="left-top-title">韏憿寧?/div>
<span>祕 ></span> <span>祕 ></span>
</div> </div>
<el-carousel ref="carouselRef" height="395px" :autoplay="true" :interval="3000" arrow="never" <el-carousel ref="carouselRef" height="395px" :autoplay="true" :interval="3000" arrow="never"
...@@ -21,24 +21,24 @@ ...@@ -21,24 +21,24 @@
<div class="left-center-main-ul"> <div class="left-center-main-ul">
<ul> <ul>
<li> <li>
<span class="ul-title">投资主体</span> <span class="ul-title">蜓雿?/span>
<span class="ul-content">美国国家科学基金</span> <span class="ul-content">蝢摰嗥郎?/span>
</li> </li>
<li> <li>
<span class="ul-title">发布日期</span> <span class="ul-title">?/span>
<span class="ul-content">{{ itemData.publicationDate }}</span> <span class="ul-content">{{ itemData.publicationDate }}</span>
</li> </li>
<li> <li>
<span class="ul-title">资助经费</span> <span class="ul-title">韏蝏晶嚗?/span>
<span class="ul-content">{{ itemData.amount }}</span> <span class="ul-content">{{ itemData.amount }}</span>
</li> </li>
<li> <li>
<span class="ul-title">涉及领域</span> <span class="ul-title">瘨?/span>
<span class="ul-pie cl1" v-for="value in itemData.toOrgNameList">{{ value }}</span> <span class="ul-pie cl1" v-for="value in itemData.toOrgNameList">{{ value }}</span>
</li> </li>
<li> <li>
<span class="ul-title">资助对象</span> <span class="ul-title">韏撖寡情?/span>
<span class="ul-content">{{ itemData.fromOrgNameList.join(',') }}</span> <span class="ul-content">{{ itemData.fromOrgNameList.join(',') }}</span>
</li> </li>
</ul> </ul>
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
</div> </div>
<div class="left-bottom"> <div class="left-bottom">
<ul> <ul>
<li class="left-bottom-li">内容摘要</li> <li class="left-bottom-li">捆?/li>
</ul> </ul>
<div class="left-bottom-content">{{ itemData.abstractContent }} <div class="left-bottom-content">{{ itemData.abstractContent }}
</div> </div>
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
<div class="main-left" :class="{ <div class="main-left" :class="{
cl4: item.signalLevel === '之', cl4: item.signalLevel === '之',
cl5: item.signalLevel === '之憌', cl5: item.signalLevel === '之憌',
cl6: item.signalLevel === '一般风险' cl6: item.signalLevel === '銝憌?
}"> }">
{{ item.signalLevel }} {{ item.signalLevel }}
</div> </div>
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
</template> </template>
<script setup> <script setup>
import RiskSignal from "@/components/base/RiskSignal/index.vue"; import RiskSignal from "@/components/base/riskSignal/index.vue";
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
import { import {
getNewProject, getRiskSignal getNewProject, getRiskSignal
...@@ -105,14 +105,14 @@ const list = ref([ ...@@ -105,14 +105,14 @@ const list = ref([
}, },
{ {
id: 2, id: 2,
title: "一般风险", title: "銝憌?,
content: "美国NASA公布NIAC计划2025年度第一轮资助", content: "NASAIAC霈∪2025撟游漲蝚砌頧株?,
time: "銝憭拙" time: "銝憭拙"
}, },
{ {
id: 3, id: 3,
title: "之", title: "之",
content: "美国NASA公布“早期创新计划”2026年资助...", content: "蝢NASA撣霈∪?026撟渲?..",
time: "銝憭拙" time: "銝憭拙"
}, },
{ {
...@@ -130,7 +130,7 @@ const list = ref([ ...@@ -130,7 +130,7 @@ const list = ref([
{ {
id: 6, id: 6,
title: "之", title: "之",
content: "美国DARPA资助可调控生物功能微系统技术开发", content: "蝢DARPA韏靚敺桃頂蝏撘?,
time: "銝憭拙" time: "銝憭拙"
} }
]); ]);
...@@ -164,11 +164,11 @@ const handleSwithCurDecree = name => { ...@@ -164,11 +164,11 @@ const handleSwithCurDecree = name => {
carouselRef.value.next(); carouselRef.value.next();
} }
}; };
//// 最新资助项 //// 韏憿寧?
const handleGetNewProject = async () => { const handleGetNewProject = async () => {
try { try {
const res = await getNewProject(); const res = await getNewProject();
console.log("最新资助项目", res); console.log("韏憿寧?, res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
box1Data.value = res.data box1Data.value = res.data
} }
...@@ -505,7 +505,7 @@ onMounted(async () => { ...@@ -505,7 +505,7 @@ onMounted(async () => {
overflow: hidden; overflow: hidden;
/* */ /* */
text-overflow: ellipsis; text-overflow: ellipsis;
/* 超出部分显示省略*/ /* 頞蝷箇?*/
width: 200px; width: 200px;
/* 霈曄蔭銝銝芸摰捐摨 */ /* 霈曄蔭銝銝芸摰捐摨 */
height: 30px; height: 30px;
......
...@@ -21,8 +21,8 @@ ...@@ -21,8 +21,8 @@
</div> --> </div> -->
<div class="home-main-header-center"> <div class="home-main-header-center">
<SearchContainer style="margin-bottom: 0;margin-top: 48px; " v-if="containerRef" <SearchContainer style="margin-bottom: 0;margin-top: 48px; " v-if="containerRef"
placeholder="搜索科技人物及观点" :containerRef="containerRef" areaName="人物" /> placeholder="搜索科技人物及观? :containerRef="containerRef" areaName="人物" />
<!-- <el-input v-model="input" style="width: 838px; height: 100%" placeholder="搜索科技人物及观点" /> <!-- <el-input v-model="input" style="width: 838px; height: 100%" placeholder="搜索科技人物及观? />
<div class="search"> <div class="search">
<div class="search-icon"> <div class="search-icon">
<img src="./assets/images/search-icon.png" alt="" /> <img src="./assets/images/search-icon.png" alt="" />
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
</div> </div>
<div class="home-main-header-footer-item"> <div class="home-main-header-footer-item">
<div class="item-top">633</div> <div class="item-top">633</div>
<div class="item-footer">顶级科学</div> <div class="item-footer">顶级科学?/div>
</div> </div>
<div class="home-main-header-footer-item"> <div class="home-main-header-footer-item">
<div class="item-top">312</div> <div class="item-top">312</div>
...@@ -50,13 +50,13 @@ ...@@ -50,13 +50,13 @@
</div> --> </div> -->
<!-- <div class="home-main-header-btn-box"> <!-- <div class="home-main-header-btn-box">
<div class="btn" @click="handleToPosi('position1')"> <div class="btn" @click="handleToPosi('position1')">
<div class="btn-text">{{ "最新动态" }}</div> <div class="btn-text">{{ "最新动? }}</div>
<div class="btn-icon"> <div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" /> <img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div> </div>
</div> </div>
<div class="btn" @click="handleToPosi('position2')"> <div class="btn" @click="handleToPosi('position2')">
<div class="btn-text">{{ "言论动态" }}</div> <div class="btn-text">{{ "言论动? }}</div>
<div class="btn-icon"> <div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" /> <img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div> </div>
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
</div> </div>
</div> </div>
<div class="btn" @click="handleToPosi('position4')"> <div class="btn" @click="handleToPosi('position4')">
<div class="btn-text">{{ "资源库" }}</div> <div class="btn-text">{{ "资源? }}</div>
<div class="btn-icon"> <div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" /> <img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div> </div>
...@@ -76,16 +76,16 @@ ...@@ -76,16 +76,16 @@
</div> --> </div> -->
</div> </div>
<div class="home-main-center"> <div class="home-main-center">
<DivideHeader id="position1" class="divide-header" :titleText="'最新动态'"></DivideHeader> <DivideHeader id="position1" class="divide-header" :titleText="'最新动?"></DivideHeader>
<div class="center-top"> <div class="center-top">
<OverviewMainBox title="人物新闻动态" width="1064px" height="460px" <OverviewMainBox title="人物新闻动? width="1064px" height="460px"
@to-detail="handleClcikToCharacter(curnews.personId, curnews.name)"> @to-detail="handleClcikToCharacter(curnews.personId, curnews.name)">
<!-- 自定义左上角图标插槽 --> <!-- 自定义左上角图标插槽 -->
<template #headerIcon> <template #headerIcon>
<img src="./assets/images/personNewIcon.svg " alt="" /> <img src="./assets/images/personNewIcon.svg " alt="" />
</template> </template>
<!-- 主内容区--> <!-- 主内容区?-->
<div class="box1-wrapper"> <div class="box1-wrapper">
<div class="box1-left" @click="handleSwithCurBill('left')"> <div class="box1-left" @click="handleSwithCurBill('left')">
<img src="./assets/images/box1-left.png" alt="" /> <img src="./assets/images/box1-left.png" alt="" />
...@@ -99,7 +99,7 @@ ...@@ -99,7 +99,7 @@
arrow="never" indicator-position="none" @change="handleCarouselChange"> arrow="never" indicator-position="none" @change="handleCarouselChange">
<el-carousel-item v-for="person in newsDynamics" :key="person.personId"> <el-carousel-item v-for="person in newsDynamics" :key="person.personId">
<div class="carousel-content"> <div class="carousel-content">
<!-- 左侧:头--> <!-- 左侧:头?-->
<div class="avatar"> <div class="avatar">
<img :src="person.imageUrl" alt="人物头像" /> <img :src="person.imageUrl" alt="人物头像" />
</div> </div>
...@@ -155,7 +155,7 @@ ...@@ -155,7 +155,7 @@
<RiskSignal :list="warningList" @more-click="handleToMoreRiskSignal" postDate="signalTime" <RiskSignal :list="warningList" @more-click="handleToMoreRiskSignal" postDate="signalTime"
name="signalTitle" riskLevel="signalLevel" /> name="signalTitle" riskLevel="signalLevel" />
</div> </div>
<DivideHeader id="position2" class="divide-header" :titleText="'言论动态'"></DivideHeader> <DivideHeader id="position2" class="divide-header" :titleText="'言论动?"></DivideHeader>
<div class="center-center"> <div class="center-center">
<div class="box3"> <div class="box3">
<div class="box3-header"> <div class="box3-header">
...@@ -298,7 +298,7 @@ ...@@ -298,7 +298,7 @@
</div> </div>
<div class="home-main-footer"> <div class="home-main-footer">
<DivideHeader id="position4" class="divide-header" :titleText="'资源库'"></DivideHeader> <DivideHeader id="position4" class="divide-header" :titleText="'资源?"></DivideHeader>
<div class="home-main-footer-header"> <div class="home-main-footer-header">
<div class="btn-box"> <div class="btn-box">
<div class="btn" :class="{ btnActive: activeCate === cate.typeName }" <div class="btn" :class="{ btnActive: activeCate === cate.typeName }"
...@@ -317,7 +317,7 @@ ...@@ -317,7 +317,7 @@
</template> </template>
<script setup> <script setup>
import RiskSignal from "@/components/base/RiskSignal/index.vue"; import RiskSignal from "@/components/base/riskSignal/index.vue";
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import scrollToTop from "@/utils/scrollToTop"; import scrollToTop from "@/utils/scrollToTop";
...@@ -353,7 +353,7 @@ const router = useRouter(); ...@@ -353,7 +353,7 @@ const router = useRouter();
const containerRef = ref(null); const containerRef = ref(null);
const { isShow } = useContainerScroll(containerRef); const { isShow } = useContainerScroll(containerRef);
// 当前人物新闻动 // 当前人物新闻动?
const curnews = ref({ const curnews = ref({
imageUrl: "", imageUrl: "",
name: "", name: "",
...@@ -374,12 +374,12 @@ const handleCarouselChange = index => { ...@@ -374,12 +374,12 @@ const handleCarouselChange = index => {
// 获取人物新闻动 // 获取人物新闻动?
const newsDynamics = ref([]); const newsDynamics = ref([]);
const handlgetnewsDynamicsFn = async () => { const handlgetnewsDynamicsFn = async () => {
try { try {
const res = await getnewsDynamics(); const res = await getnewsDynamics();
console.log("人物新闻动态", res); console.log("人物新闻动?, res);
newsDynamics.value = res.data; newsDynamics.value = res.data;
} catch (error) { } catch (error) {
console.error(error); console.error(error);
...@@ -501,7 +501,7 @@ const handlegetOptionAreaChangeFn = async () => { ...@@ -501,7 +501,7 @@ const handlegetOptionAreaChangeFn = async () => {
//提取年份作为 title //提取年份作为 title
const years = sortedData.map(item => item.year); const years = sortedData.map(item => item.year);
//收集所有行业名 //收集所有行业名?
const allIndustries = new Set(); const allIndustries = new Set();
sortedData.forEach(yearData => { sortedData.forEach(yearData => {
yearData.industryList.forEach(industry => { yearData.industryList.forEach(industry => {
...@@ -514,7 +514,7 @@ const handlegetOptionAreaChangeFn = async () => { ...@@ -514,7 +514,7 @@ const handlegetOptionAreaChangeFn = async () => {
Array.from(allIndustries).forEach(industryName => { Array.from(allIndustries).forEach(industryName => {
industryMap.set(industryName, new Array(years.length).fill(0)); industryMap.set(industryName, new Array(years.length).fill(0));
}); });
// 填充每个行业每年的数 // 填充每个行业每年的数?
sortedData.forEach((yearData, yearIndex) => { sortedData.forEach((yearData, yearIndex) => {
yearData.industryList.forEach(industry => { yearData.industryList.forEach(industry => {
const industryValues = industryMap.get(industry.industryName); const industryValues = industryMap.get(industry.industryName);
...@@ -537,7 +537,7 @@ const handlegetOptionAreaChangeFn = async () => { ...@@ -537,7 +537,7 @@ const handlegetOptionAreaChangeFn = async () => {
// 科技人物类型 // 科技人物类型
const chart7Data = ref({ const chart7Data = ref({
name: ["国会议员", "行政主官", "科技领袖", "顶尖科学家", "其他"], name: ["国会议员", "行政主官", "科技领袖", "顶尖科学?, "其他"],
value: [482, 41, 83, 201, 25] value: [482, 41, 83, 201, 25]
}); });
const handlegetPersonTypeCountFn = async () => { const handlegetPersonTypeCountFn = async () => {
...@@ -565,7 +565,7 @@ const handleBackHome = () => { ...@@ -565,7 +565,7 @@ const handleBackHome = () => {
const carouselRef = ref(null); const carouselRef = ref(null);
// 切换人物新闻动 // 切换人物新闻动?
const handleSwithCurBill = name => { const handleSwithCurBill = name => {
if (name === "left") { if (name === "left") {
...@@ -667,7 +667,7 @@ const handleClcikToCharacter = async (id, name) => { ...@@ -667,7 +667,7 @@ const handleClcikToCharacter = async (id, name) => {
const route = router.resolve({ const route = router.resolve({
path: "/characterPage", path: "/characterPage",
query: { query: {
type: type, // type=1为科技企业领袖,2为国会议员,3为智库研究人员 type: type, // type=1为科技企业领袖?为国会议员,3为智库研究人?
personId: id personId: id
} }
}); });
...@@ -687,15 +687,15 @@ const handleClcikToCharacter = async (id, name) => { ...@@ -687,15 +687,15 @@ const handleClcikToCharacter = async (id, name) => {
// 风险信号 // 风险信号
const warningList = ref([ const warningList = ref([
{ title: "关于对中华人民共和国合成阿片类药物供应链...", time: "一天前", status: "特别重大" }, { title: "关于对中华人民共和国合成阿片类药物供应链...", time: "一天前", status: "特别重大" },
{ title: "关于调整汽车及汽车零部件进口的公告", time: "一天前", status: "特别重大" }, { title: "关于调整汽车及汽车零部件进口的公?, time: "一天前", status: "特别重大" },
{ title: "关于调整钢铁进口的公告", time: "一天前", status: "重大风险" }, { title: "关于调整钢铁进口的公?, time: "一天前", status: "重大风险" },
{ title: "关于使用互惠关税规范进口以纠正导致大规模...", time: "一天前", status: "重大风险" }, { title: "关于使用互惠关税规范进口以纠正导致大规模...", time: "一天前", status: "重大风险" },
{ title: "关于修订对中华人民共和国低价值进口商品适...", time: "一天前", status: "一般风险" } { title: "关于修订对中华人民共和国低价值进口商品?..", time: "一天前", status: "一般风? }
]); ]);
//人物动向 //人物动向
const peoDate = ref("本周"); const peoDate = ref("本周");
const peoDateList = ["今天", "昨天", "近三天", "本周", "本月"]; const peoDateList = ["今天", "昨天", "近三?, "本周", "本月"];
//重要人物言论及立场选择按钮 //重要人物言论及立场选择按钮
const fieldSelected = ref("全部领域"); const fieldSelected = ref("全部领域");
...@@ -713,7 +713,7 @@ const fieldSelectList = ref([ ...@@ -713,7 +713,7 @@ const fieldSelectList = ref([
value: "2" value: "2"
}, },
{ {
label: "新一代信息技术", label: "新一代信息技?,
value: "3" value: "3"
}, },
{ {
...@@ -721,7 +721,7 @@ const fieldSelectList = ref([ ...@@ -721,7 +721,7 @@ const fieldSelectList = ref([
value: "4" value: "4"
}, },
{ {
label: "新能源", label: "新能?,
value: "5" value: "5"
}, },
{ {
...@@ -733,11 +733,11 @@ const fieldSelectList = ref([ ...@@ -733,11 +733,11 @@ const fieldSelectList = ref([
value: "7" value: "7"
}, },
{ {
label: "先进制造", label: "先进制?,
value: "8" value: "8"
}, },
{ {
label: "新材料", label: "新材?,
value: "9" value: "9"
}, },
{ {
...@@ -757,7 +757,7 @@ const fieldSelectList = ref([ ...@@ -757,7 +757,7 @@ const fieldSelectList = ref([
value: "13" value: "13"
}, },
{ {
label: "核", label: "?,
value: "14" value: "14"
} }
]); ]);
...@@ -771,29 +771,29 @@ const fields = [ ...@@ -771,29 +771,29 @@ const fields = [
"通信网络", "通信网络",
"航空航天", "航空航天",
"海洋", "海洋",
"新材料", "新材?,
"先进制造" "先进制?
]; ];
const yearList = ref([ const yearList = ref([
{ {
label: "2025年", label: "2025?,
value: "2025" value: "2025"
}, },
{ {
label: "2024年", label: "2024?,
value: "2024" value: "2024"
}, },
{ {
label: "2023年", label: "2023?,
value: "2023" value: "2023"
}, },
{ {
label: "2022年", label: "2022?,
value: "2022" value: "2022"
} }
]); ]);
// 资源库分 // 资源库分?
const categoryList = ref(["全部人物", "国会议员", "行政主官", "科技领袖", "顶尖科学家"]); const categoryList = ref(["全部人物", "国会议员", "行政主官", "科技领袖", "顶尖科学?]);
const activeCate = ref("全部人物"); const activeCate = ref("全部人物");
const typeId = ref("000"); const typeId = ref("000");
...@@ -814,44 +814,44 @@ const handleToMoreRiskSignal = () => { ...@@ -814,44 +814,44 @@ const handleToMoreRiskSignal = () => {
// 词云数据 // 词云数据
const wordCloudData = ref([ const wordCloudData = ref([
{ name: "人工智能 (AI)", value: 100 }, { name: "人工智能 (AI)", value: 100 },
{ name: "进行可再生能源税收减免", value: 85 }, { name: "进行可再生能源税收减?, value: 85 },
{ name: "减少燃料对外依赖", value: 80 }, { name: "减少燃料对外依赖", value: 80 },
{ name: "评估中美现代化技术", value: 75 }, { name: "评估中美现代化技?, value: 75 },
{ name: "应对中国制造2025战略", value: 70 }, { name: "应对中国制?025战略", value: 70 },
{ name: "加强供应链风险管理", value: 68 }, { name: "加强供应链风险管?, value: 68 },
{ name: "补贴和税收抵免", value: 65 }, { name: "补贴和税收抵?, value: 65 },
{ name: "评估中美能源技术", value: 60 }, { name: "评估中美能源技?, value: 60 },
{ name: "实施能源税收延期", value: 58 }, { name: "实施能源税收延期", value: 58 },
{ name: "投资基础设施", value: 55 }, { name: "投资基础设施", value: 55 },
{ name: "禁止资助中国能源项目", value: 53 }, { name: "禁止资助中国能源项目", value: 53 },
{ name: "限制采购中国产电池", value: 50 }, { name: "限制采购中国产电?, value: 50 },
{ name: "加强美国在核能领域得到领导力", value: 48 }, { name: "加强美国在核能领域得到领导力", value: 48 },
{ name: "技术出口限制", value: 45 }, { name: "技术出口限?, value: 45 },
{ name: "出口管制与投资审查", value: 42 }, { name: "出口管制与投资审?, value: 42 },
{ name: "供应链调整", value: 40 }, { name: "供应链调?, value: 40 },
{ name: "左岸外包", value: 38 }, { name: "左岸外包", value: 38 },
{ name: "空域主权与安全", value: 36 }, { name: "空域主权与安?, value: 36 },
{ name: "抵制外国人才争夺", value: 34 }, { name: "抵制外国人才争夺", value: 34 },
{ name: "无人机先进空中交通", value: 32 }, { name: "无人机先进空中交?, value: 32 },
{ name: "能源与基础设施", value: 30 } { name: "能源与基础设施", value: 30 }
]); ]);
const wordCloudfield = ref("0"); const wordCloudfield = ref("0");
const wordCloudvalue = ref("2025"); const wordCloudvalue = ref("2025");
const yearSelect = ref("2025"); const yearSelect = ref("2025");
const areaSelect = ref("近十年"); const areaSelect = ref("近十?);
const options = [ const options = [
{ {
value: "近十年", value: "近十?,
label: "近十年" label: "近十?
}, },
{ {
value: "近五年", value: "近五?,
label: "近五年" label: "近五?
} }
]; ];
const viewOption = ref(["行政主管", "国会议员", "科技领袖", "顶尖科学家"]); const viewOption = ref(["行政主管", "国会议员", "科技领袖", "顶尖科学?]);
const viewSelect = ref("国会议员"); const viewSelect = ref("国会议员");
...@@ -1975,7 +1975,7 @@ onMounted(async () => { ...@@ -1975,7 +1975,7 @@ onMounted(async () => {
} }
.source-tag { .source-tag {
/* 数据展示/Tag标签/亮色/*/ /* 数据展示/Tag标签/亮色/?*/
width: 100px; width: 100px;
height: 24px; height: 24px;
/* 自动布局 */ /* 自动布局 */
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论