提交 1dfb6405 authored 作者: huhuiqing's avatar huhuiqing

政策追踪

上级 0bceced4
...@@ -190,3 +190,51 @@ export function getThinkTankPerson(params) { ...@@ -190,3 +190,51 @@ export function getThinkTankPerson(params) {
url: `/api/thinkTankInfo/person/${params}`, url: `/api/thinkTankInfo/person/${params}`,
}) })
} }
//获取报告内容摘要
export function getThinkTankReportAbstract(params) {
return request({
method: 'GET',
url: `/api/thinkTankReport/abstract/${params}`,
})
}
//获取报告主要观点
export function getThinkTankReportContent(params) {
return request({
method: 'GET',
url: `/api/thinkTankReport/content/${params}`,
})
}
//获取涉及科技领域
export function getThinkTankReportIndustry(params) {
return request({
method: 'GET',
url: `/api/thinkTankReport/industry/${'Rand_RRA3572-1'}`,
})
}
//获取科技领域词云
export function getThinkTankReportIndustryCloud(params) {
return request({
method: 'GET',
url: `/api/thinkTankReport/industry/${params.id}/${params.industryId}`,
})
}
//获取政策建议落实情况
export function getThinkTankReportPolicy(params) {
return request({
method: 'GET',
url: `/api/thinkTankReport/policy/${params}`,
})
}
//获取相关政策动态
export function getThinkTankReportPolicyAction(params) {
return request({
method: 'GET',
url: `/api/thinkTankReport/policyAction/${params}`,
})
}
...@@ -86,7 +86,8 @@ const switchTab = name => { ...@@ -86,7 +86,8 @@ const switchTab = name => {
<style lang="scss" scoped> <style lang="scss" scoped>
.wrap { .wrap {
width: 1920px; width: 1920px;
height: 984px; // height: 984px;
.header { .header {
width: 1920px; width: 1920px;
height: 188px; height: 188px;
...@@ -95,12 +96,14 @@ const switchTab = name => { ...@@ -95,12 +96,14 @@ const switchTab = name => {
border-top: 1px solid rgba(234, 236, 238, 1); border-top: 1px solid rgba(234, 236, 238, 1);
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);
.header-top { .header-top {
margin-top: 20px; margin-top: 20px;
margin-left: 248px; margin-left: 248px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-right: 160px; margin-right: 160px;
.header-top-left { .header-top-left {
.title { .title {
height: 26px; height: 26px;
...@@ -112,6 +115,7 @@ const switchTab = name => { ...@@ -112,6 +115,7 @@ const switchTab = name => {
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
} }
.en-title { .en-title {
height: 24px; height: 24px;
color: rgba(95, 101, 108, 1); color: rgba(95, 101, 108, 1);
...@@ -122,10 +126,12 @@ const switchTab = name => { ...@@ -122,10 +126,12 @@ const switchTab = name => {
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
} }
.tag-box { .tag-box {
margin-top: 11px; margin-top: 11px;
display: flex; display: flex;
gap: 8px; gap: 8px;
.tag { .tag {
height: 26px; height: 26px;
padding: 0 8px; padding: 0 8px;
...@@ -143,6 +149,7 @@ const switchTab = name => { ...@@ -143,6 +149,7 @@ const switchTab = name => {
} }
} }
} }
.header-top-right { .header-top-right {
.name { .name {
height: 24px; height: 24px;
...@@ -154,6 +161,7 @@ const switchTab = name => { ...@@ -154,6 +161,7 @@ const switchTab = name => {
letter-spacing: 0px; letter-spacing: 0px;
text-align: right; text-align: right;
} }
.time { .time {
height: 24px; height: 24px;
margin-top: 5px; margin-top: 5px;
...@@ -167,6 +175,7 @@ const switchTab = name => { ...@@ -167,6 +175,7 @@ const switchTab = name => {
} }
} }
} }
.header-bottom { .header-bottom {
margin: 0 auto; margin: 0 auto;
margin-top: 30px; margin-top: 30px;
...@@ -174,13 +183,15 @@ const switchTab = name => { ...@@ -174,13 +183,15 @@ const switchTab = name => {
height: 48px; height: 48px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.tab-box { .tab-box {
width: 224px; width: 224px;
height: 48px; height: 48px;
display: flex; display: flex;
gap: 24px; gap: 24px;
.tab { .tab {
width: 92px; width: 94px;
height: 48px; height: 48px;
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -188,14 +199,17 @@ const switchTab = name => { ...@@ -188,14 +199,17 @@ const switchTab = name => {
gap: 4px; gap: 4px;
cursor: pointer; cursor: pointer;
border-bottom: 2px solid transparent; border-bottom: 2px solid transparent;
.icon { .icon {
width: 16px; width: 16px;
height: 16px; height: 16px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.text { .text {
height: 24px; height: 24px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
...@@ -204,18 +218,22 @@ const switchTab = name => { ...@@ -204,18 +218,22 @@ const switchTab = name => {
font-weight: 400; font-weight: 400;
line-height: 24px; line-height: 24px;
} }
.textActive { .textActive {
color: rgba(5, 95, 194, 1); color: rgba(5, 95, 194, 1);
font-weight: 700; font-weight: 700;
} }
} }
.tabActive { .tabActive {
border-bottom: 2px solid rgba(5, 95, 194, 1); border-bottom: 2px solid rgba(5, 95, 194, 1);
} }
} }
.btn-box { .btn-box {
display: flex; display: flex;
gap: 12px; gap: 12px;
.btn { .btn {
width: 120px; width: 120px;
height: 36px; height: 36px;
...@@ -227,16 +245,19 @@ const switchTab = name => { ...@@ -227,16 +245,19 @@ const switchTab = name => {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
gap: 8px; gap: 8px;
.icon { .icon {
width: 16px; width: 16px;
height: 16px; height: 16px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.text { .text {
width: 64px; width: 66px;
height: 22px; height: 22px;
color: rgba(95, 101, 108, 1); color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
...@@ -247,17 +268,20 @@ const switchTab = name => { ...@@ -247,17 +268,20 @@ const switchTab = name => {
text-align: center; text-align: center;
} }
} }
.btn1 { .btn1 {
border-radius: 6px; border-radius: 6px;
background: var(--color-main-active); background: var(--color-main-active);
.text{
color: rgba(255,255,255,1); .text {
color: rgba(255, 255, 255, 1);
} }
} }
} }
} }
} }
.main{
.main {
width: 100%; width: 100%;
} }
} }
......
...@@ -17,10 +17,10 @@ ...@@ -17,10 +17,10 @@
<div class="box1-main"> <div class="box1-main">
<div class="box1-item" v-for="(item, index) in box1Data" :key="index"> <div class="box1-item" v-for="(item, index) in box1Data" :key="index">
<div class="left"> <div class="left">
{{ item.id }} {{ index + 1 }}
</div> </div>
<div class="center"> <div class="center">
<div class="title">{{ item.title }}</div> <div class="title">{{ item.content }}</div>
<div class="tag-box"> <div class="tag-box">
<div class="tag" v-for="(val, idx) in item.tagList" :key="idx"> <div class="tag" v-for="(val, idx) in item.tagList" :key="idx">
{{ val }} {{ val }}
...@@ -28,8 +28,15 @@ ...@@ -28,8 +28,15 @@
</div> </div>
<div class="file-box"> <div class="file-box">
<div class="file-item" v-for="(vall, idxx) in item.fileList" :key="idxx"> <div class="file-item" v-for="(vall, idxx) in item.fileList" :key="idxx">
<div class="file-item-left">{{ vall.type }}</div> <div class="file-item-left">法案</div>
<div class="file-item-center">{{ vall.name }}</div> <div class="file-item-center">{{ vall.relationBillsList }}</div>
<div class="file-item-right">
<img src="@/assets/images/icon-right-circle.png" alt="" />
</div>
</div>
<div class="file-item" v-for="(vall, idxx) in item.fileList" :key="idxx">
<div class="file-item-left">政令</div>
<div class="file-item-center">{{ vall.relationAdList }}</div>
<div class="file-item-right"> <div class="file-item-right">
<img src="@/assets/images/icon-right-circle.png" alt="" /> <img src="@/assets/images/icon-right-circle.png" alt="" />
</div> </div>
...@@ -46,14 +53,7 @@ ...@@ -46,14 +53,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="box1-footer">
<div class="info">
{{ `共105项调查` }}
</div>
<div class="page-box">
<el-pagination :page-size="10" background layout="prev, pager, next" :total="120" />
</div>
</div>
</div> </div>
</div> </div>
...@@ -79,13 +79,13 @@ ...@@ -79,13 +79,13 @@
<div class="line" v-if="index < 5"></div> <div class="line" v-if="index < 5"></div>
</div> </div>
<div class="box2-item-center"> <div class="box2-item-center">
<div class="title">{{ item.title }}</div> <div class="title">{{ item.sjbt }}</div>
<div class="content">{{ item.content }}</div> <div class="content">{{ item.sjnr }}</div>
</div> </div>
<div class="box2-item-right"> <div class="box2-item-right">
<div class="time">{{ item.time }}</div> <div class="time">{{ item.time }}</div>
<div class="img-box"> <div class="img-box">
<img :src="item.img" alt="" /> <img :src="item.imageUrl" alt="" />
</div> </div>
</div> </div>
</div> </div>
...@@ -102,7 +102,12 @@ ...@@ -102,7 +102,12 @@
<script setup> <script setup>
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
import {
getThinkTankReportPolicy,
getThinkTankReportPolicyAction
} from "@/api/thinkTank/overview";
import { useRouter } from "vue-router";
const router = useRouter();
// 政策建议落实情况 // 政策建议落实情况
const box1Data = ref([ const box1Data = ref([
{ {
...@@ -257,6 +262,19 @@ const box1Data = ref([ ...@@ -257,6 +262,19 @@ const box1Data = ref([
} }
]); ]);
const handleGetThinkTankReportPolicy = async () => {
try {
const res = await getThinkTankReportPolicy(router.currentRoute._value.params.id);
console.log("政策建议落实情况", res);
if (res.code === 200 && res.data) {
box1Data.value = res.data
}
} catch (error) {
console.error("获取政策建议落实情况rror", error);
}
};
// 相关政策动态 // 相关政策动态
const box2Data = ref([ const box2Data = ref([
{ {
...@@ -296,6 +314,24 @@ const box2Data = ref([ ...@@ -296,6 +314,24 @@ const box2Data = ref([
img: 1 img: 1
} }
]); ]);
const handleGetThinkTankReportPolicyAction = async () => {
try {
const res = await getThinkTankReportPolicyAction(router.currentRoute._value.params.id);
console.log("相关政策动态", res);
if (res.code === 200 && res.data) {
box2Data.value = res.data
}
} catch (error) {
console.error("获取相关政策动态rror", error);
}
};
onMounted(async () => {
handleGetThinkTankReportPolicy()
handleGetThinkTankReportPolicyAction()
});
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -303,11 +339,14 @@ const box2Data = ref([ ...@@ -303,11 +339,14 @@ const box2Data = ref([
display: flex; display: flex;
justify-content: center; justify-content: center;
gap: 16px; gap: 16px;
height: 100%;
.box-header { .box-header {
width: 100%; width: 100%;
height: 50px; height: 50px;
display: flex; display: flex;
position: relative; position: relative;
.header-left { .header-left {
margin-top: 18px; margin-top: 18px;
width: 8px; width: 8px;
...@@ -315,6 +354,7 @@ const box2Data = ref([ ...@@ -315,6 +354,7 @@ const box2Data = ref([
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: var(--color-main-active); background: var(--color-main-active);
} }
.title { .title {
margin-left: 14px; margin-left: 14px;
margin-top: 14px; margin-top: 14px;
...@@ -325,6 +365,7 @@ const box2Data = ref([ ...@@ -325,6 +365,7 @@ const box2Data = ref([
font-size: 20px; font-size: 20px;
font-weight: 700; font-weight: 700;
} }
.header-btn-box { .header-btn-box {
position: absolute; position: absolute;
top: 15px; top: 15px;
...@@ -332,6 +373,7 @@ const box2Data = ref([ ...@@ -332,6 +373,7 @@ const box2Data = ref([
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
gap: 8px; gap: 8px;
.btn { .btn {
height: 28px; height: 28px;
padding: 0 8px; padding: 0 8px;
...@@ -345,11 +387,13 @@ const box2Data = ref([ ...@@ -345,11 +387,13 @@ const box2Data = ref([
font-weight: 400; font-weight: 400;
line-height: 28px; line-height: 28px;
} }
.btnActive { .btnActive {
color: var(--color-main-active); color: var(--color-main-active);
border: 1px solid var(--color-main-active); border: 1px solid var(--color-main-active);
} }
} }
.header-right { .header-right {
position: absolute; position: absolute;
top: 14px; top: 14px;
...@@ -357,9 +401,11 @@ const box2Data = ref([ ...@@ -357,9 +401,11 @@ const box2Data = ref([
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
gap: 4px; gap: 4px;
.icon { .icon {
width: 28px; width: 28px;
height: 28px; height: 28px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -367,26 +413,32 @@ const box2Data = ref([ ...@@ -367,26 +413,32 @@ const box2Data = ref([
} }
} }
} }
.left { .left {
height: 1442px; height: 100%;
.box1 { .box1 {
margin-top: 16px; margin-top: 16px;
width: 1104px; width: 1104px;
height: 1405px; height: 100%;
margin-bottom: 16px; margin-bottom: 16px;
border: 1px solid rgba(234, 236, 238, 1); border: 1px solid rgba(234, 236, 238, 1);
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);
.box1-main { .box1-main {
width: 1056px; width: 1056px;
height: 1280px; height: 1280px;
margin: 0 auto; margin: 0 auto;
overflow: auto;
.box1-item { .box1-item {
height: 128px; height: 128px;
border-bottom: 1px solid rgba(234, 236, 238, 1); border-bottom: 1px solid rgba(234, 236, 238, 1);
display: flex; display: flex;
position: relative; position: relative;
.left { .left {
width: 28px; width: 28px;
height: 28px; height: 28px;
...@@ -402,8 +454,10 @@ const box2Data = ref([ ...@@ -402,8 +454,10 @@ const box2Data = ref([
font-weight: 400; font-weight: 400;
letter-spacing: 0px; letter-spacing: 0px;
} }
.center { .center {
margin-left: 18px; margin-left: 18px;
.title { .title {
margin-top: 16px; margin-top: 16px;
height: 24px; height: 24px;
...@@ -415,10 +469,12 @@ const box2Data = ref([ ...@@ -415,10 +469,12 @@ const box2Data = ref([
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
} }
.tag-box { .tag-box {
display: flex; display: flex;
margin-top: 7px; margin-top: 7px;
gap: 8px; gap: 8px;
.tag { .tag {
height: 22px; height: 22px;
padding: 0 8px; padding: 0 8px;
...@@ -435,10 +491,12 @@ const box2Data = ref([ ...@@ -435,10 +491,12 @@ const box2Data = ref([
text-align: left; text-align: left;
} }
} }
.file-box { .file-box {
margin-top: 7px; margin-top: 7px;
display: flex; display: flex;
gap: 8px; gap: 8px;
.file-item { .file-item {
height: 32px; height: 32px;
padding: 0 8px; padding: 0 8px;
...@@ -446,6 +504,7 @@ const box2Data = ref([ ...@@ -446,6 +504,7 @@ const box2Data = ref([
background: rgba(246, 250, 255, 1); background: rgba(246, 250, 255, 1);
display: flex; display: flex;
align-items: center; align-items: center;
.file-item-left { .file-item-left {
height: 22px; height: 22px;
padding: 0 4px; padding: 0 4px;
...@@ -460,6 +519,7 @@ const box2Data = ref([ ...@@ -460,6 +519,7 @@ const box2Data = ref([
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
} }
.file-item-center { .file-item-center {
margin-left: 12px; margin-left: 12px;
color: var(--color-main-active); color: var(--color-main-active);
...@@ -470,10 +530,12 @@ const box2Data = ref([ ...@@ -470,10 +530,12 @@ const box2Data = ref([
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
} }
.file-item-right { .file-item-right {
margin-left: 12px; margin-left: 12px;
width: 20px; width: 20px;
height: 20px; height: 20px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -482,6 +544,7 @@ const box2Data = ref([ ...@@ -482,6 +544,7 @@ const box2Data = ref([
} }
} }
} }
.right { .right {
position: absolute; position: absolute;
top: 16px; top: 16px;
...@@ -491,6 +554,7 @@ const box2Data = ref([ ...@@ -491,6 +554,7 @@ const box2Data = ref([
justify-content: flex-end; justify-content: flex-end;
align-items: center; align-items: center;
gap: 9px; gap: 9px;
.text { .text {
height: 24px; height: 24px;
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
...@@ -501,9 +565,11 @@ const box2Data = ref([ ...@@ -501,9 +565,11 @@ const box2Data = ref([
letter-spacing: 0px; letter-spacing: 0px;
text-align: right; text-align: right;
} }
.icon { .icon {
width: 16px; width: 16px;
height: 16px; height: 16px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -512,12 +578,14 @@ const box2Data = ref([ ...@@ -512,12 +578,14 @@ const box2Data = ref([
} }
} }
} }
.box1-footer { .box1-footer {
height: 50px; height: 50px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
box-sizing: border-box; box-sizing: border-box;
padding: 20px; padding: 20px;
.info { .info {
color: rgba(132, 136, 142, 1); color: rgba(132, 136, 142, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
...@@ -539,24 +607,30 @@ const box2Data = ref([ ...@@ -539,24 +607,30 @@ const box2Data = 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);
.box2-main { .box2-main {
margin: 0 auto; margin: 0 auto;
margin-top: 15px; margin-top: 15px;
width: 459px; width: 459px;
height: 654px; height: 654px;
overflow: hidden;
.box2-item { .box2-item {
height: 109px; height: 109px;
display: flex; display: flex;
.box2-item-left { .box2-item-left {
.point { .point {
margin-left: 14px; margin-left: 14px;
width: 10px; width: 10px;
height: 10px; height: 10px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.line { .line {
width: 2px; width: 2px;
height: 109px; height: 109px;
...@@ -564,8 +638,10 @@ const box2Data = ref([ ...@@ -564,8 +638,10 @@ const box2Data = ref([
margin-left: 18px; margin-left: 18px;
} }
} }
.box2-item-center { .box2-item-center {
margin-left: 11px; margin-left: 11px;
.title { .title {
width: 314px; width: 314px;
height: 24px; height: 24px;
...@@ -580,6 +656,7 @@ const box2Data = ref([ ...@@ -580,6 +656,7 @@ const box2Data = ref([
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.content { .content {
width: 314px; width: 314px;
height: 48px; height: 48px;
...@@ -593,8 +670,10 @@ const box2Data = ref([ ...@@ -593,8 +670,10 @@ const box2Data = ref([
overflow: hidden; overflow: hidden;
} }
} }
.box2-item-right { .box2-item-right {
margin-left: 18px; margin-left: 18px;
.time { .time {
height: 22px; height: 22px;
color: rgba(95, 101, 108, 1); color: rgba(95, 101, 108, 1);
...@@ -608,11 +687,13 @@ const box2Data = ref([ ...@@ -608,11 +687,13 @@ const box2Data = ref([
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.img-box { .img-box {
margin-top: 14px; margin-top: 14px;
width: 78px; width: 78px;
height: 50px; height: 50px;
border-radius: 2px; border-radius: 2px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -621,6 +702,7 @@ const box2Data = ref([ ...@@ -621,6 +702,7 @@ const box2Data = ref([
} }
} }
} }
.box2-footer { .box2-footer {
margin: 10px auto; margin: 10px auto;
width: 108px; width: 108px;
...@@ -630,9 +712,11 @@ const box2Data = ref([ ...@@ -630,9 +712,11 @@ const box2Data = ref([
justify-content: center; justify-content: center;
gap: 4px; gap: 4px;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
background: var(--color-bg-hover); background: var(--color-bg-hover);
} }
.text { .text {
color: var(--color-main-active); color: var(--color-main-active);
height: 22px; height: 22px;
...@@ -642,9 +726,11 @@ const box2Data = ref([ ...@@ -642,9 +726,11 @@ const box2Data = ref([
line-height: 22px; line-height: 22px;
letter-spacing: 0px; letter-spacing: 0px;
} }
.icon { .icon {
width: 16px; width: 16px;
height: 16px; height: 16px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
......
...@@ -39,14 +39,9 @@ ...@@ -39,14 +39,9 @@
</div> </div>
<div class="box2-main"> <div class="box2-main">
<div class="box2-main-tag-box"> <div class="box2-main-tag-box">
<div <div class="tag" :class="{ tagActive: activeArea === item }" v-for="(item, index) in areaList" :key="index"
class="tag" @click="handleClickArea(item.status)">
:class="{ tagActive: activeArea === item }" {{ item.industryName }}
v-for="(item, index) in areaList"
:key="index"
@click="handleClickArea(item)"
>
{{ item }}
</div> </div>
</div> </div>
<div class="box2-content" id="box2Chart"></div> <div class="box2-content" id="box2Chart"></div>
...@@ -82,11 +77,14 @@ ...@@ -82,11 +77,14 @@
{{ item.id }} {{ item.id }}
</div> </div>
<div class="center"> <div class="center">
<div class="title">{{ item.title }}</div> <div class="title">{{ item.content }}</div>
<div class="desc">{{ item.desc }}</div> <div class="desc">{{ item.econtent }}</div>
</div> </div>
<div class="right"> <div class="right">
<div class="tag" v-for="(val, idx) in item.tagList" :key="idx"> <div class="tag" v-for="(val, idx) in item.hylyList" :key="idx">
{{ val.name }}
</div>
<div class="tag" v-for="(val, idx) in item.serialNum" :key="idx">
{{ val.name }} {{ val.name }}
</div> </div>
</div> </div>
...@@ -126,53 +124,116 @@ ...@@ -126,53 +124,116 @@
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
import setChart from "@/utils/setChart"; import setChart from "@/utils/setChart";
import getWordCloudChart from "./utils/worldCloudChart"; import getWordCloudChart from "./utils/worldCloudChart";
import {
getThinkTankReportAbstract,
getThinkTankReportContent,
getThinkTankReportIndustry,
getThinkTankReportIndustryCloud
} from "@/api/thinkTank/overview";
import { useRouter } from "vue-router";
const router = useRouter();
// 内容摘要 // 内容摘要
const box1Data = const box1Data =
ref(`包括经济竞争在内的美中竞争自2017年以来一直在定义美国外交政策。这两个经济体是世界上第一和第二大国家经济体,并且深深交织在一起。改变关系,无论多么必要,可能是昂贵的。因此,美国面临着一项挑战,确保其经济在耦合的战略竞争条件下满足国家的需求。 ref(`包括经济竞争在内的美中竞争自2017年以来一直在定义美国外交政策。这两个经济体是世界上第一和第二大国家经济体,并且深深交织在一起。改变关系,无论多么必要,可能是昂贵的。因此,美国面临着一项挑战,确保其经济在耦合的战略竞争条件下满足国家的需求。
为了应对这一挑战,兰德大学的研究人员对美中竞争进行了经济和制度分析,进行了参与式的远见练习,以了解确保美国经济健康的长期路径,并创建了两个经济竞争游戏,探索多个国家在相互交流的同时确保经济健康的动态...`); 为了应对这一挑战,兰德大学的研究人员对美中竞争进行了经济和制度分析,进行了参与式的远见练习,以了解确保美国经济健康的长期路径,并创建了两个经济竞争游戏,探索多个国家在相互交流的同时确保经济健康的动态...`);
//获取内容摘要
const handleGetThinkTankReportAbstract = async () => {
try {
const res = await getThinkTankReportAbstract(router.currentRoute._value.params.id);
console.log("内容摘要", res);
if (res.code === 200 && res.data) {
box1Data.value = res.data
}
} catch (error) {
console.error("获取内容摘要error", error);
}
};
// 涉及科技领域 // 涉及科技领域
const areaList = ref(["人工智能", "半导体与高科技", "经济与贸易", "地缘政治", "军事与安全", "国际规则与多边体系"]); const areaList = ref([]);
const activeArea = ref("人工智能"); const activeArea = ref(6);
const handleClickArea = area => { const handleClickArea = area => {
activeArea.value = area; activeArea.value = area;
handleGetThinkTankReportIndustryCloud()
}; };
const box2Data = ref([ const box2Data = ref([
{ // {
name: "通用人工智能", // name: "通用人工智能",
value: 100 // value: 100
}, // },
{ // {
name: "AI芯片", // name: "AI芯片",
value: 66 // value: 66
}, // },
{ // {
name: "计算能力又是", // name: "计算能力又是",
value: 72 // value: 72
}, // },
{ // {
name: "基准测试", // name: "基准测试",
value: 88 // value: 88
}, // },
{ // {
name: "出口管制", // name: "出口管制",
value: 78 // value: 78
}, // },
{ // {
name: "军事AI", // name: "军事AI",
value: 85 // value: 85
}, // },
{ // {
name: "生态系统", // name: "生态系统",
value: 88 // value: 88
}, // },
{ // {
name: "模型能力", // name: "模型能力",
value: 89 // value: 89
} // }
]); ]);
//获取科技领域词云
const handleGetThinkTankReportIndustryCloud = async () => {
try {
const params = {
id: router.currentRoute._value.params.id,
industryId: activeArea.value
}
const res = await getThinkTankReportIndustryCloud(params);
console.log("科技领域词云", res);
if (res.code === 200 && res.data) {
const data = []
res.data.map(item => {
data.push(
{
name: item.clause,
value: item.count
})
box2Data.value = data
const box2Chart = getWordCloudChart(box2Data.value);
setChart(box2Chart, "box2Chart");
})
}
} catch (error) {
console.error("获取科技领域词云error", error);
}
};
//涉及科技领域
const handleGetThinkTankReportIndustry = async () => {
try {
const res = await getThinkTankReportIndustry(router.currentRoute._value.params.id);
console.log("涉及科技领域", res);
if (res.code === 200 && res.data) {
areaList.value = res.data
}
} catch (error) {
console.error("获取涉及科技领域error", error);
}
};
// 主要观点 // 主要观点
const majorOpinions = ref([ const majorOpinions = ref([
{ {
...@@ -315,9 +376,25 @@ const majorOpinions = ref([ ...@@ -315,9 +376,25 @@ const majorOpinions = ref([
} }
]); ]);
//获取报告主要观点
const handleGetThinkTankReportContent = async () => {
try {
const res = await getThinkTankReportContent(router.currentRoute._value.params.id);
console.log("主要观点", res);
if (res.code === 200 && res.data) {
majorOpinions.value = res.data.content
}
} catch (error) {
console.error("获取主要观点error", error);
}
};
onMounted(() => { onMounted(() => {
const box2Chart = getWordCloudChart(box2Data.value); handleGetThinkTankReportAbstract()
setChart(box2Chart, "box2Chart"); handleGetThinkTankReportContent()
handleGetThinkTankReportIndustry()
handleGetThinkTankReportIndustryCloud()
}); });
</script> </script>
...@@ -326,11 +403,13 @@ onMounted(() => { ...@@ -326,11 +403,13 @@ onMounted(() => {
display: flex; display: flex;
justify-content: center; justify-content: center;
gap: 16px; gap: 16px;
.box-header { .box-header {
width: 100%; width: 100%;
height: 50px; height: 50px;
display: flex; display: flex;
position: relative; position: relative;
.header-left { .header-left {
margin-top: 18px; margin-top: 18px;
width: 8px; width: 8px;
...@@ -338,6 +417,7 @@ onMounted(() => { ...@@ -338,6 +417,7 @@ onMounted(() => {
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: var(--color-main-active); background: var(--color-main-active);
} }
.title { .title {
margin-left: 14px; margin-left: 14px;
margin-top: 14px; margin-top: 14px;
...@@ -348,6 +428,7 @@ onMounted(() => { ...@@ -348,6 +428,7 @@ onMounted(() => {
font-size: 20px; font-size: 20px;
font-weight: 700; font-weight: 700;
} }
.header-btn-box { .header-btn-box {
position: absolute; position: absolute;
top: 15px; top: 15px;
...@@ -355,6 +436,7 @@ onMounted(() => { ...@@ -355,6 +436,7 @@ onMounted(() => {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
gap: 8px; gap: 8px;
.btn { .btn {
height: 28px; height: 28px;
padding: 0 8px; padding: 0 8px;
...@@ -368,11 +450,13 @@ onMounted(() => { ...@@ -368,11 +450,13 @@ onMounted(() => {
font-weight: 400; font-weight: 400;
line-height: 28px; line-height: 28px;
} }
.btnActive { .btnActive {
color: var(--color-main-active); color: var(--color-main-active);
border: 1px solid var(--color-main-active); border: 1px solid var(--color-main-active);
} }
} }
.header-right { .header-right {
position: absolute; position: absolute;
top: 14px; top: 14px;
...@@ -380,9 +464,11 @@ onMounted(() => { ...@@ -380,9 +464,11 @@ onMounted(() => {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
gap: 4px; gap: 4px;
.icon { .icon {
width: 28px; width: 28px;
height: 28px; height: 28px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -390,6 +476,7 @@ onMounted(() => { ...@@ -390,6 +476,7 @@ onMounted(() => {
} }
} }
} }
.left { .left {
.box1 { .box1 {
margin-top: 17px; margin-top: 17px;
...@@ -399,10 +486,12 @@ onMounted(() => { ...@@ -399,10 +486,12 @@ onMounted(() => {
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);
.box1-main { .box1-main {
margin: 5px auto; margin: 5px auto;
width: 428px; width: 428px;
height: 282px; height: 282px;
/* 9行 * 30px/行 = 270px,这里可以稍微调整 */
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;
...@@ -410,7 +499,16 @@ onMounted(() => { ...@@ -410,7 +499,16 @@ onMounted(() => {
line-height: 30px; line-height: 30px;
letter-spacing: 0px; letter-spacing: 0px;
text-align: justify; text-align: justify;
display: -webkit-box;
/* 使用Webkit的弹性盒模型 */
-webkit-box-orient: vertical;
/* 垂直排列 */
-webkit-line-clamp: 9;
/* 限制显示9行 */
overflow: hidden;
/* 隐藏超出部分 */
} }
.box1-footer { .box1-footer {
margin: 0 auto; margin: 0 auto;
width: 108px; width: 108px;
...@@ -420,9 +518,11 @@ onMounted(() => { ...@@ -420,9 +518,11 @@ onMounted(() => {
justify-content: center; justify-content: center;
gap: 4px; gap: 4px;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
background: var(--color-bg-hover); background: var(--color-bg-hover);
} }
.text { .text {
height: 22px; height: 22px;
color: var(--color-main-active); color: var(--color-main-active);
...@@ -433,9 +533,11 @@ onMounted(() => { ...@@ -433,9 +533,11 @@ onMounted(() => {
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
} }
.icon { .icon {
width: 16px; width: 16px;
height: 16px; height: 16px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -443,6 +545,7 @@ onMounted(() => { ...@@ -443,6 +545,7 @@ onMounted(() => {
} }
} }
} }
.box2 { .box2 {
margin-top: 16px; margin-top: 16px;
width: 480px; width: 480px;
...@@ -451,10 +554,12 @@ onMounted(() => { ...@@ -451,10 +554,12 @@ onMounted(() => {
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);
.box2-main { .box2-main {
width: 430px; width: 430px;
height: 320px; height: 320px;
margin: 0 auto; margin: 0 auto;
.box2-main-tag-box { .box2-main-tag-box {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
...@@ -462,6 +567,7 @@ onMounted(() => { ...@@ -462,6 +567,7 @@ onMounted(() => {
box-sizing: border-box; box-sizing: border-box;
padding: 8px 0; padding: 8px 0;
gap: 8px; gap: 8px;
.tag { .tag {
height: 28px; height: 28px;
line-height: 28px; line-height: 28px;
...@@ -472,12 +578,14 @@ onMounted(() => { ...@@ -472,12 +578,14 @@ onMounted(() => {
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
cursor: pointer; cursor: pointer;
} }
.tagActive { .tagActive {
color: var(--color-main-active); color: var(--color-main-active);
border: 1px solid var(--color-main-active); border: 1px solid var(--color-main-active);
background: rgba(231, 243, 255, 1); background: rgba(231, 243, 255, 1);
} }
} }
.box2-content { .box2-content {
width: 430px; width: 430px;
height: 231px; height: 231px;
...@@ -489,8 +597,10 @@ onMounted(() => { ...@@ -489,8 +597,10 @@ onMounted(() => {
} }
} }
} }
.right { .right {
margin-top: 17px; margin-top: 17px;
.box3 { .box3 {
width: 1103px; width: 1103px;
height: 946px; height: 946px;
...@@ -499,13 +609,16 @@ onMounted(() => { ...@@ -499,13 +609,16 @@ onMounted(() => {
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 { .box3-main {
width: 1057px; width: 1057px;
height: 800px; height: 800px;
margin: 0 auto; margin: 0 auto;
.box3-main-main { .box3-main-main {
height: 720px; height: 720px;
overflow: hidden; overflow: hidden;
.box3-item { .box3-item {
width: 1057px; width: 1057px;
height: 72px; height: 72px;
...@@ -513,6 +626,7 @@ onMounted(() => { ...@@ -513,6 +626,7 @@ onMounted(() => {
border-radius: 4px; border-radius: 4px;
display: flex; display: flex;
position: relative; position: relative;
.left { .left {
margin-top: 24px; margin-top: 24px;
margin-left: 15px; margin-left: 15px;
...@@ -528,12 +642,14 @@ onMounted(() => { ...@@ -528,12 +642,14 @@ onMounted(() => {
font-weight: 400; font-weight: 400;
letter-spacing: 0px; letter-spacing: 0px;
} }
.center { .center {
width: 770px; width: 770px;
margin-left: 13px; margin-left: 13px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
.title { .title {
margin-top: 12px; margin-top: 12px;
height: 26px; height: 26px;
...@@ -545,6 +661,7 @@ onMounted(() => { ...@@ -545,6 +661,7 @@ onMounted(() => {
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
} }
.desc { .desc {
height: 22px; height: 22px;
color: rgba(95, 101, 108, 1); color: rgba(95, 101, 108, 1);
...@@ -556,6 +673,7 @@ onMounted(() => { ...@@ -556,6 +673,7 @@ onMounted(() => {
text-align: left; text-align: left;
} }
} }
.right { .right {
margin-top: 26px; margin-top: 26px;
width: 180px; width: 180px;
...@@ -563,6 +681,7 @@ onMounted(() => { ...@@ -563,6 +681,7 @@ onMounted(() => {
display: flex; display: flex;
gap: 8px; gap: 8px;
justify-content: flex-end; justify-content: flex-end;
.tag { .tag {
height: 22px; height: 22px;
padding: 0 8px; padding: 0 8px;
...@@ -577,29 +696,34 @@ onMounted(() => { ...@@ -577,29 +696,34 @@ onMounted(() => {
line-height: 20px; line-height: 20px;
} }
} }
.more { .more {
width: 16px; width: 16px;
height: 16px; height: 16px;
position: absolute; position: absolute;
top: 28px; top: 28px;
right: 20px; right: 20px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
} }
.box3-item:nth-child(2n-1) { .box3-item:nth-child(2n-1) {
border-bottom: 1px solid rgba(234, 236, 238, 1); border-bottom: 1px solid rgba(234, 236, 238, 1);
border-top: 1px solid rgba(234, 236, 238, 1); border-top: 1px solid rgba(234, 236, 238, 1);
background: rgba(247, 248, 249, 1); background: rgba(247, 248, 249, 1);
} }
} }
.box3-main-footer { .box3-main-footer {
height: 80px; height: 80px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
padding: 30px 5px; padding: 30px 5px;
.info { .info {
color: rgba(132, 136, 142, 1); color: rgba(132, 136, 142, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
...@@ -611,6 +735,7 @@ onMounted(() => { ...@@ -611,6 +735,7 @@ onMounted(() => {
} }
} }
} }
.box3-footer { .box3-footer {
position: absolute; position: absolute;
left: 22px; left: 22px;
...@@ -625,14 +750,17 @@ onMounted(() => { ...@@ -625,14 +750,17 @@ onMounted(() => {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
gap: 13px; gap: 13px;
.footer-left { .footer-left {
width: 19px; width: 19px;
height: 20px; height: 20px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.footer-center { .footer-center {
width: 964px; width: 964px;
height: 48px; height: 48px;
...@@ -644,9 +772,11 @@ onMounted(() => { ...@@ -644,9 +772,11 @@ onMounted(() => {
letter-spacing: 0px; letter-spacing: 0px;
text-align: justify; text-align: justify;
} }
.footer-right { .footer-right {
width: 24px; width: 24px;
height: 24px; height: 24px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<div class="header"> <div class="header">
<div class="header-top"> <div class="header-top">
<div class="header-top-left"> <div class="header-top-left">
<img src="" alt="" /> <img :src="thinkTank.imageUrl" alt="" />
</div> </div>
<div class="header-top-center"> <div class="header-top-center">
<div class="center-top"> <div class="center-top">
......
...@@ -63,7 +63,8 @@ ...@@ -63,7 +63,8 @@
</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" @click="handleToReportDetail()"> <div class="footer-card" v-for="(item, index) in curFooterList" :key="index"
@click="handleToReportDetail(item.id)">
<div class="footer-card-top"> <div class="footer-card-top">
<img :src="item.imageUrl" alt="" /> <img :src="item.imageUrl" alt="" />
</div> </div>
...@@ -111,15 +112,15 @@ import { ...@@ -111,15 +112,15 @@ import {
getThinkDynamicsReport getThinkDynamicsReport
} from "@/api/thinkTank/overview"; } from "@/api/thinkTank/overview";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
const router = useRouter();
const searchReport = ref('') const searchReport = ref('')
const router = useRouter();
const handleToReportDetail = () => { const handleToReportDetail = (id) => {
const route = router.resolve({ const route = router.resolve({
name: 'ReportDetail', name: 'ReportDetail',
params: { params: {
id: 1 id: id
} }
}); });
window.open(route.href, "_blank"); window.open(route.href, "_blank");
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</div> </div>
<div class="left-top-main"> <div class="left-top-main">
<div class="img-box"> <div class="img-box">
<img :src="basicInfo.img" alt="" /> <img :src="basicInfo.imageUrl" alt="" />
</div> </div>
<div class="left-top-item"> <div class="left-top-item">
<div class="item-left">{{ "国家:" }}</div> <div class="item-left">{{ "国家:" }}</div>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论