提交 2e8bb3b4 authored 作者: coderBryanFu's avatar coderBryanFu

update

上级 9da5a9d2
......@@ -116,7 +116,7 @@ import Menu11 from "@/assets/icons/overview/menu11.png";
import Menu12 from "@/assets/icons/overview/menu12.png";
const router = useRouter();
const route = useRoute()
const route = useRoute();
// const target = ref(null);
......@@ -166,7 +166,13 @@ const handleGetPersonType = async () => {
} catch (error) {}
};
const isCurrentOverview = ref(true);
const isCurrentOverview = computed(() => {
if (route.path === "/ZMOverView") {
return true
} else {
return false;
}
});
// 概览页标题列表
const homeTitleList = ref([
......@@ -281,11 +287,6 @@ const handleSearch = () => {
onMounted(() => {
handleGetPersonType();
if (route.path === "/ZMOverView") {
isCurrentOverview.value = true;
} else {
isCurrentOverview.value = false;
}
});
</script>
......
import request from "@/api/request.js";
// 全要素统计
export function getElementCount() {
return request({
method: 'GET',
url: `/api/element/elementCount`,
})
}
// 最新动态
export function getNewDynamics() {
return request({
method: 'GET',
url: `/api/element/newDynamics`,
})
}
// 美对我要素打压情况
/**
* @param {currentPage, pageSize}
*/
export function getElementSuppress(params) {
return request({
method: 'GET',
url: `/api/element/elementSuppress`,
params
})
}
// 关键词云-上
/**
* @param {currentPage, pageSize}
*/
export function getKeyWordUp() {
return request({
method: 'GET',
url: `/api/element/getKeyWordUp`,
})
}
// 美自身要素发展情况
/**
* @param {currentPage, pageSize}
*/
export function getElementDevelop(params) {
return request({
method: 'GET',
url: `/api/element/elementDevelop`,
params
})
}
// 关键词云-下
/**
* @param {currentPage, pageSize}
*/
export function getKeyWordDown(params) {
return request({
method: 'GET',
url: `/api/element/getKeyWordDown`,
params
})
}
// 通过id获取政令详细信息
/**
* @param {id}
*/
export function getOrderInfo(params) {
return request({
method: 'GET',
url: `/api/element/getOrderInfo/${params.id}`,
params
})
}
\ No newline at end of file
......@@ -2,6 +2,10 @@
import ZMOverview from "@/views/ZMOverView/index.vue";
const ZMOverviewRoutes = [
{
path: "/",
redirect: "/ZMOverView"
},
{
path: "/ZMOverView",
name: "ZMOverView",
......
......@@ -5,10 +5,10 @@ import gjOverView from "@/views/gjOverView/index.vue";
const overViewRoutes = [
// 中美博弈概览页面路由
{
path: "/",
redirect: "/overview"
},
// {
// path: "/",
// redirect: "/overview"
// },
{
path: "/overview",
name: "overView",
......
......@@ -19,8 +19,8 @@
v-for="(item, index) in headerList"
:key="index"
>
<div class="name">{{ item.name }}</div>
<div class="num">{{ item.value }}</div>
<div class="name">{{ item.elementName }}</div>
<div class="num">{{ item.num }}</div>
</div>
</div>
<div class="main">
......@@ -36,15 +36,15 @@
<div class="box1-item" v-for="(item, index) in box1DataList" :key="index">
<div class="box1-item-left">{{ index + 1 }}</div>
<div class="box1-item-right">
<div class="title">{{ item.title }}</div>
<div class="content">{{ item.content }}</div>
<div class="title">{{ item.name }}</div>
<div class="content">{{ item.describe }}</div>
<div class="tag-box">
<div class="tag" v-for="(val, idx) in item.tagList" :key="idx">{{ val }}</div>
<div class="tag" v-for="(val, idx) in item.elemetList" :key="idx">{{ val }}</div>
</div>
<div class="box1-item-right-footer">
<div class="time">{{ item.time }}</div>
<div class="time">{{ item.postDate }}</div>
<div class="area-box">
<div class="area" v-for="(vall, idxx) in item.areaList" :key="idxx">{{ vall.name }}</div>
<div class="area" v-for="(vall, idxx) in item.areaList" :key="idxx">{{ vall }}</div>
</div>
</div>
</div>
......@@ -72,7 +72,7 @@
@click="handleClickBox2Item(index)"
>
<div class="id">{{ index + 1 }}</div>
<div class="text">{{ item.title }}</div>
<div class="text">{{ item.name }}</div>
</div>
</div>
<div class="left-footer">
......@@ -83,34 +83,26 @@
:page-size="box2PageSize"
v-model:current-page="box2CurrentPage"
@current-change="handleGetBox2DataList"
size="small"
:pager-count="6"
/>
</div>
</div>
<div class="right">
<div class="title">{{ box2DataList[box2LeftActiveIndex].title }}</div>
<div class="title">{{ box2DetailInfo.name }}</div>
<div class="tag-box">
<div
class="tag"
v-for="(item, index) in box2DataList[box2LeftActiveIndex].tagList"
:key="index"
>
<div class="tag" v-for="(item, index) in box2DetailInfo.elemetList" :key="index">
{{ item }}
</div>
</div>
<div class="content">{{ box2DataList[box2LeftActiveIndex].content }}</div>
<div class="content">{{ box2DetailInfo.describe }}</div>
<div class="area-box">
<div
class="area"
v-for="(item, index) in box2DataList[box2LeftActiveIndex].areaList"
:key="index"
>
{{ item.name }}
<div class="area" v-for="(item, index) in box2DetailInfo.areaList" :key="index">
{{ item }}
</div>
</div>
<div class="footer">
{{
`${box2DataList[box2LeftActiveIndex].time} · ${box2DataList[box2LeftActiveIndex].org} · ${box2DataList[box2LeftActiveIndex].type}`
}}
{{ `${box2DetailInfo?.postDate} · ${box2DetailInfo?.orgNameList?.toString()} · 行政令` }}
</div>
</div>
</div>
......@@ -139,7 +131,7 @@
@click="handleClickBox3Item(index)"
>
<div class="id">{{ index + 1 }}</div>
<div class="text">{{ item.title }}</div>
<div class="text">{{ item.name }}</div>
</div>
</div>
<div class="left-footer">
......@@ -150,34 +142,26 @@
:page-size="box3PageSize"
v-model:current-page="box3CurrentPage"
@current-change="handleGetBox3DataList"
size="small"
:pager-count="6"
/>
</div>
</div>
<div class="right">
<div class="title">{{ box3DataList[box3LeftActiveIndex].title }}</div>
<div class="title">{{ box3DetailInfo.name }}</div>
<div class="tag-box">
<div
class="tag"
v-for="(item, index) in box3DataList[box3LeftActiveIndex].tagList"
:key="index"
>
<div class="tag" v-for="(item, index) in box3DetailInfo.elemetList" :key="index">
{{ item }}
</div>
</div>
<div class="content">{{ box3DataList[box3LeftActiveIndex].content }}</div>
<div class="content">{{ box3DetailInfo.describe }}</div>
<div class="area-box">
<div
class="area"
v-for="(item, index) in box3DataList[box3LeftActiveIndex].areaList"
:key="index"
>
{{ item.name }}
<div class="area" v-for="(item, index) in box3DetailInfo.areaList" :key="index">
{{ item }}
</div>
</div>
<div class="footer">
{{
`${box3DataList[box3LeftActiveIndex].time} · ${box3DataList[box3LeftActiveIndex].org} · ${box3DataList[box3LeftActiveIndex].type}`
}}
{{ `${box3DetailInfo.postDate} · ${box3DetailInfo.orgNameList?.toString()} · 行政令` }}
</div>
</div>
</div>
......@@ -196,369 +180,190 @@
import { onMounted, ref, computed } from "vue";
import setChart from "@/utils/setChart";
import getWordCloudChart from "./uitls/worldCloudChart";
import {
getElementCount,
getNewDynamics,
getElementSuppress,
getKeyWordUp,
getElementDevelop,
getKeyWordDown,
getOrderInfo
} from "@/api/zmOverview/allElement";
const headerList = ref([
{
name: "科研仪器",
value: 132
},
{
name: "科研机构",
value: 104
},
{
name: "科研人才",
value: 177
},
{
name: "科研数据",
value: 60
},
{
name: "科研经费",
value: 45
}
]);
// 全要素统计
const headerList = ref([]);
const handleGetHeaderList = async () => {
try {
const res = await getElementCount();
console.log("全要素统计", res);
if (res.code === 200 && res.data) {
headerList.value = res.data;
}
} catch (error) {}
};
// 最新动态
const box1DataList = ref([
{
title: '更新"中国涉军企业清单"(NS-CMIC List)',
content: "国防部新增多家中国高科技实体至清单,依据法律禁止美国人士对其进行投资。",
tagList: ["科研机构", "科研经费"],
time: "2025年12月18日",
areaList: [
{
name: "量子科技"
},
{
name: "量子科技"
}
]
},
{
title: '更新"中国涉军企业清单"(NS-CMIC List)',
content: "国防部新增多家中国高科技实体至清单,依据法律禁止美国人士对其进行投资。",
tagList: ["科研机构", "科研经费"],
time: "2025年12月18日",
areaList: [
{
name: "量子科技"
},
{
name: "量子科技"
}
]
},
{
title: '更新"中国涉军企业清单"(NS-CMIC List)',
content: "国防部新增多家中国高科技实体至清单,依据法律禁止美国人士对其进行投资。",
tagList: ["科研机构", "科研经费"],
time: "2025年12月18日",
areaList: [
{
name: "量子科技"
},
{
name: "量子科技"
}
]
},
{
title: '更新"中国涉军企业清单"(NS-CMIC List)',
content: "国防部新增多家中国高科技实体至清单,依据法律禁止美国人士对其进行投资。",
tagList: ["科研机构", "科研经费"],
time: "2025年12月18日",
areaList: [
{
name: "量子科技"
},
{
name: "量子科技"
}
]
}
// {
// title: '更新"中国涉军企业清单"(NS-CMIC List)',
// content: "国防部新增多家中国高科技实体至清单,依据法律禁止美国人士对其进行投资。",
// tagList: ["科研机构", "科研经费"],
// time: "2025年12月18日",
// areaList: [
// {
// name: "量子科技"
// },
// {
// name: "量子科技"
// }
// ]
// }
]);
const handleGetBox1Data = async () => {
try {
const res = await getNewDynamics();
console.log("最新动态", res);
if (res.code === 200 && res.data) {
box1DataList.value = res.data;
}
} catch (error) {}
};
const box2DataList = ref([
{
title: "防止受关注国家访问美国敏感数据的规定",
tagList: ["科研机构", "科研经费"],
content:
'美国司法部发布最终规则,明确禁止将"美国人"的敏感个人数据(包括基因组、生物识别、健康、地理位置及财务数据)大规模交易给中国等"受关注国家"的实体与个人。此规定旨在防止...',
areaList: [
{
name: "人工智能"
},
{
name: "生物科技"
}
],
time: "2025年12月18日",
org: "司法部",
type: "行政令"
},
{
title: "防止受关注国家访问美国敏感数据的规定2",
tagList: ["科研机构", "科研经费"],
content:
'美国司法部发布最终规则,明确禁止将"美国人"的敏感个人数据(包括基因组、生物识别、健康、地理位置及财务数据)大规模交易给中国等"受关注国家"的实体与个人。此规定旨在防止...',
areaList: [
{
name: "人工智能"
},
{
name: "生物科技"
}
],
time: "2025年12月18日",
org: "司法部",
type: "行政令"
},
{
title: "防止受关注国家访问美国敏感数据的规定3",
tagList: ["科研机构", "科研经费"],
content:
'美国司法部发布最终规则,明确禁止将"美国人"的敏感个人数据(包括基因组、生物识别、健康、地理位置及财务数据)大规模交易给中国等"受关注国家"的实体与个人。此规定旨在防止...',
areaList: [
{
name: "人工智能"
},
{
name: "生物科技"
}
],
time: "2025年12月18日",
org: "司法部",
type: "行政令"
},
{
title: "防止受关注国家访问美国敏感数据的规定4",
tagList: ["科研机构", "科研经费"],
content:
'美国司法部发布最终规则,明确禁止将"美国人"的敏感个人数据(包括基因组、生物识别、健康、地理位置及财务数据)大规模交易给中国等"受关注国家"的实体与个人。此规定旨在防止...',
areaList: [
{
name: "人工智能"
},
{
name: "生物科技"
}
],
time: "2025年12月18日",
org: "司法部",
type: "行政令"
},
{
title: "防止受关注国家访问美国敏感数据的规定5",
tagList: ["科研机构", "科研经费"],
content:
'美国司法部发布最终规则,明确禁止将"美国人"的敏感个人数据(包括基因组、生物识别、健康、地理位置及财务数据)大规模交易给中国等"受关注国家"的实体与个人。此规定旨在防止...',
areaList: [
{
name: "人工智能"
},
{
name: "生物科技"
}
],
time: "2025年12月18日",
org: "司法部",
type: "行政令"
}
]);
const box2DataList = ref([]);
const box2Total = ref(0);
const box2CurrentPage = ref(1);
const box2PageSize = ref(5);
const box2LeftActiveIndex = ref(0);
const box2DetailInfo = ref({});
// 根据id 获取政令详细信息
const handleGetOrderInfo = async id => {
const params = {
id: id
};
try {
const res = await getOrderInfo(params);
console.log("根据id获取政令详细信息1", res);
if (res.code === 200 && res.data) {
box2DetailInfo.value = res.data;
}
} catch (error) {}
};
const handleGetBox2DataList = async () => {
const params = {
currentPage: box2CurrentPage.value,
pageSize: box2PageSize.value
};
try {
const res = await getElementSuppress(params);
console.log("美对我要素打压情况", res);
if (res.code === 200 && res.data) {
box2DataList.value = res.data.content;
box2Total.value = res.data.totalElements;
handleGetOrderInfo(box2DataList.value[box2LeftActiveIndex.value].id);
}
} catch (error) {}
};
const handleClickBox2Item = index => {
box2LeftActiveIndex.value = index;
handleGetOrderInfo(box2DataList.value[index].id);
};
const box2Total = ref(25);
const box2CurrentPage = ref(1);
const box2PageSize = ref(5);
const handleGetBox2DataList = async () => {};
const box2ChartData = ref([]);
const handleGetBox2ChartData = async () => {
try {
const res = await getKeyWordUp();
console.log("关键词云-上", res);
if (res.code === 200 && res.data) {
box2ChartData.value = res.data.map(item => {
return {
name: item.name,
value: item.count
};
});
}
} catch (error) {}
};
const handleBox2Chart = async () => {
await handleGetBox2ChartData();
let box2Chart = getWordCloudChart(box2ChartData.value);
setChart(box2Chart, "box2Chart");
};
const box2ChartData = ref([
{
name: "限制中国获取能源技术",
value: 35
},
{
name: "加强美国在核能领域得到领导力",
value: 12
},
{
name: "关注核聚变能源研究",
value: 15
},
{
name: "发展风能",
value: 21
},
{
name: "实施能源税收延期",
value: 18
},
{
name: "限制采购中国产电池",
value: 5
},
{
name: "评估中美现代化技术",
value: 11
},
{
name: "应对中国制造2025战略",
value: 9
},
{
name: "抵制外国人才争夺",
value: 16
}
]);
const box3DataList = ref([]);
const box3DataList = ref([
{
title: "防止受关注国家访问美国敏感数据的规定",
tagList: ["科研机构", "科研经费"],
content:
'美国司法部发布最终规则,明确禁止将"美国人"的敏感个人数据(包括基因组、生物识别、健康、地理位置及财务数据)大规模交易给中国等"受关注国家"的实体与个人。此规定旨在防止...',
areaList: [
{
name: "人工智能"
},
{
name: "生物科技"
}
],
time: "2025年12月18日",
org: "司法部",
type: "行政令"
},
{
title: "防止受关注国家访问美国敏感数据的规定2",
tagList: ["科研机构", "科研经费"],
content:
'美国司法部发布最终规则,明确禁止将"美国人"的敏感个人数据(包括基因组、生物识别、健康、地理位置及财务数据)大规模交易给中国等"受关注国家"的实体与个人。此规定旨在防止...',
areaList: [
{
name: "人工智能"
},
{
name: "生物科技"
}
],
time: "2025年12月18日",
org: "司法部",
type: "行政令"
},
{
title: "防止受关注国家访问美国敏感数据的规定3",
tagList: ["科研机构", "科研经费"],
content:
'美国司法部发布最终规则,明确禁止将"美国人"的敏感个人数据(包括基因组、生物识别、健康、地理位置及财务数据)大规模交易给中国等"受关注国家"的实体与个人。此规定旨在防止...',
areaList: [
{
name: "人工智能"
},
{
name: "生物科技"
}
],
time: "2025年12月18日",
org: "司法部",
type: "行政令"
},
{
title: "防止受关注国家访问美国敏感数据的规定4",
tagList: ["科研机构", "科研经费"],
content:
'美国司法部发布最终规则,明确禁止将"美国人"的敏感个人数据(包括基因组、生物识别、健康、地理位置及财务数据)大规模交易给中国等"受关注国家"的实体与个人。此规定旨在防止...',
areaList: [
{
name: "人工智能"
},
{
name: "生物科技"
}
],
time: "2025年12月18日",
org: "司法部",
type: "行政令"
},
{
title: "防止受关注国家访问美国敏感数据的规定5",
tagList: ["科研机构", "科研经费"],
content:
'美国司法部发布最终规则,明确禁止将"美国人"的敏感个人数据(包括基因组、生物识别、健康、地理位置及财务数据)大规模交易给中国等"受关注国家"的实体与个人。此规定旨在防止...',
areaList: [
{
name: "人工智能"
},
{
name: "生物科技"
}
],
time: "2025年12月18日",
org: "司法部",
type: "行政令"
}
]);
const box3Total = ref(0);
const box3CurrentPage = ref(1);
const box3PageSize = ref(5);
const box3LeftActiveIndex = ref(0);
const box3DetailInfo = ref({});
const handleClickBox3Item = index => {
box3LeftActiveIndex.value = index;
// 根据id 获取政令详细信息
const handleGetOrderInfo1 = async id => {
const params = {
id: id
};
try {
const res = await getOrderInfo(params);
console.log("根据id获取政令详细信息1", res);
if (res.code === 200 && res.data) {
box3DetailInfo.value = res.data;
}
} catch (error) {}
};
const box3Total = ref(25);
const box3CurrentPage = ref(1);
const box3PageSize = ref(5);
const handleGetBox3DataList = async () => {};
const handleGetBox3DataList = async () => {
const params = {
currentPage: box3CurrentPage.value,
pageSize: box3PageSize.value
};
try {
const res = await getElementDevelop(params);
console.log("美自身要素发展情况", res);
if (res.code === 200 && res.data) {
box3DataList.value = res.data.content;
box3Total.value = res.data.totalElements;
handleGetOrderInfo1(box3DataList.value[box3LeftActiveIndex.value].id);
}
} catch (error) {}
};
const box3ChartData = ref([
{
name: "限制中国获取能源技术",
value: 35
},
{
name: "加强美国在核能领域得到领导力",
value: 12
},
{
name: "关注核聚变能源研究",
value: 15
},
{
name: "发展风能",
value: 21
},
{
name: "实施能源税收延期",
value: 18
},
{
name: "限制采购中国产电池",
value: 5
},
{
name: "评估中美现代化技术",
value: 11
},
{
name: "应对中国制造2025战略",
value: 9
},
{
name: "抵制外国人才争夺",
value: 16
}
]);
const handleClickBox3Item = index => {
box3LeftActiveIndex.value = index;
handleGetOrderInfo1(box3DataList.value[index].id);
};
onMounted(() => {
let box2Chart = getWordCloudChart(box2ChartData.value);
setChart(box2Chart, "box2Chart");
const box3ChartData = ref([]);
const handleGetBox3ChartData = async () => {
try {
const res = await getKeyWordDown();
console.log("关键词云-下", res);
if (res.code === 200 && res.data) {
box3ChartData.value = res.data.map(item => {
return {
name: item.name,
value: item.count
};
});
}
} catch (error) {}
};
const handleBox3Chart = async () => {
await handleGetBox3ChartData();
let box3Chart = getWordCloudChart(box3ChartData.value);
setChart(box3Chart, "box3Chart");
};
onMounted(() => {
handleGetHeaderList(); // 全要素统计
handleGetBox1Data(); // 最新动态
handleGetBox2DataList(); // 美对我要素打压情况
handleGetBox3DataList(); // 美自身要素发展情况
handleBox2Chart(); // 关键词云-上
handleBox3Chart(); // 关键词云-下
});
</script>
......@@ -733,7 +538,7 @@ onMounted(() => {
width: 388px;
margin-left: 12px;
.title {
height: 30px;
// height: 30px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-style: Bold;
......@@ -755,8 +560,9 @@ onMounted(() => {
}
.tag-box {
margin-top: 4px;
height: 28px;
// height: 28px;
display: flex;
flex-wrap: wrap;
gap: 8px;
.tag {
width: 80px;
......@@ -924,7 +730,8 @@ onMounted(() => {
}
}
.left-footer {
height: 80px;
margin-top: 30px;
height: 60px;
display: flex;
justify-content: center;
align-items: center;
......@@ -932,10 +739,14 @@ onMounted(() => {
}
.right {
width: 320px;
height: 368px;
overflow: hidden;
overflow-y: auto;
.title {
width: 283px;
min-height: 24px;
max-height: 48px;
overflow: hidden;
margin: 16px auto 18px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
......@@ -949,8 +760,9 @@ onMounted(() => {
.tag-box {
width: 283px;
margin: 0 auto;
height: 28px;
// height: 28px;
display: flex;
flex-wrap: wrap;
gap: 8px;
.tag {
height: 28px;
......@@ -972,7 +784,7 @@ onMounted(() => {
margin: 0 auto;
margin-top: 8px;
width: 283px;
height: 150px;
max-height: 170px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-style: Regular;
......@@ -981,13 +793,16 @@ onMounted(() => {
line-height: 30px;
letter-spacing: 0px;
text-align: justify;
overflow: hidden;
overflow-y: auto;
}
.area-box {
width: 283px;
margin: 0 auto;
margin-top: 28px;
height: 24px;
margin-top: 8px;
// height: 24px;
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
gap: 8px;
.area {
......@@ -1160,7 +975,8 @@ onMounted(() => {
}
}
.left-footer {
height: 80px;
margin-top: 30px;
height: 60px;
display: flex;
justify-content: center;
align-items: center;
......@@ -1168,10 +984,14 @@ onMounted(() => {
}
.right {
width: 320px;
height: 368px;
overflow: hidden;
overflow-y: auto;
.title {
width: 283px;
min-height: 24px;
max-height: 48px;
overflow: hidden;
margin: 16px auto 18px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
......@@ -1185,8 +1005,9 @@ onMounted(() => {
.tag-box {
width: 283px;
margin: 0 auto;
height: 28px;
// height: 28px;
display: flex;
flex-wrap: wrap;
gap: 8px;
.tag {
height: 28px;
......@@ -1208,7 +1029,7 @@ onMounted(() => {
margin: 0 auto;
margin-top: 8px;
width: 283px;
height: 150px;
max-height: 170px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-style: Regular;
......@@ -1217,13 +1038,16 @@ onMounted(() => {
line-height: 30px;
letter-spacing: 0px;
text-align: justify;
overflow: hidden;
overflow-y: auto;
}
.area-box {
width: 283px;
margin: 0 auto;
margin-top: 28px;
height: 24px;
margin-top: 8px;
// height: 24px;
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
gap: 8px;
.area {
......
......@@ -86,7 +86,7 @@
</div>
</div> -->
</div>
<div class="main">
<div class="main" v-if="curArea !== '实体清单'">
<div class="item" v-for="(item, index) in searchResults" :key="index" @click="handleToPage(item)">
<div class="item-left" v-if="item.img">
<img :src="item?.img" alt="" />
......@@ -95,7 +95,7 @@
<div class="title" v-html="item?.originalTitle"></div>
<div class="content" v-html="item?.originalDescription"></div>
<div class="item-right-footer">
<div class="time">{{ item?.date }}</div>
<div class="time" v-if="item.date">{{ item?.date }}</div>
<div class="tag tag3">
{{ item?.typeStr }}
</div>
......@@ -103,6 +103,26 @@
</div>
</div>
</div>
<div class="main1" v-if="curArea === '实体清单'">
<div class="item" v-for="(item, index) in searchResults" :key="index" @click="handleToPage(item)">
<div class="main-header">
<div class="title" v-html="item?.originalTitle"></div>
<div class="tag tag3">
{{ item?.typeStr }}
</div>
</div>
<div class="entity-box">
<div class="entity" v-for="val,idx in item.sanctionList" :key="idx">
<div class="icon">
<img src="./assets/images/warning.png" alt="">
</div>
<div class="name">{{ val }}</div>
</div>
</div>
<div class="content" v-html="item?.originalDescription"></div>
<div class="time" v-if="item.date">{{ item?.date }}</div>
</div>
</div>
<div class="footer">
<el-pagination
@current-change="handleChangeCurrentPage"
......@@ -263,10 +283,10 @@ const handleClickDomains = domain => {
};
function highlightText(text, keyword) {
if (!text || !keyword) return text;
const regex = new RegExp(`(${keyword})`, 'gi');
return text.replace(regex, '<span style="color: red; font-weight: bold;">$1</span>');
if (!text || !keyword) return text;
const regex = new RegExp(`(${keyword})`, "gi");
return text.replace(regex, '<span style="color: red; font-weight: bold;">$1</span>');
}
const handleSearch = async () => {
......@@ -300,9 +320,9 @@ const handleSearch = async () => {
}
searchResults.value = res.data.records;
searchResults.value.forEach(item => {
item.originalTitle = highlightText(item.originalTitle, keyword.value)
item.originalDescription = highlightText(item.originalDescription, keyword.value)
})
item.originalTitle = highlightText(item.originalTitle, keyword.value);
item.originalDescription = highlightText(item.originalDescription, keyword.value);
});
totalNum.value = res.data.total;
if (totalNum.value) {
ElMessage.success(`共计搜索到${totalNum.value}条结果`);
......@@ -493,6 +513,19 @@ const handleToAi = () => {
});
window.open(route.href, "_blank");
};
// 跳转公司详情页
const handleCompClick = item => {
console.log("item", item);
window.sessionStorage.setItem('curTabName', item)
const route = router.resolve({
name: "companyPages",
params: {
id: item.entityId
}
});
window.open(route.href, "_blank");
};
</script>
<style lang="scss" scoped>
......@@ -782,7 +815,7 @@ const handleToAi = () => {
.item-right {
// width: 731px;
flex: 1;
margin-left: 12px;
// margin-left: 12px;
.title {
height: 24px;
......@@ -820,9 +853,9 @@ const handleToAi = () => {
line-height: 24px;
letter-spacing: 0px;
text-align: left;
margin-right: 16px;
}
.tag {
margin-left: 16px;
height: 24px;
line-height: 24px;
box-sizing: border-box;
......@@ -848,6 +881,132 @@ const handleToAi = () => {
}
}
}
.main1 {
width: 913px;
margin-top: 36px;
margin-left: 240px;
.item {
width: 913px;
min-height: 108px;
// max-height: 148px;
padding-bottom: 24px;
padding-top: 16px;
border-bottom: 1px solid rgba(234, 236, 238, 1);
cursor: pointer;
// &:hover {
// background: var(--color-bg-hover);
// }
.main-header {
min-height: 24px;
display: flex;
align-items: center;
justify-content: space-between;
.title {
width: 820px;
// height: 24px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-style: Bold;
font-size: 18px;
font-weight: 700;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
.tag {
height: 24px;
line-height: 24px;
box-sizing: border-box;
padding: 0 8px;
border-radius: 4px;
}
.tag1 {
border: 1px solid rgba(255, 204, 199, 1);
background: rgba(255, 241, 240, 1);
color: rgba(255, 77, 79, 1);
}
.tag2 {
color: rgba(250, 173, 20, 1);
border: 1px solid rgba(255, 241, 184, 1);
background: rgba(255, 251, 230, 1);
}
.tag3 {
color: rgba(22, 119, 255, 1);
border: 1px solid rgba(186, 224, 255, 1);
background: rgba(230, 244, 255, 1);
}
}
.entity-box {
margin-top: 12px;
display: flex;
gap: 8px;
flex-wrap: wrap;
.entity {
display: flex;
justify-content: space-between;
gap: 6px;
height: 32px;
line-height: 32px;
padding: 0 12px;
border-radius: 20px;
background: rgba(255, 241, 240, 1);
cursor: pointer;
&:hover{
.name{
font-weight: bold;
}
}
.icon {
width: 12px;
height: 12px;
img {
width: 100%;
height: 100%;
}
}
.name {
margin-top: 4px;
height: 24px;
color: rgba(206, 79, 81, 1);
font-family: Microsoft YaHei;
font-style: Regular;
font-size: 16px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: center;
}
}
}
.content {
margin-top: 10px;
min-height: 0;
// max-height: 48px;
font-family: Microsoft YaHei;
font-size: 16px;
color: rgba(59, 65, 75, 1);
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
overflow: hidden;
}
.time {
margin-top: 10px;
height: 24px;
color: rgba(132, 136, 142, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
margin-right: 16px;
}
}
}
.footer {
width: 913px;
margin-left: 264px;
......
......@@ -948,6 +948,10 @@ const chart1Data = ref({
});
const box5YearList = ref([
{
label: "2026",
value: "2026"
},
{
label: "2025",
value: "2025"
......@@ -969,7 +973,7 @@ const box5YearList = ref([
value: "2021"
}
]);
const box5SelectedYear = ref("2025");
const box5SelectedYear = ref("2026");
const handleGetDecreeYearOrder = async () => {
const params = {
......@@ -1015,6 +1019,10 @@ const chart2Data = ref([
// const colorList = ["#69B1FF", "#FFC069", "#87E8DE", "#85A5FF", "#FF7875", "#B37FEB", "#4096FF"];
const box6YearList = ref([
{
label: "2026",
value: "2026"
},
{
label: "2025",
value: "2025"
......@@ -1036,7 +1044,7 @@ const box6YearList = ref([
value: "2021"
}
]);
const box6SelectedYear = ref("2025");
const box6SelectedYear = ref("2026");
const handleGetDecreeArea = async () => {
const params = {
......@@ -1068,18 +1076,7 @@ const handleBox6YearChange = () => {
};
// 关键行政令
const keyDecreeList = ref([
// {
// title: "关于“对等关税”的行政令",
// time: "2025年4月",
// content: `对所有贸易伙伴设立10%的“最低基准关税”,并对中国商品加征高达34%​​ 的额外关税,使针对中国的总关税水平大幅提升。`
// },
// {
// title: "《美国优先投资政策》备忘录",
// time: "2025年2月",
// content: `将中国列为“外国对手”,系统性收紧中美在半导体、人工智能、量子技术等前沿科技领域的双向投资,构建对华科技封锁体系。`
// },
]);
const keyDecreeList = ref([]);
const handleGetKeyDecree = async () => {
try {
......@@ -1186,6 +1183,7 @@ const handleGetAreaList = async () => {
};
const pubTime = ref([
{ id: "2026", name: "2026年" },
{ id: "2025", name: "2025年" },
{ id: "2024", name: "2024年" },
{ id: "2023", name: "2023年" },
......@@ -1194,30 +1192,11 @@ const pubTime = ref([
{ id: "2020", name: "2020年" }
// { id: "更早时间", name: "更早时间" }
]);
const activePubTime = ref(["2025"]);
const activePubTime = ref(["2026"]);
const totalDecreesNum = ref(0);
const decreeList = ref([
// {
// type: "总统政令",
// status: 1,
// title: "关于进一步延长TikTok执法宽限期的行政令",
// time: "2025年9月16日",
// img: 1,
// desc: "123",
// tagList: ["生物科技"]
// },
// {
// type: "总统政令",
// status: 1,
// title: "为国家安全部署先进核反应堆技术",
// time: "2025年9月16日",
// img: 1,
// desc: "123",
// tagList: ["生物科技"]
// }
]);
const decreeList = ref([]);
const handleGetDecreeOrderList = async () => {
const p0 = checkedGovIns.value.join(",");
......
......@@ -72,7 +72,7 @@ export default defineConfig({
rewrite: (path) => path.replace(/^\/checklistChat/, '')
},
'/temporarySearch': {
target: 'http://106.12.150.59:18826/',
target: 'http://106.12.150.59:8001/',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/temporarySearch/, '')
},
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论