Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
29c7a1b2
提交
29c7a1b2
authored
2月 02, 2026
作者:
王浩然
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
http://8.140.26.4:10003/caijian/risk-monitor
上级
bb0ca7a2
875849b4
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
250 行增加
和
85 行删除
+250
-85
introduction.js
src/api/decree/introduction.js
+7
-0
index.vue
src/views/decree/decreeHome/index.vue
+148
-52
index.vue
src/views/decree/decreeOriginal/index.vue
+95
-33
没有找到文件。
src/api/decree/introduction.js
浏览文件 @
29c7a1b2
...
@@ -64,6 +64,13 @@ export function getDecreeSummary(params) {
...
@@ -64,6 +64,13 @@ export function getDecreeSummary(params) {
/**
/**
* @param {id}
* @param {id}
*/
*/
// export function getDecreeReport(params) {
// return request({
// method: 'GET',
// url: `/api/administrativeOrderInfo/contentUrl/${params.id}`,
// })
// }
export
function
getDecreeReport
(
params
)
{
export
function
getDecreeReport
(
params
)
{
return
request
({
return
request
({
method
:
'GET'
,
method
:
'GET'
,
...
...
src/views/decree/decreeHome/index.vue
浏览文件 @
29c7a1b2
...
@@ -113,8 +113,7 @@
...
@@ -113,8 +113,7 @@
</div>
</div>
</div>
</div>
<div
class=
"home-main-header-item-box"
>
<div
class=
"home-main-header-item-box"
>
<div
class=
"item"
v-for=
"(item, index) in govInsList"
:key=
"index"
<div
class=
"item"
v-for=
"(item, index) in govInsList"
:key=
"index"
@
click=
"handleToInstitution(item)"
>
@
click=
"handleToInstitution(item)"
>
<div
class=
"item-left"
>
<div
class=
"item-left"
>
<img
:src=
"item.img ? item.img : DefaultIcon2"
alt=
""
/>
<img
:src=
"item.img ? item.img : DefaultIcon2"
alt=
""
/>
</div>
</div>
...
@@ -156,7 +155,7 @@
...
@@ -156,7 +155,7 @@
<div
v-else
class=
"box1-main-left-img-mock"
>
<div
v-else
class=
"box1-main-left-img-mock"
>
<img
class=
"img-mock-badge-img"
src=
"./assets/images/badge.png"
>
<img
class=
"img-mock-badge-img"
src=
"./assets/images/badge.png"
>
<p
class=
"img-mock-badge-title"
>
行政令
</p>
<p
class=
"img-mock-badge-title"
>
行政令
</p>
<p
class=
"img-mock-badge-title"
>
{{
item
.
name
}}
</p>
<p
class=
"img-mock-badge-title"
>
{{
item
.
name
}}
</p>
<!--
<p
class=
"img-mock-badge-org"
>
The White House
</p>
-->
<!--
<p
class=
"img-mock-badge-org"
>
The White House
</p>
-->
</div>
</div>
</div>
</div>
...
@@ -240,8 +239,7 @@
...
@@ -240,8 +239,7 @@
</div>
</div>
</div>
</div>
<div
class=
"box3-main"
>
<div
class=
"box3-main"
>
<div
class=
"box3-item"
v-for=
"(news, index) in newsList"
:key=
"index"
<div
class=
"box3-item"
v-for=
"(news, index) in newsList"
:key=
"index"
@
click=
"handleToNewsAnalysis(news)"
>
@
click=
"handleToNewsAnalysis(news)"
>
<div
class=
"left"
>
<div
class=
"left"
>
<img
:src=
"news.img ? news.img : DefaultIconNews"
alt=
""
/>
<img
:src=
"news.img ? news.img : DefaultIconNews"
alt=
""
/>
</div>
</div>
...
@@ -269,9 +267,8 @@
...
@@ -269,9 +267,8 @@
</div>
</div>
<div
class=
"box4-main"
>
<div
class=
"box4-main"
>
<MessageBubble
v-for=
"(item, index) in messageList"
@
click=
"handleClickPerson(item)"
<MessageBubble
v-for=
"(item, index) in messageList"
@
click=
"handleClickPerson(item)"
@
info-click=
"handleMediaClick(item)"
:key=
"index"
@
info-click=
"handleMediaClick(item)"
:key=
"index"
:avatar=
"item.img ? item.img : DefaultIcon1"
:avatar=
"item.img ? item.img : DefaultIcon1"
:name=
"item.name"
:time=
"item.time"
:name=
"item.name"
:time=
"item.time"
:source=
"item.source"
:content=
"item.content"
/>
:source=
"item.source"
:content=
"item.content"
/>
<!-- <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">
<div class="left" @click="handleClickPerson(item)">
<div class="left" @click="handleClickPerson(item)">
<img :src="item.img ? item.img : DefaultIcon1" alt="" />
<img :src="item.img ? item.img : DefaultIcon1" alt="" />
...
@@ -300,8 +297,7 @@
...
@@ -300,8 +297,7 @@
<div
class=
"box5-selectbox"
>
<div
class=
"box5-selectbox"
>
<el-select
@
change=
"handleBox5YearChange"
v-model=
"box5SelectedYear"
placeholder=
"选择时间"
<el-select
@
change=
"handleBox5YearChange"
v-model=
"box5SelectedYear"
placeholder=
"选择时间"
style=
"width: 120px"
>
style=
"width: 120px"
>
<el-option
v-for=
"item in box5YearList"
:key=
"item.value"
:label=
"item.label"
<el-option
v-for=
"item in box5YearList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
:value=
"item.value"
/>
</el-select>
</el-select>
</div>
</div>
</div>
</div>
...
@@ -319,8 +315,7 @@
...
@@ -319,8 +315,7 @@
<div
class=
"box6-selectbox"
>
<div
class=
"box6-selectbox"
>
<el-select
@
change=
"handleBox6YearChange"
v-model=
"box6SelectedYear"
placeholder=
"选择时间"
<el-select
@
change=
"handleBox6YearChange"
v-model=
"box6SelectedYear"
placeholder=
"选择时间"
style=
"width: 120px"
>
style=
"width: 120px"
>
<el-option
v-for=
"item in box6YearList"
:key=
"item.value"
:label=
"item.label"
<el-option
v-for=
"item in box6YearList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
:value=
"item.value"
/>
</el-select>
</el-select>
</div>
</div>
</div>
</div>
...
@@ -336,8 +331,7 @@
...
@@ -336,8 +331,7 @@
<div
class=
"header-title"
>
{{ "关键行政令" }}
</div>
<div
class=
"header-title"
>
{{ "关键行政令" }}
</div>
</div>
</div>
<div
class=
"box7-main"
>
<div
class=
"box7-main"
>
<div
class=
"box7-item"
v-for=
"(item, index) in keyDecreeList"
:key=
"index"
<div
class=
"box7-item"
v-for=
"(item, index) in keyDecreeList"
:key=
"index"
@
click=
"handleKeyDecree(item)"
>
@
click=
"handleKeyDecree(item)"
>
<div
class=
"icon"
>
<div
class=
"icon"
>
<img
src=
"./assets/images/warning.png"
alt=
""
/>
<img
src=
"./assets/images/warning.png"
alt=
""
/>
</div>
</div>
...
@@ -393,9 +387,9 @@
...
@@ -393,9 +387,9 @@
</div>
</div>
<div
class=
"select-main"
>
<div
class=
"select-main"
>
<div
class=
"checkbox-group"
>
<div
class=
"checkbox-group"
>
<el-checkbox
v-for=
"type in decreeTypeList"
:key=
"type.id"
<el-checkbox
v-for=
"type in decreeTypeList"
:key=
"type.id"
v-model=
"checkedDecreeType"
v-model=
"checkedDecreeType"
:label=
"type.typeId"
style=
"width: 180p
x"
:label=
"type.typeId"
style=
"width: 180px"
class=
"filter-checkbo
x"
class=
"filter-checkbox"
@
change=
"handleChangeCheckedDecreeType"
>
@
change=
"handleChangeCheckedDecreeType"
>
{{ type.typeName }}
{{ type.typeName }}
</el-checkbox>
</el-checkbox>
</div>
</div>
...
@@ -408,9 +402,8 @@
...
@@ -408,9 +402,8 @@
</div>
</div>
<div
class=
"select-main"
>
<div
class=
"select-main"
>
<div
class=
"checkbox-group"
>
<div
class=
"checkbox-group"
>
<el-checkbox
v-for=
"cate in govInsList"
:key=
"cate.id"
v-model=
"checkedGovIns"
<el-checkbox
v-for=
"cate in govInsList"
:key=
"cate.id"
v-model=
"checkedGovIns"
:label=
"cate.id"
:label=
"cate.id"
style=
"width: 180px"
class=
"filter-checkbox"
style=
"width: 180px"
class=
"filter-checkbox"
@
change=
"handleChangeCheckedGovIns"
>
@
change=
"handleChangeCheckedGovIns"
>
{{ cate.name }}
{{ cate.name }}
</el-checkbox>
</el-checkbox>
</div>
</div>
...
@@ -423,8 +416,9 @@
...
@@ -423,8 +416,9 @@
</div>
</div>
<div
class=
"select-main"
>
<div
class=
"select-main"
>
<div
class=
"checkbox-group"
>
<div
class=
"checkbox-group"
>
<el-checkbox
v-for=
"time in pubTime"
:key=
"time.id"
v-model=
"activePubTime"
<el-checkbox
v-for=
"time in pubTime"
:key=
"time.id"
v-model=
"activePubTime"
:label=
"time.id"
:label=
"time.id"
style=
"width: 100px"
class=
"filter-checkbox"
>
style=
"width: 100px"
class=
"filter-checkbox"
@
change=
"(checked) => handlePubTimeChange(time.id, checked)"
>
{{ time.name }}
{{ time.name }}
</el-checkbox>
</el-checkbox>
</div>
</div>
...
@@ -437,8 +431,8 @@
...
@@ -437,8 +431,8 @@
</div>
</div>
<div
class=
"select-main select-main1"
>
<div
class=
"select-main select-main1"
>
<div
class=
"checkbox-group"
>
<div
class=
"checkbox-group"
>
<el-checkbox
v-for=
"area in areaList"
:key=
"area.id"
v-model=
"activeAreaList"
<el-checkbox
v-for=
"area in areaList"
:key=
"area.id"
v-model=
"activeAreaList"
:label=
"area.id"
:label=
"area.id"
style=
"width: 100px
"
>
style=
"width: 100px"
@
change=
"(checked) => handleAreaChange(area.id, checked)
"
>
{{ area.name }}
{{ area.name }}
</el-checkbox>
</el-checkbox>
</div>
</div>
...
@@ -457,7 +451,8 @@
...
@@ -457,7 +451,8 @@
@
click=
"handleClickDecree(item)"
>
@
click=
"handleClickDecree(item)"
>
<div
class=
"main-item-left"
>
<div
class=
"main-item-left"
>
<div
class=
"left-left"
>
{{ item.time.split('-')[0] }}
<br>
{{ item.time.split('-')[1]}}月{{ item.time.split('-')[2] }}日
</div>
<div
class=
"left-left"
>
{{ item.time.split('-')[0] }}
<br>
{{ item.time.split('-')[1] }}月{{
item.time.split('-')[2] }}日
</div>
<div
class=
"left-right"
>
<div
class=
"left-right"
>
<div
class=
"icon"
>
<div
class=
"icon"
>
<img
:src=
"item.orgImage ? item.orgImage : DefaultIcon2"
alt=
""
/>
<img
:src=
"item.orgImage ? item.orgImage : DefaultIcon2"
alt=
""
/>
...
@@ -493,9 +488,8 @@
...
@@ -493,9 +488,8 @@
{{ `共 ${totalDecreesNum} 项` }}
{{ `共 ${totalDecreesNum} 项` }}
</div>
</div>
<div
class=
"footer-right"
>
<div
class=
"footer-right"
>
<el-pagination
@
current-change=
"handleCurrentChange"
:pageSize=
"10"
<el-pagination
@
current-change=
"handleCurrentChange"
:pageSize=
"10"
:current-page=
"currentPage"
:current-page=
"currentPage"
background
layout=
"prev, pager, next"
background
layout=
"prev, pager, next"
:total=
"totalDecreesNum"
/>
:total=
"totalDecreesNum"
/>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -1078,7 +1072,7 @@ const handleBox8 = async () => {
...
@@ -1078,7 +1072,7 @@ const handleBox8 = async () => {
};
};
// 资源库
// 资源库
const
isSort
=
ref
(
tru
e
);
// true 升序 false 倒序
const
isSort
=
ref
(
fals
e
);
// true 升序 false 倒序
const
handleSwithSort
=
()
=>
{
const
handleSwithSort
=
()
=>
{
isSort
.
value
=
!
isSort
.
value
;
isSort
.
value
=
!
isSort
.
value
;
};
};
...
@@ -1113,21 +1107,21 @@ const areaList = ref([
...
@@ -1113,21 +1107,21 @@ const areaList = ref([
// { id: "量子科技", name: "量子科技" }
// { id: "量子科技", name: "量子科技" }
]);
]);
const
activeAreaList
=
ref
([
"1"
]);
const
activeAreaList
=
ref
([
"1"
]);
const
handleGetAreaList
=
async
()
=>
{
//
const handleGetAreaList = async () => {
try
{
//
try {
const
res
=
await
getDecreehylyList
();
//
const res = await getDecreehylyList();
console
.
log
(
"行业领域列表"
,
res
);
//
console.log("行业领域列表", res);
if
(
res
.
code
===
200
&&
res
.
data
)
{
//
if (res.code === 200 && res.data) {
areaList
.
value
=
res
.
data
.
map
(
item
=>
{
//
areaList.value = res.data.map(item => {
return
{
//
return {
name
:
item
.
name
,
//
name: item.name,
id
:
item
.
id
//
id: item.id
};
//
};
});
//
});
console
.
log
(
"areaList"
,
areaList
.
value
);
//
console.log("areaList", areaList.value);
}
//
}
}
catch
(
error
)
{
}
//
} catch (error) { }
};
//
};
// 政令类型
// 政令类型
const
decreeTypeList
=
ref
([]);
const
decreeTypeList
=
ref
([]);
...
@@ -1148,6 +1142,7 @@ const handleChangeCheckedDecreeType = () => {
...
@@ -1148,6 +1142,7 @@ const handleChangeCheckedDecreeType = () => {
}
}
const
pubTime
=
ref
([
const
pubTime
=
ref
([
{
id
:
"all"
,
name
:
"全选"
},
{
id
:
"2026"
,
name
:
"2026年"
},
{
id
:
"2026"
,
name
:
"2026年"
},
{
id
:
"2025"
,
name
:
"2025年"
},
{
id
:
"2025"
,
name
:
"2025年"
},
{
id
:
"2024"
,
name
:
"2024年"
},
{
id
:
"2024"
,
name
:
"2024年"
},
...
@@ -1155,27 +1150,111 @@ const pubTime = ref([
...
@@ -1155,27 +1150,111 @@ const pubTime = ref([
{
id
:
"2022"
,
name
:
"2022年"
},
{
id
:
"2022"
,
name
:
"2022年"
},
{
id
:
"2021"
,
name
:
"2021年"
},
{
id
:
"2021"
,
name
:
"2021年"
},
{
id
:
"2020"
,
name
:
"2020年"
}
{
id
:
"2020"
,
name
:
"2020年"
}
// { id: "更早时间", name: "更早时间" }
]);
]);
const
activePubTime
=
ref
([
"2026"
]);
const
activePubTime
=
ref
([
"2026"
]);
// 处理发布时间全选逻辑
const
handlePubTimeChange
=
(
id
,
checked
)
=>
{
const
allIds
=
pubTime
.
value
.
filter
(
item
=>
item
.
id
!==
'all'
).
map
(
item
=>
item
.
id
);
if
(
id
===
'all'
)
{
// 点击全选:选中所有或清空所有
activePubTime
.
value
=
checked
?
[
'all'
,
...
allIds
]
:
[];
}
else
{
const
selectedIds
=
activePubTime
.
value
.
filter
(
itemId
=>
itemId
!==
'all'
);
const
isAllSelected
=
selectedIds
.
length
===
allIds
.
length
;
if
(
isAllSelected
&&
!
activePubTime
.
value
.
includes
(
'all'
))
{
// 手动选中了所有年份,自动勾选全选
activePubTime
.
value
=
[
'all'
,
...
allIds
];
}
else
if
(
!
isAllSelected
&&
activePubTime
.
value
.
includes
(
'all'
))
{
// 取消某个选项,取消全选状态
activePubTime
.
value
=
selectedIds
;
}
}
};
const
handleAreaChange
=
(
id
,
checked
)
=>
{
const
allIds
=
areaList
.
value
.
filter
(
item
=>
item
.
id
!==
'all'
).
map
(
item
=>
item
.
id
);
if
(
id
===
'all'
)
{
activeAreaList
.
value
=
checked
?
[
'all'
,
...
allIds
]
:
[];
}
else
{
const
selectedIds
=
activeAreaList
.
value
.
filter
(
itemId
=>
itemId
!==
'all'
);
const
isAllSelected
=
selectedIds
.
length
===
allIds
.
length
;
if
(
isAllSelected
&&
!
activeAreaList
.
value
.
includes
(
'all'
))
{
activeAreaList
.
value
=
[
'all'
,
...
allIds
];
}
else
if
(
!
isAllSelected
&&
activeAreaList
.
value
.
includes
(
'all'
))
{
activeAreaList
.
value
=
selectedIds
;
}
}
};
// 修改获取涉及领域列表,添加全选选项
const
handleGetAreaList
=
async
()
=>
{
try
{
const
res
=
await
getDecreehylyList
();
console
.
log
(
"行业领域列表"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
areaList
.
value
=
[
{
name
:
"全选"
,
id
:
"all"
},
...
res
.
data
.
map
(
item
=>
{
return
{
name
:
item
.
name
,
id
:
item
.
id
};
})
];
// 设置默认全选
activeAreaList
.
value
=
[
'all'
,
...
res
.
data
.
map
(
item
=>
item
.
id
)];
console
.
log
(
"areaList"
,
areaList
.
value
);
// 获取列表后重新查询
handleGetDecreeOrderList
();
}
}
catch
(
error
)
{
}
};
const
totalDecreesNum
=
ref
(
0
);
const
totalDecreesNum
=
ref
(
0
);
const
decreeList
=
ref
([]);
const
decreeList
=
ref
([]);
// 修改请求方法,处理全选时不传参数的情况
const
handleGetDecreeOrderList
=
async
()
=>
{
const
handleGetDecreeOrderList
=
async
()
=>
{
const
p0
=
checkedGovIns
.
value
.
join
(
","
);
const
p0
=
checkedGovIns
.
value
.
join
(
","
);
const
p1
=
activeAreaList
.
value
.
join
(
","
);
const
p2
=
activePubTime
.
value
.
join
(
","
);
// 处理涉及领域:如果包含 all 或全选,则 researchTypeIds 为空(不传)
let
p1
=
''
;
const
allAreaIds
=
areaList
.
value
.
filter
(
item
=>
item
.
id
!==
'all'
).
map
(
item
=>
item
.
id
);
const
selectedAreaIds
=
activeAreaList
.
value
.
filter
(
id
=>
id
!==
'all'
);
if
(
!
activeAreaList
.
value
.
includes
(
'all'
)
&&
selectedAreaIds
.
length
>
0
&&
selectedAreaIds
.
length
<
allAreaIds
.
length
)
{
p1
=
selectedAreaIds
.
join
(
","
);
}
// 其他情况(包含all、长度为0、全部选中)p1保持为空,即不传researchTypeIds
// 处理发布时间:如果包含 all 或全选,则 years 为空(不传)
let
p2
=
''
;
const
allPubTimeIds
=
pubTime
.
value
.
filter
(
item
=>
item
.
id
!==
'all'
).
map
(
item
=>
item
.
id
);
const
selectedPubTimeIds
=
activePubTime
.
value
.
filter
(
id
=>
id
!==
'all'
);
if
(
!
activePubTime
.
value
.
includes
(
'all'
)
&&
selectedPubTimeIds
.
length
>
0
&&
selectedPubTimeIds
.
length
<
allPubTimeIds
.
length
)
{
p2
=
selectedPubTimeIds
.
join
(
","
);
}
// 其他情况(包含all、长度为0、全部选中)p2保持为空,即不传years
console
.
log
(
activePubTime
.
value
,
'activePubTime.value'
)
const
params
=
{
const
params
=
{
currentPage
:
0
,
currentPage
:
0
,
pageSize
:
999999
,
pageSize
:
999999
,
proposeName
:
p0
,
proposeName
:
p0
,
researchTypeIds
:
p1
,
researchTypeIds
:
p1
,
// 全选时不传(为空)
sortFun
:
isSort
.
value
,
sortFun
:
isSort
.
value
,
years
:
p2
,
years
:
p2
,
// 全选时不传(为空)
typeIds
:
checkedDecreeType
.
value
.
toString
()
typeIds
:
checkedDecreeType
.
value
.
toString
()
};
};
try
{
try
{
const
res
=
await
getDecreeOrderList
(
params
);
const
res
=
await
getDecreeOrderList
(
params
);
console
.
log
(
"资源库列表"
,
res
);
console
.
log
(
"资源库列表"
,
res
);
...
@@ -1191,17 +1270,18 @@ const handleGetDecreeOrderList = async () => {
...
@@ -1191,17 +1270,18 @@ const handleGetDecreeOrderList = async () => {
tagList
:
item
.
industryList
tagList
:
item
.
industryList
};
};
});
});
console
.
log
(
"decreeList"
,
decreeList
.
value
);
}
else
{
}
else
{
decreeList
.
value
=
[];
decreeList
.
value
=
[];
totalDecreesNum
.
value
=
0
;
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
"资源库列表error"
,
error
);
console
.
error
(
"资源库列表error"
,
error
);
decreeList
.
value
=
[];
decreeList
.
value
=
[];
totalDecreesNum
.
value
=
0
;
}
}
};
};
const
curDecreeList
=
computed
(()
=>
{
const
curDecreeList
=
computed
(()
=>
{
const
startIndex
=
(
currentPage
.
value
-
1
)
*
pageSize
.
value
;
const
startIndex
=
(
currentPage
.
value
-
1
)
*
pageSize
.
value
;
const
endIndex
=
startIndex
+
pageSize
.
value
;
const
endIndex
=
startIndex
+
pageSize
.
value
;
...
@@ -3235,7 +3315,7 @@ onMounted(async () => {
...
@@ -3235,7 +3315,7 @@ onMounted(async () => {
gap
:
16px
;
gap
:
16px
;
.left
{
.left
{
width
:
3
0
0px
;
width
:
3
6
0px
;
// height: 666px;
// height: 666px;
box-shadow
:
0px
0px
15px
0px
rgba
(
60
,
87
,
126
,
0
.2
);
box-shadow
:
0px
0px
15px
0px
rgba
(
60
,
87
,
126
,
0
.2
);
background
:
rgba
(
255
,
255
,
255
,
1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
...
@@ -3498,4 +3578,20 @@ onMounted(async () => {
...
@@ -3498,4 +3578,20 @@ onMounted(async () => {
:deep
(
.el-input__wrapper.is-focus
)
{
:deep
(
.el-input__wrapper.is-focus
)
{
box-shadow
:
none
!
important
;
box-shadow
:
none
!
important
;
}
}
:deep
(
.el-checkbox__label
)
{
color
:
rgba
(
95
,
101
,
108
,
1
);
font-family
:
Source
Han
Sans
CN
;
font-style
:
Regular
;
font-size
:
16px
;
font-weight
:
400
;
line-height
:
24px
;
letter-spacing
:
0px
;
text-align
:
justify
;
}
:deep
(
.el-checkbox__input.is-checked
+
.el-checkbox__label
)
{
color
:
rgba
(
95
,
101
,
108
,
1
);
}
</
style
>
</
style
>
src/views/decree/decreeOriginal/index.vue
浏览文件 @
29c7a1b2
...
@@ -33,14 +33,15 @@
...
@@ -33,14 +33,15 @@
{{
"政令原文"
}}
{{
"政令原文"
}}
</div>
</div>
<div
class=
"report-main"
>
<div
class=
"report-main"
>
<div
class=
"left"
>
<div
v-if=
"!reportData.length"
class=
"noContent"
>
{{
"暂无数据"
}}
</div
>
<div
v-if=
"!reportUrl"
class=
"noContent"
>
{{
"中文原文暂无数据"
}}
</div
>
<template
v-else
>
<
iframe
v-else
:src=
"reportUrl"
style=
"border: none"
width=
"100%"
height=
"100%"
>
</iframe
>
<
div
v-for=
"(item, index) in reportData"
:key=
"index"
class=
"content-row"
>
</div
>
<!-- 左侧:英文 --
>
<div
class=
"right"
>
<div
class=
"content-en"
>
{{
item
.
contentEn
}}
</div
>
<div
v-if=
"!reportUrlEn"
class=
"noContent"
>
{{
"英文原文暂无数据"
}}
</div
>
<!-- 右侧:中文 --
>
<iframe
v-else
:src=
"reportUrlEn"
style=
"border: none"
width=
"100%"
height=
"100%"
>
</iframe
>
<div
class=
"content-cn"
>
{{
item
.
content
}}
</div
>
</div>
</div>
</
template
>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -50,14 +51,13 @@
...
@@ -50,14 +51,13 @@
<
script
setup
>
<
script
setup
>
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
getDecreeSummary
}
from
"@/api/decree/introduction"
;
import
{
getDecreeSummary
}
from
"@/api/decree/introduction"
;
import
{
getDecreeReport
}
from
"@/api/decree/introduction"
;
import
{
getDecreeReport
}
from
"@/api/decree/introduction"
;
const
route
=
useRoute
();
const
route
=
useRoute
();
const
reportUrl
=
ref
(
""
);
// 修改为数组存储分段数据
const
report
UrlEn
=
ref
(
""
);
const
report
Data
=
ref
([]
);
const
summaryInfo
=
ref
({});
const
summaryInfo
=
ref
({});
...
@@ -72,10 +72,10 @@ const handleGetSummary = async () => {
...
@@ -72,10 +72,10 @@ const handleGetSummary = async () => {
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
summaryInfo
.
value
=
res
.
data
;
summaryInfo
.
value
=
res
.
data
;
}
}
}
catch
(
error
)
{}
}
catch
(
error
)
{
}
};
};
// 获取报告原文
// 获取报告原文
- 修改为获取分段数组
const
handleGetReport
=
async
()
=>
{
const
handleGetReport
=
async
()
=>
{
const
params
=
{
const
params
=
{
id
:
route
.
query
.
id
id
:
route
.
query
.
id
...
@@ -85,10 +85,10 @@ const handleGetReport = async () => {
...
@@ -85,10 +85,10 @@ const handleGetReport = async () => {
const
res
=
await
getDecreeReport
(
params
);
const
res
=
await
getDecreeReport
(
params
);
console
.
log
(
"报告原文"
,
res
);
console
.
log
(
"报告原文"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
reportUrl
.
value
=
res
.
data
.
content
;
// 假设后端返回的是数组格式,如果返回的是对象包含数组,请改为 res.data.list
report
UrlEn
.
value
=
res
.
data
.
contentEn
;
report
Data
.
value
=
res
.
data
||
[]
;
}
}
}
catch
(
error
)
{}
}
catch
(
error
)
{
}
};
};
onMounted
(()
=>
{
onMounted
(()
=>
{
...
@@ -106,6 +106,7 @@ onMounted(() => {
...
@@ -106,6 +106,7 @@ onMounted(() => {
.layout-main
{
.layout-main
{
width
:
100%
;
width
:
100%
;
.layout-main-header
{
.layout-main-header
{
height
:
120px
;
height
:
120px
;
background
:
rgba
(
255
,
255
,
255
,
1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
...
@@ -119,26 +120,32 @@ onMounted(() => {
...
@@ -119,26 +120,32 @@ onMounted(() => {
border-top
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-top
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
.layout-main-header-left-box
{
.layout-main-header-left-box
{
width
:
1100px
;
width
:
1100px
;
margin-left
:
160px
;
margin-left
:
160px
;
margin-top
:
13px
;
margin-top
:
13px
;
.left-box-top
{
.left-box-top
{
height
:
64px
;
height
:
64px
;
display
:
flex
;
display
:
flex
;
.icon
{
.icon
{
width
:
122px
;
width
:
122px
;
height
:
64px
;
height
:
64px
;
border-radius
:
4px
;
border-radius
:
4px
;
overflow
:
hidden
;
overflow
:
hidden
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.info
{
.info
{
width
:
700px
;
width
:
700px
;
margin-left
:
9px
;
margin-left
:
9px
;
.info-box1
{
.info-box1
{
width
:
700px
;
width
:
700px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
...
@@ -153,6 +160,7 @@ onMounted(() => {
...
@@ -153,6 +160,7 @@ onMounted(() => {
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
white-space
:
nowrap
;
}
}
.info-box2
{
.info-box2
{
margin-top
:
5px
;
margin-top
:
5px
;
height
:
22px
;
height
:
22px
;
...
@@ -166,21 +174,25 @@ onMounted(() => {
...
@@ -166,21 +174,25 @@ onMounted(() => {
text-align
:
left
;
text-align
:
left
;
display
:
flex
;
display
:
flex
;
margin-left
:
-10px
;
margin-left
:
-10px
;
.info-box2-item
{
.info-box2-item
{
padding
:
0
10px
;
padding
:
0
10px
;
}
}
.item1
{
.item1
{
width
:
100px
;
width
:
100px
;
overflow
:
hidden
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
white-space
:
nowrap
;
}
}
.item2
{
.item2
{
width
:
180px
;
width
:
180px
;
overflow
:
hidden
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
white-space
:
nowrap
;
}
}
.item3
{
.item3
{
width
:
420px
;
width
:
420px
;
overflow
:
hidden
;
overflow
:
hidden
;
...
@@ -190,25 +202,30 @@ onMounted(() => {
...
@@ -190,25 +202,30 @@ onMounted(() => {
}
}
}
}
}
}
.left-box-bottom
{
.left-box-bottom
{
display
:
flex
;
display
:
flex
;
height
:
40px
;
height
:
40px
;
margin-top
:
21px
;
margin-top
:
21px
;
.left-box-bottom-item
{
.left-box-bottom-item
{
display
:
flex
;
display
:
flex
;
margin-right
:
32px
;
margin-right
:
32px
;
margin-top
:
3px
;
margin-top
:
3px
;
height
:
35px
;
height
:
35px
;
cursor
:
pointer
;
cursor
:
pointer
;
.icon
{
.icon
{
margin-top
:
4px
;
margin-top
:
4px
;
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.name
{
.name
{
height
:
24px
;
height
:
24px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
...
@@ -220,20 +237,24 @@ onMounted(() => {
...
@@ -220,20 +237,24 @@ onMounted(() => {
text-align
:
left
;
text-align
:
left
;
margin-left
:
3px
;
margin-left
:
3px
;
}
}
.nameActive
{
.nameActive
{
color
:
var
(
--
color-main-active
);
color
:
var
(
--
color-main-active
);
font-weight
:
700
;
font-weight
:
700
;
}
}
}
}
.leftBoxBottomItemActive
{
.leftBoxBottomItemActive
{
border-bottom
:
3px
solid
var
(
--
color-main-active
);
border-bottom
:
3px
solid
var
(
--
color-main-active
);
}
}
}
}
}
}
.layout-main-header-right-box
{
.layout-main-header-right-box
{
width
:
300px
;
width
:
300px
;
margin-right
:
150px
;
margin-right
:
150px
;
margin-top
:
19px
;
margin-top
:
19px
;
.right-box-top
{
.right-box-top
{
.time
{
.time
{
height
:
24px
;
height
:
24px
;
...
@@ -246,6 +267,7 @@ onMounted(() => {
...
@@ -246,6 +267,7 @@ onMounted(() => {
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
right
;
text-align
:
right
;
}
}
.name
{
.name
{
height
:
24px
;
height
:
24px
;
line-height
:
24px
;
line-height
:
24px
;
...
@@ -258,12 +280,14 @@ onMounted(() => {
...
@@ -258,12 +280,14 @@ onMounted(() => {
text-align
:
right
;
text-align
:
right
;
}
}
}
}
.right-box-bottom
{
.right-box-bottom
{
margin-top
:
24px
;
margin-top
:
24px
;
text-align
:
right
;
text-align
:
right
;
display
:
flex
;
display
:
flex
;
justify-content
:
flex-end
;
justify-content
:
flex-end
;
gap
:
8px
;
gap
:
8px
;
.btn
{
.btn
{
width
:
120px
;
width
:
120px
;
height
:
36px
;
height
:
36px
;
...
@@ -276,14 +300,17 @@ onMounted(() => {
...
@@ -276,14 +300,17 @@ onMounted(() => {
gap
:
8px
;
gap
:
8px
;
align-items
:
center
;
align-items
:
center
;
cursor
:
pointer
;
cursor
:
pointer
;
.icon
{
.icon
{
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.text
{
.text
{
width
:
64px
;
width
:
64px
;
height
:
24px
;
height
:
24px
;
...
@@ -297,6 +324,7 @@ onMounted(() => {
...
@@ -297,6 +324,7 @@ onMounted(() => {
text-align
:
left
;
text-align
:
left
;
}
}
}
}
.btn-active
{
.btn-active
{
width
:
120px
;
width
:
120px
;
height
:
36px
;
height
:
36px
;
...
@@ -307,14 +335,17 @@ onMounted(() => {
...
@@ -307,14 +335,17 @@ onMounted(() => {
align-items
:
center
;
align-items
:
center
;
gap
:
8px
;
gap
:
8px
;
cursor
:
pointer
;
cursor
:
pointer
;
.icon-active
{
.icon-active
{
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.text-active
{
.text-active
{
width
:
64px
;
width
:
64px
;
height
:
24px
;
height
:
24px
;
...
@@ -331,16 +362,18 @@ onMounted(() => {
...
@@ -331,16 +362,18 @@ onMounted(() => {
}
}
}
}
}
}
.layout-main-center
{
.layout-main-center
{
.report-box
{
.report-box
{
margin
:
0
auto
;
margin
:
0
auto
;
width
:
1600px
;
width
:
1600px
;
height
:
926px
;
height
:
926px
;
background
:
rgba
(
248
,
249
,
250
,
1
);
background
:
rgba
(
248
,
249
,
250
,
1
);
.report-header
{
.report-header
{
height
:
80px
;
height
:
80px
;
line-height
:
80px
;
line-height
:
80px
;
padding-left
:
20
px
;
padding-left
:
69
px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-family
:
Microsoft
YaHei
;
font-style
:
Bold
;
font-style
:
Bold
;
...
@@ -349,39 +382,68 @@ onMounted(() => {
...
@@ -349,39 +382,68 @@ onMounted(() => {
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
left
;
text-align
:
left
;
}
}
.report-main
{
.report-main
{
width
:
1600px
;
width
:
1600px
;
margin
:
0
auto
;
margin
-top
:
24px
;
background
:
#fff
;
background
:
#fff
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
padding
:
0
69px
;
padding
:
24px
69px
;
display
:
flex
;
height
:
calc
(
100%
-
100px
);
height
:
calc
(
100%
-
100px
);
justify-content
:
space-between
;
overflow-y
:
auto
;
// 改为单一滚动容器,天然同步
.left
{
width
:
800px
;
// 滚动条样式
&
:
:-
webkit-scrollbar
{
display
:
none
;
}
&
:
:-
webkit-scrollbar-thumb
{
background
:
#c1c1c1
;
border-radius
:
4px
;
}
&
:
:-
webkit-scrollbar-track
{
background
:
#f1f1f1
;
}
.noContent
{
.noContent
{
height
:
100px
;
height
:
100%
;
line-height
:
100px
;
display
:
flex
;
text-align
:
center
;
align-items
:
center
;
justify-content
:
center
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-family
:
Microsoft
YaHei
;
font-style
:
Regular
;
font-style
:
Regular
;
font-size
:
20px
;
font-size
:
20px
;
font-weight
:
400
;
font-weight
:
400
;
}
}
.content-row
{
display
:
flex
;
width
:
100%
;
min-height
:
100px
;
// border-bottom: 1px solid rgba(234, 236, 238, 1);
align-items
:
stretch
;
// 默认stretch,确保左右等高,头部对齐
&
:last-child
{
border-bottom
:
none
;
}
}
.right
{
.content-en
,
.content-cn
{
width
:
800px
;
width
:
800px
;
.noContent
{
padding
:
24px
30px
;
height
:
100p
x
;
box-sizing
:
border-bo
x
;
line-height
:
100
px
;
font-size
:
16
px
;
text-align
:
center
;
line-height
:
1
.8
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-family
:
Microsoft
YaHei
;
font-style
:
Regular
;
text-align
:
justify
;
font-size
:
20px
;
white-space
:
pre-wrap
;
// 保留换行格式
font-weight
:
400
;
}
.content-en
{
// border-right: 1px solid rgba(234, 236, 238, 1); // 中间分隔线
}
}
}
}
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论