提交 5a5c70de authored 作者: 徐先红's avatar 徐先红

Merge branch 'master' into 'xxh-dev'

# Conflicts: # src/views/innovationSubject/index.vue
...@@ -166,7 +166,7 @@ body { ...@@ -166,7 +166,7 @@ body {
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
position: relative; position: relative;
box-sizing: border-box; box-sizing: border-box;
height: 64px; height: 96px;
} }
.main-container { .main-container {
...@@ -181,7 +181,7 @@ body { ...@@ -181,7 +181,7 @@ body {
align-items: center; align-items: center;
gap: 12px; gap: 12px;
position: absolute; position: absolute;
left: 13px; left: 160px;
.brand-icon { .brand-icon {
width: 48px; width: 48px;
height: 48px; height: 48px;
...@@ -204,7 +204,7 @@ body { ...@@ -204,7 +204,7 @@ body {
height: 37px; height: 37px;
color: rgba(10, 18, 30, 1); color: rgba(10, 18, 30, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 28px; font-size: 32px;
font-weight: 700; font-weight: 700;
line-height: 37px; line-height: 37px;
} }
...@@ -341,14 +341,14 @@ body { ...@@ -341,14 +341,14 @@ body {
.el-header { .el-header {
padding: 0; padding: 0;
height: 64px; height: 96px;
position: relative; position: relative;
z-index: 1; z-index: 1;
} }
.el-main { .el-main {
padding: 0; padding: 0;
height: calc(100vh - 64px); height: calc(100vh - 96px);
overflow: hidden; overflow: hidden;
overflow-y: auto; overflow-y: auto;
background-color: rgba(246, 251, 255, 1); background-color: rgba(246, 251, 255, 1);
......
...@@ -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: {
......
// 智库概览信息
import request from "@/api/request.js";
// 智库列表
export function getThinkTankList() {
return request({
method: 'GET',
url: `/api/thinkTankOverview/thinkTanks`,
})
}
// 风险信号
export function getThinkTankRiskSignal() {
return request({
method: 'GET',
url: `/api/thinkTankOverview/riskSignal`,
})
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -133,7 +133,8 @@ const headerTitleClasses = computed(() => [ ...@@ -133,7 +133,8 @@ const headerTitleClasses = computed(() => [
.header-icon { .header-icon {
width: 20px; width: 20px;
height: 20px; height: 20px;
margin-right: 14px; margin-left: 5px;
margin-right: 19px;
} }
.blue-title-block { .blue-title-block {
...@@ -147,11 +148,12 @@ const headerTitleClasses = computed(() => [ ...@@ -147,11 +148,12 @@ const headerTitleClasses = computed(() => [
.header-title { .header-title {
font-size: $base-font-size; font-size: $base-font-size;
font-weight: 700; font-weight: 700;
/* color: rgba(10, 87, 166, 1); */ /* color: var(--color-main-active); */
/* color: var(--base-color); */ /* color: var(--base-color); */
color: $base-color; color: $base-color;
line-height: 48px; line-height: 48px;
padding: 0 12px; padding: 0 12px;
font-size: 20px;
} }
.header-title-primary { .header-title-primary {
......
...@@ -5,7 +5,7 @@ import InnovationInstitution from "@/views/innovationSubject/innovativeInstituti ...@@ -5,7 +5,7 @@ import InnovationInstitution from "@/views/innovationSubject/innovativeInstituti
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: {
......
// 门户 import Portal1 from "@/views/portals/portal1/index.vue";
import Portal from "@/views/portals/portal/index.vue"; import Portal2 from "@/views/portals/portal2/index.vue";
const portalRoutes = [ const portalRoutes = [
// 门户 // 门户
{ {
path: "/portal", path: "/portal1",
name: "portal", name: "portal1",
component: Portal, component: Portal1,
meta: {
title: "门户"
}
},
{
path: "/portal2",
name: "portal2",
component: Portal2,
meta: { meta: {
title: "门户" title: "门户"
} }
......
//科技人物观点
import TechnologyFigures from "@/views/technologyFigures/index.vue";
const technologyFiguresRoutes = [
//创新主体
{
path: "/technologyFigures",
name: "TechnologyFigures",
component: TechnologyFigures,
meta: {
title: "主要创新主体"
}
}
]
export default technologyFiguresRoutes
\ No newline at end of file
...@@ -22,7 +22,7 @@ const thinktankRoutes = [ ...@@ -22,7 +22,7 @@ const thinktankRoutes = [
} }
}, },
{ {
path: "/report/:id", path: "/thinkTank/report/:id",
name: "ReportDetail", name: "ReportDetail",
component: ReportDetail, component: ReportDetail,
meta: { meta: {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
} }
:root { :root {
--el-color-primary: rgba(10, 87, 166, 1); --el-color-primary: rgba(5, 95, 194, 1);
/* --el-color-success: #1dd1a1; /* --el-color-success: #1dd1a1;
--el-border-radius-base: 8px; --el-border-radius-base: 8px;
--el-font-size-base: 14px; */ --el-font-size-base: 14px; */
......
...@@ -9,9 +9,9 @@ ...@@ -9,9 +9,9 @@
--btn-plain-bg-color: rgba(255, 255, 255, 1); --btn-plain-bg-color: rgba(255, 255, 255, 1);
--btn-plain-text-color: rgba(59, 65, 75, 1); --btn-plain-text-color: rgba(59, 65, 75, 1);
/* 选中按钮颜色 */ /* 选中按钮颜色 */
--btn-active-border-color: rgba(10, 87, 166, 1); --btn-active-border-color: var(--color-main-active);
--btn-active-bg-color: rgba(231, 243, 255, 1); --btn-active-bg-color: rgba(231, 243, 255, 1);
--btn-active-text-color: rgba(10, 87, 166, 1); --btn-active-text-color: var(--color-main-active);
/* 标签按钮颜色 */ /* 标签按钮颜色 */
......
/* 全局滚动条样式 */
* {
scrollbar-width: thin;
scrollbar-color: #c1c1c1 #f1f1f1;
}
/* Webkit 浏览器 */ /* Webkit 浏览器 */
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 10px; width: 4px;
height: 10px; height: 8px;
} }
::-webkit-scrollbar-track { ::-webkit-scrollbar-track {
...@@ -16,17 +12,17 @@ ...@@ -16,17 +12,17 @@
} }
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
background: #6c757d; background: #c5c7c9;
border-radius: 6px; border-radius: 2px;
border: 2px solid #f8f9fa; /* border: 1px solid #f8f9fa; */
} }
::-webkit-scrollbar-thumb:hover { ::-webkit-scrollbar-thumb:hover {
background: #495057; background: #505357;
} }
::-webkit-scrollbar-thumb:active { ::-webkit-scrollbar-thumb:active {
background: #343a40; background: #505357;
} }
::-webkit-scrollbar-corner { ::-webkit-scrollbar-corner {
...@@ -40,16 +36,16 @@ ...@@ -40,16 +36,16 @@
/* Element UI 组件滚动条优化 */ /* Element UI 组件滚动条优化 */
.el-table__body-wrapper::-webkit-scrollbar { .el-table__body-wrapper::-webkit-scrollbar {
width: 8px; width: 4px;
height: 8px; height: 8px;
} }
.el-table__body-wrapper::-webkit-scrollbar-thumb { .el-table__body-wrapper::-webkit-scrollbar-thumb {
background: #909399; background: #505357;
border-radius: 4px; border-radius: 2px;
} }
.el-select-dropdown .el-scrollbar__wrap { .el-select-dropdown .el-scrollbar__wrap {
scrollbar-width: thin; scrollbar-width: thin;
scrollbar-color: #c1c1c1 #f1f1f1; scrollbar-color: #c1c1c1 #f1f1f1;
} }
\ No newline at end of file \ No newline at end of file
/* 全局 css 变量 */ /* 全局 css 变量 */
$primary-color: var(--el-color-primary); $primary-color: var(--el-color-primary);
$base-color: rgba(10, 87, 166, 1); $base-color: rgba(5, 95, 194, 1);
$base-font-size: 16px; $base-font-size: 16px;
// :root { // :root {
......
...@@ -514,22 +514,21 @@ onMounted(() => { ...@@ -514,22 +514,21 @@ onMounted(() => {
display: flex; display: flex;
position: relative; position: relative;
.header-left { .header-left {
margin-top: 20px; margin-top: 18px;
width: 8px; width: 8px;
height: 16px; height: 20px;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: var(--color-main-active); background: var(--color-main-active);
} }
.title { .title {
margin-left: 22px; margin-left: 14px;
margin-top: 20px; margin-top: 14px;
height: 16px; height: 26px;
line-height: 16px; line-height: 26px;
color: var(--color-main-active); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 20px;
font-weight: 600; font-weight: 700;
line-height: 16px;
} }
.header-btn-box { .header-btn-box {
position: absolute; position: absolute;
......
const getPieChart = (data,colorList) => { const getPieChart = (data,colorList) => {
let option = { let option = {
color: colorList, // color: colorList,
series: [ series: [
{ {
type: 'pie', type: 'pie',
......
...@@ -50,12 +50,12 @@ ...@@ -50,12 +50,12 @@
</div> </div>
<div class="text">{{ "法案原文" }}</div> <div class="text">{{ "法案原文" }}</div>
</div> </div>
<div class="btn2"> <!-- <div class="btn2">
<div class="icon"> <div class="icon">
<img src="./assets/icons/btn-icon2.png" alt="" /> <img src="./assets/icons/btn-icon2.png" alt="" />
</div> </div>
<div class="text">{{ "查看官网" }}</div> <div class="text">{{ "查看官网" }}</div>
</div> </div> -->
<div class="btn3"> <div class="btn3">
<div class="icon"> <div class="icon">
<img src="./assets/icons/btn-icon3.png" alt="" /> <img src="./assets/icons/btn-icon3.png" alt="" />
...@@ -415,7 +415,7 @@ onMounted(() => { ...@@ -415,7 +415,7 @@ onMounted(() => {
// } // }
// } // }
.icon { .icon {
margin-top: 1px; margin-top: 4px;
width: 16px; width: 16px;
height: 16px; height: 16px;
img { img {
...@@ -426,7 +426,7 @@ onMounted(() => { ...@@ -426,7 +426,7 @@ onMounted(() => {
.name { .name {
color: rgba(95, 101, 108, 1); color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 14px; font-size: 18px;
font-weight: 400; font-weight: 400;
line-height: 22px; line-height: 22px;
letter-spacing: 0px; letter-spacing: 0px;
......
...@@ -62,27 +62,27 @@ const handleClickLeftSiderBtn = (item,index) => { ...@@ -62,27 +62,27 @@ const handleClickLeftSiderBtn = (item,index) => {
width: 160px; width: 160px;
.sider-btn { .sider-btn {
margin-top: 20px; margin-top: 20px;
margin-left: 23px; margin-left: 20px;
width: 112px; width: 120px;
height: 32px; height: 32px;
display: flex; display: flex;
line-height: 32px;
border-radius: 16px; border-radius: 16px;
cursor: pointer; cursor: pointer;
.btn-text { .btn-text {
width: 82px; margin-left: 28px;
width: 68px;
height: 32px; height: 32px;
line-height: 32px; line-height: 32px;
text-align: left; text-align: left;
box-sizing: border-box; box-sizing: border-box;
padding-left: 24px; font-size: 16px;
font-size: 14px; font-weight: 400;
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
color: rgba(95, 101, 108, 1); color: rgba(95, 101, 108, 1);
} }
.btn-icon { .btn-icon {
margin-top: 9px;
width: 22px; width: 22px;
padding-top: 2px;
} }
} }
.siderBtnActive { .siderBtnActive {
......
...@@ -589,22 +589,21 @@ onMounted(async () => { ...@@ -589,22 +589,21 @@ onMounted(async () => {
display: flex; display: flex;
position: relative; position: relative;
.header-left { .header-left {
margin-top: 20px; margin-top: 18px;
width: 8px; width: 8px;
height: 16px; height: 20px;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: var(--color-main-active); background: var(--color-main-active);
} }
.title { .title {
margin-left: 22px; margin-left: 14px;
margin-top: 20px; margin-top: 14px;
height: 16px; height: 26px;
line-height: 16px; line-height: 26px;
color: var(--color-main-active); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 20px;
font-weight: 600; font-weight: 700;
line-height: 16px;
} }
.header-switch-box { .header-switch-box {
position: absolute; position: absolute;
......
...@@ -742,22 +742,21 @@ const handleClickDetail = (isShow) => { ...@@ -742,22 +742,21 @@ const handleClickDetail = (isShow) => {
display: flex; display: flex;
position: relative; position: relative;
.header-left { .header-left {
margin-top: 20px; margin-top: 18px;
width: 8px; width: 8px;
height: 16px; height: 20px;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: var(--color-main-active); background: var(--color-main-active);
} }
.title { .title {
margin-left: 14px; margin-left: 14px;
margin-top: 20px; margin-top: 14px;
height: 16px; height: 26px;
line-height: 16px; line-height: 26px;
color: var(--color-main-active); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 20px;
font-weight: 600; font-weight: 700;
line-height: 16px;
} }
.header-right { .header-right {
position: absolute; position: absolute;
......
...@@ -278,27 +278,27 @@ onMounted(() => {}); ...@@ -278,27 +278,27 @@ onMounted(() => {});
width: 160px; width: 160px;
.sider-btn { .sider-btn {
margin-top: 20px; margin-top: 20px;
margin-left: 23px; margin-left: 20px;
width: 112px; width: 120px;
height: 32px; height: 32px;
display: flex; display: flex;
line-height: 32px;
border-radius: 16px; border-radius: 16px;
cursor: pointer; cursor: pointer;
.btn-text { .btn-text {
width: 82px; width: 68px;
height: 32px; height: 32px;
margin-left: 28px;
line-height: 32px; line-height: 32px;
text-align: left; text-align: left;
box-sizing: border-box; box-sizing: border-box;
padding-left: 24px; font-size: 16px;
font-size: 14px; font-weight: 400;
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
color: rgba(95, 101, 108, 1); color: rgba(95, 101, 108, 1);
} }
.btn-icon { .btn-icon {
width: 22px; width: 22px;
padding-top: 2px; padding-top: 9px;
} }
} }
.siderBtnActive { .siderBtnActive {
......
...@@ -59,26 +59,25 @@ const handleClickLeftSiderBtn = (item,index) => { ...@@ -59,26 +59,25 @@ const handleClickLeftSiderBtn = (item,index) => {
.sider-btn { .sider-btn {
margin-top: 20px; margin-top: 20px;
margin-left: 10px; margin-left: 10px;
width: 140px; width: 136px;
height: 32px; height: 32px;
display: flex; display: flex;
line-height: 32px;
border-radius: 16px; border-radius: 16px;
cursor: pointer; cursor: pointer;
.btn-text { .btn-text {
width: 110px; width: 110px;
margin-left: 18px;
height: 32px; height: 32px;
line-height: 32px; line-height: 32px;
text-align: left; text-align: left;
box-sizing: border-box; box-sizing: border-box;
padding-left: 24px; font-size: 16px;
font-size: 14px;
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
color: rgba(95, 101, 108, 1); color: rgba(95, 101, 108, 1);
} }
.btn-icon { .btn-icon {
width: 22px; width: 22px;
padding-top: 2px; padding-top: 9px;
} }
} }
.siderBtnActive { .siderBtnActive {
......
...@@ -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);
...@@ -721,22 +722,21 @@ onMounted(async () => { ...@@ -721,22 +722,21 @@ onMounted(async () => {
display: flex; display: flex;
position: relative; position: relative;
.header-left { .header-left {
margin-top: 20px; margin-top: 18px;
width: 8px; width: 8px;
height: 16px; height: 20px;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: var(--color-main-active); background: var(--color-main-active);
} }
.title { .title {
margin-left: 22px; margin-left: 14px;
margin-top: 20px; margin-top: 14px;
height: 16px; height: 26px;
line-height: 16px; line-height: 26px;
color: var(--color-main-active); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 20px;
font-weight: 600; font-weight: 700;
line-height: 16px;
} }
.header-right { .header-right {
position: absolute; position: absolute;
...@@ -785,7 +785,7 @@ onMounted(async () => { ...@@ -785,7 +785,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);
} }
...@@ -642,22 +634,21 @@ onMounted(() => { ...@@ -642,22 +634,21 @@ onMounted(() => {
display: flex; display: flex;
position: relative; position: relative;
.header-left { .header-left {
margin-top: 20px; margin-top: 18px;
width: 8px; width: 8px;
height: 16px; height: 20px;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: var(--color-main-active); background: var(--color-main-active);
} }
.title { .title {
margin-left: 14px; margin-left: 14px;
margin-top: 20px; margin-top: 14px;
height: 16px; height: 26px;
line-height: 16px;
color: var(--color-main-active); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 18px; font-size: 20px;
font-weight: 700; font-weight: 700;
line-height: 16px; line-height: 26px;
} }
.header-btn-box { .header-btn-box {
position: absolute; position: absolute;
......
...@@ -603,21 +603,21 @@ onMounted(() => { ...@@ -603,21 +603,21 @@ onMounted(() => {
display: flex; display: flex;
position: relative; position: relative;
.icon { .icon {
margin-top: 20px; margin-top: 18px;
width: 8px; width: 8px;
height: 16px; height: 20px;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: rgba(10, 87, 166, 1); background: var(--color-main-active);
} }
.title { .title {
margin-left: 16px; margin-left: 14px;
margin-top: 16px; margin-top: 14px;
height: 24px; height: 26px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 18px; font-size: 20px;
font-weight: 700; font-weight: 700;
line-height: 24px; line-height: 26px;
} }
.header-right { .header-right {
display: flex; display: flex;
...@@ -661,7 +661,7 @@ onMounted(() => { ...@@ -661,7 +661,7 @@ onMounted(() => {
.header-in-title { .header-in-title {
margin-left: 15px; margin-left: 15px;
height: 24px; height: 24px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 18px; font-size: 18px;
font-weight: 700; font-weight: 700;
...@@ -748,7 +748,7 @@ onMounted(() => { ...@@ -748,7 +748,7 @@ onMounted(() => {
margin-left: 13px; margin-left: 13px;
height: 24px; height: 24px;
width: 943px; width: 943px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
......
...@@ -446,21 +446,21 @@ onMounted(async () => { ...@@ -446,21 +446,21 @@ onMounted(async () => {
position: relative; position: relative;
height: 50px; height: 50px;
.box-header-left { .box-header-left {
margin-top: 20px; margin-top: 18px;
width: 8px; width: 8px;
height: 16px; height: 20px;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: var(--color-main-active); background: var(--color-main-active);
} }
.box-header-title { .box-header-title {
margin-left: 22px; margin-left: 14px;
margin-top: 20px; margin-top: 14px;
height: 16px; height: 26px;
color: var(--color-main-active); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 20px;
font-weight: 600; font-weight: 700;
line-height: 16px; line-height: 26px;
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
} }
......
<template>
<div class="sanction-content">
<div class="sanction-header">
<div class="section-header">
<div class="section-icon"></div>
<h3 class="section-title">被制裁时间轴</h3>
</div>
<div class="action-icons">
<img src="../../../assets/icons/download.png" alt="下载" class="action-icon">
<img src="../../../assets/icons/shoucang.png" alt="收藏" class="action-icon">
</div>
</div>
<div style=" height: 34%;">
<Timeline :data="sanctionTimeData" text-key="title" id-key="seq" type="inline" />
</div>
<div style=" height: calc(60% - 120px);">
<process />
</div>
<div class="chart-text">
<img src="@/assets/icons/model.png" style="width: 19px;height: 20px;">
<div>
近年来,华为遭遇了严峻的外部技术封锁,其核心源于某些国家的持续制裁。这主要包括被列入“实体清单”,禁止其未经许可从美国公司获取芯片等关键技术;以及遭受更严格的“外国直接产品规则”打击,旨在切断其利用美国工具、软件和技术设计或制造先进芯片的渠道。这些措施不仅限制了华为自身产品的设计与生产,也影响了其全球供应链,使其在获取先进半导体、移动操作系统生态(如GMS)及基础软件工具等方面面临巨大挑战,意图从根本上遏制其技术发展。
</div>
<div class="arrow-2">
</div>
</div>
</div>
</template>
<script setup>
import { ref, computed } from 'vue';
import Timeline from './Timeline.vue';
import process from './process.vue';
const sanctionTimeData = ref([
{
"title": "初步限制与“实体清单”",
"content": "美国开始游说盟友禁止使用华为5G设备。2019年5月,美国商务部将华为及其70家关联公司列入“实体清单”,禁止关联公司在未获许可证的情况下向华为出售技术和产品。",
"time": "2025年10月"
},
{
"title": "“外国直接产品规则”升级",
"content": "制裁全面升级。任何公司,只要使用美国的技术或设备为华为生产芯片,都必须先获得美国许可。此举措旨在切断华为与全球顶级芯片制造商(如台积电)的联系。",
"time": "2025年10月"
},
{
"title": "进一步封堵漏洞",
"content": "将华为在21个国家的38家子公司列入实体清单,封堵华为通过第三方子公司获取受控物项的可能性。",
"time": "2025年10月"
},
{
"title": "5G设备禁令",
"content": "美国联邦通信委员会将华为、中兴等中国公司列为“国家安全威胁”,禁止美国运营商使用联邦补贴资金购买其设备。",
"time": "2025年10月"
},
{
"title": "全面切断与制裁加码",
"content": "美国政府吊销了英特尔、高通等公司向华为出口4G、Wi-Fi等芯片的许可证。据报道,美国已完全停止向华为发放所有产品的出口许可证。持续将更多与华为相关的公司列入实体清单。",
"time": "2025年10月"
}
])
</script>
<style scoped>
.sanction-content {
width: calc(100% - 320px);
height: calc(100vh - 220px);
overflow: auto;
border-radius: 4px;
margin: 16px 160px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
justify-content: space-between;
}
.sanction-header {
width: 100%;
height: 60px;
display: flex;
padding: 16px 0;
}
.section-header {
display: flex;
align-items: center;
}
.action-icons {
display: flex;
gap: 15px;
margin-left: auto;
}
.action-icon {
/* 收藏按钮 */
width: 28px;
height: 28px;
cursor: pointer;
}
.section-icon {
width: 7px;
height: 18px;
border-radius: 0 4px 4px 0;
background: rgba(5, 95, 194, 1);
margin-right: 17px;
}
.section-title {
font-size: 15px;
color: #1d2129;
margin: 0;
color: rgba(5, 95, 194, 1);
font-family: Microsoft YaHei;
font-size: 18px;
font-weight: 700;
line-height: 24px;
letter-spacing: 1px;
text-align: left;
}
.chart-text {
/* 大模型对话结果 */
height: 80px;
margin: 12px 20px;
/* 自动布局 */
display: flex;
flex-direction: row;
align-items: center;
gap: 10;
padding: 0px 12px 0px 12px;
box-sizing: border-box;
border: 1px solid rgba(231, 243, 255, 1);
border-radius: 4px;
background: rgba(246, 251, 255, 1);
color: rgba(5, 95, 194, 1);
font-size: 16px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: justify;
gap: 13px;
}
.arrow-2 {
border-radius: 50%;
width: 24px;
height: 24px;
font-size: 24px;
background: rgba(231, 243, 255, 1);
}
</style>
\ No newline at end of file
...@@ -4,8 +4,13 @@ ...@@ -4,8 +4,13 @@
&lt; &lt;
</button> --> </button> -->
<div class="timeline-box"> <div class="timeline-box" :style="{
<div class="line"></div> height: '100%'
// height: type === 'normal' ? '100%' : '50vh'
}">
<div class="line"
:style="{ '--i': type === 'normal' ? ' 50%' : '100%', '--translateY': type === 'normal' ? ' -50%' : '-100%', }">
</div>
<div v-for="(item, i) in showList" :key="item[idKey]" class="node" :style="leftOffset(i)"> <div v-for="(item, i) in showList" :key="item[idKey]" class="node" :style="leftOffset(i)">
<div class="node" :style="leftOffset(i)"> <div class="node" :style="leftOffset(i)">
<!-- 圆环 --> <!-- 圆环 -->
...@@ -15,14 +20,19 @@ ...@@ -15,14 +20,19 @@
<div class="time" :style="{ <div class="time" :style="{
marginTop: linePos(i, flip) === 'down' ? '10px' : '-40px' marginTop: linePos(i, flip) === 'down' ? '10px' : '-40px'
}"> }" v-if="type === 'normal'">
{{ item.time }} {{ item.time }}
</div> </div>
<!-- 卡片:放到线右侧 --> <!-- 卡片:放到线右侧 -->
<div class="card" :class="[cardPos(i, flip), 'right-side']" @click="$emit('click-card', item)" :style="{ <div class="card" :class="[cardPos(i, flip), 'right-side']" @click="$emit('click-card', item)" :style="{
marginTop: linePos(i, flip) === 'down' ? '100px' : '-40px' marginTop: linePos(i, flip) === 'down' ? '100px' : '-40px',
marginLeft: type === 'normal' ? '150px' : '0px'
}"> }">
<div class="time" :style="{
marginLeft: 0
}" v-if="type !== 'normal'">
{{ item.time }}
</div>
<div class="title"> <div class="title">
{{ item.title }} {{ item.title }}
<!-- <img class="item-header-icon" src="@/assets/images/icon/copy.png" style="cursor: pointer;"></img> --> <!-- <img class="item-header-icon" src="@/assets/images/icon/copy.png" style="cursor: pointer;"></img> -->
...@@ -56,7 +66,11 @@ export default { ...@@ -56,7 +66,11 @@ export default {
idKey: { // 唯一标识字段 idKey: { // 唯一标识字段
type: String, type: String,
default: 'id' default: 'id'
} },
type: { // 父组件传入的数组
type: String,
default: 'normal'
},
}, },
data() { data() {
return { index: 0 }; return { index: 0 };
...@@ -72,17 +86,17 @@ export default { ...@@ -72,17 +86,17 @@ export default {
}, },
methods: { methods: {
leftOffset(i) { leftOffset(i) {
return { left: `${(i * 100) / 5}%` }; return this.type === 'normal' ? { left: `${(i * 100) / 5}%`, top: '50%' } : { left: `${(i * 100) / 5}%`, top: '100%' }
}, },
/* 上下层翻转(保留上次逻辑) */ /* 上下层翻转(保留上次逻辑) */
cardPos(i, flip = false) { cardPos(i, flip = false) {
return (i % 2) ^ flip ? 'down' : 'up'; return this.type === 'normal' ? ((i % 2) ^ flip ? 'down' : 'up') : ('up')
}, },
/* 线延伸方向 = 卡片出现方向 */ /* 线延伸方向 = 卡片出现方向 */
linePos(i, flip = false) { linePos(i, flip = false) {
return this.cardPos(i, flip); // up / down return this.type === 'normal' ? this.cardPos(i, flip) : this.cardPos(i, flip) // up / down
} }
} }
}; };
...@@ -96,6 +110,7 @@ export default { ...@@ -96,6 +110,7 @@ export default {
width: 100%; width: 100%;
position: relative; position: relative;
padding: 0 40px; padding: 0 40px;
height: 100%;
} }
.arrow { .arrow {
...@@ -131,7 +146,7 @@ export default { ...@@ -131,7 +146,7 @@ export default {
.timeline-box { .timeline-box {
flex: 1; flex: 1;
height: 100%; /* height: 100%; */
position: relative; position: relative;
} }
...@@ -139,12 +154,10 @@ export default { ...@@ -139,12 +154,10 @@ export default {
position: absolute; position: absolute;
left: 0; left: 0;
right: 0; right: 0;
top: 50%; top: var(--i);
height: 6px; height: 6px;
background-image: url("@/assets/images/bg/timeLine-bg.jpg"); background-image: url("@/assets/images/bg/timeLine-bg.jpg");
transform: translateY(var(--translateY));
transform: translateY(-50%);
background-size: auto 100%; background-size: auto 100%;
} }
...@@ -152,7 +165,7 @@ export default { ...@@ -152,7 +165,7 @@ export default {
.node { .node {
position: absolute; position: absolute;
top: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
z-index: 2; z-index: 2;
} }
...@@ -242,7 +255,7 @@ export default { ...@@ -242,7 +255,7 @@ export default {
} }
.card.up { .card.up {
bottom: 20px; bottom: 50px;
} }
.card.down { .card.down {
......
<template>
<div class="chart-container">
<div v-for="(item, index) in chartData" :key="index" class="chart-card">
<!-- 研发投入 -->
<div class="metric-section">
<div class="metric-header">
<span class="title">研发投入</span>
<span class="growth-badge">+13.2%</span>
</div>
<!-- 制裁后 -->
<div class="bar-row">
<div class="year-label">{{ item.year }}</div>
<div style="width: calc(100% - 66px);">
<div class="bar after" :style="{ width: getInvestmentWidth(item.investmentAfter) + '%' }">
<div class="value-label">{{ formatInvestment(item.investmentAfter) }}</div>
</div>
</div>
</div>
<!-- 制裁前 -->
<div class="bar-row">
<div class="year-label">{{ item.year }}</div>
<div style="width: calc(100% - 66px);">
<div class="bar before" :style="{ width: getInvestmentWidth(item.investmentBefore) + '%' }">
<div class="value-label">{{ formatInvestment(item.investmentBefore) }}</div>
</div>
</div>
</div>
</div>
<!-- 研发人员 -->
<div class="metric-section">
<div class="metric-header">
<span class="title">研发人员</span>
<span class="growth-badge">+13.2%</span>
</div>
<!-- 制裁后 -->
<div class="bar-row">
<div class="year-label">{{ item.year }}</div>
<div style="width: calc(100% - 66px);">
<div class="bar after" :style="{ width: getStaffWidth(item.staffAfter) + '%' }">
<div class="value-label">{{ formatStaff(item.staffAfter) }}</div>
</div>
</div>
</div>
<!-- 制裁前 -->
<div class="bar-row">
<div class="year-label">{{ item.year }}</div>
<div style="width: calc(100% - 66px);">
<div class="bar before" :style="{ width: getStaffWidth(item.staffBefore) + '%' }">
<div class="value-label">{{ formatStaff(item.staffBefore) }}</div>
</div>
</div>
</div>
</div>
<!-- 图例 -->
<div class="legend">
<div class="legend-item">
<div class="color-box after"></div>
<span>制裁后</span>
</div>
<div class="legend-item">
<div class="color-box before"></div>
<span>制裁前</span>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, computed } from 'vue';
// 模拟从 JSON 导入(实际可替换为 import data from './rdData.json')
const rawData = [
{ year: "2019", investmentBefore: 1.01, investmentAfter: 1.37, staffBefore: 80000, staffAfter: 96000 },
{ year: "2020", investmentBefore: 1.15, investmentAfter: 1.52, staffBefore: 85000, staffAfter: 102000 },
{ year: "2021", investmentBefore: 1.20, investmentAfter: 1.68, staffBefore: 90000, staffAfter: 110000 },
{ year: "2022", investmentBefore: 1.25, investmentAfter: 1.75, staffBefore: 92000, staffAfter: 115000 },
{ year: "2023", investmentBefore: 1.30, investmentAfter: 1.85, staffBefore: 95000, staffAfter: 120000 }
];
const chartData = ref(rawData);
// === 投入相关计算 ===
const maxInvestment = computed(() => {
return Math.max(...chartData.value.flatMap(d => [d.investmentBefore, d.investmentAfter]));
});
function getInvestmentWidth(value) {
return Math.min(100, (value / maxInvestment.value) * 100);
}
function formatInvestment(value) {
return value.toFixed(2) + '亿元';
}
// === 人员相关计算 ===
const maxStaff = computed(() => {
return Math.max(...chartData.value.flatMap(d => [d.staffBefore, d.staffAfter]));
});
function getStaffWidth(value) {
return Math.min(100, (value / maxStaff.value) * 100);
}
function formatStaff(value) {
return Math.round(value / 1000) + 'k+';
}
</script>
<style scoped>
.chart-container {
display: flex;
flex-wrap: wrap;
gap: 24px;
padding: 24px;
}
.chart-card {
flex: 1;
min-width: 260px;
max-width: 320px;
background: rgba(240, 249, 255, 1);
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
padding: 20px;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.metric-section {
margin-bottom: 24px;
}
.metric-header {
display: flex;
align-items: center;
margin-bottom: 12px;
}
.title {
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 700;
line-height: 30px;
letter-spacing: 0px;
text-align: justify;
}
.growth-badge {
height: 30px;
line-height: 30px;
box-sizing: border-box;
border: 1px solid rgba(166, 227, 111, 0.5);
border-radius: 4px;
background: rgba(166, 227, 111, 0.2);
color: rgba(33, 129, 57, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 400;
line-height: 30px;
letter-spacing: 0px;
text-align: center;
padding: 0 4px;
margin-left: 8px;
}
.bar-row {
display: flex;
align-items: center;
height: 28px;
margin-bottom: 8px;
}
.year-label {
width: 66px;
font-size: 13px;
color: #64748b;
text-align: left;
}
.bar {
flex: 0 0 auto;
height: 24px;
border-radius: 0 12px 12px 0px;
min-width: 20px;
position: relative;
/* 👈 关键:为内部绝对定位提供参照 */
display: flex;
align-items: center;
justify-content: flex-end;
/* 数值靠右 */
padding-right: 8px;
/* 避免贴边 */
box-sizing: border-box;
}
/* 更精准的渐变色(匹配设计图质感) */
.after {
background: linear-gradient(90deg, #EEEBF0, #CE4F51);
}
.before {
background: linear-gradient(90deg, #DDEEFF, #1677FF);
}
.value-label {
width: auto !important;
/* 覆盖外部 width */
margin-left: 0 !important;
font-size: 12px;
color: white;
/* 白色文字更清晰 */
text-shadow: 0 0 2px rgba(0, 0, 0, 0.3);
/* 增强可读性 */
white-space: nowrap;
overflow: hidden;
}
.legend {
display: flex;
gap: 16px;
font-size: 12px;
color: #64748b;
margin-top: 12px;
padding-top: 12px;
}
.legend-item {
display: flex;
align-items: center;
gap: 6px;
}
.color-box {
width: 14px;
height: 14px;
}
.color-box.after {
background: linear-gradient(90deg, #EEEBF0, #CE4F51);
}
.color-box.before {
background: linear-gradient(90deg, #DDEEFF, #1677FF);
}
</style>
\ No newline at end of file
[
{
"year": "2019",
"investmentBefore": "1.01亿元",
"investmentAfter": "1.37亿元",
"staffBefore": "80000+",
"staffAfter": "96000+"
},
{
"year": "2020",
"investmentBefore": "1.01亿元",
"investmentAfter": "1.37亿元",
"staffBefore": "80000+",
"staffAfter": "96000+"
},
{
"year": "2021",
"investmentBefore": "1.01亿元",
"investmentAfter": "1.37亿元",
"staffBefore": "80000+",
"staffAfter": "96000+"
},
{
"year": "2022",
"investmentBefore": "1.01亿元",
"investmentAfter": "1.37亿元",
"staffBefore": "80000+",
"staffAfter": "96000+"
},
{
"year": "2023",
"investmentBefore": "1.01亿元",
"investmentAfter": "1.37亿元",
"staffBefore": "80000+",
"staffAfter": "96000+"
}
]
{
"openapi": "3.0.1",
"info": { "title": "刷课", "description": "", "version": "1.0.0" },
"tags": [],
"paths": {
"https://www.casmooc.cn/server/api/study/submit": {
"post": {
"summary": "刷课",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "x-access-origin",
"in": "header",
"description": "",
"required": false,
"example": "aHR0cHM6Ly93d3cuY2FzbW9vYy5jbg==",
"schema": { "type": "string" }
},
{
"name": "x-access-token",
"in": "header",
"description": "",
"required": false,
"example": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzQ1NzY0MjksIm9wZXJhdG9ySWQiOiIxOTI0MzI2NDYwIn0.wZRjm7v4wMtYAEw3tpuGy879Ci3gY-fq7qaIedyJBZU",
"schema": { "type": "string" }
}
],
"requestBody": {
"content": {
"application/json": {
"schema": { "type": "object", "properties": {} },
"example": {
"belongCourseId": "",
"courseId": "1471492433195",
"isRecordAudio": 0,
"lastLearnTime": 1,
"recordDuration": "14400",
"studyLockUUID": "070885784AC74CE5BD7E104E2564CF7E"
}
}
}
},
"responses": {
"200": {
"description": "",
"content": { "application/json": { "schema": { "type": "object", "properties": {} } } },
"headers": {}
}
},
"security": []
}
}
},
"components": { "schemas": {}, "responses": {}, "securitySchemes": {} },
"servers": [],
"security": []
}
...@@ -138,6 +138,8 @@ ...@@ -138,6 +138,8 @@
<div class="main-content" v-if="activeTab === '研发实力'"> <div class="main-content" v-if="activeTab === '研发实力'">
<Capability /> <Capability />
</div> </div>
<SanctionsSituation v-if="activeTab === '被制裁情况'" />
<SupplyChain v-if="activeTab === '供应链情况'" />
</div> </div>
</template> </template>
...@@ -147,7 +149,8 @@ import data from './data/huaweiData.json' ...@@ -147,7 +149,8 @@ import data from './data/huaweiData.json'
import movementData from './data/movement.json' import movementData from './data/movement.json'
import Timeline from "./component/Timeline.vue"; import Timeline from "./component/Timeline.vue";
import Capability from './component/Capability.vue'; import Capability from './component/Capability.vue';
import SanctionsSituation from './component/SanctionsSituation‌.vue'
import SupplyChain from './component/SupplyChain.vue';
const tabList = ref(['基础信息', '研发实力', '被制裁情况', '供应链情况']) const tabList = ref(['基础信息', '研发实力', '被制裁情况', '供应链情况'])
const activeTab = ref('基础信息') const activeTab = ref('基础信息')
const tabListSmall = ref(['企业概况', '企业动态']) const tabListSmall = ref(['企业概况', '企业动态'])
......
...@@ -43,7 +43,7 @@ const getDonutChart = (nameList, valueList, isPercent = false) => { ...@@ -43,7 +43,7 @@ const getDonutChart = (nameList, valueList, isPercent = false) => {
radius: ['45%', '70%'], // 内环 / 外环 radius: ['45%', '70%'], // 内环 / 外环
center: ['40%', '50%'], center: ['40%', '50%'],
avoidLabelOverlap: false, avoidLabelOverlap: false,
itemStyle: { borderRadius: 0, borderColor: '#fff', borderWidth: 2 }, itemStyle: { borderRadius: 0, borderColor: '#fff', borderWidth: 0 },
label: { label: {
show: false, show: false,
position: 'inside', position: 'inside',
......
const getGraphChart = (nodes, links) => {
const option = {
legend: {
// data: categories.map(c => c.name),
show: false,
top: 40,
textStyle: {
fontSize: 12
}
},
animation: true,
animationDuration: 1000,
animationEasing: 'cubicOut',
series: [{
type: 'graph',
itemStyle: {
color: '#73C0DE'
},
layout: 'force',
data: nodes,
links: links,
// categories: categories,
roam: true,
label: {
show: true,
position: 'bottom',
formatter: '{b}',
fontSize: 12,
fontWeight: 'bold',
// backgroundColor: 'rgba(255,255,255,0.8)',
padding: [4, 6],
borderRadius: 4
},
lineStyle: {
color: 'source',
curveness: 0,
width: 1,
color: '#AED6FF'
},
edgeSymbol: ['none', 'arrow'],
edgeSymbolSize: [0, 5],
emphasis: {
focus: 'adjacency',
lineStyle: {
width: 4
},
label: {
show: true,
fontSize: 14
}
},
force: {
repulsion: 300,
gravity: 0,
edgeLength: 300
}
}],
// color: ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de']
};
return option
}
export default getGraphChart
\ No newline at end of file
...@@ -3,28 +3,18 @@ import * as echarts from "echarts"; ...@@ -3,28 +3,18 @@ import * as echarts from "echarts";
const getBarChart = (nameList, valueList, isPer) => { const getBarChart = (nameList, valueList, isPer) => {
const option = { const option = {
title: { text: '' }, title: { text: '' },
legend: {
icon: 'circle',
orient: 'horizontal', // 横向
top: 0, // 图上方
left: 'center', // 水平居中
textStyle: {
fontSize: 14 // 字号,按需调整
},
grid: { top: 60 },
data: ['美国', '欧盟', '英国', '日本', '韩国', '加拿大']
},
radar: { radar: {
radius: '50%', // 关键:缩小整个雷达 radius: '50%', // 关键:缩小整个雷达
center: ['50%', '60%'], // 可选:再往下挪一点,避免图例挤在一起 center: ['50%', '50%'], // 可选:再往下挪一点,避免图例挤在一起
indicator: [ indicator: [
{ name: '能源', max: 6500 }, { name: '5G通信', max: 6500 },
{ name: '集成电路', max: 16000 }, { name: '生物科技', max: 16000 },
{ name: '人工智能', max: 30000 }, { name: '人工智能', max: 30000 },
{ name: '通信网络', max: 38000 }, { name: '物联网', max: 38000 },
{ name: '量子科技', max: 52000 }, { name: '量子科技', max: 52000 },
{ name: '生物科技', max: 25000 } { name: '智能汽车', max: 25000 }
], ],
axisName: { axisName: {
formatter: '{value}', formatter: '{value}',
...@@ -38,37 +28,18 @@ const getBarChart = (nameList, valueList, isPer) => { ...@@ -38,37 +28,18 @@ const getBarChart = (nameList, valueList, isPer) => {
name: 'Budget vs spending', name: 'Budget vs spending',
type: 'radar', type: 'radar',
symbol: 'none', symbol: 'none',
// 添加或修改 lineStyle 属性来控制线条粗细
lineStyle: {
width: 1, // 调整这个值可以改变线条的粗细,数值越大线条越粗
color: '#69B1FF'
},
data: [ data: [
{ {
value: [4200, 3000, 20000, 35000, 50000, 18000], value: [4200, 3000, 20000, 35000, 50000, 18000],
name: '美国', name: '美国',
areaStyle: { color: 'rgba(10, 87, 166, 0.2)' } areaStyle: { color: 'rgba(105, 177, 255, 0.1)' }
},
{
value: [5000, 14000, 28000, 26000, 42000, 21000],
name: '欧盟',
areaStyle: { color: 'rgba(206, 79, 81, 0.2)' }
},
{
value: [4000, 14000, 18000, 21000, 32000, 10000],
name: '英国',
areaStyle: { color: 'rgba(250, 140, 22, 0.2)' }
}, },
{
value: [4000, 14000, 18000, 21000, 32000, 10000],
name: '日本',
areaStyle: { color: 'rgba(250, 140, 22, 0.2)' }
},
{
value: [4000, 14000, 18000, 21000, 32000, 10000],
name: '韩国',
areaStyle: { color: 'rgba(250, 140, 22, 0.2)' }
},
{
value: [4000, 14000, 18000, 21000, 32000, 10000],
name: '加拿大',
areaStyle: { color: 'rgba(250, 140, 22, 0.2)' }
}
] ]
} }
] ]
......
...@@ -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;
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
</div> </div>
<div class="btn"> <div class="btn">
<button class="btn1"><img src="./assets/icon01.png" alt="" />查看原文</button> <button class="btn1"><img src="./assets/icon01.png" alt="" />查看原文</button>
<button class="btn1"><img src="./assets/icon02.png" alt="" />查看官网</button> <!-- <button class="btn1"><img src="./assets/icon02.png" alt="" />查看官网</button> -->
<button class="btn1 active"><img src="./assets/icon03.png" alt="" />分析报告</button> <button class="btn1 active"><img src="./assets/icon03.png" alt="" />分析报告</button>
</div> </div>
</div> </div>
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
搜索 搜索
</div> </div>
</div> </div>
<div class="search-center"> <!-- <div class="search-center">
<div class="search-item"> <div class="search-item">
<div class="search-item-num">32</div> <div class="search-item-num">32</div>
<div class="search-item-name">相关法案</div> <div class="search-item-name">相关法案</div>
...@@ -34,23 +34,31 @@ ...@@ -34,23 +34,31 @@
<div class="search-item-num">41</div> <div class="search-item-num">41</div>
<div class="search-item-name">相关政府公告</div> <div class="search-item-name">相关政府公告</div>
</div> </div>
</div> </div> -->
<div class="search-bottom"> <div class="search-bottom">
<div class="btn" @click="scrollToTop('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">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div> </div>
<div class="btn" @click="scrollToTop('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">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div> </div>
<div class="btn" @click="scrollToTop('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">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div> </div>
<div class="btn" @click="scrollToTop('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">
<img src="@/assets/icons/arrow-right-icon.png" alt="" />
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -152,7 +160,7 @@ const handleBackHome = () => { ...@@ -152,7 +160,7 @@ const handleBackHome = () => {
padding: 44px 160px 30px 160px; padding: 44px 160px 30px 160px;
.search { .search {
width: 960px; width: 960px;
height: 225px; height: 168px;
margin: 0 auto 68px auto; margin: 0 auto 68px auto;
.search-main { .search-main {
...@@ -243,41 +251,45 @@ const handleBackHome = () => { ...@@ -243,41 +251,45 @@ const handleBackHome = () => {
width: 688px; width: 688px;
height: 48px; height: 48px;
margin: 0 auto; margin: 0 auto;
margin-top: 36px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
// gap: 16px; // gap: 16px;
.btn { .btn {
display: flex; display: flex;
align-items: center;
gap: 9px;
width: 160px; width: 160px;
height: 48px; height: 48px;
border: 1px solid rgba(174, 214, 255, 1); border: 1px solid #aed6ff;
box-sizing: border-box; box-sizing: border-box;
border-radius: 32px; border-radius: 24px;
justify-content: center; background: #e7f3ff;
align-items: center;
background: rgba(231, 243, 255, 1);
position: relative;
cursor: pointer; cursor: pointer;
padding: 10px 40px 12px 36px; position: relative;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
&:hover { &:hover {
background: #cae3fc; background: #cae3fc;
} }
.btn-text { .btn-text {
color: rgb(5, 95, 194); width: 80px;
font-family: "Microsoft YaHei"; color: var(--color-main-active);
font-family: Microsoft YaHei;
font-size: 20px; font-size: 20px;
font-weight: 400; font-weight: 400;
line-height: 26px; line-height: 48px;
height: 26px; margin-left: 36px;
text-align: center;
} }
.btn-icon { .btn-icon {
position: absolute; position: absolute;
top: 14px; top: 16px;
right: 19px; right: 19px;
color: rgb(5, 95, 194); width: 6px;
font-size: 20px; height: 12px;
font-weight: 400; img {
width: 100%;
height: 100%;
}
} }
} }
} }
......
...@@ -290,7 +290,7 @@ const handleSizeChange = val => { ...@@ -290,7 +290,7 @@ const handleSizeChange = val => {
} }
.contetn-tabs-item-active { .contetn-tabs-item-active {
background-color: rgba(231, 243, 255, 1); background-color: rgba(231, 243, 255, 1);
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
} }
.content-tabs-pane { .content-tabs-pane {
display: flex; display: flex;
...@@ -418,7 +418,7 @@ const handleSizeChange = val => { ...@@ -418,7 +418,7 @@ const handleSizeChange = val => {
.content-box-footer-text { .content-box-footer-text {
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
} }
.footer-img-small { .footer-img-small {
width: 20px; width: 20px;
......
...@@ -270,7 +270,7 @@ const activities = [ ...@@ -270,7 +270,7 @@ const activities = [
font-weight: 400; font-weight: 400;
border-radius: 50%; border-radius: 50%;
background-color: rgba(231, 243, 255, 1); background-color: rgba(231, 243, 255, 1);
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
} }
.content-box-footer { .content-box-footer {
display: flex; display: flex;
...@@ -321,7 +321,7 @@ const activities = [ ...@@ -321,7 +321,7 @@ const activities = [
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
} }
.content-desc-content { .content-desc-content {
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
} }
...@@ -366,7 +366,7 @@ const activities = [ ...@@ -366,7 +366,7 @@ const activities = [
.time-line-dot { .time-line-dot {
width: 8px; width: 8px;
height: 8px; height: 8px;
background-color: rgba(10, 87, 166, 1); background-color: var(--color-main-active);
border-radius: 50%; border-radius: 50%;
} }
.content-time-line-box { .content-time-line-box {
......
...@@ -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: {
......
...@@ -42,7 +42,7 @@ const getBarChart = (nameList, valueList) => { ...@@ -42,7 +42,7 @@ const getBarChart = (nameList, valueList) => {
label: { label: {
show: true, show: true,
position: 'top', position: 'top',
color: 'rgba(10, 87, 166, 1)', color: 'var(--color-main-active)',
fontWeight: 'bold', // 文字加粗 fontWeight: 'bold', // 文字加粗
fontSize: 14, fontSize: 14,
formatter: function (params) { formatter: function (params) {
...@@ -59,7 +59,7 @@ const getBarChart = (nameList, valueList) => { ...@@ -59,7 +59,7 @@ const getBarChart = (nameList, valueList) => {
}, },
{ {
offset: 1, offset: 1,
color: 'rgba(10, 87, 166, 1)' color: 'var(--color-main-active)'
} }
]); ]);
}, },
......
...@@ -280,22 +280,21 @@ const box2LeftActiveIndex = ref(0); ...@@ -280,22 +280,21 @@ const box2LeftActiveIndex = ref(0);
display: flex; display: flex;
position: relative; position: relative;
.header-left { .header-left {
margin-top: 20px; margin-top: 18px;
width: 8px; width: 8px;
height: 16px; height: 20px;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: rgba(10, 87, 166, 1); background: var(--color-main-active);
} }
.title { .title {
margin-left: 22px; margin-left: 14px;
margin-top: 20px; margin-top: 14px;
height: 16px; height: 26px;
line-height: 16px; line-height: 26px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 20px;
font-weight: 600; font-weight: 700;
line-height: 16px;
} }
.header-btn-box { .header-btn-box {
position: absolute; position: absolute;
...@@ -395,7 +394,7 @@ const box2LeftActiveIndex = ref(0); ...@@ -395,7 +394,7 @@ const box2LeftActiveIndex = ref(0);
} }
.time { .time {
height: 24px; height: 24px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
...@@ -406,7 +405,7 @@ const box2LeftActiveIndex = ref(0); ...@@ -406,7 +405,7 @@ const box2LeftActiveIndex = ref(0);
} }
.timeFooter { .timeFooter {
height: 24px; height: 24px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
...@@ -452,7 +451,7 @@ const box2LeftActiveIndex = ref(0); ...@@ -452,7 +451,7 @@ const box2LeftActiveIndex = ref(0);
align-items: center; align-items: center;
margin-top: 2px; margin-top: 2px;
margin-left: 15px; margin-left: 15px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
...@@ -511,7 +510,7 @@ const box2LeftActiveIndex = ref(0); ...@@ -511,7 +510,7 @@ const box2LeftActiveIndex = ref(0);
margin-left: 17px; margin-left: 17px;
margin-top: 17px; margin-top: 17px;
height: 30px; height: 30px;
// color: rgba(10, 87, 166, 1); // color: var(--color-main-active);
// font-family: Microsoft YaHei; // font-family: Microsoft YaHei;
// font-size: 16px; // font-size: 16px;
// font-weight: 700; // font-weight: 700;
...@@ -519,7 +518,7 @@ const box2LeftActiveIndex = ref(0); ...@@ -519,7 +518,7 @@ const box2LeftActiveIndex = ref(0);
} }
} }
.leftItemActive { .leftItemActive {
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-weight: 700; font-weight: 700;
background: rgba(246, 250, 255, 1); background: rgba(246, 250, 255, 1);
&::after { &::after {
...@@ -527,7 +526,7 @@ const box2LeftActiveIndex = ref(0); ...@@ -527,7 +526,7 @@ const box2LeftActiveIndex = ref(0);
content: ""; content: "";
width: 5px; width: 5px;
height: 48px; height: 48px;
background: rgba(10, 87, 166, 1); background: var(--color-main-active);
right: -70px; right: -70px;
top: 8px; top: 8px;
} }
...@@ -583,7 +582,7 @@ const box2LeftActiveIndex = ref(0); ...@@ -583,7 +582,7 @@ const box2LeftActiveIndex = ref(0);
display: flex; display: flex;
.item-right-text { .item-right-text {
height: 30px; height: 30px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
...@@ -623,7 +622,7 @@ const box2LeftActiveIndex = ref(0); ...@@ -623,7 +622,7 @@ const box2LeftActiveIndex = ref(0);
margin-top: 16px; margin-top: 16px;
margin-left: 16px; margin-left: 16px;
height: 30px; height: 30px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
......
...@@ -437,13 +437,8 @@ onMounted(() => { ...@@ -437,13 +437,8 @@ onMounted(() => {
margin-top: 3px; margin-top: 3px;
height: 35px; height: 35px;
cursor: pointer; cursor: pointer;
// &:hover{
// .name {
// color: rgba(22, 119, 255, 1);
// }
// }
.icon { .icon {
margin-top: 1px; margin-top: 4px;
width: 16px; width: 16px;
height: 16px; height: 16px;
img { img {
...@@ -452,22 +447,23 @@ onMounted(() => { ...@@ -452,22 +447,23 @@ onMounted(() => {
} }
} }
.name { .name {
color: rgba(95, 101, 108, 1); height: 24px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 14px; font-size: 18px;
font-weight: 400; font-weight: 400;
line-height: 22px; line-height: 24px;
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
margin-left: 3px; margin-left: 3px;
} }
.nameActive { .nameActive {
color: rgba(20, 89, 187, 1); color: var(--color-main-active);
font-weight: 700; font-weight: 700;
} }
} }
.leftBoxBottomItemActive { .leftBoxBottomItemActive {
border-bottom: 3px solid rgba(20, 89, 187, 1); border-bottom: 3px solid var(--color-main-active);
} }
} }
} }
......
...@@ -316,21 +316,21 @@ onMounted(() => { ...@@ -316,21 +316,21 @@ onMounted(() => {
height: 48px; height: 48px;
position: relative; position: relative;
.icon { .icon {
margin-top: 20px; margin-top: 18px;
width: 8px; width: 8px;
height: 16px; height: 20px;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: rgba(10, 87, 166, 1); background: var(--color-main-active);
} }
.title { .title {
height: 24px; height: 26px;
margin-left: 14px; margin-left: 14px;
margin-top: 16px; margin-top: 14px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 18px; font-size: 20px;
font-weight: 700; font-weight: 700;
line-height: 24px; line-height: 26px;
} }
.header-right { .header-right {
position: absolute; position: absolute;
...@@ -508,7 +508,7 @@ onMounted(() => { ...@@ -508,7 +508,7 @@ onMounted(() => {
display: flex; display: flex;
width: 240px; width: 240px;
.title { .title {
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
height: 26px; height: 26px;
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
...@@ -550,7 +550,7 @@ onMounted(() => { ...@@ -550,7 +550,7 @@ onMounted(() => {
} }
.time { .time {
height: 24px; height: 24px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
...@@ -594,7 +594,7 @@ onMounted(() => { ...@@ -594,7 +594,7 @@ onMounted(() => {
margin-left: 13px; margin-left: 13px;
width: 964px; width: 964px;
height: 48px; height: 48px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
...@@ -651,7 +651,7 @@ onMounted(() => { ...@@ -651,7 +651,7 @@ onMounted(() => {
.text { .text {
width: 33px; width: 33px;
height: 30px; height: 30px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 14px; font-size: 14px;
font-weight: 700; font-weight: 700;
...@@ -740,7 +740,7 @@ onMounted(() => { ...@@ -740,7 +740,7 @@ onMounted(() => {
margin-left: 13px; margin-left: 13px;
width: 964px; width: 964px;
height: 48px; height: 48px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
......
...@@ -205,22 +205,21 @@ const laws = ref([ ...@@ -205,22 +205,21 @@ const laws = ref([
display: flex; display: flex;
position: relative; position: relative;
.header-left { .header-left {
margin-top: 20px; margin-top: 18px;
width: 8px; width: 8px;
height: 16px; height: 20px;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
background: rgba(10, 87, 166, 1); background: var(--color-main-active);
} }
.title { .title {
margin-left: 22px; margin-left: 14px;
margin-top: 20px; margin-top: 14px;
height: 16px; height: 26px;
line-height: 16px; line-height: 26px;
color: rgba(10, 87, 166, 1); color: var(--color-main-active);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 20px;
font-weight: 600; font-weight: 700;
line-height: 16px;
} }
.header-btn-box { .header-btn-box {
position: absolute; position: absolute;
......
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论