提交 fda5d422 authored 作者: huhuiqing's avatar huhuiqing

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

......@@ -247,6 +247,7 @@ const rightList = ref([
width: 100%;
height: 299px;
background: rgb(249, 249, 249);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.3);
display: flex;
.left {
margin-top: 35px;
......
......@@ -3,7 +3,7 @@
<!-- 公司导航栏 -->
<div class="company-nav">
<div class="company-logo-title">
<img :src="infoData.logoUrl" class="logo-img" />
<img :src="infoData.logoUrl?infoData.logoUrl:defaultCompanyIcon" class="logo-img" />
<div class="title-group">
<h1 class="company-name">{{ infoData.orgName }}</h1>
<p class="company-english">{{ infoData.orgNameEn }}</p>
......@@ -131,7 +131,7 @@
<div class="personnel-grid">
<div class="personnel-card" v-for="(person, idx) in mainPersonnel" :key="idx">
<div class="personnel-card-header">
<img :src="person.avatarUrl" class="person-avatar" />
<img :src="person.avatarUrl?person.avatarUrl:defaultUserIcon" class="person-avatar" />
<div class="person-info">
<h4 class="person-name">{{ person.name }}</h4>
<p class="person-position">{{ person.position }}</p>
......@@ -193,6 +193,9 @@ import TabIcon2Active from "./images/tab-icon2-active.png";
import TabIcon3Active from "./images/tab-icon3-active.png";
import TabIcon4Active from "./images/tab-icon4-active.png";
import defaultUserIcon from "@/assets/icons/default-icon1.png"
import defaultCompanyIcon from "@/assets/icons/default-icon2.png"
const router = useRouter();
const tabList = ref([
{
......
......@@ -1144,7 +1144,6 @@ const handleToPosi = id => {
// 0 618 1240 2350
switch (id) {
case "position2":
// containerRef.value.scrollTop = isShow.value ? 744 : 1090;
containerRef.value.scrollTop = isShow.value ? 844 : 1190;
break;
case "position3":
......@@ -1334,6 +1333,7 @@ onMounted(async () => {
height: 144px;
background: #fff;
overflow: hidden;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.3);
.home-main-header-center {
margin-top: 20px;
margin-left: 200px;
......
......@@ -408,7 +408,7 @@
</el-col>
</el-row>
<el-row :gutter="20" style="width: 1600px; margin: 0 auto; margin-top: 39px">
<el-row :gutter="20" style="width: 1600px; margin: 0 auto; margin-top: 39px;">
<CustomTitle id="position4" title="资源库" style="margin-top: 0px" />
<div class="resource-tabs">
<div
......@@ -1064,8 +1064,8 @@ const handleEntityClick = item => {
const route = router.resolve({
name: "companyPages",
params: {
startTime: item.startTime,
id: item.id
// startTime: item.startTime,
id: item.entityId
}
});
window.open(route.href, "_blank");
......@@ -2868,9 +2868,8 @@ const handleMediaClick = item => {
.home-main-footer {
// width: 100%;
height: 911px;
// height: 911px;
background: rgba(248, 249, 250, 1);
.home-main-footer-header {
margin-top: 37px;
margin-bottom: 36px;
......@@ -3156,7 +3155,7 @@ const handleMediaClick = item => {
.all-content {
width: 100%;
height: auto;
padding-bottom: 100px;
padding-bottom: 30px;
display: flex;
justify-content: space-between;
// align-items: center;
......
......@@ -37,7 +37,7 @@
<template #default="{ row }">
<div class="entity-name-cell">
<el-avatar class="avatar" :size="24" :src="row.avatar || defaultIcon" />
<div class="name" :title="row.name">{{ row.name }}</div>
<div class="name" @click="handleCompClick(row)" :title="row.name">{{ row.name }}</div>
</div>
</template>
</el-table-column>
......@@ -79,8 +79,9 @@
<script setup>
import { ref, defineProps, defineEmits, computed, watch } from "vue";
import router from "@/router";
import { Close } from "@element-plus/icons-vue";
import defaultIcon from "../../../../../assets/icons/default-avatar.png";
import defaultIcon from "@/assets/icons/default-icon1.png";
const props = defineProps({
modelValue: {
......@@ -149,6 +150,20 @@ const getTagStyle = tag => {
const index = Math.abs(hash) % colorPool.length;
return colorPool[index];
};
// 跳转公司详情页
const handleCompClick = item => {
console.log("item", item);
window.sessionStorage.setItem('curTabName', item.entityNameZh || item.entityName)
const route = router.resolve({
name: "companyPages",
params: {
id: item.id
}
});
window.open(route.href, "_blank");
};
</script>
<style lang="scss" scoped>
......@@ -271,6 +286,7 @@ const getTagStyle = tag => {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
cursor: pointer;
}
}
......
......@@ -127,7 +127,7 @@ const handleCompClick = item => {
const route = router.resolve({
name: "companyPages",
params: {
id: item.id
id: item.entityId
}
});
window.open(route.href, "_blank");
......
......@@ -475,7 +475,7 @@ const initDomainChart = () => {
{
name: "制裁实体领域分布",
type: "pie",
radius: [73.5, 89.5],
radius: [65, 81],
center: ["50%", "50%"],
startAngle: 90,
data: data,
......@@ -485,24 +485,24 @@ const initDomainChart = () => {
minMargin: 5,
edgeDistance: 10,
formatter: params => {
return "{name|" + params.name + "}\n{value|" + params.value + "家 " + params.percent + "%}";
return "{name|" + params.name + "} \n {value|" + params.value + "家 " + params.percent + "%}";
},
rich: {
name: {
fontSize: 18,
fontWeight: 700,
color: "rgb(59, 65, 75)",
padding: [0, 0, 5, 0],
padding: [10, 0, 10, 0],
fontFamily: "Microsoft YaHei",
lineHeight: 26
lineHeight: 22
},
value: {
fontSize: 16,
fontWeight: 400,
color: "rgb(95, 101, 108)",
fontFamily: "Microsoft YaHei",
lineHeight: 24,
padding: [5, 0, 0, 0]
lineHeight: 22,
padding: [10, 0, 10, 0]
}
}
},
......
const getTreeChart = (treeData) => {
const option = {
series: [{
type: 'tree',
layout: 'orthogonal', // 从上到下布局
orient: 'TB', // Top to Bottom
data: treeData,
top: '10%',
bottom: '5%',
left: '10%',
right: '10%',
symbol: 'circle',
symbolSize: 40,
label: {
position: 'bottom',
verticalAlign: 'middle',
align: 'center'
},
leaves: {
label: {
position: 'top',
verticalAlign: 'middle',
align: 'center'
}
},
lineStyle: {
color: '#ccc',
width: 2,
type: 'dashed' // 虚线
},
emphasis: {
focus: 'descendant'
},
expandAndCollapse: true,
initialTreeDepth: 3
}]
};
return option
}
export default getTreeChart
\ No newline at end of file
......@@ -93,7 +93,7 @@
</div>
</div>
</div>
<div class="right">
<div class="right" v-loading="isLoading">
<div class="title-com">
<div class="box"></div>
<div class="text">制裁清单</div>
......@@ -239,8 +239,11 @@ const addRuleCount = ref(0)
const removeCount = ref(0)
const removeRuleCount = ref(0)
const isLoading = ref(false)
// 调用单次制裁-制裁概况-制裁清单接口
const getSanctionOverviewList = async () => {
isLoading.value = true
try {
const res = await getSingleSanctionOverviewList({
sanRecordId: sanRecordId.value,
......@@ -249,6 +252,7 @@ const getSanctionOverviewList = async () => {
searchText: searchKeyword.value || undefined,
searchType: searchType.value
})
isLoading.value = false
if (res.code === 200) {
const data = res.data || {}
addCount.value = data.addCount || 0
......
<template>
<div class="home-wrapper">
<div class="home-main">
<div class="search-header" v-show="isShow">
<div class="home-main-header-center">
<el-input
v-model="searchThinktankText"
@keyup.enter="handleSearch"
style="width: 680px; height: 100%"
placeholder="搜索智库报告"
/>
<div class="search">
<div class="search-icon">
<img src="./assets/images/search-icon.png" alt="" />
</div>
<div class="search-text" @click="handleSearch">搜索</div>
</div>
</div>
<div class="home-main-header-btn-box">
<div class="btn" @click="handleToPosi('position1')">
<div class="btn-text">{{ "最新动态" }}</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="handleToPosi('position2')">
<div class="btn-text">{{ "资讯要闻" }}</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="handleToPosi('position3')">
<div class="btn-text">{{ "数据总览" }}</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="handleToPosi('position4')">
<div class="btn-text">{{ "资源库" }}</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
</div>
</div>
<div class="home-main" :class="{ scrollHomeMain: isShow }" ref="containerRef">
<div class="home-main-header">
<div class="home-main-header-top">
<div class="home-main-header-top" v-show="!isShow">
<div class="header-left">
<HeaderMenu></HeaderMenu>
</div>
......@@ -10,8 +52,13 @@
<headerInfo curTitleName="科技智库"></headerInfo>
</div>
</div>
<div class="home-main-header-center">
<el-input v-model="searchThinktankText" @keyup.enter="handleSearch" style="width: 838px; height: 100%" placeholder="搜索智库报告" />
<div class="home-main-header-center" v-show="!isShow">
<el-input
v-model="searchThinktankText"
@keyup.enter="handleSearch"
style="width: 838px; height: 100%"
placeholder="搜索智库报告"
/>
<div class="search">
<div class="search-icon">
<img src="./assets/images/search-icon.png" alt="" />
......@@ -37,26 +84,26 @@
<div class="item-footer">热点科技领域</div>
</div>
</div> -->
<div class="home-main-header-btn-box">
<div class="btn" @click="scrollToTop('position1')">
<div class="home-main-header-btn-box" v-show="!isShow">
<div class="btn" @click="handleToPosi('position1')">
<div class="btn-text">{{ "最新动态" }}</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="scrollToTop('position2')">
<div class="btn" @click="handleToPosi('position2')">
<div class="btn-text">{{ "资讯要闻" }}</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="scrollToTop('position3')">
<div class="btn" @click="handleToPosi('position3')">
<div class="btn-text">{{ "数据总览" }}</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div>
<div class="btn" @click="scrollToTop('position4')">
<div class="btn" @click="handleToPosi('position4')">
<div class="btn-text">{{ "资源库" }}</div>
<div class="btn-icon">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
......@@ -278,7 +325,6 @@
<MessageBubble
v-for="(item, index) in messageList"
@click="handleClickPerson(item)"
:key="index"
:avatar="item.personImage ? item.personImage : defaultHeaderIcin"
:name="item.personName"
......@@ -607,6 +653,29 @@ import Box1Logo from "./assets/images/box1-logo.png";
import { setCanvasCreator } from "echarts/core";
import { ElMessage } from "element-plus";
import { useContainerScroll } from "@/hooks/useScrollShow";
const containerRef = ref(null);
const { isShow } = useContainerScroll(containerRef);
const handleToPosi = id => {
// 0 618 1240 2350
switch (id) {
case "position2":
// containerRef.value.scrollTop = isShow.value ? 744 : 1090;
containerRef.value.scrollTop = isShow.value ? 900 : 1150;
break;
case "position3":
containerRef.value.scrollTop = isShow.value ? 1480 : 1730;
break;
case "position4":
containerRef.value.scrollTop = isShow.value ? 2545 : 2795;
break;
default:
containerRef.value.scrollTop = 0;
}
};
const searchThinktankText = ref(""); //搜索科技人物及观点
// 智库列表
const cardList = ref([
......@@ -886,8 +955,8 @@ const handleGetThinkTankReportRemarks = async () => {
if (res.code === 200 && res.data) {
messageList.value = res.data;
messageList.value.forEach(item => {
item.time = item.time.replace('T', ' ')
})
item.time = item.time.replace("T", " ");
});
}
} catch (error) {
console.error("获取智库人物动态error", error);
......@@ -1536,7 +1605,7 @@ const handleGetetThinkTankReport = async () => {
const handleClick = tank => {
console.log(tank);
window.sessionStorage.setItem("curTabName", tank.name+'概览');
window.sessionStorage.setItem("curTabName", tank.name + "概览");
// router.push({ name: "ThinkTankDetail", params: { id: tank.id } });
if (!tank.id) {
ElMessage.warning("当前智库id为空,无法进入详情页");
......@@ -1684,7 +1753,102 @@ onMounted(async () => {
height: 100%;
position: relative;
overflow-y: hidden;
.search-header {
width: 100%;
height: 144px;
background: #fff;
overflow: hidden;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.3);
.home-main-header-center {
margin-top: 20px;
margin-left: 200px;
width: 800px;
height: 48px;
border-radius: 10px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
background: rgba(255, 255, 255, 1);
box-sizing: border-box;
padding: 1px;
position: relative;
border: 1px solid transparent;
&:hover {
border: 1px solid var(--color-main-active);
}
.search {
position: absolute;
right: -1px;
top: 0px;
width: 120px;
height: 46px;
border-radius: 10px;
background: var(--color-main-active);
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
.search-icon {
width: 18px;
height: 18px;
img {
width: 100%;
height: 100%;
}
}
.search-text {
margin-left: 8px;
height: 22px;
color: #fff;
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 22px;
}
}
}
.home-main-header-btn-box {
margin-top: 20px;
margin-left: 200px;
display: flex;
gap: 16px;
.btn {
display: flex;
align-items: center;
gap: 9px;
width: 160px;
height: 48px;
border: 1px solid #aed6ff;
box-sizing: border-box;
border-radius: 24px;
background: #e7f3ff;
cursor: pointer;
position: relative;
&:hover {
background: #cae3fc;
}
.btn-text {
width: 80px;
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 400;
line-height: 48px;
margin-left: 36px;
text-align: center;
}
.btn-icon {
position: absolute;
top: 16px;
right: 19px;
width: 6px;
height: 12px;
img {
width: 100%;
height: 100%;
}
}
}
}
}
.home-main {
width: 100%;
height: 100%;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论