提交 c333cf55 authored 作者: 闫鹏's avatar 闫鹏

合并分支 'yp-dev' 到 'master'

Yp dev 查看合并请求 !144
...@@ -51,7 +51,8 @@ export function getEntitiesDataInfo() { ...@@ -51,7 +51,8 @@ export function getEntitiesDataInfo() {
method: "GET", method: "GET",
// url: '/api/entitiesDataInfo/latestInfoSelect', // url: '/api/entitiesDataInfo/latestInfoSelect',
// url: "/api/entitiesDataInfo/getLatestInfo", // url: "/api/entitiesDataInfo/getLatestInfo",
url: "/api/sanctionList/export/getLatestInfo" // url: "/api/sanctionList/export/getLatestInfo"
url: "/api/sanctionList/export/getLatestEntityListInfo"
}) })
); );
} }
...@@ -121,7 +122,7 @@ export function getSanctionsInfoCount() { ...@@ -121,7 +122,7 @@ export function getSanctionsInfoCount() {
* sanReason: string * sanReason: string
* }[]>} * }[]>}
*/ */
export function getSanctionProcess(typeName = "实体清单", pageNum = 1, pageSize = 10,isCn = false) { export function getSanctionProcess(typeName = "实体清单", pageNum = 1, pageSize = 10, isCn = false) {
return request200( return request200(
request({ request({
method: "POST", method: "POST",
...@@ -835,7 +836,6 @@ export function getScientificImpactEntityList(startTime) { ...@@ -835,7 +836,6 @@ export function getScientificImpactEntityList(startTime) {
); );
} }
/** /**
* 概览页--获取出口管制制裁措施 * 概览页--获取出口管制制裁措施
* @param {Object} data * @param {Object} data
...@@ -854,6 +854,4 @@ export function getExportControlList(data) { ...@@ -854,6 +854,4 @@ export function getExportControlList(data) {
); );
} }
//
//
\ No newline at end of file
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<img src="./message-icon.svg" alt="" /> <img src="./message-icon.svg" alt="" />
</div> </div>
<div class="header-title"> <div class="header-title">
<slot name='title'>{{ "社交媒体" }}</slot> <slot name="title">{{ "社交媒体" }}</slot>
</div> </div>
<div class="more" @click="handleToMoreNews">{{ "更多 +" }}</div> <div class="more" @click="handleToMoreNews">{{ "更多 +" }}</div>
</div> </div>
...@@ -15,10 +15,12 @@ ...@@ -15,10 +15,12 @@
<div class="avatar-container"> <div class="avatar-container">
<img :src="item[props.imageUrl] || avatarUser" :alt="item[props.name]" class="avatar" /> <img :src="item[props.imageUrl] || avatarUser" :alt="item[props.name]" class="avatar" />
<div class="avatar-containerOne" v-if="isRepublicanParty"><img src="./image2.png" alt="" <div class="avatar-containerOne" v-if="isRepublicanParty">
class="avatar-imageOne" /></div> <img src="./image2.png" alt="" class="avatar-imageOne" />
<div class="avatar-containerTwo" v-if="isUnitedStatesSenate"><img src="./image3.png" alt="" </div>
class="avatar-imageTwo" /></div> <div class="avatar-containerTwo" v-if="isUnitedStatesSenate">
<img src="./image3.png" alt="" class="avatar-imageTwo" />
</div>
</div> </div>
<div class="bubble-container"> <div class="bubble-container">
<div class="bubble"> <div class="bubble">
...@@ -50,11 +52,10 @@ ...@@ -50,11 +52,10 @@
</div> --> </div> -->
</div> </div>
</div> </div>
</template> </template>
<script setup> <script setup>
import { computed } from 'vue'; import { computed } from "vue";
import avatarUser from "@/assets/images/avatar_user.png"; import avatarUser from "@/assets/images/avatar_user.png";
const emit = defineEmits(["click", "info-click"]); const emit = defineEmits(["click", "info-click"]);
...@@ -89,34 +90,32 @@ const props = defineProps({ ...@@ -89,34 +90,32 @@ const props = defineProps({
}, },
content: { content: {
type: String, type: String,
default: default: "content"
"content"
} }
}); });
const formattedTime = computed((index) => { const formattedTime = computed(index => {
const date = new Date(index); const date = new Date(index);
if (isNaN(date.getTime())) { if (isNaN(date.getTime())) {
return index; // 如果不是有效日期,返回原值 return index; // 如果不是有效日期,返回原值
} }
const year = date.getFullYear(); const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()); const day = String(date.getDate());
const hours = String(date.getHours()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, "0");
const minutes = String(date.getMinutes()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, "0");
const seconds = String(date.getSeconds()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, "0");
// return `${year}年${month}月${day}日 ${hours}:${minutes}:${seconds}`; // return `${year}年${month}月${day}日 ${hours}:${minutes}:${seconds}`;
return `${month}${day}${hours}:${minutes}`; return `${month}${day}${hours}:${minutes}`;
}); });
const handleClickPerson = item => {
const handleClickPerson = (item) => {
emit("person-click", item); emit("person-click", item);
}; };
const handleInfoClick = (item) => { const handleInfoClick = item => {
emit("info-click", item); emit("info-click", item);
}; };
const handleToMoreNews = (item) => { const handleToMoreNews = item => {
emit("more-click", item); emit("more-click", item);
}; };
</script> </script>
...@@ -164,13 +163,13 @@ const handleToMoreNews = (item) => { ...@@ -164,13 +163,13 @@ const handleToMoreNews = (item) => {
} }
.more { .more {
width: 45px; width: 50px;
height: 24px; height: 24px;
position: absolute; position: absolute;
top: 12px; top: 12px;
right: 27px; right: 27px;
color: rgb(5, 95, 194); color: rgb(5, 95, 194);
font-family: 'Source Han Sans CN'; font-family: "Source Han Sans CN";
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
line-height: 24px; line-height: 24px;
...@@ -209,16 +208,13 @@ const handleToMoreNews = (item) => { ...@@ -209,16 +208,13 @@ const handleToMoreNews = (item) => {
} }
.avatar-containerOne { .avatar-containerOne {
left: 2px; left: 2px;
top: 29px; top: 29px;
.avatar-imageOne { .avatar-imageOne {
width: 20px; width: 20px;
height: 20px; height: 20px;
} }
} }
.avatar-containerTwo { .avatar-containerTwo {
...@@ -226,14 +222,11 @@ const handleToMoreNews = (item) => { ...@@ -226,14 +222,11 @@ const handleToMoreNews = (item) => {
top: 29px; top: 29px;
.avatar-imageTwo { .avatar-imageTwo {
width: 20px; width: 20px;
height: 20px; height: 20px;
} }
} }
.avatar { .avatar {
width: 42px; width: 42px;
height: 42px; height: 42px;
...@@ -260,7 +253,6 @@ const handleToMoreNews = (item) => { ...@@ -260,7 +253,6 @@ const handleToMoreNews = (item) => {
align-items: center; align-items: center;
margin-bottom: 5px; margin-bottom: 5px;
.name { .name {
color: rgb(59, 65, 75); color: rgb(59, 65, 75);
font-family: "Source Han Sans CN"; font-family: "Source Han Sans CN";
...@@ -290,7 +282,6 @@ const handleToMoreNews = (item) => { ...@@ -290,7 +282,6 @@ const handleToMoreNews = (item) => {
line-height: 24px; line-height: 24px;
letter-spacing: 0px; letter-spacing: 0px;
text-align: justify; text-align: justify;
} }
.triangle { .triangle {
...@@ -308,7 +299,7 @@ const handleToMoreNews = (item) => { ...@@ -308,7 +299,7 @@ const handleToMoreNews = (item) => {
/* 内层:原有颜色的三角形,覆盖在外层上面,模拟描边效果 */ /* 内层:原有颜色的三角形,覆盖在外层上面,模拟描边效果 */
.triangle::after { .triangle::after {
content: ''; content: "";
position: absolute; position: absolute;
top: -8px; top: -8px;
/* 向上偏移1px,对齐中心 */ /* 向上偏移1px,对齐中心 */
...@@ -320,31 +311,12 @@ const handleToMoreNews = (item) => { ...@@ -320,31 +311,12 @@ const handleToMoreNews = (item) => {
border-bottom: 8px solid transparent; border-bottom: 8px solid transparent;
border-right: 8px solid rgba(246, 250, 255, 1); border-right: 8px solid rgba(246, 250, 255, 1);
} }
} }
} }
} }
} }
} }
/* 响应式设计 */ /* 响应式设计 */
@media (max-width: 768px) { @media (max-width: 768px) {
.message-bubble { .message-bubble {
......
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
<div class="content-wrapper"> <div class="content-wrapper">
<div class="btn-wrapper" @mouseenter="stopAutoPlay" @mouseleave="startAutoPlay(true)"> <div class="btn-wrapper" @mouseenter="stopAutoPlay" @mouseleave="startAutoPlay(true)">
<div class="cards-mask"> <div class="cards-mask">
<div class="btn-box" :style="{ transform: `translateX(-${currentIndex * (cardWidth + cardGap)}px)` }"> <!-- <div class="btn-box" :style="{ transform: `translateX(-${currentIndex * (cardWidth + cardGap)}px)` }"> -->
<div class="btn-box">
<div class="btn-item-outer" v-for="(item, indexx) in buttonsData" :key="indexx"> <div class="btn-item-outer" v-for="(item, indexx) in buttonsData" :key="indexx">
<div <div
v-for="(value, index) in item" v-for="(value, index) in item"
......
...@@ -246,6 +246,7 @@ ...@@ -246,6 +246,7 @@
/> />
<div class="chart-header">{{ "关键词云" }}</div> <div class="chart-header">{{ "关键词云" }}</div>
<div class="box3Chart" id="box3Chart"></div> <div class="box3Chart" id="box3Chart"></div>
<!-- <Echarts :option="usChinaSanctionTrendOptions" height="100%"></Echarts> -->
</div> </div>
</div> </div>
</div> </div>
...@@ -259,6 +260,7 @@ import { onMounted, ref, computed, inject, watch, onUnmounted } from "vue"; ...@@ -259,6 +260,7 @@ import { onMounted, ref, computed, inject, watch, onUnmounted } from "vue";
import router from "@/router"; import router from "@/router";
import setChart from "@/utils/setChart"; import setChart from "@/utils/setChart";
import getWordCloudChart from "./uitls/worldCloudChart"; import getWordCloudChart from "./uitls/worldCloudChart";
import "echarts-wordcloud";
import { import {
getElementCount, getElementCount,
getNewDynamics, getNewDynamics,
...@@ -268,6 +270,7 @@ import { ...@@ -268,6 +270,7 @@ import {
getKeyWordDown, getKeyWordDown,
getOrderInfo getOrderInfo
} from "@/api/zmOverview/allElement"; } from "@/api/zmOverview/allElement";
import Echarts from "@/components/Chart/index.vue";
const activeDate = inject("activeDate"); const activeDate = inject("activeDate");
...@@ -409,6 +412,7 @@ const handleGetBox2ChartData = async () => { ...@@ -409,6 +412,7 @@ const handleGetBox2ChartData = async () => {
try { try {
const res = await getKeyWordUp(params); const res = await getKeyWordUp(params);
console.log("关键词云-上", res); console.log("关键词云-上", res);
console.log("关键词云-上 参数", params);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
box2ChartData.value = res.data.map(item => { box2ChartData.value = res.data.map(item => {
return { return {
...@@ -422,6 +426,8 @@ const handleGetBox2ChartData = async () => { ...@@ -422,6 +426,8 @@ const handleGetBox2ChartData = async () => {
const handleBox2Chart = async () => { const handleBox2Chart = async () => {
await handleGetBox2ChartData(); await handleGetBox2ChartData();
let box2Chart = getWordCloudChart(box2ChartData.value); let box2Chart = getWordCloudChart(box2ChartData.value);
console.log("关键词云-上 options =>", box2Chart);
console.log("关键词云-上 box2ChartData =>", box2ChartData.value);
setChart(box2Chart, "box2Chart"); setChart(box2Chart, "box2Chart");
}; };
...@@ -504,6 +510,7 @@ const handleGetBox3ChartData = async () => { ...@@ -504,6 +510,7 @@ const handleGetBox3ChartData = async () => {
const handleBox3Chart = async () => { const handleBox3Chart = async () => {
await handleGetBox3ChartData(); await handleGetBox3ChartData();
let box3Chart = getWordCloudChart(box3ChartData.value); let box3Chart = getWordCloudChart(box3ChartData.value);
console.log("关键词云-下", box3Chart);
setChart(box3Chart, "box3Chart"); setChart(box3Chart, "box3Chart");
}; };
......
const getWordCloudChart = data => {
const option = {
grid: {
left: 0,
top: 0,
right: 0,
bottom: 0
},
series: [
{
type: "wordCloud",
width: "80%",
height: "80%",
shape: "circle", //
// 其他形状你可以使用形状路径
// 或者自定义路径
// shape: 'circle' // 圆形(默认)
// shape: 'rect' // 矩形
// shape: 'roundRect' // 圆角矩形
// shape: 'triangle' // 三角形
// shape: 'diamond' // 菱形
// shape: 'pentagon' // 五边形
// shape: 'star' // 星形
// shape: 'cardioid' // 心形
gridSize: 15, // 网格大小,影响词间距。
sizeRange: [10, 30], // 定义词云中文字大小的范围
rotationRange: [0, 0],
rotationStep: 15,
drawOutOfBound: false, // 是否超出画布
// 字体
textStyle: {
fontweight: "bold",
// normal: {
// color: function () {
// return 'rgb(' + [
// Math.round(Math.random() * 160),
// Math.round(Math.random() * 160),
// Math.round(Math.random() * 160)
// ].join(',') + ')';
// }
// },
color: function () {
let colors = [
"rgba(189, 33, 33, 1)",
"rgba(232, 151, 21, 1)",
"rgba(220, 190, 68, 1)",
"rgba(96, 58, 186, 1)",
"rgba(32, 121, 69, 1)",
"rgba(22, 119, 255, 1)"
];
return colors[parseInt(Math.random() * colors.length)];
},
emphasis: {
shadowBlur: 5,
shadowColor: "#333",
fontweight: "bold"
}
},
// 设置词云数据
data: data
}
]
};
return option;
};
const getWordCloudChart = (data) => { export default getWordCloudChart;
const option = {
grid: {
left: 0,
top: 0,
right: 0,
bottom: 0,
},
series: [
{
type: "wordCloud",
width: '80%',
height: '80%',
shape: "rect", //
// 其他形状你可以使用形状路径
// 或者自定义路径
// shape: 'circle' // 圆形(默认)
// shape: 'rect' // 矩形
// shape: 'roundRect' // 圆角矩形
// shape: 'triangle' // 三角形
// shape: 'diamond' // 菱形
// shape: 'pentagon' // 五边形
// shape: 'star' // 星形
// shape: 'cardioid' // 心形
gridSize: 15, // 网格大小,影响词间距。
sizeRange: [10, 30], // 定义词云中文字大小的范围
rotationRange: [0, 0],
rotationStep: 15,
drawOutOfBound: false, // 是否超出画布
// 字体
textStyle: {
// normal: {
// color: function () {
// return 'rgb(' + [
// Math.round(Math.random() * 160),
// Math.round(Math.random() * 160),
// Math.round(Math.random() * 160)
// ].join(',') + ')';
// }
// },
color: function () {
let colors = [
"rgba(189, 33, 33, 1)",
"rgba(232, 151, 21, 1)",
"rgba(220, 190, 68, 1)",
"rgba(96, 58, 186, 1)",
"rgba(32, 121, 69, 1)",
"rgba(22, 119, 255, 1)",
];
return colors[parseInt(Math.random() * colors.length)];
},
emphasis: {
shadowBlur: 5,
shadowColor: "#333",
},
},
// 设置词云数据
data: data,
},
],
}
return option
}
export default getWordCloudChart
\ No newline at end of file
...@@ -969,6 +969,14 @@ const initRightDonut = async () => { ...@@ -969,6 +969,14 @@ const initRightDonut = async () => {
color: `rgba(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor( color: `rgba(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(
Math.random() * 256 Math.random() * 256
)}, 1)` )}, 1)`
},
label: {
show: true,
position: "outside",
fontWeight: "bold",
fontSize: 14,
color: "#333",
distance: 10
} }
}; };
let item1 = { let item1 = {
...@@ -976,7 +984,15 @@ const initRightDonut = async () => { ...@@ -976,7 +984,15 @@ const initRightDonut = async () => {
value: res.data[i].amount, value: res.data[i].amount,
x: Math.random() * 10, x: Math.random() * 10,
y: Math.random() * 10, y: Math.random() * 10,
symbolSize: res.data[i].amount * 9 symbolSize: res.data[i].amount * 9,
label: {
show: true,
position: "outside",
fontWeight: "bold",
fontSize: 14,
color: "#333",
distance: 10
}
}; };
// 先判断data中是否包含上述数据 // 先判断data中是否包含上述数据
...@@ -1000,7 +1016,10 @@ const initRightDonut = async () => { ...@@ -1000,7 +1016,10 @@ const initRightDonut = async () => {
}, },
lineStyle: { lineStyle: {
width: res.data[i].amount, width: res.data[i].amount,
curveness: 0.2 curveness: 0.3,
color: `rgba(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 100 + 100)}, ${Math.floor(
Math.random() * 256
)}, 0.6)`
} }
}; };
...@@ -1043,7 +1062,7 @@ const initRightDonut = async () => { ...@@ -1043,7 +1062,7 @@ const initRightDonut = async () => {
{ {
type: "graph", type: "graph",
layout: "circular", layout: "circular",
symbolSize: 50, symbolSize: 80,
roam: true, roam: true,
label: { label: {
show: true show: true
...@@ -1051,7 +1070,8 @@ const initRightDonut = async () => { ...@@ -1051,7 +1070,8 @@ const initRightDonut = async () => {
edgeSymbol: ["circle", ""], edgeSymbol: ["circle", ""],
edgeSymbolSize: [4, 80], edgeSymbolSize: [4, 80],
edgeLabel: { edgeLabel: {
fontSize: 20 fontSize: 20,
show: false
}, },
data: data, data: data,
// links: [], // links: [],
...@@ -1059,7 +1079,20 @@ const initRightDonut = async () => { ...@@ -1059,7 +1079,20 @@ const initRightDonut = async () => {
lineStyle: { lineStyle: {
opacity: 0.9, opacity: 0.9,
width: 2, width: 2,
curveness: 0 curveness: 0.3
},
emphasis: {
focus: "adjacency",
lineStyle: {
width: 4
},
label: {
show: true,
position: "outside",
fontWeight: "bold",
fontSize: 16,
distance: 10
}
} }
} }
] ]
......
...@@ -2,97 +2,107 @@ ...@@ -2,97 +2,107 @@
<div class="wrap"> <div class="wrap">
<div class="box1"> <div class="box1">
<AnalysisBox title="相关政令关联分析" :showAllBtn="false"> <AnalysisBox title="相关政令关联分析" :showAllBtn="false">
<div class="box1-main"> <div class="box1-main">
<div class="left"> <div class="left">
<el-empty v-if="siderList.length === 0" style="padding-top: 240px;" description="暂无数据" :image-size="100" /> <el-empty
<div v-if="siderList.length === 0"
class="left-item" style="padding-top: 240px"
:class="{ leftItemActive: siderActiveIndex === index }" description="暂无数据"
v-for="(item, index) in siderList" :image-size="100"
:key="index" />
@click="handleClickSider(index)" <div
> class="left-item"
<div class="time">{{ item.time }}</div> :class="{ leftItemActive: siderActiveIndex === index }"
<div class="title">{{ item.title }}</div> v-for="(item, index) in siderList"
:key="index"
@click="handleClickSider(index)"
>
<div class="time">{{ item.time }}</div>
<div class="title">{{ item.title }}</div>
</div>
</div> </div>
</div>
<div class="right"> <div class="right">
<div class="info-box"> <div class="info-box">
<div class="info-left"> <div class="info-left">
<img :src="decreeInfo.img" alt="" /> <img :src="decreeInfo.img" alt="" />
</div> </div>
<div class="info-right"> <div class="info-right">
<div class="info-item"> <div class="info-item">
<div class="item-left">{{ "政令全称:" }}</div> <div class="item-left">{{ "政令全称:" }}</div>
<div class="item-right1"> <div class="item-right1">
<div class="item-right-text"> <div class="item-right-text">
{{ decreeInfo.totalTitle }} {{ decreeInfo.totalTitle }}
</div> </div>
<div <div
class="item-right-icon" class="item-right-icon"
v-if="decreeInfo.totalTitle" v-if="decreeInfo.totalTitle"
@click="handleToDecreeDetail(decreeInfo)" @click="handleToDecreeDetail(decreeInfo)"
> >
<img src="./assets/icons/open-icon.png" alt="" /> <img src="./assets/icons/open-icon.png" alt="" />
</div>
</div> </div>
</div> </div>
</div> <div class="info-item">
<div class="info-item"> <div class="item-left">{{ "英文全称:" }}</div>
<div class="item-left">{{ "英文全称:" }}</div> <div class="item-right">
<div class="item-right"> {{ decreeInfo.eTotalTitle }}
{{ decreeInfo.eTotalTitle }} </div>
</div> </div>
</div> <div class="info-item">
<div class="info-item"> <div class="item-left">{{ "签署时间:" }}</div>
<div class="item-left">{{ "签署时间:" }}</div> <div class="item-right">
<div class="item-right"> {{ decreeInfo.signTime }}
{{ decreeInfo.signTime }} </div>
</div> </div>
</div> <div class="info-item">
<div class="info-item"> <div class="item-left">{{ "发布机构:" }}</div>
<div class="item-left">{{ "发布机构:" }}</div> <div class="item-right">
<div class="item-right"> {{ decreeInfo.signOrg }}
{{ decreeInfo.signOrg }} </div>
</div> </div>
</div> </div>
</div> </div>
</div> <div class="list-box">
<div class="list-box"> <div class="list-header">
<div class="list-header"> <div class="icon">
<div class="icon"> <img src="./assets/icons/box1-list-header-icon.png" alt="" />
<img src="./assets/icons/box1-list-header-icon.png" alt="" /> </div>
<div class="title">{{ "政令主要内容" }}</div>
</div> </div>
<div class="title">{{ "政令主要内容" }}</div> <div class="list-main">
</div> <el-empty
<div class="list-main"> v-if="showList.length === 0"
<el-empty v-if="showList.length === 0" style="padding-top: 150px;" description="暂无数据" :image-size="100" /> style="padding-top: 150px"
<div class="list-item" v-for="(val, idx) in showList" :key="idx"> description="暂无数据"
<div class="id">{{ idx + 1 }}</div> :image-size="100"
<div class="title">{{ val.content }}</div> />
<!-- <div class="open"> <div class="list-item" v-for="(val, idx) in showList" :key="idx">
<div class="id">{{ idx + 1 }}</div>
<div class="title">{{ val.content }}</div>
<!-- <div class="open">
<img src="./assets/icons/open-icon.png" alt="" /> <img src="./assets/icons/open-icon.png" alt="" />
</div> --> </div> -->
</div>
</div> </div>
</div> </div>
</div> <div class="list-footer">
<div class="list-footer"> <div class="footer-left">
<div class="footer-left"> {{ `共 ${decreeInfo.list.length} 项` }}
{{ `共 ${decreeInfo.list.length} 项` }} </div>
</div> <div class="footer-right">
<div class="footer-right"> <el-pagination
<el-pagination @current-change="handleCurrentChange"
@current-change="handleCurrentChange" :pageSize="pageSize"
:pageSize="pageSize" :current-page="currentPage"
:current-page="currentPage" background
background layout="prev, pager, next"
layout="prev, pager, next" :total="decreeInfo.list.length"
:total="decreeInfo.list.length" />
/> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
</AnalysisBox> </AnalysisBox>
</div> </div>
</div> </div>
...@@ -411,10 +421,11 @@ onMounted(() => { ...@@ -411,10 +421,11 @@ onMounted(() => {
margin-top: 22px; margin-top: 22px;
.info-item { .info-item {
display: flex; display: flex;
height: 30px; min-height: 30px;
max-height: 60px;
margin-bottom: 8px; margin-bottom: 8px;
.item-left { .item-left {
margin-top: 3px; // margin-top: 3px;
width: 100px; width: 100px;
height: 24px; height: 24px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
...@@ -425,12 +436,12 @@ onMounted(() => { ...@@ -425,12 +436,12 @@ onMounted(() => {
} }
.item-right { .item-right {
width: 769px; width: 769px;
height: 30px; // height: 30px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
line-height: 30px; line-height: 25px;
} }
.item-right1 { .item-right1 {
display: flex; display: flex;
...@@ -491,7 +502,7 @@ onMounted(() => { ...@@ -491,7 +502,7 @@ onMounted(() => {
overflow-y: auto; overflow-y: auto;
.list-item { .list-item {
width: 1180px; width: 1180px;
height: 54px; min-height: 65px;
box-sizing: border-box; box-sizing: border-box;
border-radius: 4px; border-radius: 4px;
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
...@@ -515,13 +526,14 @@ onMounted(() => { ...@@ -515,13 +526,14 @@ onMounted(() => {
.title { .title {
margin-left: 13px; margin-left: 13px;
margin-top: 12px; margin-top: 12px;
height: 30px; margin-bottom: 12px;
// height: 30px;
width: 1100px; width: 1100px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
line-height: 30px; line-height: 25px;
} }
.open { .open {
width: 16px; width: 16px;
...@@ -553,4 +565,4 @@ onMounted(() => { ...@@ -553,4 +565,4 @@ onMounted(() => {
} }
} }
} }
</style> </style>
\ No newline at end of file
...@@ -112,13 +112,11 @@ ...@@ -112,13 +112,11 @@
<div class="box1-top-content"> <div class="box1-top-content">
<div class="box1-top-content-item"> <div class="box1-top-content-item">
<span class="box1-top-content-item-title">· 发布机构:</span> <span class="box1-top-content-item-title">· 发布机构:</span>
<span class="box1-top-content-item-content">{{ item.postOrgName <span class="box1-top-content-item-content">{{ item.postOrgName }}</span>
}}</span>
</div> </div>
<div class="box1-top-content-item"> <div class="box1-top-content-item">
<span class="box1-top-content-item-title">· 生效日期:</span> <span class="box1-top-content-item-title">· 生效日期:</span>
<span class="box1-top-content-item-content">{{ item.postDate <span class="box1-top-content-item-content">{{ item.postDate }}</span>
}}</span>
</div> </div>
<div class="box1-top-content-item"> <div class="box1-top-content-item">
<span class="box1-top-content-item-title">· 涉及领域:</span> <span class="box1-top-content-item-title">· 涉及领域:</span>
...@@ -356,10 +354,9 @@ ...@@ -356,10 +354,9 @@
<el-table-column label="重点领域" width="180"> <el-table-column label="重点领域" width="180">
<template #default="scope"> <template #default="scope">
<div style="display: flex; align-items: center; gap: 5px"> <div style="display: flex; align-items: center; gap: 5px">
<el-tag v-for="tag in scope.row.tags" :key="tag" <el-tag v-for="tag in scope.row.tags" :key="tag" :type="getTagType(tag)">{{
:type="getTagType(tag)">{{ tag
tag }}</el-tag>
}}</el-tag>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -373,23 +370,22 @@ ...@@ -373,23 +370,22 @@
<el-row :gutter="20" style="width: 1600px; margin: 0 auto; height: 505px; margin-top: 16px"> <el-row :gutter="20" style="width: 1600px; margin: 0 auto; height: 505px; margin-top: 16px">
<el-col :span="8"> <el-col :span="8">
<custom-container title="制裁领域分布" :titleIcon="radarIcon" height="480px"> <custom-container title="实体领域分布" :titleIcon="radarIcon" height="480px">
<template #header-right> <template #header-right>
<el-checkbox v-model="domainChecked" label="50%规则" size="large" /> <el-checkbox v-model="domainChecked" label="50%规则" size="large" />
</template> </template>
<template #default> <template #default>
<EChart :option="radarOption" autoresize :style="{ height: '450px' }" /> <EChart :option="radarOption" autoresize :style="{ height: '460px' }" />
</template> </template>
</custom-container> </custom-container>
</el-col> </el-col>
<el-col :span="16"> <el-col :span="16">
<custom-container title="制裁清单数量增长趋势" :titleIcon="qushiIcon" height="480px"> <custom-container title="实体清单数量增长趋势" :titleIcon="qushiIcon" height="480px">
<template #header-right> <template #header-right>
<div style="display: flex; align-items: center; gap: 16px"> <div style="display: flex; align-items: center; gap: 16px">
<el-checkbox v-model="trendChecked" label="50%规则" size="large" /> <el-checkbox v-model="trendChecked" label="50%规则" size="large" />
<el-select v-model="selectedEntityId" placeholder="请选择清单类型" style="width: 160px"> <el-select v-model="selectedEntityId" placeholder="请选择清单类型" style="width: 160px">
<el-option v-for="item in infoList" :key="item.id" :label="item.nameZh" <el-option v-for="item in infoList" :key="item.id" :label="item.nameZh" :value="item.id" />
:value="item.id" />
</el-select> </el-select>
</div> </div>
</template> </template>
...@@ -419,8 +415,7 @@ ...@@ -419,8 +415,7 @@
<template #default> <template #default>
<div class="box4"> <div class="box4">
<div style="height: 90%; overflow-y: auto; padding-top: 10px"> <div style="height: 90%; overflow-y: auto; padding-top: 10px">
<div class="box4-item" v-for="(item, idx) in sanctionProcessList" <div class="box4-item" v-for="(item, idx) in sanctionProcessList" :key="item.title">
:key="item.title">
<div class="box4-item-left"> <div class="box4-item-left">
<el-image :src="dotIcon" alt="图片" class="box4-item-left-icon" /> <el-image :src="dotIcon" alt="图片" class="box4-item-left-icon" />
<div <div
...@@ -502,8 +497,7 @@ ...@@ -502,8 +497,7 @@
)?.[0] )?.[0]
}} }}
</div> </div>
<CommonPrompt :content="scope.row.name" <CommonPrompt :content="scope.row.name" style="flex: 1; overflow: hidden" />
style="flex: 1; overflow: hidden" />
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -511,10 +505,9 @@ ...@@ -511,10 +505,9 @@
<el-table-column prop="domains" label="涉及领域" min-width="150"> <el-table-column prop="domains" label="涉及领域" min-width="150">
<template #default="scope"> <template #default="scope">
<div class="domain-tags"> <div class="domain-tags">
<el-tag v-for="tag in scope.row.domains" :key="tag" <el-tag v-for="tag in scope.row.domains" :key="tag" :type="getTagType(tag)">{{
:type="getTagType(tag)">{{ tag
tag }}</el-tag>
}}</el-tag>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -600,10 +593,9 @@ ...@@ -600,10 +593,9 @@
<div class="left-main"> <div class="left-main">
<el-checkbox-group v-model="checkedTech"> <el-checkbox-group v-model="checkedTech">
<div class="checkbox-grid"> <div class="checkbox-grid">
<el-checkbox v-for="item in techOptions" :key="item.value" <el-checkbox v-for="item in techOptions" :key="item.value" :label="item.value">{{
:label="item.value">{{ item.label
item.label }}</el-checkbox>
}}</el-checkbox>
</div> </div>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
...@@ -634,12 +626,10 @@ ...@@ -634,12 +626,10 @@
</div> </div>
<img :src="item.orgLogoUrl || comTitle" alt="" /> <img :src="item.orgLogoUrl || comTitle" alt="" />
<div class="main"> <div class="main">
<div class="main-title" @click="handleTitleClick(item)">{{ item.title }} <div class="main-title" @click="handleTitleClick(item)">{{ item.title }}</div>
</div>
<div class="main-desc">{{ item.desc }}</div> <div class="main-desc">{{ item.desc }}</div>
<div class="tag-box"> <div class="tag-box">
<div v-for="tag in item.tags" :key="tag" class="tag-item">{{ tag }} <div v-for="tag in item.tags" :key="tag" class="tag-item">{{ tag }}</div>
</div>
</div> </div>
<div :class="{ 'count-tag': item.countTag }">{{ item.countTag }}</div> <div :class="{ 'count-tag': item.countTag }">{{ item.countTag }}</div>
...@@ -711,7 +701,7 @@ ...@@ -711,7 +701,7 @@
</template> </template>
<script setup> <script setup>
import NewsList from "@/components/base/NewsList/index.vue"; import NewsList from "@/components/base/newsList/index.vue";
import RiskSignal from "@/components/RiskSignal/RiskSignal.vue"; import RiskSignal from "@/components/RiskSignal/RiskSignal.vue";
import { onMounted, ref, computed, reactive, shallowRef, watch, nextTick } from "vue"; import { onMounted, ref, computed, reactive, shallowRef, watch, nextTick } from "vue";
import { useContainerScroll } from "@/hooks/useScrollShow"; import { useContainerScroll } from "@/hooks/useScrollShow";
...@@ -1160,6 +1150,7 @@ const radarOption = ref({ ...@@ -1160,6 +1150,7 @@ const radarOption = ref({
confine: true confine: true
}, },
legend: { legend: {
show: false,
top: "0%", top: "0%",
icon: "circle", icon: "circle",
itemWidth: 12, itemWidth: 12,
...@@ -1175,9 +1166,13 @@ const radarOption = ref({ ...@@ -1175,9 +1166,13 @@ const radarOption = ref({
}, },
data: [] data: []
}, },
grid: {
top: "5%",
bottom: "5%"
},
radar: { radar: {
radius: "55%", radius: "60%",
center: ["50%", "55%"], center: ["50%", "50%"],
// shape: 'circle', // shape: 'circle',
indicator: [], indicator: [],
axisName: { axisName: {
...@@ -3522,6 +3517,7 @@ const handleMediaClick = item => { ...@@ -3522,6 +3517,7 @@ const handleMediaClick = item => {
margin-top: 21px; margin-top: 21px;
height: 450px; height: 450px;
display: flex; display: flex;
gap: 20px;
.center-center-news { .center-center-news {
flex-shrink: 0; flex-shrink: 0;
......
...@@ -113,8 +113,8 @@ export function getPieOption1(data, title) { ...@@ -113,8 +113,8 @@ export function getPieOption1(data, title) {
? params.labelRect.x ? params.labelRect.x
: params.labelRect.x + params.labelRect.width : params.labelRect.x + params.labelRect.width
: data.length < 10 : data.length < 10
? params.labelRect.x + params.labelRect.width ? params.labelRect.x + params.labelRect.width
: params.labelRect.x; : params.labelRect.x;
return { return {
labelLinePoints: points labelLinePoints: points
}; };
...@@ -1001,12 +1001,39 @@ export const getMultipleBarChart_m = object => { ...@@ -1001,12 +1001,39 @@ export const getMultipleBarChart_m = object => {
}, },
xAxis: { xAxis: {
type: "category", type: "category",
data: names data: names,
axisLabel: {
margin: 20
},
axisLabel: {
formatter: "{value} 年",
color: "rgba(95, 101, 108, 1)",
margin: 20
},
axisLine: {
lineStyle: {
color: "rgb(231, 243, 255)",
width: 1
}
},
axisTick: {
show: false
}
}, },
yAxis: { yAxis: {
type: "value", type: "value",
splitNumber: 5, splitNumber: 5,
alignTicks: false alignTicks: false,
name: "个",
nameLocation: "end",
nameGap: 10,
nameTextStyle: {
color: "rgba(95, 101, 108, 1)",
fontSize: 14,
fontWeight: 400,
fontFamily: "Microsoft YaHei",
padding: [0, 0, 0, 0]
}
}, },
series: datas series: datas
}; };
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论