提交 912920f8 authored 作者: coderBryanFu's avatar coderBryanFu

update

上级 25776d6b
...@@ -24,7 +24,7 @@ export function getIndustryHyly(params) { ...@@ -24,7 +24,7 @@ export function getIndustryHyly(params) {
}) })
} }
// 根据行业领域字典列表 // 行业领域字典列表
export function getHylyList() { export function getHylyList() {
return request({ return request({
method: 'GET', method: 'GET',
......
...@@ -86,7 +86,7 @@ ...@@ -86,7 +86,7 @@
<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" link @click="handleToDetail"> <el-button type="primary" link>
{{ "查看详情 >" }} {{ "查看详情 >" }}
</el-button> </el-button>
</template> </template>
...@@ -149,7 +149,6 @@ ...@@ -149,7 +149,6 @@
class="box2-main-item" class="box2-main-item"
v-for="(item, index) in warningList" v-for="(item, index) in warningList"
:key="index" :key="index"
@click="handleToDetail"
> >
<div <div
class="item-left" class="item-left"
...@@ -518,6 +517,7 @@ ...@@ -518,6 +517,7 @@
<script setup> <script setup>
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 * as echarts from "echarts"; import * as echarts from "echarts";
import { DArrowRight, Warning, Search } from "@element-plus/icons-vue"; import { DArrowRight, Warning, Search } from "@element-plus/icons-vue";
import EChart from "@/components/Chart/index.vue"; import EChart from "@/components/Chart/index.vue";
...@@ -587,11 +587,6 @@ const handleBackHome = () => { ...@@ -587,11 +587,6 @@ const handleBackHome = () => {
}); });
}; };
const handleToDetail = () => {
// const route = router.resolve("/exportControl/analysis");
// window.open(route.href, "_blank");
};
// 查看更多风险信号 // 查看更多风险信号
const handleToMoreRiskSignal = () => { const handleToMoreRiskSignal = () => {
const route = router.resolve("/riskSignal"); const route = router.resolve("/riskSignal");
...@@ -1260,63 +1255,6 @@ const handleGetHylyList = async () => { ...@@ -1260,63 +1255,6 @@ const handleGetHylyList = async () => {
} catch (error) {} } catch (error) {}
}; };
const handleClickCate = cate => {
console.log(cate);
activeCate.value = cate.hylymc;
activeHylyId.value = cate.hylyid;
handleGetBillsByType();
};
const navList = ref([
{
icon: headerIcon1,
activeIcno: headerIcon1,
name: "首页",
path: "/home"
},
{
icon: headerIcon2,
activeIcno: headerIcon2,
name: "国家",
path: "/country"
},
{
icon: headerIcon3,
activeIcno: headerIcon3,
name: "领域",
path: "/area"
},
{
icon: headerIcon4,
activeIcno: headerIcon4,
name: "要素",
path: "/home"
},
{
icon: headerIcon5,
activeIcno: headerIcon5,
name: "事件",
path: "/home"
}
]);
const activeNavIndex = ref(0);
const handleClickNav = (index, item) => {
activeNavIndex.value = index;
router.push(item.path);
};
// 绘制echarts图表
const setChart = (option, chartId) => {
let chartDom = document.getElementById(chartId);
chartDom.removeAttribute("_echarts_instance_");
let chart = echarts.init(chartDom);
chart.setOption(option);
return chart;
};
const chart1Data = ref({ const chart1Data = ref({
title: [ title: [
"2024-09", "2024-09",
......
...@@ -914,8 +914,9 @@ onMounted(() => {}); ...@@ -914,8 +914,9 @@ onMounted(() => {});
} }
.news-box-title { .news-box-title {
height: 48px;
line-height: 24px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
...@@ -936,6 +937,7 @@ onMounted(() => {}); ...@@ -936,6 +937,7 @@ onMounted(() => {});
} }
.news-box-title-small { .news-box-title-small {
margin-top: 3px;
height: 22px; height: 22px;
color: rgba(95, 101, 108, 1); color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
...@@ -981,15 +983,18 @@ onMounted(() => {}); ...@@ -981,15 +983,18 @@ onMounted(() => {});
background-position: center center; background-position: center center;
.talk-title { .talk-title {
width: 40%; width: 220px;
height: 24px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
line-height: 24px; line-height: 24px;
letter-spacing: 0px; letter-spacing: 1px;
text-align: left; text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
} }
} }
......
...@@ -36,12 +36,12 @@ ...@@ -36,12 +36,12 @@
</div> </div>
</div> </div>
<div class="btn-box"> <div class="btn-box">
<div class="btn"> <!-- <div class="btn">
<div class="icon"> <div class="icon">
<img src="./images/btn-icon1.png" alt="" /> <img src="./images/btn-icon1.png" alt="" />
</div> </div>
<div class="text">{{ "查看官网" }}</div> <div class="text">{{ "查看官网" }}</div>
</div> </div> -->
<div class="btn"> <div class="btn">
<div class="icon"> <div class="icon">
<img src="./images/btn-icon2.png" alt="" /> <img src="./images/btn-icon2.png" alt="" />
...@@ -64,7 +64,8 @@ ...@@ -64,7 +64,8 @@
</div> </div>
</div> </div>
<div class="main"> <div class="main">
<ReportAnalysis></ReportAnalysis> <ReportAnalysis v-if="tabActiveName === '报告分析'"></ReportAnalysis>
<PolicyTracking v-else></PolicyTracking>
</div> </div>
</div> </div>
</template> </template>
...@@ -73,6 +74,7 @@ ...@@ -73,6 +74,7 @@
import { ref } from "vue"; import { ref } from "vue";
import ReportAnalysis from './reportAnalysis/index.vue' import ReportAnalysis from './reportAnalysis/index.vue'
import PolicyTracking from './policyTracking/index.vue'
const tabActiveName = ref("报告分析"); const tabActiveName = ref("报告分析");
......
...@@ -70,6 +70,28 @@ ...@@ -70,6 +70,28 @@
</div> </div>
</div> </div>
</div> </div>
<div class="box3-main">
<div class="box3-main-main">
<div class="box3-item" v-for="(item, index) in majorOpinions" :key="index">
<div class="left">
{{ item.id }}
</div>
<div class="center">
<div class="title">{{ item.title }}</div>
<div class="desc">{{ item.desc }}</div>
</div>
<div class="right">
<div class="tag" v-for="(val, idx) in item.tagList" :key="idx">
{{ val.name }}
</div>
</div>
<div class="more">
<img src="@/assets/icons/open.png" alt="" />
</div>
</div>
</div>
<div class="box3-main-footer"></div>
</div>
<div class="box3-footer"> <div class="box3-footer">
<div class="footer-left"> <div class="footer-left">
<img src="@/assets/icons/box-footer-left-icon.png" alt="" /> <img src="@/assets/icons/box-footer-left-icon.png" alt="" />
...@@ -92,6 +114,162 @@ ...@@ -92,6 +114,162 @@
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
const areaList = ref(["人工智能", "半导体与高科技", "经济与贸易", "地缘政治", "军事与安全", "国际规则与多边体系"]); const areaList = ref(["人工智能", "半导体与高科技", "经济与贸易", "地缘政治", "军事与安全", "国际规则与多边体系"]);
const majorOpinions = ref([
{
id: 1,
title: "我是示例标题",
desc: "我是示例内容",
tagList: [
{
name: "关税",
status: 2
},
{
name: "跨境电商",
status: 1
}
]
},
{
id: 1,
title: "我是示例标题",
desc: "我是示例内容",
tagList: [
{
name: "私有经济",
status: 2
}
]
},
{
id: 1,
title: "我是示例标题",
desc: "我是示例内容",
tagList: [
{
name: "半导体",
status: 4
}
]
},
{
id: 1,
title: "我是示例标题",
desc: "我是示例内容",
tagList: [
{
name: "关税",
status: 2
},
{
name: "跨境电商",
status: 1
}
]
},
{
id: 1,
title: "我是示例标题",
desc: "我是示例内容",
tagList: [
{
name: "关税",
status: 2
},
{
name: "跨境电商",
status: 1
}
]
},
{
id: 1,
title: "我是示例标题",
desc: "我是示例内容",
tagList: [
{
name: "关税",
status: 2
},
{
name: "跨境电商",
status: 1
}
]
},
{
id: 1,
title: "我是示例标题",
desc: "我是示例内容",
tagList: [
{
name: "产业脱钩",
status: 6
}
]
},
{
id: 1,
title: "我是示例标题",
desc: "我是示例内容",
tagList: [
{
name: "关税",
status: 2
},
{
name: "跨境电商",
status: 1
}
]
},
{
id: 1,
title: "我是示例标题",
desc: "我是示例内容",
tagList: [
{
name: "关税",
status: 2
},
{
name: "跨境电商",
status: 1
}
]
},
{
id: 1,
title: "我是示例标题",
desc: "我是示例内容",
tagList: [
{
name: "关税",
status: 2
},
{
name: "跨境电商",
status: 1
}
]
},
{
id: 1,
title: "我是示例标题",
desc: "我是示例内容",
tagList: [
{
name: "关税",
status: 2
},
{
name: "跨境电商",
status: 1
}
]
}
]);
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -265,6 +443,102 @@ const areaList = ref(["人工智能", "半导体与高科技", "经济与贸易" ...@@ -265,6 +443,102 @@ const areaList = ref(["人工智能", "半导体与高科技", "经济与贸易"
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1); box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
position: relative; position: relative;
.box3-main {
width: 1057px;
height: 780px;
margin: 0 auto;
.box3-main-main {
height: 720px;
.box3-item {
width: 1057px;
height: 72px;
box-sizing: border-box;
border-radius: 4px;
display: flex;
position: relative;
.left {
margin-top: 24px;
margin-left: 15px;
width: 24px;
height: 24px;
border-radius: 12px;
line-height: 24px;
text-align: center;
background: rgba(231, 243, 255, 1);
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-size: 12px;
font-weight: 400;
letter-spacing: 0px;
}
.center {
width: 770px;
margin-left: 13px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
.title {
margin-top: 12px;
height: 26px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 700;
line-height: 26px;
letter-spacing: 0px;
text-align: left;
}
.desc {
height: 22px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 400;
line-height: 22px;
letter-spacing: 0px;
text-align: left;
}
}
.right {
margin-top: 26px;
width: 180px;
height: 22px;
display: flex;
gap: 8px;
justify-content: flex-end;
.tag {
height: 22px;
padding: 0 8px;
box-sizing: border-box;
border: 1px solid rgba(217, 247, 190, 1);
border-radius: 4px;
background: rgba(246, 255, 237, 1);
color: rgba(82, 196, 26, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 400;
line-height: 20px;
}
}
.more {
width: 16px;
height: 16px;
position: absolute;
top: 28px;
right: 20px;
img {
width: 100%;
height: 100%;
}
}
}
.box3-item:nth-child(2n-1) {
border-bottom: 1px solid rgba(234, 236, 238, 1);
border-top: 1px solid rgba(234, 236, 238, 1);
background: rgba(247, 248, 249, 1);
}
}
}
.box3-footer { .box3-footer {
position: absolute; position: absolute;
left: 22px; left: 22px;
......
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
</div> </div>
<div class="right"> <div class="right">
<div class="card-box"> <div class="card-box">
<div class="footer-card" v-for="(item, index) in curFooterList" :key="index"> <div class="footer-card" v-for="(item, index) in curFooterList" :key="index" @click="handleToReportDetail()">
<div class="footer-card-top"> <div class="footer-card-top">
<img :src="item.img" alt="" /> <img :src="item.img" alt="" />
</div> </div>
...@@ -103,6 +103,7 @@ ...@@ -103,6 +103,7 @@
<script setup> <script setup>
import { ref, reactive, onMounted } from "vue"; import { ref, reactive, onMounted } from "vue";
import router from "@/router";
import Img1 from "./images/img1.png"; import Img1 from "./images/img1.png";
import Img2 from "./images/img2.png"; import Img2 from "./images/img2.png";
import Img3 from "./images/img3.png"; import Img3 from "./images/img3.png";
...@@ -116,6 +117,14 @@ import Img10 from "./images/img10.png"; ...@@ -116,6 +117,14 @@ import Img10 from "./images/img10.png";
import Img11 from "./images/img11.png"; import Img11 from "./images/img11.png";
import Img12 from "./images/img12.png"; import Img12 from "./images/img12.png";
const handleToReportDetail = () => {
const route = router.resolve({
path: "/thinkTank/report/1",
});
window.open(route.href, "_blank");
}
const activeFilters = reactive({ const activeFilters = reactive({
regions: ["north_america"], regions: ["north_america"],
types: ["gov"], types: ["gov"],
...@@ -263,7 +272,6 @@ const yearList = ref([ ...@@ -263,7 +272,6 @@ const yearList = ref([
]); ]);
const selectedYear = ref("近一年发布"); const selectedYear = ref("近一年发布");
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -354,6 +362,12 @@ const selectedYear = ref("近一年发布"); ...@@ -354,6 +362,12 @@ const selectedYear = ref("近一年发布");
border-radius: 10px; border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1); box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
transition: transform 0.3s ease, box-shadow 0.3s ease;
&:hover {
transform: translateY(-3px);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
}
cursor: pointer;
.footer-card-top { .footer-card-top {
width: 384px; width: 384px;
height: 206px; height: 206px;
......
...@@ -112,7 +112,27 @@ ...@@ -112,7 +112,27 @@
<div class="title">{{ "智库发布" }}</div> <div class="title">{{ "智库发布" }}</div>
</div> </div>
</div> </div>
<div class="box1-main"></div> <div class="box1-main">
<div class="box1-main-left">
<img :src="box1Data.img" alt="" />
</div>
<div class="box1-main-right">
<div class="title">{{ box1Data.title }}</div>
<div class="tag-box">
<div class="tag" v-for="(item, index) in box1Data.tagList" :key="index">{{ item }}</div>
</div>
<div class="content">{{ box1Data.content }}</div>
<div class="box1-right-footer">
<div class="time">{{ box1Data.time }}</div>
<div class="name">
<div class="logo">
<img :src="box1Data.logo" alt="" />
</div>
<div class="text">{{ box1Data.from }}</div>
</div>
</div>
</div>
</div>
</div> </div>
<div class="box2"> <div class="box2">
<div class="box2-header"> <div class="box2-header">
...@@ -459,6 +479,20 @@ import Img10 from "./assets/images/img10.png"; ...@@ -459,6 +479,20 @@ import Img10 from "./assets/images/img10.png";
import Img11 from "./assets/images/img11.png"; import Img11 from "./assets/images/img11.png";
import Img12 from "./assets/images/img12.png"; import Img12 from "./assets/images/img12.png";
import Box1Img from "./assets/images/box1-img.png";
import Box1Logo from "./assets/images/box1-logo.png";
// 智库发布
const box1Data = ref({
img: Box1Img,
title: "中美经济竞争:复杂经济和地缘政治关系中的收益和风险",
tagList: ["外交", "军事", "经济"],
content: `自2017年以来,美中竞争,包括经济竞争,已成为美国外交政策的定义。这两个经济体是世界上第一和第二大国家经济体,彼此紧密交织。无论多么必要的关系变化,都可能付出高昂代价。因此,美国面临着在双重战略竞争条件下确保其经济满足国家需求的挑战。为应对这一挑战,兰德研究人员对美中竞争进行了经济和制度分析,开展了参与式前瞻性研究,以理解确保美国经济健全发展`,
time: "2025年9月16日",
from: "兰德科技智库",
logo: Box1Logo
});
const handleClick = tank => { const handleClick = tank => {
// router.push({ name: "ThinkTankDetail", params: { id: tank.id } }); // router.push({ name: "ThinkTankDetail", params: { id: tank.id } });
const curRoute = router.resolve({ name: "ThinkTankDetail", params: { id: tank.id } }); const curRoute = router.resolve({ name: "ThinkTankDetail", params: { id: tank.id } });
...@@ -729,8 +763,6 @@ const handleClickCate = cate => { ...@@ -729,8 +763,6 @@ const handleClickCate = cate => {
handleGetBillsByType(); handleGetBillsByType();
}; };
// 查看更多风险信号 // 查看更多风险信号
const handleToMoreRiskSignal = () => { const handleToMoreRiskSignal = () => {
const route = router.resolve("/riskSignal"); const route = router.resolve("/riskSignal");
...@@ -1051,18 +1083,17 @@ const handleGetThinkTankPolicyIndustryChange = async () => { ...@@ -1051,18 +1083,17 @@ const handleGetThinkTankPolicyIndustryChange = async () => {
try { try {
const res = await getThinkTankPolicyIndustryChange(); const res = await getThinkTankPolicyIndustryChange();
console.log("政策建议趋势分布", res); console.log("政策建议趋势分布", res);
if(res.code === 200 && res.data) { if (res.code === 200 && res.data) {
} else { } else {
box5Data.value = [] box5Data.value = [];
} }
} catch (error) { } catch (error) {
console.error("获取政策建议趋势分布error", error); console.error("获取政策建议趋势分布error", error);
} }
}; };
const handleBox5 = async() => { const handleBox5 = async () => {
await handleGetThinkTankPolicyIndustryChange() await handleGetThinkTankPolicyIndustryChange();
let box5Chart = getMultiLineChart( let box5Chart = getMultiLineChart(
box5Data.value.title, box5Data.value.title,
box5Data.value.data[0].value, box5Data.value.data[0].value,
...@@ -1070,32 +1101,31 @@ const handleBox5 = async() => { ...@@ -1070,32 +1101,31 @@ const handleBox5 = async() => {
box5Data.value.data[2].value box5Data.value.data[2].value
); );
setChart(box5Chart, "box5Chart"); setChart(box5Chart, "box5Chart");
} };
// 政策建议趋势分布 // 政策建议趋势分布
const handleGetThinkTankPolicyIndustry = async () => { const handleGetThinkTankPolicyIndustry = async () => {
const params = { const params = {
apply: 1, apply: 1,
yaer: box6selectetedYear.value yaer: box6selectetedYear.value
} };
try { try {
const res = await getThinkTankPolicyIndustry(params); const res = await getThinkTankPolicyIndustry(params);
console.log("政策建议领域分布", res); console.log("政策建议领域分布", res);
if(res.code === 200 && res.data) { if (res.code === 200 && res.data) {
} else { } else {
box6Data.value = [] box6Data.value = [];
} }
} catch (error) { } catch (error) {
console.error("获取政策建议领域分布error", error); console.error("获取政策建议领域分布error", error);
} }
}; };
const handleBox6 = async() => { const handleBox6 = async () => {
await handleGetThinkTankPolicyIndustry() await handleGetThinkTankPolicyIndustry();
const box6Chart = getPieChart(box6Data.value); const box6Chart = getPieChart(box6Data.value);
setChart(box6Chart, "box6Chart"); setChart(box6Chart, "box6Chart");
} };
function transformThinkTankData(data) { function transformThinkTankData(data) {
const nodes = []; const nodes = [];
...@@ -1183,10 +1213,9 @@ const handleBox7 = async () => { ...@@ -1183,10 +1213,9 @@ const handleBox7 = async () => {
onMounted(async () => { onMounted(async () => {
handleGetThinkTankList(); handleGetThinkTankList();
handleGetThinkTankRiskSignal(); handleGetThinkTankRiskSignal();
handleBox5() handleBox5();
handleBox6() handleBox6();
handleBox7(); handleBox7();
}); });
</script> </script>
...@@ -1583,10 +1612,113 @@ onMounted(async () => { ...@@ -1583,10 +1612,113 @@ onMounted(async () => {
} }
} }
.box1-main { .box1-main {
width: 1064px; margin: 24px auto;
height: 354px; width: 948px;
margin-top: 22px; height: 353px;
margin-left: 31px; display: flex;
gap: 28px;
.box1-main-left {
width: 458px;
height: 353px;
border-radius: 4px;
img {
width: 100%;
height: 100%;
}
}
.box1-main-right {
width: 462px;
.title {
width: 462px;
max-height: 52px;
overflow: hidden;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 700;
line-height: 26px;
letter-spacing: 0px;
text-align: left;
}
.tag-box {
width: 462px;
height: 26px;
overflow: hidden;
margin-top: 16px;
display: flex;
gap: 8px;
.tag {
height: 26px;
padding: 0 8px;
box-sizing: border-box;
border: 1px solid rgba(231, 243, 255, 1);
border-radius: 4px;
background: rgba(246, 250, 255, 1);
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
}
.content {
margin-top: 17px;
width: 462px;
height: 183px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 30px;
letter-spacing: 0px;
text-align: justify;
display: -webkit-box;
-webkit-line-clamp: 6; /* 限制行数为5 */
-webkit-box-orient: vertical;
overflow: hidden;
}
.box1-right-footer {
margin-top: 31px;
display: flex;
justify-content: space-between;
.time {
height: 24px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
.name {
display: flex;
justify-content: flex-end;
gap: 6px;
.logo {
margin-top: 5px;
width: 16px;
height: 16px;
img {
width: 100%;
height: 100%;
}
}
.text {
height: 24px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: right;
}
}
}
}
} }
} }
.box2 { .box2 {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论