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

update

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