提交 1d37f6c5 authored 作者: 闫鹏's avatar 闫鹏

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

Yp dev 查看合并请求 !348
流水线 #491 已通过 于阶段
in 3 分 44 秒
...@@ -47,7 +47,7 @@ export function getLatestEntityListInfo() { ...@@ -47,7 +47,7 @@ export function getLatestEntityListInfo() {
* 风险信号 * 风险信号
* url:/commonFeature/riskSignal/{moduleId} * url:/commonFeature/riskSignal/{moduleId}
*/ */
export function getRiskSignal(moduleId = "0104") { export function getRiskSignal(moduleId = "0109") {
return http.get(`/api/commonFeature/riskSignal/${moduleId}`); return http.get(`/api/commonFeature/riskSignal/${moduleId}`);
} }
...@@ -55,7 +55,7 @@ export function getRiskSignal(moduleId = "0104") { ...@@ -55,7 +55,7 @@ export function getRiskSignal(moduleId = "0104") {
* 新闻资讯 * 新闻资讯
* url:/commonFeature/news/{moduleId} * url:/commonFeature/news/{moduleId}
*/ */
export function getNewsInfo(moduleId = "0104") { export function getNewsInfo(moduleId = "0109") {
return http.get(`/api/commonFeature/news/${moduleId}`); return http.get(`/api/commonFeature/news/${moduleId}`);
} }
...@@ -63,7 +63,7 @@ export function getNewsInfo(moduleId = "0104") { ...@@ -63,7 +63,7 @@ export function getNewsInfo(moduleId = "0104") {
* 社交媒体信息 * 社交媒体信息
* url:/commonFeature/remarks/{moduleId} * url:/commonFeature/remarks/{moduleId}
*/ */
export function getSocialMediaInfo(moduleId = "0104") { export function getSocialMediaInfo(moduleId = "0109") {
return http.get(`/api/commonFeature/remarks/${moduleId}`); return http.get(`/api/commonFeature/remarks/${moduleId}`);
} }
......
...@@ -89,6 +89,7 @@ ...@@ -89,6 +89,7 @@
</div> </div>
</div> </div>
<div class="box1-bottom"> <div class="box1-bottom">
<div class="box1-bottom-sanTypeId" v-if="item.sanEntities?.length">
<div class="box1-bottom-title">· 涉及主要实体:</div> <div class="box1-bottom-title">· 涉及主要实体:</div>
<div class="box1-bottom-content"> <div class="box1-bottom-content">
<div <div
...@@ -116,12 +117,33 @@ ...@@ -116,12 +117,33 @@
</div> </div>
</div> </div>
</div> </div>
<div class="box1-bottom-sanTypeId" v-if="item.sanItems?.length > 0">
<div class="box1-bottom-title">· 涉及管制物项:</div>
<div class="box1-bottom-content__wx">
<div
class="box1-bottom-content__wx-item"
v-for="(ett, index) in item.sanItems"
:key="index"
@click="handleWxClick(item)"
>
<div class="box1-bottom-content__wx-item-id">
{{ ett.id }}
</div>
<div class="box1-bottom-content__wx-item-txt">
{{ ett.name }}
</div>
</div>
</div>
</div>
</div>
<div class="box1-absolute" @click="handleToDataLibrary(item)"> <div class="box1-absolute" @click="handleToDataLibrary(item)">
<div class="box1-absolute-des"> <div class="box1-absolute-des">
<el-icon> <el-icon>
<Warning color="rgba(206, 79, 81, 1)" /> <Warning color="rgba(206, 79, 81, 1)" />
</el-icon> </el-icon>
<span>新增中国实体</span> <span>{{
item.sanTypeId == allSanTypeIds[0] ? "新增中国实体" : "新增物项"
}}</span>
</div> </div>
<div class="box1-absolute-num">{{ item.cnEntityCount }}</div> <div class="box1-absolute-num">{{ item.cnEntityCount }}</div>
</div> </div>
...@@ -950,7 +972,7 @@ onMounted(async () => { ...@@ -950,7 +972,7 @@ onMounted(async () => {
getIndustryCountByYear(13) getIndustryCountByYear(13)
]); ]);
// 交换第二个和第三个元素 // 交换第二个和第三个元素
[dataCount[1], dataCount[2]] = [dataCount[2], dataCount[1]]; // [dataCount[1], dataCount[2]] = [dataCount[2], dataCount[1]];
infoList.value = dataCount.slice(0, 2).map((item, idx) => { infoList.value = dataCount.slice(0, 2).map((item, idx) => {
return { return {
...item, ...item,
...@@ -966,9 +988,7 @@ onMounted(async () => { ...@@ -966,9 +988,7 @@ onMounted(async () => {
})); }));
resourceTabs.value.unshift({ label: "全部制裁", value: "all", id: "", disabled: false }); resourceTabs.value.unshift({ label: "全部制裁", value: "all", id: "", disabled: false });
console.log("返回的数据结构 infoList =》", resourceTabs.value); console.log("返回的数据结构 infoList =》", resourceTabs.value);
const entityList = _.map(entitiesDataInfo?.sanEntities ?? [], ({ entityNameZh, entityName }) => {
return { name: entityNameZh, enName: entityName };
});
entitiesDataInfoList.value = entitiesDataInfo || []; entitiesDataInfoList.value = entitiesDataInfo || [];
const list = _.chain(industryCountByYear).filter("year").orderBy("year", "desc").value().slice(0, 5); const list = _.chain(industryCountByYear).filter("year").orderBy("year", "desc").value().slice(0, 5);
const cclList1 = _.chain(cclList).filter("year").orderBy("year", "desc").value().slice(0, 5); const cclList1 = _.chain(cclList).filter("year").orderBy("year", "desc").value().slice(0, 5);
...@@ -1101,37 +1121,21 @@ const handleEntityClick = item => { ...@@ -1101,37 +1121,21 @@ const handleEntityClick = item => {
console.log("item", item); console.log("item", item);
window.sessionStorage.setItem("curTabName", item.name || item.entityNameZh); window.sessionStorage.setItem("curTabName", item.name || item.entityNameZh);
gotoCompanyPages(item.id); gotoCompanyPages(item.id);
// const route = router.resolve({
// name: "companyPages",
// params: {
// // startTime: item.startTime,
// id: item.entityId
// }
// });
// window.open(route.href, "_blank");
}; };
const carouselRef = ref(null); const handleWxClick = item => {
// const handleToDetail = () => { const routeData = router.resolve({
// let activeIndex = 0; path: "/exportControl/commercialControlList",
// if (carouselRef.value) { query: {
// activeIndex = carouselRef.value.activeIndex; sanTypeId: item.sanTypeId,
// } key: item.id
}
// console.log("当前 Carousel 激活索引:", activeIndex); });
// 打开一个新页面
window.open(routeData.href, "_blank");
};
// // 使用当前激活项的数据 const carouselRef = ref(null);
// const currentItem = entitiesDataInfoList.value[activeIndex];
// if (currentItem) {
// const route = router.resolve({
// path: "/exportControlAnalysis",
// query: {
// startTime: currentItem.postDate
// }
// });
// window.open(route.href, "_blank");
// }
// };
const currentCarouselIndex = ref(0); const currentCarouselIndex = ref(0);
const handleCarouselChange = index => { const handleCarouselChange = index => {
currentCarouselIndex.value = index; currentCarouselIndex.value = index;
...@@ -2065,6 +2069,34 @@ const handleMediaClick = item => { ...@@ -2065,6 +2069,34 @@ const handleMediaClick = item => {
margin-bottom: 15px; margin-bottom: 15px;
} }
&-content__wx {
display: flex;
flex-direction: column;
gap: 10px;
justify-content: flex-start;
padding-left: 10px;
height: 156px;
overflow: auto;
&-item {
display: flex;
align-items: center;
justify-content: flex-start;
gap: 10px;
cursor: pointer;
&-id {
font-family: "Source Han Sans CN";
font-size: 16px;
font-weight: 700;
color: rgb(95, 101, 108);
}
&-txt {
font-size: 16px;
font-weight: 400;
color: rgba(95, 101, 108, 1);
line-height: 24px;
}
}
}
&-content { &-content {
display: flex; display: flex;
gap: 15px; gap: 15px;
......
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
<script setup> <script setup>
import { ref, computed, onMounted, watch } from "vue"; import { ref, computed, onMounted, watch } from "vue";
import { useRouter } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import { Search, Select } from "@element-plus/icons-vue"; import { Search, Select } from "@element-plus/icons-vue";
import defaultIcon from "../../../../../assets/icons/default-avatar.png"; import defaultIcon from "../../../../../assets/icons/default-avatar.png";
import { import {
...@@ -104,6 +104,7 @@ import { ...@@ -104,6 +104,7 @@ import {
import dayjs from "dayjs"; import dayjs from "dayjs";
const router = useRouter(); const router = useRouter();
const route = useRoute();
const currentCCLType = ref(""); const currentCCLType = ref("");
const CCLTypeList = ref([]); const CCLTypeList = ref([]);
...@@ -111,7 +112,7 @@ const getTypeList = async () => { ...@@ -111,7 +112,7 @@ const getTypeList = async () => {
try { try {
const res = await getECCNCategory(); const res = await getECCNCategory();
if (res && res.code === 200) { if (res && res.code === 200) {
console.log("-----getTypeList", res.data); // console.log("-----getTypeList", res.data);
CCLTypeList.value = [{ id: "", name: "全部类别" }].concat(res.data); CCLTypeList.value = [{ id: "", name: "全部类别" }].concat(res.data);
currentCCLType.value = ""; currentCCLType.value = "";
} }
...@@ -125,7 +126,7 @@ const getTechFields = async () => { ...@@ -125,7 +126,7 @@ const getTechFields = async () => {
try { try {
const res = await getAreaType(); const res = await getAreaType();
if (res && res.code === 200) { if (res && res.code === 200) {
console.log("-----getTechFields", res.data); // console.log("-----getTechFields", res.data);
techFields.value = [{ id: "all", name: "全部领域", checked: true }].concat(res.data); techFields.value = [{ id: "all", name: "全部领域", checked: true }].concat(res.data);
// 默认选中第一个 // 默认选中第一个
// techFields.value[0].checked = true; // techFields.value[0].checked = true;
...@@ -225,7 +226,6 @@ const getCclList = async () => { ...@@ -225,7 +226,6 @@ const getCclList = async () => {
try { try {
const res = await getCclQuery(params); const res = await getCclQuery(params);
if (res && res.code === 200) { if (res && res.code === 200) {
console.log("----getCclList", res.data);
cclList.value = res.data; cclList.value = res.data;
// ✅ 新增:处理 changeFlag 向上继承逻辑 // ✅ 新增:处理 changeFlag 向上继承逻辑
...@@ -251,7 +251,7 @@ const getCclList = async () => { ...@@ -251,7 +251,7 @@ const getCclList = async () => {
}); });
}); });
console.log("----getCclList 11", cclList.value); // console.log("----getCclList 11", cclList.value);
loading.value = false; loading.value = false;
} }
} catch (error) { } catch (error) {
...@@ -262,14 +262,14 @@ const getCclList = async () => { ...@@ -262,14 +262,14 @@ const getCclList = async () => {
// 商业管制清单-CCL清单列表-清单版本 // 商业管制清单-CCL清单列表-清单版本
const cclVersionList = ref([]); const cclVersionList = ref([]);
const key = ref("");
// 当前选中的清单版本 // 当前选中的清单版本
const currentCCLVersion = ref(""); const currentCCLVersion = ref(Number(key.value) || "");
// 获取清单版本列表 // 获取清单版本列表
const getCCLVersionListApi = async () => { const getCCLVersionListApi = async () => {
try { try {
const res = await getCCLVersionList(); const res = await getCCLVersionList();
if (res && res.code === 200) { if (res && res.code === 200) {
console.log("----getCCLVersionList", res.data);
cclVersionList.value = res.data.map(item => { cclVersionList.value = res.data.map(item => {
return { return {
key: item.key, key: item.key,
...@@ -277,7 +277,8 @@ const getCCLVersionListApi = async () => { ...@@ -277,7 +277,8 @@ const getCCLVersionListApi = async () => {
// value: `清单版本-${item.value}` // value: `清单版本-${item.value}`
}; };
}); });
currentCCLVersion.value = res.data[0].key; // currentCCLVersion.value = res.data[0].key;
currentCCLVersion.value = key.value ? Number(key.value) : res.data[0].key;
} }
} catch (error) { } catch (error) {
console.error("获取清单版本列表失败:", error); console.error("获取清单版本列表失败:", error);
...@@ -341,7 +342,6 @@ watch(currentCCLVersion, newValue => { ...@@ -341,7 +342,6 @@ watch(currentCCLVersion, newValue => {
// }, 300); // }, 300);
// }); // });
watch(searchKeyword, newValue => { watch(searchKeyword, newValue => {
console.log("-----searchKey", newValue);
getCclList(); getCclList();
}); });
const loading = ref(false); const loading = ref(false);
...@@ -349,6 +349,8 @@ const loading = ref(false); ...@@ -349,6 +349,8 @@ const loading = ref(false);
const cclList = ref([]); const cclList = ref([]);
onMounted(async () => { onMounted(async () => {
key.value = route.query.key;
console.log("url参数 =>", route.query);
// 获取类别字段 // 获取类别字段
await getTypeList(); await getTypeList();
// 获取科技领域字典 // 获取科技领域字典
......
...@@ -7,8 +7,14 @@ ...@@ -7,8 +7,14 @@
<template> <template>
<div class="sanctions-overview"> <div class="sanctions-overview">
<div class="side-nav"> <div class="side-nav">
<div v-for="(item, index) in activeTab" :key="index" class="tab-item" :class="{'active': index === activeIndex}" @click="activeIndex = index"> <div
{{item}} v-for="(item, index) in activeTab"
:key="index"
class="tab-item"
:class="{ active: index === activeIndex }"
@click="activeIndex = index"
>
{{ item }}
<span v-if="index === activeIndex" class="arrow"></span> <span v-if="index === activeIndex" class="arrow"></span>
</div> </div>
</div> </div>
...@@ -20,23 +26,22 @@ ...@@ -20,23 +26,22 @@
</template> </template>
<script setup> <script setup>
import { ref } from 'vue' import { onMounted, ref } from "vue";
import introductionPage from "./components/introductionPage/index.vue" import introductionPage from "./components/introductionPage/index.vue";
import listPage from "./components/listPage/index.vue" import listPage from "./components/listPage/index.vue";
import { useRoute } from "vue-router";
const activeTab = ref(["CCL清单简介", "CCL清单列表"])
const activeIndex = ref(0)
const route = useRoute();
const activeTab = ref(["CCL清单简介", "CCL清单列表"]);
const activeIndex = ref(0);
onMounted(() => {
activeIndex.value = route.query.key ? 1 : 0;
});
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
*{ .sanctions-overview {
margin: 0;
padding: 0;
}
.sanctions-overview{
width: 1601px; width: 1601px;
margin: 0 auto; margin: 0 auto;
position: relative; position: relative;
......
...@@ -57,9 +57,11 @@ import icon3Active from "../assets/icons/icon3_active.png"; ...@@ -57,9 +57,11 @@ import icon3Active from "../assets/icons/icon3_active.png";
const route = useRoute(); const route = useRoute();
const sanTypeId = ref(""); const sanTypeId = ref("");
const key = ref("");
onMounted(() => { onMounted(() => {
// 获取路由参数sanTypeId // 获取路由参数sanTypeId
sanTypeId.value = route.query.sanTypeId; sanTypeId.value = route.query.sanTypeId;
key.value = route.query.key;
console.log("CommercialControlList 页面接收到的 sanTypeId:", sanTypeId.value); console.log("CommercialControlList 页面接收到的 sanTypeId:", sanTypeId.value);
}); });
......
...@@ -3,12 +3,25 @@ ...@@ -3,12 +3,25 @@
<div class="home-main" ref="homeMainRef"> <div class="home-main" ref="homeMainRef">
<div class="home-top-bg"></div> <div class="home-top-bg"></div>
<div class="home-main-header"> <div class="home-main-header">
<SearchContainer style="margin-bottom: 0; margin-top: 48px; height: fit-content" v-if="homeMainRef" <SearchContainer
placeholder="搜索投融资限制" :containerRef="homeMainRef" areaName="实体清单" /> style="margin-bottom: 0; margin-top: 48px; height: fit-content"
v-if="homeMainRef"
placeholder="搜索投融资限制"
:containerRef="homeMainRef"
areaName="实体清单"
/>
<div class="home-main-header-footer-info"> <div class="home-main-header-footer-info">
<InfoCard v-for="(item, index) in infoList" :key="item.id" :title="item.nameZh" :subtitle="item.nameAbbr" <InfoCard
:description="item.description" :quantity="item.postCount" :unit="item.unit" :color="infoListColor[index]" v-for="(item, index) in infoList"
@click="handleToEntityListNoId(item)" /> :key="item.id"
:title="item.nameZh"
:subtitle="item.nameAbbr"
:description="item.description"
:quantity="item.postCount"
:unit="item.unit"
:color="infoListColor[index]"
@click="handleToEntityListNoId(item)"
/>
</div> </div>
</div> </div>
...@@ -34,8 +47,15 @@ ...@@ -34,8 +47,15 @@
<img src="./assets/images/box1-right.png" alt="" /> <img src="./assets/images/box1-right.png" alt="" />
</div> </div>
</div> </div>
<el-carousel ref="carouselRef" height="370px" :autoplay="false" :interval="3000" arrow="never" <el-carousel
indicator-position="none" @change="handleCarouselChange"> ref="carouselRef"
height="370px"
:autoplay="false"
:interval="3000"
arrow="never"
indicator-position="none"
@change="handleCarouselChange"
>
<el-carousel-item v-for="(item, index) in entitiesDataInfoList" :key="item.id + index"> <el-carousel-item v-for="(item, index) in entitiesDataInfoList" :key="item.id + index">
<div> <div>
<div class="box1-top"> <div class="box1-top">
...@@ -60,17 +80,29 @@ ...@@ -60,17 +80,29 @@
> >
<el-tag :type="getTagType(domainItem)">{{ domainItem }}</el-tag> <el-tag :type="getTagType(domainItem)">{{ domainItem }}</el-tag>
</div> --> </div> -->
<AreaTag v-for="(domainItem, index) in item.domains" :key="index" :tagName="domainItem" /> <AreaTag
v-for="(domainItem, index) in item.domains"
:key="index"
:tagName="domainItem"
/>
</div> </div>
</div> </div>
</div> </div>
<div class="box1-bottom"> <div class="box1-bottom">
<div class="box1-bottom-title">· 涉及主要实体:</div> <div class="box1-bottom-title">· 涉及主要实体:</div>
<div class="box1-bottom-content"> <div class="box1-bottom-content">
<div class="box1-bottom-content-item" v-for="(ett, index) in item.sanEntities" :key="index" <div
@click="handleEntityClick(ett)"> class="box1-bottom-content-item"
<el-image v-if="ett.img" class="box1-bottom-content-item-img" :src="ett.img" v-for="(ett, index) in item.sanEntities"
alt=""></el-image> :key="index"
@click="handleEntityClick(ett)"
>
<el-image
v-if="ett.img"
class="box1-bottom-content-item-img"
:src="ett.img"
alt=""
></el-image>
<div v-else class="box1-bottom-content-item-imgUndefined"> <div v-else class="box1-bottom-content-item-imgUndefined">
{{ {{
(ett.orgName || ett.orgNameZh)?.match( (ett.orgName || ett.orgNameZh)?.match(
...@@ -101,8 +133,14 @@ ...@@ -101,8 +133,14 @@
</custom-container> </custom-container>
</el-col> </el-col>
<el-col :span="8" style="padding-right: 0"> <el-col :span="8" style="padding-right: 0">
<RiskSignal :list="warningList" @item-click="handleToRiskSignalDetail" @more-click="handleToMoreRiskSignal" <RiskSignal
riskLevel="signalLevel" postDate="signalTime" name="signalTitle" /> :list="warningList"
@item-click="handleToRiskSignalDetail"
@more-click="handleToMoreRiskSignal"
riskLevel="signalLevel"
postDate="signalTime"
name="signalTitle"
/>
</el-col> </el-col>
</el-row> </el-row>
...@@ -125,11 +163,19 @@ ...@@ -125,11 +163,19 @@
</custom-container> </custom-container>
</el-col> --> </el-col> -->
<div class="center-center"> <div class="center-center">
<NewsList :newsList="newsList" @item-click="handleNewsInfoClick" @more-click="handleToMoreNews" <NewsList
content="newsContent" /> :newsList="newsList"
@item-click="handleNewsInfoClick"
<MessageBubble :messageList="socialMediaList" @person-click="handlePerClick" imageUrl="avatar" @more-click="handleToMoreNews"
@more-click="handleToSocialDetail" /> content="newsContent"
/>
<MessageBubble
:messageList="socialMediaList"
@person-click="handlePerClick"
imageUrl="avatar"
@more-click="handleToSocialDetail"
/>
<!-- <custom-container title="社交媒体" :titleIcon="dialogIcon" height="450px"> <!-- <custom-container title="社交媒体" :titleIcon="dialogIcon" height="450px">
<template #default> <template #default>
<div class="dialog-list"> <div class="dialog-list">
...@@ -149,20 +195,30 @@ ...@@ -149,20 +195,30 @@
<div class="box3"> <div class="box3">
<div class="box3-content"> <div class="box3-content">
<div class="box3-content-title">特别指定国民清单(SDN)发布频度</div> <div class="box3-content-title">特别指定国民清单(SDN)发布频度</div>
<el-table :data="entityListReleaseFreq" stripe style="width: 100%" @row-click="handleEntityRowClick"> <el-table
:data="entityListReleaseFreq"
stripe
style="width: 100%"
@row-click="handleEntityRowClick"
>
<el-table-column prop="year" label="年份" width="200" /> <el-table-column prop="year" label="年份" width="200" />
<el-table-column label="发布次数" width="300"> <el-table-column label="发布次数" width="300">
<template #default="scope"> <template #default="scope">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span>
<el-progress :percentage="scope.row.percent * 100" :show-text="false" <el-progress
:status="getStatus(scope.row.percent)" /> :percentage="scope.row.percent * 100"
:show-text="false"
:status="getStatus(scope.row.percent)"
/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="重点领域" width="220" align="center"> <el-table-column label="重点领域" width="220" align="center">
<template #default="scope"> <template #default="scope">
<div style="display: flex; justify-content: center; align-items: center; gap: 5px"> <div
style="display: flex; justify-content: center; align-items: center; gap: 5px"
>
<AreaTag v-for="tag in scope.row.tags" :key="tag" :tagName="tag" /> <AreaTag v-for="tag in scope.row.tags" :key="tag" :tagName="tag" />
<!-- <el-tag v-for="tag in scope.row.tags" :key="tag" :type="getTagType(tag)">{{ <!-- <el-tag v-for="tag in scope.row.tags" :key="tag" :type="getTagType(tag)">{{
tag tag
...@@ -186,20 +242,30 @@ ...@@ -186,20 +242,30 @@
</div> </div>
<div class="box3-content"> <div class="box3-content">
<div class="box3-content-title">中国军事工业复合体企业清单(CMIC)更新频度</div> <div class="box3-content-title">中国军事工业复合体企业清单(CMIC)更新频度</div>
<el-table :data="commerceControlListReleaseFreq" stripe style="width: 100%; margin-bottom: auto" @row-click="handleCommercialRowClick"> <el-table
:data="commerceControlListReleaseFreq"
stripe
style="width: 100%; margin-bottom: auto"
@row-click="handleCommercialRowClick"
>
<el-table-column prop="year" label="年份" width="200" /> <el-table-column prop="year" label="年份" width="200" />
<el-table-column label="发布次数" width="300"> <el-table-column label="发布次数" width="300">
<template #default="scope"> <template #default="scope">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span>
<el-progress :percentage="scope.row.percent * 100" :show-text="false" <el-progress
:status="getStatus(scope.row.percent)" /> :percentage="scope.row.percent * 100"
:show-text="false"
:status="getStatus(scope.row.percent)"
/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="重点领域" width="220" align="center"> <el-table-column label="重点领域" width="220" align="center">
<template #default="scope"> <template #default="scope">
<div style="display: flex; justify-content: center; align-items: center; gap: 5px"> <div
style="display: flex; justify-content: center; align-items: center; gap: 5px"
>
<el-tag v-for="tag in scope.row.tags" :key="tag" :type="getTagType(tag)">{{ <el-tag v-for="tag in scope.row.tags" :key="tag" :type="getTagType(tag)">{{
tag tag
}}</el-tag> }}</el-tag>
...@@ -228,8 +294,11 @@ ...@@ -228,8 +294,11 @@
<template #default="scope"> <template #default="scope">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span>
<el-progress :percentage="scope.row.percent * 100" :show-text="false" <el-progress
:status="getStatus(scope.row.percent)" /> :percentage="scope.row.percent * 100"
:show-text="false"
:status="getStatus(scope.row.percent)"
/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -257,8 +326,12 @@ ...@@ -257,8 +326,12 @@
<el-checkbox v-model="domainChecked" label="50%规则" size="large" /> <el-checkbox v-model="domainChecked" label="50%规则" size="large" />
</template> </template>
<template #default> <template #default>
<EChart :option="radarOption" autoresize :style="{ height: '420px' }" <EChart
@chart-click="handleRadarChartClick" /> :option="radarOption"
autoresize
:style="{ height: '420px' }"
@chart-click="handleRadarChartClick"
/>
<div class="data-origin-box"> <div class="data-origin-box">
<div class="data-origin-icon"> <div class="data-origin-icon">
<img :src="tipsIcon" alt="" /> <img :src="tipsIcon" alt="" />
...@@ -285,8 +358,12 @@ ...@@ -285,8 +358,12 @@
</div> </div>
</template> </template>
<template #default> <template #default>
<EChart :option="trendOption" autoresize :style="{ height: '420px' }" <EChart
@chart-click="handleMultiBarChartClick" /> :option="trendOption"
autoresize
:style="{ height: '420px' }"
@chart-click="handleMultiBarChartClick"
/>
<div class="data-origin-box"> <div class="data-origin-box">
<div class="data-origin-icon"> <div class="data-origin-icon">
<img :src="tipsIcon" alt="" /> <img :src="tipsIcon" alt="" />
...@@ -307,9 +384,13 @@ ...@@ -307,9 +384,13 @@
<el-row :gutter="16" style="width: 1600px; margin: 0 auto; margin-top: 39px; padding-bottom: 60px"> <el-row :gutter="16" style="width: 1600px; margin: 0 auto; margin-top: 39px; padding-bottom: 60px">
<CustomTitle id="position4" title="资源库" style="margin-top: 0px" /> <CustomTitle id="position4" title="资源库" style="margin-top: 0px" />
<div class="resource-tabs"> <div class="resource-tabs">
<div v-for="tab in resourceTabs" :key="tab.value" class="resource-tab-item" <div
v-for="tab in resourceTabs"
:key="tab.value"
class="resource-tab-item"
:class="{ active: activeResourceTab == tab.value, disabled: tab.disabled }" :class="{ active: activeResourceTab == tab.value, disabled: tab.disabled }"
@click="handleResourceTabClick(tab)"> @click="handleResourceTabClick(tab)"
>
{{ tab.label }} {{ tab.label }}
</div> </div>
</div> </div>
...@@ -322,15 +403,25 @@ ...@@ -322,15 +403,25 @@
<div class="box4-item" v-for="(item, idx) in sanctionProcessList" :key="item.title"> <div class="box4-item" v-for="(item, idx) in sanctionProcessList" :key="item.title">
<div class="box4-item-left"> <div class="box4-item-left">
<el-image :src="dotIcon" alt="图片" class="box4-item-left-icon" /> <el-image :src="dotIcon" alt="图片" class="box4-item-left-icon" />
<div class="box4-item-left-line" v-if="idx + 1 != sanctionProcessList.length"></div> <div
class="box4-item-left-line"
v-if="idx + 1 != sanctionProcessList.length"
></div>
</div> </div>
<div class="box4-item-right"> <div class="box4-item-right">
<div class="box4-item-right-header" @click="handleSanc(item)"> <div class="box4-item-right-header" @click="handleSanc(item)">
<span class="box4-item-right-header-title">{{ item.postDate }}{{ item.title }}</span> <span class="box4-item-right-header-title"
>{{ item.postDate }}{{ item.title }}</span
>
<span class="box4-item-right-header-desc">{{ item.desc }}</span> <span class="box4-item-right-header-desc">{{ item.desc }}</span>
</div> </div>
<el-tooltip effect="dark" :content="item.content" popper-class="common-prompt-popper" <el-tooltip
placement="top" :show-after="500"> effect="dark"
:content="item.content"
popper-class="common-prompt-popper"
placement="top"
:show-after="500"
>
<div class="box4-item-right-content"> <div class="box4-item-right-content">
{{ item.content }} {{ item.content }}
</div> </div>
...@@ -338,8 +429,12 @@ ...@@ -338,8 +429,12 @@
</div> </div>
</div> </div>
</div> </div>
<div class="box4-footer" :style="{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }"> <div
<el-button type="primary" link @click="handleGetMore">查看更多 class="box4-footer"
:style="{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }"
>
<el-button type="primary" link @click="handleGetMore"
>查看更多
<el-icon> <el-icon>
<DArrowRight /> <DArrowRight />
</el-icon> </el-icon>
...@@ -356,8 +451,15 @@ ...@@ -356,8 +451,15 @@
</template> </template>
<template #default> <template #default>
<div class="box5"> <div class="box5">
<el-table :data="entitiesList" class="sanction-table" stripe empty-text="暂无数据" height="700px" <el-table
header-row-class-name="table-header" row-class-name="table-row"> :data="entitiesList"
class="sanction-table"
stripe
empty-text="暂无数据"
height="700px"
header-row-class-name="table-header"
row-class-name="table-row"
>
<!-- <el-table-column prop="index" label="序号" width="80" align="center"> <!-- <el-table-column prop="index" label="序号" width="80" align="center">
<template #default="scope"> <template #default="scope">
{{ scope.$index + 1 + (currentPage - 1) * pageSize }} {{ scope.$index + 1 + (currentPage - 1) * pageSize }}
...@@ -367,8 +469,12 @@ ...@@ -367,8 +469,12 @@
<el-table-column prop="name" label="实体名称" min-width="200"> <el-table-column prop="name" label="实体名称" min-width="200">
<template #default="scope"> <template #default="scope">
<div class="tableName" @click="handleCompClick(scope.row)"> <div class="tableName" @click="handleCompClick(scope.row)">
<el-image v-if="scope.row.img" class="box1-bottom-content-item-img" :src="scope.row.img" <el-image
alt=""></el-image> v-if="scope.row.img"
class="box1-bottom-content-item-img"
:src="scope.row.img"
alt=""
></el-image>
<div v-else class="box1-bottom-content-item-imgUndefined"> <div v-else class="box1-bottom-content-item-imgUndefined">
{{ {{
(scope.row.name || scope.row.enName)?.match( (scope.row.name || scope.row.enName)?.match(
...@@ -422,13 +528,19 @@ ...@@ -422,13 +528,19 @@
<el-table-column prop="revenue" label="50%规则子企业" width="280" align="right"> <el-table-column prop="revenue" label="50%规则子企业" width="280" align="right">
<template #default="scope"> <template #default="scope">
<div class="num-item" v-if="scope.row.ruleOrgCount > 0"> <div class="num-item" v-if="scope.row.ruleOrgCount > 0">
<div class="name-item" :class="[ <div
class="name-item"
:class="[
'revenue-cell', 'revenue-cell',
scope.row.revenue === '无营收数据' ? 'no-revenue' : '' scope.row.revenue === '无营收数据' ? 'no-revenue' : ''
]"> ]"
>
{{ scope.row.ruleOrgList[0].orgName }}...等 {{ scope.row.ruleOrgList[0].orgName }}...等
</div> </div>
<div style="width: 50px; color: #409eff; cursor: pointer" @click="handleOrgClick(scope.row)"> <div
style="width: 50px; color: #409eff; cursor: pointer"
@click="handleOrgClick(scope.row)"
>
{{ scope.row.ruleOrgCount }}家> {{ scope.row.ruleOrgCount }}家>
</div> </div>
</div> </div>
...@@ -440,8 +552,15 @@ ...@@ -440,8 +552,15 @@
<!-- <div class="pagination-info"> <!-- <div class="pagination-info">
第{{ currentPage }}页,共{{ totalPages }}页 第{{ currentPage }}页,共{{ totalPages }}页
</div> --> </div> -->
<el-pagination v-model:current-page="currentPage" :page-size="pageSize" :total="total" <el-pagination
:pager-count="5" layout="prev, pager, next" background @current-change="handlePageChange" /> v-model:current-page="currentPage"
:page-size="pageSize"
:total="total"
:pager-count="5"
layout="prev, pager, next"
background
@current-change="handlePageChange"
/>
</div> </div>
</div> </div>
</template> </template>
...@@ -507,8 +626,14 @@ ...@@ -507,8 +626,14 @@
</div> </div>
<div class="right-footer"> <div class="right-footer">
<div class="total-count">{{ totalAll }}</div> <div class="total-count">{{ totalAll }}</div>
<el-pagination v-model:current-page="currentPageAll" :page-size="pageSizeAll" :total="totalAll" <el-pagination
layout="prev, pager, next" background @current-change="handlePageChangeAll" /> v-model:current-page="currentPageAll"
:page-size="pageSizeAll"
:total="totalAll"
layout="prev, pager, next"
background
@current-change="handlePageChangeAll"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -543,8 +668,12 @@ ...@@ -543,8 +668,12 @@
</div> </div>
</template> </template>
</el-dialog> --> </el-dialog> -->
<RuleSubsidiaryDialog v-model="dialogVisible" :company-name="currentRuleCompany" :total-count="currentRuleCount" <RuleSubsidiaryDialog
:data-list="currentOrgList" /> v-model="dialogVisible"
:company-name="currentRuleCompany"
:total-count="currentRuleCount"
:data-list="currentOrgList"
/>
</div> </div>
<el-dialog v-model="mediaVisible" title="社交媒体信息" width="500" :before-close="handleMediaClose"> <el-dialog v-model="mediaVisible" title="社交媒体信息" width="500" :before-close="handleMediaClose">
<div class="dialog-content"> <div class="dialog-content">
...@@ -1211,7 +1340,7 @@ const fetchSanctionList = async () => { ...@@ -1211,7 +1340,7 @@ const fetchSanctionList = async () => {
}); });
totalAll.value = res.totalElements; totalAll.value = res.totalElements;
} }
} catch (error) { } } catch (error) {}
}; };
const handlePageChangeAll = val => { const handlePageChangeAll = val => {
...@@ -1504,7 +1633,7 @@ const handleGetHylyList = async () => { ...@@ -1504,7 +1633,7 @@ const handleGetHylyList = async () => {
hylymc: "全部分类" hylymc: "全部分类"
}; };
categoryList.value = [obj, ...categoryList.value]; categoryList.value = [obj, ...categoryList.value];
} catch (error) { } } catch (error) {}
}; };
const chart1Data = ref({ const chart1Data = ref({
...@@ -1627,7 +1756,7 @@ const handleRadarChartClick = value => { ...@@ -1627,7 +1756,7 @@ const handleRadarChartClick = value => {
const params = { const params = {
isHalfRule: domainChecked.value isHalfRule: domainChecked.value
}; };
let route let route;
if (domainChecked.value) { if (domainChecked.value) {
route = router.resolve({ route = router.resolve({
path: "/dataLibrary/sDNList", path: "/dataLibrary/sDNList",
...@@ -1635,7 +1764,7 @@ const handleRadarChartClick = value => { ...@@ -1635,7 +1764,7 @@ const handleRadarChartClick = value => {
}); });
} else { } else {
route = router.resolve({ route = router.resolve({
path: "/dataLibrary/sDNList", path: "/dataLibrary/sDNList"
}); });
} }
...@@ -1658,7 +1787,7 @@ const handleMultiBarChartClick = val => { ...@@ -1658,7 +1787,7 @@ const handleMultiBarChartClick = val => {
}; };
// 跳转到数据资源库 // 跳转到数据资源库
const handleToDataLibrary = (item) => { const handleToDataLibrary = item => {
const route = router.resolve({ const route = router.resolve({
path: "/dataLibrary/sDNList", path: "/dataLibrary/sDNList",
query: { query: {
...@@ -1667,7 +1796,7 @@ const handleToDataLibrary = (item) => { ...@@ -1667,7 +1796,7 @@ const handleToDataLibrary = (item) => {
} }
}); });
window.open(route.href, "_blank"); window.open(route.href, "_blank");
} };
onMounted(async () => { onMounted(async () => {
console.log("finance 页面 mounted"); console.log("finance 页面 mounted");
...@@ -1742,7 +1871,7 @@ onMounted(async () => { ...@@ -1742,7 +1871,7 @@ onMounted(async () => {
// 获取趋势图数据 // 获取趋势图数据
fetchTrendData(); fetchTrendData();
fetchRiskSignals("0104"); fetchRiskSignals("0109");
// 获取社交媒体信息 // 获取社交媒体信息
fetchSocialMediaInfo(); fetchSocialMediaInfo();
// 获取新闻资讯 // 获取新闻资讯
...@@ -2161,7 +2290,6 @@ const handleMediaClick = item => { ...@@ -2161,7 +2290,6 @@ const handleMediaClick = item => {
} }
.box3-content { .box3-content {
// flex: 1; // flex: 1;
.el-progress--line { .el-progress--line {
width: 82px; width: 82px;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论