提交 eaea9d5b authored 作者: 朱政's avatar 朱政

feat:风险信号接口与样式修改

上级 743cbb31
流水线 #476 已通过 于阶段
in 1 分 41 秒
...@@ -16,3 +16,11 @@ export function getPageQuery(data) { ...@@ -16,3 +16,11 @@ export function getPageQuery(data) {
data: data data: data
}) })
} }
/** 风险信号详情(GET /api/riskSignal/getRiskSignalInfoById/{id}) */
export function getRiskSignalInfoById(id) {
return request({
method: "GET",
url: `/api/riskSignal/getRiskSignalInfoById/${id}`
});
}
...@@ -12,39 +12,57 @@ ...@@ -12,39 +12,57 @@
> >
<template #header> <template #header>
<img class="header-icon" src="@/views/viewRiskSignal/assets/images/risk-icon.png" alt="" /> <img class="header-icon" src="@/views/viewRiskSignal/assets/images/risk-icon.png" alt="" />
<span class="risk-signal-detail-dialog__level risk-signal-detail-dialog__level--lv1">特别重大风险</span> <span
v-if="listLevelText"
class="risk-signal-detail-dialog__level"
:class="listLevelModifierClass"
>{{ listLevelText }}</span>
</template> </template>
<div class="risk-signal-detail-dialog__body"> <div class="risk-signal-detail-dialog__main" v-loading="detailLoading">
<span class="risk-signal-detail-dialog__title">扩大实体清单制裁范围,对中企子公司实施同等管制</span> <div v-if="bodyFromApi">
<div class="risk-signal-detail-dialog__origin">政策法规打压类风险</div> <div v-if="riskDetailItem.title" class="risk-signal-detail-dialog__body">
<div class="risk-signal-detail-dialog__meta"> <span class="risk-signal-detail-dialog__title">{{ riskDetailItem.title }}</span>
<span>2025年11月10日 16:14·美国商务部</span> <div
<div class="risk-signal-detail-dialog__tags"> v-if="riskDetailItem.directionLabels.length || riskDetailItem.category"
<AreaTag :key="'overview-risk-dialog-tag-bio'" tagName="生物科技">生物科技</AreaTag> class="risk-signal-detail-dialog__directions"
<AreaTag :key="'overview-risk-dialog-tag-ai'" tagName="人工智能">人工智能</AreaTag> >
<div
v-for="(dirLabel, dirIndex) in riskDetailItem.directionLabels"
:key="'overview-risk-detail-direction-' + dirIndex + '-' + dirLabel"
class="risk-signal-detail-dialog__origin"
>{{ dirLabel }}</div>
<div v-if="riskDetailItem.category" class="risk-signal-detail-dialog__origin">{{ riskDetailItem.category }}</div>
</div>
<div class="risk-signal-detail-dialog__meta">
<span>{{ metaLine }}</span>
<div v-if="riskDetailItem.tag.length" class="risk-signal-detail-dialog__tags">
<AreaTag
v-for="(tag, index) in riskDetailItem.tag"
:key="'overview-risk-detail-tag-' + index + '-' + tag"
:tag-name="tag"
>{{ tag }}</AreaTag>
</div>
</div>
</div> </div>
</div> <div
</div> v-if="showRelationBar"
<div class="risk-signal-detail-dialog_relation"> class="risk-signal-detail-dialog_relation"
<div class="relation"> @click="handleRelationClick"
<div class="logo"> >
<img src="@/views/viewRiskSignal/assets/images/logo.png" alt="" /> <div class="relation">
<div class="logo">
<img src="@/views/viewRiskSignal/assets/images/logo.png" alt="" />
</div>
<div class="name-text">{{ riskDetailItem.relationType }}</div>
<div class="content-text">{{ riskDetailItem.relationTitle }}</div>
</div>
<div class="right-arrow">
<img src="@/views/viewRiskSignal/assets/images/right-arrow.png" alt="" />
</div>
</div> </div>
<div class="name-text">总统行政令——</div> <div class="risk-signal-detail-dialog__desc">{{ riskDetailItem.dsc }}</div>
<div class="content-text">关于调整进口木材、锯材及其衍生产品进入美国的相关修正案</div>
</div>
<div class="right-arrow">
<img src="@/views/viewRiskSignal/assets/images/right-arrow.png" alt="" />
</div> </div>
</div> </div>
<div class="risk-signal-detail-dialog__desc">
<p class="risk-signal-detail-dialog__desc-p">
任何被列入美国出口管制“实体清单”或“军事最终用户清单”的企业,如果其直接或间接持有另一家公司50%或以上的股权,那么这家被控股的公司也将自动受到与清单上母公司同等的出口管制限制
</p>
<p class="risk-signal-detail-dialog__desc-p">
任何被列入美国出口管制“实体清单”或“军事最终用户清单”的企业,如果其直接或间接持有另一家公司50%或以上的股权,那么这家被控股的公司也将自动受到与清单上母公司同等的出口管制限制
</p>
</div>
<template #footer> <template #footer>
<el-button type="primary" class="risk-signal-detail-dialog__action-btn" @click="visible = false"> <el-button type="primary" class="risk-signal-detail-dialog__action-btn" @click="visible = false">
确定风险 确定风险
...@@ -54,9 +72,41 @@ ...@@ -54,9 +72,41 @@
</template> </template>
<script setup> <script setup>
import { computed, nextTick, reactive, ref, watch } from "vue";
import { useRouter } from "vue-router";
import AreaTag from "@/components/base/AreaTag/index.vue"; import AreaTag from "@/components/base/AreaTag/index.vue";
import { getRiskSignalInfoById } from "@/api/riskSignal/index.js";
import {
buildListRowFallbackFromRawRow,
buildRiskDetailPayloadFromApi,
getEmptyRiskDetailPayload,
getRiskDetailLevelModifier,
normalizeRiskSignalListLevelText,
resolveRiskSignalRelationRoute,
resolveRiskSignalRowId
} from "@/utils/riskSignalOverviewDetailHelpers.js";
defineProps({ const props = defineProps({
/** 当前点击的列表行(建议先赋值再打开 v-model) */
row: {
type: Object,
default: null
},
/** 与 RiskSignal 组件 name 一致 */
nameField: {
type: String,
default: "name"
},
/** 与 RiskSignal 组件 postDate 一致 */
postDateField: {
type: String,
default: "postDate"
},
/** 与 RiskSignal 组件 riskLevel 一致 */
riskLevelField: {
type: String,
default: "riskLevel"
},
/** 与遮罩、弹窗层级一致,避免被大屏/轮播盖住 */ /** 与遮罩、弹窗层级一致,避免被大屏/轮播盖住 */
zIndex: { zIndex: {
type: Number, type: Number,
...@@ -68,7 +118,116 @@ const emit = defineEmits(["closed"]); ...@@ -68,7 +118,116 @@ const emit = defineEmits(["closed"]);
const visible = defineModel({ type: Boolean, default: false }); const visible = defineModel({ type: Boolean, default: false });
const router = useRouter();
const listLevelText = ref("");
const bodyFromApi = ref(false);
const detailLoading = ref(false);
const riskDetailItem = reactive(getEmptyRiskDetailPayload());
const assignRiskDetail = (val) => {
riskDetailItem.title = val.title ?? "";
riskDetailItem.origin = val.origin ?? "";
riskDetailItem.time = val.time ?? "";
riskDetailItem.dsc = val.dsc ?? "";
riskDetailItem.tag = Array.isArray(val.tag) ? [...val.tag] : [];
riskDetailItem.risktype = val.risktype ?? "";
riskDetailItem.category = val.category ?? "";
riskDetailItem.directionLabels = Array.isArray(val.directionLabels) ? [...val.directionLabels] : [];
riskDetailItem.relationType = val.relationType ?? "";
riskDetailItem.relationTitle = val.relationTitle ?? "";
riskDetailItem.relationModelCode = val.relationModelCode ?? "";
riskDetailItem.relationReferedId = val.relationReferedId ?? "";
};
const metaLine = computed(() => {
const t = String(riskDetailItem.time ?? "").trim();
const o = String(riskDetailItem.origin ?? "").trim();
if (t && o) {
return `${t}·${o}`;
}
return t || o;
});
const showRelationBar = computed(() => {
const ti = String(riskDetailItem.relationTitle ?? "").trim();
const ty = String(riskDetailItem.relationType ?? "").trim();
const id = String(riskDetailItem.relationReferedId ?? "").trim();
return Boolean(ti || ty || id);
});
const listLevelModifierClass = computed(
() => `risk-signal-detail-dialog__level--${getRiskDetailLevelModifier(listLevelText.value)}`
);
const fieldMap = computed(() => ({
nameField: props.nameField,
postDateField: props.postDateField,
riskLevelField: props.riskLevelField
}));
const resetState = () => {
listLevelText.value = "";
bodyFromApi.value = false;
detailLoading.value = false;
assignRiskDetail(getEmptyRiskDetailPayload());
};
/** 拉取详情:标题区等级来自列表行;正文区仅接口成功后展示 */
const loadDetail = async () => {
if (!visible.value || !props.row) {
return;
}
const listFallback = buildListRowFallbackFromRawRow(props.row, fieldMap.value);
listLevelText.value = normalizeRiskSignalListLevelText(listFallback.risktype);
assignRiskDetail(getEmptyRiskDetailPayload());
bodyFromApi.value = false;
detailLoading.value = false;
const id = resolveRiskSignalRowId(props.row);
if (!id) {
return;
}
detailLoading.value = true;
try {
const res = await getRiskSignalInfoById(id);
if (res.code === 200 && res.data) {
assignRiskDetail(buildRiskDetailPayloadFromApi(res.data, listFallback));
bodyFromApi.value = true;
}
} catch (error) {
console.error("获取风险信号详情 error", error);
} finally {
detailLoading.value = false;
}
};
watch(
() => [visible.value, props.row],
async () => {
if (!visible.value) {
resetState();
return;
}
await nextTick();
await loadDetail();
}
);
const handleRelationClick = () => {
const loc = resolveRiskSignalRelationRoute(
riskDetailItem.relationModelCode,
riskDetailItem.relationReferedId
);
if (!loc) {
return;
}
const href = router.resolve(loc).href;
window.open(href, "_blank");
};
function handleClosed() { function handleClosed() {
resetState();
emit("closed"); emit("closed");
} }
</script> </script>
......
...@@ -196,6 +196,14 @@ ...@@ -196,6 +196,14 @@
border-radius: 20px; border-radius: 20px;
} }
.risk-signal-detail-dialog .risk-signal-detail-dialog__directions {
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
gap: 8px;
}
.risk-signal-detail-dialog .risk-signal-detail-dialog__body { .risk-signal-detail-dialog .risk-signal-detail-dialog__body {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
...@@ -327,3 +335,11 @@ ...@@ -327,3 +335,11 @@
flex-wrap: wrap; flex-wrap: wrap;
gap: 8px; gap: 8px;
} }
/* 详情请求中 v-loading 遮罩区域(与列表一致有足够高度以便居中) */
.risk-signal-detail-dialog .risk-signal-detail-dialog__main {
position: relative;
width: 100%;
min-height: 480px;
box-sizing: border-box;
}
差异被折叠。
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
class="risk-signals-item" class="risk-signals-item"
v-for="(item, index) in warningList" v-for="(item, index) in warningList"
:key="item.signalId || item.billId || index" :key="item.signalId || item.billId || index"
@click="handleRiskSignalItemToManage" @click="handleRiskSignalItemToManage(item)"
:class="{ highlighted: item.eventType === highlightedEventType }" :class="{ highlighted: item.eventType === highlightedEventType }"
> >
<div <div
...@@ -115,7 +115,13 @@ ...@@ -115,7 +115,13 @@
</div> </div>
</div> </div>
</div> </div>
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</div> </div>
</template> </template>
...@@ -292,8 +298,10 @@ const handleSwithCurNews = name => { ...@@ -292,8 +298,10 @@ const handleSwithCurNews = name => {
}; };
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemToManage = () => { const handleRiskSignalItemToManage = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
:key="item.signalId != null ? String(item.signalId) : 'risk-' + index" :key="item.signalId != null ? String(item.signalId) : 'risk-' + index"
@mouseenter="onMouseEnter(item, index)" @mouseenter="onMouseEnter(item, index)"
@mouseleave="onMouseLeave" @mouseleave="onMouseLeave"
@click.stop="handleRiskSignalRowToManage" @click.stop="handleRiskSignalRowToManage(item)"
:class="['risk-signals-item', { 'risk-signals-item-hightLight': riskSignalActiveIndex === index }]" :class="['risk-signals-item', { 'risk-signals-item-hightLight': riskSignalActiveIndex === index }]"
> >
<div class="item-left" :class="{ <div class="item-left" :class="{
...@@ -125,7 +125,13 @@ ...@@ -125,7 +125,13 @@
</div> </div>
</div> </div>
</div> </div>
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</div> </div>
</template> </template>
...@@ -655,8 +661,10 @@ const filteredHotNewsList = computed(() => { ...@@ -655,8 +661,10 @@ const filteredHotNewsList = computed(() => {
return hotNewsList.value.filter(newsItem => newsItem.signalId === currentHoveredSignalId.value); return hotNewsList.value.filter(newsItem => newsItem.signalId === currentHoveredSignalId.value);
}); });
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
const handleRiskSignalRowToManage = () => { const handleRiskSignalRowToManage = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -238,7 +238,13 @@ ...@@ -238,7 +238,13 @@
<DivideHeader id="position4" class="divide4" :titleText="'资源库'"></DivideHeader> <DivideHeader id="position4" class="divide4" :titleText="'资源库'"></DivideHeader>
<ResourceLibrarySection :on-click-to-detail="handleClickToDetailO" :on-after-page-change="handlePageChange" /> <ResourceLibrarySection :on-click-to-detail="handleClickToDetailO" :on-after-page-change="handlePageChange" />
</div> </div>
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</div> </div>
</div> </div>
</template> </template>
...@@ -469,8 +475,10 @@ const handleClickToDetailO = item => { ...@@ -469,8 +475,10 @@ const handleClickToDetailO = item => {
}; };
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemToManage = () => { const handleRiskSignalItemToManage = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -113,7 +113,13 @@ ...@@ -113,7 +113,13 @@
<RiskSignal :list="riskSignals" @more-click="handleToMoreRiskSignal" postDate="time" name="content" <RiskSignal :list="riskSignals" @more-click="handleToMoreRiskSignal" postDate="time" name="content"
riskLevel="title" @item-click="handleRiskSignalItemToManage" /> riskLevel="title" @item-click="handleRiskSignalItemToManage" />
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="content"
post-date-field="time"
risk-level-field="title"
/>
</div> </div>
</template> </template>
...@@ -214,8 +220,10 @@ const handleToRiskDetail = (item) => { ...@@ -214,8 +220,10 @@ const handleToRiskDetail = (item) => {
}; };
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemToManage = () => { const handleRiskSignalItemToManage = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -403,7 +403,13 @@ ...@@ -403,7 +403,13 @@
</div> </div>
</div> </div>
</div> </div>
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</div> </div>
</template> </template>
...@@ -495,7 +501,10 @@ const onNavigateTo = () => { ...@@ -495,7 +501,10 @@ const onNavigateTo = () => {
// 查看更多风险信号 // 查看更多风险信号
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const handleRiskSignalItemToManage = () => { const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemToManage = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -692,7 +692,13 @@ ...@@ -692,7 +692,13 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</template> </template>
<script setup> <script setup>
...@@ -801,9 +807,10 @@ const handleToPosi = id => { ...@@ -801,9 +807,10 @@ const handleToPosi = id => {
}; };
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
// 风险信号:概览写死详情弹窗 const handleToRiskSignalDetail = (item) => {
const handleToRiskSignalDetail = () => { riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -544,7 +544,13 @@ ...@@ -544,7 +544,13 @@
</custom-container> </custom-container>
</el-col> </el-col>
</el-row> </el-row>
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="title"
post-date-field="time"
risk-level-field="status"
/>
</div> </div>
</div> </div>
</template> </template>
...@@ -635,8 +641,10 @@ const messageList = ref([ ...@@ -635,8 +641,10 @@ const messageList = ref([
} }
]); ]);
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
const handleToRiskSignalDetail = () => { const handleToRiskSignalDetail = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -549,7 +549,13 @@ ...@@ -549,7 +549,13 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</template> </template>
<script setup> <script setup>
...@@ -668,9 +674,10 @@ const handleToPosi = id => { ...@@ -668,9 +674,10 @@ const handleToPosi = id => {
}; };
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
// 风险信号:概览写死详情弹窗 const handleToRiskSignalDetail = (item) => {
const handleToRiskSignalDetail = () => { riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -75,7 +75,12 @@ ...@@ -75,7 +75,12 @@
</div> </div>
<div class="item-header-divider" /> <div class="item-header-divider" />
<div class="warning-wrap"> <div class="warning-wrap">
<div v-for="(item, index) in warningList" :key="index" class="waring-item" @click="handleRiskSignalItemClick"> <div
v-for="(item, index) in warningList"
:key="item.title + '-' + item.time + '-' + index"
class="waring-item"
@click="handleRiskSignalItemClick(item)"
>
<div class="waring-row"> <div class="waring-row">
<div class="waring-status" :style="{ <div class="waring-status" :style="{
color: item.status === 0 ? '#CE4F51' : item.status === 1 ? '#FA8C16' : '#52C41A', color: item.status === 0 ? '#CE4F51' : item.status === 1 ? '#FA8C16' : '#52C41A',
...@@ -114,7 +119,13 @@ ...@@ -114,7 +119,13 @@
<AdvantagesAnalysis /> <AdvantagesAnalysis />
<div style="width: 100%;height: 100px;"></div> <div style="width: 100%;height: 100px;"></div>
</div> </div>
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="title"
post-date-field="time"
risk-level-field="riskLevel"
/>
</div> </div>
</template> </template>
...@@ -224,8 +235,15 @@ const warningList = ref([ ...@@ -224,8 +235,15 @@ const warningList = ref([
]); ]);
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemClick = () => { const mapRiskOverviewRowFromStatus = (item) => ({
...item,
riskLevel: item.status === 0 ? "特别重大" : item.status === 1 ? "重大风险" : "一般风险"
});
const handleRiskSignalItemClick = (item) => {
riskOverviewDetailRow.value = mapRiskOverviewRowFromStatus(item);
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -147,7 +147,13 @@ ...@@ -147,7 +147,13 @@
</div> --> </div> -->
<RiskSignal :list="warningList" @more-click="handleToMoreRiskSignal" @item-click="handleRiskSignalItemToManage" <RiskSignal :list="warningList" @more-click="handleToMoreRiskSignal" @item-click="handleRiskSignalItemToManage"
riskLevel="signalLevel" postDate="signalTime" name="signalTitle" /> riskLevel="signalLevel" postDate="signalTime" name="signalTitle" />
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</div> </div>
<DivideHeader id="position2" class="divide2" :titleText="'资讯要闻'"></DivideHeader> <DivideHeader id="position2" class="divide2" :titleText="'资讯要闻'"></DivideHeader>
<div class="center-center"> <div class="center-center">
...@@ -518,8 +524,10 @@ const handleClickToDetail = university => { ...@@ -518,8 +524,10 @@ const handleClickToDetail = university => {
}; };
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemToManage = () => { const handleRiskSignalItemToManage = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -59,7 +59,13 @@ ...@@ -59,7 +59,13 @@
</overviewMainBox> </overviewMainBox>
</div> </div>
<RiskSignal :list="box2Data" @more-click="handleToMoreRiskSignal" @item-click="handleRiskSignalItemToManage" postDate="signalTime" name="signalTitle" riskLevel="signalLevel" /> <RiskSignal :list="box2Data" @more-click="handleToMoreRiskSignal" @item-click="handleRiskSignalItemToManage" postDate="signalTime" name="signalTitle" riskLevel="signalLevel" />
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</div> </div>
<DivideHeader id="position2" class="divide-header" :titleText="'资讯要闻'"></DivideHeader> <DivideHeader id="position2" class="divide-header" :titleText="'资讯要闻'"></DivideHeader>
...@@ -933,7 +939,10 @@ const handleFetchSurveyList = async () => { ...@@ -933,7 +939,10 @@ const handleFetchSurveyList = async () => {
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const handleRiskSignalItemToManage = () => { const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemToManage = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -112,7 +112,12 @@ ...@@ -112,7 +112,12 @@
</div> </div>
<div class="item-header-divider"></div> <div class="item-header-divider"></div>
<div style="padding: 30px 23px; height: 400px"> <div style="padding: 30px 23px; height: 400px">
<div class="waring-item" v-for="(item, index) in warningList" :key="index" @click="handleRiskSignalItemClick"> <div
class="waring-item"
v-for="(item, index) in warningList"
:key="item.title + '-' + item.time + '-' + index"
@click="handleRiskSignalItemClick(item)"
>
<div style="display: flex; height: 47px"> <div style="display: flex; height: 47px">
<div <div
class="waring-status" class="waring-status"
...@@ -195,7 +200,13 @@ ...@@ -195,7 +200,13 @@
<strengthComparison /> <strengthComparison />
</div> </div>
</div> </div>
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="title"
post-date-field="time"
risk-level-field="riskLevel"
/>
</div> </div>
</template> </template>
...@@ -227,8 +238,15 @@ const handleToSearch = () => { ...@@ -227,8 +238,15 @@ const handleToSearch = () => {
}; };
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemClick = () => { const mapRiskOverviewRowFromStatus = (item) => ({
...item,
riskLevel: item.status === 0 ? "特别重大" : item.status === 1 ? "重大风险" : "一般风险"
});
const handleRiskSignalItemClick = (item) => {
riskOverviewDetailRow.value = mapRiskOverviewRowFromStatus(item);
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -71,7 +71,13 @@ ...@@ -71,7 +71,13 @@
</div> --> </div> -->
<RiskSignal :list="list" @more-click="handleToMoreRiskSignal" @item-click="handleRiskSignalItemToManage" <RiskSignal :list="list" @more-click="handleToMoreRiskSignal" @item-click="handleRiskSignalItemToManage"
riskLevel="signalLevel" postDate="signalTime" name="signalTitle" /> riskLevel="signalLevel" postDate="signalTime" name="signalTitle" />
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</div> </div>
</template> </template>
...@@ -198,8 +204,10 @@ const handleToRiskDetail = (item) => { ...@@ -198,8 +204,10 @@ const handleToRiskDetail = (item) => {
// }; // };
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemToManage = () => { const handleRiskSignalItemToManage = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -92,7 +92,13 @@ ...@@ -92,7 +92,13 @@
</div> --> </div> -->
<RiskSignal :list="list" @more-click="handleToMoreRiskSignal" @item-click="handleRiskSignalItemToManage" <RiskSignal :list="list" @more-click="handleToMoreRiskSignal" @item-click="handleRiskSignalItemToManage"
postDate="signalTime" name="signalTitle" riskLevel="signalLevel" /> postDate="signalTime" name="signalTitle" riskLevel="signalLevel" />
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</div> </div>
</template> </template>
...@@ -128,8 +134,10 @@ const formatDate = (dateStr) => { ...@@ -128,8 +134,10 @@ const formatDate = (dateStr) => {
return `${y}${m}${d}日`; return `${y}${m}${d}日`;
}; };
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemToManage = () => { const handleRiskSignalItemToManage = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -157,7 +157,13 @@ ...@@ -157,7 +157,13 @@
<RiskSignal :list="warningList" @more-click="handleToMoreRiskSignal" @item-click="handleRiskSignalItemToManage" <RiskSignal :list="warningList" @more-click="handleToMoreRiskSignal" @item-click="handleRiskSignalItemToManage"
postDate="signalTime" name="signalTitle" riskLevel="signalLevel" /> postDate="signalTime" name="signalTitle" riskLevel="signalLevel" />
<RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" /> <RiskSignalOverviewDetailDialog
v-model="isRiskOverviewDetailOpen"
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</div> </div>
<DivideHeader id="position2" class="divide-header" :titleText="'言论动态'" v-if="false"></DivideHeader> <DivideHeader id="position2" class="divide-header" :titleText="'言论动态'" v-if="false"></DivideHeader>
<div class="center-center"> <div class="center-center">
...@@ -828,8 +834,10 @@ const handleClickCate = cate => { ...@@ -828,8 +834,10 @@ const handleClickCate = cate => {
}; };
const isRiskOverviewDetailOpen = ref(false); const isRiskOverviewDetailOpen = ref(false);
const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemToManage = () => { const handleRiskSignalItemToManage = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskOverviewDetailOpen.value = true; isRiskOverviewDetailOpen.value = true;
}; };
......
...@@ -211,7 +211,12 @@ ...@@ -211,7 +211,12 @@
<RiskSignal :list="warningList" @more-click="handleToMoreRiskSignal" postDate="time" name="title" <RiskSignal :list="warningList" @more-click="handleToMoreRiskSignal" postDate="time" name="title"
@item-click="handleRiskSignalItemToManage" /> @item-click="handleRiskSignalItemToManage" />
<RiskSignalOverviewDetailDialog v-model="isRiskDetailVisible" /> <RiskSignalOverviewDetailDialog
v-model="isRiskDetailVisible"
:row="riskOverviewDetailRow"
name-field="title"
post-date-field="time"
/>
</div> </div>
<DivideHeader id="position2" class="divide-header" :titleText="'资讯要闻'"></DivideHeader> <DivideHeader id="position2" class="divide-header" :titleText="'资讯要闻'"></DivideHeader>
<div class="center-center"> <div class="center-center">
...@@ -2139,8 +2144,10 @@ const handleClick = tank => { ...@@ -2139,8 +2144,10 @@ const handleClick = tank => {
// router.push({ name: "ThinkTankDetail", params: { id: tank.id, name: tank.name } }) // router.push({ name: "ThinkTankDetail", params: { id: tank.id, name: tank.name } })
}; };
// 风险信号 item:当前页弹窗(内容与样式与风险信号管理页 dialog 一致,写死展示) const riskOverviewDetailRow = ref(null);
const handleRiskSignalItemToManage = () => {
const handleRiskSignalItemToManage = (item) => {
riskOverviewDetailRow.value = item ?? null;
isRiskDetailVisible.value = true; isRiskDetailVisible.value = true;
}; };
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论