提交 dc88159f authored 作者: yanpeng's avatar yanpeng

Merge branch 'pre' of http://8.140.26.4:10003/caijian/risk-monitor into yp-dev

流水线 #560 已通过 于阶段
in 1 分 44 秒
...@@ -132,6 +132,28 @@ ...@@ -132,6 +132,28 @@
position: relative; position: relative;
} }
.risk-signal-detail-dialog .el-dialog__headerbtn {
top: 11px !important;
right: 16px !important;
width: 32px !important;
height: 32px !important;
display: inline-flex;
align-items: center;
justify-content: center;
}
.risk-signal-detail-dialog .el-dialog__headerbtn .el-dialog__close {
width: 16px;
height: 16px;
color: rgb(59, 65, 75) !important;
}
.risk-signal-detail-dialog .el-dialog__headerbtn .el-dialog__close svg,
.risk-signal-detail-dialog .el-dialog__headerbtn .el-dialog__close svg path {
fill: rgb(59, 65, 75) !important;
stroke: rgb(59, 65, 75) !important;
}
.risk-signal-detail-dialog .el-dialog__header::after { .risk-signal-detail-dialog .el-dialog__header::after {
content: ""; content: "";
position: absolute; position: absolute;
...@@ -234,7 +256,7 @@ ...@@ -234,7 +256,7 @@
.risk-signal-detail-dialog .risk-signal-detail-dialog__read-indicator { .risk-signal-detail-dialog .risk-signal-detail-dialog__read-indicator {
position: absolute; position: absolute;
right: 115px; right: 61px;
top: 50%; top: 50%;
transform: translateY(-50%); transform: translateY(-50%);
display: inline-flex; display: inline-flex;
......
<template> <template>
<div class="module-header-wrapper"> <div class="module-header-wrapper" @mouseleave="handleHideUserPanel">
<div class="nav-content" :class="{ 'nav-content-library': isShowDataLibrary }"> <div class="nav-content" :class="{ 'nav-content-library': isShowDataLibrary }">
<div class="nav-left" :class="{ 'flex-start': isShowSearchBar }"> <div class="nav-left" :class="{ 'flex-start': isShowSearchBar }">
<div class="icon"> <div class="icon">
...@@ -24,36 +24,36 @@ ...@@ -24,36 +24,36 @@
<div class="mail" @click="handleClickToolBox"> <div class="mail" @click="handleClickToolBox">
<img src="@/assets/icons/overview/mail.png" alt="" /> <img src="@/assets/icons/overview/mail.png" alt="" />
</div> </div>
<div class="user-trigger"> <div class="user-trigger" @mouseenter="handleShowUserPanel">
<div class="user" @click.stop="handleToggleUserPanel"> <div class="user" @click.stop>
<img src="@/assets/icons/overview/user.png" alt="" /> <img src="@/assets/icons/overview/user.png" alt="" />
</div> </div>
</div> <div v-if="isShowUserPanel" class="user-panel">
<div v-if="isShowUserPanel" class="user-panel">
<div class="user-panel-row">
<div class="user-panel-row"> <div class="blue-solid"></div>
<div class="blue-solid"></div> <span class="user-panel-value user-panel-value--nickname">{{ userNickname }}</span>
<span class="user-panel-value user-panel-value--nickname">{{ userNickname }}</span> <div class="role-box">
<div class="role-box"> <span class="user-panel-value user-panel-value--role">{{ roleName }}</span>
<span class="user-panel-value user-panel-value--role">{{ roleName }}</span> </div>
</div> </div>
</div>
<div class="user-panel-row user-panel-row--single"> <div class="user-panel-row user-panel-row--single">
<span class="user-panel-value user-panel-value--organ">{{ organName }}</span> <span class="user-panel-value user-panel-value--organ">{{ organName }}</span>
</div> </div>
<div class="solid"></div> <div class="solid"></div>
<div class="user-panel-logout" @click.stop="handleUserCommand('logout')"><img src="./back.png" <div class="user-panel-logout" @click.stop="handleUserCommand('logout')"><img src="./back.png"
class="back-image" />{{ "退出登录" }} class="back-image" />{{ "退出登录" }}
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="menu-box" v-show="isShowMenu" @mouseenter="handleHoverMenu(true)" <div class="menu-box" v-if="isShowMenu" @mouseenter="handleHoverMenu(true)"
@mouseleave="handleHoverMenu(false)"> @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, 1)"> <div class="menu-item" v-for="(item, index) in menuList" :key="index" @click="handleToModule(item, 1)">
...@@ -64,9 +64,9 @@ ...@@ -64,9 +64,9 @@
</div> </div>
</div> </div>
</div> </div>
<div class="tool-box" v-show="isShowTool" @mouseenter="handleHoverTool(true)" <div class="tool-box" v-if="isShowTool" @mouseenter="handleHoverTool(true)"
@mouseleave="handleHoverTool(false)"> @mouseleave="handleHoverTool(false)">
<div class="menu-content"> <div class="tool-content">
<div class="menu-item" v-for="(item, index) in toolList" :key="index" @click="handleToModule(item, 2)"> <div class="menu-item" v-for="(item, index) in toolList" :key="index" @click="handleToModule(item, 2)">
<div class="icon"> <div class="icon">
<img :src="item.icon" alt="" /> <img :src="item.icon" alt="" />
...@@ -404,8 +404,8 @@ const handleClickToolBox = () => { ...@@ -404,8 +404,8 @@ const handleClickToolBox = () => {
ElMessage.warning("当前功能正在开发中,敬请期待!"); ElMessage.warning("当前功能正在开发中,敬请期待!");
}; };
const handleToggleUserPanel = () => { const handleShowUserPanel = () => {
isShowUserPanel.value = !isShowUserPanel.value; isShowUserPanel.value = true;
}; };
const handleHideUserPanel = () => { const handleHideUserPanel = () => {
...@@ -662,10 +662,13 @@ onMounted(() => { ...@@ -662,10 +662,13 @@ onMounted(() => {
top: calc(32px + 21px); top: calc(32px + 21px);
width: 240px; width: 240px;
height: 141px; height: 141px;
// 与“中美科技博弈”下方菜单框(.menu-box)保持一致的透明/模糊效果
background: rgba(255, 255, 255, 0.8); background: rgba(255, 255, 255, 0.8);
border: 1px solid rgba(255, 255, 255, 1); border: 1px solid rgba(255, 255, 255, 1);
border-radius: 10px; border-radius: 10px;
backdrop-filter: blur(30px);
-webkit-backdrop-filter: blur(30px);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1); box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
...@@ -785,6 +788,13 @@ onMounted(() => { ...@@ -785,6 +788,13 @@ onMounted(() => {
display: flex; display: flex;
align-items: center; align-items: center;
margin-left: 8px; margin-left: 8px;
transition: color 0.15s ease, font-size 0.15s ease, font-weight 0.15s ease;
&:hover {
color: var(--color-main-active);
font-size: 18px;
font-weight: 700;
}
.back-image { .back-image {
width: 16px; width: 16px;
...@@ -805,23 +815,6 @@ onMounted(() => { ...@@ -805,23 +815,6 @@ onMounted(() => {
} }
.menu-box { .menu-box {
// position: absolute;
// z-index: 999999999;
// width: 713px;
// height: 413px;
// top: 52px;
// left: 0;
// box-sizing: border-box;
// border-radius: 10px;
// backdrop-filter: blur(10px);
// -webkit-backdrop-filter: blur(10px);
// 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);
position: absolute; position: absolute;
z-index: 999999; z-index: 999999;
width: 713px; width: 713px;
...@@ -902,21 +895,17 @@ onMounted(() => { ...@@ -902,21 +895,17 @@ onMounted(() => {
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1); box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 0.8); background: rgba(255, 255, 255, 0.8);
.menu-content { .tool-content {
width: 562px; width: 130px;
height: 348px; height: 120px;
margin-top: 8px; margin-top: 8px;
margin-left: 72px; margin-left: 72px;
.menu-item { .menu-item {
margin-top: 36px; margin-top: 36px;
width: 280px; width: 100%;
height: 24px; height: 24px;
display: flex; display: flex;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
.title { .title {
color: var(--color-main-active); color: var(--color-main-active);
......
...@@ -12,14 +12,14 @@ ...@@ -12,14 +12,14 @@
<div class="box2-main"> <div class="box2-main">
<div class="box2-main-item" v-for="(item, index) in showRiskSignalList" :key="index" @click="handleItemClick(item, index)"> <div class="box2-main-item" v-for="(item, index) in showRiskSignalList" :key="index" @click="handleItemClick(item, index)">
<div :class="{ <div v-if="!isRiskLevelNoData(item?.[props.riskLevel])" :class="{
itemLeftStatus1: item[props.riskLevel] === '特别重大', itemLeftStatus1: item[props.riskLevel] === '特别重大',
itemLeftStatus2: item[props.riskLevel] === '重大风险', itemLeftStatus2: item[props.riskLevel] === '重大风险',
itemLeftStatus3: item[props.riskLevel] === '较大风险', itemLeftStatus3: item[props.riskLevel] === '较大风险',
itemLeftStatus4: item[props.riskLevel] === '一般风险' || !item[props.riskLevel], itemLeftStatus4: item[props.riskLevel] === '一般风险',
itemLeftStatus5: item[props.riskLevel] === '低风险', itemLeftStatus5: item[props.riskLevel] === '低风险',
}"> }">
{{ item[props.riskLevel] || "暂无数据" }} {{ item[props.riskLevel] }}
</div> </div>
<div class="item-right"> <div class="item-right">
<div class="text"> <span class="text-inner">{{ item[props.name] }}</span></div> <div class="text"> <span class="text-inner">{{ item[props.name] }}</span></div>
...@@ -76,6 +76,11 @@ const props = defineProps({ ...@@ -76,6 +76,11 @@ const props = defineProps({
}); });
const isRiskLevelNoData = (level) => {
const t = String(level ?? "").trim();
return !t || t === "暂无数据" || t === "暂无数值";
};
const showRiskSignalList = computed(() => { const showRiskSignalList = computed(() => {
return props.list.slice(0,6) return props.list.slice(0,6)
}) })
......
import { useRouter } from "vue-router";
const router = useRouter()
// 跳转法案详情
export const goToBill = (id, tabName) => {
window.sessionStorage.setItem("billId", id);
window.sessionStorage.setItem("curTabName", tabName);
const route = router.resolve({
path: "/billLayout",
query: {
billId: id
}
});
window.open(route.href, "_blank");
};
// 跳转政令详情
export const goToDecree = (id, tabName) => {
window.sessionStorage.setItem("decreeId", id);
window.sessionStorage.setItem("curTabName", tabName);
const route = router.resolve({
path: "/decreeLayout",
query: {
id: id
}
});
window.open(route.href, "_blank");
};
// 跳转智库
export const goToThinkTank = (id, tabName) => {
window.sessionStorage.setItem("curTabName", tabName);
const route = router.resolve({
name: "ReportDetail",
params: {
id: id
}
});
window.open(route.href, "_blank");
}
// 跳转机构详情
export const goToInstitution = (id, tabName) => {
window.sessionStorage.setItem('curTabName', tabName)
const curRoute = router.resolve({
path: "/institution",
query: {
id: id
}
});
window.open(curRoute.href, "_blank");
}
\ No newline at end of file
...@@ -223,14 +223,14 @@ export function getRiskDetailLevelModifier(level) { ...@@ -223,14 +223,14 @@ export function getRiskDetailLevelModifier(level) {
if (t === "低风险") { if (t === "低风险") {
return "lv5"; return "lv5";
} }
if (t === "一般风险" || !t || t === "暂无数据") { if (t === "一般风险" || !t || t === "暂无数据" || t === "风险信号暂无评估") {
return "lv4"; return "lv4";
} }
return "lv4"; return "lv4";
} }
/** 与 `@/components/base/riskSignal` 左侧等级一致:空 / null 等展示「暂无数据」 */ /** 详情弹窗标题区等级文案:空 / null 等展示「风险信号暂无评估」 */
export const RISK_SIGNAL_LIST_LEVEL_EMPTY_TEXT = "暂无数据"; export const RISK_SIGNAL_LIST_LEVEL_EMPTY_TEXT = "风险信号暂无评估";
/** /**
* 列表行风险等级 → 弹窗标题区文案(null、空串与「暂无数值」等与列表「暂无数据」对齐) * 列表行风险等级 → 弹窗标题区文案(null、空串与「暂无数值」等与列表「暂无数据」对齐)
...@@ -241,7 +241,7 @@ export function normalizeRiskSignalListLevelText(raw) { ...@@ -241,7 +241,7 @@ export function normalizeRiskSignalListLevelText(raw) {
return RISK_SIGNAL_LIST_LEVEL_EMPTY_TEXT; return RISK_SIGNAL_LIST_LEVEL_EMPTY_TEXT;
} }
const s = String(raw).trim(); const s = String(raw).trim();
if (s === "" || s === "null" || s === "undefined" || s === "暂无数值") { if (s === "" || s === "null" || s === "undefined" || s === "暂无数值" || s === "暂无数据") {
return RISK_SIGNAL_LIST_LEVEL_EMPTY_TEXT; return RISK_SIGNAL_LIST_LEVEL_EMPTY_TEXT;
} }
return s; return s;
......
...@@ -602,9 +602,7 @@ const initRightChart = () => { ...@@ -602,9 +602,7 @@ const initRightChart = () => {
const domains = Array.from(domainsSet); const domains = Array.from(domainsSet);
const types = Array.from(typesSet); const types = Array.from(typesSet);
const legendSplitAt = Math.ceil(types.length / 2); const legendData = types;
const legendFirstLine = types.slice(0, legendSplitAt);
const legendSecondLine = types.slice(legendSplitAt);
const indicators = domains.map((domain) => { const indicators = domains.map((domain) => {
const domainData = rawData.filter((item) => item.AREA === domain); const domainData = rawData.filter((item) => item.AREA === domain);
...@@ -630,57 +628,56 @@ const initRightChart = () => { ...@@ -630,57 +628,56 @@ const initRightChart = () => {
const option = { const option = {
color: colorMap, color: colorMap,
// 避免自动换行导致“第二行不居中”:拆成两行 legend,每行各自居中 // 图例尽量单行居中;放不下则横向滚动(不换行)
legend: [ legend: {
{ show: true,
show: true, type: "scroll",
type: "plain", orient: "horizontal",
data: legendFirstLine, data: legendData,
top: 8, top: 8,
left: "center", left: "center",
icon: "circle", width: "90%",
itemWidth: 12, height: 24,
itemHeight: 12, icon: "circle",
itemGap: 24, itemWidth: 12,
textStyle: { itemHeight: 12,
color: "rgb(95, 101, 108)", itemGap: 24,
fontSize: 16, pageButtonPosition: "end",
fontFamily: "Microsoft YaHei", pageIconSize: 12,
fontWeight: 400, pageTextStyle: {
lineHeight: 24 color: "rgb(95, 101, 108)",
} fontSize: 12,
fontFamily: "Microsoft YaHei"
}, },
{ textStyle: {
show: legendSecondLine.length > 0, color: "rgb(95, 101, 108)",
type: "plain", fontSize: 16,
data: legendSecondLine, fontFamily: "Microsoft YaHei",
top: 32, fontWeight: 400,
left: "center", lineHeight: 24
icon: "circle",
itemWidth: 12,
itemHeight: 12,
itemGap: 24,
textStyle: {
color: "rgb(95, 101, 108)",
fontSize: 16,
fontFamily: "Microsoft YaHei",
fontWeight: 400,
lineHeight: 24
}
} }
], },
radar: { radar: {
// 对齐左侧折线图(grid top=34%)的“图例到图形”间距:下移雷达中心并略缩半径 // 对齐左侧折线图(grid top=34%)的“图例到图形”间距:下移雷达中心并略缩半径
center: ["50%", "62%"], center: ["50%", "57%"],
radius: "60%", radius: "58%",
indicator: indicators, indicator: indicators,
axisName: { axisName: {
color: "rgba(132, 136, 142, 1)", fontFamily: "Source Han Sans CN",
fontSize: 14, fontWeight: 700,
fontWeight: 400 fontSize: 16,
lineHeight: 24,
letterSpacing: 1,
color: "rgb(59, 65, 75)"
}, },
splitLine: { lineStyle: { color: ["#e6e6e6"] } }, splitLine: { lineStyle: { color: ["#e6e6e6"] } },
splitArea: { show: false } splitArea: {
show: true,
areaStyle: {
// 从最内圈白色开始,向外层交替浅灰
color: ["#ffffff", "rgb(247, 248, 249)"]
}
}
}, },
series: [ series: [
{ {
......
...@@ -7,8 +7,7 @@ ...@@ -7,8 +7,7 @@
</div> </div>
</div> </div>
<el-select v-model="sortModel" placeholder="发布时间" class="select" popper-class="coop-select-dropdown" <el-select v-model="sortModel" placeholder="发布时间" class="select" popper-class="coop-select-dropdown"
:teleported="true" placement="bottom-start" :teleported="true" placement="bottom-start" :popper-options="sortPopperOptions" @change="handleSortChange">
:popper-options="sortPopperOptions" @change="handleSortChange">
<template #prefix> <template #prefix>
<img v-if="sortModel !== true" src="@/views/thinkTank/ThinkTankDetail/thinkDynamics/images/image down.png" <img v-if="sortModel !== true" src="@/views/thinkTank/ThinkTankDetail/thinkDynamics/images/image down.png"
class="select-prefix-img" alt="" @click.stop="toggleSortPrefix" /> class="select-prefix-img" alt="" @click.stop="toggleSortPrefix" />
...@@ -37,35 +36,42 @@ ...@@ -37,35 +36,42 @@
</div> </div>
</div> </div>
</div> </div>
<div class="right"> <div class="right" :class="{ 'right--empty': !(mainDataList && mainDataList.length) }">
<div class="right-title"> <div class="right-title">
<img src="./assets/icon01.png" alt="" /> <img src="./assets/icon01.png" alt="" />
<div>合作限制历程</div> <div>合作限制历程</div>
</div> </div>
<div class="right-main"> <div class="right-main">
<div class="main-content"> <template v-if="mainDataList && mainDataList.length">
<div v-for="item in mainDataList" :key="item.id" class="main-item"> <div class="main-content">
<div class="date">{{ formatDateCn(item.date) }}</div> <div v-for="item in mainDataList" :key="item.id" class="main-item">
<img :src="item.img" alt="" class="img" /> <div class="date">{{ formatDateCn(item.date) }}</div>
<div class="box"> <img :src="item.img" alt="" class="img" />
<div class="title" @click="handleClick(item)">{{ item.title }}</div> <div class="box">
<div class="content" @click="handleClick(item)">{{ item.content }}</div> <div class="title" @click="handleClick(item)">{{ item.title }}</div>
<div class="domain"> <div class="content" @click="handleClick(item)">{{ item.content }}</div>
<AreaTag v-for="(domain, i) in item.domain" :key="i" " :tagName="domain"> <div class="domain">
</AreaTag> <AreaTag v-for="(domain, i) in item.domain" :key="i" " :tagName="domain">
</div> </AreaTag>
</div>
<div class="type" :class="getTypeClass(item.type)">
{{ item.type }} <div class="type" :class="getTypeClass(item.type)">
{{ item.type }}
</div>
</div> </div>
</div> </div>
</div> </div>
</div> <div class="page">
<div class="page"> <div class="count">{{ total }} 项调查</div>
<div class="count">共 {{ total }} 项调查</div> <el-pagination v-model:current-page="currentPage" :page-size="pageSize" :total="total"
<el-pagination v-model:current-page="currentPage" :page-size="pageSize" :total="total" layout="prev, pager, next" background @current-change="handlePageChange" />
layout="prev, pager, next" background @current-change="handlePageChange" /> </div>
</div> </template>
<template v-else>
<div class="right-main-empty">
<el-empty class="right-el-empty" description="暂无数据" :image-size="100" />
</div>
</template>
</div> </div>
</div> </div>
</div> </div>
...@@ -533,6 +539,13 @@ watch(currentPage, () => { ...@@ -533,6 +539,13 @@ watch(currentPage, () => {
border-radius: 10px; border-radius: 10px;
background-color: #fff; background-color: #fff;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1); box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
display: flex;
flex-direction: column;
&.right--empty {
// 与左侧筛选框等高
height: 432px;
}
.right-title { .right-title {
width: 1224px; width: 1224px;
...@@ -563,10 +576,28 @@ watch(currentPage, () => { ...@@ -563,10 +576,28 @@ watch(currentPage, () => {
.right-main { .right-main {
width: 1224px; width: 1224px;
flex: 1;
padding: 12px 0px 80px 0px; padding: 12px 0px 80px 0px;
position: relative; position: relative;
.right-main-empty {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
:deep(.el-empty__image) {
margin-bottom: 0;
}
.right-el-empty {
padding: 0;
margin: 0;
}
}
.main-content { .main-content {
width: 1224px; width: 1224px;
...@@ -594,15 +625,7 @@ watch(currentPage, () => { ...@@ -594,15 +625,7 @@ watch(currentPage, () => {
} }
&:last-child::after { &:last-child::after {
content: ""; content: none;
position: absolute;
top: 37px;
bottom: -37px;
left: 108px;
width: 2px;
background-color: rgb(230, 231, 232);
z-index: 1;
height: calc(100% - 37px);
} }
.date { .date {
...@@ -635,6 +658,7 @@ watch(currentPage, () => { ...@@ -635,6 +658,7 @@ watch(currentPage, () => {
.title { .title {
font-size: 20px; font-size: 20px;
width: 950px;
font-weight: 700; font-weight: 700;
font-family: "Microsoft YaHei"; font-family: "Microsoft YaHei";
line-height: 26px; line-height: 26px;
......
...@@ -5,13 +5,13 @@ ...@@ -5,13 +5,13 @@
<img :src="coopData?.IMAGEURL || defaultImg" alt="" /> <img :src="coopData?.IMAGEURL || defaultImg" alt="" />
<div class="content"> <div class="content">
<div class="cl1">{{ coopData?.LIMITNAMEZH }}</div> <div class="cl1">{{ coopData?.LIMITNAMEZH }}</div>
<div class="cl2">{{ coopData?.LIMITNAME }}</div> <div v-if="hasLimitNameEn" class="cl2">{{ coopData?.LIMITNAME }}</div>
<div class="cl3">{{ coopData?.LIMITDATE }} · {{ coopData?.LIMITORGNAME }}</div> <div class="cl3">{{ coopData?.LIMITDATE }} · {{ coopData?.LIMITORGNAME }}</div>
</div> </div>
<div class="btn"> <div class="btn">
<button class="btn1"><img src="./assets/icon01.png" alt="" />查看原文</button>
<!-- <button class="btn1"><img src="./assets/icon02.png" alt="" />查看官网</button> --> <!-- <button class="btn1"><img src="./assets/icon02.png" alt="" />查看官网</button> -->
<button class="btn1 active"><img src="./assets/icon03.png" alt="" />分析报告</button> <button class="btn1 active" @click="handleOpenWrittingAsstaint"><img src="./assets/icon03.png" alt="" />分析报告</button>
</div> </div>
</div> </div>
</div> </div>
...@@ -81,7 +81,8 @@ ...@@ -81,7 +81,8 @@
<img src="./assets/打开按钮.png" alt=""> <img src="./assets/打开按钮.png" alt="">
</div> </div>
<!-- contentList:单条按原样式展示;多条则逐条展示并加 1.2.3. 前缀 --> <!-- contentList:单条按原样式展示;多条则逐条展示并加 1.2.3. 前缀 -->
<div v-if="Array.isArray(item.contentList) && item.contentList.length > 1" class="clause-item-content-list"> <div v-if="Array.isArray(item.contentList) && item.contentList.length > 1"
class="clause-item-content-list">
<div v-for="(row, i) in item.contentList" :key="i" class="clause-item-content-row"> <div v-for="(row, i) in item.contentList" :key="i" class="clause-item-content-row">
<span class="row-index">{{ i + 1 }}.</span> <span class="row-index">{{ i + 1 }}.</span>
<span class="row-text">{{ row.CONTENT }}</span> <span class="row-text">{{ row.CONTENT }}</span>
...@@ -117,6 +118,15 @@ import Rubio from "./assets/卢比奥.png"; ...@@ -117,6 +118,15 @@ import Rubio from "./assets/卢比奥.png";
import Bondi from "./assets/邦迪.png"; import Bondi from "./assets/邦迪.png";
import Nome from "./assets/诺姆.png"; import Nome from "./assets/诺姆.png";
const hasLimitNameEn = computed(() => {
return Boolean(String(coopData.value?.LIMITNAME ?? "").trim());
});
const handleOpenWrittingAsstaint = () => {
const { href } = router.resolve({ path: "/writtingAsstaint" });
window.open(href, "_blank");
};
// 合作限制-查询限制条款 // 合作限制-查询限制条款
const limitClauseData = ref([]); const limitClauseData = ref([]);
const getlimitClauseData = async () => { const getlimitClauseData = async () => {
...@@ -474,9 +484,13 @@ const dataList3 = ref([ ...@@ -474,9 +484,13 @@ const dataList3 = ref([
.btn { .btn {
width: 376px; width: 376px;
height: 36px; height: 48px;
display: flex; display: flex;
justify-content: right; justify-content: right;
position: absolute;
bottom: 0;
margin-left: 1224px;
.btn1 { .btn1 {
border-radius: 6px; border-radius: 6px;
......
...@@ -164,6 +164,7 @@ const handleToPosi = id => { ...@@ -164,6 +164,7 @@ const handleToPosi = id => {
background-size: 100% 100%; background-size: 100% 100%;
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 100%;
z-index: -100; z-index: -100;
top: -64px; top: -64px;
......
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
<el-table ref="tableRef" :data="tableData" row-key="id" @selection-change="handleSelectionChange" <el-table ref="tableRef" :data="tableData" row-key="id" @selection-change="handleSelectionChange"
@select="handleSelect" @select-all="handleSelectAll" style="width: 100%" :row-style="{ height: '52px' }"> @select="handleSelect" @select-all="handleSelectAll" style="width: 100%" :row-style="{ height: '52px' }">
<el-table-column type="selection" width="40" /> <el-table-column type="selection" width="40" />
<el-table-column label="法案名称" width="455"> <el-table-column label="法案名称" width="600">
<template #default="scope"> <template #default="scope">
<span class="title-item text-compact-bold" @click="handleClickToDetail(scope.row)">{{ <span class="title-item text-compact-bold" @click="handleClickToDetail(scope.row)">{{
scope.row.originalTitle scope.row.originalTitle
...@@ -134,14 +134,14 @@ ...@@ -134,14 +134,14 @@
<el-table-column label="日期" width="120" class-name="date-column"> <el-table-column label="日期" width="120" class-name="date-column">
<template #default="scope">{{ scope.row.date }}</template> <template #default="scope">{{ scope.row.date }}</template>
</el-table-column> </el-table-column>
<el-table-column label="提案人" width="480"> <el-table-column label="提案人" width="300">
<template #default="scope"> <template #default="scope">
<span class="person-item text-compact" @click="handlePerClick(scope.row)">{{ scope.row.sponsorPersonName <span class="person-item text-compact" @click="handlePerClick(scope.row)">{{ scope.row.sponsorPersonName
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column property="affiliation" label="所属党派" width="120" /> <el-table-column property="affiliation" label="所属党派" width="120" />
<el-table-column property="originDepart" label="提出委员会" width="180" /> <el-table-column property="originDepart" label="提出委员会" />
<el-table-column property="status" label="所处阶段" width="120" /> <el-table-column property="status" label="所处阶段" width="120" />
</el-table> </el-table>
</div> </div>
......
...@@ -23,6 +23,7 @@ const getLineChart = (dataX, dataY) => { ...@@ -23,6 +23,7 @@ const getLineChart = (dataX, dataY) => {
}, },
yAxis: { yAxis: {
type: 'value', type: 'value',
name: '数量',
splitLine: { splitLine: {
show: true, show: true,
lineStyle: { lineStyle: {
......
...@@ -2,8 +2,8 @@ import { MUTICHARTCOLORS } from "@/common/constant"; ...@@ -2,8 +2,8 @@ import { MUTICHARTCOLORS } from "@/common/constant";
const getPieChart = (data) => { const getPieChart = (data) => {
const colorList = MUTICHARTCOLORS const colorList = MUTICHARTCOLORS
let showData = data let showData = data
if(data.length > 14) { if(data.length > 12) {
showData = data.slice(0,13) showData = data.slice(0,11)
let num = 0 let num = 0
data.slice(13,).forEach(item => { data.slice(13,).forEach(item => {
num = num + item.value num = num + item.value
...@@ -22,8 +22,9 @@ const getPieChart = (data) => { ...@@ -22,8 +22,9 @@ const getPieChart = (data) => {
radius: [150, 180], radius: [150, 180],
// height: '96%', // height: '96%',
left: 'center', left: 'center',
top: 24, top: 60,
width: '98%', width: '98%',
height: '90%',
itemStyle: { itemStyle: {
borderColor: '#fff', borderColor: '#fff',
borderWidth: 1 borderWidth: 1
......
...@@ -134,16 +134,15 @@ const siderList = ref([ ...@@ -134,16 +134,15 @@ const siderList = ref([
active: false active: false
}, },
{ {
name: "实体清单事件", name: "商业管制清单",
path: "/dataLibrary/dataEntityListEvent", path: "/dataLibrary/dataCommerceControlList",
active: false active: false
}, },
{ {
name: "商业管制清单", name: "实体清单事件",
path: "/dataLibrary/dataCommerceControlList", path: "/dataLibrary/dataEntityListEvent",
active: false active: false
}, },
{ {
name: "商业管制清单事件", name: "商业管制清单事件",
path: "/dataLibrary/dataCommerceControlListEvent", path: "/dataLibrary/dataCommerceControlListEvent",
...@@ -257,6 +256,10 @@ const siderList = ref([ ...@@ -257,6 +256,10 @@ const siderList = ref([
]); ]);
const handleSiderItem = item => { const handleSiderItem = item => {
if (item.name === '风险信号' || item.name === '市场准入限制') {
ElMessage.warning('当前模块开发中,敬请期待!')
return
}
siderList.value.forEach(val => { siderList.value.forEach(val => {
val.active = false; val.active = false;
val.isExpanded = false; val.isExpanded = false;
...@@ -282,6 +285,10 @@ const handleSiderItem = item => { ...@@ -282,6 +285,10 @@ const handleSiderItem = item => {
}; };
const handleSiderSecondItem = item => { const handleSiderSecondItem = item => {
if (item.name === '州法案' || item.name === '研究型大学' || item.name === '重点实验室') {
ElMessage.warning('当前模块开发中,敬请期待!')
return
}
siderList.value.forEach(item => { siderList.value.forEach(item => {
if (item.children.length) { if (item.children.length) {
item.children.forEach(val => { item.children.forEach(val => {
...@@ -437,17 +444,16 @@ onMounted(() => { ...@@ -437,17 +444,16 @@ onMounted(() => {
siderList.value[3].isExpanded = true; siderList.value[3].isExpanded = true;
siderList.value[3].children[0].active = true; siderList.value[3].children[0].active = true;
break; break;
case "/dataLibrary/dataEntityListEvent": case "/dataLibrary/dataCommerceControlList":
siderList.value[3].active = true; siderList.value[3].active = true;
siderList.value[3].isExpanded = true; siderList.value[3].isExpanded = true;
siderList.value[3].children[1].active = true; siderList.value[3].children[1].active = true;
break; break;
case "/dataLibrary/dataCommerceControlList": case "/dataLibrary/dataEntityListEvent":
siderList.value[3].active = true; siderList.value[3].active = true;
siderList.value[3].isExpanded = true; siderList.value[3].isExpanded = true;
siderList.value[3].children[2].active = true; siderList.value[3].children[2].active = true;
break; break;
case "/dataLibrary/dataCommerceControlListEvent": case "/dataLibrary/dataCommerceControlListEvent":
siderList.value[3].active = true; siderList.value[3].active = true;
siderList.value[3].isExpanded = true; siderList.value[3].isExpanded = true;
...@@ -559,6 +565,7 @@ onBeforeUnmount(() => { ...@@ -559,6 +565,7 @@ onBeforeUnmount(() => {
height: 100%; height: 100%;
} }
} }
.title { .title {
color: var(--color-primary-100); color: var(--color-primary-100);
} }
...@@ -737,6 +744,7 @@ onBeforeUnmount(() => { ...@@ -737,6 +744,7 @@ onBeforeUnmount(() => {
.tab-item-active { .tab-item-active {
border-bottom: 2px solid var(--color-primary-100) !important; border-bottom: 2px solid var(--color-primary-100) !important;
background: var(--color-primary-2);
} }
} }
......
...@@ -105,7 +105,7 @@ ...@@ -105,7 +105,7 @@
<el-table ref="tableRef" :data="tableData" row-key="id" @selection-change="handleSelectionChange" <el-table ref="tableRef" :data="tableData" row-key="id" @selection-change="handleSelectionChange"
@select="handleSelect" @select-all="handleSelectAll" style="width: 100%" :row-style="{ height: '52px' }"> @select="handleSelect" @select-all="handleSelectAll" style="width: 100%" :row-style="{ height: '52px' }">
<el-table-column type="selection" width="40" /> <el-table-column type="selection" width="40" />
<el-table-column label="新闻标题" width="600"> <el-table-column label="新闻标题" width="420">
<template #default="scope"> <template #default="scope">
<span class="title-item text-compact-bold" @click="handleClickToDetail(scope.row)">{{ <span class="title-item text-compact-bold" @click="handleClickToDetail(scope.row)">{{
scope.row.originalTitle scope.row.originalTitle
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<div class="en-title">{{ institutionInfo.enName }}</div> <div class="en-title">{{ institutionInfo.enName }}</div>
<div class="desc">{{ institutionInfo.desc }}</div> <div class="desc">{{ institutionInfo.desc }}</div>
<div class="tag-box"> <div class="tag-box">
<div class="tag" v-for="(tag, index) in institutionInfo.tagList" :key="index"> <div class="tag" v-for="(tag, index) in showTagList" :key="index">
{{ tag }} {{ tag }}
</div> </div>
</div> </div>
...@@ -22,13 +22,8 @@ ...@@ -22,13 +22,8 @@
</div> --> </div> -->
</div> </div>
<div class="tab-box"> <div class="tab-box">
<div <div class="tab" @click="handleClickTab(item)" :class="{ tabActive: activeTabName == item.name }"
class="tab" v-for="(item, index) in tabList" :key="index">
@click="handleClickTab(item)"
:class="{ tabActive: activeTabName == item.name }"
v-for="(item, index) in tabList"
:key="index"
>
{{ item.name }} {{ item.name }}
</div> </div>
</div> </div>
...@@ -61,6 +56,14 @@ const institutionInfo = ref({ ...@@ -61,6 +56,14 @@ const institutionInfo = ref({
logo: "" logo: ""
}); });
const showTagList = computed(() => {
if(institutionInfo.value.tagList.length > 10) {
return institutionInfo.value.tagList.slice(0,10)
} else {
return institutionInfo.value.tagList
}
})
const handleGetInfo = async () => { const handleGetInfo = async () => {
const params = { const params = {
id: route.query.id id: route.query.id
...@@ -75,7 +78,7 @@ const handleGetInfo = async () => { ...@@ -75,7 +78,7 @@ const handleGetInfo = async () => {
institutionInfo.value.desc = res.data.orgIntroduction; institutionInfo.value.desc = res.data.orgIntroduction;
institutionInfo.value.name = res.data.orgName; institutionInfo.value.name = res.data.orgName;
} }
} catch (error) {} } catch (error) { }
}; };
handleGetInfo(); handleGetInfo();
...@@ -95,7 +98,7 @@ const tabList = ref([ ...@@ -95,7 +98,7 @@ const tabList = ref([
]); ]);
const handleClickTab = val => { const handleClickTab = val => {
if(val.name === '深度挖掘' || val.name === '对华制裁') { if (val.name === '深度挖掘' || val.name === '对华制裁') {
ElMessage.warning('当前功能开发中,敬请期待!') ElMessage.warning('当前功能开发中,敬请期待!')
return return
} }
...@@ -125,6 +128,7 @@ onUnmounted(() => { ...@@ -125,6 +128,7 @@ onUnmounted(() => {
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
padding-top: 16px; padding-top: 16px;
.header { .header {
width: 1600px; width: 1600px;
height: 200px; height: 200px;
...@@ -136,20 +140,23 @@ onUnmounted(() => { ...@@ -136,20 +140,23 @@ onUnmounted(() => {
background: rgba(255, 255, 255, 0.8); background: rgba(255, 255, 255, 0.8);
display: flex; display: flex;
position: relative; position: relative;
.header-left { .header-left {
width: 160px; width: 160px;
height: 160px; height: 160px;
margin: 20px; margin: 20px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.header-right { .header-right {
margin-left: 24px; margin-left: 24px;
width: 1350px; width: 1350px;
overflow: hidden; overflow: hidden;
overflow-y: auto;
.title { .title {
margin-top: 26px; margin-top: 26px;
height: 42px; height: 42px;
...@@ -164,6 +171,7 @@ onUnmounted(() => { ...@@ -164,6 +171,7 @@ onUnmounted(() => {
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.en-title { .en-title {
margin-top: 8px; margin-top: 8px;
height: 24px; height: 24px;
...@@ -178,7 +186,9 @@ onUnmounted(() => { ...@@ -178,7 +186,9 @@ onUnmounted(() => {
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.desc { .desc {
height: 48px;
margin-top: 6px; margin-top: 6px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
...@@ -187,11 +197,25 @@ onUnmounted(() => { ...@@ -187,11 +197,25 @@ onUnmounted(() => {
line-height: 24px; line-height: 24px;
letter-spacing: 0px; letter-spacing: 0px;
text-align: justify; text-align: justify;
overflow: hidden;
display: -webkit-box;
/* 3. 限制显示的行数(修改数字即可改变行数) */
-webkit-line-clamp: 2;
/* 4. 设置文字垂直排列方向 */
-webkit-box-orient: vertical;
/* 5. 隐藏超出部分 */
overflow: hidden;
/* 6. 显示省略号 */
text-overflow: ellipsis;
/* 可选:修复文字间距/换行问题 */
word-break: break-all;
} }
.tag-box { .tag-box {
margin-top: 14px; margin-top: 14px;
display: flex; display: flex;
gap: 8px; gap: 8px;
.tag { .tag {
height: 24px; height: 24px;
padding: 0px 8px; padding: 0px 8px;
...@@ -206,6 +230,7 @@ onUnmounted(() => { ...@@ -206,6 +230,7 @@ onUnmounted(() => {
} }
} }
} }
.header-btn { .header-btn {
position: absolute; position: absolute;
top: 26px; top: 26px;
...@@ -219,14 +244,17 @@ onUnmounted(() => { ...@@ -219,14 +244,17 @@ onUnmounted(() => {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
.icon { .icon {
width: 16px; width: 16px;
height: 16px; height: 16px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.text { .text {
height: 22px; height: 22px;
color: rgba(255, 255, 255, 1); color: rgba(255, 255, 255, 1);
...@@ -237,6 +265,7 @@ onUnmounted(() => { ...@@ -237,6 +265,7 @@ onUnmounted(() => {
} }
} }
} }
.tab-box { .tab-box {
width: 1600px; width: 1600px;
height: 64px; height: 64px;
...@@ -249,6 +278,7 @@ onUnmounted(() => { ...@@ -249,6 +278,7 @@ onUnmounted(() => {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.tab { .tab {
width: 526px; width: 526px;
height: 54px; height: 54px;
...@@ -263,10 +293,12 @@ onUnmounted(() => { ...@@ -263,10 +293,12 @@ onUnmounted(() => {
font-weight: 400; font-weight: 400;
letter-spacing: 0px; letter-spacing: 0px;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
background: rgba(231, 243, 255, 1); background: rgba(231, 243, 255, 1);
} }
} }
.tabActive { .tabActive {
border: 2px solid rgba(174, 214, 255, 1); border: 2px solid rgba(174, 214, 255, 1);
background: rgba(231, 243, 255, 1); background: rgba(231, 243, 255, 1);
...@@ -275,6 +307,7 @@ onUnmounted(() => { ...@@ -275,6 +307,7 @@ onUnmounted(() => {
font-weight: 700; font-weight: 700;
} }
} }
.main { .main {
height: 800px; height: 800px;
width: 1600px; width: 1600px;
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<div class="home-main-header-center"> <div class="home-main-header-center">
<SearchContainer class="think-tank-search" style="margin-bottom: 0; margin-top: 51px; height: fit-content;" <SearchContainer class="think-tank-search" style="margin-bottom: 0; margin-top: 51px; height: fit-content;"
v-if="containerRef" placeholder="搜索智库、报告或政策建议" :containerRef="containerRef" areaName="智库" /> v-if="containerRef" placeholder="搜索智库、报告或政策建议" :containerRef="containerRef" areaName="智库报告" />
<!-- <el-input v-model="searchThinktankText" @keyup.enter="handleSearch" <!-- <el-input v-model="searchThinktankText" @keyup.enter="handleSearch"
style="width: 838px; height: 100%" placeholder="搜索智库报告" /> style="width: 838px; height: 100%" placeholder="搜索智库报告" />
<div class="search"> <div class="search">
......
<svg viewBox="0 0 15.0039 14.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15.003906" height="14.500000" fill="none" customFrame="#000000">
<rect id="容器 239" width="14.000000" height="14.000000" x="0.501953" y="0.500000" />
<path id="矢量 467" d="M0.501953 4.81104L4.27116 2.65573L8.0404 4.81118L14.502 0.5" stroke="rgb(255,255,255)" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.000000" />
<path id="矢量 468" d="M4.27118 6.96812L0.501953 9.12357L0.50198 14.5015L14.502 14.5013L14.502 4.8125L8.04045 9.12354L4.27118 6.96812Z" fill="rgb(255,255,255)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 26.1548 23.3789" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="26.154785" height="23.378906" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_0" x1="12.260066" x2="21.2057495" y1="1.21773767" y2="18.4094753" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(206,79,81)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(240,202,202)" offset="1" stop-opacity="1" />
</linearGradient>
</defs>
<path id="减去顶层" d="M25.8883 20.3883L14.8139 1.00773C14.0461 -0.335911 12.1087 -0.335911 11.3409 1.00773L0.266462 20.3883C-0.495419 21.7216 0.467316 23.3806 2.00295 23.3806L24.1519 23.3806C25.6875 23.3806 26.6502 21.7216 25.8883 20.3883ZM14.2931 14.8346C14.2711 15.4323 13.7802 15.9054 13.1821 15.9054C12.5832 15.9054 12.0919 15.4311 12.0709 14.8326L11.8462 8.42741C11.8196 7.66793 12.428 7.03775 13.188 7.03775C13.9489 7.03775 14.5578 7.66948 14.5297 8.42989L14.2931 14.8346ZM11.7811 18.0226C11.8557 17.8691 11.9621 17.7314 12.1004 17.6094C12.1956 17.5255 12.2977 17.4548 12.4066 17.3975C12.6412 17.2741 12.9075 17.2124 13.2057 17.2124C13.5225 17.2124 13.8007 17.2811 14.0405 17.4184C14.1353 17.4727 14.2241 17.5378 14.3068 17.6136C14.442 17.7374 14.5458 17.8762 14.6184 18.0301C14.7027 18.2087 14.7448 18.4077 14.7448 18.6269C14.7448 18.8242 14.7098 19.0065 14.6397 19.1738C14.5688 19.3433 14.4619 19.4974 14.3191 19.6361C14.1832 19.7681 14.0342 19.8685 13.8721 19.9373C13.6955 20.0122 13.5034 20.0497 13.2957 20.0497C12.8581 20.0497 12.4982 19.945 12.216 19.7355C12.2122 19.7327 12.2085 19.7299 12.2047 19.7271C12.1672 19.6986 12.131 19.6683 12.0963 19.6361C11.9352 19.4868 11.8178 19.3197 11.7439 19.1349C11.6814 18.9783 11.6501 18.809 11.6501 18.6269C11.6501 18.4038 11.6938 18.2024 11.7811 18.0226Z" fill="url(#paint_linear_0)" fill-rule="evenodd" />
</svg>
...@@ -5,11 +5,11 @@ ...@@ -5,11 +5,11 @@
<div class="center-center"> <div class="center-center">
<div class="center-header"> <div class="center-header">
<div class="center-header-left"> <div class="center-header-left">
<img class="iconstyle" src="./assets/images/warning.png" /> <img class="iconstyle" src="./assets/images/warning.svg" />
<div class="center-header-title">风险信号管理</div> <div class="center-header-title">风险信号管理</div>
</div> </div>
<div class="center-header-right"> <div class="center-header-right">
<img class="img" src="./assets/images/danger.png" /> <img class="img" src="./assets/images/danger.svg" />
<div class="text">风险统计</div> <div class="text">风险统计</div>
</div> </div>
</div> </div>
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<div class="text1">本年新增风险</div> <div class="text1">本年新增风险</div>
</div> </div>
<div class="text2" style="color: rgba(95, 101, 108, 1)"> <div class="text2" style="color: rgba(95, 101, 108, 1)">
{{ basicInfo.yearAdded + " 项" }} <span class="text2-inner">{{ basicInfo.yearAdded + " 项" }}</span>
</div> </div>
</div> </div>
<div class="item"> <div class="item">
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<div class="text1">本月新增风险</div> <div class="text1">本月新增风险</div>
</div> </div>
<div class="text2" style="color: rgba(95, 101, 108, 1)"> <div class="text2" style="color: rgba(95, 101, 108, 1)">
{{ basicInfo.monthAdded + " 项" }} <span class="text2-inner">{{ basicInfo.monthAdded + " 项" }}</span>
</div> </div>
</div> </div>
</div> </div>
...@@ -41,7 +41,8 @@ ...@@ -41,7 +41,8 @@
<div class="dot" style="background-color: rgba(5, 95, 194, 1)"></div> <div class="dot" style="background-color: rgba(5, 95, 194, 1)"></div>
<div class="text1">已处理风险</div> <div class="text1">已处理风险</div>
</div> </div>
<div class="text2" style="color: rgba(5, 95, 194, 1)">{{ basicInfo.dealCount + " 项" }}</div> <div class="text2" style="color: rgba(5, 95, 194, 1)"><span class="text2-inner">{{ basicInfo.dealCount
+ " 项" }}</span></div>
</div> </div>
<div class="item"> <div class="item">
<div class="top"> <div class="top">
...@@ -49,7 +50,7 @@ ...@@ -49,7 +50,7 @@
<div class="text1">待处理风险</div> <div class="text1">待处理风险</div>
</div> </div>
<div class="text2" style="color: rgba(206, 79, 81, 1)"> <div class="text2" style="color: rgba(206, 79, 81, 1)">
{{ basicInfo.pendingCount + " 项" }} <span class="text2-inner">{{ basicInfo.pendingCount + " 项" }}</span>
</div> </div>
</div> </div>
</div> </div>
...@@ -125,7 +126,7 @@ ...@@ -125,7 +126,7 @@
<div class="title">{{ "风险类型" }}</div> <div class="title">{{ "风险类型" }}</div>
</div> </div>
<div class="select-main"> <div class="select-main">
<el-checkbox-group class="checkbox-group" :model-value="selectedRiskTypeModel" <el-checkbox-group class="checkbox-group risk-type-checkbox-group" :model-value="selectedRiskTypeModel"
@change="handleRiskTypeGroupChange"> @change="handleRiskTypeGroupChange">
<el-checkbox class="filter-checkbox all-checkbox" :label="RISK_FILTER_ALL_TYPE"> <el-checkbox class="filter-checkbox all-checkbox" :label="RISK_FILTER_ALL_TYPE">
{{ RISK_FILTER_ALL_TYPE }} {{ RISK_FILTER_ALL_TYPE }}
...@@ -188,35 +189,43 @@ ...@@ -188,35 +189,43 @@
</div> </div>
</div> </div>
</div> </div>
<div class="right-main"> <template v-if="riskList && riskList.length">
<div class="itemlist itemlist--clickable" v-for="(val, idx) in riskList" :key="val.rowKey" <div class="right-main">
@click="handleOpenRiskDetail(val)"> <div class="itemlist itemlist--clickable" v-for="(val, idx) in riskList" :key="val.rowKey"
<div class="box-title"> @click="handleOpenRiskDetail(val)">
<div class="risktitle" v-html="highlightRiskText(val.title)" /> <div class="box-title">
<div class="risktype" :class="'risktype--' + getRiskListItemLevelKey(val.risktype)"> <div class="risktitle" v-html="highlightRiskText(val.title)" />
<div class="icon" :class="'icon--' + getRiskListItemLevelKey(val.risktype)" /> <div v-if="!isRiskLevelNoData(val.risktype)" class="risktype"
<div class="text">{{ getRiskListItemLevelLabel(val.risktype) }}</div> :class="'risktype--' + getRiskListItemLevelKey(val.risktype)">
<div class="icon" :class="'icon--' + getRiskListItemLevelKey(val.risktype)" />
<div class="text">{{ getRiskListItemLevelLabel(val.risktype) }}</div>
</div>
</div>
<div class="box-source">
<img class="source-pic" :src="val.pic || DefaultIcon2" alt="" />
<div class="source-text">{{ formatRiskSourceLine(val) }}</div>
</div>
<div class="desc-box" v-html="highlightRiskText(val.dsc)" />
<div class="tag-box" v-if="val.tag.length">
<AreaTag v-for="(tag, index) in val.tag" :key="index" :tagName="tag">{{ tag }}</AreaTag>
</div> </div>
</div> </div>
<div class="box-source"> </div>
<img class="source-pic" :src="val.pic || DefaultIcon2" alt="" /> <div class="right-footer">
<div class="source-text">{{ formatRiskSourceLine(val) }}</div> <div class="footer-left">
{{ `共 ${totalNum} 项调查` }}
</div> </div>
<div class="desc-box" v-html="highlightRiskText(val.dsc)" /> <div class="footer-right">
<div class="tag-box" v-if="val.tag.length"> <el-pagination @current-change="handleCurrentChange" :pageSize="pageSize" :current-page="currentPage"
<AreaTag v-for="(tag, index) in val.tag" :key="index" :tagName="tag">{{ tag }}</AreaTag> :total="totalNum" background layout="prev, pager, next" />
</div> </div>
</div> </div>
</div> </template>
<div class="right-footer"> <template v-else>
<div class="footer-left"> <div class="right-empty">
{{ `共 ${totalNum} 项调查` }} <el-empty class="right-el-empty" description="暂无数据" :image-size="100" />
</div>
<div class="footer-right">
<el-pagination @current-change="handleCurrentChange" :pageSize="pageSize" :current-page="currentPage"
:total="totalNum" background layout="prev, pager, next" />
</div> </div>
</div> </template>
</div> </div>
</div> </div>
</div> </div>
...@@ -606,6 +615,11 @@ const getRiskListItemLevelLabel = (level) => { ...@@ -606,6 +615,11 @@ const getRiskListItemLevelLabel = (level) => {
return t; return t;
}; };
const isRiskLevelNoData = (level) => {
const t = String(level ?? "").trim();
return !t || t === "暂无数值" || t === "暂无数据";
};
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
...@@ -935,6 +949,15 @@ onMounted(async () => { ...@@ -935,6 +949,15 @@ onMounted(async () => {
vertical-align: middle; vertical-align: middle;
} }
.risk-type-checkbox-group :deep(.el-checkbox__label) {
display: inline-block;
max-width: 8em;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
vertical-align: middle;
}
.home-wrapper { .home-wrapper {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -997,8 +1020,8 @@ onMounted(async () => { ...@@ -997,8 +1020,8 @@ onMounted(async () => {
cursor: pointer; cursor: pointer;
.img { .img {
width: 16px; width: 14px;
height: 15px; height: 14px;
} }
.text { .text {
...@@ -1051,6 +1074,7 @@ onMounted(async () => { ...@@ -1051,6 +1074,7 @@ onMounted(async () => {
line-height: 24px; line-height: 24px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
text-align: right; text-align: right;
white-space: nowrap;
} }
} }
...@@ -1061,6 +1085,14 @@ onMounted(async () => { ...@@ -1061,6 +1085,14 @@ onMounted(async () => {
text-align: right; text-align: right;
/* 强制不换行 */ /* 强制不换行 */
white-space: nowrap; white-space: nowrap;
// 让右边界固定在块内,超长只会向左溢出(且不省略、完整显示)
width: 100%;
direction: rtl;
}
.text2-inner {
direction: ltr;
unicode-bidi: isolate;
} }
} }
} }
...@@ -1188,6 +1220,8 @@ onMounted(async () => { ...@@ -1188,6 +1220,8 @@ onMounted(async () => {
margin-bottom: 24px; margin-bottom: 24px;
width: 1224px; width: 1224px;
position: relative; position: relative;
display: flex;
flex-direction: column;
border-radius: 10px; border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(60, 87, 126, 0.2); box-shadow: 0px 0px 15px 0px rgba(60, 87, 126, 0.2);
...@@ -1277,6 +1311,7 @@ onMounted(async () => { ...@@ -1277,6 +1311,7 @@ onMounted(async () => {
.right-main { .right-main {
width: 1224px; width: 1224px;
flex: 1;
padding-left: 24px; padding-left: 24px;
padding-top: 6px; padding-top: 6px;
...@@ -1451,6 +1486,24 @@ onMounted(async () => { ...@@ -1451,6 +1486,24 @@ onMounted(async () => {
margin-right: 58px; margin-right: 58px;
} }
} }
.right-empty {
flex: 1;
min-height: 520px;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
:deep(.el-empty__image) {
margin-bottom: 0;
}
.right-el-empty {
padding: 0;
margin: 0;
}
}
} }
} }
} }
...@@ -1839,7 +1892,7 @@ onMounted(async () => { ...@@ -1839,7 +1892,7 @@ onMounted(async () => {
.risk-signal-detail-dialog .risk-signal-detail-dialog__header-badge-close { .risk-signal-detail-dialog .risk-signal-detail-dialog__header-badge-close {
position: absolute; position: absolute;
right: 115px; right: 61px;
top: 50%; top: 50%;
transform: translateY(-50%); transform: translateY(-50%);
width: 16px; width: 16px;
...@@ -1864,7 +1917,7 @@ onMounted(async () => { ...@@ -1864,7 +1917,7 @@ onMounted(async () => {
.risk-signal-detail-dialog .risk-signal-detail-dialog__read-indicator { .risk-signal-detail-dialog .risk-signal-detail-dialog__read-indicator {
position: absolute; position: absolute;
right: 115px; right: 61px;
top: 50%; top: 50%;
transform: translateY(-50%); transform: translateY(-50%);
display: inline-flex; display: inline-flex;
......
...@@ -206,7 +206,7 @@ const getCalendarHeatChart = (rawData) => { ...@@ -206,7 +206,7 @@ const getCalendarHeatChart = (rawData) => {
return ""; return "";
} }
const v = p.data?.[3] ?? 0; const v = p.data?.[3] ?? 0;
return `${dateStr}<br/>数值: ${v}`; return `${dateStr}<br/>风险数量: ${v}`;
} }
} }
}; };
......
...@@ -19,26 +19,8 @@ export default defineConfig({ ...@@ -19,26 +19,8 @@ export default defineConfig({
resolvers: [ElementPlusResolver()], resolvers: [ElementPlusResolver()],
}), }),
], ],
// build: {
// minify: 'terser',
// terserOptions: {
// compress: {
// drop_console: true,
// drop_debugger: true
// }
// }
// },
// build: {
// // minify: 'terser',
// terserOptions: {
// compress: {
// drop_console: true, // 移除所有 console.*
// drop_debugger: true, // 移除 debugger
// },
// },
// },
esbuild: { esbuild: {
drop: process.env.NODE_ENV === 'production' ? ['console', 'debugger'] : [] drop: process.env.NODE_ENV === 'production' ? ['console', 'debugger'] : [] // 正式环境去除掉console
}, },
resolve: { resolve: {
alias: { alias: {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论