提交 1d682771 authored 作者: coderBryanFu's avatar coderBryanFu

update

上级 54bdb33a
......@@ -33,7 +33,7 @@ export function getBillPerson(params) {
export function getBillEvent(params) {
return request({
method: 'GET',
url: `/api/billInfoBean/event/${params.id}`,
url: `/api/billInfoBean/actionContent/${params.id}`,
params,
})
}
......
import request from "@/api/request.js";
// 涉华法案领域分布
/**
* @param {year}
*/
export function getBillIndustry(params) {
return request({
method: 'GET',
url: `/api/BillOverview/billIndustry/${params.year}`,
params,
})
}
\ No newline at end of file
......@@ -12,7 +12,7 @@ export function getChat(params) {
export function getChecklistChat(params) {
return request({
method: 'POST',
url: `/checklistChat/langgraph/checklist/chat-stream`,
url: `/checklistChat/langgraph/checklist/chat`,
data: params,
})
}
\ No newline at end of file
......@@ -31,7 +31,7 @@ export { getToken, setToken, removeToken }
// 创建axios实例
const service = axios.create({
// baseURL: BASE_API, //所有的后端接口请求地址前缀部分(没有后端请求不用写)
timeout: 60000*5 // 请求超时时间,这里15秒
timeout: 300 * 1000 // 请求超时时间,这里5分钟
//withCredentials: true,// 异步请求携带cookie,true为携带,false为不携带
//请求头里面设置通用传参类型
/*headers: {
......
......@@ -4,7 +4,7 @@ import InnovationSubject from "@/views/innovationSubject/index.vue";
const innovationSubjectRoutes = [
//创新主体
{
path: "/InnovationSubject",
path: "/innovationSubject",
name: "InnovationSubject",
component: InnovationSubject,
meta: {
......
......@@ -7,10 +7,10 @@ const overViewRoutes = [
// 中美博弈概览页面路由
{
path: "/",
redirect: "/overView"
redirect: "/overview"
},
{
path: "/overView",
path: "/overview",
name: "overView",
component: overView,
meta: {
......@@ -19,7 +19,7 @@ const overViewRoutes = [
},
// GJ概览页面路由
{
path: "/gjOverView",
path: "/gjOverview",
name: "gjOverView",
component: gjOverView,
meta: {
......
......@@ -110,7 +110,7 @@
</div>
<div class="title">{{ "热门法案" }}</div>
</div>
<div class="box1-header-right">
<div class="box1-header-right" @click="handleClickToDetail">
{{ "查看详情 >" }}
</div>
</div>
......@@ -257,7 +257,6 @@
<img src="./assets/images/box4-header-icon.png" alt="" />
</div>
<div class="header-title">{{ "社交媒体" }}</div>
<div class="more">{{ "更多 +" }}</div>
</div>
<div class="box4-main">
<div class="box4-main-item" v-for="(item, index) in messageList" :key="index">
......@@ -520,6 +519,9 @@
import { onMounted, ref, computed, onUnmounted, nextTick } from "vue";
import * as echarts from "echarts";
import router from "@/router/index";
import setChart from "@/utils/setChart";
import { getBillIndustry } from "@/api/bill/billHome";
import { getHotBills, getBillRiskSignal, getBillsByType, getHylyList } from "@/api/home";
import DivideHeader from "@/components/DivideHeader.vue";
......@@ -624,6 +626,7 @@ const curBill = ref({
// 查看详情
const handleClickToDetail = () => {
// window.sessionStorage.setItem("billId", curBill.value.billId);
window.sessionStorage.setItem("billId", '119_HR_1');
// router.push("/billLayout");
const route = router.resolve("/billLayout");
window.open(route.href, "_blank");
......@@ -838,26 +841,6 @@ const box8YearList = ref([
}
]);
const box9selectetedTime = ref("2025");
const box9YearList = ref([
{
label: "2025",
value: "2025"
},
{
label: "2024",
value: "2024"
},
{
label: "2023",
value: "2023"
},
{
label: "2022",
value: "2022"
}
]);
const releaseTime = ref("近一年发布"); // 发布时间
const releaseTimeList = ref([
......@@ -897,27 +880,27 @@ const categoryList = ref([
// "航空航天",
]);
const curCategoryList = ref([])
const curCategoryIndex = ref(0)
const SHOW_COUNT = 10
const curCategoryList = ref([]);
const curCategoryIndex = ref(0);
const SHOW_COUNT = 10;
function updateShowList(startIndex) {
// 确保索引在有效范围内
startIndex = Math.max(0, Math.min(startIndex, categoryList.value.length - SHOW_COUNT));
// 截取要显示的元素
curCategoryList.value = categoryList.value.slice(startIndex, startIndex + SHOW_COUNT);
// 如果接近末尾不够10个,从末尾往前取10个
if (curCategoryList.value.length < SHOW_COUNT) {
curCategoryList.value = categoryList.value.slice(-SHOW_COUNT);
curCategoryIndex = categoryList.value.length - SHOW_COUNT;
} else {
curCategoryIndex = startIndex;
}
renderShowList();
updateButtons();
// 确保索引在有效范围内
startIndex = Math.max(0, Math.min(startIndex, categoryList.value.length - SHOW_COUNT));
// 截取要显示的元素
curCategoryList.value = categoryList.value.slice(startIndex, startIndex + SHOW_COUNT);
// 如果接近末尾不够10个,从末尾往前取10个
if (curCategoryList.value.length < SHOW_COUNT) {
curCategoryList.value = categoryList.value.slice(-SHOW_COUNT);
curCategoryIndex = categoryList.value.length - SHOW_COUNT;
} else {
curCategoryIndex = startIndex;
}
renderShowList();
updateButtons();
}
const activeCate = ref("全部分类");
......@@ -947,15 +930,6 @@ const handleClickCate = cate => {
handleGetBillsByType();
};
// 绘制echarts图表
const setChart = (option, chartId) => {
let chartDom = document.getElementById(chartId);
chartDom.removeAttribute("_echarts_instance_");
let chart = echarts.init(chartDom);
chart.setOption(option);
return chart;
};
const chart1Data = ref({
title: [
"2024-09",
......@@ -1103,36 +1077,81 @@ const wordCloudData = ref([
{ name: "加强供应链风险管理", value: 73 }
]);
// 涉华领域分布
const box9ChartColorList = ref(["#4096FF", "#FFA39E", "#ADC6FF", "#FFC069", "#B5F5EC", "#B37FEB", "#D6E4FF"]);
const box9ChartData = ref([
// {
// name: "半导体",
// value: 50
// },
// {
// name: "电子设备",
// value: 46
// },
// {
// name: "显示技术",
// value: 40
// },
// {
// name: "新能源",
// value: 32
// },
// {
// name: "通信设备",
// value: 31
// },
// {
// name: "汽车",
// value: 30
// },
// {
// name: "其他",
// value: 24
// }
]);
const box9selectetedTime = ref("2025");
const box9YearList = ref([
{
name: "半导体",
value: 50
},
{
name: "电子设备",
value: 46
},
{
name: "显示技术",
value: 40
},
{
name: "新能源",
value: 32
label: "2025",
value: "2025"
},
{
name: "通信设备",
value: 31
label: "2024",
value: "2024"
},
{
name: "汽车",
value: 30
label: "2023",
value: "2023"
},
{
name: "其他",
value: 24
label: "2022",
value: "2022"
}
]);
const getBox9Data = async () => {
const params = {
year: box9selectetedTime.value
};
try {
const res = await getBillIndustry(params);
console.log("box9-涉华法案领域分布", res.data);
if (res.code === 200 && res.data) {
box9ChartData.value = res.data;
}
} catch (error) {}
};
const handleBox9Data = async () => {
await getBox9Data();
const box9Chart = getPieChart(
box9ChartData.value.map(item => {
return {
name: item.industryName,
value: item.countBill
};
})
);
setChart(box9Chart, "box9Chart");
};
const box7Data = ref([
[
......@@ -1252,8 +1271,6 @@ const box8Data = ref([
}
]);
const box9ChartColorList = ref(["#4096FF", "#FFA39E", "#ADC6FF", "#FFC069", "#B5F5EC", "#B37FEB", "#D6E4FF"]);
const handleToPosi = id => {
// 0 618 1240 2350
switch (id) {
......@@ -1286,11 +1303,10 @@ onMounted(async () => {
const box7Chart = getDoublePieChart(box7Data.value[0], box7Data.value[1]);
setChart(box7Chart, "box7Chart");
const box9Chart = getPieChart(box9ChartData.value, box9ChartColorList.value);
setChart(box9Chart, "box9Chart");
await handleGetHotBills();
curBill.value = hotBillList.value[0];
handleBox9Data();
});
onUnmounted(() => {});
......
const getPieChart = (data,colorList) => {
let option = {
color: colorList,
// color: colorList,
series: [
{
type: 'pie',
......
......@@ -26,7 +26,7 @@
:key="index"
@click="handleClickBox1Btn(item, index)"
>
{{ item.hylymc }}
{{ item.name }}
</div>
</div>
</div>
......@@ -343,8 +343,8 @@ const handleGetHylyList = async () => {
try {
const res = await getHylyList();
console.log("行业领域字典列表", res);
industryList.value = res.data;
curHylyId.value = res.data[0].hylyid;
industryList.value = res.data.slice(0,6)
curHylyId.value = res.data[0].id;
} catch (error) {}
};
......@@ -353,7 +353,8 @@ const curHylyId = ref("");
// 根据行业领域id获取公司列表
const handleGetCompanyListById = async () => {
const params = {
id: curHylyId.value
// id: curHylyId.value
id: '0100'
};
try {
const res = await getCompanyList(params);
......@@ -785,7 +786,7 @@ onMounted(async () => {
.left-center-btn {
margin-right: 4px;
height: 28px;
width: 60px;
width: 70px;
text-align: center;
padding: 0 5px;
box-sizing: border-box;
......
......@@ -21,12 +21,12 @@
<div class="box1-right">
<div class="box1-right-item">
<div class="item-left">提案人:</div>
<div class="item-right">乔迪·C·阿灵顿​(共和党-得克萨斯州第19选区)</div>
<div class="item-right">{{basicInfo.tarName}}</div>
</div>
<div class="box1-right-item">
<div class="item-left">提出时间:</div>
<div class="item-right">2025年5月20日</div>
<div class="item-right">{{basicInfo.introductionDate}}</div>
</div>
<div class="box1-right-item">
<div class="item-left">相关领域:</div>
......@@ -38,47 +38,35 @@
</div>
<div class="box1-right-item">
<div class="item-left">法案类别:</div>
<div class="item-right">公法(编号:Pub. L. No. 119-21)</div>
<div class="item-right">{{ basicInfo.typeName }}</div>
</div>
<div class="box1-right-item">
<div class="item-left">提案人</div>
<div class="item-right2">
<div class="right2-item">H. Rept. 119-106, Book 1</div>
<div class="right2-item">H. Rept. 119-106, Book 2​(两份独立报告)</div>
<div class="item-left">委员会报告</div>
<div class="item-right2" v-if="basicInfo.reportList">
<div class="right2-item" v-for="item,index in basicInfo.reportList" :key="index">{{ item }}</div>
</div>
</div>
<div class="box1-right-item">
<div class="item-left">表决记录:</div>
<div class="item-right3">全程共进行 ​47次唱名表决</div>
<div class="item-right3">{{`全程共进行${basicInfo.votetotal}次唱名表决`}}</div>
</div>
<div class="box1-right-item">
<div class="item-left">最近状态:</div>
<div class="item-right3">2025年7月4日​ 由总统签署生效</div>
<div class="item-right3">{{ basicInfo.status }}</div>
</div>
<div class="box1-right-item">
<div class="item-left">立案流程:</div>
<div class="item-right4">
<!-- <el-steps
style="max-width: 500px"
:active="6"
finish-status="success"
>
<el-step title="提出" />
<el-step title="众议院通过" />
<el-step title="参议院通过" />
<el-step title="分歧协调" />
<el-step title="提交总统" />
<el-step title="法案通过" />
</el-steps> -->
<div class="step" v-for="(item, index) in stepList" :key="index">
<div class="step" v-for="(item, index) in basicInfo.stageList" :key="index">
<div class="step-box" v-if="!item.active">
{{ item.title }}
{{ item }}
<div class="right-arrow">
<img src="./assets/icons/arrow-right.png" alt="" />
</div>
</div>
<div class="step-box-active" v-else>
{{ item.title }}
{{ item }}
<div class="right-arrow">
<img src="./assets/icons/arrow-right.png" alt="" />
</div>
......@@ -120,8 +108,8 @@
<div class="box2-center-item-box" v-if="box2BtnActive == 1">
<div class="box2-center-item" v-for="(item, index) in progressList" :key="index">
<div class="tip" :class="{ tipActive: item.fxdj }"></div>
<div class="date">{{ item.sjsj }}</div>
<div class="title">{{ item.sjnr }}</div>
<div class="date">{{ item.actionDate }}</div>
<div class="title">{{ item.actionContentCn }}</div>
<div class="info">
<div class="info-box danger-box4" v-if="item.fxdj === '特别重大风险'">
{{ item.fxdj }}
......@@ -545,6 +533,9 @@ const handleClickMore2 = () => {
};
// 获取基本信息
const basicInfo = ref({})
const handleGetBasicInfo = async () => {
const params = {
id: window.sessionStorage.getItem("billId")
......@@ -552,6 +543,7 @@ const handleGetBasicInfo = async () => {
try {
const res = await getBillInfo(params);
console.log("基本信息", res);
basicInfo.value = res.data
} catch (error) {
console.error(error);
}
......@@ -588,15 +580,15 @@ const handleGetBillDyqk = async () => {
const res = await getBillDyqk(params);
console.log("前期进展", res);
timelineData.value = res.data;
faList.value = res.data.map(item => {
return {
label: item.dyms,
value: item.dyms,
id: item.id
};
});
selectValue.value = faList.value[0];
handleGetBillPerson(faList.value[0].id);
// faList.value = res.data.map(item => {
// return {
// label: item.actionTitle,
// value: item.actionTitle,
// id: item.id
// };
// });
// selectValue.value = faList.value[0];
// handleGetBillPerson(faList.value[0].id);
} catch (error) {
console.error(error);
}
......
......@@ -361,7 +361,7 @@ const connectSSE = async question => {
} else {
loadingDotIndex.value = 0;
}
},500);
}, 500);
// 创建 AbortController 用于取消请求
abortController.value = new AbortController();
......@@ -504,93 +504,212 @@ const chat = async question => {
} else {
loadingDotIndex.value = 0;
}
},500);
}, 500);
// // 创建 AbortController 用于取消请求
// abortController.value = new AbortController();
// const TIMEOUT_MS = 180 * 1000;
// fetchEventSource("/checklistChat/langgraph/checklist/chat-stream", {
// method: "POST",
// headers: {
// "Content-Type": "application/json"
// },
// body: JSON.stringify(params),
// signal: abortController.value.signal,
// // 设置 3 分钟超时
// // fetch: async (input, init) => {
// // const abortController = new AbortController();
// // const timeoutId = setTimeout(() => {
// // console.log('请求超时(3分钟)');
// // abortController.value.abort();
// // }, TIMEOUT_MS);
// // try {
// // const response = await fetch(input, {
// // ...init,
// // signal: abortController.value.signal,
// // });
// // return response;
// // } finally {
// // clearTimeout(timeoutId);
// // }
// // },
// openWhenHidden: true,
// async onopen(res) {
// isLoading.value = false;
// clearInterval(loadingInterval);
// if(res.detail.error) {
// ElMessage.error(res.detail.error.message)
// }
// console.log("流式回答开始", res);
// },
// async onmessage(res) {
// console.log("res", res);
// if (res.data === "[DONE]") {
// ElMessage.success("生成完成!");
// }
// let msgData = JSON.parse(res.data);
// if (msgData.logs) {
// console.log("docs", msgData.logs);
// const lastMessage = messages.value[messages.value.length - 1];
// if (lastMessage && lastMessage.type === "ai") {
// let newDocs = msgData.logs.map(item => {
// return item.detail + " " + formatDateTime(item.ts);
// });
// lastMessage.source = newDocs;
// scrollToBottom();
// }
// }
// if (msgData.choices && msgData.choices[0].delta.content) {
// isCurAnswerMessage.value = true;
// let content = msgData.choices[0].delta.content;
// if (content === "[DONE]") {
// ElMessage.success("生成完成!");
// } else {
// aiMessage.value += content;
// updateLastAIMessage(aiMessage.value);
// }
// }
// // if (res.event === "end_of_workflow") {
// // ElMessage.success("问答完成!");
// // abortController.value.abort();
// // abortController.value = new AbortController();
// // return;
// // }
// // if (res.event === "start_of_agent" && msgData.agent_name === "answer") {
// // isCurAnswerMessage.value = true;
// // aiMessage.value = "";
// // }
// // if (res.event === "message") {
// // let content = msgData.delta.content;
// // console.log("msgData", msgData);
// // console.log("content", content);
// // if (content !== "[DONE]") {
// // aiMessage.value += content;
// // updateLastAIMessage(aiMessage.value);
// // } else {
// // aiMessage.value = "";
// // abortController.value.abort();
// // abortController.value = new AbortController();
// // }
// // }
// },
// onerror(error) {
// ElMessage({
// message: "问答报错!",
// type: "warning"
// });
// abortController.value.abort();
// abortController.value = new AbortController();
// throw new Error(error);
// }
// }).catch(error => {
// ElMessage({
// message: "问答报错!",
// type: "warning"
// });
// abortController.value.abort();
// abortController.value = new AbortController();
// throw new Error(error);
// });
// try {
// const res = await getChecklistChat(params);
// if (res.detail.error) {
// console.log(res.detail.error.message);
// ElMessage.error(res.detail.error.message);
// }
// if (res.logs) {
// isLoading.value = false;
// const lastMessage = messages.value[messages.value.length - 1];
// if (lastMessage && lastMessage.type === "ai") {
// let newDocs = res.logs.map(item => {
// return item.detail + " " + formatDateTime(item.ts);
// });
// lastMessage.source = newDocs;
// scrollToBottom();
// }
// }
// if (res.choices && res.choices[0].delta.content) {
// isLoading.value = false;
// isCurAnswerMessage.value = true;
// let content = res.choices[0].delta.content;
// if (content === "[DONE]") {
// ElMessage.success("生成完成!");
// } else {
// aiMessage.value += content;
// updateLastAIMessage(aiMessage.value);
// }
// }
// } catch (error) {
// console.log("error", error);
// if (error.detail && error.detail.error) {
// console.log(res.detail.error.message);
// ElMessage.error(res.detail.error.message);
// }
// }
// 创建 AbortController 用于取消请求
abortController.value = new AbortController();
try {
const response = await fetch("/checklistChat/langgraph/checklist/chat", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(params)
});
fetchEventSource("/checklistChat/langgraph/checklist/chat-stream", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(params),
signal: abortController.value.signal,
openWhenHidden: true,
async onopen(res) {
isLoading.value = false;
clearInterval(loadingInterval);
console.log("流式回答开始", res);
},
async onmessage(res) {
console.log("res", res);
if (res.data === "[DONE]") {
ElMessage.success("生成完成!");
// console.log("状态码:", response.status); // 200
// console.log("ok:", response.ok); // true
// console.log("headers:", [...response.headers.entries()]);
// 先以文本形式读取,看看实际内容
const rawText = await response.text();
// console.log("原始响应文本:", rawText);
// 尝试解析 JSON
const data = JSON.parse(rawText); // 可能在这里抛出错误
console.log("解析后的数据:", data);
clearInterval(loadingInterval);
isLoading.value = false;
console.log("data.logs:", data.logs);
console.log("data.choices:", data.choices);
if (data.logs) {
const lastMessage = messages.value[messages.value.length - 1];
if (lastMessage && lastMessage.type === "ai") {
let newDocs = data.logs.map(item => {
return item.detail + " " + formatDateTime(item.ts);
});
lastMessage.source = newDocs;
scrollToBottom();
}
let msgData = JSON.parse(res.data);
if (msgData.logs) {
console.log("docs", msgData.logs);
const lastMessage = messages.value[messages.value.length - 1];
if (lastMessage && lastMessage.type === "ai") {
let newDocs = msgData.logs.map(item => {
return item.detail + " " + formatDateTime(item.ts);
});
lastMessage.source = newDocs;
scrollToBottom();
}
}
if (msgData.choices && msgData.choices[0].delta.content) {
isCurAnswerMessage.value = true;
let content = msgData.choices[0].delta.content;
if (content === "[DONE]") {
ElMessage.success("生成完成!");
} else {
aiMessage.value += content;
updateLastAIMessage(aiMessage.value);
}
}
if (data.choices && data.choices[0].message.content) {
isCurAnswerMessage.value = true;
let content = data.choices[0].message.content;
if (content === "[DONE]") {
ElMessage.success("生成完成!");
} else {
aiMessage.value += content;
updateLastAIMessage(aiMessage.value);
}
// if (res.event === "end_of_workflow") {
// ElMessage.success("问答完成!");
// abortController.value.abort();
// abortController.value = new AbortController();
// return;
// }
// if (res.event === "start_of_agent" && msgData.agent_name === "answer") {
// isCurAnswerMessage.value = true;
// aiMessage.value = "";
// }
// if (res.event === "message") {
// let content = msgData.delta.content;
// console.log("msgData", msgData);
// console.log("content", content);
// if (content !== "[DONE]") {
// aiMessage.value += content;
// updateLastAIMessage(aiMessage.value);
// } else {
// aiMessage.value = "";
// abortController.value.abort();
// abortController.value = new AbortController();
// }
// }
},
onerror(error) {
ElMessage({
message: "问答报错!",
type: "warning"
});
abortController.value.abort();
abortController.value = new AbortController();
throw new Error(error);
}
}).catch(error => {
ElMessage({
message: "问答报错!",
type: "warning"
});
abortController.value.abort();
abortController.value = new AbortController();
throw new Error(error);
});
if (data.detail.error) {
console.log(data.detail.error.message);
// ElMessage.error(data.detail.error.message);
isCurAnswerMessage.value = true;
let content = "我们换个新话题吧!";
aiMessage.value += content;
updateLastAIMessage(aiMessage.value);
}
} catch (error) {
console.error("catch 中的错误:", error);
}
};
// 发送消息
......@@ -607,6 +726,7 @@ const sendMessage = async () => {
}
userInput.value = "";
aiMessage.value = ""
if (curArea.value === "法案") {
await connectSSE(question);
} else {
......
......@@ -21,7 +21,6 @@
<div class="right-title">
<img src="./assets/icon02.png" alt="">
<div class="tit">社交媒体</div>
<div class="more">更多 +</div>
</div>
<div class="right-main">
<div class="trump">
......
......@@ -6,7 +6,7 @@
<div class="left-top">
<img src="./assets/icon01.png" alt="" />
<div class="left-top-title">合作限制动态</div>
<span>查看详情 ></span>
<div class="more" @click="handleClickToDetail">查看详情 ></div>
</div>
<div class="left-center">
<img src="./assets/usImg.png" alt="" />
......@@ -167,12 +167,14 @@ const handleToMoreRiskSignal = () => {
top: 15px;
left: 23px;
}
span {
.more {
position: absolute;
height: 48px;
line-height: 48px;
font-size: 16px;
font-weight: 400;
font-family: "Microsoft YaHei";
position: absolute;
top: 19px;
top: 0;
right: 40px;
color: rgb(5, 95, 194);
cursor: pointer;
......
......@@ -45,14 +45,17 @@ const initChart = () => {
{
type: "wordCloud",
shape: props.shape,
width: '100%',
height: '100%',
// 其他形状你可以使用形状路径
// shape: 'circle', // 示例
// 或者自定义路径
gridSize: 20, // 网格大小,影响词间距。
sizeRange: [15, 25], // 定义词云中文字大小的范围
gridSize: 30, // 网格大小,影响词间距。
sizeRange: [15, 40], // 定义词云中文字大小的范围
rotationRange: [0, 0],
rotationStep: 0,
drawOutOfBound: false, // 是否超出画布
shrinkToFit: true, // 是否自动缩小以适应容器
// 字体
textStyle: {
// normal: {
......
......@@ -117,7 +117,7 @@
</div>
<div class="title">{{ "最新科技政令" }}</div>
</div>
<div class="box1-header-right">
<div class="box1-header-right" @click="handleClickToDetail">
{{ "查看详情 >" }}
</div>
</div>
......@@ -239,7 +239,6 @@
<img src="./assets/images/box4-header-icon.png" alt="" />
</div>
<div class="header-title">{{ "社交媒体" }}</div>
<div class="more">{{ "更多 +" }}</div>
</div>
<div class="box4-main">
<div class="box4-main-item" v-for="(item, index) in messageList" :key="index">
......
......@@ -220,12 +220,6 @@
</el-col>
<el-col :span="12">
<custom-container title="社交媒体" :titleIcon="dialogIcon" height="450px">
<template #header-right>
<el-button type="primary" link>
{{ "更多 +" }}
</el-button>
</template>
<template #default>
<div class="dialog-list">
<!-- <MessageBubble
......
......@@ -60,7 +60,7 @@
<el-col :span="16">
<custom-container titleType="primary" title="最新出口管制政策" :titleIcon="houseIcon" height="450px">
<template #header-right>
<el-button type="primary" link>
<el-button type="primary" link @click="handleToDetail">
{{ "查看详情 >" }}
</el-button>
</template>
......@@ -171,12 +171,6 @@
</el-col>
<el-col :span="12">
<custom-container title="社交媒体" :titleIcon="dialogIcon" height="450px">
<template #header-right>
<el-button type="primary" link>
{{ "更多 +" }}
</el-button>
</template>
<template #default>
<div class="dialog-list">
<!-- <MessageBubble
......
......@@ -70,19 +70,19 @@
</div>
</div>
<div class="home-main-header-btn-box" v-show="!isShow">
<div class="btn" @click="handleToPosi('position1')">
<div class="btn" @click="scrollToTop('position1')">
<div class="btn-text">{{ "最新动态" }}</div>
<div class="btn-icon">{{ ">" }}</div>
</div>
<div class="btn" @click="handleToPosi('position2')">
<div class="btn" @click="scrollToTop('position2')">
<div class="btn-text">{{ "资讯要闻" }}</div>
<div class="btn-icon">{{ ">" }}</div>
</div>
<div class="btn" @click="handleToPosi('position3')">
<div class="btn" @click="scrollToTop('position3')">
<div class="btn-text">{{ "数据总览" }}</div>
<div class="btn-icon">{{ ">" }}</div>
</div>
<div class="btn" @click="handleToPosi('position4')">
<div class="btn" @click="scrollToTop('position4')">
<div class="btn-text">{{ "资源库" }}</div>
<div class="btn-icon">{{ ">" }}</div>
</div>
......@@ -204,7 +204,6 @@
<img src="./assets/images/box4-header-icon.png" alt="" />
</div>
<div class="header-title">{{ "社交媒体" }}</div>
<div class="more">{{ "更多 +" }}</div>
</div>
<div class="box4-main">
<div class="box4-main-item" v-for="(item, index) in messageList" :key="index">
......@@ -377,7 +376,8 @@
<div class="item-text2">{{ item.area }}</div>
<div class="taglist">
<div class="tag1" style="width: 82px;"
v-for="val in item.tag"
v-for="val,idx in item.tag"
:key="idx"
:class="{tag2: val === '新能源',
tag3: val === '集成电路',
tag4: val === '生物科技',
......@@ -410,6 +410,7 @@ import { onMounted, ref, computed } from "vue";
import * as echarts from "echarts";
import router from "@/router";
import DivideHeader from "@/components/DivideHeader.vue";
import scrollToTop from "@/utils/scrollToTop";
import { useContainerScroll } from "@/hooks/useScrollShow";
import getBarChart from "./utils/barChart";
import getPieChart from "./utils/piechart";
......
......@@ -116,7 +116,7 @@
</div>
<div class="title">{{ "调查进展" }}</div>
</div>
<div class="box1-header-right">
<div class="box1-header-right" @click="handleClickToDetail('337')">
{{ "查看详情 >" }}
</div>
</div>
......@@ -253,7 +253,6 @@
<img src="./assets/images/header-message.png" alt="" />
</div>
<div class="header-title">{{ "社交媒体" }}</div>
<div class="more">{{ "更多 +" }}</div>
</div>
<div class="box4-main">
<div class="box4-main-item" v-for="(item, index) in messageList" :key="index">
......
......@@ -271,7 +271,7 @@ const totalDistribution = ref([
},
{
titlle: "投融资限制",
value: 80,
value: 66,
text: "119",
unit: "次",
change: "较上月+1",
......@@ -314,6 +314,15 @@ const totalDistribution = ref([
path: "/scientificFunding",
color: ["#FDE19A", "#FEECBD", "#FFFBE6", "#D68E16"]
},
{
titlle: "创新主体",
value: 89,
text: "89",
unit: "次",
change: "较上月+8",
path: "/innovationSubject",
color: ["#C9AAF0", "#DFCAF6", "#FAF1FF", "#531DAC"]
}
]);
const startIndex = ref(0);
......@@ -497,11 +506,11 @@ const handleClickItem = item => {
};
const swiper = ref(null);
const isOnSwiper = ref(true)
const isOnSwiper = ref(true);
const handleChangeSwiper = (val) => {
isOnSwiper.value = val
}
const handleChangeSwiper = val => {
isOnSwiper.value = val;
};
onMounted(() => {
swiper.value = setInterval(() => {
......
......@@ -193,7 +193,7 @@ export default {
.card {
position: absolute;
height: 180px;
width: 15vw;
width:320px;
padding: 8px 12px;
text-align: left;
cursor: pointer;
......
......@@ -37,17 +37,27 @@
}}
</div>
</div>
<img class="item-card-content-title-image" :src="organizationNews[organizationNewsShow].image"
alt="" />
<img
class="item-card-content-title-image"
:src="organizationNews[organizationNewsShow].image"
alt=""
/>
</div>
<div class="item-header-divider"></div>
<div class="item-card-content-text">
{{ organizationNews[organizationNewsShow].content }}
</div>
<div style="display: flex;margin-top: 30px;">
<div class="item-card-content-tag" v-for="(tag, index) in organizationNews[organizationNewsShow].tag"
<div style="display: flex; margin-top: 30px">
<div
class="item-card-content-tag"
v-for="(tag, index) in organizationNews[organizationNewsShow].tag"
:key="index"
:style="{ color: tag.textColor, background: tag.color, border: `1px solid ${tag.textColor}` }">
:style="{
color: tag.textColor,
background: tag.color,
border: `1px solid ${tag.textColor}`
}"
>
{{ tag.text }}
</div>
</div>
......@@ -80,18 +90,22 @@
<div class="item left">
<div class="item-header">
<img class="item-header-icon" src="@/assets/images/icon/waring-card-header-icon.png" />
<div class="item-header-text" style="background-color: #ce4f51">风险信号 <div class="num">{{ warningList.length
}}</div>
<div class="item-header-text" style="background-color: #ce4f51">
风险信号
<div class="num">{{ warningList.length }}</div>
</div>
</div>
<div class="item-header-divider"></div>
<div style="padding: 30px 23px; height: 400px">
<div class="waring-item" v-for="(item, index) in warningList" :key="index">
<div style="display: flex; height: 47px">
<div class="waring-status" :style="{
color: item.status === 0 ? '#CE4F51' : item.status === 1 ? '#FA8C16' : '#52C41A',
backgroundColor: item.status === 0 ? '#FFF1F0' : item.status === 1 ? '#FFF7E6' : '#F6FFED'
}">
<div
class="waring-status"
:style="{
color: item.status === 0 ? '#CE4F51' : item.status === 1 ? '#FA8C16' : '#52C41A',
backgroundColor: item.status === 0 ? '#FFF1F0' : item.status === 1 ? '#FFF7E6' : '#F6FFED'
}"
>
{{ item.status === 0 ? "特别重大" : item.status === 1 ? "重大风险" : "一般风险" }}
</div>
<div class="waring-text">
......@@ -113,8 +127,15 @@
<div class="item right">
<div class="item-header">
<img class="item-header-icon" src="@/assets/images/icon/news-card-header-icon.png" />
<div class="item-header-text" style="background: rgba(255, 255, 255, 0.65); color: #055fc2">新闻资讯</div>
<div class="item-header-more" style="color: #055fc2; cursor: pointer;" @click="handleToMoreNews">更多 +</div>
<div
class="item-header-text-1"
style="color: #055fc2"
>
新闻资讯
</div>
<div class="item-header-more" style="color: #055fc2; cursor: pointer" @click="handleToMoreNews">
更多 +
</div>
</div>
<div class="item-header-divider"></div>
<div class="news-box">
......@@ -137,8 +158,12 @@
<div class="item right">
<div class="item-header">
<img class="item-header-icon" src="@/assets/images/icon/people-card-header-icon.png" />
<div class="item-header-text" style="background: rgba(255, 255, 255, 0.65); color: #055fc2">人物动态</div>
<div class="item-header-more" style="color: #055fc2">更多 +</div>
<div
class="item-header-text-1"
style="color: #055fc2"
>
人物动态
</div>
</div>
<div class="item-header-divider"></div>
<div class="character-box">
......@@ -188,7 +213,6 @@ const handleToMoreNews = () => {
window.open(route.href, "_blank");
};
const organizationNews = ref([
{
title: "美国白宫发布关于进一步延长TikTok执法宽限期的行政令",
......@@ -221,13 +245,13 @@ const organizationNews = ref([
{
color: "#F5222D",
textColor: "#FFF1F0",
borderColor: 'rgba(255, 163, 158, 1)',
borderColor: "rgba(255, 163, 158, 1)",
text: "人工智能"
},
{
color: "#E6F4FF",
textColor: "#1677FF",
borderColor: 'rgba(145, 202, 255, 1)',
borderColor: "rgba(145, 202, 255, 1)",
text: "通信网络"
}
]
......@@ -388,7 +412,7 @@ function changeOrganizationNews(type) {
: (organizationNewsShow.value = organizationNewsShow.value + 1);
}
}
onMounted(() => { });
onMounted(() => {});
</script>
<style lang="scss" scoped>
......@@ -470,6 +494,7 @@ onMounted(() => { });
height: 48px;
width: 100%;
display: flex;
position: relative;
.item-header-icon {
width: 20px;
......@@ -508,6 +533,15 @@ onMounted(() => { });
font-size: 14px;
}
}
.item-header-text-1 {
// width: 150px;
height: 48px;
line-height: 48px;
text-align: left;
font-weight: 700;
font-size: 20px;
font-family: Microsoft YaHei;
}
.item-header-num {
width: 30px;
......@@ -535,9 +569,10 @@ onMounted(() => { });
font-size: 16px;
line-height: 48px;
text-align: center;
margin-left: calc(100% - 200px);
width: 50px;
margin-left: calc(100% - 250px);
position: absolute;
top: 0;
right: 27px;
}
}
......
......@@ -21,7 +21,6 @@
<div class="right-title">
<img src="./assets/icon02.png" alt="">
<div class="tit">社交媒体</div>
<div class="more">更多 +</div>
</div>
<div class="right-main">
<div class="trump">
......
......@@ -6,7 +6,7 @@
<div class="left-top">
<img src="./assets/icon01.png" alt="" />
<div class="left-top-title">规则限制动态</div>
<span>查看详情 ></span>
<div class="more" @click="handleClickToDetail">查看详情 ></div>
</div>
<div class="left-center">
<img src="./assets/usImg.png" alt="" />
......@@ -166,12 +166,14 @@ const handleToMoreRiskSignal = () => {
top: 15px;
left: 23px;
}
span {
.more {
height: 48px;
line-height: 48px;
font-size: 16px;
font-weight: 400;
font-family: "Microsoft YaHei";
position: absolute;
top: 19px;
top: 0;
right: 40px;
color: rgb(5, 95, 194);
cursor: pointer;
......
......@@ -21,7 +21,6 @@
<div class="right-title">
<img src="./assets/icon02.png" alt="">
<div class="tit">社交媒体</div>
<div class="more">更多 +</div>
</div>
<div class="right-main">
<div class="trump">
......
......@@ -156,8 +156,7 @@
<div class="header-icon">
<img src="@/views/bill/billHome/assets/images/box4-header-icon.png" alt="" />
</div>
<div class="header-title">{{ "智库人物动态" }}</div>
<div class="more">{{ "更多 +" }}</div>
<div class="header-title">{{ "社交媒体" }}</div>
</div>
<div class="box4-main">
<div class="box4-main-item" v-for="(item, index) in messageList" :key="index">
......@@ -605,14 +604,13 @@ onMounted(() => {
}
}
.box3-header-title {
margin-top: 16px;
margin-left: 19px;
height: 22px;
height: 48px;
color: rgba(20, 89, 187, 1);
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 700;
line-height: 22px;
line-height: 48px;
}
.more {
width: 49px;
......@@ -721,14 +719,13 @@ onMounted(() => {
}
}
.header-title {
margin-top: 16px;
height: 48px;
margin-left: 18px;
height: 22px;
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 700;
line-height: 22px;
line-height: 48px;
}
.more {
width: 49px;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论