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

Merge branch 'master' of http://8.140.26.4:10003/caijian/risk-monitor into dev_hhq

# Conflicts: # src/views/scientificFunding/components/dataSub/index.vue # src/views/scientificFunding/components/resLib/index.vue
......@@ -48,7 +48,7 @@ export function getCoopRestrictionNews(params) {
export function getCoopRestrictionSocial(params) {
return request({
method: 'GET',
url: `/api/commonFeature/social/${params.moduleId}`
url: `/api/commonFeature/remarks/${params.moduleId}`
})
}
......@@ -95,4 +95,58 @@ export function getCoopRestrictionList(params) {
url: `/api/cooperationlimitinfo/statList`,
params
})
}
\ No newline at end of file
}
// 合作限制-查询简介接口
/**
* @param {limitId} 合作限制ID
* @header token
*/
export function getCoopRestrictionIntroduction(params) {
return request({
method: 'GET',
url: `/api/cooperationlimitinfo/searchBlurb`,
params
})
}
// 合作限制-相关实体接口
/**
* @param {limitId} 合作限制ID
* @header token
*/
export function getCoopRestrictionRelated(params) {
return request({
method: 'GET',
url: `/api/cooperationlimitinfo/getLimitEntity`,
params
})
}
// 合作限制-背景分析接口
/**
* @param {limitId} 合作限制ID
* @header token
*/
export function getCoopRestrictionBackground(params) {
return request({
method: 'GET',
url: `/api/cooperationlimitinfo/getLimitBackGround`,
params
})
}
// 合作限制-限制条款接口
/**
* @param {limitId} 合作限制ID
* @header token
*/
export function getCoopRestrictionClause(params) {
return request({
method: 'GET',
url: `/api/cooperationlimitinfo/getLimitClause`,
params
})
}
......@@ -36,6 +36,18 @@ export function getDecreeOrganization(params) {
})
}
// 发布机构
/**
* @param {id}
*/
export function getDecreeIssueOrganization(params) {
return request({
method: 'GET',
url: `/api/administrativeOrderInfo/issueOrganization/${params.id}`,
params
})
}
// 获取全局信息
/**
* @param {id}
......
......@@ -79,26 +79,19 @@ export function getIndustryCountByYear(sanTypeId) {
/**
* 不同领域每年数量
* @returns {Promise<{
* data:{
* year?: number
* domainNum: {
* [ key: string]: number;
* }
* }[]
* domains: string[]
* }>}
* @param {Object} data - 请求参数
* @param {boolean} data.isRule - 是否为规则
* @param {string} [data.startYear="2020"] - 开始年份
* @param {string} [data.endYear] - 结束年份
* @param {number} [data.sanTypeId=1] - 制裁类型ID
* @returns {Promise}
*/
export function getCountDomainByYear(isRule, startYear = "2020", endYear = String(new Date().getFullYear())) {
export function getCountDomainByYear(data) {
return request200(
request({
method: "POST",
url: "/api/entitiesDataCount/getAnnualSanDomain",
data: {
isRule,
startYear,
endYear
}
data
})
);
}
......@@ -128,7 +121,7 @@ export function getSanctionsInfoCount() {
* sanReason: string
* }[]>}
*/
export function getSanctionProcess(typeName = "实体清单", pageNum = 1, pageSize = 10) {
export function getSanctionProcess(typeName = "实体清单", pageNum = 1, pageSize = 10,isCn = false) {
return request200(
request({
method: "POST",
......@@ -136,7 +129,8 @@ export function getSanctionProcess(typeName = "实体清单", pageNum = 1, pageS
data: {
typeName,
pageNum,
pageSize
pageSize,
isCn
}
})
);
......@@ -498,14 +492,17 @@ export function getEntitiesUpdateCount(sanTypeId = 1) {
/**
* 制裁领域分析
* @param {string} rule - 规则
* @param {string} type - 类型
*/
export function getSanDomainCount(rule) {
export function getSanDomainCount(rule, type) {
return request200(
request({
method: "GET",
url: "/api/entitiesDataCount/getSanDomainCount",
params: {
rule
rule,
type
}
})
);
......
import request from "@/api/request.js";
// 实体清单-制裁概况-获取实体清单基本信息
export function getEntityInfo() {
export function getEntityInfo(sanType) {
return request({
method: 'GET',
url: `/api/sanctionList/baseInfo/el`
url: `/api/sanctionList/baseInfo/${sanType}`
})
}
......
......@@ -6,7 +6,12 @@
</div>
<div class="menu-item-text">{{ "首页" }}</div>
</div>
<div class="menu-item" @click="handleToGjOverview">
<div
class="menu-item"
@click="handleToGjOverview"
@mouseenter="handleIsShowCountryMore(true)"
@mouseleave="handleIsShowCountryMore(false)"
>
<div class="menu-item-icon1">
<img src="@/assets/icons/home-header-icon2.png" alt="" />
</div>
......@@ -31,24 +36,129 @@
<div class="menu-item-text">{{ "事件" }}</div>
</div>
</div>
<div
class="more-wrapper"
v-if="isShowCountryMore"
@mouseenter="handleIsShowCountryMore(true)"
@mouseleave="handleIsShowCountryMore(false)"
>
<div class="left">
<div class="left-header">
<div class="title">{{ "中美科技博弈概览" }}</div>
<div class="icon">
<img src="@/assets/icons/more.png" alt="" />
</div>
</div>
<div class="left-main">
<div class="item" v-for="(item, index) in leftList" :key="index" @click="handleClickItem(item)">
<div class="icon"></div>
<div class="text">{{ item.name }}</div>
</div>
</div>
</div>
<div class="right">
<div class="right-header">
<div class="title">{{ "风险检测" }}</div>
<div class="icon">
<img src="@/assets/icons/more.png" alt="" />
</div>
</div>
<div class="right-main">
<div class="item" v-for="(item, index) in rightList" :key="index">
<div class="icon"></div>
<div class="text">{{ item.name }}</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import {ref, onMounted} from 'vue'
import router from '@/router';
import { ref, onMounted } from "vue";
import router from "@/router";
const isShowCountryMore = ref(false);
const handleIsShowCountryMore = isShow => {
isShowCountryMore.value = isShow;
};
const handleToOverview = () => {
router.push({
path: "/overview"
});
}
};
const handleToGjOverview = () => {
router.push({
path: "/gjOverview"
});
}
};
const leftList = ref([
{
name: "科技法案",
path: "/billHome"
},
{
name: "政令",
path: "/decree"
},
{
name: "美国科技智库",
path: "/thinkTank"
},
{
name: "出口管制",
path: "/exportControl"
},
{
name: "投融资限制",
path: "/finance"
},
{
name: "市场准入限制",
path: "/marketAccessRestrictions"
},
{
name: "合作限制",
path: "/cooperationRestrictions"
},
{
name: "规则限制",
path: "/ruleRestrictions"
},
{
name: "美国主要创新主体",
path: "/innovationSubject"
},
{
name: "美国科技人物观点",
path: "/technologyFigures"
},
{
name: "美国科研资助体系",
path: "/scientificFunding"
}
]);
const handleClickItem = item => {
const curRoute = router.resolve({
path: item.path
});
window.open(curRoute.href, "_blank");
};
const rightList = ref([
{
name: "科技战略布局",
path: ""
},
{
name: "创新体系位势分析",
path: ""
}
]);
</script>
<style lang="scss" scoped>
......@@ -57,6 +167,7 @@ const handleToGjOverview = () => {
height: 64px;
display: flex;
justify-content: space-between;
.menu-item {
display: flex;
gap: 11px;
......@@ -65,8 +176,8 @@ const handleToGjOverview = () => {
justify-content: center;
align-items: center;
cursor: pointer;
&:hover{
background: rgba(5, 95, 194, 0.2);
&:hover {
background: var(--color-main-active);
}
.menu-item-icon {
// margin-top: 2px;
......@@ -126,4 +237,162 @@ const handleToGjOverview = () => {
}
}
}
.more-wrapper {
position: absolute;
z-index: 99999;
top: 64px;
left: 0;
width: 100%;
height: 299px;
background: #fff;
display: flex;
.left {
margin-top: 35px;
margin-left: 179px;
width: 769px;
height: 218px;
.left-header {
display: flex;
height: 26px;
align-items: center;
.title {
width: 160px;
height: 26px;
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-style: Bold;
font-size: 20px;
font-weight: 700;
line-height: 26px;
letter-spacing: 0px;
text-align: left;
}
.icon {
margin-top: -8px;
margin-left: 8px;
width: 10px;
height: 10px;
img {
width: 100%;
height: 100%;
}
}
}
.left-main {
height: 192px;
display: flex;
flex-wrap: wrap;
.item {
margin-top: 18px;
display: flex;
width: 256px;
height: 36px;
align-items: center;
cursor: pointer;
&:hover {
background: var(--color-bg-hover);
.icon {
background: var(--color-main-active) !important;
}
.text {
color: var(--color-main-active) !important;
font-weight: 700;
font-size: 20px;
}
}
.icon {
width: 6px;
height: 6px;
border-radius: 3px;
background: rgba(95, 101, 108, 1);
}
.text {
margin-left: 10px;
height: 24px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-style: Regular;
font-size: 18px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
}
}
}
.right {
margin-top: 35px;
margin-left: 53px;
width: 192px;
height: 116px;
.right-header {
display: flex;
height: 26px;
align-items: center;
.title {
width: 80px;
height: 26px;
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-style: Bold;
font-size: 20px;
font-weight: 700;
line-height: 26px;
letter-spacing: 0px;
text-align: left;
}
.icon {
margin-top: -8px;
margin-left: 8px;
width: 10px;
height: 10px;
img {
width: 100%;
height: 100%;
}
}
}
.right-main {
.item {
margin-top: 18px;
display: flex;
width: 256px;
height: 36px;
align-items: center;
cursor: pointer;
&:hover {
background: var(--color-bg-hover);
.icon {
background: var(--color-main-active) !important;
}
.text {
color: var(--color-main-active) !important;
font-weight: 700;
font-size: 20px;
}
}
.icon {
width: 6px;
height: 6px;
border-radius: 3px;
background: rgba(95, 101, 108, 1);
}
.text {
margin-left: 10px;
height: 24px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-style: Regular;
font-size: 18px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
}
}
}
}
</style>
\ No newline at end of file
......@@ -439,6 +439,45 @@ onMounted(() => {
.btn {
margin-left: 8px;
}
:deep(.el-button) {
height: 28px;
padding: 2px 8px;
border-radius: 4px;
font-size: 16px;
font-weight: 400;
font-family: Microsoft YaHei;
line-height: 24px;
}
:deep(.el-button--primary.is-plain) {
background-color: #f0f7ff;
border-color: rgb(5, 95, 194);
color: rgb(5, 95, 194);
border-width: 1px;
&:hover,
&:focus {
background-color: #f0f7ff;
border-color: rgb(5, 95, 194);
color: rgb(5, 95, 194);
}
}
:deep(.el-button--info.is-plain) {
background-color: #fff;
border-color: rgb(230, 231, 232);
color: rgb(59, 65, 75);
&:hover,
&:focus {
background-color: #fff;
border-color: rgb(230, 231, 232);
color: rgb(59, 65, 75);
}
}
}
.header-right {
......@@ -469,8 +508,8 @@ onMounted(() => {
width: 1150px;
height: 415px;
background: #fff;
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.box1-main {
.box1-main-center {
margin: 0 22px;
......@@ -556,8 +595,8 @@ onMounted(() => {
width: 1150px;
height: 415px;
background: #fff;
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.box2-main {
// margin-top: 9px;
width: 1110px;
......@@ -662,8 +701,8 @@ onMounted(() => {
width: 576px;
height: 845px;
background: #fff;
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.background-wrap-right-main {
.right-box1 {
height: 365px;
......
......@@ -280,7 +280,7 @@
<div class="box3-main">
<div
class="box3-item"
v-for="(news, index) in newsList"
v-for="(news, index) in newsList.slice(0, 5)"
:key="index"
@click="handleClickToNewsDetail(news)"
>
......@@ -689,6 +689,11 @@
style="width: 120px"
@change="handlePxChange"
>
<template #prefix>
<div style="display: flex; align-items: center; height: 100%">
<img :src="desc" style="width: 14px; height: 14px" />
</div>
</template>
<el-option
v-for="item in releaseTimeList"
:key="item.value"
......@@ -703,10 +708,9 @@
class="right-main-box"
v-for="(item, index) in bills"
:key="index"
@click="handleClickToDetailO(item)"
>
<div class="header">
<div class="title">{{ item.name }}</div>
<div class="title" @click="handleClickToDetailO(item)">{{ item.name }}</div>
<div class="en-title">{{ item.eName }}</div>
</div>
<div class="main">
......@@ -726,7 +730,9 @@
</div>
<div class="item">
<div class="item-left">{{ "最新动议:" }}</div>
<div class="item-right">{{ item.zxdy }}</div>
<div class="item-right">
<CommonPrompt :content="item.zxdy" />
</div>
</div>
<div class="item">
<div class="item-left">{{ "法案进展:" }}</div>
......@@ -801,20 +807,14 @@ import getDoublePieChart from "./utils/doublePieChart";
import defaultNew from "../assets/images/default-icon-news.png";
import News1 from "./assets/images/news1.png";
import News2 from "./assets/images/news2.png";
import News3 from "./assets/images/news3.png";
import News4 from "./assets/images/news4.png";
import News5 from "./assets/images/news5.png";
import defaultIcon01 from "../../../assets/icons/default-icon1.png";
import desc from "./assets/icons/icon-desc.png";
import Message1 from "./assets/images/message-icon1.png";
import Message2 from "./assets/images/message-icon2.png";
import Message3 from "./assets/images/message-icon3.png";
import Box8Img1 from "./assets/images/box8-icon1.png";
import Box8Img2 from "./assets/images/box8-icon2.png";
import Box8Img3 from "./assets/images/box8-icon3.png";
import Box8Img4 from "./assets/images/box8-icon4.png";
import Box8Img5 from "./assets/images/box8-icon5.png";
import Cyy from "@/assets/icons/cyy.png";
import Zyy from "@/assets/icons/zyy.png";
......@@ -922,6 +922,7 @@ const currentPage = ref(1);
const handleCurrentChange = page => {
currentPage.value = page;
handleGetBills();
handleToPosi("position4");
};
const containerRef = ref(null);
......@@ -1468,6 +1469,7 @@ const box9YearList = ref([
}
]);
const box9HasData = ref(true);
let box9ChartInstance = null;
const getBox9Data = async () => {
const params = {
year: box9selectetedTime.value
......@@ -1499,7 +1501,7 @@ const handleBox9Data = async () => {
};
})
);
setChart(box9Chart, "box9Chart");
box9ChartInstance = setChart(box9Chart, "box9Chart");
}
};
......@@ -1712,7 +1714,12 @@ const handleSearch = () => {
window.open(curRoute.href, "_blank");
};
const handleResize = () => {
box9ChartInstance && box9ChartInstance.resize();
};
onMounted(async () => {
window.addEventListener("resize", handleResize);
handleGetHylyList();
// 获取风险信号
handleGetBillRiskSignal();
......@@ -1742,7 +1749,9 @@ onMounted(async () => {
handleBox9Data();
});
onUnmounted(() => {});
onUnmounted(() => {
window.removeEventListener("resize", handleResize);
});
</script>
<style lang="scss" scoped>
......@@ -1751,7 +1760,7 @@ onUnmounted(() => {});
}
.home-wrapper {
width: 100%;
height: calc(100vh - 96px);
height: 100%;
position: relative;
overflow-y: hidden;
.search-header {
......@@ -2539,7 +2548,7 @@ onUnmounted(() => {});
}
.box3-main {
height: 402px;
overflow-y: auto;
overflow-y: hidden;
overflow-x: hidden;
padding-top: 6px;
.box3-item {
......@@ -2663,6 +2672,7 @@ onUnmounted(() => {});
overflow-y: auto;
box-sizing: border-box;
padding-top: 8px;
padding-bottom: 20px;
.box4-main-item {
margin-top: 16px;
display: flex;
......@@ -2788,12 +2798,6 @@ onUnmounted(() => {});
.box5-main {
height: 397px;
}
// .box5-select {
// position: absolute;
// top: 53px;
// left: 100px;
// z-index: 100;
// }
}
.box6 {
margin-left: 20px;
......@@ -2996,26 +3000,19 @@ onUnmounted(() => {});
}
}
}
// .box-center {
// height: 45px;
// padding-right: 20px;
// display: flex;
// align-items: center;
// justify-content: flex-end;
// }
.box8-main {
height: 380px;
overflow-y: auto;
overflow-x: hidden;
overflow: hidden;
padding: 20px;
.box8-main-item {
margin: 0 auto;
// margin: 0 auto;
width: 478px;
height: 51px;
margin-bottom: 16px;
margin-bottom: 20px;
display: flex;
align-items: center;
position: relative;
padding: 0 10px;
// padding: 0 10px;
cursor: pointer;
&:hover {
background: var(--color-bg-hover);
......@@ -3165,6 +3162,7 @@ onUnmounted(() => {});
}
.box9-main {
height: 380px;
padding: 10px 20px;
}
}
}
......@@ -3319,8 +3317,8 @@ onUnmounted(() => {});
background: rgba(255, 255, 255, 1);
margin-bottom: 16px;
overflow: hidden;
overflow-y: auto;
cursor: pointer;
// overflow-y: auto;
// cursor: pointer;
.header {
height: 91px;
width: 1200px;
......@@ -3328,8 +3326,7 @@ onUnmounted(() => {});
border-bottom: 1px solid rgba(234, 236, 238, 1);
padding-top: 19px;
.title {
// margin-top: 19px;
// padding-top: 19px;
cursor: pointer;
height: 26px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
......
......@@ -39,7 +39,7 @@ const getPieChart = (data, colorList) => {
maxSurfaceAngle: 80
},
labelLayout: function (params) {
const isLeft = params.labelRect.x < 556 / 2;
const isLeft = params.labelRect.x < params.viewWidth / 2;
const points = params.labelLinePoints;
// Update the end point.
points[2][0] = isLeft
......
......@@ -2,7 +2,8 @@
<div class="layout-container">
<!-- 导航菜单 -->
<div class="layout-main">
<div class="layout-main-header">
<div class="header-main">
<div class="layout-main-header">
<div class="layout-main-header-left-box">
<div class="left-box-top">
<div class="icon">
......@@ -68,16 +69,18 @@
</div> -->
</div>
</div>
</div>
</div>
<div class="layout-main-center">
<router-view />
</div>
</div>
<div class="layout-report-box" v-if="activeName === '法案原文'">
<div class="report-close" @click="handleSwitchActiveName('分析报告')">
<img src="./assets/images/report-close-icon.png" alt="" />
</div>
<div class="report-main">
<div class="report-close" @click="handleSwitchActiveName('分析报告')">
<img src="./assets/images/report-close-icon.png" alt="" />
</div>
<div class="report-header">
<div class="report-header-left">
<!-- <div class="text">法案版本:</div>
......@@ -210,18 +213,18 @@ const mainHeaderBtnList = ref([
name: "深度挖掘",
path: "/billLayout/deepDig"
},
{
icon: icon3,
activeIcon: icon3Active,
name: "影响分析",
path: "/billLayout/influence"
},
{
icon: icon4,
activeIcon: icon4Active,
name: "相关情况",
path: "/billLayout/relevantCircumstance"
}
// {
// icon: icon3,
// activeIcon: icon3Active,
// name: "影响分析",
// path: "/billLayout/influence"
// },
// {
// icon: icon4,
// activeIcon: icon4Active,
// name: "相关情况",
// path: "/billLayout/relevantCircumstance"
// }
]);
const activeTitle = ref("法案概况");
......@@ -247,164 +250,35 @@ onMounted(() => {
<style lang="scss" scoped>
.layout-container {
width: 1920px;
height: 1016px;
width: 100%;
// height: 1016px;
background: rgba(249, 250, 252, 1);
position: relative;
// margin: 0 auto;
.layout-header {
width: 1920px;
height: 64px;
// background: #0a121e;
background: #fff;
// border-bottom: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1);
// margin-bottom: 13px;
display: flex;
position: relative;
z-index: 99;
.layout-header-left {
width: 480px;
display: flex;
.logo-box {
width: 36px;
height: 36px;
margin: 14px;
img {
width: 100%;
height: 100%;
border-radius: 6px;
}
}
.title-box {
height: 64px;
width: 350px;
margin: 0 5px;
color: #eee;
line-height: 64px;
font-size: 20px;
font-weight: bold;
color: rgba(10, 18, 30, 1);
font-family: Microsoft YaHei;
font-size: 22px;
font-weight: 700;
text-align: left;
}
}
.layout-header-center {
width: 700px;
display: flex;
justify-content: space-between;
margin-left: 200px;
.nav-item {
border-radius: 5px;
cursor: pointer;
display: flex;
&:hover {
background: rgba(255, 255, 255, 0.2);
}
.nav-icon-box {
width: 25px;
height: 25px;
margin: 22px 0 20px 5px;
.nav-icon {
width: 20px;
height: 20px;
img {
width: 100%;
height: 100%;
}
}
.nav-icon-active {
width: 20px;
height: 20px;
img {
width: 100%;
height: 100%;
}
}
}
.name-box {
margin: 18px 5px;
height: 30px;
text-align: center;
line-height: 30px;
color: rgba(59, 65, 75, 1);
letter-spacing: 2px;
font-size: 18px;
}
// .nameActive {
// color: #ea9518;
// font-weight: bold;
// }
}
.navItemActive {
// background: #295dab;
// border-bottom: 4px solid #ea9518;
// &:hover {
// background: #295dab;
// border-bottom: 4px solid #ea9518;
// }
}
}
.layout-header-right {
flex: 1;
display: flex;
justify-content: flex-end;
.nav-search {
width: 22px;
height: 22px;
margin: 21px 0;
}
.nav-message {
width: 22px;
height: 22px;
margin: 21px 30px;
}
.nav-usr {
width: 110px;
display: flex;
height: 40px;
margin: 12px 5px 12px 0;
.usr-img {
margin-top: 4px;
height: 32px;
width: 32px;
background: rgba(255, 255, 255, 0.5);
border-radius: 100%;
box-sizing: border-box;
padding: 4px;
// img {
// width: 100%;
// height: 100%;
// }
}
.usr-info {
height: 40px;
line-height: 40px;
text-align: center;
font-size: 14px;
margin-left: 10px;
}
}
}
}
.layout-main {
width: 100%;
height: calc(100% - 64px);
height: calc(100vh - 64px);
overflow-y: auto;
.header-main {
position: sticky;
top: 0;
z-index: 1000;
width: 100%;
background-color: #fff;
box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.05);
overflow: hidden;
}
.layout-main-header {
height: 137px;
background: rgba(255, 255, 255, 1);
width: 1744px;
background: #fff;
display: flex;
justify-content: space-between;
margin: 0 auto;
padding: 14px 0;
.layout-main-header-left-box {
width: 900px;
margin-left: 160px;
margin-top: 13px;
// margin-left: 160px;
// margin-top: 13px;
.left-box-top {
height: 64px;
display: flex;
......@@ -489,8 +363,8 @@ onMounted(() => {
}
.layout-main-header-right-box {
width: 600px;
margin-right: 150px;
margin-top: 19px;
// margin-right: 150px;
// margin-top: 19px;
.right-box-top {
.time {
height: 24px;
......@@ -651,7 +525,10 @@ onMounted(() => {
}
}
.layout-main-center {
height: calc(100% - 137px);
// height: calc(100% - 137px);
width: 1744px;
margin: 0 auto;
padding-bottom: 100px;
}
}
.layout-report-box {
......@@ -662,25 +539,28 @@ onMounted(() => {
width: 100%;
height: 926px;
background: rgba(248, 249, 250, 1);
.report-close {
position: absolute;
top: 24px;
right: 178px;
width: 32px;
height: 32px;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
}
.report-main {
width: 1600px;
position: relative;
width: 1744px;
height: 926px;
margin: 0 auto;
background: #fff;
box-sizing: border-box;
padding: 0 69px;
// border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.report-close {
position: absolute;
top: 24px;
right: 24px;
width: 32px;
height: 32px;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
}
.report-header {
height: 77px;
border-bottom: 1px solid rgba(240, 242, 244, 1);
......
......@@ -65,9 +65,13 @@ const handleClickLeftSiderBtn = (item,index) => {
.wrap {
display: flex;
height: 879px;
position: relative;
// background: (243, 243, 244, 1);
.sider {
width: 160px;
position: absolute;
top: 0;
left: -160px;
.sider-btn {
margin-top: 20px;
margin-left: 20px;
......
......@@ -777,7 +777,7 @@ onMounted(async () => {
height: 415px;
background: rgb(255, 255, 255);
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.box1-main {
height: 359px;
.box1-main-center {
......@@ -897,7 +897,7 @@ onMounted(async () => {
height: 415px;
background: rgb(255, 255, 255);
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.box2-main {
height: 359px;
.box2-main-center {
......@@ -1051,77 +1051,6 @@ onMounted(async () => {
}
}
}
// .box2-main-center-content {
// height: 264px;
// display: flex;
// flex-wrap: wrap;
// justify-content: space-between;
// .box2-item {
// width: 402px;
// height: 58px;
// box-sizing: border-box;
// border: 1px solid rgba(243, 243, 244, 1);
// border-radius: 4px;
// margin-bottom: 8px;
// display: flex;
// .box2-item-left {
// width: 36px;
// height: 36px;
// margin-left: 16px;
// margin-top: 11px;
// img {
// width: 100%;
// height: 100%;
// }
// }
// .box2-item-center {
// margin-left: 14px;
// margin-top: 5px;
// width: 220px;
// .box2-item-center-top {
// height: 24px;
// color: rgba(59, 65, 75, 1);
// font-family: Microsoft YaHei;
// font-size: 14px;
// font-weight: 600;
// line-height: 24px;
// }
// .box2-item-center-bottom {
// height: 24px;
// color: rgba(132, 136, 142, 1);
// font-family: Microsoft YaHei;
// font-size: 14px;
// font-weight: 400;
// line-height: 24px;
// }
// }
// .box2-item-right {
// margin-left: 2px;
// .box2-item-right-top {
// height: 24px;
// color: rgba(206, 79, 81, 1);
// font-family: Microsoft YaHei;
// font-size: 14px;
// font-weight: 600;
// line-height: 24px;
// }
// .box2-item-right-bottom {
// height: 24px;
// color: rgba(132, 136, 142, 1);
// font-family: Microsoft YaHei;
// font-size: 14px;
// font-weight: 400;
// line-height: 24px;
// text-align: right;
// }
// }
// }
// }
// .box2-main-center-footer {
// height: 36px;
// display: flex;
// justify-self: center;
// }
}
.box2-main-footer {
width: 830px;
......@@ -1181,7 +1110,7 @@ onMounted(async () => {
width: 100%;
height: 100%;
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.box3-main {
height: 791px;
.box3-main-center {
......
<template>
<div class="home-container">
<!-- <div class="home-top">
<div class="home-top-left-box">
<div class="left-box-top">
<div class="icon">
<img src="./assets/images/USA-logo.png" alt="" />
</div>
<div class="info">
<div class="info-box1">{{ "H.R.1(119th)-大而美法案" }}</div>
<div class="info-box2">
{{ "第119届美国国会众议院第1号法案 One Big Beautiful Bill Act" }}
</div>
</div>
</div>
<div class="left-box-bottom">
<div
class="left-box-bottom-item"
style="border-bottom: 2px solid rgba(22, 119, 255, 1)"
>
<div class="icon">
<img src="./assets/icons/icon1.png" alt="" />
</div>
<div class="name" style="color: rgba(22, 119, 255, 1)">
法案概况
</div>
</div>
<div class="left-box-bottom-item">
<div class="icon">
<img src="./assets/icons/icon2.png" alt="" />
</div>
<div class="name">深度挖掘</div>
</div>
<div class="left-box-bottom-item">
<div class="icon">
<img src="./assets/icons/icon3.png" alt="" />
</div>
<div class="name">影响分析</div>
</div>
<div class="left-box-bottom-item">
<div class="icon">
<img src="./assets/icons/icon4.png" alt="" />
</div>
<div class="name">相关情况</div>
</div>
</div>
</div>
<div class="home-top-right-box">
<div class="right-box-top">
<div class="time">{{ "2025年7月" }}</div>
<div class="name">{{ "乔迪·阿灵顿(Jodey Arrington)​​ " }}</div>
</div>
<div class="right-box-bottom">
<el-button type="plain" size="large" icon="Search"
>法案原文</el-button
>
<el-button type="primary" size="large" icon="EditPen"
>分析报告</el-button
>
</div>
</div>
</div> -->
<div class="home-center">
<div class="home-sider">
<div
......@@ -226,8 +166,12 @@ onMounted(() => {});
.home-center {
display: flex;
height: 879px;
position: relative;
.home-sider {
width: 160px;
position: absolute;
top: 0;
left: -160px;
.sider-btn {
margin-top: 20px;
margin-left: 20px;
......
......@@ -58,9 +58,13 @@ const handleClickLeftSiderBtn = (item,index) => {
.influence-wrap {
display: flex;
height: 879px;
position: relative;
// background: (243, 243, 244, 1);
.sider {
width: 160px;
position: absolute;
top: 0;
left: -160px;
.sider-btn {
margin-top: 20px;
margin-left: 10px;
......
......@@ -811,7 +811,8 @@ onMounted(async () => {
width: 480px;
height: 848px;
background: rgba(255, 255, 255);
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.left-top {
margin: 0 auto;
width: 446px;
......@@ -949,7 +950,8 @@ onMounted(async () => {
width: 1247px;
height: 847px;
background: rgba(255, 255, 255);
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
position: relative;
.graph-dialog {
width: 740px;
......
......@@ -16,7 +16,7 @@
</div>
<div class="box1-main">
<div class="box1-left">
<img src="./assets/images/image1.png" alt="" />
<img :src=" basicInfo.imageUrl || defaultBill" alt="" />
</div>
<div class="box1-right">
<div class="box1-right-item">
......@@ -31,9 +31,6 @@
<div class="box1-right-item">
<div class="item-left">相关领域:</div>
<div class="item-right1">
<!-- <div class="right1-item">跨境电商</div>
<div class="right1-item">新能源产业</div>
<div class="right1-item">半导体产业</div> -->
<div class="right1-item" v-for="item in basicInfo.hylyList" :key="item">{{ item }}</div>
</div>
</div>
......@@ -355,6 +352,7 @@ import STimeline from "./STimeline.vue";
import { getBillInfo, getBillPerson, getBillEvent, getBillDyqk } from "@/api/bill";
import defaultAvatar from "../assets/images/default-icon1.png";
import defaultNew from "../assets/images/default-icon-news.png";
import defaultBill from "./assets/images/image1.png"
const route = useRoute();
const router = useRouter();
......@@ -377,13 +375,6 @@ const handleClcikDialogBoxBtn = index => {
dialogBoxBtnActive.value = index;
};
const handleChangeFaId = val => {
console.log("val", val);
handleGetBillPerson(val);
};
const timelineData = ref([]);
const isShowDialog = ref(false);
......@@ -521,7 +512,7 @@ onMounted(() => {
height: 415px;
background: #fff;
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.box1-main {
display: flex;
height: 394px;
......@@ -529,6 +520,10 @@ onMounted(() => {
margin-left: 23px;
width: 247px;
height: 350px;
img {
width: 100%;
height: 100%;
}
}
.box1-right {
margin-left: 31px;
......@@ -542,49 +537,38 @@ onMounted(() => {
width: 100px;
height: 14px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 600;
font-family: "Microsoft YaHei";
font-size: 16px;
font-weight: 700;
line-height: 14px;
text-align: left;
}
.item-right {
height: 14px;
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 600;
font-family: "Microsoft YaHei";
font-size: 16px;
font-weight: 700;
line-height: 14px;
letter-spacing: 0px;
text-align: left;
}
.item-right1 {
display: flex;
flex-wrap: wrap;
align-items: center;
width: 700px;
height: 40px;
overflow-x: auto;
overflow-y: hidden;
&::-webkit-scrollbar {
height: 4px;
}
&::-webkit-scrollbar-thumb {
border-radius: 4px;
background: #e1e1e1;
}
&::-webkit-scrollbar-track {
background: transparent;
}
min-height: 40px;
.right1-item {
flex-shrink: 0;
margin-right: 10px;
margin-bottom: 8px;
padding: 1px 8px;
box-sizing: border-box;
border: 1px solid rgba(186, 224, 255, 1);
border-radius: 4px;
background: rgba(230, 244, 255, 1);
color: rgba(22, 119, 255, 1);
font-family: Microsoft YaHei;
font-family: "Microsoft YaHei";
font-size: 14px;
font-weight: 400;
line-height: 20px;
......@@ -594,8 +578,8 @@ onMounted(() => {
.right2-item {
height: 14px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-family: "Microsoft YaHei";
font-size: 16px;
font-weight: 400;
line-height: 14px;
text-align: left;
......@@ -605,8 +589,8 @@ onMounted(() => {
.item-right3 {
height: 14px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-family: "Microsoft YaHei";
font-size: 16px;
font-weight: 400;
line-height: 14px;
text-align: left;
......@@ -619,7 +603,7 @@ onMounted(() => {
.step {
height: 28px;
line-height: 26px;
font-size: 14px;
font-size: 16px;
text-align: center;
position: relative;
background: transparent;
......@@ -703,7 +687,7 @@ onMounted(() => {
height: 415px;
background: #fff;
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
position: relative;
.box2-main {
margin-top: 10px;
......@@ -842,7 +826,7 @@ onMounted(() => {
height: 845px;
background: #fff;
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
.introduction-wrap-right-main {
.right-main-box1 {
// height: 218px; 将选择框去掉后高度变化
......
......@@ -596,7 +596,7 @@ onMounted(() => {
width: 100%;
height: 100%;
display: flex;
padding: 16px 160px;
padding: 16px 0px;
justify-content: space-between;
.box-header {
height: 45px;
......@@ -680,10 +680,10 @@ onMounted(() => {
}
}
.left {
width: 1068px;
width: 1212px;
height: 847px;
border-radius: 4px;
box-shadow: 0px 0px 15px 0px rgba(60, 87, 126, 0.2);
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.box1 {
position: relative;
......@@ -721,7 +721,7 @@ onMounted(() => {
}
}
.box1-main {
width: 1068px;
width: 1212px;
height: 730px;
// background: orange;
}
......@@ -773,8 +773,8 @@ onMounted(() => {
.right {
width: 520px;
height: 848px;
border-radius: 4px;
box-shadow: 0px 0px 15px 0px rgba(60, 87, 126, 0.2);
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.box2 {
.box2-main {
......
......@@ -103,7 +103,7 @@
<div class="right-box1">
<div class="box-header">
<div class="box-header-left"></div>
<div class="box-header-title">限制方式</div>
<div class="box-header-title">限制手段</div>
<div class="header-right">
<div class="icon">
<img src="@/assets/icons/box-header-icon1.png" alt="" />
......@@ -130,7 +130,7 @@
<div class="right-box2">
<div class="box-header">
<div class="box-header-left"></div>
<div class="box-header-title">涉及行业</div>
<div class="box-header-title">涉及领域</div>
<div class="header-right">
<div class="icon">
<img src="@/assets/icons/box-header-icon1.png" alt="" />
......@@ -430,7 +430,8 @@ onMounted(async () => {
margin-top: 16px;
width: 1150px;
height: 845px;
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.left-top {
height: 45px;
......@@ -599,7 +600,8 @@ onMounted(async () => {
.right-box1 {
width: 576px;
height: 415px;
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.right-box1-main {
width: 576px;
......@@ -655,7 +657,8 @@ onMounted(async () => {
margin-top: 15px;
width: 576px;
height: 415px;
border-radius: 4px;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.right-box2-main {
width: 576px;
......
......@@ -166,7 +166,7 @@ const tabList = ref([
{
name: "新闻",
id: 8
},
}
// {
// name: "社媒",
// id: 9
......@@ -304,58 +304,61 @@ const handleSearch = async () => {
} catch (error) {}
};
const handleToPage = async (item) => {
if(item.typeStr === '人物') {
const personTypeList = JSON.parse(window.sessionStorage.getItem("personTypeList"));
let type = 0;
let personTypeName = "";
const handleToPage = async item => {
console.log("item", item);
const params = {
personId: item.id
};
try {
const res = await getPersonSummaryInfo(params);
console.log("人物全局信息", res);
if (res.code === 200 && res.data) {
const arr = personTypeList.filter(item => {
return item.typeId === res.data.personType;
});
console.log("arr", arr);
if (item.typeStr === "人物") {
const personTypeList = JSON.parse(window.sessionStorage.getItem("personTypeList"));
let type = 0;
let personTypeName = "";
const params = {
personId: item.id
};
try {
const res = await getPersonSummaryInfo(params);
console.log("人物全局信息", res);
if (res.code === 200 && res.data) {
const arr = personTypeList.filter(item => {
return item.typeId === res.data.personType;
});
console.log("arr", arr);
if (arr && arr.length > 0) {
personTypeName = arr[0].typeName;
console.log("personTypeName", personTypeName);
if (arr && arr.length > 0) {
personTypeName = arr[0].typeName;
console.log("personTypeName", personTypeName);
if (personTypeName === "科技企业领袖") {
type = 1;
} else if (personTypeName === "国会议员") {
type = 2;
} else if (personTypeName === "智库研究人员") {
type = 3;
if (personTypeName === "科技企业领袖") {
type = 1;
} else if (personTypeName === "国会议员") {
type = 2;
} else if (personTypeName === "智库研究人员") {
type = 3;
} else {
personTypeName = "";
ElMessage.warning("找不到当前人员的类型值!");
return;
}
const route = router.resolve({
path: "/characterPage",
query: {
type: type, // type=1为科技企业领袖,2为国会议员,3为智库研究人员
personId: id
}
});
window.open(route.href, "_blank");
} else {
personTypeName = "";
ElMessage.warning("找不到当前人员的类型值!");
return;
}
const route = router.resolve({
path: "/characterPage",
query: {
type: type, // type=1为科技企业领袖,2为国会议员,3为智库研究人员
personId: id
}
});
window.open(route.href, "_blank");
} else {
personTypeName = "";
ElMessage.warning("找不到当前人员的类型值!");
ElMessage.warning("获取人物全局信息错误");
return;
}
} else {
ElMessage.warning("获取人物全局信息错误");
return;
}
} catch (error) {}
} catch (error) {}
}
window.sessionStorage.setItem("curTabName", item.originalTitle);
let curRoute;
switch (item.typeStr) {
case "法案":
......@@ -487,7 +490,7 @@ onMounted(() => {
}
.wrapper {
width: 100%;
height: calc(100vh - 96px);
height: 100%;
background: url("../assets/images/background.png") no-repeat;
background-size: 100% 100%;
.header {
......
<template>
<el-tooltip
effect="dark"
:content="content"
popper-class="common-prompt-popper"
placement="top"
:show-after="500"
>
<div class="text-ellipsis">
<slot>{{ content }}</slot>
</div>
</el-tooltip>
</template>
<script setup>
defineProps({
content: {
type: String,
default: ""
}
});
</script>
<style scoped>
.text-ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
cursor: pointer;
}
</style>
<style>
.common-prompt-popper.el-popper {
padding: 8px 16px !important;
border-radius: 10px !important;
background-color: rgb(59, 65, 75) !important;
font-size: 16px !important;
font-weight: 400 !important;
font-family: "Microsoft YaHei" !important;
line-height: 30px !important;
color: #fff !important;
border: none !important;
}
.common-prompt-popper.el-popper .el-popper__arrow::before {
background-color: rgb(59, 65, 75) !important;
border-color: rgb(59, 65, 75) !important;
}
</style>
......@@ -101,12 +101,21 @@
</div>
</div>
<div style="margin: 6px 34px 0 23px">
<div v-for="item in riskSignals" :key="item.id" class="right-main" @click="handleToRiskDetail">
<div class="main-left" :class="{ cl4: item.title === '特别重大', cl5: item.title === '重大风险' }">
<div v-for="item in riskSignals" :key="item.id" class="right-main" @click="handleToRiskDetail(item)">
<div
class="main-left"
:class="{ cl4: item.title === '特别重大', cl5: item.title === '重大风险', cl6: item.title === '一般风险' }"
>
{{ item.title }}
</div>
<div class="main-center">{{ item.content }}</div>
<div class="main-right">{{ item.time }}</div>
<div class="item-right">
<div class="main-center">
<CommonPrompt :content="item.content">
{{ item.content }}
</CommonPrompt>
</div>
<div class="main-right">{{ item.time }}</div>
</div>
</div>
</div>
<div class="right-mainbtn" @click="handleToMoreRiskSignal">
......@@ -120,8 +129,27 @@
<script setup>
import { ref, onMounted, computed } from "vue";
import router from "@/router";
import { getCoopRestrictionTrends } from "@/api/coopRestriction/coopRestriction.js";
import { getCoopRestrictionTrends, getCoopRestrictionSignals } from "@/api/coopRestriction/coopRestriction.js";
import defaultImg from "./assets/usImg.png";
import CommonPrompt from "../../commonPrompt/index.vue";
// 合作限制-查询风险信号数据
const getCoopRestrictionSignalsData = async () => {
try {
const res = await getCoopRestrictionSignals({ moduleId: "0106" });
if (res && res.code === 200) {
riskSignals.value = (res.data || []).map(item => ({
id: item.signalId,
title: item.signalLevel,
content: item.signalTitle,
time: item.signalTime
}));
}
} catch (error) {
console.error("获取合作限制风险信号数据失败:", error);
}
};
const coopRestrictionTrends = ref([]);
const carouselRef = ref(null);
......@@ -162,33 +190,8 @@ const mainTrend = computed(() => {
return coopRestrictionTrends.value[activeIndex.value] || coopRestrictionTrends.value[0];
});
// 右侧风险信号列表
const riskSignals = ref([
{
id: 1,
title: "特别重大",
content: "保护美国资金与专业知识免受敌对研究利用法案",
time: "一天前"
},
{
id: 2,
title: "特别重大",
content: "美国国土安全部终止哈佛大学SEVP认证",
time: "一天前"
},
{
id: 3,
title: "重大风险",
content: "众议院“美中战略竞争特别委员会”向国会提...",
time: "一天前"
},
{
id: 4,
title: "重大风险",
content: '2026财年拨款法案要求重启"中国行动计划"',
time: "一天前"
}
]);
// 右侧风险信号列表
const riskSignals = ref([]);
// 点击查看详情
const handleClickToDetail = item => {
......@@ -205,8 +208,11 @@ const handleClickToDetail = item => {
};
// 点击风险信号详情
const handleToRiskDetail = () => {
const curRoute = router.resolve("/cooperationRestrictions/detail");
const handleToRiskDetail = (item) => {
const curRoute = router.resolve({
path: "/cooperationRestrictions/detail",
query: { id: item.id },
});
window.open(curRoute.href, "_blank");
};
......@@ -218,7 +224,9 @@ const handleToMoreRiskSignal = () => {
onMounted(() => {
// 合作限制-最新动态数据-获取数据
getCoopRestrictionTrendsData();
getCoopRestrictionTrendsData();
// 合作限制-风险信号数据-获取数据
getCoopRestrictionSignalsData();
});
</script>
......@@ -526,25 +534,40 @@ onMounted(() => {
background-color: rgba(255, 247, 230, 1);
color: rgba(250, 140, 22, 1);
}
.main-center {
width: 347px;
height: 30px;
font-size: 16px;
font-weight: 400;
font-family: "Microsoft YaHei";
line-height: 30px;
color: rgb(59, 65, 75);
margin-right: 2px;
.cl6 {
background-color: rgba(246, 255, 237, 1);
color: rgba(82, 196, 26, 1);
}
.main-right {
width: 60px;
height: 24px;
font-size: 16px;
font-weight: 400;
font-family: "Microsoft YaHei";
line-height: 24px;
color: rgb(132, 136, 142);
text-align: right;
.item-right {
flex: 1;
display: flex;
justify-content: space-between;
align-items: center;
overflow: hidden;
.main-center {
flex: 1;
height: 30px;
font-size: 16px;
font-weight: 400;
font-family: "Microsoft YaHei";
line-height: 30px;
color: rgb(59, 65, 75);
margin-right: 10px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.main-right {
width: 100px;
height: 24px;
font-size: 16px;
font-weight: 400;
font-family: "Microsoft YaHei";
line-height: 24px;
color: rgb(132, 136, 142);
text-align: right;
flex-shrink: 0;
}
}
}
.right-mainbtn {
......
......@@ -1321,7 +1321,7 @@ onMounted(async () => {
}
.home-wrapper {
width: 100%;
height: calc(100vh - 96px);
height: 100%;
position: relative;
overflow-y: hidden;
.search-header {
......
......@@ -111,17 +111,6 @@
<div class="box-header">
<div class="header-left"></div>
<div class="title">发布机构</div>
<!-- <div class="header-btn-box">
<div
class="btn"
:class="{ btnActive: box3ActiveBtn === item }"
v-for="(item, index) in box3BtnList"
:key="index"
@click="handleClickBox3Btn(item, index)"
>
{{ item }}
</div>
</div> -->
<div class="header-right">
<div class="icon">
<img src="../assets/icons/header-right-icon1.png" alt="" />
......@@ -132,13 +121,13 @@
</div>
</div>
<div class="box3-top">
<div class="box3-top-top" @click="handleToInstitution(box3TopData)">
<div class="box3-top-top" @click="handleToInstitution(box3TopTopData)">
<div class="left">
<img :src="box3TopData.logo ? box3TopData.logo : DefaultIcon2" alt="" />
<img :src="box3TopTopData.logo ? box3TopTopData.logo : DefaultIcon2" alt="" />
</div>
<div class="right">
<div class="name">{{ box3TopData.name + " >" }}</div>
<div class="ename">{{ box3TopData.eName }}</div>
<div class="name">{{ box3TopTopData.name + " >" }}</div>
<div class="ename">{{ box3TopTopData.eName }}</div>
</div>
<!-- <div class="more">
<div class="text">{{ "查看官网" }}</div>
......@@ -157,11 +146,11 @@
<div class="box3-top-bottom-main">
<div class="box3-top-bottom-item" v-for="(item, index) in box3TopBottomData" :key="index">
<div class="box3-top-bottom-item-left">
<img :src="item.image ? item.image : DefaultIcon1" alt="" />
<img :src="item.avatar ? item.avatar : DefaultIcon1" alt="" />
</div>
<div class="box3-top-bottom-item-right">
<div class="name">{{ item.name }}</div>
<div class="position">{{ item.position }}</div>
<div class="position">{{ item.job }}</div>
</div>
</div>
</div>
......@@ -177,13 +166,13 @@
<div class="box3-bottom-main">
<el-timeline style="max-width: 500px">
<el-timeline-item
:timestamp="item.time"
:timestamp="item.newsDate"
placement="top"
v-for="(item, index) in eventList"
:key="index"
>
<div class="timeline-content">
{{ item.title }}
{{ item.newsContent }}
</div>
</el-timeline-item>
</el-timeline>
......@@ -200,7 +189,7 @@ import { useRoute } from "vue-router";
import router from "@/router";
import box1Img from "./assets/images/box1-img.png";
import Box3Logo from "./assets/images/box3-img.png";
import { getDecreeBasicInfo, getDecreeMainContent, getDecreeOrganization } from "@/api/decree/introduction";
import { getDecreeBasicInfo, getDecreeMainContent, getDecreeOrganization, getDecreeIssueOrganization } from "@/api/decree/introduction";
import DefaultIcon1 from "@/assets/icons/default-icon1.png";
import DefaultIcon2 from "@/assets/icons/default-icon2.png";
......@@ -283,71 +272,17 @@ const handleMajorList = async () => {
};
handleMajorList();
// 执行机构
const box3BtnList = ref([]);
const box3ActiveBtn = ref("");
const box3BtnActiveIndex = ref(0);
const handleClickBox3Btn = (btn, index) => {
box3ActiveBtn.value = btn;
box3BtnActiveIndex.value = index;
box3TopData.value.id = box3Data.value[index].id;
box3TopData.value.logo = box3Data.value[index].url;
box3TopData.value.name = box3Data.value[index].name;
box3TopData.value.eName = box3Data.value[index].ename;
box3TopData.value.clsj = box3Data.value[index].foundingDate;
box3TopData.value.zbdz = box3Data.value[index].address;
box3TopData.value.bz = box3Data.value[index].leaderName;
eventList.value = box3Data.value[index].newsList.map(val => {
return {
time: val.newsDate,
title: val.newsContent
};
});
};
const box3Data = ref([]);
// 发布机构
const box3TopData = ref({
const box3TopTopData = ref({
id: "",
logo: "",
name: "",
eName: "",
clsj: "",
zbdz: "",
bz: ""
});
const box3TopBottomData = ref([
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
},
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
},
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
},
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
},
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
},
{
image: "",
name: "杰弗里·凯斯勒",
position: "副秘书"
}
]);
// 跳转行政机构主页
......@@ -382,49 +317,24 @@ const handleGetOrgnization = async () => {
id: decreeId.value
};
try {
const res = await getDecreeOrganization(params);
console.log("执行机构", res);
const res = await getDecreeIssueOrganization(params);
console.log("发布机构", res);
if (res.code === 200 && res.data) {
box3BtnList.value = res.data.map(item => {
return item.name;
});
box3Data.value = res.data;
box3TopData.value.logo = res.data[0].url;
box3TopData.value.name = res.data[0].name;
box3TopData.value.eName = res.data[0].ename;
box3TopData.value.clsj = res.data[0].foundingDate;
box3TopData.value.zbdz = res.data[0].address;
box3TopData.value.bz = res.data[0].leaderName;
box3ActiveBtn.value = res.data[0].name;
eventList.value = res.data[0].newsList.map(val => {
return {
time: val.newsDate,
title: val.newsTitle
};
});
} else {
box3BtnList.value = [];
box3TopData.value = {
logo: "",
name: "",
eName: "",
clsj: "",
zyzz: "",
zbdz: "",
bz: ""
};
eventList.value = [];
}
box3TopTopData.value.id = res.data.id
box3TopTopData.value.logo = res.data.image
box3TopTopData.value.name = res.data.name
box3TopTopData.value.eName = res.data.ename
eventList.value = res.data.newsList
box3TopBottomData.value = res.data.personList
}
} catch (error) {
console.error("执行机构error", error);
box3BtnList.value = [];
box3TopData.value = {
box3TopTopData.value = {
id: "",
logo: "",
name: "",
eName: "",
clsj: "",
zbdz: "",
bz: ""
};
eventList.value = [];
}
......@@ -772,7 +682,7 @@ onMounted(() => {
flex-wrap: wrap;
justify-content: space-between;
.box3-top-bottom-item {
margin-top: 17px;
margin-top: 12px;
height: 48px;
width: 200px;
display: flex;
......@@ -815,6 +725,9 @@ onMounted(() => {
line-height: 24px;
letter-spacing: 0px;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
......
......@@ -104,9 +104,8 @@ onMounted(() => {
});
onUnmounted(() => {
window.sessionStorage.removeItem('institutionActiveTabName')
})
window.sessionStorage.removeItem("institutionActiveTabName");
});
</script>
<style lang="scss" scoped>
......@@ -139,6 +138,9 @@ onUnmounted(() => {
}
.header-right {
margin-left: 24px;
width: 1350px;
overflow: hidden;
overflow-y: auto;
.title {
margin-top: 26px;
height: 42px;
......@@ -149,6 +151,9 @@ onUnmounted(() => {
line-height: 42px;
letter-spacing: 0px;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.en-title {
margin-top: 8px;
......@@ -160,10 +165,12 @@ onUnmounted(() => {
line-height: 24px;
letter-spacing: 0px;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.desc {
margin-top: 6px;
height: 24px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
......
......@@ -21,7 +21,7 @@ defineProps({
display: flex;
align-items: center;
width: 100%;
margin-bottom: 20px;
margin-bottom: 36px;
padding: 10px 15px;
}
......
......@@ -928,47 +928,47 @@ export const getMultipleLineChart = obj => {
export const getMultipleBarChart_m = object => {
const list = _.chain(object.data).filter("year").orderBy("year", "asc").value();
const colors = [
["rgba(45, 123, 248, 1)", "rgba(45, 123, 248, 0)"],
["rgba(206, 79, 81, 1)", "rgba(206, 79, 81, 0)"],
["rgba(255, 197, 61, 1)", "rgba(255, 197, 61, 0)"],
["rgba(255, 182, 193, 1)", "rgba(255, 182, 193, 0)"],
["rgba(159, 122, 234, 1)", "rgba(159, 122, 234, 0)"],
["rgba(90, 200, 220, 1)", "rgba(90, 200, 220, 0)"]
["rgba(45, 123, 248, 1)", "rgba(45, 123, 248, 0.1)"],
["rgba(206, 79, 81, 1)", "rgba(206, 79, 81, 0.1)"],
["rgba(255, 197, 61, 1)", "rgba(255, 197, 61, 0.1)"],
["rgba(255, 182, 193, 1)", "rgba(255, 182, 193, 0.1)"],
["rgba(159, 122, 234, 1)", "rgba(159, 122, 234, 0.1)"],
["rgba(90, 200, 220, 1)", "rgba(90, 200, 220, 0.1)"]
];
const names = _.map(list, "year");
const legendData = _.chain(object.domains)
.slice(0, 6)
.map((name, index) => {
return {
name: name,
itemStyle: {
color: colors[index % colors.length][0] // 强制图例使用实色
}
};
})
.value();
const datas = _.chain(object.domains)
.splice(0, 6)
.slice(0, 6)
.map((name, index) => {
// console.log(_.map(list, name));
const colorPair = colors[index % colors.length];
return {
name,
data: _.map(list, `domainNum.${name}`),
type: "bar",
color: colors[index % colors.length][0],
color: colorPair[0], // 图例使用实色
barWidth: 12,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: colors[index % colors.length][0] },
// { offset: 0.5, color: '#188df0' },
{ offset: 1, color: colors[index % colors.length][1] }
{ offset: 0, color: colorPair[0] }, // 顶部颜色
{ offset: 1, color: colorPair[1] } // 底部颜色
]),
borderRadius: [6, 6, 0, 0]
}
};
})
.value();
// console.log("names", names);
let allValues = [];
datas.forEach(series => {
if (series.data) allValues.push(...series.data);
});
let maxVal = Math.max(...(allValues.length > 0 ? allValues : [0]));
// if (maxVal === 0) maxVal = 100;
// else maxVal = maxVal * 1.2;
// let interval = Math.ceil(maxVal / 5);
// if (interval > 5) interval = Math.ceil(interval / 10) * 10;
// maxVal = interval * 5;
const option = {
tooltip: {
......@@ -985,10 +985,19 @@ export const getMultipleBarChart_m = object => {
containLabel: true
},
legend: {
// type: "scroll",
// show: true,
// orient: "horizontal",
icon: "circle"
icon: "circle",
itemWidth: 12,
itemHeight: 12,
data: legendData,
textStyle: {
fontSize: 16,
fontWeight: 400,
fontFamily: "Microsoft YaHei",
color: "rgb(95, 101, 108)",
lineHeight: 24,
verticalAlign: "middle",
padding: [2, 0, 0, 0] // 微调文字位置,使中线对齐
}
},
xAxis: {
type: "category",
......
......@@ -126,7 +126,9 @@
>
<img :src="item.imageUrl" alt="" />
<div class="person-info">
<div class="name">{{ item.name }}</div>
<CommonPrompt :content="item.name">
<span class="name">{{ item.name }}</span>
</CommonPrompt>
<div class="title1">{{ item.position }}</div>
</div>
</div>
......@@ -168,6 +170,7 @@ import defaultIcon from "../../../../../assets/icons/default-avatar.png";
import icon01 from "../../assets/icon01.png";
import icon02 from "../../assets/icon02.png";
import { ArrowDown } from "@element-plus/icons-vue";
import CommonPrompt from "../../../../../commonPrompt/index.vue";
import { getEntityInfo, getPublishInfo, getPublishOrgInfo, getEntityUpdateInfo } from "@/api/exportControlV2.0.js";
// 处理点击发布机构的方法
......@@ -198,6 +201,7 @@ const handlePerClick = item => {
// 处理点击实体名称的方法
const handleClick = item => {
// console.log("点击了实体名称:", item);
window.sessionStorage.setItem("curTabName", `${item.year}-${item.date}《${item.name}》`);
const route = router.resolve({
path: "/exportControl/singleSanction",
query: {
......@@ -364,11 +368,13 @@ const handleLoadMoreDynamic = () => {
// 获取实体清单基本信息
const entityInfo = ref({});
const emit = defineEmits(['update-entity-info']);
const getEntityInfoFn = async () => {
try {
const res = await getEntityInfo();
const res = await getEntityInfo("el");
if (res && res.code === 200) {
entityInfo.value = res.data;
emit('update-entity-info', res.data);
}
} catch (error) {
console.error("获取实体清单基本信息失败:", error);
......@@ -637,19 +643,19 @@ onMounted(() => {
}
}
.key-person-list {
display: flex;
flex-wrap: wrap;
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
column-gap: 40px;
padding-left: 28px;
.person-item {
width: 185px;
width: 100%;
cursor: pointer;
display: flex;
align-items: center;
align-items: flex-start;
margin-bottom: 16px;
&:nth-child(2n-1) {
margin-left: 28px;
margin-right: 39px;
}
min-width: 0;
img {
width: 48px;
height: 48px;
......@@ -659,13 +665,20 @@ onMounted(() => {
flex-shrink: 0;
}
.person-info {
flex: 1;
min-width: 0;
overflow: hidden;
.name {
display: block;
font-size: 16px;
font-weight: 700;
font-family: "Microsoft YaHei";
color: rgb(59, 65, 75);
margin-bottom: 1px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
}
.title1 {
font-size: 16px;
......@@ -673,7 +686,7 @@ onMounted(() => {
font-family: "Microsoft YaHei";
color: rgb(95, 101, 108);
line-height: 1.2;
// white-space: nowrap;
word-break: break-all;
}
}
}
......
......@@ -7,17 +7,19 @@
</div>
</div>
<div class="content-box">
<introductionPage v-if="activeIndex === 0"></introductionPage>
<introductionPage v-if="activeIndex === 0" @update-entity-info="(data) => $emit('update-entity-info', data)"></introductionPage>
<listPage v-if="activeIndex === 1"></listPage>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { ref, defineEmits } from 'vue'
import introductionPage from "./components/introductionPage/index.vue"
import listPage from "./components/listPage/index.vue"
const emit = defineEmits(['update-entity-info'])
const activeTab = ref(["实体清单简介", "实体清单列表"])
const activeIndex = ref(0)
......
<template>
<div class="entity-list">
<div class="header">
<div class="header-title">
<img :src="headerTitle.img" alt="" />
<div>
<div class="title">
{{ headerTitle.title }}
<span>{{ headerTitle.titleEn }}</span>
</div>
<div class="department">
{{ headerTitle.department }}
</div>
</div>
<div class="btn"><img :src="icon01" alt="" />切换</div>
</div>
<div class="header-nav">
<div
class="nav-item"
v-for="(item, index) in headerNavList"
:key="index"
:class="{ active: activeIndex === index }"
@click="activeIndex = index"
>
<img :src="activeIndex === index ? item.imgActive : item.img" alt="" />
<span>{{ item.title }}</span>
<div class="active-line" v-if="activeIndex === index"></div>
</div>
</div>
</div>
<div class="main">
<sanctions-overview v-if="activeIndex === 0"></sanctions-overview>
<data-statistics v-if="activeIndex === 1"></data-statistics>
<deep-mining v-if="activeIndex === 2"></deep-mining>
<impact-analysis v-if="activeIndex === 3"></impact-analysis>
</div>
</div>
<div class="entity-list">
<div class="header">
<div class="header-title">
<img :src="headerTitle.img" alt="">
<div>
<div class="title">
{{ headerTitle.title }}
<span>{{ headerTitle.titleEn }}</span>
</div>
<div class="department">
{{ headerTitle.department }}
</div>
</div>
<div class="btn">
<img :src="icon01" alt="">切换
</div>
</div>
<div class="header-nav">
<div
class="nav-item"
v-for="(item, index) in headerNavList"
:key="index"
:class="{ active: activeIndex === index }"
@click="activeIndex = index"
>
<img :src="activeIndex === index ? item.imgActive : item.img" alt="">
<span>{{ item.title }}</span>
<div class="active-line" v-if="activeIndex === index"></div>
</div>
</div>
</div>
<div class="main">
<sanctions-overview v-if="activeIndex === 0" @update-entity-info="handleUpdateEntityInfo"></sanctions-overview>
<data-statistics v-if="activeIndex === 1"></data-statistics>
<deep-mining v-if="activeIndex === 2"></deep-mining>
<impact-analysis v-if="activeIndex === 3"></impact-analysis>
</div>
</div>
</template>
<script setup>
......@@ -57,13 +59,26 @@ import icon3 from "../assets/icons/icon3.png";
import icon3Active from "../assets/icons/icon3_active.png";
const headerTitle = ref({
img: title,
title: "实体清单",
titleEn: "Entity List",
department: "美国商务部工业与安全局"
});
// img: title,
// title: "实体清单",
// titleEn: "Entity List",
// department: "美国商务部工业与安全局"
})
const activeIndex = ref(0);
const handleUpdateEntityInfo = (data) => {
if (data) {
headerTitle.value = {
...headerTitle.value,
title: data.name,
titleEn: data.originalName,
department: data.orgName,
departId: data.orgId,
img: data.orgLogoUrl || title
}
}
}
const activeIndex = ref(0)
const headerNavList = ref([
{
......
......@@ -209,6 +209,7 @@ const handleCompClick = item => {
// 跳转发布机构详情页
const handleClickDp = () => {
// console.log("点击了发布机构:", props.data);
window.sessionStorage.setItem('curTabName', props.data.postOrgName)
const route = router.resolve({
path: "/institution",
query: {
......@@ -367,6 +368,7 @@ const props = defineProps({
});
// 跳转到人物页
const handleClick = () => {
window.sessionStorage.setItem("curTabName", props.data.postPersonName)
const route = router.resolve({
path: "/characterPage",
query: {
......
......@@ -1685,7 +1685,7 @@ onMounted(async () => {
.home-wrapper {
width: 100%;
height: calc(100vh - 96px);
height: 100%;
position: relative;
overflow-y: hidden;
.home-main {
......
......@@ -1079,7 +1079,7 @@ onMounted(async () => {
.home-wrapper {
width: 100%;
height: calc(100vh - 96px);
height: 100%;
position: relative;
overflow-y: hidden;
......
......@@ -1522,7 +1522,7 @@ onMounted(async () => {
}
.home-wrapper {
width: 100%;
height: calc(100vh - 96px);
height: 100%;
position: relative;
overflow-y: hidden;
.home-main {
......
......@@ -294,9 +294,9 @@ onMounted(() => {
<style lang="scss" scoped>
.case-wrapper {
width: 100%;
height: 100%;
overflow-y: auto;
// width: 100%;
// height: 100%;
overflow: hidden;
.wrapper-header {
width: 1600px;
height: 32px;
......@@ -359,10 +359,8 @@ onMounted(() => {
}
.wrapper-main {
width: 1600px;
// height: 935px;
height: 800px;
// height: 900px;
margin: 0 auto;
box-sizing: border-box;
display: flex;
justify-content: space-between;
.left {
......@@ -429,6 +427,7 @@ onMounted(() => {
margin-left: 16px;
width: 1224px;
min-height: 700px;
height: 770px;
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(60, 87, 126, 0.2);
background: rgba(255, 255, 255, 1);
......@@ -462,10 +461,8 @@ onMounted(() => {
}
.right-main {
padding-top: 6px;
min-height: 586px;
max-height: 1540px;
height: 660px;
border-bottom: 1px solid rgba(230, 231, 232, 1);
// height: 780px;
.item {
height: 154px;
display: flex;
......
......@@ -25,8 +25,5 @@ onMounted(() => {
</script>
<style lang="scss" scoped>
.case-wrap {
width: 100%;
height: 100%;
}
</style>
\ No newline at end of file
......@@ -59,7 +59,6 @@ import { useRoute } from "vue-router";
const route = useRoute();
const btnList = ref([
{
name: "调查案件",
icon: icon2,
......@@ -71,7 +70,7 @@ const btnList = ref([
icon: icon1,
acitveIcon: icon1Active,
path: "/marketAccessLayout/overview"
},
}
]);
const curSurvey = computed(() => {
......@@ -109,26 +108,29 @@ const handleClickBtn = item => {
};
onMounted(() => {
if(route.path === '/marketAccessLayout/overview') {
activeBtnName.value = '数据统计'
if (route.path === "/marketAccessLayout/overview") {
activeBtnName.value = "数据统计";
} else {
activeBtnName.value = '调查案件'
activeBtnName.value = "调查案件";
}
});
</script>
<style lang="scss" scoped>
.wrap {
width: 1920px;
height: 1016px;
width: 100%;
height: 100%;
overflow: hidden;
overflow-y: auto;
.header {
width: 1920px;
height: 148px;
box-sizing: border-box;
border-bottom: 1px solid rgba(230, 231, 232, 1);
background: rgba(255, 255, 255, 1);
position: sticky;
top: 0;
z-index: 99999999;
.header-top {
display: flex;
height: 100px;
......
......@@ -77,7 +77,7 @@ const navList = ref([
icon: NavIcon2,
activeIcon: NavIcon2Active,
isActive: false,
isShow: route.query.id === '337',
isShow: route.query.id === "337",
path: "/marketSingleCaseLayout/deepdig"
},
{
......@@ -146,6 +146,8 @@ onMounted(() => {});
.wrapper {
width: 100%;
height: 100%;
overflow: hidden;
overflow-y: auto;
.header {
width: 1920px;
height: 148px;
......@@ -153,6 +155,9 @@ onMounted(() => {});
border-bottom: 1px solid rgba(230, 231, 232, 1);
background: rgba(255, 255, 255, 1);
padding: 24px 160px 0;
position: sticky;
top: 0;
z-index: 99999999;
.header-top {
display: flex;
.header-top-left {
......@@ -299,9 +304,9 @@ onMounted(() => {});
}
}
.main {
height: 870px;
width: 1920px;
overflow-y: auto;
// height: 870px;
// width: 1920px;
// overflow-y: auto;
background: rgba(247, 248, 249, 1);
}
}
......
......@@ -336,7 +336,6 @@ const box4Data = ref([
<style lang="scss" scoped>
.wrapper {
width: 100%;
// height: 1191px;
padding: 0 160px;
display: flex;
.box-header {
......@@ -410,6 +409,7 @@ const box4Data = ref([
}
.left {
width: 520px;
margin-bottom: 20px;
.box1 {
margin-top: 16px;
width: 520px;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论