提交 c5dda08b authored 作者: 李智林's avatar 李智林

合作限制

上级 2dda3480
......@@ -161,7 +161,9 @@ body {
color: rgba(10, 18, 30, 1);
border-bottom: 1px solid #e5e7eb;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
position: relative;
position: sticky;
top: 0;
z-index: 2000;
box-sizing: border-box;
height: 72px;
}
......
......@@ -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
})
}
......@@ -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}`
})
}
......
......@@ -438,6 +438,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 {
......@@ -468,8 +507,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;
......@@ -555,8 +594,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;
......@@ -661,8 +700,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;
......
......@@ -270,7 +270,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)"
>
......@@ -679,6 +679,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"
......@@ -693,10 +698,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">
......@@ -716,7 +720,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>
......@@ -791,20 +797,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";
......@@ -911,6 +911,7 @@ const currentPage = ref(1);
const handleCurrentChange = page => {
currentPage.value = page;
handleGetBills();
handleToPosi("position4");
};
const containerRef = ref(null);
......@@ -1455,6 +1456,7 @@ const box9YearList = ref([
}
]);
const box9HasData = ref(true);
let box9ChartInstance = null;
const getBox9Data = async () => {
const params = {
year: box9selectetedTime.value
......@@ -1486,7 +1488,7 @@ const handleBox9Data = async () => {
};
})
);
setChart(box9Chart, "box9Chart");
box9ChartInstance = setChart(box9Chart, "box9Chart");
}
};
......@@ -1698,7 +1700,12 @@ const handleSearch = () => {
window.open(curRoute.href, "_blank");
};
const handleResize = () => {
box9ChartInstance && box9ChartInstance.resize();
};
onMounted(async () => {
window.addEventListener("resize", handleResize);
handleGetHylyList();
// 获取风险信号
handleGetBillRiskSignal();
......@@ -1728,7 +1735,9 @@ onMounted(async () => {
handleBox9Data();
});
onUnmounted(() => {});
onUnmounted(() => {
window.removeEventListener("resize", handleResize);
});
</script>
<style lang="scss" scoped>
......@@ -2525,7 +2534,7 @@ onUnmounted(() => {});
}
.box3-main {
height: 402px;
overflow-y: auto;
overflow-y: hidden;
overflow-x: hidden;
padding-top: 6px;
.box3-item {
......@@ -2649,6 +2658,7 @@ onUnmounted(() => {});
overflow-y: auto;
box-sizing: border-box;
padding-top: 8px;
padding-bottom: 20px;
.box4-main-item {
margin-top: 16px;
display: flex;
......@@ -2774,12 +2784,6 @@ onUnmounted(() => {});
.box5-main {
height: 397px;
}
// .box5-select {
// position: absolute;
// top: 53px;
// left: 100px;
// z-index: 100;
// }
}
.box6 {
margin-left: 20px;
......@@ -2982,26 +2986,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);
......@@ -3151,6 +3148,7 @@ onUnmounted(() => {});
}
.box9-main {
height: 380px;
padding: 10px 20px;
}
}
}
......@@ -3305,8 +3303,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;
......@@ -3314,8 +3312,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);
.header-main {
position: sticky;
top: 72px;
z-index: 1000;
width: 100%;
height: 136px;
background-color: #fff;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
}
.layout-main-header {
height: 137px;
width: 1744px;
height: 136px;
background: rgba(255, 255, 255, 1);
display: flex;
justify-content: space-between;
margin: 0 auto;
padding-top: 14px;
.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();
......@@ -376,13 +374,6 @@ const handleClcikDialogBoxBtn = index => {
dialogBoxBtnActive.value = index;
};
const handleChangeFaId = val => {
console.log("val", val);
handleGetBillPerson(val);
};
const timelineData = ref([]);
const isShowDialog = ref(false);
......@@ -520,7 +511,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;
......@@ -528,6 +519,10 @@ onMounted(() => {
margin-left: 23px;
width: 247px;
height: 350px;
img {
width: 100%;
height: 100%;
}
}
.box1-right {
margin-left: 31px;
......@@ -541,49 +536,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;
......@@ -593,8 +577,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;
......@@ -604,8 +588,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;
......@@ -618,7 +602,7 @@ onMounted(() => {
.step {
height: 28px;
line-height: 26px;
font-size: 14px;
font-size: 16px;
text-align: center;
position: relative;
background: transparent;
......@@ -702,7 +686,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;
......@@ -841,7 +825,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;
......
<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>
......@@ -99,12 +99,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">
......@@ -118,8 +127,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);
......@@ -161,32 +189,7 @@ const mainTrend = computed(() => {
});
// 右侧风险信号列表
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) => {
......@@ -201,8 +204,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");
};
......@@ -215,6 +221,8 @@ const handleToMoreRiskSignal = () => {
onMounted(() => {
// 合作限制-最新动态数据-获取数据
getCoopRestrictionTrendsData();
// 合作限制-风险信号数据-获取数据
getCoopRestrictionSignalsData();
});
</script>
......@@ -522,25 +530,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 {
......
......@@ -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";
// 处理点击发布机构的方法
......@@ -364,11 +367,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 +642,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 +664,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 +685,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)
......
......@@ -31,7 +31,7 @@
</div>
</div>
<div class="main">
<sanctions-overview v-if="activeIndex === 0"></sanctions-overview>
<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>
......@@ -60,12 +60,25 @@ 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 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([
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论