提交 226e9c9b authored 作者: coderBryanFu's avatar coderBryanFu

update

上级 6ad6286d
......@@ -26,14 +26,12 @@
<el-main class="main-container">
<router-view />
</el-main>
<div ref="target" class="draggable-box" :style="style">
<div class="ai-btn" @click="openAiBox">
<div class="icon">
<img src="@/assets/icons/ai-icon.png" alt="" />
</div>
<div class="text">智能问答</div>
</div>
</div>
<div class="ai-dialog" v-if="isShowAiBox">
<AiBox @close="closeAiBox" />
......@@ -48,24 +46,24 @@ import { Monitor, House, User, Location, Document, Bell, Message, ArrowDown } fr
import { useRouter } from "vue-router";
import Breadcrumb from "@/components/BreadCrumb/index.vue";
import AiBox from "./components/AiBox.vue";
import { useDraggable } from "@vueuse/core";
// import { useDraggable } from "@vueuse/core";
const router = useRouter();
const target = ref(null);
// const target = ref(null);
const { x, y, isDragging } = useDraggable(target, {
initialValue: { x: 1770, y: 800 },
onStart: () => console.log("开始拖动"),
onEnd: () => console.log("结束拖动")
});
// const { x, y, isDragging } = useDraggable(target, {
// initialValue: { x: 1770, y: 800 },
// onStart: () => console.log("开始拖动"),
// onEnd: () => console.log("结束拖动")
// });
const style = computed(() => ({
position: "absolute",
left: `${x.value}px`,
top: `${y.value}px`,
cursor: isDragging.value ? "grabbing" : "grab"
}));
// const style = computed(() => ({
// position: "absolute",
// left: `${x.value}px`,
// top: `${y.value}px`,
// cursor: isDragging.value ? "grabbing" : "grab"
// }));
const handleToHome = () => {
router.push({
......@@ -294,10 +292,10 @@ body {
}
.ai-btn {
// position: absolute;
// bottom: 20%;
// right: 46px;
// z-index: 9999;
position: absolute;
bottom: 240px;
right: 10px;
z-index: 9999;
cursor: pointer;
.icon {
......
......@@ -34,10 +34,11 @@ export function getDecreeYearOrder(params) {
}
// 政令涉及领域
export function getDecreeArea() {
export function getDecreeArea(params) {
return request({
method: 'GET',
url: `/api/administrativeOrderOverview/industry`,
url: `/api/administrativeOrderOverview/industry/${params.year}`,
params
})
}
......
......@@ -14,7 +14,7 @@ export function getGovOrgBasicInfo(params) {
// 最新动态
/**
* @param { orgId, cRelated, currentPage, pageSize }
* @param { orgId, cRelated,dynamicsType, currentPage, pageSize }
*/
export function getGovOrgLatestDynamics(params) {
return request({
......@@ -62,3 +62,83 @@ export function getGovOrgOpinions(params) {
params
})
}
// 人物关系
/**
* @param { orgId }
*/
export function getPersonRelation(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/personRelation/${params.orgId}`,
params
})
}
// 对华制裁 ---------------------------------------
// 实体清单新增数量
/**
* @param { orgId }
*/
export function getGrowthNum(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/growthNum/${params.orgId}`,
params
})
}
// 实体清单新增数量变化趋势
/**
* @param { orgId }
*/
export function getGrowthTrend(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/growthTrend/${params.orgId}`,
params
})
}
// 实体清单新增企业领域分布
/**
* @param { orgId }
*/
export function getEntityListField(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/entityListField/${params.year}/${params.orgId}`,
params
})
}
// 232调查单新增数量
/**
* @param { orgId }
*/
export function getGrowth232Num(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/growth232Num/${params.orgId}`,
params
})
}
// 232调查新增数量变化趋势
/**
* @param { orgId }
*/
export function getGrowth232Trend(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/growth232Trend/${params.orgId}`,
params
})
}
// 232调查新增企业领域分布
/**
* @param { orgId }
*/
export function getSection232Field(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/section232Field/${params.startDate}/${params.orgId}`,
params
})
}
\ No newline at end of file
......@@ -678,7 +678,7 @@
</div>
<div class="right-footer">
<div class="footer-left">
{{ `共${total}项调查` }}
{{ `共 ${total} 条法案` }}
</div>
<div class="footer-right">
<el-pagination
......
......@@ -256,7 +256,11 @@
<div class="title">{{ news.title }}</div>
<div class="time">{{ news.from }}</div>
</div>
<el-popover effect="dark" :width="1000" :content="news.content" placement="top-start">
<template #reference>
<div class="right-footer">{{ news.content }}</div>
</template>
</el-popover>
</div>
</div>
</div>
......@@ -294,16 +298,12 @@
</div>
<div class="box5-header-title">{{ "行政令发布频度" }}</div>
</div>
</div>
<div class="box5-main">
<div class="box5-chart" id="chart1"></div>
<div class="box5-selectbox">
<el-select
@change="handleBox5YearChange"
v-model="box5SelectedYear"
placeholder="选择时间"
style="width: 80px"
style="width: 120px"
>
<el-option
v-for="item in box5YearList"
......@@ -314,6 +314,10 @@
</el-select>
</div>
</div>
<div class="box5-main">
<div class="box5-chart" id="chart1"></div>
</div>
</div>
<div class="box6">
<div class="box6-header">
......@@ -321,6 +325,21 @@
<img src="./assets/images/box4-header-icon.png" alt="" />
</div>
<div class="header-title">{{ "政令涉及领域" }}</div>
<div class="box6-selectbox">
<el-select
@change="handleBox6YearChange"
v-model="box6SelectedYear"
placeholder="选择时间"
style="width: 120px"
>
<el-option
v-for="item in box6YearList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</div>
<div class="box6-main" id="chart2"></div>
</div>
......@@ -334,7 +353,12 @@
<div class="header-title">{{ "关键行政令" }}</div>
</div>
<div class="box7-main">
<div class="box7-item" v-for="(item, index) in keyDecreeList" :key="index">
<div
class="box7-item"
v-for="(item, index) in keyDecreeList"
:key="index"
@click="handleKeyDecree(item.id)"
>
<div class="icon">
<img src="./assets/images/warning.png" alt="" />
</div>
......@@ -343,7 +367,11 @@
<div class="title">{{ item.title }}</div>
<div class="time">{{ item.time }}</div>
</div>
<el-popover effect="dark" :width="800" :content="item.content" placement="top-start">
<template #reference>
<div class="info-content">{{ item.content ? item.content : "暂无数据" }}</div>
</template>
</el-popover>
</div>
</div>
</div>
......@@ -489,7 +517,7 @@
</div>
<div class="footer-box">
<div class="footer-left">
{{ `共${totalDecreesNum}项调查` }}
{{ `共 ${totalDecreesNum} 条政令` }}
</div>
<div class="footer-right">
<el-pagination
......@@ -610,13 +638,9 @@ const govInsList = ref([
// name: "美国财政部"
// },
]);
const checkedGovIns = ref(['白宫'])
const handleChangeCheckedGovIns = (val) => {
}
const checkedGovIns = ref(["白宫"]);
const handleChangeCheckedGovIns = val => {};
const handleGetDepartmentList = async () => {
try {
......@@ -719,6 +743,16 @@ const handleClickDecree = decree => {
window.open(route.href, "_blank");
};
const handleKeyDecree = id => {
const route = router.resolve({
path: "/decreeLayout",
query: {
id: id
}
});
window.open(route.href, "_blank");
};
// 风险信号
const warningList = ref([
{
......@@ -919,9 +953,36 @@ const chart2Data = ref([
]);
// const colorList = ["#69B1FF", "#FFC069", "#87E8DE", "#85A5FF", "#FF7875", "#B37FEB", "#4096FF"];
const box6YearList = ref([
{
label: "2025",
value: "2025"
},
{
label: "2024",
value: "2024"
},
{
label: "2023",
value: "2023"
},
{
label: "2022",
value: "2022"
},
{
label: "2021",
value: "2021"
}
]);
const box6SelectedYear = ref("2025");
const handleGetDecreeArea = async () => {
const params = {
year: box6SelectedYear.value
};
try {
const res = await getDecreeArea();
const res = await getDecreeArea(params);
console.log("政令涉及领域", res);
if (res.code === 200 && res.data) {
chart2Data.value = res.data.map(item => {
......@@ -941,6 +1002,10 @@ const handleBox6 = async () => {
setChart(chart2, "chart2");
};
const handleBox6YearChange = () => {
handleBox6();
};
// 关键行政令
const keyDecreeList = ref([
// {
......@@ -964,7 +1029,8 @@ const handleGetKeyDecree = async () => {
return {
title: item.name,
content: item.describe,
time: item.postDate
time: item.postDate,
id: item.orderId
};
});
}
......@@ -1012,7 +1078,6 @@ const handleSwithSort = () => {
isSort.value = !isSort.value;
};
const handleToPosi = id => {
// 0 618 1240 2350
switch (id) {
......@@ -1088,7 +1153,7 @@ const decreeList = ref([
]);
const handleGetDecreeOrderList = async () => {
const p0 = checkedGovIns.value.join(',')
const p0 = checkedGovIns.value.join(",");
const p1 = activeAreaList.value.join(",");
const p2 = activePubTime.value.join(",");
const params = {
......@@ -1109,7 +1174,7 @@ const handleGetDecreeOrderList = async () => {
id: item.id,
time: item.postDate,
title: item.name,
desc: item.order,
desc: item.describe,
img: item.orgImage,
tagList: item.industryList
};
......@@ -1157,8 +1222,7 @@ watch(
val => {
handleGetDecreeOrderList();
}
)
);
// 切换当前政令
const handleSwithCurDecree = name => {
......@@ -2555,26 +2619,13 @@ onMounted(async () => {
line-height: 26px;
}
}
.box5-header-right {
width: 49px;
height: 24px;
margin-top: 12px;
margin-right: 27px;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
.box5-selectbox {
margin-right: 20px;
margin-top: 8px;
}
}
.box5-main {
height: 397px;
position: relative;
.box5-selectbox {
position: absolute;
right: 10px;
top: 10px;
}
.box5-chart {
height: 397px;
}
......@@ -2613,17 +2664,10 @@ onMounted(async () => {
font-weight: 700;
line-height: 26px;
}
.header-right {
.box6-selectbox {
position: absolute;
right: 27px;
width: 49px;
height: 24px;
top: 12px;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
right: 20px;
top: 8px;
}
}
.box6-main {
......@@ -2680,6 +2724,10 @@ onMounted(async () => {
margin-top: 16px;
margin-left: 25px;
display: flex;
cursor: pointer;
&:hover {
background: var(--color-bg-hover);
}
.icon {
margin-top: 6px;
width: 24px;
......
......@@ -72,7 +72,7 @@
<div class="title">{{ "政令主要内容" }}</div>
</div>
<div class="list-main">
<div class="list-item" v-for="(val, idx) in showList" :key="idx">
<div class="list-item" v-for="(val, idx) in showList" :key="idx" @click="handleToDecreeDetail(val)">
<div class="id">{{ idx + 1 }}</div>
<div class="title">{{ val.content }}</div>
<div class="open">
......@@ -105,7 +105,7 @@
<script setup>
import { ref, computed, onMounted } from "vue";
import { useRoute } from "vue-router";
import router from "@/router";
import { getDecreeMainContent } from "@/api/decree/introduction";
import { getDecreeRelateOrder } from "@/api/decree/deepdig";
......@@ -254,6 +254,16 @@ const handleGetRelateOrder = async () => {
}
};
const handleToDecreeDetail = (item) => {
const route = router.resolve({
path: "/decreeLayout/overview/introduction",
query: {
id: item.id
}
});
window.open(route.href, "_blank");
}
onMounted(() => {
handleGetRelateOrder();
});
......@@ -483,6 +493,10 @@ onMounted(() => {
background: rgba(255, 255, 255, 1);
border-bottom: 1px solid rgba(234, 236, 238, 1);
display: flex;
cursor: pointer;
&:hover{
background: var(--color-bg-hover);
}
.id {
width: 24px;
height: 24px;
......
......@@ -134,7 +134,7 @@ import icon2Active from "./assets/icons/icon2_active.png";
import icon3 from "./assets/icons/icon3.png";
import icon3Active from "./assets/icons/icon3_active.png";
import DefaultIcon2 from '@/assets/icons/default-icon2.png'
import DefaultIcon2 from "@/assets/icons/default-icon2.png";
const route = useRoute();
......@@ -186,7 +186,6 @@ const activeTitle = ref("政令概况");
const handleClickMainHeaderBtn = item => {
activeTitle.value = item.name;
window.sessionStorage.setItem("activeTitle", item.name);
router.push({
path: item.path,
query: {
......@@ -211,16 +210,16 @@ const handleGetSummary = async () => {
onMounted(() => {
handleGetSummary();
if (window.sessionStorage.getItem("activeTitle")) {
activeTitle.value = window.sessionStorage.getItem("activeTitle");
console.log(route.path);
if (route.path === "/decreeLayout/overview/introduction" || route.path === "/decreeLayout/overview/background") {
activeTitle.value = "政令概况";
} else if (route.path === "/decreeLayout/deepDig") {
activeTitle.value = "政令概况";
} else {
activeTitle.value = "影响分析";
}
});
onUnmounted(() => {
if (window.sessionStorage.getItem("activeTitle")) {
window.sessionStorage.removeItem("activeTitle");
}
});
</script>
<style lang="scss" scoped>
......@@ -247,7 +246,7 @@ onUnmounted(() => {
.icon {
width: 64px;
height: 64px;
img{
img {
width: 100%;
height: 100%;
}
......
<template>
<div class="introduction-wrap">
<div
class="hover-dialog"
:style="{ position: 'absolute', zIndex: 9999, top: `${mouseY - 220}px`, left: `${mouseX - 600}px` }"
v-if="isShowBox2Dialog"
>
{{ box2ContentAll }}
</div>
<div class="left">
<div class="box1">
<div class="box-header">
......@@ -29,13 +36,13 @@
<div class="box1-item" v-for="(item, index) in backgroundList" :key="index">
<div class="id">{{ index + 1 }}</div>
<div class="title">{{ item.content }}</div>
<div class="open">
<!-- <div class="open">
<img src="./assets/images/open-icon.png" alt="" />
</div>
</div> -->
</div>
</div>
<div class="box1-footer">
<div class="box1-footer-left">{{ `共计${backgroundListNum}指令` }}</div>
<div class="box1-footer-left">{{ `共计${backgroundListNum}背景` }}</div>
<div class="box1-footer-right">
<el-pagination :page-size="5" background layout="prev, pager, next" :total="backgroundListNum" />
</div>
......@@ -55,20 +62,19 @@
</div>
</div>
<div class="box2-main">
<div class="box2-dialog hover-dialog" v-if="isShowBox2Dialog">{{ box2ContentAll }}</div>
<div class="box2-item" v-for="(item, index) in relatedEvents" :key="index">
<div class="item-left">
<img :src="item.image" alt="" />
</div>
<div class="item-center">
<div class="title">{{ item.title }}</div>
<div
class="content"
@mouseenter="handleChangeShowBox2Dialog(true, item.content)"
@mouseleave="handleChangeShowBox2Dialog(false)"
>
<el-popover effect="dark" :width="1000" :content="item.content" placement="top-start">
<template #reference>
<div class="content">
{{ item.content }}
</div>
</template>
</el-popover>
</div>
<div class="item-right">{{ item.time }}</div>
</div>
......@@ -94,13 +100,13 @@
</div>
</div>
<div class="box3-main">
<div class="box3-item" v-for="(item, index) in laws" :key="index">
<div class="box3-item" v-for="(item, index) in laws" :key="index" @click="handleToBillDetail(item)">
<div class="id">{{ index + 1 }}</div>
<div class="item-header">
<div class="name">{{ item.title }}</div>
<div class="info">{{ item.info }}</div>
<!-- <div class="info">{{ item.info }}</div> -->
</div>
<!-- <div class="item-content">{{ item.content }}</div> -->
<div class="item-content">{{ item.content }}</div>
</div>
</div>
</div>
......@@ -111,6 +117,7 @@
<script setup>
import { ref, onMounted } from "vue";
import { useRoute } from "vue-router";
import router from "@/router";
import { getDecreeBackground, getDecreeRelatedEvent, getDecreeDepend } from "@/api/decree/background";
import Img1 from "./assets/images/box2-img1.png";
......@@ -119,11 +126,16 @@ import Img3 from "./assets/images/box2-img3.png";
import Img4 from "./assets/images/box2-img4.png";
import Img5 from "./assets/images/box2-img5.png";
import { reduce } from "lodash";
import Index from "../index.vue";
const route = useRoute();
const decreeId = ref(route.query.id);
// 基本鼠标位置
const mouseX = ref(0);
const mouseY = ref(0);
// 提出背景
const box1BtnList = ref(["涉华背景", "全部背景"]);
const box1ActiveBtn = ref("涉华背景");
......@@ -228,6 +240,17 @@ const handleChangeShowBox2Dialog = (isShow, content) => {
box2ContentAll.value = content;
};
const handleMouseMove = event => {
mouseX.value = event.screenX;
mouseY.value = event.screenY;
};
const handleToBillDetail = item => {
window.sessionStorage.setItem("billId", item.billId);
const route = router.resolve("/billLayout");
window.open(route.href, "_blank");
};
onMounted(() => {
handleGetBackground();
handleGetRelateEvents();
......@@ -239,13 +262,6 @@ onMounted(() => {
.introduction-wrap {
display: flex;
position: relative;
position: relative;
.box2-dialog {
position: absolute;
bottom: 350px;
left: 100px;
z-index: 9999;
}
.box-header {
height: 56px;
display: flex;
......@@ -323,7 +339,7 @@ onMounted(() => {
.box1-main {
margin-left: 22px;
width: 1120px;
height: 280px;
height: 290px;
overflow: hidden;
overflow-y: auto;
.box1-item {
......@@ -336,7 +352,7 @@ onMounted(() => {
background: rgba(255, 255, 255, 1);
display: flex;
align-items: center;
padding: 12px 0;
padding: 8px 0;
.id {
margin-left: 15px;
width: 24px;
......@@ -476,7 +492,8 @@ onMounted(() => {
.box3-item {
margin-bottom: 20px;
position: relative;
border-bottom: 1px solid rgba(234, 236, 238, 1);
cursor: pointer;
// border-bottom: 1px solid rgba(234, 236, 238, 1);
.id {
width: 24px;
height: 24px;
......
......@@ -20,7 +20,7 @@
</div>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from "vue";
import { ref, onMounted } from "vue";
import router from "@/router";
import { useRoute } from "vue-router";
const route = useRoute();
......@@ -41,7 +41,6 @@ const siderList = ref([
const siderBtnActive = ref("政令简介");
const handleClickLeftSiderBtn = item => {
window.sessionStorage.setItem("siderBarActiveName", item.name);
siderBtnActive.value = item.name;
router.push({
path: item.path,
......@@ -52,14 +51,10 @@ const handleClickLeftSiderBtn = item => {
};
onMounted(() => {
if (window.sessionStorage.getItem("siderBarActiveName")) {
siderBtnActive.value = window.sessionStorage.getItem("siderBarActiveName");
}
});
onUnmounted(() => {
if (window.sessionStorage.getItem("siderBarActiveName")) {
window.sessionStorage.removeItem("siderBarActiveName");
if (route.path === "/decreeLayout/overview/introduction") {
siderBtnActive.value = "政令简介";
} else {
siderBtnActive.value = "政令背景";
}
});
</script>
......
......@@ -43,9 +43,9 @@
<div class="item-right text">{{ basicInfo.signTime }}</div>
</div>
<div class="item">
<div class="item-left">{{ "签署总统:" }}</div>
<div class="item-left">{{ "发布机构:" }}</div>
<div class="item-right text">
{{ basicInfo.signPeople }}
{{ basicInfo.proposeOrgName }}
</div>
</div>
<div class="item">
......@@ -80,9 +80,9 @@
<div class="box2-item" v-for="(item, index) in curmajorList" :key="index">
<div class="id">{{ index + 1 }}</div>
<div class="title">{{ item.content }}</div>
<div class="open">
<!-- <div class="open">
<img src="./assets/images/open-icon.png" alt="" />
</div>
</div> -->
</div>
</div>
<div class="box2-footer">
......@@ -233,6 +233,7 @@ const handleGetBasicInfo = async () => {
basicInfo.value.signTime = res.data.postDate;
basicInfo.value.bh = res.data.order;
basicInfo.value.deadline = res.data.deadline;
basicInfo.value.proposeOrgName = res.data.proposeOrgName
}
} catch (error) {
console.error("基本信息error", error);
......@@ -297,7 +298,7 @@ const handleClickBox3Btn = (btn, index) => {
eventList.value = box3Data.value[index].newsList.map(val => {
return {
time: val.newsDate,
title: val.newsTitle
title: val.newsContent
};
});
};
......@@ -416,15 +417,14 @@ handleGetOrgnization();
}
.header-btn-box {
position: absolute;
width: 360px;
height: 35px;
overflow: hidden;
overflow-x: auto;
z-index: 9999;
width: 320px;
height: 56px;
top: 14px;
right: 84px;
display: flex;
// justify-content: flex-end;
justify-content: flex-end;
flex-wrap: wrap;
gap: 8px;
white-space: nowrap;
.btn {
......@@ -466,10 +466,10 @@ handleGetOrgnization();
}
}
.left {
width: 1150px;
width: 1064px;
.box1 {
margin-top: 16px;
width: 1150px;
width: 1064px;
height: 414px;
border-radius: 4px;
box-shadow: 0px 0px 15px 0px rgba(60, 87, 126, 0.2);
......@@ -525,7 +525,7 @@ handleGetOrgnization();
}
.box2 {
margin-top: 16px;
width: 1150px;
width: 1064px;
height: 415px;
border-radius: 4px;
box-shadow: 0px 0px 15px 0px rgba(60, 87, 126, 0.2);
......@@ -533,20 +533,23 @@ handleGetOrgnization();
.box2-main {
margin-left: 22px;
height: 280px;
overflow: hidden;
overflow-y: auto;
.box2-item {
width: 1101px;
height: 48px;
width: 1015px;
// height: 48px;
margin-bottom: 8px;
box-sizing: border-box;
border: 1px solid rgba(234, 236, 238, 1);
border-radius: 2px;
background: rgba(255, 255, 255, 1);
display: flex;
align-items: center;
padding: 12px 0;
&:nth-child(2n-1) {
background: rgba(247, 248, 249, 1);
}
.id {
margin-top: 12px;
margin-left: 15px;
width: 24px;
height: 24px;
......@@ -558,15 +561,15 @@ handleGetOrgnization();
}
.title {
width: 1020px;
line-height: 48px;
margin-left: 5px;
line-height: 24px;
margin-left: 10px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 700;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
// overflow: hidden;
// text-overflow: ellipsis;
// white-space: nowrap;
}
.open {
width: 16px;
......@@ -595,17 +598,18 @@ handleGetOrgnization();
}
}
.right {
width: 520px;
margin-left: 16px;
.box3 {
margin-top: 16px;
width: 576px;
width: 520px;
height: 845px;
border-radius: 4px;
box-shadow: 0px 0px 15px 0px rgba(60, 87, 126, 0.2);
background: rgba(255, 255, 255, 1);
.box3-top {
margin-top: 10px;
height: 261px;
margin-top: 30px;
height: 241px;
border-bottom: 1px solid rgba(234, 236, 238, 1);
.box3-top-top {
width: 473px;
......@@ -651,6 +655,7 @@ handleGetOrgnization();
}
}
.right {
width: 350px;
margin-left: 22px;
.name {
height: 26px;
......
......@@ -159,7 +159,7 @@ import getPieChart from "./utils/piechart";
import getWordCloudChart from "./utils/worldCloudChart";
import getGraphChart from "./utils/graph";
import { getGovOrgCompanyArea, getGovOrgOpinions } from "@/api/institution/index";
import { getGovOrgCompanyArea, getGovOrgOpinions, getPersonRelation } from "@/api/institution/index";
import Img from "./assets/images/9.png";
import Img1 from "./assets/images/1.png";
......@@ -171,7 +171,7 @@ import Img6 from "./assets/images/6.png";
import Img7 from "./assets/images/7.png";
import Img8 from "./assets/images/8.png";
const route = useRoute()
const route = useRoute();
const box1ChartData = ref({
nodes: [
......@@ -381,19 +381,15 @@ const box3ChartData = ref([
]);
const handleGetOpinions = async () => {
const params = {
orgId: '50754570da464d0a81a5563dcb61d2ec'
}
orgId: "50754570da464d0a81a5563dcb61d2ec"
};
try {
const res = await getGovOrgOpinions(params)
console.log('主要科技政策观点', res);
} catch (error) {
}
}
const res = await getGovOrgOpinions(params);
console.log("主要科技政策观点", res);
} catch (error) {}
};
// 人物关系
const box4ChartData = ref({
nodes: [
{ id: "9", name: "霍华德·卢特尼克", category: 0, symbolSize: 50, symbol: `image://${Img}` },
......@@ -418,18 +414,42 @@ const box4ChartData = ref({
],
categories: [{ name: "a" }, { name: "b" }]
});
const handleGetPerosonRelation = async () => {
const params = {
orgId: route.query.id
};
try {
const res = await getPersonRelation(params);
console.log("人物关系", res);
if (res.code === 200 && res.data && res.data.length) {
} else {
box4ChartData.value.nodes = [];
box4ChartData.value.links = [];
box4ChartData.value.categories = [];
}
} catch (error) {
box4ChartData.value.nodes = [];
box4ChartData.value.links = [];
box4ChartData.value.categories = [];
}
};
const handleBox4 = async () => {
await handleGetPerosonRelation();
const box4Chart = getGraphChart(box4ChartData.value);
setChart(box4Chart, "box4Chart");
};
onMounted(() => {
handleBox2();
handleGetOpinions()
handleGetOpinions();
const box1Chart = getSankeyChart(box1ChartData.value.nodes, box1ChartData.value.links);
setChart(box1Chart, "box1Chart");
const box3Chart = getWordCloudChart(box3ChartData.value);
setChart(box3Chart, "box3Chart");
const box4Chart = getGraphChart(box4ChartData.value);
setChart(box4Chart, "box4Chart");
handleBox4();
});
</script>
......
......@@ -2,7 +2,7 @@
<div class="wrap">
<div class="header">
<div class="header-left">
<img :src="institutionInfo.logo?institutionInfo.logo: DefaultIcon2" alt="" />
<img :src="institutionInfo.logo ? institutionInfo.logo : DefaultIcon2" alt="" />
</div>
<div class="header-right">
<div class="title">{{ institutionInfo.name }}</div>
......@@ -24,8 +24,8 @@
<div class="tab-box">
<div
class="tab"
@click="handleClickTab(item, index)"
:class="{ tabActive: item.active }"
@click="handleClickTab(item)"
:class="{ tabActive: activeTabName == item.name }"
v-for="(item, index) in tabList"
:key="index"
>
......@@ -41,70 +41,72 @@
</template>
<script setup>
import { ref, computed, onMounted } from "vue";
import { ref, computed, onMounted, onUnmounted } from "vue";
import { useRoute } from "vue-router";
import InsDetail from "./insDetail/index.vue";
import Deepdig from "./deepdig/index.vue";
import Sanction from "./sanction/index.vue";
import {getGovOrgBasicInfo} from '@/api/institution/index'
import { getGovOrgBasicInfo } from "@/api/institution/index";
import DefaultIcon2 from '@/assets/icons/default-icon2.png'
import DefaultIcon2 from "@/assets/icons/default-icon2.png";
const route = useRoute()
const route = useRoute();
const institutionInfo = ref({
name: "",
enName: "",
desc: "",
tagList: [],
logo: ''
logo: ""
});
const handleGetInfo = async () => {
const params = {
id: route.query.id
}
};
try {
const res = await getGovOrgBasicInfo(params)
console.log('机构信息', res);
if(res.code === 200 && res.data) {
institutionInfo.value.name = res.data.orgName
institutionInfo.value.enName = res.data.orgNameEn
institutionInfo.value.desc = res.data.orgIntroduction
institutionInfo.value.name = res.data.orgName
}
} catch (error) {
const res = await getGovOrgBasicInfo(params);
console.log("机构信息", res);
if (res.code === 200 && res.data) {
institutionInfo.value.name = res.data.orgName;
institutionInfo.value.enName = res.data.orgNameEn;
institutionInfo.value.desc = res.data.orgIntroduction;
institutionInfo.value.name = res.data.orgName;
}
}
} catch (error) {}
};
handleGetInfo()
handleGetInfo();
const activeTabName = ref("机构详情");
const tabList = ref([
{
name: "机构详情",
active: true
name: "机构详情"
},
{
name: "深度挖掘",
active: false
name: "深度挖掘"
},
{
name: "对话制裁",
active: false
name: "对华制裁"
}
]);
const handleClickTab = (val, index) => {
tabList.value.forEach(item => {
item.active = false;
});
tabList.value[index].active = true;
const handleClickTab = val => {
activeTabName.value = val.name;
window.sessionStorage.setItem("institutionActiveTabName", val.name);
};
onMounted(() => {
if (window.sessionStorage.getItem("institutionActiveTabName")) {
activeTabName.value = window.sessionStorage.getItem("institutionActiveTabName");
}
});
onUnmounted(() => {
window.sessionStorage.removeItem('institutionActiveTabName')
})
</script>
<style lang="scss" scoped>
......
......@@ -113,7 +113,7 @@
<div class="user-content">
<div class="user-item" v-for="(item, index) in keyUser" :key="index">
<div class="user-item-left">
<img :src="item.avatarUrl" alt="" />
<img :src="item.avatarUrl?item.avatarUrl:DefaultIcon1" alt="" />
</div>
<div class="user-item-right">
<div class="name">{{ item.name }}</div>
......@@ -136,11 +136,13 @@ import User1 from "./assets/images/user1.png";
import User2 from "./assets/images/user2.png";
import User3 from "./assets/images/user3.png";
import User4 from "./assets/images/user4.png";
import DefaultIcon1 from "@/assets/icons/default-icon1.png";
import DefaultIcon2 from "@/assets/icons/default-icon2.png";
import { getGovOrgLatestDynamics, getGovOrgKeyPerson } from "@/api/institution/index";
import { getGovOrgBasicInfo, getGovOrgLatestDynamics, getGovOrgKeyPerson } from "@/api/institution/index";
const route = useRoute()
// 基本信息
const basicInfo = ref({
image: Img,
shijian: "1948年",
......@@ -149,6 +151,28 @@ const basicInfo = ref({
xiashujigou: "工业与安全局、国际贸易管理局、专利商标局等",
zhicaishouduan: "实体清单、军事最终用户清单、​​“301条款”关税、​​“232条款”关税、特别指定国民清单"
});
const handleGetBasicInfo = async () => {
const params = {
id: route.query.id
}
try {
const res = await getGovOrgBasicInfo(params)
console.log('基本信息', res);
if(res.code === 200 && res.data) {
basicInfo.value.image = res.data.logoUrl
basicInfo.value.shijian = res.data.establishmentDate
basicInfo.value.dizhi = res.data.address
basicInfo.value.zhize = res.data.orgIntroduction
basicInfo.value.xiashujigou = res.data.branchOrglist.toString()
basicInfo.value.zhicaishouduan = res.data.taglist.toString()
}
} catch (error) {
}
}
// 关键人物
const keyUser = ref([
......@@ -162,16 +186,6 @@ const keyUser = ref([
// avatarUrl: User2,
// position: "副部长"
// },
// {
// name: "杰弗里·凯斯勒",
// avatarUrl: User3,
// position: "工业与安全局局长"
// },
// {
// name: "约翰·斯奎尔斯",
// avatarUrl: User4,
// position: "专利商标局局长"
// }
]);
const handleGetKeyUser = async () => {
const params = {
......@@ -251,49 +265,7 @@ handleGetKeyUser();
// },
// tagList: ["集成电路"]
// },
// {
// title: "美国商务部:加强对华AI芯片出口限制",
// time: "2025 9月10日",
// content:
// "美国政府要求英特尔、AMD、英伟达等公司对向中国出口的先进AI处理器实施严格的许可证制度。英特尔Gaudi系列芯片等因性能超标明确受限。同时,考虑对中国AI初创企业DeepSeek实施制裁。",
// type: {
// name: "行政令",
// status: 2
// },
// tagList: ["人工智能", "集成电路"]
// },
// {
// title: "美国商务部:BIS更新“实体清单”",
// time: "2025 9月15日",
// content:
// "美国商务部工业和安全局宣布更新《出口管理条例》(EAR),并发布两项最终规则,将25家中国企业及其相关实体列入实体清单。",
// type: {
// name: "实体清单",
// status: 4
// },
// tagList: ["集成电路"]
// },
// {
// title: "美国商务部:​发布针对中国网联汽车的禁令",
// time: "2025 8月25日",
// content: "美国商务部工业与安全局(BIS)发布一项最终规则,禁止涉及销售或进口其认定软件与中国有关联的联网汽车的交易。",
// type: {
// name: "行政令",
// status: 2
// },
// tagList: ["能源", "先进制造"]
// },
// {
// title: "美国商务部:考虑对中国无人机实施新限制",
// time: "2025 8月19日",
// content:
// "美国商务部表示正在考虑制定新规则,以限制或禁止中国无人机在美国境内使用,并就所谓“保护无人机供应链”的潜在规则征求公众意见。",
// type: {
// name: "行政令",
// status: 2
// },
// tagList: ["先进制造"]
// }
// ]);
const dynamicsName = ref("机构动态");
const isCrelated = ref(false);
......@@ -318,6 +290,7 @@ const handleGetLatestDynamics = async () => {
const params = {
orgId: route.query.id,
cRelated: isCrelated.value ? "Y" : "N",
dynamicsType: dynamicsName === '机构动态' ? "org" : "person",
currentPage: 1,
pageSize: 9999999
};
......@@ -330,7 +303,13 @@ const handleGetLatestDynamics = async () => {
}
} catch (error) {}
};
onMounted(() => {
handleGetLatestDynamics();
handleGetBasicInfo()
})
</script>
<style lang="scss" scoped>
......
......@@ -18,17 +18,17 @@
<div class="item">
<div class="item-top">{{ "今年新增" }}</div>
<div class="item-bottom">
<div class="item-bottom-left">{{ "95家" }}</div>
<div class="item-bottom-left">{{ `${box1Info.currentYear.num}家` }}</div>
<div class="item-bottom-center">{{ "/" }}</div>
<div class="item-bottom-right">{{ "1129家" }}</div>
<div class="item-bottom-right">{{ `${box1Info.currentYear.totalNum}家` }}</div>
</div>
</div>
<div class="item">
<div class="item-top">{{ "今年新增" }}</div>
<div class="item-top">{{ "全部企业" }}</div>
<div class="item-bottom">
<div class="item-bottom-left">{{ "95家" }}</div>
<div class="item-bottom-left">{{ `${box1Info.allYear.num}家` }}</div>
<div class="item-bottom-center">{{ "/" }}</div>
<div class="item-bottom-right">{{ "1129家" }}</div>
<div class="item-bottom-right">{{ `${box1Info.allYear.totalNum}家` }}</div>
</div>
</div>
</div>
......@@ -80,17 +80,17 @@
<div class="item">
<div class="item-top">{{ "今年新增" }}</div>
<div class="item-bottom">
<div class="item-bottom-left">{{ "2次" }}</div>
<div class="item-bottom-left">{{ `${box3Info.currentYear.num}次` }}</div>
<div class="item-bottom-center">{{ "/" }}</div>
<div class="item-bottom-right">{{ "6次" }}</div>
<div class="item-bottom-right">{{ `${box3Info.currentYear.totalNum}次` }}</div>
</div>
</div>
<div class="item">
<div class="item-top">{{ "今年新增" }}</div>
<div class="item-top">{{ "全部调查" }}</div>
<div class="item-bottom">
<div class="item-bottom-left">{{ "16次" }}</div>
<div class="item-bottom-left">{{ `${box3Info.allYear.num}次` }}</div>
<div class="item-bottom-center">{{ "/" }}</div>
<div class="item-bottom-right">{{ "91次" }}</div>
<div class="item-bottom-right">{{ `${box3Info.allYear.totalNum}次` }}</div>
</div>
</div>
</div>
......@@ -130,117 +130,245 @@ import { ref, computed, onMounted } from "vue";
import setChart from "@/utils/setChart";
import getPieChart from "./utils/piechart";
import getMultiLineChart from "./utils/multiLineChart";
import { useRoute } from "vue-router";
import {
getGrowthNum,
getGrowthTrend,
getEntityListField,
getGrowth232Num,
getGrowth232Trend,
getSection232Field
} from "@/api/institution/index";
const route = useRoute();
const box1Info = ref({
currentYear: {
num: 0,
totalNum: 0
},
allYear: {
num: 0,
totalNum: 0
}
});
const handleGetGrowthNum = async () => {
const params = {
orgId: route.query.id
// orgId: 54
};
try {
const res = await getGrowthNum(params);
console.log("实体清单增长数量", res);
if (res.code === 200 && res.data) {
box1Info.value.currentYear.num = res.data.filter(item => {
return item.yearType === "currentYear";
})[0].chinaNum;
box1Info.value.currentYear.totalNum = res.data.filter(item => {
return item.yearType === "currentYear";
})[0].allNum;
box1Info.value.allYear.num = res.data.filter(item => {
return item.yearType === "AllYear";
})[0].chinaNum;
box1Info.value.allYear.totalNum = res.data.filter(item => {
return item.yearType === "AllYear";
})[0].allNum;
} else {
console.error(res);
}
} catch (error) {
console.error("获取实体清单数量error", error);
}
};
handleGetGrowthNum();
const box1Data = ref({
title: ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025"],
title: [],
data: [
{
name: "全部实体",
data: [1104, 468, 602, 635, 486, 622, 811, 967, 952, 1104, 1358, 1196]
data: []
},
{
name: "中国实体",
data: [234, 263, 251, 224, 264, 255, 258, 234, 246, 249, 257, 268]
data: []
}
]
});
const handleGetBox1Data = async () => {
const params = {
orgId: route.query.id
// orgId: 54
};
try {
const res = await getGrowthTrend(params);
console.log("实体清单新增数量变数趋势", res);
if (res.code === 200 && res.data) {
box1Data.value.title = res.data.map(item => {
return item.year;
});
box1Data.value.data[0].data = res.data.map(item => {
return item.allNum;
});
box1Data.value.data[1].data = res.data.map(item => {
return item.chinaNum;
});
}
} catch (error) {}
};
const handleBox1 = async () => {
await handleGetBox1Data();
const box1Chart = getMultiLineChart(box1Data.value.title, box1Data.value.data[0].data, box1Data.value.data[1].data);
setChart(box1Chart, "box1Chart");
};
const box2Data = ref([
{
name: "集成电路",
value: 50
},
{
name: "人工智能",
value: 46
},
{
name: "通信网络",
value: 40
},
{
name: "能源",
value: 32
},
{
name: "先进制造",
value: 31
},
{
name: "生物科技",
value: 31
},
{
name: "航空航天",
value: 30
// {
// name: "集成电路",
// value: 50
// },
]);
const handleGetBox2Data = async () => {
const params = {
orgId: route.query.id,
// orgId: 54,
year: 2025
};
try {
const res = await getEntityListField(params);
console.log("实体清单新增企业领域分布", res);
if (res.code === 200 && res.data) {
box2Data.value = res.data.map(item => {
return {
name: item.industry,
value: item.amount
};
});
}
} catch (error) {}
};
const handleBox2 = async () => {
await handleGetBox2Data();
const box2Chart = getPieChart(box2Data.value);
setChart(box2Chart, "box2Chart");
};
const box3Info = ref({
currentYear: {
num: 0,
totalNum: 0
},
{
name: "新材料",
value: 24
allYear: {
num: 0,
totalNum: 0
}
]);
});
const handleGetGrowth232Num = async () => {
const params = {
orgId: route.query.id
// orgId: 54
};
try {
const res = await getGrowth232Num(params);
console.log("232调查新增数量", res);
if (res.code === 200 && res.data) {
box3Info.value.currentYear.num = res.data.filter(item => {
return item.yearType === "currentYear";
})[0].chinaNum;
box3Info.value.currentYear.totalNum = res.data.filter(item => {
return item.yearType === "currentYear";
})[0].allNum;
box3Info.value.allYear.num = res.data.filter(item => {
return item.yearType === "AllYear";
})[0].chinaNum;
box3Info.value.allYear.totalNum = res.data.filter(item => {
return item.yearType === "AllYear";
})[0].allNum;
} else {
console.error(res);
}
} catch (error) {
console.error("获取232调查新增数量error", error);
}
};
handleGetGrowth232Num();
const box3Data = ref({
title: ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025"],
title: [],
data: [
{
name: "全部调查",
data: [856, 456, 568, 631, 667, 631, 532, 589, 631, 668, 672, 630]
data: []
},
{
name: "涉华调查",
data: [188, 195, 198, 205, 208, 214, 218, 223, 216, 219, 211, 204]
data: []
}
]
});
const box4Data = ref([
{
name: "集成电路",
value: 50
},
{
name: "人工智能",
value: 46
},
{
name: "通信网络",
value: 40
},
{
name: "能源",
value: 32
},
{
name: "先进制造",
value: 31
},
{
name: "生物科技",
value: 31
},
{
name: "航空航天",
value: 30
},
{
name: "新材料",
value: 24
}
]);
onMounted(() => {
const box1Chart = getMultiLineChart(box1Data.value.title, box1Data.value.data[0].data, box1Data.value.data[1].data);
setChart(box1Chart, "box1Chart");
const box2Chart = getPieChart(box2Data.value);
setChart(box2Chart, "box2Chart");
const handleGetBox3Data = async () => {
const params = {
orgId: route.query.id
// orgId: 54
};
try {
const res = await getGrowth232Trend(params);
console.log("232调查新增数量变数趋势", res);
if (res.code === 200 && res.data) {
box3Data.value.title = res.data.map(item => {
return item.year;
});
box3Data.value.data[0].data = res.data.map(item => {
return item.allNum;
});
box3Data.value.data[1].data = res.data.map(item => {
return item.chinaNum;
});
}
} catch (error) {}
};
const handleBox3 = async () => {
await handleGetBox3Data();
const box3Chart = getMultiLineChart(box3Data.value.title, box3Data.value.data[0].data, box3Data.value.data[1].data);
setChart(box3Chart, "box3Chart");
};
const box4Data = ref([]);
const handleGetBox4Data = async () => {
const params = {
orgId: route.query.id,
// orgId: 54,
startDate: "2021-01-01"
};
try {
const res = await getSection232Field(params);
console.log("232调查新增企业领域分布", res);
if (res.code === 200 && res.data) {
box4Data.value = res.data.map(item => {
return {
name: item.industry,
value: item.amount
};
});
}
} catch (error) {}
};
const handleBox4 = async () => {
await handleGetBox4Data();
const box4Chart = getPieChart(box4Data.value);
setChart(box4Chart, "box4Chart");
};
onMounted(() => {
handleBox1();
handleBox2();
handleBox3();
handleBox4();
});
</script>
......
......@@ -429,7 +429,9 @@ onMounted(async () => {
.box1-main {
width: 1056px;
height: 1280px;
min-height: 738px;
max-height: 1280px;
padding-bottom: 20px;
margin: 0 auto;
overflow: hidden;
overflow-y: auto;
......
......@@ -145,7 +145,7 @@
</div>
</div>
<div class="right-footer">
<div class="info">{{ total }}智库报告</div>
<div class="info">{{ total }}篇政策建议</div>
<div class="page-box">
<el-pagination :page-size="12" background layout="prev, pager, next" :total="total"
@current-change="handleCurrentChange" :current-page="currentPage" />
......@@ -831,7 +831,8 @@ onMounted(() => {
.right {
width: 1284px;
height: 1670px;
max-height: 1670px;
margin-bottom: 20px;
box-sizing: border-box;
border: 1px solid rgba(234, 236, 238, 1);
border-radius: 10px;
......@@ -841,7 +842,7 @@ onMounted(() => {
.right-main {
margin: 17px auto;
width: 1209px;
height: 1540px;
max-height: 1540px;
.right-main-item {
// height: 154px;
......
......@@ -21,7 +21,10 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
legend: {
show: true,
top: 10,
left:'10%'
left:'10%',
textStyle: {
fontSize: 16
}
},
xAxis: [
{
......
......@@ -14,13 +14,20 @@ const getPieChart = (data) => {
label: {
alignTo: 'edge',
formatter: '{name|{b}}\n{time|{c} 条 {d}%}',
minMargin: 5,
edgeDistance: 10,
lineHeight: 15,
minMargin: 10,
edgeDistance: 20,
lineHeight: 24,
rich: {
name: {
fontSize: 16,
color: 'rgba(59, 65, 75, 1)',
fontFamily: 'Microsoft YaHei',
fontWeight: 700
},
time: {
fontSize: 10,
color: '#999'
fontSize: 16,
color: 'rgba(95, 101, 108, 1)',
fontFamily: 'Microsoft YaHei',
}
}
},
......
......@@ -154,8 +154,8 @@
<div class="box3-main-left" id="box3Chart"></div>
<div class="box3-main-right">
<div class="box3-right-item" v-for="(item, index) in box3RightData" :key="index">
<div class="icon">
<img :src="item.imageUrl" alt="" />
<div class="icon" @click="handleClickPerson">
<img :src="item.imageUrl?item.imageUrl:DefaultIcon1" alt="" />
</div>
<div class="info">
<div class="info-header">
......@@ -188,6 +188,8 @@ import {
import { useRouter } from "vue-router";
import DefaultIcon1 from '@/assets/icons/default-icon1.png'
const router = useRouter();
import InfoImg from "./images/img.png";
import Icon1 from "./images/icon1.png";
......@@ -477,6 +479,17 @@ const handleGetThinkPerson = async () => {
}
};
// 点击人物头像,跳转到人物主页
const handleClickPerson = () => {
const route = router.resolve({
path: "/characterPage",
query: {
type: 3 // 1 2 3
}
});
window.open(route.href, "_blank");
};
onMounted(() => {
handleGetThinkTankInfoBasic()
handleGetThinkTankInfoBranch()
......@@ -950,6 +963,7 @@ onMounted(() => {
width: 48px;
height: 48px;
margin-left: 8px;
cursor: pointer;
img {
width: 100%;
......
......@@ -129,7 +129,7 @@
<div class="title">{{ box1Data[box1DataIndex]?.reportName }}</div>
<div class="tag-box">
<div class="tag" v-for="(item, index) in box1Data[box1DataIndex]?.industryVOList" :key="index">
{{ item }}
{{ item.industryName }}
</div>
</div>
<div class="content">{{ box1Data[box1DataIndex]?.summary }}</div>
......@@ -139,6 +139,7 @@
<div class="logo">
<img :src="box1Data[box1DataIndex]?.thinkTankImage" alt="" />
</div>
<div class="text">{{ box1Data[box1DataIndex]?.thinkTankName }}</div>
<div class="text">{{ box1Data[box1DataIndex]?.reportDate }}</div>
</div>
</div>
......@@ -168,7 +169,7 @@
{{ item.status || "一般风险" }}
</div>
<div class="item-right">
<el-popover effect="dark" :content="item.title" placement="top-start">
<el-popover effect="dark" :width="500" :content="item.title" placement="top-start">
<template #reference>
<div class="text">
{{ item.title }}
......@@ -201,7 +202,7 @@
</div>
</div>
<div class="box3-main">
<div class="box3-item" v-for="(news, index) in newsList" :key="index">
<div class="box3-item" v-for="(news, index) in newsList" :key="index" @click="handleToNewsAnalysis(news)">
<div class="left">
<img :src="news.newsImage !== null ? news.newsImage : defaultNewsIcon" />
</div>
......@@ -211,7 +212,7 @@
<div class="time">{{ news.newsOrg }}</div>
</div>
<el-popover effect="dark" :content="news.newsContent" placement="top-start">
<el-popover effect="dark" :width=700 :content="news.newsContent" placement="top-start">
<template #reference>
<div class="right-footer">{{ news.newsContent }}</div>
</template>
......@@ -242,7 +243,7 @@
</div> -->
<div class="box4-main">
<div class="box4-main-item" v-for="(item, index) in messageList" :key="index">
<div class="left">
<div class="left" @click="handleClickPerson()">
<img :src="item.personImage ? item.personImage : defaultHeaderIcin" alt="" />
</div>
<div class="right">
......@@ -325,14 +326,14 @@
:class="{ itemBold1: index === 0, itemBold2: index === 1, itemBold3: index === 2 }">
{{ index + 1 }}
</div>
<el-popover effect="dark" :content="item.clause" placement="top-start">
<template #reference>
<!-- <el-popover effect="dark" :content="item.clause" placement="top-start">
<template #reference> -->
<div class="item-center"
:class="{ itemBold1: index === 0, itemBold2: index === 1, itemBold3: index === 2 }">
{{ item.clause }}
</div>
</template>
</el-popover>
<!-- </template>
</el-popover> -->
<!-- <div class="item-right">{{ `${item.count}份报告 >` }}</div> -->
</div>
......@@ -1420,6 +1421,34 @@ const handleToMoreRiskSignal = () => {
window.open(route.href, "_blank");
};
// 查看更多新闻资讯
const handleToMoreNews = () => {
const route = router.resolve("/newsBrief");
window.open(route.href, "_blank");
};
// 点击人物头像,跳转到人物主页
const handleClickPerson = () => {
const route = router.resolve({
path: "/characterPage",
query: {
type: 3 // 1 2 3
}
});
window.open(route.href, "_blank");
};
// 点击新闻条目,跳转到新闻分析页
const handleToNewsAnalysis = news => {
const route = router.resolve({
path: "/newsAnalysis",
query: {
newsId: news.newsId
}
});
window.open(route.href, "_blank");
};
const handleToReportDetail = id => {
const route = router.resolve({
name: "ReportDetail",
......@@ -2046,11 +2075,11 @@ onMounted(async () => {
display: flex;
justify-content: flex-end;
gap: 6px;
height: 36px;
.logo {
margin-top: 5px;
width: 16px;
height: 16px;
width: 36px;
height: 36px;
img {
width: 100%;
......@@ -2059,6 +2088,7 @@ onMounted(async () => {
}
.text {
margin-top: 6px;
height: 24px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
......@@ -2392,6 +2422,7 @@ onMounted(async () => {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
}
}
}
......@@ -2529,6 +2560,9 @@ onMounted(async () => {
margin-top: 5px;
width: 36px;
height: 36px;
border-radius: 18px;
overflow: hidden;
cursor: pointer;
img {
width: 100%;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论