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

update

上级 25776d6b
......@@ -24,7 +24,7 @@ export function getIndustryHyly(params) {
})
}
// 根据行业领域字典列表
// 行业领域字典列表
export function getHylyList() {
return request({
method: 'GET',
......
......@@ -86,7 +86,7 @@
<el-col :span="16">
<custom-container titleType="primary" title="最新投融资限制政策" :titleIcon="houseIcon" height="450px">
<template #header-right>
<el-button type="primary" link @click="handleToDetail">
<el-button type="primary" link>
{{ "查看详情 >" }}
</el-button>
</template>
......@@ -149,7 +149,6 @@
class="box2-main-item"
v-for="(item, index) in warningList"
:key="index"
@click="handleToDetail"
>
<div
class="item-left"
......@@ -518,6 +517,7 @@
<script setup>
import { onMounted, ref, computed } from "vue";
import scrollToTop from "@/utils/scrollToTop";
import setChart from "@/utils/setChart";
import * as echarts from "echarts";
import { DArrowRight, Warning, Search } from "@element-plus/icons-vue";
import EChart from "@/components/Chart/index.vue";
......@@ -587,11 +587,6 @@ const handleBackHome = () => {
});
};
const handleToDetail = () => {
// const route = router.resolve("/exportControl/analysis");
// window.open(route.href, "_blank");
};
// 查看更多风险信号
const handleToMoreRiskSignal = () => {
const route = router.resolve("/riskSignal");
......@@ -1260,63 +1255,6 @@ const handleGetHylyList = async () => {
} 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({
title: [
"2024-09",
......
......@@ -914,8 +914,9 @@ onMounted(() => {});
}
.news-box-title {
height: 48px;
line-height: 24px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 700;
......@@ -936,6 +937,7 @@ onMounted(() => {});
}
.news-box-title-small {
margin-top: 3px;
height: 22px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
......@@ -981,15 +983,18 @@ onMounted(() => {});
background-position: center center;
.talk-title {
width: 40%;
width: 220px;
height: 24px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 700;
line-height: 24px;
letter-spacing: 0px;
letter-spacing: 1px;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
......
......@@ -36,12 +36,12 @@
</div>
</div>
<div class="btn-box">
<div class="btn">
<!-- <div class="btn">
<div class="icon">
<img src="./images/btn-icon1.png" alt="" />
</div>
<div class="text">{{ "查看官网" }}</div>
</div>
</div> -->
<div class="btn">
<div class="icon">
<img src="./images/btn-icon2.png" alt="" />
......@@ -64,7 +64,8 @@
</div>
</div>
<div class="main">
<ReportAnalysis></ReportAnalysis>
<ReportAnalysis v-if="tabActiveName === '报告分析'"></ReportAnalysis>
<PolicyTracking v-else></PolicyTracking>
</div>
</div>
</template>
......@@ -73,6 +74,7 @@
import { ref } from "vue";
import ReportAnalysis from './reportAnalysis/index.vue'
import PolicyTracking from './policyTracking/index.vue'
const tabActiveName = ref("报告分析");
......
......@@ -70,6 +70,28 @@
</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="footer-left">
<img src="@/assets/icons/box-footer-left-icon.png" alt="" />
......@@ -92,6 +114,162 @@
import { ref, onMounted } from "vue";
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>
<style lang="scss" scoped>
......@@ -265,6 +443,102 @@ const areaList = ref(["人工智能", "半导体与高科技", "经济与贸易"
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
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 {
position: absolute;
left: 22px;
......
......@@ -75,7 +75,7 @@
</div>
<div class="right">
<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">
<img :src="item.img" alt="" />
</div>
......@@ -103,6 +103,7 @@
<script setup>
import { ref, reactive, onMounted } from "vue";
import router from "@/router";
import Img1 from "./images/img1.png";
import Img2 from "./images/img2.png";
import Img3 from "./images/img3.png";
......@@ -116,6 +117,14 @@ import Img10 from "./images/img10.png";
import Img11 from "./images/img11.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({
regions: ["north_america"],
types: ["gov"],
......@@ -263,7 +272,6 @@ const yearList = ref([
]);
const selectedYear = ref("近一年发布");
</script>
<style lang="scss" scoped>
......@@ -354,6 +362,12 @@ const selectedYear = ref("近一年发布");
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.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 {
width: 384px;
height: 206px;
......
......@@ -112,7 +112,27 @@
<div class="title">{{ "智库发布" }}</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 class="box2">
<div class="box2-header">
......@@ -459,6 +479,20 @@ import Img10 from "./assets/images/img10.png";
import Img11 from "./assets/images/img11.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 => {
// router.push({ name: "ThinkTankDetail", params: { id: tank.id } });
const curRoute = router.resolve({ name: "ThinkTankDetail", params: { id: tank.id } });
......@@ -729,8 +763,6 @@ const handleClickCate = cate => {
handleGetBillsByType();
};
// 查看更多风险信号
const handleToMoreRiskSignal = () => {
const route = router.resolve("/riskSignal");
......@@ -1051,18 +1083,17 @@ const handleGetThinkTankPolicyIndustryChange = async () => {
try {
const res = await getThinkTankPolicyIndustryChange();
console.log("政策建议趋势分布", res);
if(res.code === 200 && res.data) {
if (res.code === 200 && res.data) {
} else {
box5Data.value = []
box5Data.value = [];
}
} catch (error) {
console.error("获取政策建议趋势分布error", error);
}
};
const handleBox5 = async() => {
await handleGetThinkTankPolicyIndustryChange()
const handleBox5 = async () => {
await handleGetThinkTankPolicyIndustryChange();
let box5Chart = getMultiLineChart(
box5Data.value.title,
box5Data.value.data[0].value,
......@@ -1070,32 +1101,31 @@ const handleBox5 = async() => {
box5Data.value.data[2].value
);
setChart(box5Chart, "box5Chart");
}
};
// 政策建议趋势分布
const handleGetThinkTankPolicyIndustry = async () => {
const params = {
apply: 1,
yaer: box6selectetedYear.value
}
};
try {
const res = await getThinkTankPolicyIndustry(params);
console.log("政策建议领域分布", res);
if(res.code === 200 && res.data) {
if (res.code === 200 && res.data) {
} else {
box6Data.value = []
box6Data.value = [];
}
} catch (error) {
console.error("获取政策建议领域分布error", error);
}
};
const handleBox6 = async() => {
await handleGetThinkTankPolicyIndustry()
const handleBox6 = async () => {
await handleGetThinkTankPolicyIndustry();
const box6Chart = getPieChart(box6Data.value);
setChart(box6Chart, "box6Chart");
}
};
function transformThinkTankData(data) {
const nodes = [];
......@@ -1183,10 +1213,9 @@ const handleBox7 = async () => {
onMounted(async () => {
handleGetThinkTankList();
handleGetThinkTankRiskSignal();
handleBox5()
handleBox6()
handleBox5();
handleBox6();
handleBox7();
});
</script>
......@@ -1583,10 +1612,113 @@ onMounted(async () => {
}
}
.box1-main {
width: 1064px;
height: 354px;
margin-top: 22px;
margin-left: 31px;
margin: 24px auto;
width: 948px;
height: 353px;
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 {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论