提交 88236308 authored 作者: 张伊明's avatar 张伊明

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

...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div id="app"> <div id="app">
<div class="pro-wrapper"> <div class="pro-wrapper">
<div class="home-page"> <div class="home-page">
<ModuleHeader/> <ModuleHeader />
<div class="main-container"> <div class="main-container">
<router-view /> <router-view />
</div> </div>
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
</div> </div>
</div> </div>
<div class="tool-box" @click="handleClickToolBox"> <div class="tool-box">
<div class="tool-item"> <!-- <div class="tool-item">
<img src="@/assets/icons/tool-item-icon1.png" alt="" /> <img src="@/assets/icons/tool-item-icon1.png" alt="" />
</div> </div>
<div class="tool-item"> <div class="tool-item">
...@@ -34,7 +34,26 @@ ...@@ -34,7 +34,26 @@
</div> </div>
<div class="tool-item"> <div class="tool-item">
<img src="@/assets/icons/tool-item-icon4.png" alt="" /> <img src="@/assets/icons/tool-item-icon4.png" alt="" />
</div> </div> -->
<el-tooltip content="智能写报" placement="left" :offset="10">
<div class="tool-item" @click="handleOpenPage('znxb')">
<img src="@/assets/icons/tool-item-icon1.png" alt="" />
</div>
</el-tooltip>
<el-tooltip content="智能翻译" placement="left" :offset="10">
<div class="tool-item" @click="handleClickToolBox">
<img src="@/assets/icons/tool-item-icon2.png" alt="" />
</div>
</el-tooltip>
<!-- <div class="tool-item">
<img src="@/assets/icons/tool-item-icon3.png" alt="" />
</div> -->
<el-tooltip content="智能问答" placement="left" :offset="10">
<div class="tool-item" @click="handleOpenPage('znwd')">
<img src="@/assets/icons/tool-item-icon4.png" alt="" />
</div>
</el-tooltip>
</div> </div>
<!-- <div class="ai-btn" @click="openAiBox"> <!-- <div class="ai-btn" @click="openAiBox">
...@@ -121,7 +140,7 @@ const handleGetPersonType = async () => { ...@@ -121,7 +140,7 @@ const handleGetPersonType = async () => {
personTypeList.value = []; personTypeList.value = [];
} }
window.sessionStorage.setItem("personTypeList", JSON.stringify(personTypeList.value)); window.sessionStorage.setItem("personTypeList", JSON.stringify(personTypeList.value));
} catch (error) { } } catch (error) {}
}; };
const isCurrentOverview = computed(() => { const isCurrentOverview = computed(() => {
...@@ -252,6 +271,14 @@ const handleClickTitle = item => { ...@@ -252,6 +271,14 @@ const handleClickTitle = item => {
} }
}; };
const handleOpenPage = page => {
const pageObj = {
znwd: "/chat",
znxb: "/writtingAsstaint"
};
window.open(pageObj[page], "_blank");
};
const handleClickToolBox = () => { const handleClickToolBox = () => {
ElMessage.warning("当前功能正在开发中,敬请期待!"); ElMessage.warning("当前功能正在开发中,敬请期待!");
}; };
...@@ -291,7 +318,7 @@ body { ...@@ -291,7 +318,7 @@ body {
text-align: justify; text-align: justify;
} }
.el-popper[data-popper-placement^="top"]>.el-popper__arrow:before { .el-popper[data-popper-placement^="top"] > .el-popper__arrow:before {
display: none; display: none;
} }
</style> </style>
...@@ -640,7 +667,8 @@ body { ...@@ -640,7 +667,8 @@ body {
.right-btn { .right-btn {
position: absolute; position: absolute;
top: 132px; // top: 132px;
top: 100px;
right: 0; right: 0;
z-index: 10000000000000; z-index: 10000000000000;
......
...@@ -129,3 +129,42 @@ export function getSupplyList(params) { ...@@ -129,3 +129,42 @@ export function getSupplyList(params) {
params, params,
}) })
} }
// 企业市值:市值变化
export function getMarketCapList(params) {
return request({
method: 'GET',
url: `/api/enterprisePage/marketCap/${params}`,
})
}
// 企业发展:营收折线图
export function getRevenueList(params) {
return request({
method: 'GET',
url: `/api/enterprisePage/revenue/${params}`,
})
}
// 企业发展:净利润折线图
export function getNetProfitList(params) {
return request({
method: 'GET',
url: `/api/enterprisePage/netProfit/${params}`,
})
}
// 企业发展:人员情况折线图
export function getPersonnelList(params) {
return request({
method: 'GET',
url: `/api/enterprisePage/personnel/${params}`,
})
}
// 企业发展: 市场占比折线图
export function getMarketShareList(params) {
return request({
method: 'GET',
url: `/api/enterprisePage/marketShare/${params}`,
})
}
\ No newline at end of file
...@@ -17,10 +17,10 @@ export function getLatestDecree() { ...@@ -17,10 +17,10 @@ export function getLatestDecree() {
} }
// 风险信号 // 风险信号
export function getDecreeRiskSignal() { export function getDecreeRiskSignal(params) {
return request({ return request({
method: 'GET', method: 'GET',
url: `/api/administrativeOrderOverview/riskSignal`, url: `/api/commonFeature/riskSignal/${params.moduleId}`,
}) })
} }
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
<div class="name">{{ "管理员" }}</div> <div class="name">{{ "管理员" }}</div>
</div> </div>
</div> </div>
<div class="menu-box" v-if="isShowMenu" @mouseenter="handleHoverMenu(true)" @mouseleave="handleHoverMenu(false)"> <div class="menu-box" v-show="isShowMenu" @mouseenter="handleHoverMenu(true)" @mouseleave="handleHoverMenu(false)">
<div class="menu-content"> <div class="menu-content">
<div class="menu-item" v-for="(item, index) in menuList" :key="index" @click="handleToModule(item)"> <div class="menu-item" v-for="(item, index) in menuList" :key="index" @click="handleToModule(item)">
<div class="icon"> <div class="icon">
...@@ -372,11 +372,16 @@ onMounted(() => { ...@@ -372,11 +372,16 @@ onMounted(() => {
top: 52px; top: 52px;
left: 0; left: 0;
box-sizing: border-box; box-sizing: border-box;
border: 1px solid rgba(255, 255, 255, 1);
border-radius: 10px; border-radius: 10px;
backdrop-filter: blur(30px); backdrop-filter: blur(10px);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1); -webkit-backdrop-filter: blur(10px);
background: rgba(255, 255, 255, 0.8); box-shadow: 0px 8px 32px 0px rgba(31, 38, 135, 0.15);
background: rgba(255, 255, 255, 0.25);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.3);
background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.2) 100%);
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.2);
.menu-content { .menu-content {
width: 562px; width: 562px;
......
...@@ -112,7 +112,7 @@ const handleToNewsAnalysis = (item, index) => { ...@@ -112,7 +112,7 @@ const handleToNewsAnalysis = (item, index) => {
} }
.more { .more {
width: 54px; width: 45px;
height: 24px; height: 24px;
position: absolute; position: absolute;
top: 12px; top: 12px;
...@@ -141,7 +141,9 @@ const handleToNewsAnalysis = (item, index) => { ...@@ -141,7 +141,9 @@ const handleToNewsAnalysis = (item, index) => {
cursor: pointer; cursor: pointer;
&:hover { &:hover {
background: var(--color-bg-hover);
.right-top .title { .right-top .title {
text-decoration: underline;
color: rgb(5, 95, 194) !important; color: rgb(5, 95, 194) !important;
font-weight: 700; font-weight: 700;
} }
......
...@@ -83,6 +83,21 @@ const tableData = ref([ ...@@ -83,6 +83,21 @@ const tableData = ref([
{ name: '2级提示文字-加粗', className: 'text-tip-2-bold' }, { name: '2级提示文字-加粗', className: 'text-tip-2-bold' },
{ name: '3级提示文字', className: 'text-tip-3' }, { name: '3级提示文字', className: 'text-tip-3' },
{ name: '黑色', className: 'text-primary-clor'},
{ name: '黑色90% / 主标题文字颜色', className: 'text-primary-90-clor'},
{ name: '黑色80% / 小标题文字颜色', className: 'text-primary-80-clor'},
{ name: '黑色65% / 正文颜色', className: 'text-primary-65-clor'},
{ name: '黑色50%', className: 'text-primary-50-clor'},
{ name: '黑色10%', className: 'bg-black-10'},
{ name: '黑色5% / 分割线颜色', className: 'bg-black-5'},
{ name: '黑色2% / 灰色背景色', className: 'bg-black-2'},
{ name: '白色主色', className: 'bg-white-100'},
{name: '主色', className: 'main-color'},
{name: '高亮背景色', className: 'color-bg-active'}
]) ])
</script> </script>
......
...@@ -185,4 +185,49 @@ ...@@ -185,4 +185,49 @@
// 业务主色 高亮背景 // 业务主色 高亮背景
.color-bg-active{ .color-bg-active{
background: rgb(246, 250, 255); background: rgb(246, 250, 255);
}
// 黑色
.text-primary-clor{
color: #0a121e;
}
// 黑色90% / 主标题文字颜色
.text-primary-90-clor{
color: #222934;
}
// 黑色80% / 小标题文字颜色
.text-primary-80-clor{
color: #3b414b;
}
// 黑色65% / 正文颜色
.text-primary-65-clor{
color: #5f656c;
}
// 黑色50%
.text-primary-50-clor{
color: #84888e;
}
// 黑色10%
.bg-black-10{
background: #E6E7E8;
}
// 黑色5%
.bg-black-5{
background: #EAECEE;
}
// 黑色2%
.bg-black-2{
background: #F7F8F9;
}
// 白色主色
.bg-white-100{
background: #FFFFFF;
} }
\ No newline at end of file
@use '@/styles/common.scss';
.radio-group-as-gap-btn {
@extend .text-tip-1;
.el-radio-button {
--el-radio-button-checked-bg-color: var(--bg-white-100);
--el-radio-button-checked-border-color: var(--bg-black-10);
border-radius: 4px;
}
.el-radio-button.is-active {
--el-radio-button-checked-text-color: var(--color-primary-100);
--el-radio-button-checked-bg-color: var(--color-primary-10);
--el-radio-button-checked-border-color: var(--color-primary-5);
border-radius: 4px;
}
}
\ No newline at end of file
...@@ -417,6 +417,7 @@ const pageSize = ref(5); // 每页显示 5 条 ...@@ -417,6 +417,7 @@ const pageSize = ref(5); // 每页显示 5 条
const handleFieldChange = domainId => { const handleFieldChange = domainId => {
console.log("领域改变", domainId); console.log("领域改变", domainId);
console.log("领域值 =>", selectedFieldForLatest.value); console.log("领域值 =>", selectedFieldForLatest.value);
newsCurrentPage.value = 1;
getUSGovernmentLatestDynamicData(); getUSGovernmentLatestDynamicData();
}; };
......
...@@ -712,7 +712,7 @@ onUnmounted(() => { ...@@ -712,7 +712,7 @@ onUnmounted(() => {
.main { .main {
width: 1598px; width: 1598px;
height: 884px; // height: 884px;
margin: 0 auto; margin: 0 auto;
margin-top: 14px; margin-top: 14px;
display: flex; display: flex;
...@@ -726,9 +726,9 @@ onUnmounted(() => { ...@@ -726,9 +726,9 @@ onUnmounted(() => {
background: rgba(255, 255, 255, 0.65); background: rgba(255, 255, 255, 0.65);
} }
.left { & > .left {
width: 472px; width: 472px;
display: none;
.box1 { .box1 {
width: 472px; width: 472px;
height: 884px; height: 884px;
...@@ -915,11 +915,12 @@ onUnmounted(() => { ...@@ -915,11 +915,12 @@ onUnmounted(() => {
} }
.right { .right {
width: 1110px; width: 100%;
.box2 { .box2 {
width: 1110px; width: 100%;
height: 434px; // height: 434px;
height: 700px;
.box2-header { .box2-header {
height: 48px; height: 48px;
...@@ -957,30 +958,34 @@ onUnmounted(() => { ...@@ -957,30 +958,34 @@ onUnmounted(() => {
} }
.box2-main { .box2-main {
height: 386px; // height: 386px;
height: 646px;
background: rgba(255, 255, 255, 0.65); background: rgba(255, 255, 255, 0.65);
display: flex; display: flex;
justify-content: center; justify-content: center;
gap: 16px; gap: 16px;
.inner-box1 { .inner-box1 {
width: 640px; width: 50%;
height: 368px; // height: 368px;
height: 100%;
overflow: hidden; overflow: hidden;
box-sizing: border-box; box-sizing: border-box;
border: 1px solid rgba(234, 236, 238, 1); // border: 1px solid rgba(234, 236, 238, 1);
border-radius: 10px; // border-radius: 10px;
display: flex; display: flex;
.left { .left {
width: 320px; // width: 320px;
border-right: 1px solid rgba(234, 236, 238, 1); width: 100%;
// border-right: 1px solid rgba(234, 236, 238, 1);
.left-main { .left-main {
margin-top: 9px; // margin-top: 9px;
height: 270px; height: 600px;
.left-item { .left-item {
width: 100%;
height: 54px; height: 54px;
border: 1px solid transparent; border: 1px solid transparent;
display: flex; display: flex;
...@@ -1009,7 +1014,7 @@ onUnmounted(() => { ...@@ -1009,7 +1014,7 @@ onUnmounted(() => {
} }
.text { .text {
width: 260px; width: 95%;
height: 30px; height: 30px;
margin-left: 12px; margin-left: 12px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
...@@ -1035,7 +1040,7 @@ onUnmounted(() => { ...@@ -1035,7 +1040,7 @@ onUnmounted(() => {
} }
.left-footer { .left-footer {
margin-top: 30px; // margin-top: 30px;
height: 60px; height: 60px;
display: flex; display: flex;
justify-content: center; justify-content: center;
...@@ -1049,7 +1054,7 @@ onUnmounted(() => { ...@@ -1049,7 +1054,7 @@ onUnmounted(() => {
overflow: hidden; overflow: hidden;
overflow-y: auto; overflow-y: auto;
cursor: pointer; cursor: pointer;
display: none;
.title { .title {
width: 283px; width: 283px;
min-height: 24px; min-height: 24px;
...@@ -1157,8 +1162,10 @@ onUnmounted(() => { ...@@ -1157,8 +1162,10 @@ onUnmounted(() => {
} }
.inner-box2 { .inner-box2 {
width: 412px; // width: 412px;
height: 368px; width: 760px;
// height: 368px;
height: 617px;
box-sizing: border-box; box-sizing: border-box;
border: 1px solid rgba(234, 236, 238, 1); border: 1px solid rgba(234, 236, 238, 1);
border-radius: 10px; border-radius: 10px;
...@@ -1185,8 +1192,8 @@ onUnmounted(() => { ...@@ -1185,8 +1192,8 @@ onUnmounted(() => {
} }
.box2Chart { .box2Chart {
width: 412px; width: 760px;
height: 368px; height: 617px;
} }
} }
} }
...@@ -1194,8 +1201,9 @@ onUnmounted(() => { ...@@ -1194,8 +1201,9 @@ onUnmounted(() => {
.box3 { .box3 {
margin-top: 16px; margin-top: 16px;
width: 1110px; width: 100%;
height: 434px; // height: 434px;
height: 700px;
.box3-header { .box3-header {
height: 48px; height: 48px;
...@@ -1233,30 +1241,32 @@ onUnmounted(() => { ...@@ -1233,30 +1241,32 @@ onUnmounted(() => {
} }
.box3-main { .box3-main {
height: 386px; height: 646px;
background: rgba(255, 255, 255, 0.65); background: rgba(255, 255, 255, 0.65);
display: flex; display: flex;
justify-content: center; justify-content: center;
gap: 16px; gap: 16px;
.inner-box1 { .inner-box1 {
width: 640px; width: 50%;
height: 368px; // height: 368px;
height: 100%;
overflow: hidden; overflow: hidden;
box-sizing: border-box; box-sizing: border-box;
border: 1px solid rgba(234, 236, 238, 1); // border: 1px solid rgba(234, 236, 238, 1);
border-radius: 10px; // border-radius: 10px;
display: flex; display: flex;
.left { .left {
width: 320px; width: 100%;
border-right: 1px solid rgba(234, 236, 238, 1); // border-right: 1px solid rgba(234, 236, 238, 1);
.left-main { .left-main {
margin-top: 9px; // margin-top: 9px;
height: 270px; height: 600px;
.left-item { .left-item {
width: 100%;
height: 54px; height: 54px;
border: 1px solid transparent; border: 1px solid transparent;
display: flex; display: flex;
...@@ -1285,7 +1295,7 @@ onUnmounted(() => { ...@@ -1285,7 +1295,7 @@ onUnmounted(() => {
} }
.text { .text {
width: 260px; width: 95%;
height: 30px; height: 30px;
margin-left: 12px; margin-left: 12px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
...@@ -1311,7 +1321,7 @@ onUnmounted(() => { ...@@ -1311,7 +1321,7 @@ onUnmounted(() => {
} }
.left-footer { .left-footer {
margin-top: 30px; // margin-top: 30px;
height: 60px; height: 60px;
display: flex; display: flex;
justify-content: center; justify-content: center;
...@@ -1325,7 +1335,7 @@ onUnmounted(() => { ...@@ -1325,7 +1335,7 @@ onUnmounted(() => {
overflow: hidden; overflow: hidden;
overflow-y: auto; overflow-y: auto;
cursor: pointer; cursor: pointer;
display: none;
.title { .title {
width: 283px; width: 283px;
min-height: 24px; min-height: 24px;
...@@ -1433,8 +1443,8 @@ onUnmounted(() => { ...@@ -1433,8 +1443,8 @@ onUnmounted(() => {
} }
.inner-box2 { .inner-box2 {
width: 412px; width: 760px;
height: 368px; height: 617px;
box-sizing: border-box; box-sizing: border-box;
border: 1px solid rgba(234, 236, 238, 1); border: 1px solid rgba(234, 236, 238, 1);
border-radius: 10px; border-radius: 10px;
...@@ -1461,8 +1471,8 @@ onUnmounted(() => { ...@@ -1461,8 +1471,8 @@ onUnmounted(() => {
} }
.box3Chart { .box3Chart {
width: 412px; width: 760px;
height: 368px; height: 617px;
} }
} }
} }
......
...@@ -164,7 +164,7 @@ function getOption() { ...@@ -164,7 +164,7 @@ function getOption() {
})); }));
const titles = months.map((month, index) => ({ const titles = months.map((month, index) => ({
text: `{month|${month.format('M月')}} {stats|共 ${monthStats[index].total} 项, 已落实 ${monthStats[index].resolved}}`, text: `{month|${month.format('M月')}} {stats|共 ${monthStats[index].total} 项, 已落实 0}`,
left: `${gapPercent + index * (calendarWidthPercent + gapPercent)}%`, left: `${gapPercent + index * (calendarWidthPercent + gapPercent)}%`,
top: 10, top: 10,
textStyle: { textStyle: {
......
...@@ -282,7 +282,7 @@ function getOption() { ...@@ -282,7 +282,7 @@ function getOption() {
const titles = months.map((month, index) => ({ const titles = months.map((month, index) => ({
// text: `{month|${month.format('M月')}} {stats| ${monthStats[index].total} , 已落实 ${monthStats[index].resolved} 项}`, // text: `{month|${month.format('M月')}} {stats| ${monthStats[index].total} , 已落实 ${monthStats[index].resolved} 项}`,
text: index ===0 ?`{month|${month.format('M月')}} {stats| ${monthStats[index].total} , 已落实 ${monthStats[index].resolved} 项}`:` {month|${month.format('M月')}} {stats| ${monthStats[index].total} , 已落实 ${monthStats[index].resolved} 项}`, text: index ===0 ?`{month|${month.format('M月')}} {stats| ${monthStats[index].total} , 已落实 0 项}`:` {month|${month.format('M月')}} {stats| ${monthStats[index].total} , 已落实 0 项}`,
left: `${gapPercent + index * (calendarWidthPercent + gapPercent)}%`, left: `${gapPercent + index * (calendarWidthPercent + gapPercent)}%`,
top: 10, top: 10,
textStyle: { textStyle: {
......
...@@ -210,7 +210,7 @@ ...@@ -210,7 +210,7 @@
</div> </div>
</div> </div>
<div class="bottom-content"> <div class="bottom-content">
<CalendarHeatmap v-if="timelineData.length > 0" :timelineData="timelineData" /> <CalendarHeatmap v-if="timelineData.length > 0" :timelineData="timelineData" />
<!-- <div class="timeline-container"> <!-- <div class="timeline-container">
<div class="timeline-list"> <div class="timeline-list">
<div v-for="(dept, index) in timelineList" :key="index" class="dept-row"> <div v-for="(dept, index) in timelineList" :key="index" class="dept-row">
...@@ -320,13 +320,11 @@ const monthNum = computed(() => { ...@@ -320,13 +320,11 @@ const monthNum = computed(() => {
} }
}); });
// 全政府-美政府部门对我打压遏制时间线 // 全政府-美政府部门对我打压遏制时间线
const loadingHistory = ref(false); const loadingHistory = ref(false);
const timelineData = ref([]) const timelineData = ref([]);
const getUSGovernmentSanctionHistoryData = async () => { const getUSGovernmentSanctionHistoryData = async () => {
timelineData.value = [] // 初始化数据 timelineData.value = []; // 初始化数据
loadingHistory.value = true; loadingHistory.value = true;
try { try {
const params = { const params = {
...@@ -378,7 +376,7 @@ const getUSGovernmentSanctionHistoryData = async () => { ...@@ -378,7 +376,7 @@ const getUSGovernmentSanctionHistoryData = async () => {
// sanctionId: item.sanctionId // sanctionId: item.sanctionId
// }); // });
// }); // });
// //统计完成后生成新的数组 // //统计完成后生成新的数组
// let fArr = [] // let fArr = []
// rawList.forEach((item)=>{ // rawList.forEach((item)=>{
...@@ -803,12 +801,17 @@ const handleGetSanList = async () => { ...@@ -803,12 +801,17 @@ const handleGetSanList = async () => {
const res = await getSanTypeList(params); const res = await getSanTypeList(params);
console.log("制裁手段列表", res); console.log("制裁手段列表", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
methodOptions.value = res.data.map(item => { let _methodOptions = res.data.map(item => {
return { return {
label: item.name, label: item.name,
value: item.id value: item.id
}; };
}); });
_methodOptions.unshift({
label: "全部制裁手段",
value: ""
});
methodOptions.value = _methodOptions;
methodValue.value = ""; methodValue.value = "";
} }
} catch (error) {} } catch (error) {}
......
...@@ -972,7 +972,7 @@ const initRightDonut = async () => { ...@@ -972,7 +972,7 @@ const initRightDonut = async () => {
}, },
label: { label: {
show: true, show: true,
position: "outside", // position: "outside",
fontWeight: "bold", fontWeight: "bold",
fontSize: 14, fontSize: 14,
color: "#333", color: "#333",
...@@ -987,7 +987,7 @@ const initRightDonut = async () => { ...@@ -987,7 +987,7 @@ const initRightDonut = async () => {
symbolSize: res.data[i].amount * 9, symbolSize: res.data[i].amount * 9,
label: { label: {
show: true, show: true,
position: "outside", // position: "outside",
fontWeight: "bold", fontWeight: "bold",
fontSize: 14, fontSize: 14,
color: "#333", color: "#333",
...@@ -1062,16 +1062,20 @@ const initRightDonut = async () => { ...@@ -1062,16 +1062,20 @@ const initRightDonut = async () => {
{ {
type: "graph", type: "graph",
layout: "circular", layout: "circular",
circular: {
rotateLabel: true
},
symbolSize: 80, symbolSize: 80,
roam: true, roam: true,
label: { label: {
show: true show: true
// position: "outside"
}, },
edgeSymbol: ["circle", ""], edgeSymbol: ["circle", ""],
edgeSymbolSize: [4, 80], edgeSymbolSize: [4, 80],
edgeLabel: { edgeLabel: {
fontSize: 20, fontSize: 20,
show: false show: true
}, },
data: data, data: data,
// links: [], // links: [],
...@@ -1232,7 +1236,12 @@ const getPredictionList = async () => { ...@@ -1232,7 +1236,12 @@ const getPredictionList = async () => {
const res = await getPrediction(); const res = await getPrediction();
if (res && res.code === 200) { if (res && res.code === 200) {
console.log("----getPredictionList", res.data); console.log("----getPredictionList", res.data);
warningList.value = res.data; warningList.value = res.data.map(item => {
return {
...item,
statementList: item.statementList.reverse()
};
});
} }
} catch (error) { } catch (error) {
console.error("获取联盟动态接口失败:", error); console.error("获取联盟动态接口失败:", error);
...@@ -2046,7 +2055,7 @@ watch(activeDate, async () => { ...@@ -2046,7 +2055,7 @@ watch(activeDate, async () => {
} }
.anti-area { .anti-area {
margin-top: 16px; margin-top: 30px;
width: 1601px; width: 1601px;
height: 500px; height: 500px;
display: flex; display: flex;
...@@ -2055,7 +2064,7 @@ watch(activeDate, async () => { ...@@ -2055,7 +2064,7 @@ watch(activeDate, async () => {
.area-left { .area-left {
width: 792px; width: 792px;
height: 500px; height: 520px;
box-sizing: border-box; box-sizing: border-box;
border-radius: var(---10, 10px); border-radius: var(---10, 10px);
/* 业务系统/模块阴影 */ /* 业务系统/模块阴影 */
...@@ -2098,7 +2107,7 @@ watch(activeDate, async () => { ...@@ -2098,7 +2107,7 @@ watch(activeDate, async () => {
.area-right { .area-right {
width: 792px; width: 792px;
height: 500px; height: 520px;
box-sizing: border-box; box-sizing: border-box;
border-radius: var(---10, 10px); border-radius: var(---10, 10px);
/* 业务系统/模块阴影 */ /* 业务系统/模块阴影 */
...@@ -2134,8 +2143,8 @@ watch(activeDate, async () => { ...@@ -2134,8 +2143,8 @@ watch(activeDate, async () => {
.right-content { .right-content {
width: 100%; width: 100%;
height: calc(100% - 48px); height: 450px;
padding: 33px 48px 59px 50px; // padding: 33px 48px 59px 50px;
} }
} }
} }
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
import AnalysisBox from '@/components/base/boxBackground/analysisBox.vue'; import AnalysisBox from '@/components/base/boxBackground/analysisBox.vue';
import { ref, watch } from 'vue'; import { ref, watch } from 'vue';
import { getEnterpriseBranch, getEnterpriseKeyPerson } from '@/api/companyPages'; import { getEnterpriseBranch, getEnterpriseKeyPerson } from '@/api/companyPages';
import PersonAvatar from '@/components/base/people/personAvatar.vue'; import PersonAvatar from '@/components/base/people/PersonAvatar.vue';
import { ElDescriptions, ElDescriptionsItem, ElDivider, ElImage, ElSpace } from 'element-plus'; import { ElDescriptions, ElDescriptionsItem, ElDivider, ElImage, ElSpace } from 'element-plus';
import '@/styles/descriptions.scss' import '@/styles/descriptions.scss'
......
<template>
<sanctions-situation :enterprise-info="enterpriseInfo" :line-data="lineData"></sanctions-situation>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { getNetProfitList, getPersonnelList, getRevenueList } from '@/api/companyPages';
import SanctionsSituation, { LineDataItem } from './SanctionsSituation.vue';
import { l } from 'vite/dist/node/types.d-aGj9QkWt';
// 定义组件属性
const props = defineProps({
enterpriseInfo: {
type: Object,
default: {}
}
});
const lineData = ref<LineDataItem[]>([])
onMounted(async () => {
await intData()
})
async function intData() {
let { data: revenue } = await getRevenueList(props.enterpriseInfo.id)
revenue = revenue?.map(item => ({
time: new Date(item.year, 1, 1),
value: item.value,
type: '营收',
unit: item.unit ?? '亿元'
})) ?? []
let { data: netProfit } = await getNetProfitList(props.enterpriseInfo.id)
netProfit = netProfit?.map(item => ({
time: new Date(item.year, 1, 1),
value: item.value,
type: '净利润',
unit: item.unit ?? '亿元'
})) ?? []
let { data: personnel } = await getPersonnelList(props.enterpriseInfo.id)
personnel = personnel?.map(item => ({
time: new Date(item.year, 1, 1),
value: item.value,
type: '人员',
unit: item.unit ?? '亿元'
})) ?? []
lineData.value = [...revenue, ...netProfit, ...personnel]
}
</script>
\ No newline at end of file
<template>
<sanctions-situation :enterprise-info="enterpriseInfo" :line-data="lineData"></sanctions-situation>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { getMarketShareList } from '@/api/companyPages';
import SanctionsSituation, { LineDataItem } from './SanctionsSituation.vue';
// 定义组件属性
const props = defineProps({
enterpriseInfo: {
type: Object,
default: {}
}
});
const lineData = ref<LineDataItem[]>([])
onMounted(async () => {
await intData()
})
async function intData() {
const { data } = await getMarketShareList(props.enterpriseInfo.id)
lineData.value = data?.map(item => ({
time: new Date(item.year, 1, 1),
value: item.value,
unit: item.unit ?? '亿元'
})) ?? []
}
</script>
\ No newline at end of file
<template>
<sanctions-situation :enterprise-info="enterpriseInfo" :line-data="lineData"></sanctions-situation>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { getMarketCapList } from '@/api/companyPages';
import SanctionsSituation, { LineDataItem } from './SanctionsSituation.vue';
// 定义组件属性
const props = defineProps({
enterpriseInfo: {
type: Object,
default: {}
}
});
const lineData = ref<LineDataItem[]>([])
onMounted(async () => {
await intData()
})
async function intData() {
const { data } = await getMarketCapList(props.enterpriseInfo.id)
lineData.value = data?.map(item => ({
time: new Date(item.year, 1, 1),
value: item.value,
type: '市值变化',
unit: item.unit ?? '亿元'
})) ?? []
}
</script>
\ No newline at end of file
<template>
<sanctions-situation :enterprise-info="enterpriseInfo" :line-data="lineData"></sanctions-situation>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { getMarketCapList, getStudyList } from '@/api/companyPages';
import SanctionsSituation, { LineDataItem } from './SanctionsSituation.vue';
// 定义组件属性
const props = defineProps({
enterpriseInfo: {
type: Object,
default: {}
}
});
const lineData = ref<LineDataItem[]>([])
onMounted(async () => {
await intData()
})
async function intData() {
const { data } = await getStudyList(props.enterpriseInfo.id)
lineData.value = data?.map(item => ({
time: new Date(item.year, 1, 1),
value: item.currentValue,
type: item.type,
unit: item.unit ?? '亿元'
})) ?? []
}
</script>
\ No newline at end of file
<script setup lang="ts"> <script setup lang="ts">
import '@/styles/tabs.scss' import '@/styles/tabs.scss'
import { ElTabPane, ElTabs } from 'element-plus'; import { ElTabPane, ElTabs } from 'element-plus';
import SanctionsSituation from './SanctionsSituation.vue'; import EnterpriseScale from './EnterpriseScale.vue';
import MarketShare from './MarketShare.vue';
import MarketValue from './MarketValue.vue';
import ResearchAndDevelopment from './ResearchAndDevelopment.vue';
// 定义组件属性 // 定义组件属性
const props = defineProps({ const props = defineProps({
...@@ -15,12 +18,18 @@ const props = defineProps({ ...@@ -15,12 +18,18 @@ const props = defineProps({
<template> <template>
<div style="overflow: visible;"> <div style="overflow: visible;">
<el-tabs tabPosition="left" class="disinheritance tabs-nav-no-wrap left-float-nav-tabs"> <el-tabs tabPosition="left" class="disinheritance tabs-nav-no-wrap left-float-nav-tabs">
<el-tab-pane label="企业规模"> <el-tab-pane label="企业规模" lazy>
<sanctions-situation :enterprise-info="enterpriseInfo"></sanctions-situation> <enterprise-scale :enterprise-info="enterpriseInfo"></enterprise-scale>
</el-tab-pane>
<el-tab-pane label="市值变化" lazy>
<market-value :enterprise-info="enterpriseInfo"></market-value>
</el-tab-pane>
<el-tab-pane label="研发投入" lazy>
<research-and-development :enterprise-info="enterpriseInfo"></research-and-development>
</el-tab-pane>
<el-tab-pane label="市场占比" lazy>
<market-share :enterprise-info="enterpriseInfo"></market-share>
</el-tab-pane> </el-tab-pane>
<!-- <el-tab-pane label="市值变化"></el-tab-pane>
<el-tab-pane label="研发投入"></el-tab-pane>
<el-tab-pane label="市场占比"></el-tab-pane> -->
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
\ No newline at end of file
...@@ -30,7 +30,7 @@ import { getSupplyAreaList } from '@/api/companyPages'; ...@@ -30,7 +30,7 @@ import { getSupplyAreaList } from '@/api/companyPages';
import { ref, watch } from 'vue'; import { ref, watch } from 'vue';
import { ElSpace } from 'element-plus'; import { ElSpace } from 'element-plus';
// 导入自定义组件 // 导入自定义组件
import CapitalScale from './capitalScale.vue' import CapitalScale from './CapitalScale.vue'
// 响应式数据 // 响应式数据
const areas = ref([]) // 供应区域列表 const areas = ref([]) // 供应区域列表
......
...@@ -29,10 +29,10 @@ ...@@ -29,10 +29,10 @@
import { ref, onMounted } from 'vue'; import { ref, onMounted } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { getEnterprisePageInfo } from '@/api/companyPages'; import { getEnterprisePageInfo } from '@/api/companyPages';
import TitlePane from './component/titlePane.vue'; import TitlePane from './component/TitlePane.vue';
import NewsPane from './component/detailsPages/newsPane.vue'; import NewsPane from './component/DetailsPages/NewsPane.vue';
import BaseInfo from './component/detailsPages/baseInfo.vue'; import BaseInfo from './component/DetailsPages/BaseInfo.vue';
import OperatingPages from './component/operatingPages/index.vue'; import OperatingPages from './component/OperatingPages/index.vue';
import '@/styles/tabs.scss' import '@/styles/tabs.scss'
import '@/styles/container.scss' import '@/styles/container.scss'
import { ElScrollbar, ElSpace, ElTabs, ElTabPane } from 'element-plus'; import { ElScrollbar, ElSpace, ElTabs, ElTabPane } from 'element-plus';
......
...@@ -115,13 +115,15 @@ ...@@ -115,13 +115,15 @@
{{ item.name }} {{ item.name }}
</div> </div>
<div class="box1-main-right-info"> <div class="box1-main-right-info">
<div class="tag" :class="{ <!-- <div class="tag" :class="{
tag1: tag.status == 1, tag1: tag.status == 1,
tag2: tag.status == 2, tag2: tag.status == 2,
tag3: tag.status == 3 tag3: tag.status == 3
}" v-for="(tag, index) in item.industryList" :key="index"> }" v-for="(tag, index) in item.industryList" :key="index">
{{ tag.industryName }} {{ tag.industryName }}
</div> </div> -->
<AreaTag v-for="(tag, index) in item.industryList" :key="index" :tagName="tag.industryName">
</AreaTag>
</div> </div>
<div class="box1-main-right-center"> <div class="box1-main-right-center">
{{ item.describe }} {{ item.describe }}
...@@ -183,13 +185,14 @@ ...@@ -183,13 +185,14 @@
<div class="text">{{ "查看更多" }}</div> <div class="text">{{ "查看更多" }}</div>
</div> </div>
</div> --> </div> -->
<RiskSignal :list="warningList" @item-click="handleClickToDetail" @more-click="handleToMoreRiskSignal"> <RiskSignal :list="warningList" @item-click="handleClickToDetail" @more-click="handleToMoreRiskSignal"
riskLevel="signalLevel" postDate="signalTime" name="signalTitle">
</RiskSignal> </RiskSignal>
</div> </div>
<DivideHeader id="position2" class="divide2" :titleText="'资讯要闻'"></DivideHeader> <DivideHeader id="position2" class="divide2" :titleText="'资讯要闻'"></DivideHeader>
<div class="center-center"> <div class="center-center">
<!-- <NewsList :newsList="newsList" @item-click="handleToNewsAnalysis" @more-click="handleToMoreNews" /> --> <NewsList :newsList="newsList" @item-click="handleToNewsAnalysis" @more-click="handleToMoreNews" />
<NewsList :list="newsList" /> <!-- <NewsList :newsList="newsList" /> -->
<MessageBubble :messageList="messageList" @person-click="handleClickPerson" @info-click="handleGetMessage" <MessageBubble :messageList="messageList" @person-click="handleClickPerson" @info-click="handleGetMessage"
imageUrl="img" @more-click="handleToSocialDetail" /> imageUrl="img" @more-click="handleToSocialDetail" />
</div> </div>
...@@ -410,7 +413,7 @@ ...@@ -410,7 +413,7 @@
</template> </template>
<script setup> <script setup>
// import NewsList from "@/components/base/NewsList/index.vue"; import NewsList from "@/components/base/NewsList/index.vue";
import { onMounted, ref, computed, watch, nextTick } from "vue"; import { onMounted, ref, computed, watch, nextTick } from "vue";
import router from "@/router"; import router from "@/router";
import { import {
...@@ -426,6 +429,7 @@ import { ...@@ -426,6 +429,7 @@ import {
getDecreeTypeList getDecreeTypeList
} from "@/api/decree/home"; } from "@/api/decree/home";
import RiskSignal from "@/components/RiskSignal/RiskSignal.vue"; import RiskSignal from "@/components/RiskSignal/RiskSignal.vue";
// import RiskSignal from "@/components/base/RiskSignal/index.vue";
import { getPersonSummaryInfo } from "@/api/common/index"; import { getPersonSummaryInfo } from "@/api/common/index";
import { getNews, getSocialMedia } from "@/api/general/index"; import { getNews, getSocialMedia } from "@/api/general/index";
import DivideHeader from "@/components/DivideHeader.vue"; import DivideHeader from "@/components/DivideHeader.vue";
...@@ -637,8 +641,11 @@ const warningList = ref([ ...@@ -637,8 +641,11 @@ const warningList = ref([
// } // }
]); ]);
const handlegetDecreeRiskSignal = async () => { const handlegetDecreeRiskSignal = async () => {
const params = {
moduleId: "0101"
};
try { try {
const res = await getDecreeRiskSignal(); const res = await getDecreeRiskSignal(params);
console.log("风险信号", res); console.log("风险信号", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
warningList.value = res.data; warningList.value = res.data;
...@@ -1760,6 +1767,7 @@ onMounted(async () => { ...@@ -1760,6 +1767,7 @@ onMounted(async () => {
margin-top: 14px; margin-top: 14px;
display: flex; display: flex;
height: 24px; height: 24px;
gap: 8px;
.tag { .tag {
height: 24px; height: 24px;
......
import 'echarts-wordcloud';
const getWordCloudChart = (data) => { const getWordCloudChart = (data) => {
const option = { const option = {
......
...@@ -4,19 +4,9 @@ ...@@ -4,19 +4,9 @@
<AnalysisBox title="相关政令关联分析" :showAllBtn="false"> <AnalysisBox title="相关政令关联分析" :showAllBtn="false">
<div class="box1-main"> <div class="box1-main">
<div class="left"> <div class="left">
<el-empty <el-empty v-if="siderList.length === 0" style="padding-top: 240px" description="暂无数据" :image-size="100" />
v-if="siderList.length === 0" <div class="left-item" :class="{ leftItemActive: siderActiveIndex === index }"
style="padding-top: 240px" v-for="(item, index) in siderList" :key="index" @click="handleClickSider(index)">
description="暂无数据"
:image-size="100"
/>
<div
class="left-item"
:class="{ leftItemActive: siderActiveIndex === index }"
v-for="(item, index) in siderList"
:key="index"
@click="handleClickSider(index)"
>
<div class="time">{{ item.time }}</div> <div class="time">{{ item.time }}</div>
<div class="title">{{ item.title }}</div> <div class="title">{{ item.title }}</div>
</div> </div>
...@@ -25,7 +15,11 @@ ...@@ -25,7 +15,11 @@
<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 v-if="decreeInfo.img" :src="decreeInfo.img" alt="" />
<div v-else class="box1-main-left-img-mock">
<img class="img-mock-badge-img" src="./assets/icons/badge.png" />
<div class="img-mock-badge-title">{{ decreeInfo.eTotalTitle }}</div>
</div>
</div> </div>
<div class="info-right"> <div class="info-right">
<div class="info-item"> <div class="info-item">
...@@ -34,11 +28,7 @@ ...@@ -34,11 +28,7 @@
<div class="item-right-text"> <div class="item-right-text">
{{ decreeInfo.totalTitle }} {{ decreeInfo.totalTitle }}
</div> </div>
<div <div class="item-right-icon" v-if="decreeInfo.totalTitle" @click="handleToDecreeDetail(decreeInfo)">
class="item-right-icon"
v-if="decreeInfo.totalTitle"
@click="handleToDecreeDetail(decreeInfo)"
>
<img src="./assets/icons/open-icon.png" alt="" /> <img src="./assets/icons/open-icon.png" alt="" />
</div> </div>
</div> </div>
...@@ -71,12 +61,8 @@ ...@@ -71,12 +61,8 @@
<div class="title">{{ "政令主要内容" }}</div> <div class="title">{{ "政令主要内容" }}</div>
</div> </div>
<div class="list-main"> <div class="list-main">
<el-empty <el-empty v-if="showList.length === 0" style="padding-top: 150px" description="暂无数据"
v-if="showList.length === 0" :image-size="100" />
style="padding-top: 150px"
description="暂无数据"
:image-size="100"
/>
<div class="list-item" v-for="(val, idx) in showList" :key="idx"> <div class="list-item" v-for="(val, idx) in showList" :key="idx">
<div class="id">{{ idx + 1 }}</div> <div class="id">{{ idx + 1 }}</div>
<div class="title">{{ val.content }}</div> <div class="title">{{ val.content }}</div>
...@@ -91,14 +77,8 @@ ...@@ -91,14 +77,8 @@
{{ `共 ${decreeInfo.list.length} 项` }} {{ `共 ${decreeInfo.list.length} 项` }}
</div> </div>
<div class="footer-right"> <div class="footer-right">
<el-pagination <el-pagination @current-change="handleCurrentChange" :pageSize="pageSize" :current-page="currentPage"
@current-change="handleCurrentChange" background layout="prev, pager, next" :total="decreeInfo.list.length" />
:pageSize="pageSize"
:current-page="currentPage"
background
layout="prev, pager, next"
:total="decreeInfo.list.length"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -181,7 +161,7 @@ const handleClickSider = async index => { ...@@ -181,7 +161,7 @@ const handleClickSider = async index => {
} else { } else {
decreeInfo.value.list = []; decreeInfo.value.list = [];
} }
} catch (error) {} } catch (error) { }
}; };
const decreeInfo = ref({ const decreeInfo = ref({
...@@ -240,7 +220,7 @@ const handleGetRelateOrder = async () => { ...@@ -240,7 +220,7 @@ const handleGetRelateOrder = async () => {
} else { } else {
decreeInfo.value.list = []; decreeInfo.value.list = [];
} }
} catch (error) {} } catch (error) { }
} else { } else {
allData.value = []; allData.value = [];
siderList.value = []; siderList.value = [];
...@@ -286,10 +266,12 @@ onMounted(() => { ...@@ -286,10 +266,12 @@ onMounted(() => {
.wrap { .wrap {
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
.box-header { .box-header {
height: 56px; height: 56px;
display: flex; display: flex;
position: relative; position: relative;
.header-left { .header-left {
margin-top: 18px; margin-top: 18px;
width: 8px; width: 8px;
...@@ -297,6 +279,7 @@ onMounted(() => { ...@@ -297,6 +279,7 @@ onMounted(() => {
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: var(--color-main-active); background: var(--color-main-active);
} }
.title { .title {
margin-left: 14px; margin-left: 14px;
margin-top: 14px; margin-top: 14px;
...@@ -307,15 +290,18 @@ onMounted(() => { ...@@ -307,15 +290,18 @@ onMounted(() => {
font-size: 20px; font-size: 20px;
font-weight: 700; font-weight: 700;
} }
.header-btn-box { .header-btn-box {
position: absolute; position: absolute;
top: 14px; top: 14px;
right: 52px; right: 52px;
display: flex; display: flex;
.btn { .btn {
margin-left: 8px; margin-left: 8px;
} }
} }
.header-right { .header-right {
position: absolute; position: absolute;
top: 14px; top: 14px;
...@@ -323,9 +309,11 @@ onMounted(() => { ...@@ -323,9 +309,11 @@ onMounted(() => {
height: 28px; height: 28px;
display: flex; display: flex;
gap: 4px; gap: 4px;
.icon { .icon {
width: 28px; width: 28px;
height: 28px; height: 28px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -333,18 +321,22 @@ onMounted(() => { ...@@ -333,18 +321,22 @@ onMounted(() => {
} }
} }
} }
.box1 { .box1 {
margin: 16px auto; margin: 16px auto;
width: 1600px; width: 1600px;
max-height: 898px; max-height: 898px;
min-height: 788px; min-height: 788px;
.box1-main { .box1-main {
display: flex; display: flex;
margin-top: 5px; margin-top: 5px;
margin-bottom: 10px; margin-bottom: 10px;
.left { .left {
margin-left: 21px; margin-left: 21px;
width: 300px; width: 300px;
.left-item { .left-item {
width: 300px; width: 300px;
height: 64px; height: 64px;
...@@ -355,9 +347,11 @@ onMounted(() => { ...@@ -355,9 +347,11 @@ onMounted(() => {
font-size: 18px; font-size: 18px;
font-weight: 400; font-weight: 400;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
background: rgba(246, 250, 255, 1); background: rgba(246, 250, 255, 1);
} }
.time { .time {
width: 45px; width: 45px;
height: 24px; height: 24px;
...@@ -365,6 +359,7 @@ onMounted(() => { ...@@ -365,6 +359,7 @@ onMounted(() => {
margin-left: 18px; margin-left: 18px;
margin-top: 20px; margin-top: 20px;
} }
.title { .title {
width: 200px; width: 200px;
margin-left: 17px; margin-left: 17px;
...@@ -381,10 +376,12 @@ onMounted(() => { ...@@ -381,10 +376,12 @@ onMounted(() => {
white-space: nowrap; white-space: nowrap;
} }
} }
.leftItemActive { .leftItemActive {
color: var(--color-main-active); color: var(--color-main-active);
font-weight: 700; font-weight: 700;
background: rgba(246, 250, 255, 1); background: rgba(246, 250, 255, 1);
&::after { &::after {
position: relative; position: relative;
content: ""; content: "";
...@@ -396,8 +393,10 @@ onMounted(() => { ...@@ -396,8 +393,10 @@ onMounted(() => {
} }
} }
} }
.right { .right {
margin-left: 36px; margin-left: 36px;
.info-box { .info-box {
margin-left: 28px; margin-left: 28px;
width: 1180px; width: 1180px;
...@@ -406,24 +405,73 @@ onMounted(() => { ...@@ -406,24 +405,73 @@ onMounted(() => {
border: 1px solid rgba(231, 243, 255, 1); border: 1px solid rgba(231, 243, 255, 1);
background: rgba(246, 250, 255, 1); background: rgba(246, 250, 255, 1);
display: flex; display: flex;
.info-left { .info-left {
width: 242px; width: 242px;
height: 136px; height: 136px;
margin-top: 25px; margin-top: 25px;
margin-left: 28px; margin-left: 28px;
img { img {
// width: 100%; // width: 100%;
height: 100%; height: 100%;
} }
.box1-main-left-img-mock {
width: 100%;
height: 100%;
border-radius: 4px;
background-color: #0b1932;
display: flex;
align-items: center;
flex-direction: column;
justify-content: space-around;
padding: 15px;
.img-mock-badge-img {
width: 50px;
height: 50px;
}
.img-mock-badge-title {
text-align: center;
font-size: 14px;
line-height: 20px;
color: #fff;
height: 40px;
display: -webkit-box;
/* 2. 设置排列方向为垂直 */
-webkit-box-orient: vertical;
/* 3. 设置显示的行数(这里设为2行) */
-webkit-line-clamp: 2;
/* 4. 处理溢出和换行 */
overflow: hidden;
text-overflow: ellipsis;
word-break: break-word;
}
// .img-mock-badge-org {
// text-align: center;
// font-size: 14px;
// color: #fff;
// }
}
} }
.info-right { .info-right {
margin-left: 20px; margin-left: 20px;
margin-top: 22px; margin-top: 22px;
.info-item { .info-item {
display: flex; display: flex;
min-height: 30px; min-height: 30px;
max-height: 60px; max-height: 60px;
margin-bottom: 8px; margin-bottom: 8px;
.item-left { .item-left {
// margin-top: 3px; // margin-top: 3px;
width: 100px; width: 100px;
...@@ -434,6 +482,7 @@ onMounted(() => { ...@@ -434,6 +482,7 @@ onMounted(() => {
font-weight: 700; font-weight: 700;
line-height: 24px; line-height: 24px;
} }
.item-right { .item-right {
width: 769px; width: 769px;
// height: 30px; // height: 30px;
...@@ -443,8 +492,10 @@ onMounted(() => { ...@@ -443,8 +492,10 @@ onMounted(() => {
font-weight: 400; font-weight: 400;
line-height: 25px; line-height: 25px;
} }
.item-right1 { .item-right1 {
display: flex; display: flex;
.item-right-text { .item-right-text {
height: 30px; height: 30px;
color: var(--color-main-active); color: var(--color-main-active);
...@@ -453,12 +504,14 @@ onMounted(() => { ...@@ -453,12 +504,14 @@ onMounted(() => {
font-weight: 700; font-weight: 700;
line-height: 30px; line-height: 30px;
} }
.item-right-icon { .item-right-icon {
margin-left: 13px; margin-left: 13px;
margin-top: 7px; margin-top: 7px;
width: 16px; width: 16px;
height: 16px; height: 16px;
cursor: pointer; cursor: pointer;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -468,22 +521,27 @@ onMounted(() => { ...@@ -468,22 +521,27 @@ onMounted(() => {
} }
} }
} }
.list-box { .list-box {
margin-left: 36px; margin-left: 36px;
.list-header { .list-header {
display: flex; display: flex;
height: 56px; height: 56px;
border-bottom: 1px solid rgba(234, 236, 238, 1); border-bottom: 1px solid rgba(234, 236, 238, 1);
.icon { .icon {
margin-top: 21px; margin-top: 21px;
margin-left: 17px; margin-left: 17px;
width: 19px; width: 19px;
height: 19px; height: 19px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.title { .title {
margin-top: 16px; margin-top: 16px;
margin-left: 16px; margin-left: 16px;
...@@ -495,11 +553,13 @@ onMounted(() => { ...@@ -495,11 +553,13 @@ onMounted(() => {
line-height: 30px; line-height: 30px;
} }
} }
.list-main { .list-main {
min-height: 420px; min-height: 420px;
max-height: 540px; max-height: 540px;
overflow-x: hidden; overflow-x: hidden;
overflow-y: auto; overflow-y: auto;
.list-item { .list-item {
width: 1180px; width: 1180px;
min-height: 65px; min-height: 65px;
...@@ -509,9 +569,11 @@ onMounted(() => { ...@@ -509,9 +569,11 @@ onMounted(() => {
border-bottom: 1px solid rgba(234, 236, 238, 1); border-bottom: 1px solid rgba(234, 236, 238, 1);
display: flex; display: flex;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
background: var(--color-bg-hover); background: var(--color-bg-hover);
} }
.id { .id {
width: 24px; width: 24px;
height: 24px; height: 24px;
...@@ -523,6 +585,7 @@ onMounted(() => { ...@@ -523,6 +585,7 @@ onMounted(() => {
line-height: 24px; line-height: 24px;
color: #0a57a6; color: #0a57a6;
} }
.title { .title {
margin-left: 13px; margin-left: 13px;
margin-top: 12px; margin-top: 12px;
...@@ -535,10 +598,12 @@ onMounted(() => { ...@@ -535,10 +598,12 @@ onMounted(() => {
font-weight: 400; font-weight: 400;
line-height: 25px; line-height: 25px;
} }
.open { .open {
width: 16px; width: 16px;
height: 16px; height: 16px;
margin-top: 20px; margin-top: 20px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -547,12 +612,14 @@ onMounted(() => { ...@@ -547,12 +612,14 @@ onMounted(() => {
} }
} }
} }
.list-footer { .list-footer {
margin-left: 35px; margin-left: 35px;
height: 32px; height: 32px;
margin-top: 10px; margin-top: 10px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.footer-left { .footer-left {
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
......
...@@ -756,6 +756,10 @@ import { ...@@ -756,6 +756,10 @@ import {
getExportControlList getExportControlList
} from "@/api/exportControl"; } from "@/api/exportControl";
import { getMultipleBarChart_m } from "./utils/charts";
import { formatAnyDateToChinese } from "./utils";
import _ from "lodash";
const currentRuleCompany = ref(""); const currentRuleCompany = ref("");
const currentRuleCount = ref(0); const currentRuleCount = ref(0);
const currentRuleList = ref([]); const currentRuleList = ref([]);
...@@ -858,10 +862,6 @@ const handleTitleClick = item => { ...@@ -858,10 +862,6 @@ const handleTitleClick = item => {
window.open(route.href, "_blank"); window.open(route.href, "_blank");
}; };
import { getMultipleBarChart_m } from "./utils/charts";
import { formatAnyDateToChinese } from "./utils";
import _ from "lodash";
const handleCompClick = item => { const handleCompClick = item => {
// console.log("item", item); // console.log("item", item);
// if (item.entityType != 2) return; // if (item.entityType != 2) return;
...@@ -943,25 +943,33 @@ onMounted(async () => { ...@@ -943,25 +943,33 @@ onMounted(async () => {
return { name: entityNameZh, enName: entityName }; return { name: entityNameZh, enName: entityName };
}); });
entitiesDataInfoList.value = entitiesDataInfo || []; entitiesDataInfoList.value = entitiesDataInfo || [];
const list = _.chain(industryCountByYear).filter("year").orderBy("year", "desc").value(); const list = _.chain(industryCountByYear).filter("year").orderBy("year", "desc").value().slice(0, 5);
const cclList1 = _.chain(cclList).filter("year").orderBy("year", "desc").value(); const cclList1 = _.chain(cclList).filter("year").orderBy("year", "desc").value().slice(0, 5);
const total = _.sumBy(list, "count"); const total = _.sumBy(list, "count");
const maxCountItem = _.maxBy(list, "count");
const maxCountForList = maxCountItem ? maxCountItem.count : 0;
const maxCountItem1 = _.maxBy(cclList1, "count");
const maxCountForList1 = maxCountItem1 ? maxCountItem1.count : 0;
console.log("shuju list", list);
console.log("shuju total", total);
tableData1.value = _.map(list, item => { tableData1.value = _.map(list, item => {
return { return {
year: item.year, year: item.year,
num: item.count, num: item.count,
percent: item.count / total, percent: item.count / maxCountForList,
tags: item.domain tags: item.domain
}; };
}).slice(0, 5); });
tableData2.value = _.map(cclList1, item => { tableData2.value = _.map(cclList1, item => {
return { return {
year: item.year, year: item.year,
num: item.count, num: item.count,
percent: item.count / total, percent: item.count / maxCountForList1,
tags: item.domain tags: item.domain
}; };
}).slice(0, 5); });
// 获取趋势图数据 // 获取趋势图数据
await fetchTrendData(); await fetchTrendData();
...@@ -2132,94 +2140,94 @@ const handleMediaClick = item => { ...@@ -2132,94 +2140,94 @@ const handleMediaClick = item => {
} }
} }
// .box4 { .box4 {
// height: 786px; height: 786px;
// overflow: auto; overflow: auto;
// display: flex; display: flex;
// flex-direction: column; flex-direction: column;
// justify-content: space-between; justify-content: space-between;
// padding-top: 16px; padding-top: 16px;
// // padding-bottom: 50px; // padding-bottom: 50px;
// position: relative; position: relative;
// .box4-item {
// display: flex;
// gap: 10px;
// align-items: flex-start;
// padding-bottom: 35px;
// position: relative;
// .box4-item-left {
// display: flex;
// flex-direction: column;
// align-items: center;
// .box4-item-left-icon {
// width: 10px;
// height: 10px;
// }
// .box4-item-left-line { .box4-item {
// width: 1px; display: flex;
// height: 100%; gap: 10px;
// position: absolute; align-items: flex-start;
// border-left: 1px solid rgba(10, 87, 166, 0.3); padding-bottom: 35px;
// } position: relative;
// }
// .box4-item-right { .box4-item-left {
// display: flex; display: flex;
// flex-direction: column; flex-direction: column;
align-items: center;
// .box4-item-right-header {
// display: flex;
// justify-content: space-between;
// align-items: center;
// border-bottom: 1px solid rgba(234, 236, 238, 1);
// position: relative;
// top: -7.5px;
// padding-bottom: 8px;
// cursor: pointer;
// &-title {
// font-size: 18px;
// color: $base-color;
// font-weight: 700;
// }
// &-desc {
// font-size: 16px;
// font-weight: 700;
// color: rgba(59, 65, 75, 1);
// }
// }
// .box4-item-right-content { .box4-item-left-icon {
// font-size: 16px; width: 10px;
// font-weight: 400; height: 10px;
// color: rgba(95, 101, 108, 1); }
// overflow: hidden;
// display: -webkit-box;
// -webkit-line-clamp: 3;
// -webkit-box-orient: vertical;
// text-overflow: ellipsis;
// line-height: 25px;
// }
// }
// }
// .box4-footer { .box4-item-left-line {
// position: absolute; width: 1px;
// // margin-top: auto; height: 100%;
// display: flex; position: absolute;
// justify-content: center; border-left: 1px solid rgba(10, 87, 166, 0.3);
// align-items: center; }
// bottom: 30px; }
// left: 50%;
// margin-left: -30px; .box4-item-right {
// // margin-bottom: 30px; display: flex;
// } flex-direction: column;
// }
.box4-item-right-header {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid rgba(234, 236, 238, 1);
position: relative;
top: -7.5px;
padding-bottom: 8px;
cursor: pointer;
&-title {
font-size: 18px;
color: $base-color;
font-weight: 700;
}
&-desc {
font-size: 16px;
font-weight: 700;
color: rgba(59, 65, 75, 1);
}
}
.box4-item-right-content {
font-size: 16px;
font-weight: 400;
color: rgba(95, 101, 108, 1);
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
text-overflow: ellipsis;
line-height: 25px;
}
}
}
.box4-footer {
position: absolute;
// margin-top: auto;
display: flex;
justify-content: center;
align-items: center;
bottom: 30px;
left: 50%;
margin-left: -30px;
// margin-bottom: 30px;
}
}
.box5 { .box5 {
height: 115%; height: 115%;
......
...@@ -1024,16 +1024,19 @@ export const getMultipleBarChart_m = object => { ...@@ -1024,16 +1024,19 @@ export const getMultipleBarChart_m = object => {
type: "value", type: "value",
splitNumber: 5, splitNumber: 5,
alignTicks: false, alignTicks: false,
name: "个", axisLabel: {
nameLocation: "end", formatter: "{value} 个"
nameGap: 10,
nameTextStyle: {
color: "rgba(95, 101, 108, 1)",
fontSize: 14,
fontWeight: 400,
fontFamily: "Microsoft YaHei",
padding: [0, 0, 0, 0]
} }
// 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论