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

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

Yp dev 查看合并请求 !348
流水线 #491 已通过 于阶段
in 3 分 44 秒
...@@ -47,7 +47,7 @@ export function getLatestEntityListInfo() { ...@@ -47,7 +47,7 @@ export function getLatestEntityListInfo() {
* 风险信号 * 风险信号
* url:/commonFeature/riskSignal/{moduleId} * url:/commonFeature/riskSignal/{moduleId}
*/ */
export function getRiskSignal(moduleId = "0104") { export function getRiskSignal(moduleId = "0109") {
return http.get(`/api/commonFeature/riskSignal/${moduleId}`); return http.get(`/api/commonFeature/riskSignal/${moduleId}`);
} }
...@@ -55,7 +55,7 @@ export function getRiskSignal(moduleId = "0104") { ...@@ -55,7 +55,7 @@ export function getRiskSignal(moduleId = "0104") {
* 新闻资讯 * 新闻资讯
* url:/commonFeature/news/{moduleId} * url:/commonFeature/news/{moduleId}
*/ */
export function getNewsInfo(moduleId = "0104") { export function getNewsInfo(moduleId = "0109") {
return http.get(`/api/commonFeature/news/${moduleId}`); return http.get(`/api/commonFeature/news/${moduleId}`);
} }
...@@ -63,7 +63,7 @@ export function getNewsInfo(moduleId = "0104") { ...@@ -63,7 +63,7 @@ export function getNewsInfo(moduleId = "0104") {
* 社交媒体信息 * 社交媒体信息
* url:/commonFeature/remarks/{moduleId} * url:/commonFeature/remarks/{moduleId}
*/ */
export function getSocialMediaInfo(moduleId = "0104") { export function getSocialMediaInfo(moduleId = "0109") {
return http.get(`/api/commonFeature/remarks/${moduleId}`); return http.get(`/api/commonFeature/remarks/${moduleId}`);
} }
......
...@@ -89,6 +89,7 @@ ...@@ -89,6 +89,7 @@
</div> </div>
</div> </div>
<div class="box1-bottom"> <div class="box1-bottom">
<div class="box1-bottom-sanTypeId" v-if="item.sanEntities?.length">
<div class="box1-bottom-title">· 涉及主要实体:</div> <div class="box1-bottom-title">· 涉及主要实体:</div>
<div class="box1-bottom-content"> <div class="box1-bottom-content">
<div <div
...@@ -116,12 +117,33 @@ ...@@ -116,12 +117,33 @@
</div> </div>
</div> </div>
</div> </div>
<div class="box1-bottom-sanTypeId" v-if="item.sanItems?.length > 0">
<div class="box1-bottom-title">· 涉及管制物项:</div>
<div class="box1-bottom-content__wx">
<div
class="box1-bottom-content__wx-item"
v-for="(ett, index) in item.sanItems"
:key="index"
@click="handleWxClick(item)"
>
<div class="box1-bottom-content__wx-item-id">
{{ ett.id }}
</div>
<div class="box1-bottom-content__wx-item-txt">
{{ ett.name }}
</div>
</div>
</div>
</div>
</div>
<div class="box1-absolute" @click="handleToDataLibrary(item)"> <div class="box1-absolute" @click="handleToDataLibrary(item)">
<div class="box1-absolute-des"> <div class="box1-absolute-des">
<el-icon> <el-icon>
<Warning color="rgba(206, 79, 81, 1)" /> <Warning color="rgba(206, 79, 81, 1)" />
</el-icon> </el-icon>
<span>新增中国实体</span> <span>{{
item.sanTypeId == allSanTypeIds[0] ? "新增中国实体" : "新增物项"
}}</span>
</div> </div>
<div class="box1-absolute-num">{{ item.cnEntityCount }}</div> <div class="box1-absolute-num">{{ item.cnEntityCount }}</div>
</div> </div>
...@@ -950,7 +972,7 @@ onMounted(async () => { ...@@ -950,7 +972,7 @@ onMounted(async () => {
getIndustryCountByYear(13) getIndustryCountByYear(13)
]); ]);
// 交换第二个和第三个元素 // 交换第二个和第三个元素
[dataCount[1], dataCount[2]] = [dataCount[2], dataCount[1]]; // [dataCount[1], dataCount[2]] = [dataCount[2], dataCount[1]];
infoList.value = dataCount.slice(0, 2).map((item, idx) => { infoList.value = dataCount.slice(0, 2).map((item, idx) => {
return { return {
...item, ...item,
...@@ -966,9 +988,7 @@ onMounted(async () => { ...@@ -966,9 +988,7 @@ onMounted(async () => {
})); }));
resourceTabs.value.unshift({ label: "全部制裁", value: "all", id: "", disabled: false }); resourceTabs.value.unshift({ label: "全部制裁", value: "all", id: "", disabled: false });
console.log("返回的数据结构 infoList =》", resourceTabs.value); console.log("返回的数据结构 infoList =》", resourceTabs.value);
const entityList = _.map(entitiesDataInfo?.sanEntities ?? [], ({ entityNameZh, entityName }) => {
return { name: entityNameZh, enName: entityName };
});
entitiesDataInfoList.value = entitiesDataInfo || []; entitiesDataInfoList.value = entitiesDataInfo || [];
const list = _.chain(industryCountByYear).filter("year").orderBy("year", "desc").value().slice(0, 5); const list = _.chain(industryCountByYear).filter("year").orderBy("year", "desc").value().slice(0, 5);
const cclList1 = _.chain(cclList).filter("year").orderBy("year", "desc").value().slice(0, 5); const cclList1 = _.chain(cclList).filter("year").orderBy("year", "desc").value().slice(0, 5);
...@@ -1101,37 +1121,21 @@ const handleEntityClick = item => { ...@@ -1101,37 +1121,21 @@ const handleEntityClick = item => {
console.log("item", item); console.log("item", item);
window.sessionStorage.setItem("curTabName", item.name || item.entityNameZh); window.sessionStorage.setItem("curTabName", item.name || item.entityNameZh);
gotoCompanyPages(item.id); gotoCompanyPages(item.id);
// const route = router.resolve({
// name: "companyPages",
// params: {
// // startTime: item.startTime,
// id: item.entityId
// }
// });
// window.open(route.href, "_blank");
}; };
const carouselRef = ref(null); const handleWxClick = item => {
// const handleToDetail = () => { const routeData = router.resolve({
// let activeIndex = 0; path: "/exportControl/commercialControlList",
// if (carouselRef.value) { query: {
// activeIndex = carouselRef.value.activeIndex; sanTypeId: item.sanTypeId,
// } key: item.id
}
// console.log("当前 Carousel 激活索引:", activeIndex); });
// 打开一个新页面
window.open(routeData.href, "_blank");
};
// // 使用当前激活项的数据 const carouselRef = ref(null);
// const currentItem = entitiesDataInfoList.value[activeIndex];
// if (currentItem) {
// const route = router.resolve({
// path: "/exportControlAnalysis",
// query: {
// startTime: currentItem.postDate
// }
// });
// window.open(route.href, "_blank");
// }
// };
const currentCarouselIndex = ref(0); const currentCarouselIndex = ref(0);
const handleCarouselChange = index => { const handleCarouselChange = index => {
currentCarouselIndex.value = index; currentCarouselIndex.value = index;
...@@ -2065,6 +2069,34 @@ const handleMediaClick = item => { ...@@ -2065,6 +2069,34 @@ const handleMediaClick = item => {
margin-bottom: 15px; margin-bottom: 15px;
} }
&-content__wx {
display: flex;
flex-direction: column;
gap: 10px;
justify-content: flex-start;
padding-left: 10px;
height: 156px;
overflow: auto;
&-item {
display: flex;
align-items: center;
justify-content: flex-start;
gap: 10px;
cursor: pointer;
&-id {
font-family: "Source Han Sans CN";
font-size: 16px;
font-weight: 700;
color: rgb(95, 101, 108);
}
&-txt {
font-size: 16px;
font-weight: 400;
color: rgba(95, 101, 108, 1);
line-height: 24px;
}
}
}
&-content { &-content {
display: flex; display: flex;
gap: 15px; gap: 15px;
......
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
<script setup> <script setup>
import { ref, computed, onMounted, watch } from "vue"; import { ref, computed, onMounted, watch } from "vue";
import { useRouter } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import { Search, Select } from "@element-plus/icons-vue"; import { Search, Select } from "@element-plus/icons-vue";
import defaultIcon from "../../../../../assets/icons/default-avatar.png"; import defaultIcon from "../../../../../assets/icons/default-avatar.png";
import { import {
...@@ -104,6 +104,7 @@ import { ...@@ -104,6 +104,7 @@ import {
import dayjs from "dayjs"; import dayjs from "dayjs";
const router = useRouter(); const router = useRouter();
const route = useRoute();
const currentCCLType = ref(""); const currentCCLType = ref("");
const CCLTypeList = ref([]); const CCLTypeList = ref([]);
...@@ -111,7 +112,7 @@ const getTypeList = async () => { ...@@ -111,7 +112,7 @@ const getTypeList = async () => {
try { try {
const res = await getECCNCategory(); const res = await getECCNCategory();
if (res && res.code === 200) { if (res && res.code === 200) {
console.log("-----getTypeList", res.data); // console.log("-----getTypeList", res.data);
CCLTypeList.value = [{ id: "", name: "全部类别" }].concat(res.data); CCLTypeList.value = [{ id: "", name: "全部类别" }].concat(res.data);
currentCCLType.value = ""; currentCCLType.value = "";
} }
...@@ -125,7 +126,7 @@ const getTechFields = async () => { ...@@ -125,7 +126,7 @@ const getTechFields = async () => {
try { try {
const res = await getAreaType(); const res = await getAreaType();
if (res && res.code === 200) { if (res && res.code === 200) {
console.log("-----getTechFields", res.data); // console.log("-----getTechFields", res.data);
techFields.value = [{ id: "all", name: "全部领域", checked: true }].concat(res.data); techFields.value = [{ id: "all", name: "全部领域", checked: true }].concat(res.data);
// 默认选中第一个 // 默认选中第一个
// techFields.value[0].checked = true; // techFields.value[0].checked = true;
...@@ -225,7 +226,6 @@ const getCclList = async () => { ...@@ -225,7 +226,6 @@ const getCclList = async () => {
try { try {
const res = await getCclQuery(params); const res = await getCclQuery(params);
if (res && res.code === 200) { if (res && res.code === 200) {
console.log("----getCclList", res.data);
cclList.value = res.data; cclList.value = res.data;
// ✅ 新增:处理 changeFlag 向上继承逻辑 // ✅ 新增:处理 changeFlag 向上继承逻辑
...@@ -251,7 +251,7 @@ const getCclList = async () => { ...@@ -251,7 +251,7 @@ const getCclList = async () => {
}); });
}); });
console.log("----getCclList 11", cclList.value); // console.log("----getCclList 11", cclList.value);
loading.value = false; loading.value = false;
} }
} catch (error) { } catch (error) {
...@@ -262,14 +262,14 @@ const getCclList = async () => { ...@@ -262,14 +262,14 @@ const getCclList = async () => {
// 商业管制清单-CCL清单列表-清单版本 // 商业管制清单-CCL清单列表-清单版本
const cclVersionList = ref([]); const cclVersionList = ref([]);
const key = ref("");
// 当前选中的清单版本 // 当前选中的清单版本
const currentCCLVersion = ref(""); const currentCCLVersion = ref(Number(key.value) || "");
// 获取清单版本列表 // 获取清单版本列表
const getCCLVersionListApi = async () => { const getCCLVersionListApi = async () => {
try { try {
const res = await getCCLVersionList(); const res = await getCCLVersionList();
if (res && res.code === 200) { if (res && res.code === 200) {
console.log("----getCCLVersionList", res.data);
cclVersionList.value = res.data.map(item => { cclVersionList.value = res.data.map(item => {
return { return {
key: item.key, key: item.key,
...@@ -277,7 +277,8 @@ const getCCLVersionListApi = async () => { ...@@ -277,7 +277,8 @@ const getCCLVersionListApi = async () => {
// value: `清单版本-${item.value}` // value: `清单版本-${item.value}`
}; };
}); });
currentCCLVersion.value = res.data[0].key; // currentCCLVersion.value = res.data[0].key;
currentCCLVersion.value = key.value ? Number(key.value) : res.data[0].key;
} }
} catch (error) { } catch (error) {
console.error("获取清单版本列表失败:", error); console.error("获取清单版本列表失败:", error);
...@@ -341,7 +342,6 @@ watch(currentCCLVersion, newValue => { ...@@ -341,7 +342,6 @@ watch(currentCCLVersion, newValue => {
// }, 300); // }, 300);
// }); // });
watch(searchKeyword, newValue => { watch(searchKeyword, newValue => {
console.log("-----searchKey", newValue);
getCclList(); getCclList();
}); });
const loading = ref(false); const loading = ref(false);
...@@ -349,6 +349,8 @@ const loading = ref(false); ...@@ -349,6 +349,8 @@ const loading = ref(false);
const cclList = ref([]); const cclList = ref([]);
onMounted(async () => { onMounted(async () => {
key.value = route.query.key;
console.log("url参数 =>", route.query);
// 获取类别字段 // 获取类别字段
await getTypeList(); await getTypeList();
// 获取科技领域字典 // 获取科技领域字典
......
...@@ -7,8 +7,14 @@ ...@@ -7,8 +7,14 @@
<template> <template>
<div class="sanctions-overview"> <div class="sanctions-overview">
<div class="side-nav"> <div class="side-nav">
<div v-for="(item, index) in activeTab" :key="index" class="tab-item" :class="{'active': index === activeIndex}" @click="activeIndex = index"> <div
{{item}} v-for="(item, index) in activeTab"
:key="index"
class="tab-item"
:class="{ active: index === activeIndex }"
@click="activeIndex = index"
>
{{ item }}
<span v-if="index === activeIndex" class="arrow"></span> <span v-if="index === activeIndex" class="arrow"></span>
</div> </div>
</div> </div>
...@@ -20,23 +26,22 @@ ...@@ -20,23 +26,22 @@
</template> </template>
<script setup> <script setup>
import { ref } from 'vue' import { onMounted, ref } from "vue";
import introductionPage from "./components/introductionPage/index.vue" import introductionPage from "./components/introductionPage/index.vue";
import listPage from "./components/listPage/index.vue" import listPage from "./components/listPage/index.vue";
import { useRoute } from "vue-router";
const activeTab = ref(["CCL清单简介", "CCL清单列表"])
const activeIndex = ref(0)
const route = useRoute();
const activeTab = ref(["CCL清单简介", "CCL清单列表"]);
const activeIndex = ref(0);
onMounted(() => {
activeIndex.value = route.query.key ? 1 : 0;
});
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
*{ .sanctions-overview {
margin: 0;
padding: 0;
}
.sanctions-overview{
width: 1601px; width: 1601px;
margin: 0 auto; margin: 0 auto;
position: relative; position: relative;
......
...@@ -57,9 +57,11 @@ import icon3Active from "../assets/icons/icon3_active.png"; ...@@ -57,9 +57,11 @@ import icon3Active from "../assets/icons/icon3_active.png";
const route = useRoute(); const route = useRoute();
const sanTypeId = ref(""); const sanTypeId = ref("");
const key = ref("");
onMounted(() => { onMounted(() => {
// 获取路由参数sanTypeId // 获取路由参数sanTypeId
sanTypeId.value = route.query.sanTypeId; sanTypeId.value = route.query.sanTypeId;
key.value = route.query.key;
console.log("CommercialControlList 页面接收到的 sanTypeId:", sanTypeId.value); console.log("CommercialControlList 页面接收到的 sanTypeId:", sanTypeId.value);
}); });
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论