提交 0ff5ffb8 authored 作者: coderBryanFu's avatar coderBryanFu

feat:update

上级 3e25cd1c
...@@ -62,7 +62,7 @@ import { ref, nextTick, watchEffect } from "vue"; ...@@ -62,7 +62,7 @@ import { ref, nextTick, watchEffect } from "vue";
import { useContainerScroll } from "@/hooks/useScrollShow"; import { useContainerScroll } from "@/hooks/useScrollShow";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { useWrittingAsstaintStore } from "@/stores/writtingAsstaintStore"; import { useWrittingAsstaintStore } from "@/stores/writtingAsstaintStore";
import { goToSearch } from "@/utils/goToPage"; import goToPage from "@/utils/goToPage";
const store = useWrittingAsstaintStore(); const store = useWrittingAsstaintStore();
const router = useRouter(); const router = useRouter();
...@@ -129,9 +129,9 @@ const handleSearch = () => { ...@@ -129,9 +129,9 @@ const handleSearch = () => {
// window.open(curRoute.href, "_blank"); // window.open(curRoute.href, "_blank");
if (enableBillTypeSwitch) { if (enableBillTypeSwitch) {
goToSearch(store.searchBillText, areaName, billSearchType.value) goToPage.goToSearch(store.searchBillText, areaName, billSearchType.value)
} else { } else {
goToSearch(store.searchBillText, areaName) goToPage.goToSearch(store.searchBillText, areaName)
} }
}; };
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
import { onMounted, ref, computed, onUnmounted, nextTick, watch, watchEffect } from "vue"; import { onMounted, ref, computed, onUnmounted, nextTick, watch, watchEffect } from "vue";
import router from "@/router/index"; import router from "@/router/index";
import { useWrittingAsstaintStore } from "@/stores/writtingAsstaintStore"; import { useWrittingAsstaintStore } from "@/stores/writtingAsstaintStore";
import { goToSearch } from "@/utils/goToPage"; import goToPage from "@/utils/goToPage";
const store = useWrittingAsstaintStore(); const store = useWrittingAsstaintStore();
const handleSearch = () => { const handleSearch = () => {
...@@ -63,7 +63,7 @@ const handleSearch = () => { ...@@ -63,7 +63,7 @@ const handleSearch = () => {
// } // }
// }); // });
// window.open(curRoute.href, "_blank"); // window.open(curRoute.href, "_blank");
goToSearch(store.searchBillText, store.searchData.areaName) goToPage.goToSearch(store.searchBillText, store.searchData.areaName)
}; };
let containerRef = computed(() => store.searchData.containerRef); let containerRef = computed(() => store.searchData.containerRef);
......
import { getPersonSummaryInfo } from "@/api/common/index";
import router from "@/router/index";
// 跳转法案详情
export const goToBill = (id, tabName) => {
window.sessionStorage.setItem("billId", id);
window.sessionStorage.setItem("curTabName", tabName);
const param = {
billId: id
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/billLayout",
query: {
data: base64
}
});
window.open(route.href, "_blank");
};
// 跳转政令详情
export const goToDecree = (id, tabName) => {
window.sessionStorage.setItem("decreeId", id);
window.sessionStorage.setItem("curTabName", tabName);
const param = {
id: id
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/decreeLayout",
query: {
data: base64
}
});
window.open(route.href, "_blank");
};
// 跳转智库详情
export const goToThinkTank = (id, tabName) => {
window.sessionStorage.setItem("curTabName", tabName);
const base64 = btoa(encodeURIComponent(id));
const curRoute = router.resolve({
name: "ThinkTankDetail",
params: {
id: base64
}
});
window.open(curRoute.href, "_blank");
}
// 跳转智库报告详情
export const goToThinkTankReport = (id, tabName) => {
window.sessionStorage.setItem("curTabName", tabName);
const route = router.resolve({
name: "ReportDetail",
params: {
id: id
}
});
window.open(route.href, "_blank");
}
// 跳转实体清单
export const goToEntityList = () => {
const param = {
sanTypeId: 1
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: '/exportControl/entityList',
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转实体清单事件
export const goToSingleEntityEvent = (id, tabName, date) => {
window.sessionStorage.setItem("curTabName", tabName);
const param = {
id: id,
sanTypeId: 1,
date: date
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/exportControl/singleSanction",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转商业管制清单
export const goToCCLList = () => {
const param = {
sanTypeId: 13,
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/exportControl/commercialControlList",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转SDN清单
export const goToSDNList = () => {
const param = {
sanTypeId: 2,
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/finance/sdnlistoverview",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转SDN清单事件
export const goToSingleSDNEvent = (id, tabName, date) => {
window.sessionStorage.setItem("curTabName", tabName);
const param = {
id: id,
sanTypeId: 2,
date: date
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/finance/singleSanction",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转232调查概览页
export const goToCase232 = () => {
window.sessionStorage.setItem("curTabName", '232调查');
const param = {
id: 232,
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/marketAccessLayout/case",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转232调查详情页
export const goToCaseDetail232 = (searchId, tabName) => {
window.sessionStorage.setItem("curTabName", tabName);
const param = {
id: 232,
searchId: searchId
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/marketSingleCaseLayout/overview",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转301调查概览页
export const goToCase301 = () => {
window.sessionStorage.setItem("curTabName", '301调查');
const param = {
id: 301,
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/marketAccessLayout/case",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转301调查详情页
export const goToCaseDetail301 = (searchId, tabName) => {
window.sessionStorage.setItem("curTabName", tabName);
const param = {
id: 301,
searchId: searchId
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/marketSingleCaseLayout/overview",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转337调查概览页
export const goToCase337 = () => {
window.sessionStorage.setItem("curTabName", '337调查');
const param = {
id: 337,
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/marketAccessLayout/case",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转337调查详情页
export const goToCaseDetail337 = (searchId, tabName) => {
window.sessionStorage.setItem("curTabName", tabName);
const param = {
id: 337,
searchId: searchId
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/marketSingleCaseLayout/overview",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转机构详情
export const goToInstitution = (id, tabName) => {
window.sessionStorage.setItem('curTabName', tabName)
const param = {
id: id
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const curRoute = router.resolve({
path: "/institution",
query: {
data: base64
}
});
window.open(curRoute.href, "_blank");
}
// 跳转人物详情
export const goToCharacterPage = async (id, tabName) => {
window.sessionStorage.setItem('curTabName', tabName)
const personTypeList = JSON.parse(window.sessionStorage.getItem("personTypeList"));
let type
let personTypeName
const params = {
personId: id
}
const param1 = {
personId: item.id
}
const jsonStr1 = JSON.stringify(param1);
const base64_1 = btoa(encodeURIComponent(jsonStr1));
const param2 = {
personId: item.id
}
const jsonStr2 = JSON.stringify(param2);
const base64_2 = btoa(encodeURIComponent(jsonStr2));
// 先获取人物全局信息
try {
const res = await getPersonSummaryInfo(params)
if (res.code === 200 && res.data) {
const arr = personTypeList.filter(item => {
return item.typeId === res.data.personType;
})
if (arr && arr.length) {
personTypeName = arr[0].typeName;
if (personTypeName === "科技企业领袖") {
type = 1;
} else if (personTypeName === "国会议员") {
type = 2;
} else if (personTypeName === "智库研究人员") {
type = 3;
} else {
personTypeName = "其他类型";
const route = router.resolve({
path: "/characterPage",
query: {
data: base64_1
}
});
window.open(route.href, "_blank");
return;
}
const route = router.resolve({
path: "/characterPage",
query: {
data: base64_2
}
});
window.open(route.href, "_blank");
} else {
personTypeName = "";
const route = router.resolve({
path: "/characterPage",
query: {
data: base64_1
}
});
window.open(route.href, "_blank");
return;
}
} else {
const route = router.resolve({
path: "/characterPage",
query: {
data: base64_1
}
});
window.open(route.href, "_blank");
return;
}
} catch (error) {
const route = router.resolve({
path: "/characterPage",
query: {
data: base64_1
}
});
window.open(route.href, "_blank");
return;
}
}
// 跳转企业
export const goToCompanyPage = (id, tabName) => {
window.sessionStorage.setItem('curTabName', tabName)
const param = {
id: id
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
name: "companyPages",
params: base64
});
window.open(route.href, "_blank");
}
// 跳转新闻详情
export const goToNewsPage = (id, tabName) => {
window.sessionStorage.setItem("curTabName", tabName);
const param = {
newsId: id
}
const jsonStr = JSON.stringify(param);
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/newsAnalysis",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转搜索详情页
export const goToSearch = (tabName, areaName, billSearchType) => {
window.sessionStorage.setItem("curTabName", `搜索-${tabName}`);
let selectParam
if (billSearchType) {
selectParam = {
searchText: tabName,
areaName: areaName,
billSearchType: billSearchType
}
} else {
selectParam = {
searchText: tabName,
areaName: areaName,
}
}
// const codeParam = new URLSearchParams(selectParam)
const jsonStr = JSON.stringify(selectParam);
const base64 = btoa(encodeURIComponent(jsonStr));
const curRoute = router.resolve({
path: "/searchResults",
query: {
data: base64
}
});
window.open(curRoute.href, "_blank");
// const codeParam = new URLSearchParams(selectParam)
}
// 跳转数据资源库-国家法案
export const goToDataCountryBill = (selectParam) => {
// const codeParam = new URLSearchParams(selectParam)
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/countryBill",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-政令
export const goToDataDecree = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/dataDecree",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-智库
export const goToDataThinkTank = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/dataThinkTank",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-出口管制-实体清单
export const goToDataEntityList = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/dataEntityList",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-出口管制-商业管制清单
export const goToDataCCLList = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/dataCommerceControlList",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-出口管制-实体清单事件
export const goToDataSingleEntityEvent = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/dataEntityListEvent",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-出口管制-商业管制清单事件
export const goToDataSingleCCLEvent = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/dataCommerceControlListEvent",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-投融资限制-SDN清单
export const goToDataSDNList = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/sDNList",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-投融资限制-涉军企业清单
export const goToDataMREList = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/mREList",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-投融资限制-SDN清单事件
export const goToDataSingleSDNEvent = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/sDNListEvent",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-投融资限制-涉军企业清单事件
export const goToDataSingleMREEvent = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/mREListEvent",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-科技人物
export const goToDataTechnologyFigures = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/dataTechnologyFigures",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-重要实体-科技企业
export const goToDataCompany = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/dataCompany",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-重要实体-机构
export const goToDataInstitution = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/dataInstitution",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 跳转数据资源库-新闻
export const goToDataNews = (selectParam) => {
// JSON -> Base64
const jsonStr = JSON.stringify(selectParam);
// 处理中文:先 encodeURIComponent
const base64 = btoa(encodeURIComponent(jsonStr));
const route = router.resolve({
path: "/dataLibrary/dataNews",
query: {
data: base64
}
});
window.open(route.href, "_blank");
}
// 解码-------------------------------------------!!!!!
export const getDecodedParams = () => {
if (window.location.search) {
const urlParams = new URLSearchParams(window.location.search)
const encoded = urlParams.get('data')
if (!encoded) return null;
try {
// Base64 解码
const decoded = atob(encoded);
const jsonStr = decodeURIComponent(decoded);
return JSON.parse(jsonStr);
} catch (e) {
console.error('解码失败', e);
return null;
}
} else {
const obj = router.currentRoute.value.params
const encoded = Object.values(obj)[0]
if (!encoded) return null;
try {
// Base64 解码
const decoded = atob(encoded);
const jsonStr = decodeURIComponent(decoded);
return jsonStr;
} catch (e) {
console.error('解码失败', e);
return null;
}
}
}
// 解码 // 解码
import router from "@/router";
export const getDecodedParams = () => { export const getDecodedParams = () => {
if (window.location.search) { if (window.location.search) {
const urlParams = new URLSearchParams(window.location.search) const urlParams = new URLSearchParams(window.location.search)
......
...@@ -283,7 +283,7 @@ import cyyIcon from "@/assets/icons/cyy.png"; ...@@ -283,7 +283,7 @@ import cyyIcon from "@/assets/icons/cyy.png";
import ghdIcon from "@/assets/icons/ghd.png"; import ghdIcon from "@/assets/icons/ghd.png";
import mzdIcon from "@/assets/icons/mzd.png"; import mzdIcon from "@/assets/icons/mzd.png";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { goToDataCountryBill } from "@/utils/goToPage"; import { goToDataCountryBill } from "@/utils/goToPage1";
const router = useRouter(); const router = useRouter();
......
...@@ -322,7 +322,7 @@ import iconILetter from "./assets/icons/icon-iLetter.png"; ...@@ -322,7 +322,7 @@ import iconILetter from "./assets/icons/icon-iLetter.png";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { useGotoNewsDetail } from "@/router/modules/news"; import { useGotoNewsDetail } from "@/router/modules/news";
import { goToBill } from "@/utils/goToPage"; import { goToBill } from "@/utils/goToPage1";
// 跳转人物主页(MessageBubble 的 person-click 传入整条列表项,需取 personId) // 跳转人物主页(MessageBubble 的 person-click 传入整条列表项,需取 personId)
const handleClickToCharacter = async item => { const handleClickToCharacter = async item => {
......
...@@ -132,8 +132,7 @@ import { getPersonSummaryInfo } from "@/api/common/index"; ...@@ -132,8 +132,7 @@ import { getPersonSummaryInfo } from "@/api/common/index";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import TimeSortSelectBox from '@/components/base/TimeSortSelectBox/index.vue' import TimeSortSelectBox from '@/components/base/TimeSortSelectBox/index.vue'
import AreaTag from '@/components/base/AreaTag/index.vue' import AreaTag from '@/components/base/AreaTag/index.vue'
import { getDecodedParams } from "@/utils/goToPage"; import goToPage from "@/utils/goToPage";
const route = useRoute(); const route = useRoute();
const container = ref(null) const container = ref(null)
const isLoading = ref(false) const isLoading = ref(false)
...@@ -598,7 +597,7 @@ const handleToPage = async item => { ...@@ -598,7 +597,7 @@ const handleToPage = async item => {
}; };
onMounted(() => { onMounted(() => {
const routeQuery = getDecodedParams() const routeQuery = goToPage.getDecodedParams()
console.log('routeQuery',routeQuery); console.log('routeQuery',routeQuery);
......
...@@ -173,7 +173,6 @@ import { getPostOrgList, getPostMemberList } from '@/api/bill/billHome' ...@@ -173,7 +173,6 @@ import { getPostOrgList, getPostMemberList } from '@/api/bill/billHome'
import { search, getStatusList } from '@/api/comprehensiveSearch' import { search, getStatusList } from '@/api/comprehensiveSearch'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import getDateRange from '@/utils/getDateRange' import getDateRange from '@/utils/getDateRange'
import { getDecodedParams } from '@/utils/goToPage'
import goToPage from '@/utils/goToPage/index' import goToPage from '@/utils/goToPage/index'
const route = useRoute(); const route = useRoute();
......
...@@ -186,7 +186,7 @@ import { ElMessage } from 'element-plus' ...@@ -186,7 +186,7 @@ import { ElMessage } from 'element-plus'
import getDateRange from '@/utils/getDateRange' import getDateRange from '@/utils/getDateRange'
import { getDepartmentList } from "@/api/decree/home"; import { getDepartmentList } from "@/api/decree/home";
import { getDecodedParams } from '@/utils/goToPage'
import goToPage from '@/utils/goToPage/index' import goToPage from '@/utils/goToPage/index'
const route = useRoute(); const route = useRoute();
...@@ -977,7 +977,7 @@ const handleDownloadCurChartData = () => { ...@@ -977,7 +977,7 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件 // 跳转到当前页 初始化筛选条件
const initParam = () => { const initParam = () => {
const routeQuery = goToPage.getDecodedParams() const routeQuery = goToPage.getDecodedParams()
const hasQuery = Object.keys(routeQuery).length > 0; const hasQuery = Object.keys(routeQuery).length > 0;
if (hasQuery) { if (hasQuery) {
if (routeQuery.selectedAreaList) { if (routeQuery.selectedAreaList) {
......
...@@ -9,8 +9,9 @@ ...@@ -9,8 +9,9 @@
@update:custom-time="handleCustomDate" /> @update:custom-time="handleCustomDate" />
<SelectBox v-if="isFolderAll" :placeholder-name="typePlaceHolder" select-title="物项类别" :select-list="typeList" <SelectBox v-if="isFolderAll" :placeholder-name="typePlaceHolder" select-title="物项类别" :select-list="typeList"
:select-name="selectedType" @update:select-text="handleSelectType" /> :select-name="selectedType" @update:select-text="handleSelectType" />
<SelectBox v-if="isFolderAll" :placeholder-name="updateFlagPlaceHolder" select-title="变动标识" :select-list="updateFlagList" <SelectBox v-if="isFolderAll" :placeholder-name="updateFlagPlaceHolder" select-title="变动标识"
:select-name="selectedUpdateFlag" @update:select-text="handleSelectUpdateFlag" /> :select-list="updateFlagList" :select-name="selectedUpdateFlag"
@update:select-text="handleSelectUpdateFlag" />
<SelectBox v-if="isFolderAll" :placeholder-name="controlReasonPlaceHolder" select-title="管控原因" <SelectBox v-if="isFolderAll" :placeholder-name="controlReasonPlaceHolder" select-title="管控原因"
:select-list="controlReasonList" :select-name="selectedControlReason" :select-list="controlReasonList" :select-name="selectedControlReason"
@update:select-text="handleSelectControlReason" /> @update:select-text="handleSelectControlReason" />
...@@ -163,7 +164,7 @@ import { search } from '@/api/comprehensiveSearch' ...@@ -163,7 +164,7 @@ import { search } from '@/api/comprehensiveSearch'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import getDateRange from '@/utils/getDateRange' import getDateRange from '@/utils/getDateRange'
import { getMaterialCategory, getControlReason } from '@/api/comprehensiveSearch/index' import { getMaterialCategory, getControlReason } from '@/api/comprehensiveSearch/index'
import goToPage from '@/utils/goToPage/index'
const route = useRoute(); const route = useRoute();
// 图表/数据 // 图表/数据
...@@ -338,7 +339,7 @@ const activeTagList = computed(() => { ...@@ -338,7 +339,7 @@ const activeTagList = computed(() => {
} }
) )
} }
if (selectedUpdateFlag.value && selectedUpdateFlag.value !== '全部标识') { if (selectedUpdateFlag.value && selectedUpdateFlag.value !== '全部标识') {
arr.push( arr.push(
{ {
tag: '变动标识', tag: '变动标识',
...@@ -920,24 +921,25 @@ const handleDownloadCurChartData = () => { ...@@ -920,24 +921,25 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件 // 跳转到当前页 初始化筛选条件
const initParam = () => { const initParam = () => {
const hasQuery = Object.keys(route.query).length > 0; const routeQuery = goToPage.getDecodedParams()
const hasQuery = Object.keys(routeQuery).length > 0;
if (hasQuery) { if (hasQuery) {
if (route.query.selectedAreaList) { if (routeQuery.selectedAreaList) {
selectedArea.value = JSON.parse(route.query.selectedAreaList) selectedArea.value = JSON.parse(routeQuery.selectedAreaList)
} else { } else {
selectedArea.value = route.query.domains ? [route.query.domains] : ['全部领域'] selectedArea.value = routeQuery.domains ? [routeQuery.domains] : ['全部领域']
} }
if (route.query.selectedDate && Array.isArray(JSON.parse(route.query.selectedDate)) && JSON.parse(route.query.selectedDate).length) { if (routeQuery.selectedDate && Array.isArray(JSON.parse(routeQuery.selectedDate)) && JSON.parse(routeQuery.selectedDate).length) {
selectedDate.value = '自定义' selectedDate.value = '自定义'
customTime.value = JSON.parse(route.query.selectedDate) customTime.value = JSON.parse(routeQuery.selectedDate)
} }
selectedType.value = route.query.orgnizationName ? route.query.orgnizationName : '全部类别' selectedType.value = routeQuery.orgnizationName ? routeQuery.orgnizationName : '全部类别'
selectedUpdateFlag.value = route.query.updateFlag ? route.query.updateFlag : '全部标识' selectedUpdateFlag.value = routeQuery.updateFlag ? routeQuery.updateFlag : '全部标识'
const query = route.query; const query = routeQuery;
if (Object.keys(query).length > 0) { if (Object.keys(query).length > 0) {
sessionStorage.setItem('commerceRouteQuery', JSON.stringify(query)); sessionStorage.setItem('commerceRouteQuery', JSON.stringify(query));
} }
......
...@@ -151,7 +151,7 @@ import router from '@/router' ...@@ -151,7 +151,7 @@ import router from '@/router'
import { search } from '@/api/comprehensiveSearch' import { search } from '@/api/comprehensiveSearch'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import getDateRange from '@/utils/getDateRange' import getDateRange from '@/utils/getDateRange'
import goToPage from '@/utils/goToPage/index'
const route = useRoute(); const route = useRoute();
// 图表/数据 // 图表/数据
...@@ -804,23 +804,24 @@ const handleDownloadCurChartData = () => { ...@@ -804,23 +804,24 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件 // 跳转到当前页 初始化筛选条件
const initParam = () => { const initParam = () => {
const hasQuery = Object.keys(route.query).length > 0; const routeQuery = goToPage.getDecodedParams()
const hasQuery = Object.keys(routeQuery).length > 0;
if (hasQuery) { if (hasQuery) {
if (route.query.selectedAreaList) { if (routeQuery.selectedAreaList) {
selectedArea.value = JSON.parse(route.query.selectedAreaList) selectedArea.value = JSON.parse(routeQuery.selectedAreaList)
} else { } else {
selectedArea.value = route.query.domains ? [route.query.domains] : ['全部领域'] selectedArea.value = routeQuery.domains ? [routeQuery.domains] : ['全部领域']
} }
if (route.query.selectedDate && Array.isArray(JSON.parse(route.query.selectedDate)) && JSON.parse(route.query.selectedDate).length) { if (routeQuery.selectedDate && Array.isArray(JSON.parse(routeQuery.selectedDate)) && JSON.parse(routeQuery.selectedDate).length) {
selectedDate.value = '自定义' selectedDate.value = '自定义'
customTime.value = JSON.parse(route.query.selectedDate) customTime.value = JSON.parse(routeQuery.selectedDate)
} }
isInvolveCnOnly.value = route.query.isInvolveCnOnly ? true : false isInvolveCnOnly.value = routeQuery.isInvolveCnOnly ? true : false
const query = route.query; const query = routeQuery;
if (Object.keys(query).length > 0) { if (Object.keys(query).length > 0) {
sessionStorage.setItem('commerceEventRouteQuery', JSON.stringify(query)); sessionStorage.setItem('commerceEventRouteQuery', JSON.stringify(query));
} }
......
...@@ -188,7 +188,7 @@ import { search } from '@/api/comprehensiveSearch' ...@@ -188,7 +188,7 @@ import { search } from '@/api/comprehensiveSearch'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import getDateRange from '@/utils/getDateRange' import getDateRange from '@/utils/getDateRange'
import { getProvinceList, getCountryList, getEntityTypes } from '@/api/comprehensiveSearch/index' import { getProvinceList, getCountryList, getEntityTypes } from '@/api/comprehensiveSearch/index'
import goToPage from '@/utils/goToPage/index'
const route = useRoute(); const route = useRoute();
const isShowProvinceBox = computed(() => { const isShowProvinceBox = computed(() => {
...@@ -1063,34 +1063,35 @@ const handleDownloadCurChartData = () => { ...@@ -1063,34 +1063,35 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件 // 跳转到当前页 初始化筛选条件
const initParam = () => { const initParam = () => {
const hasQuery = Object.keys(route.query).length > 0; const routeQuery = goToPage.getDecodedParams()
const hasQuery = Object.keys(routeQuery).length > 0;
if (hasQuery) { if (hasQuery) {
if (route.query.selectedAreaList) { if (routeQuery.selectedAreaList) {
selectedArea.value = JSON.parse(route.query.selectedAreaList) selectedArea.value = JSON.parse(routeQuery.selectedAreaList)
} else { } else {
selectedArea.value = route.query.domains ? [route.query.domains] : ['全部领域'] selectedArea.value = routeQuery.domains ? [routeQuery.domains] : ['全部领域']
} }
if (route.query.selectedDate && Array.isArray(JSON.parse(route.query.selectedDate)) && JSON.parse(route.query.selectedDate).length) { if (routeQuery.selectedDate && Array.isArray(JSON.parse(routeQuery.selectedDate)) && JSON.parse(routeQuery.selectedDate).length) {
selectedDate.value = '自定义' selectedDate.value = '自定义'
customTime.value = JSON.parse(route.query.selectedDate) customTime.value = JSON.parse(routeQuery.selectedDate)
} }
selectedProvince.value = route.query.selectedProvince ? provinceList.value.filter(item => item.name.indexOf(route.query.selectedProvince) > -1)[0].name : '全部省份' selectedProvince.value = routeQuery.selectedProvince ? provinceList.value.filter(item => item.name.indexOf(routeQuery.selectedProvince) > -1)[0].name : '全部省份'
isHalfRule.value = route.query.isHalfRule === 'true' ? true : false isHalfRule.value = routeQuery.isHalfRule === 'true' ? true : false
isCnEntityOnly.value = route.query.isCnEntityOnly ? true : false isCnEntityOnly.value = routeQuery.isCnEntityOnly ? true : false
if (isCnEntityOnly.value) { if (isCnEntityOnly.value) {
selectedCountry.value = '0101' selectedCountry.value = '0101'
} else { } else {
selectedCountry.value = route.query.selectedCountryId ? route.query.selectedCountryId : '全部国家' selectedCountry.value = routeQuery.selectedCountryId ? routeQuery.selectedCountryId : '全部国家'
} }
selectedEntityType.value = route.query.selectedEntityType ? entityTypeList.value.filter(item => item.name === route.query.selectedEntityType)[0].id : '全部实体类型' selectedEntityType.value = routeQuery.selectedEntityType ? entityTypeList.value.filter(item => item.name === routeQuery.selectedEntityType)[0].id : '全部实体类型'
const query = route.query; const query = routeQuery;
if (Object.keys(query).length > 0) { if (Object.keys(query).length > 0) {
sessionStorage.setItem('entityRouteQuery', JSON.stringify(query)); sessionStorage.setItem('entityRouteQuery', JSON.stringify(query));
} }
...@@ -1112,7 +1113,7 @@ const initParam = () => { ...@@ -1112,7 +1113,7 @@ const initParam = () => {
if (isCnEntityOnly.value) { if (isCnEntityOnly.value) {
selectedCountry.value = '0101' selectedCountry.value = '0101'
} else { } else {
selectedCountry.value = route.query.selectedCountryId ? route.query.selectedCountryId : '全部国家' selectedCountry.value = routeQuery.selectedCountryId ? routeQuery.selectedCountryId : '全部国家'
} }
selectedEntityType.value = savedQuery.selectedEntityType ? entityTypeList.value.filter(item => item.name === savedQuery.selectedEntityType)[0].id : '全部实体类型' selectedEntityType.value = savedQuery.selectedEntityType ? entityTypeList.value.filter(item => item.name === savedQuery.selectedEntityType)[0].id : '全部实体类型'
......
...@@ -152,6 +152,7 @@ import router from '@/router' ...@@ -152,6 +152,7 @@ import router from '@/router'
import { search } from '@/api/comprehensiveSearch' import { search } from '@/api/comprehensiveSearch'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import getDateRange from '@/utils/getDateRange' import getDateRange from '@/utils/getDateRange'
import goToPage from '@/utils/goToPage/index'
const route = useRoute(); const route = useRoute();
...@@ -805,23 +806,26 @@ const handleDownloadCurChartData = () => { ...@@ -805,23 +806,26 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件 // 跳转到当前页 初始化筛选条件
const initParam = () => { const initParam = () => {
const hasQuery = Object.keys(route.query).length > 0; const routeQuery = goToPage.getDecodedParams()
console.log('routequery', routeQuery);
const hasQuery = Object.keys(routeQuery).length > 0;
if (hasQuery) { if (hasQuery) {
if (route.query.selectedAreaList) { if (routeQuery.selectedAreaList) {
selectedArea.value = JSON.parse(route.query.selectedAreaList) selectedArea.value = JSON.parse(routeQuery.selectedAreaList)
} else { } else {
selectedArea.value = route.query.domains ? [route.query.domains] : ['全部领域'] selectedArea.value = routeQuery.domains ? [routeQuery.domains] : ['全部领域']
} }
if (route.query.selectedDate && Array.isArray(JSON.parse(route.query.selectedDate)) && JSON.parse(route.query.selectedDate).length) { if (routeQuery.selectedDate && Array.isArray(JSON.parse(routeQuery.selectedDate)) && JSON.parse(routeQuery.selectedDate).length) {
selectedDate.value = '自定义' selectedDate.value = '自定义'
customTime.value = JSON.parse(route.query.selectedDate) customTime.value = JSON.parse(routeQuery.selectedDate)
} }
isInvolveCnOnly.value = route.query.isInvolveCnOnly ? true : false isInvolveCnOnly.value = routeQuery.isInvolveCnOnly ? true : false
const query = route.query; const query = routeQuery;
if (Object.keys(query).length > 0) { if (Object.keys(query).length > 0) {
sessionStorage.setItem('entityEventRouteQuery', JSON.stringify(query)); sessionStorage.setItem('entityEventRouteQuery', JSON.stringify(query));
} }
......
...@@ -172,13 +172,13 @@ import InputBox from "../components/InputBox/index.vue"; ...@@ -172,13 +172,13 @@ import InputBox from "../components/InputBox/index.vue";
import DataChartSwitchBox from '../components/dataChartSwitchBox/index.vue' import DataChartSwitchBox from '../components/dataChartSwitchBox/index.vue'
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import router from "@/router"; import router from "@/router";
import { getDecodedParams } from "@/utils/goToPage";
import { search, getThinkTankList } from "@/api/comprehensiveSearch"; import { search, getThinkTankList } from "@/api/comprehensiveSearch";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import getDateRange from "@/utils/getDateRange"; import getDateRange from "@/utils/getDateRange";
import { getDepartmentList } from "@/api/decree/home"; import { getDepartmentList } from "@/api/decree/home";
import goToPage from "@/utils/goToPage";
const route = useRoute(); const route = useRoute();
...@@ -913,7 +913,7 @@ const handleDownloadCurChartData = () => { ...@@ -913,7 +913,7 @@ const handleDownloadCurChartData = () => {
const initParam = () => { const initParam = () => {
const hasQuery = Object.keys(route.query).length > 0; const hasQuery = Object.keys(route.query).length > 0;
if (hasQuery) { if (hasQuery) {
const decodedQuery = route.query.data ? (getDecodedParams() || {}) : null; const decodedQuery = route.query.data ? (goToPage.getDecodedParams() || {}) : null;
const query = decodedQuery && typeof decodedQuery === "object" ? decodedQuery : route.query; const query = decodedQuery && typeof decodedQuery === "object" ? decodedQuery : route.query;
if (query.selectedAreaList) { if (query.selectedAreaList) {
......
...@@ -21,23 +21,29 @@ ...@@ -21,23 +21,29 @@
<script setup> <script setup>
import infoIcon from "../assets/icons/info-icon.png"; import infoIcon from "../assets/icons/info-icon.png";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import goToPage from "@/utils/goToPage/index";
const router = useRouter() const router = useRouter()
const emits = defineEmits(['num-click']) const emits = defineEmits(['num-click'])
const handleClickNum = (item) => { const handleClickNum = (item) => {
if (item === '实体清单') { if (item === '实体清单') {
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: { // query: {
isCnEntityOnly: true // isCnEntityOnly: true
} // }
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
const params = {
isCnEntityOnly: true
}
goToPage.goToDataEntityList(params)
} else if (item === '商业管制清单') { } else if (item === '商业管制清单') {
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataCommerceControlList", // path: "/dataLibrary/dataCommerceControlList",
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataCCLList()
} }
} }
...@@ -157,7 +163,8 @@ const desMap = { ...@@ -157,7 +163,8 @@ const desMap = {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: flex-end; align-items: flex-end;
&:hover{
&:hover {
text-decoration: underline; text-decoration: underline;
background: var(--color-primary-2); background: var(--color-primary-2);
} }
......
...@@ -3,25 +3,12 @@ ...@@ -3,25 +3,12 @@
<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 <SearchContainer style="margin-bottom: 0; margin-top: 48px; height: fit-content" v-if="homeMainRef"
style="margin-bottom: 0; margin-top: 48px; height: fit-content" placeholder="搜索出口管制" :containerRef="homeMainRef" areaName="实体清单" />
v-if="homeMainRef"
placeholder="搜索出口管制"
:containerRef="homeMainRef"
areaName="实体清单"
/>
<div class="home-main-header-footer-info"> <div class="home-main-header-footer-info">
<InfoCard <InfoCard v-for="(item, index) in infoList" :key="item.id" :title="item.nameZh" :subtitle="item.nameAbbr"
v-for="(item, index) in infoList" :description="item.description" :quantity="item.postCount" :unit="item.unit" :color="infoListColor[index]"
:key="item.id" @click="handleToEntityListNoId(item)" />
: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>
...@@ -47,15 +34,8 @@ ...@@ -47,15 +34,8 @@
<img src="./assets/images/box1-right.png" alt="" /> <img src="./assets/images/box1-right.png" alt="" />
</div> </div>
</div> </div>
<el-carousel <el-carousel ref="carouselRef" height="370px" :autoplay="false" :interval="3000" arrow="never"
ref="carouselRef" indicator-position="none" @change="handleCarouselChange">
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">
...@@ -72,11 +52,7 @@ ...@@ -72,11 +52,7 @@
<div class="box1-top-content-item"> <div class="box1-top-content-item">
<span class="box1-top-content-item-title">· 涉及领域:</span> <span class="box1-top-content-item-title">· 涉及领域:</span>
<AreaTag <AreaTag v-for="(domainItem, index) in item.domains" :key="index" :tagName="domainItem" />
v-for="(domainItem, index) in item.domains"
:key="index"
:tagName="domainItem"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -84,18 +60,10 @@ ...@@ -84,18 +60,10 @@
<div class="box1-bottom-sanTypeId" v-if="item.sanEntities?.length"> <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 class="box1-bottom-content-item" v-for="(ett, index) in item.sanEntities" :key="index"
class="box1-bottom-content-item" @click="handleEntityClick(ett)">
v-for="(ett, index) in item.sanEntities" <el-image v-if="ett.img" class="box1-bottom-content-item-img" :src="ett.img"
:key="index" alt=""></el-image>
@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(
...@@ -112,12 +80,8 @@ ...@@ -112,12 +80,8 @@
<div class="box1-bottom-sanTypeId" v-if="item.sanItems?.length > 0"> <div class="box1-bottom-sanTypeId" v-if="item.sanItems?.length > 0">
<div class="box1-bottom-title">· 涉及管制物项:</div> <div class="box1-bottom-title">· 涉及管制物项:</div>
<div class="box1-bottom-content__wx"> <div class="box1-bottom-content__wx">
<div <div class="box1-bottom-content__wx-item" v-for="(ett, index) in item.sanItems" :key="index"
class="box1-bottom-content__wx-item" @click="handleWxClick(item)">
v-for="(ett, index) in item.sanItems"
:key="index"
@click="handleWxClick(item)"
>
<div class="box1-bottom-content__wx-item-id"> <div class="box1-bottom-content__wx-item-id">
{{ ett.id }} {{ ett.id }}
</div> </div>
...@@ -149,14 +113,8 @@ ...@@ -149,14 +113,8 @@
</custom-container> </custom-container>
</el-col> </el-col>
<el-col :span="8" style="padding-right: 0px"> <el-col :span="8" style="padding-right: 0px">
<RiskSignal <RiskSignal :list="warningList" @item-click="handleToRiskSignalDetail" @more-click="handleToMoreRiskSignal"
:list="warningList" riskLevel="signalLevel" postDate="signalTime" name="signalTitle" />
@item-click="handleToRiskSignalDetail"
@more-click="handleToMoreRiskSignal"
riskLevel="signalLevel"
postDate="signalTime"
name="signalTitle"
/>
</el-col> </el-col>
</el-row> </el-row>
...@@ -165,19 +123,11 @@ ...@@ -165,19 +123,11 @@
</el-row> </el-row>
<div class="center-center"> <div class="center-center">
<NewsList <NewsList :newsList="newsList" @item-click="handleNewsInfoClick" @more-click="handleToMoreNews"
:newsList="newsList" content="newsContent" />
@item-click="handleNewsInfoClick"
@more-click="handleToMoreNews" <MessageBubble :messageList="socialMediaList" @person-click="handlePerClick" imageUrl="avatar"
content="newsContent" @more-click="handleToSocialDetail" />
/>
<MessageBubble
:messageList="socialMediaList"
@person-click="handlePerClick"
imageUrl="avatar"
@more-click="handleToSocialDetail"
/>
</div> </div>
<el-row :gutter="16" style="width: 1600px; margin: 0 auto; height: 510px; margin-top: 64px"> <el-row :gutter="16" style="width: 1600px; margin: 0 auto; height: 510px; margin-top: 64px">
...@@ -188,30 +138,20 @@ ...@@ -188,30 +138,20 @@
<div class="box3"> <div class="box3">
<div class="box3-content"> <div class="box3-content">
<div class="box3-content-title">实体清单发布频次统计</div> <div class="box3-content-title">实体清单发布频次统计</div>
<el-table <el-table :data="entityListReleaseFreq" stripe style="width: 100%" @row-click="handleEntityRowClick">
: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; cursor: pointer"> <div style="display: flex; align-items: center; cursor: pointer">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span>
<el-progress <el-progress :percentage="scope.row.percent * 100" :show-text="false"
:percentage="scope.row.percent * 100" :status="getStatus(scope.row.percent)" />
: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 <div style="display: flex; justify-content: center; align-items: center; gap: 5px">
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" />
</div> </div>
</template> </template>
...@@ -225,39 +165,28 @@ ...@@ -225,39 +165,28 @@
</div> </div>
<div class="ai-pane"> <div class="ai-pane">
<AiButton @mouseenter="handleShowAiPane('entityListReleaseFreqChart')" /> <AiButton @mouseenter="handleShowAiPane('entityListReleaseFreqChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.entityListReleaseFreqChart"
v-if="aiPaneVisible?.entityListReleaseFreqChart"
:aiContent="overviewAiContent.entityListReleaseFreqChart" :aiContent="overviewAiContent.entityListReleaseFreqChart"
@mouseleave="handleHideAiPane('entityListReleaseFreqChart')" @mouseleave="handleHideAiPane('entityListReleaseFreqChart')" />
/>
</div> </div>
</div> </div>
<div class="box3-content"> <div class="box3-content">
<div class="box3-content-title">商业管制清单发布频次统计</div> <div class="box3-content-title">商业管制清单发布频次统计</div>
<el-table <el-table :data="commerceControlListReleaseFreq" stripe style="width: 100%"
:data="commerceControlListReleaseFreq" @row-click="handleCommercialRowClick">
stripe
style="width: 100%"
@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; cursor: pointer"> <div style="display: flex; align-items: center; cursor: pointer">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span>
<el-progress <el-progress :percentage="scope.row.percent * 100" :show-text="false"
:percentage="scope.row.percent * 100" :status="getStatus(scope.row.percent)" />
: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 <div style="display: flex; justify-content: center; align-items: center; gap: 5px">
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" />
</div> </div>
</template> </template>
...@@ -271,11 +200,9 @@ ...@@ -271,11 +200,9 @@
</div> </div>
<div class="ai-pane"> <div class="ai-pane">
<AiButton @mouseenter="handleShowAiPane('commerceControlListReleaseFreqChart')" /> <AiButton @mouseenter="handleShowAiPane('commerceControlListReleaseFreqChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.commerceControlListReleaseFreqChart"
v-if="aiPaneVisible?.commerceControlListReleaseFreqChart"
:aiContent="overviewAiContent.commerceControlListReleaseFreqChart" :aiContent="overviewAiContent.commerceControlListReleaseFreqChart"
@mouseleave="handleHideAiPane('commerceControlListReleaseFreqChart')" @mouseleave="handleHideAiPane('commerceControlListReleaseFreqChart')" />
/>
</div> </div>
</div> </div>
<div class="box3-content" style="display: none"> <div class="box3-content" style="display: none">
...@@ -286,11 +213,8 @@ ...@@ -286,11 +213,8 @@
<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 <el-progress :percentage="scope.row.percent * 100" :show-text="false"
:percentage="scope.row.percent * 100" :status="getStatus(scope.row.percent)" />
:show-text="false"
:status="getStatus(scope.row.percent)"
/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -318,12 +242,8 @@ ...@@ -318,12 +242,8 @@
<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 <EChart :option="radarOption" autoresize :style="{ height: '420px' }"
:option="radarOption" @chart-click="handleRadarChartClick" />
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="" />
...@@ -341,24 +261,15 @@ ...@@ -341,24 +261,15 @@
<custom-container title="制裁清单数量增长趋势" :titleIcon="qushiIcon" height="540px"> <custom-container title="制裁清单数量增长趋势" :titleIcon="qushiIcon" height="540px">
<template #header-right> <template #header-right>
<div style="display: flex; align-items: center; gap: 16px"> <div style="display: flex; align-items: center; gap: 16px">
<el-checkbox <el-checkbox v-if="selectedEntityId != '13'" v-model="trendChecked" label="50%规则" size="large" />
v-if="selectedEntityId != '13'"
v-model="trendChecked"
label="50%规则"
size="large"
/>
<el-select v-model="selectedEntityId" placeholder="请选择清单类型" style="width: 160px"> <el-select v-model="selectedEntityId" placeholder="请选择清单类型" style="width: 160px">
<el-option v-for="item in infoList" :key="item.id" :label="item.nameZh" :value="item.id" /> <el-option v-for="item in infoList" :key="item.id" :label="item.nameZh" :value="item.id" />
</el-select> </el-select>
</div> </div>
</template> </template>
<template #default> <template #default>
<EChart <EChart :option="trendOption" autoresize :style="{ height: '420px' }"
:option="trendOption" @chart-click="handleMultiBarChartClick" />
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="" />
...@@ -367,11 +278,8 @@ ...@@ -367,11 +278,8 @@
</div> </div>
<div class="ai-pane"> <div class="ai-pane">
<AiButton @mouseenter="handleShowAiPane('trendChart')" /> <AiButton @mouseenter="handleShowAiPane('trendChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.trendChart" :aiContent="overviewAiContent.trendChart"
v-if="aiPaneVisible?.trendChart" @mouseleave="handleHideAiPane('trendChart')" />
:aiContent="overviewAiContent.trendChart"
@mouseleave="handleHideAiPane('trendChart')"
/>
</div> </div>
</template> </template>
</custom-container> </custom-container>
...@@ -381,13 +289,9 @@ ...@@ -381,13 +289,9 @@
<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 <div v-for="tab in resourceTabs" :key="tab.value" class="resource-tab-item"
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>
...@@ -400,25 +304,15 @@ ...@@ -400,25 +304,15 @@
<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 <div class="box4-item-left-line" v-if="idx + 1 != sanctionProcessList.length"></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" <span class="box4-item-right-header-title">{{ item.postDate }}{{ item.title }}</span>
>{{ 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 <el-tooltip effect="dark" :content="item.content" popper-class="common-prompt-popper"
effect="dark" placement="top" :show-after="500">
: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>
...@@ -426,12 +320,8 @@ ...@@ -426,12 +320,8 @@
</div> </div>
</div> </div>
</div> </div>
<div <div class="box4-footer" :style="{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }">
class="box4-footer" <el-button type="primary" link @click="handleGetMore">查看更多
:style="{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }"
>
<el-button type="primary" link @click="handleGetMore"
>查看更多
<el-icon> <el-icon>
<DArrowRight /> <DArrowRight />
</el-icon> </el-icon>
...@@ -448,24 +338,13 @@ ...@@ -448,24 +338,13 @@
</template> </template>
<template #default> <template #default>
<div class="box5"> <div class="box5">
<el-table <el-table :data="entitiesList" class="sanction-table" stripe empty-text="暂无数据" height="700px"
:data="entitiesList" header-row-class-name="table-header" row-class-name="table-row">
class="sanction-table"
stripe
empty-text="暂无数据"
height="700px"
header-row-class-name="table-header"
row-class-name="table-row"
>
<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 <el-image v-if="scope.row.img" class="box1-bottom-content-item-img" :src="scope.row.img"
v-if="scope.row.img" alt=""></el-image>
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(
...@@ -500,19 +379,13 @@ ...@@ -500,19 +379,13 @@
<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 <div class="name-item" :class="[
class="name-item" 'revenue-cell',
:class="[ scope.row.revenue === '无营收数据' ? 'no-revenue' : ''
'revenue-cell', ]">
scope.row.revenue === '无营收数据' ? 'no-revenue' : ''
]"
>
{{ scope.row.ruleOrgList[0].orgName }}...等 {{ scope.row.ruleOrgList[0].orgName }}...等
</div> </div>
<div <div style="width: 50px; color: #409eff; cursor: pointer" @click="handleOrgClick(scope.row)">
style="width: 50px; color: #409eff; cursor: pointer"
@click="handleOrgClick(scope.row)"
>
{{ scope.row.ruleOrgCount }}家> {{ scope.row.ruleOrgCount }}家>
</div> </div>
</div> </div>
...@@ -524,15 +397,8 @@ ...@@ -524,15 +397,8 @@
<!-- <div class="pagination-info"> <!-- <div class="pagination-info">
第{{ currentPage }}页,共{{ totalPages }}页 第{{ currentPage }}页,共{{ totalPages }}页
</div> --> </div> -->
<el-pagination <el-pagination v-model:current-page="currentPage" :page-size="pageSize" :total="total"
v-model:current-page="currentPage" :pager-count="5" layout="prev, pager, next" background @current-change="handlePageChange" />
:page-size="pageSize"
:total="total"
:pager-count="5"
layout="prev, pager, next"
background
@current-change="handlePageChange"
/>
</div> </div>
</div> </div>
</template> </template>
...@@ -571,17 +437,9 @@ ...@@ -571,17 +437,9 @@
}}</el-checkbox> }}</el-checkbox>
</div> </div>
</el-checkbox-group> </el-checkbox-group>
<div <div v-if="timeOptions.find(i => i.value === 'custom' && i.checked)" class="custom-date-picker">
v-if="timeOptions.find(i => i.value === 'custom' && i.checked)" <el-date-picker v-model="customDateRange" type="daterange" range-separator="-"
class="custom-date-picker" start-placeholder="开始日期" end-placeholder="结束日期" />
>
<el-date-picker
v-model="customDateRange"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -610,14 +468,8 @@ ...@@ -610,14 +468,8 @@
</div> </div>
<div class="right-footer"> <div class="right-footer">
<div class="total-count">{{ totalAll }}</div> <div class="total-count">{{ totalAll }}</div>
<el-pagination <el-pagination v-model:current-page="currentPageAll" :page-size="pageSizeAll" :total="totalAll"
v-model:current-page="currentPageAll" layout="prev, pager, next" background @current-change="handlePageChangeAll" />
:page-size="pageSizeAll"
:total="totalAll"
layout="prev, pager, next"
background
@current-change="handlePageChangeAll"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -630,12 +482,8 @@ ...@@ -630,12 +482,8 @@
</template> </template>
</el-row> </el-row>
</div> </div>
<RuleSubsidiaryDialog <RuleSubsidiaryDialog v-model="dialogVisible" :company-name="currentRuleCompany" :total-count="currentRuleCount"
v-model="dialogVisible" :data-list="currentOrgList" />
: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">
...@@ -648,13 +496,8 @@ ...@@ -648,13 +496,8 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<RiskSignalOverviewDetailDialog <RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" :row="riskOverviewDetailRow"
v-model="isRiskOverviewDetailOpen" name-field="signalTitle" post-date-field="signalTime" risk-level-field="signalLevel" />
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</template> </template>
<script setup> <script setup>
...@@ -1499,7 +1342,7 @@ const fetchSanctionList = async () => { ...@@ -1499,7 +1342,7 @@ const fetchSanctionList = async () => {
}); });
totalAll.value = res.totalElements; totalAll.value = res.totalElements;
} }
} catch (error) {} } catch (error) { }
}; };
const handlePageChangeAll = val => { const handlePageChangeAll = val => {
...@@ -1793,7 +1636,7 @@ const handleGetHylyList = async () => { ...@@ -1793,7 +1636,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({
...@@ -1927,12 +1770,24 @@ const handleRadarChartClick = value => { ...@@ -1927,12 +1770,24 @@ const handleRadarChartClick = value => {
// 点击制裁清单数量增长趋势 // 点击制裁清单数量增长趋势
const handleMultiBarChartClick = val => { const handleMultiBarChartClick = val => {
const params = { let params
isHalfRule: trendChecked.value, if (selectedEntityId.value === 1) {
domains: val.seriesName, params = {
isCnEntityOnly: true, isHalfRule: trendChecked.value,
selectedDate: JSON.stringify([val.name + "-01-01", val.name + "-12-31"]) domains: val.seriesName,
}; isCnEntityOnly: true,
selectedDate: JSON.stringify([val.name + "-01-01", val.name + "-12-31"])
};
} else {
params = {
isHalfRule: trendChecked.value,
domains: val.seriesName,
isCnEntityOnly: true,
selectedDate: JSON.stringify([val.name + "-01-01", val.name + "-12-31"]),
updateFlag: '1'
}
}
const route = router.resolve({ const route = router.resolve({
path: selectedEntityId.value === 1 ? "/dataLibrary/dataEntityList" : "/dataLibrary/dataCommerceControlList", path: selectedEntityId.value === 1 ? "/dataLibrary/dataEntityList" : "/dataLibrary/dataCommerceControlList",
query: params query: params
...@@ -2128,6 +1983,7 @@ const handleMediaClick = item => { ...@@ -2128,6 +1983,7 @@ const handleMediaClick = item => {
padding-top: 16px; padding-top: 16px;
box-sizing: border-box; box-sizing: border-box;
padding-right: 24px; padding-right: 24px;
&-title { &-title {
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
...@@ -2399,6 +2255,7 @@ const handleMediaClick = item => { ...@@ -2399,6 +2255,7 @@ const handleMediaClick = item => {
} }
.box3-content { .box3-content {
// flex: 1; // flex: 1;
.el-progress--line { .el-progress--line {
width: 82px; width: 82px;
......
...@@ -3,25 +3,12 @@ ...@@ -3,25 +3,12 @@
<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 <SearchContainer style="margin-bottom: 0; margin-top: 48px; height: fit-content" v-if="homeMainRef"
style="margin-bottom: 0; margin-top: 48px; height: fit-content" placeholder="搜索出口管制" :containerRef="homeMainRef" areaName="实体清单" />
v-if="homeMainRef"
placeholder="搜索出口管制"
:containerRef="homeMainRef"
areaName="实体清单"
/>
<div class="home-main-header-footer-info"> <div class="home-main-header-footer-info">
<InfoCard <InfoCard v-for="(item, index) in infoList" :key="item.id" :title="item.nameZh" :subtitle="item.nameAbbr"
v-for="(item, index) in infoList" :description="item.description" :quantity="item.postCount" :unit="item.unit" :color="infoListColor[index]"
:key="item.id" @click="handleToEntityListNoId(item)" />
: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>
...@@ -47,15 +34,8 @@ ...@@ -47,15 +34,8 @@
<img src="./assets/images/box1-right.png" alt="" /> <img src="./assets/images/box1-right.png" alt="" />
</div> </div>
</div> </div>
<el-carousel <el-carousel ref="carouselRef" height="370px" :autoplay="false" :interval="3000" arrow="never"
ref="carouselRef" indicator-position="none" @change="handleCarouselChange">
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">
...@@ -72,11 +52,7 @@ ...@@ -72,11 +52,7 @@
<div class="box1-top-content-item"> <div class="box1-top-content-item">
<span class="box1-top-content-item-title">· 涉及领域:</span> <span class="box1-top-content-item-title">· 涉及领域:</span>
<AreaTag <AreaTag v-for="(domainItem, index) in item.domains" :key="index" :tagName="domainItem" />
v-for="(domainItem, index) in item.domains"
:key="index"
:tagName="domainItem"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -84,18 +60,10 @@ ...@@ -84,18 +60,10 @@
<div class="box1-bottom-sanTypeId" v-if="item.sanEntities?.length"> <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 class="box1-bottom-content-item" v-for="(ett, index) in item.sanEntities" :key="index"
class="box1-bottom-content-item" @click="handleEntityClick(ett)">
v-for="(ett, index) in item.sanEntities" <el-image v-if="ett.img" class="box1-bottom-content-item-img" :src="ett.img"
:key="index" alt=""></el-image>
@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(
...@@ -112,12 +80,8 @@ ...@@ -112,12 +80,8 @@
<div class="box1-bottom-sanTypeId" v-if="item.sanItems?.length > 0"> <div class="box1-bottom-sanTypeId" v-if="item.sanItems?.length > 0">
<div class="box1-bottom-title">· 涉及管制物项:</div> <div class="box1-bottom-title">· 涉及管制物项:</div>
<div class="box1-bottom-content__wx"> <div class="box1-bottom-content__wx">
<div <div class="box1-bottom-content__wx-item" v-for="(ett, index) in item.sanItems" :key="index"
class="box1-bottom-content__wx-item" @click="handleWxClick(item)">
v-for="(ett, index) in item.sanItems"
:key="index"
@click="handleWxClick(item)"
>
<div class="box1-bottom-content__wx-item-id"> <div class="box1-bottom-content__wx-item-id">
{{ ett.id }} {{ ett.id }}
</div> </div>
...@@ -149,14 +113,8 @@ ...@@ -149,14 +113,8 @@
</custom-container> </custom-container>
</el-col> </el-col>
<el-col :span="8" style="padding-right: 0px"> <el-col :span="8" style="padding-right: 0px">
<RiskSignal <RiskSignal :list="warningList" @item-click="handleToRiskSignalDetail" @more-click="handleToMoreRiskSignal"
:list="warningList" riskLevel="signalLevel" postDate="signalTime" name="signalTitle" />
@item-click="handleToRiskSignalDetail"
@more-click="handleToMoreRiskSignal"
riskLevel="signalLevel"
postDate="signalTime"
name="signalTitle"
/>
</el-col> </el-col>
</el-row> </el-row>
...@@ -165,19 +123,11 @@ ...@@ -165,19 +123,11 @@
</el-row> </el-row>
<div class="center-center"> <div class="center-center">
<NewsList <NewsList :newsList="newsList" @item-click="handleNewsInfoClick" @more-click="handleToMoreNews"
:newsList="newsList" content="newsContent" />
@item-click="handleNewsInfoClick"
@more-click="handleToMoreNews" <MessageBubble :messageList="socialMediaList" @person-click="handlePerClick" imageUrl="avatar"
content="newsContent" @more-click="handleToSocialDetail" />
/>
<MessageBubble
:messageList="socialMediaList"
@person-click="handlePerClick"
imageUrl="avatar"
@more-click="handleToSocialDetail"
/>
</div> </div>
<el-row :gutter="16" style="width: 1600px; margin: 0 auto; height: 510px; margin-top: 64px"> <el-row :gutter="16" style="width: 1600px; margin: 0 auto; height: 510px; margin-top: 64px">
...@@ -188,30 +138,20 @@ ...@@ -188,30 +138,20 @@
<div class="box3"> <div class="box3">
<div class="box3-content"> <div class="box3-content">
<div class="box3-content-title">实体清单发布频次统计</div> <div class="box3-content-title">实体清单发布频次统计</div>
<el-table <el-table :data="entityListReleaseFreq" stripe style="width: 100%" @row-click="handleEntityRowClick">
: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; cursor: pointer"> <div style="display: flex; align-items: center; cursor: pointer">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span>
<el-progress <el-progress :percentage="scope.row.percent * 100" :show-text="false"
:percentage="scope.row.percent * 100" :status="getStatus(scope.row.percent)" />
: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 <div style="display: flex; justify-content: center; align-items: center; gap: 5px">
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" />
</div> </div>
</template> </template>
...@@ -225,39 +165,28 @@ ...@@ -225,39 +165,28 @@
</div> </div>
<div class="ai-pane"> <div class="ai-pane">
<AiButton @mouseenter="handleShowAiPane('entityListReleaseFreqChart')" /> <AiButton @mouseenter="handleShowAiPane('entityListReleaseFreqChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.entityListReleaseFreqChart"
v-if="aiPaneVisible?.entityListReleaseFreqChart"
:aiContent="overviewAiContent.entityListReleaseFreqChart" :aiContent="overviewAiContent.entityListReleaseFreqChart"
@mouseleave="handleHideAiPane('entityListReleaseFreqChart')" @mouseleave="handleHideAiPane('entityListReleaseFreqChart')" />
/>
</div> </div>
</div> </div>
<div class="box3-content"> <div class="box3-content">
<div class="box3-content-title">商业管制清单发布频次统计</div> <div class="box3-content-title">商业管制清单发布频次统计</div>
<el-table <el-table :data="commerceControlListReleaseFreq" stripe style="width: 100%"
:data="commerceControlListReleaseFreq" @row-click="handleCommercialRowClick">
stripe
style="width: 100%"
@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; cursor: pointer"> <div style="display: flex; align-items: center; cursor: pointer">
<span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span> <span style="margin-right: 10px; width: 40px">{{ scope.row.num }}</span>
<el-progress <el-progress :percentage="scope.row.percent * 100" :show-text="false"
:percentage="scope.row.percent * 100" :status="getStatus(scope.row.percent)" />
: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 <div style="display: flex; justify-content: center; align-items: center; gap: 5px">
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" />
</div> </div>
</template> </template>
...@@ -271,11 +200,9 @@ ...@@ -271,11 +200,9 @@
</div> </div>
<div class="ai-pane"> <div class="ai-pane">
<AiButton @mouseenter="handleShowAiPane('commerceControlListReleaseFreqChart')" /> <AiButton @mouseenter="handleShowAiPane('commerceControlListReleaseFreqChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.commerceControlListReleaseFreqChart"
v-if="aiPaneVisible?.commerceControlListReleaseFreqChart"
:aiContent="overviewAiContent.commerceControlListReleaseFreqChart" :aiContent="overviewAiContent.commerceControlListReleaseFreqChart"
@mouseleave="handleHideAiPane('commerceControlListReleaseFreqChart')" @mouseleave="handleHideAiPane('commerceControlListReleaseFreqChart')" />
/>
</div> </div>
</div> </div>
<div class="box3-content" style="display: none"> <div class="box3-content" style="display: none">
...@@ -286,11 +213,8 @@ ...@@ -286,11 +213,8 @@
<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 <el-progress :percentage="scope.row.percent * 100" :show-text="false"
:percentage="scope.row.percent * 100" :status="getStatus(scope.row.percent)" />
:show-text="false"
:status="getStatus(scope.row.percent)"
/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -318,12 +242,8 @@ ...@@ -318,12 +242,8 @@
<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 <EChart :option="radarOption" autoresize :style="{ height: '420px' }"
:option="radarOption" @chart-click="handleRadarChartClick" />
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="" />
...@@ -341,24 +261,15 @@ ...@@ -341,24 +261,15 @@
<custom-container title="制裁清单数量增长趋势" :titleIcon="qushiIcon" height="540px"> <custom-container title="制裁清单数量增长趋势" :titleIcon="qushiIcon" height="540px">
<template #header-right> <template #header-right>
<div style="display: flex; align-items: center; gap: 16px"> <div style="display: flex; align-items: center; gap: 16px">
<el-checkbox <el-checkbox v-if="selectedEntityId != '13'" v-model="trendChecked" label="50%规则" size="large" />
v-if="selectedEntityId != '13'"
v-model="trendChecked"
label="50%规则"
size="large"
/>
<el-select v-model="selectedEntityId" placeholder="请选择清单类型" style="width: 160px"> <el-select v-model="selectedEntityId" placeholder="请选择清单类型" style="width: 160px">
<el-option v-for="item in infoList" :key="item.id" :label="item.nameZh" :value="item.id" /> <el-option v-for="item in infoList" :key="item.id" :label="item.nameZh" :value="item.id" />
</el-select> </el-select>
</div> </div>
</template> </template>
<template #default> <template #default>
<EChart <EChart :option="trendOption" autoresize :style="{ height: '420px' }"
:option="trendOption" @chart-click="handleMultiBarChartClick" />
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="" />
...@@ -367,11 +278,8 @@ ...@@ -367,11 +278,8 @@
</div> </div>
<div class="ai-pane"> <div class="ai-pane">
<AiButton @mouseenter="handleShowAiPane('trendChart')" /> <AiButton @mouseenter="handleShowAiPane('trendChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.trendChart" :aiContent="overviewAiContent.trendChart"
v-if="aiPaneVisible?.trendChart" @mouseleave="handleHideAiPane('trendChart')" />
:aiContent="overviewAiContent.trendChart"
@mouseleave="handleHideAiPane('trendChart')"
/>
</div> </div>
</template> </template>
</custom-container> </custom-container>
...@@ -381,13 +289,9 @@ ...@@ -381,13 +289,9 @@
<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 <div v-for="tab in resourceTabs" :key="tab.value" class="resource-tab-item"
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>
...@@ -400,10 +304,7 @@ ...@@ -400,10 +304,7 @@
<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 <div class="box4-item-left-line" v-if="idx + 1 != sanctionProcessList.length"></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)">
...@@ -432,22 +333,15 @@ ...@@ -432,22 +333,15 @@
</div> </div>
</div> </div>
</div> </div>
<div <div class="box4-footer" :style="{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }">
class="box4-footer"
:style="{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }"
>
<!-- <el-button type="primary" link @click="handleGetMore" <!-- <el-button type="primary" link @click="handleGetMore"
>查看更多 >查看更多
<el-icon> <el-icon>
<DArrowRight /> <DArrowRight />
</el-icon> </el-icon>
</el-button> --> </el-button> -->
<simple-pagination <simple-pagination v-model:current-page="sanctionPage" :page-size="listPageSize" :total="totalNum"
v-model:current-page="sanctionPage" @page-change="handleListPageChange" />
:page-size="listPageSize"
:total="totalNum"
@page-change="handleListPageChange"
/>
</div> </div>
</div> </div>
</template> </template>
...@@ -460,24 +354,13 @@ ...@@ -460,24 +354,13 @@
</template> </template>
<template #default> <template #default>
<div class="box5"> <div class="box5">
<el-table <el-table :data="entitiesList" class="sanction-table" stripe empty-text="暂无数据" height="700px"
:data="entitiesList" header-row-class-name="table-header" row-class-name="table-row">
class="sanction-table"
stripe
empty-text="暂无数据"
height="700px"
header-row-class-name="table-header"
row-class-name="table-row"
>
<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 <el-image v-if="scope.row.img" class="box1-bottom-content-item-img" :src="scope.row.img"
v-if="scope.row.img" alt=""></el-image>
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(
...@@ -512,19 +395,13 @@ ...@@ -512,19 +395,13 @@
<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 <div class="name-item" :class="[
class="name-item" 'revenue-cell',
:class="[ scope.row.revenue === '无营收数据' ? 'no-revenue' : ''
'revenue-cell', ]">
scope.row.revenue === '无营收数据' ? 'no-revenue' : ''
]"
>
{{ scope.row.ruleOrgList[0].orgName }}...等 {{ scope.row.ruleOrgList[0].orgName }}...等
</div> </div>
<div <div style="width: 50px; color: #409eff; cursor: pointer" @click="handleOrgClick(scope.row)">
style="width: 50px; color: #409eff; cursor: pointer"
@click="handleOrgClick(scope.row)"
>
{{ scope.row.ruleOrgCount }}家> {{ scope.row.ruleOrgCount }}家>
</div> </div>
</div> </div>
...@@ -536,15 +413,8 @@ ...@@ -536,15 +413,8 @@
<!-- <div class="pagination-info"> <!-- <div class="pagination-info">
第{{ currentPage }}页,共{{ totalPages }}页 第{{ currentPage }}页,共{{ totalPages }}页
</div> --> </div> -->
<el-pagination <el-pagination v-model:current-page="currentPage" :page-size="pageSize" :total="total"
v-model:current-page="currentPage" :pager-count="5" layout="prev, pager, next" background @current-change="handlePageChange" />
:page-size="pageSize"
:total="total"
:pager-count="5"
layout="prev, pager, next"
background
@current-change="handlePageChange"
/>
</div> </div>
</div> </div>
</template> </template>
...@@ -584,24 +454,11 @@ ...@@ -584,24 +454,11 @@
</div> </div>
</el-checkbox-group> --> </el-checkbox-group> -->
<div class="checkbox-grid"> <div class="checkbox-grid">
<el-checkbox <el-checkbox v-for="(item, index) in timeOptions" :key="index" v-model="item.checked"
v-for="(item, index) in timeOptions" :label="item.label" @change="handleFilterChange(item, timeOptions, 'time')" />
:key="index" <div v-if="timeOptions.find(i => i.value === 'custom' && i.checked)" class="custom-date-picker">
v-model="item.checked" <el-date-picker v-model="customDateRange" type="daterange" range-separator="-"
:label="item.label" start-placeholder="开始日期" end-placeholder="结束日期" />
@change="handleFilterChange(item, timeOptions, 'time')"
/>
<div
v-if="timeOptions.find(i => i.value === 'custom' && i.checked)"
class="custom-date-picker"
>
<el-date-picker
v-model="customDateRange"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -633,14 +490,8 @@ ...@@ -633,14 +490,8 @@
</div> </div>
<div class="right-footer"> <div class="right-footer">
<div class="total-count">{{ totalAll }}</div> <div class="total-count">{{ totalAll }}</div>
<el-pagination <el-pagination v-model:current-page="currentPageAll" :page-size="pageSizeAll" :total="totalAll"
v-model:current-page="currentPageAll" layout="prev, pager, next" background @current-change="handlePageChangeAll" />
:page-size="pageSizeAll"
:total="totalAll"
layout="prev, pager, next"
background
@current-change="handlePageChangeAll"
/>
</div> </div>
</div> </div>
<el-empty v-else /> <el-empty v-else />
...@@ -656,12 +507,8 @@ ...@@ -656,12 +507,8 @@
</template> </template>
</el-row> </el-row>
</div> </div>
<RuleSubsidiaryDialog <RuleSubsidiaryDialog v-model="dialogVisible" :company-name="currentRuleCompany" :total-count="currentRuleCount"
v-model="dialogVisible" :data-list="currentOrgList" />
: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">
...@@ -674,13 +521,8 @@ ...@@ -674,13 +521,8 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<RiskSignalOverviewDetailDialog <RiskSignalOverviewDetailDialog v-model="isRiskOverviewDetailOpen" :row="riskOverviewDetailRow"
v-model="isRiskOverviewDetailOpen" name-field="signalTitle" post-date-field="signalTime" risk-level-field="signalLevel" />
:row="riskOverviewDetailRow"
name-field="signalTitle"
post-date-field="signalTime"
risk-level-field="signalLevel"
/>
</template> </template>
<script setup> <script setup>
...@@ -758,6 +600,7 @@ import { ...@@ -758,6 +600,7 @@ import {
import { getMultipleBarChart_m } from "./utils/charts"; import { getMultipleBarChart_m } from "./utils/charts";
import { formatAnyDateToChinese } from "./utils"; import { formatAnyDateToChinese } from "./utils";
import _ from "lodash"; import _ from "lodash";
import goToPage from "@/utils/goToPage/index";
const currentRuleCompany = ref(""); const currentRuleCompany = ref("");
const currentRuleCount = ref(0); const currentRuleCount = ref(0);
...@@ -1897,7 +1740,7 @@ const handleGetHylyList = async () => { ...@@ -1897,7 +1740,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({
...@@ -1994,11 +1837,12 @@ const handleEntityRowClick = row => { ...@@ -1994,11 +1837,12 @@ const handleEntityRowClick = row => {
// domains: row.tags[0], // domains: row.tags[0],
selectedDate: JSON.stringify([row.year + "-01-01", row.year + "-12-31"]) selectedDate: JSON.stringify([row.year + "-01-01", row.year + "-12-31"])
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityListEvent", // path: "/dataLibrary/dataEntityListEvent",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataSingleEntityEvent(params)
}; };
// 点击商业管制清单发布频次统计 // 点击商业管制清单发布频次统计
...@@ -2008,11 +1852,12 @@ const handleCommercialRowClick = row => { ...@@ -2008,11 +1852,12 @@ const handleCommercialRowClick = row => {
// domains: row.tags[0], // domains: row.tags[0],
selectedDate: JSON.stringify([row.year + "-01-01", row.year + "-12-31"]) selectedDate: JSON.stringify([row.year + "-01-01", row.year + "-12-31"])
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataCommerceControlListEvent", // path: "/dataLibrary/dataCommerceControlListEvent",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataSingleCCLEvent(params)
}; };
// 点击实体清单领域分布情况 // 点击实体清单领域分布情况
...@@ -2022,38 +1867,57 @@ const handleRadarChartClick = value => { ...@@ -2022,38 +1867,57 @@ const handleRadarChartClick = value => {
const params = { const params = {
isHalfRule: domainChecked.value isHalfRule: domainChecked.value
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
// 点击制裁清单数量增长趋势 // 点击制裁清单数量增长趋势
const handleMultiBarChartClick = val => { const handleMultiBarChartClick = val => {
const params = { let params
isHalfRule: trendChecked.value, if (selectedEntityId.value === 1) {
domains: val.seriesName, params = {
isCnEntityOnly: true, isHalfRule: trendChecked.value,
selectedDate: JSON.stringify([val.name + "-01-01", val.name + "-12-31"]) domains: val.seriesName,
}; isCnEntityOnly: true,
const route = router.resolve({ selectedDate: JSON.stringify([val.name + "-01-01", val.name + "-12-31"])
path: selectedEntityId.value === 1 ? "/dataLibrary/dataEntityList" : "/dataLibrary/dataCommerceControlList", };
query: params goToPage.goToDataEntityList(params)
}); } else {
window.open(route.href, "_blank"); params = {
isHalfRule: trendChecked.value,
domains: val.seriesName,
isCnEntityOnly: true,
selectedDate: JSON.stringify([val.name + "-01-01", val.name + "-12-31"]),
updateFlag: '1'
}
goToPage.goToDataCCLList(params)
}
// const route = router.resolve({
// path: selectedEntityId.value === 1 ? "/dataLibrary/dataEntityList" : "/dataLibrary/dataCommerceControlList",
// query: params
// });
// window.open(route.href, "_blank");
}; };
// 跳转到数据资源库 // 跳转到数据资源库
const handleToDataLibrary = item => { const handleToDataLibrary = item => {
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: { // query: {
isCnEntityOnly: true, // isCnEntityOnly: true,
selectedDate: JSON.stringify([item.postDate, item.postDate]) // selectedDate: JSON.stringify([item.postDate, item.postDate])
} // }
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
const params = {
isCnEntityOnly: true,
selectedDate: JSON.stringify([item.postDate, item.postDate])
}
goToPage.goToDataEntityList(params)
}; };
onMounted(async () => { onMounted(async () => {
...@@ -2232,6 +2096,7 @@ const handleMediaClick = item => { ...@@ -2232,6 +2096,7 @@ const handleMediaClick = item => {
padding-top: 16px; padding-top: 16px;
box-sizing: border-box; box-sizing: border-box;
padding-right: 24px; padding-right: 24px;
&-title { &-title {
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
...@@ -2503,6 +2368,7 @@ const handleMediaClick = item => { ...@@ -2503,6 +2368,7 @@ const handleMediaClick = item => {
} }
.box3-content { .box3-content {
// flex: 1; // flex: 1;
.el-progress--line { .el-progress--line {
width: 82px; width: 82px;
...@@ -2559,15 +2425,18 @@ const handleMediaClick = item => { ...@@ -2559,15 +2425,18 @@ const handleMediaClick = item => {
top: -7.5px; top: -7.5px;
padding-bottom: 8px; padding-bottom: 8px;
cursor: pointer; cursor: pointer;
&-top { &-top {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-bottom: 5px; margin-bottom: 5px;
} }
&-title { &-title {
font-size: 18px; font-size: 18px;
color: $base-color; color: $base-color;
font-weight: 700; font-weight: 700;
&:hover { &:hover {
text-decoration: underline; text-decoration: underline;
background: var(--color-primary-2); background: var(--color-primary-2);
......
...@@ -105,12 +105,8 @@ ...@@ -105,12 +105,8 @@
</div> </div>
</template> </template>
<!-- <div class="echarts" ref="sanctionCountChartRef"></div> --> <!-- <div class="echarts" ref="sanctionCountChartRef"></div> -->
<EChart <EChart :option="sanctionCountChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }"
:option="sanctionCountChartOption" @chart-click="handleToDataLibrary4" />
autoresize
:style="{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary4"
/>
<!-- <div class="bottom"> <!-- <div class="bottom">
<div class="ai"> <div class="ai">
<div class="left"> <div class="left">
...@@ -132,11 +128,8 @@ ...@@ -132,11 +128,8 @@
<!-- <AiButton /> <!-- <AiButton />
<AiPane :aiContent="sanctionCountChart.interpretation" /> --> <AiPane :aiContent="sanctionCountChart.interpretation" /> -->
<AiButton @mouseenter="handleShowAiPane('sanctionCountChart')" /> <AiButton @mouseenter="handleShowAiPane('sanctionCountChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.sanctionCountChart" :aiContent="overviewAiContent.sanctionCountChart"
v-if="aiPaneVisible?.sanctionCountChart" @mouseleave="handleHideAiPane('sanctionCountChart')" />
:aiContent="overviewAiContent.sanctionCountChart"
@mouseleave="handleHideAiPane('sanctionCountChart')"
/>
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div>
...@@ -150,22 +143,14 @@ ...@@ -150,22 +143,14 @@
<div class="map-wrapper"> <div class="map-wrapper">
<div class="map-chart" ref="mapChartRef"></div> <div class="map-chart" ref="mapChartRef"></div>
<div class="rank-list"> <div class="rank-list">
<div <div class="rank-item" v-for="(item, index) in rankData" :key="index" @click="handleToDataLibrary5(item)">
class="rank-item"
v-for="(item, index) in rankData"
:key="index"
@click="handleToDataLibrary5(item)"
>
<div class="rank-index" :class="'rank-' + (index + 1)">{{ index + 1 }}</div> <div class="rank-index" :class="'rank-' + (index + 1)">{{ index + 1 }}</div>
<div class="rank-name">{{ item.name }}</div> <div class="rank-name">{{ item.name }}</div>
<div class="rank-bar-bg"> <div class="rank-bar-bg">
<div <div class="rank-bar-fill" :style="{
class="rank-bar-fill" width: (item.value / maxRankValue) * 100 + '%',
:style="{ background: getBarColor(index)
width: (item.value / maxRankValue) * 100 + '%', }"></div>
background: getBarColor(index)
}"
></div>
</div> </div>
<div class="rank-value">{{ item.value }}家</div> <div class="rank-value">{{ item.value }}家</div>
</div> </div>
...@@ -181,11 +166,8 @@ ...@@ -181,11 +166,8 @@
<!-- <AiButton /> <!-- <AiButton />
<AiPane :aiContent="rankChart.interpretation" /> --> <AiPane :aiContent="rankChart.interpretation" /> -->
<AiButton @mouseenter="handleShowAiPane('rankChart')" /> <AiButton @mouseenter="handleShowAiPane('rankChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.rankChart" :aiContent="overviewAiContent.rankChart"
v-if="aiPaneVisible?.rankChart" @mouseleave="handleHideAiPane('rankChart')" />
:aiContent="overviewAiContent.rankChart"
@mouseleave="handleHideAiPane('rankChart')"
/>
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div>
...@@ -197,12 +179,8 @@ ...@@ -197,12 +179,8 @@
</el-select> </el-select>
</template> </template>
<!-- <div class="echarts" ref="domainChartRef"></div> --> <!-- <div class="echarts" ref="domainChartRef"></div> -->
<EChart <EChart :option="domainChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }"
:option="domainChartOption" @chart-click="handleToDataLibrary6" />
autoresize
:style="{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary6"
/>
<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="" />
...@@ -213,11 +191,8 @@ ...@@ -213,11 +191,8 @@
<!-- <AiButton /> <!-- <AiButton />
<AiPane :aiContent="domainChart.interpretation" /> --> <AiPane :aiContent="domainChart.interpretation" /> -->
<AiButton @mouseenter="handleShowAiPane('domainChart')" /> <AiButton @mouseenter="handleShowAiPane('domainChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.domainChart" :aiContent="overviewAiContent.domainChart"
v-if="aiPaneVisible?.domainChart" @mouseleave="handleHideAiPane('domainChart')" />
:aiContent="overviewAiContent.domainChart"
@mouseleave="handleHideAiPane('domainChart')"
/>
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div>
...@@ -229,12 +204,8 @@ ...@@ -229,12 +204,8 @@
</el-select> </el-select>
</template> </template>
<!-- <div class="echarts" ref="typeChartRef"></div> --> <!-- <div class="echarts" ref="typeChartRef"></div> -->
<EChart <EChart :option="typeChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }"
:option="typeChartOption" @chart-click="handleToDataLibrary7" />
autoresize
:style="{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary7"
/>
<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="" />
...@@ -245,11 +216,8 @@ ...@@ -245,11 +216,8 @@
<!-- <AiButton /> <!-- <AiButton />
<AiPane :aiContent="typeChart.interpretation" /> --> <AiPane :aiContent="typeChart.interpretation" /> -->
<AiButton @mouseenter="handleShowAiPane('typeChart')" /> <AiButton @mouseenter="handleShowAiPane('typeChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.typeChart" :aiContent="overviewAiContent.typeChart"
v-if="aiPaneVisible?.typeChart" @mouseleave="handleHideAiPane('typeChart')" />
:aiContent="overviewAiContent.typeChart"
@mouseleave="handleHideAiPane('typeChart')"
/>
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div>
...@@ -277,6 +245,7 @@ import tipsIcon from "../../../assets/icons/info-icon.png"; ...@@ -277,6 +245,7 @@ import tipsIcon from "../../../assets/icons/info-icon.png";
import AiButton from "@/components/base/Ai/AiButton/index.vue"; import AiButton from "@/components/base/Ai/AiButton/index.vue";
import AiPane from "@/components/base/Ai/AiPane/index.vue"; import AiPane from "@/components/base/Ai/AiPane/index.vue";
import { useChartInterpretation } from "@/views/exportControl/utils/common"; import { useChartInterpretation } from "@/views/exportControl/utils/common";
import goToPage from "@/utils/goToPage/index";
// const sanctionCountChart = useChartInterpretation(); // const sanctionCountChart = useChartInterpretation();
const domainChart = useChartInterpretation(); const domainChart = useChartInterpretation();
const typeChart = useChartInterpretation(); const typeChart = useChartInterpretation();
...@@ -658,11 +627,12 @@ const updateMapChart = () => { ...@@ -658,11 +627,12 @@ const updateMapChart = () => {
selectedDate: selectedDate:
regionTime.value === "all" ? null : JSON.stringify([regionTime.value + "-01-01", regionTime.value + "-12-31"]) regionTime.value === "all" ? null : JSON.stringify([regionTime.value + "-01-01", regionTime.value + "-12-31"])
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: param // query: param
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataEntityList(param)
}); });
}; };
...@@ -1003,10 +973,10 @@ const updateTypeChart = () => { ...@@ -1003,10 +973,10 @@ const updateTypeChart = () => {
let data = typeData.value.length let data = typeData.value.length
? [...typeData.value] ? [...typeData.value]
: [ : [
{ value: 50, name: "企业" }, { value: 50, name: "企业" },
{ value: 32, name: "高校" }, { value: 32, name: "高校" },
{ value: 32, name: "科研院所" } { value: 32, name: "科研院所" }
]; ];
// 2. 聚合逻辑:保留前5项,其余合并为“其他” // 2. 聚合逻辑:保留前5项,其余合并为“其他”
data.sort((a, b) => b.value - a.value); data.sort((a, b) => b.value - a.value);
...@@ -1047,11 +1017,12 @@ const handleToDataLibrary4 = val => { ...@@ -1047,11 +1017,12 @@ const handleToDataLibrary4 = val => {
? JSON.stringify([val.name + "-01-01", val.name + "-12-31"]) ? JSON.stringify([val.name + "-01-01", val.name + "-12-31"])
: JSON.stringify([val.name, val.name]) : JSON.stringify([val.name, val.name])
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
// 制裁实体各省分布情况 // 制裁实体各省分布情况
...@@ -1062,11 +1033,12 @@ const handleToDataLibrary5 = item => { ...@@ -1062,11 +1033,12 @@ const handleToDataLibrary5 = item => {
selectedDate: selectedDate:
regionTime.value === "all" ? null : JSON.stringify([regionTime.value + "-01-01", regionTime.value + "-12-31"]) regionTime.value === "all" ? null : JSON.stringify([regionTime.value + "-01-01", regionTime.value + "-12-31"])
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
// 制裁实体领域分布情况 // 制裁实体领域分布情况
...@@ -1077,11 +1049,12 @@ const handleToDataLibrary6 = val => { ...@@ -1077,11 +1049,12 @@ const handleToDataLibrary6 = val => {
selectedDate: selectedDate:
domainTime.value === "all" ? null : JSON.stringify([domainTime.value + "-01-01", domainTime.value + "-12-31"]) domainTime.value === "all" ? null : JSON.stringify([domainTime.value + "-01-01", domainTime.value + "-12-31"])
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
// 制裁实体类型分布情况 // 制裁实体类型分布情况
...@@ -1091,53 +1064,71 @@ const handleToDataLibrary7 = val => { ...@@ -1091,53 +1064,71 @@ const handleToDataLibrary7 = val => {
selectedEntityType: val.name, selectedEntityType: val.name,
selectedDate: typeTime.value === "all" ? null : JSON.stringify([typeTime.value + "-01-01", typeTime.value + "-12-31"]) selectedDate: typeTime.value === "all" ? null : JSON.stringify([typeTime.value + "-01-01", typeTime.value + "-12-31"])
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
// 跳转到数据资源库 // 跳转到数据资源库
const handleToDataLibrary = () => { const handleToDataLibrary = () => {
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: { // query: {
isCnEntityOnly: true // isCnEntityOnly: true
} // }
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
const params = {
isCnEntityOnly: true
}
goToPage.goToDataEntityList(params)
}; };
const handleToDataLibrary1 = () => { const handleToDataLibrary1 = () => {
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: { // query: {
isCnEntityOnly: true, // isCnEntityOnly: true,
isHalfRule: true // isHalfRule: true
} // }
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
const params = {
isCnEntityOnly: true,
isHalfRule: true
}
goToPage.goToDataEntityList(params)
}; };
const handleToDataLibrary2 = () => { const handleToDataLibrary2 = () => {
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: { // query: {
selectedDate: JSON.stringify([currentYear + "01-01", currentYear + "12-31"]) // selectedDate: JSON.stringify([currentYear + "01-01", currentYear + "12-31"])
} // }
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
const params = {
selectedDate: JSON.stringify([currentYear + "01-01", currentYear + "12-31"])
}
goToPage.goToDataEntityList(params)
}; };
const handleToDataLibrary3 = time => { const handleToDataLibrary3 = time => {
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: { // query: {
selectedDate: JSON.stringify([time, time]) // selectedDate: JSON.stringify([time, time])
} // }
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
const params = {
selectedDate: JSON.stringify([time, time])
}
goToPage.goToDataEntityList(params)
}; };
const requestAiPaneContent = async key => { const requestAiPaneContent = async key => {
...@@ -1308,6 +1299,7 @@ onMounted(() => { ...@@ -1308,6 +1299,7 @@ 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);
position: relative; position: relative;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
background: var(--color-primary-2); background: var(--color-primary-2);
} }
......
...@@ -173,7 +173,7 @@ import { ArrowDown } from "@element-plus/icons-vue"; ...@@ -173,7 +173,7 @@ import { ArrowDown } from "@element-plus/icons-vue";
import CommonPrompt from "../../../../../commonPrompt/index.vue"; import CommonPrompt from "../../../../../commonPrompt/index.vue";
import { getEntityInfo, getPublishInfo, getPublishOrgInfo, getEntityUpdateInfo } from "@/api/exportControlV2.0.js"; import { getEntityInfo, getPublishInfo, getPublishOrgInfo, getEntityUpdateInfo } from "@/api/exportControlV2.0.js";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import goToPage from "@/utils/goToPage/index";
const route = useRoute(); const route = useRoute();
// 处理点击发布机构的方法 // 处理点击发布机构的方法
const handleClickOrg = item => { const handleClickOrg = item => {
...@@ -410,11 +410,12 @@ const handleToDataLibrary = item => { ...@@ -410,11 +410,12 @@ const handleToDataLibrary = item => {
selectedDate: JSON.stringify([item.postDate, item.postDate]) selectedDate: JSON.stringify([item.postDate, item.postDate])
}; };
} }
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
onMounted(() => { onMounted(() => {
......
...@@ -192,6 +192,7 @@ import { getExportControlList, get50PercentEntityCount } from "@/api/exportContr ...@@ -192,6 +192,7 @@ import { getExportControlList, get50PercentEntityCount } from "@/api/exportContr
import CommonPrompt from "@/views/exportControl/commonPrompt/index.vue"; import CommonPrompt from "@/views/exportControl/commonPrompt/index.vue";
import { useGotoCompanyPages } from "@/router/modules/company"; import { useGotoCompanyPages } from "@/router/modules/company";
import TimeSortSelectBox from "@/components/base/TimeSortSelectBox/index.vue"; import TimeSortSelectBox from "@/components/base/TimeSortSelectBox/index.vue";
import goToPage from "@/utils/goToPage/index";
const gotoCompanyPages = useGotoCompanyPages(); const gotoCompanyPages = useGotoCompanyPages();
const router = useRouter(); const router = useRouter();
...@@ -531,22 +532,24 @@ const handlToDataLibrary = () => { ...@@ -531,22 +532,24 @@ const handlToDataLibrary = () => {
const params = { const params = {
isCnEntityOnly: true isCnEntityOnly: true
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
const handlToDataLibrary1 = () => { const handlToDataLibrary1 = () => {
const params = { const params = {
isCnEntityOnly: true, isCnEntityOnly: true,
isHalfRule: true isHalfRule: true
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
</script> </script>
......
...@@ -54,12 +54,8 @@ ...@@ -54,12 +54,8 @@
</div> </div>
</div> </div>
</div> --> </div> -->
<EChart <EChart :option="domainChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }"
:option="domainChartOption" @chart-click="handleToDataLibrary3" />
autoresize
:style="{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary3"
/>
<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="" />
...@@ -70,22 +66,15 @@ ...@@ -70,22 +66,15 @@
<!-- <AiButton /> <!-- <AiButton />
<AiPane :aiContent="domainChart.interpretation" /> --> <AiPane :aiContent="domainChart.interpretation" /> -->
<AiButton @mouseenter="handleShowAiPane('domainChart')" /> <AiButton @mouseenter="handleShowAiPane('domainChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.domainChart" :aiContent="overviewAiContent.domainChart"
v-if="aiPaneVisible?.domainChart" @mouseleave="handleHideAiPane('domainChart')" />
:aiContent="overviewAiContent.domainChart"
@mouseleave="handleHideAiPane('domainChart')"
/>
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div>
<div class="main-item"> <div class="main-item">
<AnalysisBox title="制裁实体类型分布情况"> <AnalysisBox title="制裁实体类型分布情况">
<EChart <EChart :option="typeChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }"
:option="typeChartOption" @chart-click="handleToDataLibrary4" />
autoresize
:style="{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary4"
/>
<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="" />
...@@ -96,33 +85,23 @@ ...@@ -96,33 +85,23 @@
<!-- <AiButton /> <!-- <AiButton />
<AiPane :aiContent="typeChart.interpretation" /> --> <AiPane :aiContent="typeChart.interpretation" /> -->
<AiButton @mouseenter="handleShowAiPane('typeChart')" /> <AiButton @mouseenter="handleShowAiPane('typeChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.typeChart" :aiContent="overviewAiContent.typeChart"
v-if="aiPaneVisible?.typeChart" @mouseleave="handleHideAiPane('typeChart')" />
:aiContent="overviewAiContent.typeChart"
@mouseleave="handleHideAiPane('typeChart')"
/>
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div>
<div class="main-item"> <div class="main-item">
<AnalysisBox title="制裁实体国家地区分布情况"> <AnalysisBox title="制裁实体国家地区分布情况">
<div class="country-list"> <div class="country-list">
<div <div class="list-item" v-for="(item, index) in countryDistribution" :key="index"
class="list-item" @click="handleToDataLibrary5(item)">
v-for="(item, index) in countryDistribution"
:key="index"
@click="handleToDataLibrary5(item)"
>
<img :src="flag" alt="" class="flag" /> <img :src="flag" alt="" class="flag" />
<div class="country-name">{{ item.name }}</div> <div class="country-name">{{ item.name }}</div>
<div class="progress-bar-container"> <div class="progress-bar-container">
<div <div class="progress-bar" :style="{
class="progress-bar" width: item.width,
:style="{ background: item.gradient
width: item.width, }"></div>
background: item.gradient
}"
></div>
</div> </div>
<div class="count" :class="{ highlight: index === 0 }">{{ item.count }}</div> <div class="count" :class="{ highlight: index === 0 }">{{ item.count }}</div>
</div> </div>
...@@ -137,11 +116,9 @@ ...@@ -137,11 +116,9 @@
<!-- <AiButton /> <!-- <AiButton />
<AiPane :aiContent="countryDistributionChart.interpretation" /> --> <AiPane :aiContent="countryDistributionChart.interpretation" /> -->
<AiButton @mouseenter="handleShowAiPane('countryDistributionChart')" /> <AiButton @mouseenter="handleShowAiPane('countryDistributionChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.countryDistributionChart"
v-if="aiPaneVisible?.countryDistributionChart"
:aiContent="overviewAiContent.countryDistributionChart" :aiContent="overviewAiContent.countryDistributionChart"
@mouseleave="handleHideAiPane('countryDistributionChart')" @mouseleave="handleHideAiPane('countryDistributionChart')" />
/>
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div>
...@@ -150,22 +127,15 @@ ...@@ -150,22 +127,15 @@
<div class="map-wrapper"> <div class="map-wrapper">
<div class="map-chart" ref="mapChartRef"></div> <div class="map-chart" ref="mapChartRef"></div>
<div class="rank-list"> <div class="rank-list">
<div <div class="rank-item" v-for="(item, index) in regionDistribution" :key="index"
class="rank-item" @click="handleToDataLibrary6(item)">
v-for="(item, index) in regionDistribution"
:key="index"
@click="handleToDataLibrary6(item)"
>
<div class="rank-index" :class="'rank-' + (index + 1)">{{ index + 1 }}</div> <div class="rank-index" :class="'rank-' + (index + 1)">{{ index + 1 }}</div>
<div class="rank-name">{{ item.name }}</div> <div class="rank-name">{{ item.name }}</div>
<div class="rank-bar-bg"> <div class="rank-bar-bg">
<div <div class="rank-bar-fill" :style="{
class="rank-bar-fill" width: (maxRegionCount > 0 ? (item.count / maxRegionCount) * 100 : 0) + '%',
:style="{ background: getBarColor(index)
width: (maxRegionCount > 0 ? (item.count / maxRegionCount) * 100 : 0) + '%', }"></div>
background: getBarColor(index)
}"
></div>
</div> </div>
<div class="rank-value">{{ item.count }}</div> <div class="rank-value">{{ item.count }}</div>
</div> </div>
...@@ -181,11 +151,8 @@ ...@@ -181,11 +151,8 @@
<!-- <AiButton /> <!-- <AiButton />
<AiPane :aiContent="regionDistributionChart.interpretation" /> --> <AiPane :aiContent="regionDistributionChart.interpretation" /> -->
<AiButton @mouseenter="handleShowAiPane('regionDistributionChart')" /> <AiButton @mouseenter="handleShowAiPane('regionDistributionChart')" />
<AiPane <AiPane v-if="aiPaneVisible?.regionDistributionChart" :aiContent="overviewAiContent.regionDistributionChart"
v-if="aiPaneVisible?.regionDistributionChart" @mouseleave="handleHideAiPane('regionDistributionChart')" />
:aiContent="overviewAiContent.regionDistributionChart"
@mouseleave="handleHideAiPane('regionDistributionChart')"
/>
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div>
...@@ -213,7 +180,7 @@ import { ...@@ -213,7 +180,7 @@ import {
getSingleSanctionEntityRegionCount getSingleSanctionEntityRegionCount
} from "@/api/exportControlV2.0"; } from "@/api/exportControlV2.0";
import { getChartAnalysis } from "@/api/aiAnalysis/index"; import { getChartAnalysis } from "@/api/aiAnalysis/index";
import goToPage from "@/utils/goToPage/index";
import { useChartInterpretation } from "@/views/exportControl/utils/common"; import { useChartInterpretation } from "@/views/exportControl/utils/common";
const domainChart = useChartInterpretation(); const domainChart = useChartInterpretation();
const typeChart = useChartInterpretation(); const typeChart = useChartInterpretation();
...@@ -462,11 +429,12 @@ const initMapChart = () => { ...@@ -462,11 +429,12 @@ const initMapChart = () => {
selectedProvince: params.name, selectedProvince: params.name,
selectedDate: JSON.stringify([route.query.date, route.query.date]) selectedDate: JSON.stringify([route.query.date, route.query.date])
}; };
const curRoute = router.resolve({ // const curRoute = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: param // query: param
}); // });
window.open(curRoute.href, "_blank"); // window.open(curRoute.href, "_blank");
goToPage.goToDataEntityList(param)
}); });
window.addEventListener("resize", () => { window.addEventListener("resize", () => {
...@@ -845,11 +813,12 @@ const handleToDataLibrary3 = val => { ...@@ -845,11 +813,12 @@ const handleToDataLibrary3 = val => {
isCnEntityOnly: true, isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date]) selectedDate: JSON.stringify([route.query.date, route.query.date])
}; };
const curRoute = router.resolve({ // const curRoute = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(curRoute.href, "_blank"); // window.open(curRoute.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
// 制裁实体类型分布情况 // 制裁实体类型分布情况
...@@ -860,25 +829,28 @@ const handleToDataLibrary4 = val => { ...@@ -860,25 +829,28 @@ const handleToDataLibrary4 = val => {
isCnEntityOnly: true, isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date]) selectedDate: JSON.stringify([route.query.date, route.query.date])
}; };
const curRoute = router.resolve({ // const curRoute = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(curRoute.href, "_blank"); // window.open(curRoute.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
// 制裁实体国家地区分布情况 // 制裁实体国家地区分布情况
const handleToDataLibrary5 = item => { const handleToDataLibrary5 = item => {
alert(item.id)
const params = { const params = {
selectedCountryId: item.id, selectedCountryId: item.id,
isCnEntityOnly: true, // isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date]) selectedDate: JSON.stringify([route.query.date, route.query.date])
}; };
const curRoute = router.resolve({ // const curRoute = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(curRoute.href, "_blank"); // window.open(curRoute.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
// 制裁实体各省分布情况 // 制裁实体各省分布情况
...@@ -889,49 +861,66 @@ const handleToDataLibrary6 = item => { ...@@ -889,49 +861,66 @@ const handleToDataLibrary6 = item => {
isCnEntityOnly: true, isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date]) selectedDate: JSON.stringify([route.query.date, route.query.date])
}; };
const curRoute = router.resolve({ // const curRoute = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(curRoute.href, "_blank"); // window.open(curRoute.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
// 跳转到数据资源库 // 跳转到数据资源库
const handleToDataLibrary = () => { const handleToDataLibrary = () => {
const dateStr = route.query.date ? route.query.date : ""; const dateStr = route.query.date ? route.query.date : "";
const curRoute = router.resolve({ // const curRoute = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: { // query: {
isCnEntityOnly: true, // isCnEntityOnly: true,
selectedDate: JSON.stringify([dateStr, dateStr]) // selectedDate: JSON.stringify([dateStr, dateStr])
} // }
}); // });
window.open(curRoute.href, "_blank"); // window.open(curRoute.href, "_blank");
const params = {
isCnEntityOnly: true,
selectedDate: JSON.stringify([dateStr, dateStr])
}
goToPage.goToDataEntityList(params)
}; };
const handleToDataLibrary1 = () => { const handleToDataLibrary1 = () => {
const dateStr = route.query.date ? route.query.date : ""; const dateStr = route.query.date ? route.query.date : "";
const curRoute = router.resolve({ // const curRoute = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: { // query: {
isCnEntityOnly: true, // isCnEntityOnly: true,
isHalfRule: true, // isHalfRule: true,
selectedDate: JSON.stringify([dateStr, dateStr]) // selectedDate: JSON.stringify([dateStr, dateStr])
} // }
}); // });
window.open(curRoute.href, "_blank"); // window.open(curRoute.href, "_blank");
const params = {
isCnEntityOnly: true,
isHalfRule: true,
selectedDate: JSON.stringify([dateStr, dateStr])
}
goToPage.goToDataEntityList(params)
}; };
const handleToDataLibrary2 = () => { const handleToDataLibrary2 = () => {
const dateStr = route.query.date ? route.query.date : ""; const dateStr = route.query.date ? route.query.date : "";
const curRoute = router.resolve({ // const curRoute = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: { // query: {
isCnEntityOnly: true, // isCnEntityOnly: true,
selectedDate: JSON.stringify([dateStr, dateStr]) // selectedDate: JSON.stringify([dateStr, dateStr])
} // }
}); // });
window.open(curRoute.href, "_blank"); // window.open(curRoute.href, "_blank");
const params = {
isCnEntityOnly: true,
selectedDate: JSON.stringify([dateStr, dateStr])
}
goToPage.goToDataEntityList(params)
}; };
const requestAiPaneContent = async key => { const requestAiPaneContent = async key => {
...@@ -1151,6 +1140,7 @@ onMounted(() => { ...@@ -1151,6 +1140,7 @@ onMounted(() => {
.number { .number {
display: flex; display: flex;
align-items: baseline; align-items: baseline;
&:hover { &:hover {
text-decoration: underline; text-decoration: underline;
text-decoration-color: #cd4246; text-decoration-color: #cd4246;
......
...@@ -243,7 +243,7 @@ import { ...@@ -243,7 +243,7 @@ import {
} from "@/api/exportControlV2.0"; } from "@/api/exportControlV2.0";
import RuleSubsidiaryDialog from "../../../v2.0EntityList/components/sanctionsOverview/components/listPage/RuleSubsidiaryDialog.vue"; import RuleSubsidiaryDialog from "../../../v2.0EntityList/components/sanctionsOverview/components/listPage/RuleSubsidiaryDialog.vue";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import goToPage from "@/utils/goToPage/index";
import { useGotoCompanyPages } from "@/router/modules/company"; import { useGotoCompanyPages } from "@/router/modules/company";
const gotoCompanyPages = useGotoCompanyPages(); const gotoCompanyPages = useGotoCompanyPages();
...@@ -570,14 +570,19 @@ const handleToDataLibrary = item => { ...@@ -570,14 +570,19 @@ const handleToDataLibrary = item => {
(_, y, m, d) => `${y}-${m.padStart(2, "0")}-${d.padStart(2, "0")}` (_, y, m, d) => `${y}-${m.padStart(2, "0")}-${d.padStart(2, "0")}`
); );
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: { // query: {
selectedDate: JSON.stringify([dateStr, dateStr]), // selectedDate: JSON.stringify([dateStr, dateStr]),
// selectedCountryId: item.id
// }
// });
// window.open(route.href, "_blank");
const params = {
selectedDate: JSON.stringify([dateStr, dateStr]),
selectedCountryId: item.id selectedCountryId: item.id
} }
}); goToPage.goToDataEntityList(params)
window.open(route.href, "_blank");
}; };
onMounted(() => { onMounted(() => {
......
...@@ -104,7 +104,8 @@ ...@@ -104,7 +104,8 @@
</div> </div>
</div> </div>
</template> </template>
<EChart :option="sanctionCountChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" @chart-click="handleToDataLibrary4" /> <EChart :option="sanctionCountChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary4" />
<div class="data-origin-box"> <div class="data-origin-box">
<div class="data-origin-icon"> <div class="data-origin-icon">
...@@ -165,7 +166,8 @@ ...@@ -165,7 +166,8 @@
<el-option v-for="item in timeOptions" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in timeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</template> </template>
<EChart :option="domainChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" @chart-click="handleToDataLibrary6" /> <EChart :option="domainChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary6" />
<div class="data-origin-box"> <div class="data-origin-box">
<div class="data-origin-icon"> <div class="data-origin-icon">
...@@ -199,7 +201,8 @@ ...@@ -199,7 +201,8 @@
</div> </div>
</div> </div>
</template> </template>
<EChart :option="domainNumChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" @chart-click="handleToDataLibrary5" /> <EChart :option="domainNumChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary5" />
<div class="data-origin-box"> <div class="data-origin-box">
<div class="data-origin-icon"> <div class="data-origin-icon">
...@@ -223,7 +226,8 @@ ...@@ -223,7 +226,8 @@
</el-select> </el-select>
</template> </template>
<!-- <div class="echarts" ref="typeChartRef"></div> --> <!-- <div class="echarts" ref="typeChartRef"></div> -->
<EChart :option="typeChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" @chart-click="handleToDataLibrary7" /> <EChart :option="typeChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary7" />
<!-- <div class="bottom"> <!-- <div class="bottom">
<div class="ai"> <div class="ai">
<div class="left"> <div class="left">
...@@ -275,6 +279,7 @@ import tipsIcon from "../../../assets/icons/info-icon.png"; ...@@ -275,6 +279,7 @@ import tipsIcon from "../../../assets/icons/info-icon.png";
import AiButton from "@/components/base/Ai/AiButton/index.vue"; import AiButton from "@/components/base/Ai/AiButton/index.vue";
import AiPane from "@/components/base/Ai/AiPane/index.vue"; import AiPane from "@/components/base/Ai/AiPane/index.vue";
import { useChartInterpretation } from "@/views/exportControl/utils/common"; import { useChartInterpretation } from "@/views/exportControl/utils/common";
import goToPage from "@/utils/goToPage/index";
const sanctionCountChart = useChartInterpretation(); const sanctionCountChart = useChartInterpretation();
const domainChart = useChartInterpretation(); const domainChart = useChartInterpretation();
const domainNumChart = useChartInterpretation(); const domainNumChart = useChartInterpretation();
...@@ -1329,7 +1334,7 @@ const handleToDataLibrary4 = val => { ...@@ -1329,7 +1334,7 @@ const handleToDataLibrary4 = val => {
// 制裁实体各省分布情况 // 制裁实体各省分布情况
const handleToDataLibrary5 = item => { const handleToDataLibrary5 = item => {
console.log('item', item); console.log('item', item);
const params = { const params = {
domains: item.seriesName, domains: item.seriesName,
isCnEntityOnly: true, isCnEntityOnly: true,
...@@ -1352,11 +1357,12 @@ const handleToDataLibrary6 = val => { ...@@ -1352,11 +1357,12 @@ const handleToDataLibrary6 = val => {
selectedDate: selectedDate:
domainTime.value === "all" ? null : JSON.stringify([domainTime.value + "-01-01", domainTime.value + "-12-31"]) domainTime.value === "all" ? null : JSON.stringify([domainTime.value + "-01-01", domainTime.value + "-12-31"])
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataEntityList(params)
}; };
// 制裁实体类型分布情况 // 制裁实体类型分布情况
...@@ -1367,11 +1373,12 @@ const handleToDataLibrary7 = val => { ...@@ -1367,11 +1373,12 @@ const handleToDataLibrary7 = val => {
selectedEntityType: val.name, selectedEntityType: val.name,
selectedDate: typeTime.value === "all" ? null : JSON.stringify([typeTime.value + "-01-01", typeTime.value + "-12-31"]) selectedDate: typeTime.value === "all" ? null : JSON.stringify([typeTime.value + "-01-01", typeTime.value + "-12-31"])
}; };
const route = router.resolve({ // const route = router.resolve({
path: "/dataLibrary/dataEntityList", // path: "/dataLibrary/dataEntityList",
query: params // query: params
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToDataEntityList(params)
} }
onMounted(() => { onMounted(() => {
...@@ -1837,6 +1844,7 @@ onMounted(() => { ...@@ -1837,6 +1844,7 @@ onMounted(() => {
right: 0px; right: 0px;
bottom: 15px; bottom: 15px;
z-index: 999; z-index: 999;
:deep(.ai-pane-wrapper) { :deep(.ai-pane-wrapper) {
display: none; display: none;
} }
......
...@@ -66,18 +66,7 @@ import { getPersonType } from "@/api/common/index"; ...@@ -66,18 +66,7 @@ import { getPersonType } from "@/api/common/index";
// import { useDraggable } from "@vueuse/core"; // import { useDraggable } from "@vueuse/core";
import ModuleHeader from '@/components/base/moduleHeader/index.vue' import ModuleHeader from '@/components/base/moduleHeader/index.vue'
import Menu1 from "@/assets/icons/overview/menu1.png";
import Menu2 from "@/assets/icons/overview/menu2.png";
import Menu3 from "@/assets/icons/overview/menu3.png";
import Menu4 from "@/assets/icons/overview/menu4.png";
import Menu5 from "@/assets/icons/overview/menu5.png";
import Menu6 from "@/assets/icons/overview/menu6.png";
import Menu7 from "@/assets/icons/overview/menu7.png";
import Menu8 from "@/assets/icons/overview/menu8.png";
import Menu9 from "@/assets/icons/overview/menu9.png";
import Menu10 from "@/assets/icons/overview/menu10.png";
import Menu11 from "@/assets/icons/overview/menu11.png";
import Menu12 from "@/assets/icons/overview/menu12.png";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
const router = useRouter(); const router = useRouter();
...@@ -117,115 +106,6 @@ const handleGetPersonType = async () => { ...@@ -117,115 +106,6 @@ const handleGetPersonType = async () => {
} catch (error) { } } catch (error) { }
}; };
const isCurrentOverview = computed(() => {
if (route.path === "/ZMOverView") {
return true;
} else {
return false;
}
});
const isShowMenu = ref(false);
const handleShowMenu = (index, isShow) => {
if (index === 0) {
isShowMenu.value = isShow;
}
};
const handleHoverMenu = isShow => {
isShowMenu.value = isShow;
};
const menuList = ref([
{
title: "中美科技博弈概览",
icon: Menu1,
path: "/ZMOverView"
},
{
title: "科技法案",
icon: Menu2,
path: "/billHome"
},
{
title: "科技政令",
icon: Menu3,
path: "/decree"
},
{
title: "美国科技智库",
icon: Menu4,
path: "/thinkTank"
},
{
title: "出口管制",
icon: Menu5,
path: "/exportControl"
},
{
title: "科研合作限制",
icon: Menu6,
path: "/cooperationRestrictions"
},
{
title: "投融资限制",
icon: Menu7,
path: "/finance"
},
{
title: "市场准入限制",
icon: Menu8,
path: "/marketAccessRestrictions"
},
{
title: "规则限制",
icon: Menu9,
path: "/ruleRestrictions"
},
{
title: "美国科技人物观点",
icon: Menu10,
path: "/technologyFigures"
},
{
title: "美国主要创新主体动向",
icon: Menu11,
path: "/innovationSubject"
},
{
title: "美国科研资助体系",
icon: Menu12,
path: "/scientificFunding"
}
]);
const handleToModule = item => {
const curRoute = router.resolve({
path: item.path
});
window.open(curRoute.href, "_blank");
};
const searchText = ref("");
const handleSearch = () => {
const curRoute = router.resolve({
path: "/searchResults",
query: {
searchText: searchText.value
}
});
window.open(curRoute.href, "_blank");
};
const handleClickTitle = item => {
if (item.name === "主要国家科技动向感知" || item.name === "主要国家竞争科技安全") {
ElMessage.warning("当前功能正在开发中,敬请期待!");
}
};
const handleOpenPage = page => { const handleOpenPage = page => {
const pageObj = { const pageObj = {
znwd: "/chat", znwd: "/chat",
......
...@@ -293,10 +293,10 @@ import defaultNewsIcon from "@/assets/icons/default-icon-news.png"; ...@@ -293,10 +293,10 @@ import defaultNewsIcon from "@/assets/icons/default-icon-news.png";
import AreaTag from "@/components/base/AreaTag/index.vue"; import AreaTag from "@/components/base/AreaTag/index.vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { getDecodedParams } from "@/utils/goToPage"; import goToPage from "@/utils/goToPage";
const router = useRouter(); const router = useRouter();
const thinkTankId = computed(() => getDecodedParams()); const thinkTankId = computed(() => goToPage.getDecodedParams());
const loading = ref(false); const loading = ref(false);
const pageScrollRef = ref(null); const pageScrollRef = ref(null);
......
...@@ -64,7 +64,7 @@ import PolicyTracking from "./PolicyTracking/index.vue"; ...@@ -64,7 +64,7 @@ import PolicyTracking from "./PolicyTracking/index.vue";
import ThinkInfo from "./thinkInfo/index.vue"; import ThinkInfo from "./thinkInfo/index.vue";
import { getThinkTankSummary } from "@/api/thinkTank/overview"; import { getThinkTankSummary } from "@/api/thinkTank/overview";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { getDecodedParams } from "@/utils/goToPage"; import goToPage from "@/utils/goToPage";
const router = useRouter(); const router = useRouter();
const tabActiveName = ref("智库动态"); const tabActiveName = ref("智库动态");
...@@ -75,7 +75,7 @@ const switchTab = name => { ...@@ -75,7 +75,7 @@ const switchTab = name => {
const thinkTank = ref({}); const thinkTank = ref({});
// 获取智库基本信息 // 获取智库基本信息
const handleGetThinkTankSummary = async () => { const handleGetThinkTankSummary = async () => {
const id = getDecodedParams() const id = goToPage.getDecodedParams()
try { try {
const parmas = { const parmas = {
......
...@@ -78,11 +78,11 @@ import { ...@@ -78,11 +78,11 @@ import {
getResourceLibraryReportDateRangeFromTimeSelection getResourceLibraryReportDateRangeFromTimeSelection
} from "../../utils/resourceLibraryFilters"; } from "../../utils/resourceLibraryFilters";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { getDecodedParams } from "@/utils/goToPage";
import ThinkTankReport from "./ThinkTankReport/index.vue"; import ThinkTankReport from "./ThinkTankReport/index.vue";
import CongressHearing from "./CongressHearing/index.vue"; import CongressHearing from "./CongressHearing/index.vue";
import goToPage from "@/utils/goToPage";
const router = useRouter(); const router = useRouter();
const thinkTankId = computed(() => getDecodedParams()); const thinkTankId = computed(() => goToPage.getDecodedParams());
const isThinkTankReport = ref(true); const isThinkTankReport = ref(true);
const isSurveyForm = ref(false); const isSurveyForm = ref(false);
const isCongressHearing = ref(false); const isCongressHearing = ref(false);
......
...@@ -259,7 +259,6 @@ import { ref, onMounted, nextTick, computed } from "vue"; ...@@ -259,7 +259,6 @@ import { ref, onMounted, nextTick, computed } from "vue";
import setChart from "@/utils/setChart"; import setChart from "@/utils/setChart";
import getPieChart from "./utils/piechart"; import getPieChart from "./utils/piechart";
import getTreeMapChart from "./utils/treeMapChart"; import getTreeMapChart from "./utils/treeMapChart";
import { getDecodedParams } from "@/utils/goToPage";
import { import {
getThinkTankInfoBasic, getThinkTankInfoBasic,
getThinkTankInfoBranch, getThinkTankInfoBranch,
...@@ -273,9 +272,10 @@ import { useRouter } from "vue-router"; ...@@ -273,9 +272,10 @@ import { useRouter } from "vue-router";
import DefaultIcon1 from '@/assets/icons/default-icon1.png' import DefaultIcon1 from '@/assets/icons/default-icon1.png'
import { getPersonSummaryInfo } from "@/api/common/index"; import { getPersonSummaryInfo } from "@/api/common/index";
import goToPage from "@/utils/goToPage";
const totalPersonNumber = ref(0) const totalPersonNumber = ref(0)
const router = useRouter(); const router = useRouter();
const thinkTankId = getDecodedParams(); const thinkTankId = goToPage.getDecodedParams();
import InfoImg from "./images/img.png"; import InfoImg from "./images/img.png";
import Icon1 from "./images/icon1.png"; import Icon1 from "./images/icon1.png";
import Icon2 from "./images/icon2.png"; import Icon2 from "./images/icon2.png";
......
...@@ -504,7 +504,7 @@ import { setCanvasCreator } from "echarts/core"; ...@@ -504,7 +504,7 @@ import { setCanvasCreator } from "echarts/core";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { useGotoNewsDetail } from '@/router/modules/news'; import { useGotoNewsDetail } from '@/router/modules/news';
import { goToThinkTank } from "@/utils/goToPage"; import { goToThinkTank } from "@/utils/goToPage1";
const gotoNewsDetail = useGotoNewsDetail() const gotoNewsDetail = useGotoNewsDetail()
const containerRef = ref(null); const containerRef = ref(null);
const isRiskDetailVisible = ref(false); const isRiskDetailVisible = ref(false);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论