Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
31f63814
提交
31f63814
authored
3月 19, 2026
作者:
张伊明
浏览文件
操作
浏览文件
下载
差异文件
合并分支 'zym-dev' 到 'master'
Zym dev 查看合并请求
!188
上级
b16fe10d
b8845665
全部展开
显示空白字符变更
内嵌
并排
正在显示
15 个修改的文件
包含
179 行增加
和
210 行删除
+179
-210
bill.js
src/api/bill.js
+27
-0
index.vue
src/components/base/DecreeOriginal/index.vue
+7
-0
analysisBox.vue
src/components/base/boxBackground/analysisBox.vue
+3
-2
bill.js
src/router/modules/bill.js
+9
-9
ResourceLibrarySection.vue
src/views/bill/billHome/ResourceLibrarySection.vue
+25
-4
index.vue
src/views/bill/billHome/index.vue
+86
-1
BillHeader.vue
src/views/bill/billLayout/components/BillHeader.vue
+1
-52
index.vue
src/views/bill/billLayout/index.vue
+12
-18
index.vue
src/views/bill/deepDig/poliContribution/index.vue
+1
-0
index.vue
src/views/bill/deepDig/processOverview/index.vue
+0
-119
index.vue
src/views/bill/index.vue
+2
-2
index.vue
src/views/bill/introdoction/index.vue
+0
-0
index.vue
src/views/bill/template/index.vue
+3
-3
translate-icons.svg
...iews/bill/versionCompare/assert/icons/translate-icons.svg
+3
-0
index.vue
src/views/bill/versionCompare/index.vue
+0
-0
没有找到文件。
src/api/bill.js
浏览文件 @
31f63814
...
...
@@ -192,3 +192,30 @@ export function getBillFullText(params) {
params
,
})
}
// 条款对比-根据两版版本与筛选条件获取配对条款列表
/**
* @param {billId,oldVersionId,newVersionId,diffType,cRelated,keyword}
* @header token
* @returns { list: Array<{ oldTerm: object|null, newTerm: object|null }> }
*/
export
function
getBillTermsCompare
(
params
)
{
return
request
({
method
:
"GET"
,
url
:
"/api/billInfoBean/content/compare"
,
params
,
});
}
// 版本对比-根据两版版本与筛选条件获取条款列表(分页)
/**
* @param {billId,content,currentPage,currentVersion,isCn,originalVersion,pageSize,status}
* @header token
*/
export
function
getBillVersionCompare
(
params
)
{
return
request
({
method
:
"GET"
,
url
:
"/api/billInfoBean/versionCompare"
,
params
,
});
}
src/components/base/DecreeOriginal/index.vue
浏览文件 @
31f63814
...
...
@@ -239,6 +239,8 @@ watch(isTranslate, () => {
background-color
:
white
;
padding
:
0
60px
;
flex
:
auto
;
height
:
100%
;
min-height
:
0
;
display
:
flex
;
flex-direction
:
column
;
.report-header
{
...
...
@@ -324,9 +326,14 @@ watch(isTranslate, () => {
.report-main
{
flex
:
auto
;
min-height
:
0
;
box-sizing
:
border-box
;
padding-top
:
10px
;
:deep
(
.el-scrollbar
)
{
height
:
100%
;
}
.no-content
{
height
:
100%
;
display
:
flex
;
...
...
src/components/base/boxBackground/analysisBox.vue
浏览文件 @
31f63814
...
...
@@ -133,11 +133,12 @@ const emit = defineEmits(['save', 'download', 'collect'])
}
}
//
.header-btn {
.header-btn
{
// display: flex;
// justify-content: flex-end;
// gap: 8px;
// }
margin-right
:
10px
;
}
// .header-btn1 {
// position: absolute;
...
...
src/router/modules/bill.js
浏览文件 @
31f63814
...
...
@@ -13,7 +13,7 @@ const BillInfluenceLayout = () => import('@/views/bill/influence/index.vue')
const
BillInfluenceIndustry
=
()
=>
import
(
'@/views/bill/influence/industry/index.vue'
)
const
BillInfluenceScientificResearch
=
()
=>
import
(
'@/views/bill/influence/scientificResearch/index.vue'
)
const
BillRelevantCircumstance
=
()
=>
import
(
'@/views/bill/relevantCircumstance/index.vue'
)
const
Bill
OriginalText
=
()
=>
import
(
'@/views/bill/billOriginalText
/index.vue'
)
const
Bill
VersionCompare
=
()
=>
import
(
'@/views/bill/versionCompare
/index.vue'
)
const
billRoutes
=
[
...
...
@@ -36,14 +36,6 @@ const billRoutes = [
dynamicTitle
:
true
// 标记需要动态设置标题
},
children
:
[
{
path
:
"originalText"
,
name
:
"BillOriginalText"
,
component
:
BillOriginalText
,
meta
:
{
title
:
"法案原文"
}
},
// 法案分析路由
{
path
:
"bill"
,
...
...
@@ -138,6 +130,14 @@ const billRoutes = [
// meta: {
// title: "相关情况"
// }
},
{
path
:
"versionCompare"
,
name
:
"BillVersionCompare"
,
component
:
BillVersionCompare
,
meta
:
{
title
:
"版本对比"
}
}
]
},
...
...
src/views/bill/billHome/ResourceLibrarySection.vue
浏览文件 @
31f63814
...
...
@@ -204,16 +204,20 @@
<
div
class
=
"coop-members"
>
<
div
class
=
"coop-member"
>
<
img
class
=
"coop-avatar"
:
src
=
"item.avatar || defaultAvatar"
alt
=
"committee-avatar"
/>
<
div
class
=
"coop-member-info"
>
<
div
class
=
"coop-member-name"
:
title
=
"item.name"
>
{{
item
.
name
}}
<
/div
>
<
div
v
-
if
=
"item.nameEn"
class
=
"coop-member-name-en"
:
title
=
"item.nameEn"
>
{{
item
.
nameEn
}}
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"coop-summary"
:
title
=
"item.desc"
>
{{
item
.
desc
}}
<
/div
>
<!--
<
div
class
=
"coop-summary"
:
title
=
"item.desc"
>
{{
item
.
desc
}}
<
/div> --
>
<
div
class
=
"coop-count"
>
{{
`${item.proposalSize ?? (item.bills || []).length
}
项重点法案`
}}
<
/div
>
<
slot
name
=
"committee-extra"
:
committee
=
"item"
/>
<
/div
>
<
div
class
=
"coop-proposals"
>
<
div
...
...
@@ -447,6 +451,7 @@ const handleGetCommitteeList = async () => {
const
descText
=
billInfoPage
[
0
]?.
originDepart
||
""
;
return
{
id
:
item
.
id
,
nameEn
:
item
.
nameEn
||
""
,
avatar
:
""
,
name
:
item
.
name
||
"-"
,
desc
:
descText
,
...
...
@@ -1232,6 +1237,12 @@ onMounted(() => {
min
-
width
:
0
;
}
.
coop
-
member
-
info
{
display
:
flex
;
flex
-
direction
:
column
;
min
-
width
:
0
;
}
.
coop
-
avatar
{
width
:
40
px
;
height
:
40
px
;
...
...
@@ -1273,6 +1284,17 @@ onMounted(() => {
text
-
overflow
:
ellipsis
;
}
.
coop
-
member
-
name
-
en
{
color
:
var
(
--
text
-
primary
-
65
-
color
);
font
-
family
:
"Microsoft YaHei"
;
font
-
size
:
14
px
;
font
-
weight
:
400
;
line
-
height
:
22
px
;
white
-
space
:
nowrap
;
overflow
:
hidden
;
text
-
overflow
:
ellipsis
;
}
.
coop
-
count
{
flex
-
shrink
:
0
;
color
:
#
1459
bb
;
...
...
@@ -1284,7 +1306,6 @@ onMounted(() => {
}
.
coop
-
proposals
{
margin
-
top
:
10
px
;
padding
-
top
:
10
px
;
border
-
top
:
1
px
solid
#
eaeced
;
display
:
grid
;
...
...
src/views/bill/billHome/index.vue
浏览文件 @
31f63814
...
...
@@ -127,7 +127,13 @@
<el-empty
v-if=
"!box5HasData"
description=
"暂无数据"
:image-size=
"100"
/>
<div
v-else
id=
"box5Chart"
class=
"overview-chart"
></div>
</div>
<div
class=
"overview-tip-row"
>
<TipTab
class=
"overview-tip"
/>
<AiButton
class=
"overview-tip-action"
@
mouseenter=
"handleShowAiPane('box5')"
/>
</div>
<div
v-if=
"aiPaneVisible.box5"
class=
"overview-ai-pane"
@
mouseleave=
"handleHideAiPane('box5')"
>
<AiPane
:aiContent=
"overviewAiContent.box5"
/>
</div>
</div>
</OverviewCard>
<OverviewCard
class=
"overview-card--single box6"
title=
"涉华法案领域分布"
:icon=
"box6HeaderIcon"
>
...
...
@@ -141,7 +147,13 @@
<el-empty
v-if=
"!box9HasData"
description=
"暂无数据"
:image-size=
"100"
/>
<div
v-else
id=
"box9Chart"
class=
"overview-chart"
></div>
</div>
<div
class=
"overview-tip-row"
>
<TipTab
class=
"overview-tip"
/>
<AiButton
class=
"overview-tip-action"
@
mouseenter=
"handleShowAiPane('box6')"
/>
</div>
<div
v-if=
"aiPaneVisible.box6"
class=
"overview-ai-pane"
@
mouseleave=
"handleHideAiPane('box6')"
>
<AiPane
:aiContent=
"overviewAiContent.box6"
/>
</div>
</div>
</OverviewCard>
</div>
...
...
@@ -157,7 +169,13 @@
<el-empty
v-if=
"!box7HasData"
description=
"暂无数据"
:image-size=
"100"
/>
<div
v-else
id=
"box7Chart"
class=
"overview-chart"
></div>
</div>
<div
class=
"overview-tip-row"
>
<TipTab
class=
"overview-tip"
/>
<AiButton
class=
"overview-tip-action"
@
mouseenter=
"handleShowAiPane('box7')"
/>
</div>
<div
v-if=
"aiPaneVisible.box7"
class=
"overview-ai-pane"
@
mouseleave=
"handleHideAiPane('box7')"
>
<AiPane
:aiContent=
"overviewAiContent.box7"
/>
</div>
</div>
</OverviewCard>
<OverviewCard
class=
"overview-card--single box8"
title=
"涉华法案进展分布"
:icon=
"box7HeaderIcon"
>
...
...
@@ -174,7 +192,13 @@
<div
id=
"box8Chart"
class=
"overview-chart box8-chart"
></div>
</
template
>
</div>
<div
class=
"overview-tip-row"
>
<TipTab
class=
"overview-tip"
/>
<AiButton
class=
"overview-tip-action"
@
mouseenter=
"handleShowAiPane('box8')"
/>
</div>
<div
v-if=
"aiPaneVisible.box8"
class=
"overview-ai-pane"
@
mouseleave=
"handleHideAiPane('box8')"
>
<AiPane
:aiContent=
"overviewAiContent.box8"
/>
</div>
</div>
</OverviewCard>
<OverviewCard
class=
"overview-card--single box9"
title=
"涉华法案关键条款"
:icon=
"box7HeaderIcon"
>
...
...
@@ -183,7 +207,13 @@
<el-empty
v-if=
"!wordCloudHasData"
description=
"暂无数据"
:image-size=
"100"
/>
<WordCloundChart
v-else
class=
"overview-chart"
width=
"100%"
height=
"100%"
:data=
"wordCloudData"
/>
</div>
<div
class=
"overview-tip-row"
>
<TipTab
class=
"overview-tip"
/>
<AiButton
class=
"overview-tip-action"
@
mouseenter=
"handleShowAiPane('box9')"
/>
</div>
<div
v-if=
"aiPaneVisible.box9"
class=
"overview-ai-pane"
@
mouseleave=
"handleHideAiPane('box9')"
>
<AiPane
:aiContent=
"overviewAiContent.box9"
/>
</div>
</div>
</OverviewCard>
</div>
...
...
@@ -221,6 +251,8 @@ import OverviewCard from "./OverviewCard.vue";
import
ResourceLibrarySection
from
"./ResourceLibrarySection.vue"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
import
TipTab
from
"@/components/base/TipTab/index.vue"
;
import
AiButton
from
"@/components/base/Ai/AiButton/index.vue"
;
import
AiPane
from
"@/components/base/Ai/AiPane/index.vue"
;
import
WordCloundChart
from
"@/components/base/WordCloundChart/index.vue"
;
import
getMultiLineChart
from
"./utils/multiLineChart"
;
...
...
@@ -370,6 +402,36 @@ const box7YearList = ref([
}
]);
const
aiPaneVisible
=
ref
({
box5
:
false
,
box6
:
false
,
box7
:
false
,
box8
:
false
,
box9
:
false
});
const
overviewAiContent
=
ref
({
box5
:
"智能总结生成中..."
,
box6
:
"智能总结生成中..."
,
box7
:
"智能总结生成中..."
,
box8
:
"智能总结生成中..."
,
box9
:
"智能总结生成中..."
});
const
handleShowAiPane
=
key
=>
{
aiPaneVisible
.
value
=
{
...
aiPaneVisible
.
value
,
[
key
]:
true
};
};
const
handleHideAiPane
=
key
=>
{
aiPaneVisible
.
value
=
{
...
aiPaneVisible
.
value
,
[
key
]:
false
};
};
const
box8selectetedTime
=
ref
(
"2025"
);
const
box8YearList
=
ref
([
{
...
...
@@ -2109,6 +2171,20 @@ onUnmounted(() => {
.overview-card-body
{
display
:
flex
;
flex-direction
:
column
;
position
:
relative
;
}
.overview-ai-pane
{
position
:
absolute
;
left
:
0
;
bottom
:
0
;
width
:
100%
;
z-index
:
3
;
pointer-events
:
none
;
.ai-pane-wrapper
{
pointer-events
:
auto
;
}
}
.overview-chart-wrap
{
...
...
@@ -2131,8 +2207,17 @@ onUnmounted(() => {
min-height
:
0
;
}
.overview-tip
{
.overview-tip
-row
{
margin-top
:
10px
;
position
:
relative
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
}
.overview-tip-action
{
position
:
absolute
;
right
:
-30px
;
}
}
}
...
...
src/views/bill/billLayout/components/BillHeader.vue
浏览文件 @
31f63814
...
...
@@ -78,14 +78,6 @@
<div
class=
"right-box-bottom"
v-if=
"showActions"
>
<
template
v-if=
"isLoading"
>
<div
class=
"btn1 is-skeleton"
>
<div
class=
"icon"
>
<el-skeleton-item
class=
"skeleton-action-icon"
variant=
"text"
/>
</div>
<div
class=
"text"
>
<el-skeleton-item
class=
"skeleton-action-text"
variant=
"text"
/>
</div>
</div>
<div
class=
"btn3 is-skeleton"
>
<div
class=
"icon"
>
<el-skeleton-item
class=
"skeleton-action-icon"
variant=
"text"
/>
...
...
@@ -96,13 +88,6 @@
</div>
</
template
>
<
template
v-else
>
<div
class=
"btn1"
@
click=
"emit('open-original-text')"
>
<div
class=
"icon"
>
<img
:src=
"btnIconOriginalText"
alt=
""
/>
</div>
<div
class=
"text"
>
{{
"法案原文"
}}
</div>
</div>
<div
class=
"btn3"
@
click=
"emit('open-analysis')"
>
<div
class=
"icon"
>
<img
:src=
"btnIconAnalysis"
alt=
""
/>
...
...
@@ -118,7 +103,6 @@
<
script
setup
>
import
{
computed
}
from
"vue"
;
import
btnIconOriginalText
from
"@/views/thinkTank/ReportDetail/images/btn-icon1.png"
;
import
btnIconAnalysis
from
"@/views/thinkTank/ReportDetail/images/btn-icon3.png"
;
const
props
=
defineProps
({
...
...
@@ -150,7 +134,7 @@ const props = defineProps({
const
isLoading
=
computed
(()
=>
!
props
.
billInfo
||
!
props
.
billInfo
.
billName
);
const
emit
=
defineEmits
([
"tab-click"
,
"open-
original-text"
,
"open-
analysis"
]);
const
emit
=
defineEmits
([
"tab-click"
,
"open-analysis"
]);
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
@@ -363,41 +347,6 @@ const emit = defineEmits(["tab-click", "open-original-text", "open-analysis"]);
justify-content
:
flex-end
;
gap
:
8px
;
.btn1
{
cursor
:
pointer
;
width
:
120px
;
height
:
36px
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
230
,
231
,
232
,
1
);
border-radius
:
6px
;
background
:
rgba
(
255
,
255
,
255
,
1
);
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
gap
:
8px
;
.icon
{
width
:
16px
;
height
:
16px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.text
{
height
:
24px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-weight
:
400
;
line-height
:
24px
;
letter-spacing
:
0px
;
text-align
:
left
;
}
}
.btn3
{
cursor
:
pointer
;
width
:
120px
;
...
...
src/views/bill/billLayout/index.vue
浏览文件 @
31f63814
...
...
@@ -7,10 +7,9 @@
:defaultLogo=
"USALogo"
:tabs=
"mainHeaderBtnList"
:activeTitle=
"activeTitle"
:showTabs=
"
!isBillOriginalTextPage
"
:showActions=
"
!isBillOriginalTextPage
"
:showTabs=
"
showHeaderTabs
"
:showActions=
"
showHeaderActions
"
@
tab-click=
"handleClickMainHeaderBtn"
@
open-original-text=
"handleOpenBillOriginalText"
@
open-analysis=
"handleAnalysisClick"
/>
...
...
@@ -22,14 +21,13 @@
</
template
>
<
script
setup
>
import
{
ref
,
onMounted
,
computed
,
watch
}
from
"vue"
;
import
{
ref
,
onMounted
,
watch
}
from
"vue"
;
import
router
from
"@/router"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
getBillInfoGlobal
}
from
"@/api/bill"
;
import
BillHeader
from
"./components/BillHeader.vue"
;
const
route
=
useRoute
();
const
isBillOriginalTextPage
=
computed
(()
=>
route
.
path
===
"/billLayout/originalText"
);
import
icon1
from
"./assets/icons/icon1.svg"
;
import
icon1Active
from
"./assets/icons/icon1_active.svg"
;
...
...
@@ -55,16 +53,6 @@ const getBillInfoGlobalFn = async () => {
}
};
const
handleOpenBillOriginalText
=
()
=>
{
const
targetRoute
=
router
.
resolve
({
path
:
"/billLayout/originalText"
,
query
:
{
billId
:
route
.
query
.
billId
}
});
window
.
open
(
targetRoute
.
href
,
"_blank"
);
};
const
mainHeaderBtnList
=
ref
([
{
icon
:
icon1
,
...
...
@@ -93,6 +81,8 @@ const mainHeaderBtnList = ref([
]);
const
activeTitle
=
ref
(
"法案概况"
);
const
showHeaderTabs
=
ref
(
true
);
const
showHeaderActions
=
ref
(
true
);
const
getActiveTitleByRoutePath
=
path
=>
{
if
(
path
.
startsWith
(
"/billLayout/deepDig"
))
return
"深度挖掘"
;
...
...
@@ -102,8 +92,12 @@ const getActiveTitleByRoutePath = path => {
return
"法案概况"
;
};
const
syncActiveTitleFromRoute
=
()
=>
{
const
syncHeaderStateFromRoute
=
()
=>
{
const
currentPath
=
route
.
path
||
""
;
activeTitle
.
value
=
getActiveTitleByRoutePath
(
route
.
path
);
const
isVersionCompare
=
currentPath
.
startsWith
(
"/billLayout/versionCompare"
);
showHeaderTabs
.
value
=
!
isVersionCompare
;
showHeaderActions
.
value
=
!
isVersionCompare
;
};
const
handleClickMainHeaderBtn
=
item
=>
{
...
...
@@ -134,7 +128,7 @@ const handleAnalysisClick = () => {
onMounted
(()
=>
{
getBillInfoGlobalFn
();
// 以当前路由为准,避免 sessionStorage 造成高亮错乱
sync
ActiveTitl
eFromRoute
();
sync
HeaderStat
eFromRoute
();
// 兜底:如果未来出现未知路由且有缓存,再用缓存
const
cachedTitle
=
window
.
sessionStorage
.
getItem
(
"activeTitle"
);
if
(
!
activeTitle
.
value
&&
cachedTitle
)
activeTitle
.
value
=
cachedTitle
;
...
...
@@ -143,7 +137,7 @@ onMounted(() => {
watch
(
()
=>
route
.
path
,
()
=>
{
sync
ActiveTitl
eFromRoute
();
sync
HeaderStat
eFromRoute
();
},
{
immediate
:
true
}
);
...
...
src/views/bill/deepDig/poliContribution/index.vue
浏览文件 @
31f63814
...
...
@@ -697,6 +697,7 @@ onMounted(() => {
right
:
84px
;
top
:
15px
;
.btn
{
height
:
28px
;
padding
:
0
8px
;
...
...
src/views/bill/deepDig/processOverview/index.vue
浏览文件 @
31f63814
<
template
>
<div
class=
"process-overview-wrap"
>
<!--
<div
class=
"box-header"
>
<div
class=
"header-left"
></div>
<div
class=
"title"
>
流程概要
</div>
<div
class=
"header-right"
>
<div
class=
"icon"
>
<img
src=
"@/assets/icons/box-header-icon2.png"
alt=
""
/>
</div>
<div
class=
"icon"
>
<img
src=
"@/assets/icons/box-header-icon3.png"
alt=
""
/>
</div>
</div>
</div>
<div
class=
"main"
>
<div
class=
"left"
:style=
"
{ width: (maxLineWidth + 250) + 'px' }">
<div
class=
"top"
>
<div
class=
"top-line"
:style=
"
{ width: lineWidth }">
<div
class=
"top-line1"
></div>
</div>
<div
class=
"start"
>
<div
class=
"icon"
>
<img
src=
"./assets/images/logo1.png"
alt=
""
/>
</div>
<div
class=
"name"
>
{{
"参议院"
}}
</div>
</div>
<div
class=
"content-box"
:style=
"senateBoxStyle"
>
<div
class=
"item-box"
v-for=
"(item, index) in senateList"
:key=
"item.id"
style=
"width: 280px; flex-shrink: 0;"
>
<div
class=
"item-box-dot"
>
<img
src=
"./assets/images/top-line-dot.png"
alt=
""
/>
</div>
<div
class=
"item-content"
>
<div
class=
"item-header"
>
<div
class=
"item-title"
:title=
"item.actionTitle"
>
{{
item
.
actionTitle
}}
<span
v-if=
"item.versionId"
>
(
{{
item
.
versionId
}}
)
</span>
</div>
<div
class=
"item-header-icon"
@
click=
"handleClickDetail(true, item, $event)"
>
<img
src=
"./assets/images/item-header-icon.png"
alt=
""
/>
</div>
</div>
<div
class=
"item-info"
v-if=
"item.agreeVote !== null || item.disagreeVote !== null"
>
{{
(
item
.
agreeVote
||
0
)
+
"赞成:"
+
(
item
.
disagreeVote
||
0
)
+
"反对"
}}
</div>
<div
class=
"item-main"
v-if=
"item.fynrList && item.fynrList.length"
>
<div
class=
"item-main-item"
v-for=
"(sub, subIndex) in item.fynrList"
:key=
"subIndex"
>
<div
class=
"icon"
></div>
<CommonPrompt
:content=
"sub"
>
<div
class=
"text"
>
{{
sub
}}
</div>
</CommonPrompt>
</div>
</div>
</div>
<div
class=
"item-time"
>
{{
item
.
actionDate
}}
</div>
</div>
</div>
</div>
<div
class=
"bottom"
>
<div
class=
"bottom-line"
:style=
"
{ width: lineWidth }">
<div
class=
"bottom-line1"
></div>
</div>
<div
class=
"start"
>
<div
class=
"name"
>
{{
"众议院"
}}
</div>
<div
class=
"icon"
>
<img
src=
"./assets/images/logo2.png"
alt=
""
/>
</div>
</div>
<div
class=
"content-box"
:style=
"houseBoxStyle"
>
<div
class=
"item-box"
v-for=
"(item, index) in houseList"
:key=
"item.id"
style=
"width: 280px; flex-shrink: 0;"
>
<div
class=
"item-time"
>
{{
item
.
actionDate
}}
</div>
<div
class=
"item-box-dot"
>
<img
src=
"./assets/images/bottom-line-dot.png"
alt=
""
/>
</div>
<div
class=
"item-content"
>
<div
class=
"item-header"
>
<div
class=
"item-title"
:title=
"item.actionTitle"
>
{{
item
.
actionTitle
}}
<span
v-if=
"item.versionId"
>
(
{{
item
.
versionId
}}
)
</span>
</div>
<div
class=
"item-header-icon"
@
click=
"handleClickDetail(true, item, $event)"
>
<img
src=
"./assets/images/item-header-icon.png"
alt=
""
/>
</div>
</div>
<div
class=
"item-info"
v-if=
"item.agreeVote !== null || item.disagreeVote !== null"
>
{{
(
item
.
agreeVote
||
0
)
+
"赞成:"
+
(
item
.
disagreeVote
||
0
)
+
"反对"
}}
</div>
<div
class=
"item-main"
v-if=
"item.fynrList && item.fynrList.length"
>
<div
class=
"item-main-item"
v-for=
"(sub, subIndex) in item.fynrList"
:key=
"subIndex"
>
<div
class=
"icon"
></div>
<CommonPrompt
:content=
"sub"
>
<div
class=
"text"
>
{{
sub
}}
</div>
</CommonPrompt>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"right"
:style=
"
{ left: rightPos }">
<div
class=
"junction-dot"
>
<div
class=
"inner-dot"
></div>
</div>
<div
class=
"right-line"
></div>
</div>
</div>
</div>
-->
<AnalysisBox
title=
"流程概要"
:showAllBtn=
"false"
>
<div
class=
"main"
>
<div
class=
"left"
:style=
"
{ width: (maxLineWidth + 250) + 'px' }">
...
...
@@ -207,17 +99,6 @@
</div>
</div>
</div>
<!--
<div
class=
"footer"
>
<div
class=
"footer-left"
>
<img
src=
"./assets/icons/right-icon1.png"
alt=
""
/>
</div>
<div
class=
"footer-center"
>
立法过程始于2025年2月共和党启动预算框架谈判,5月22日众议院以215:214的1票优势通过初始版本;随后参议院历经16小时全文朗读和马拉松式辩论,于7月1日以51:50的票数通过修订版(副总统万斯投关键票);因参议院版本大改(如永久化减税、提高债限至5万亿美元),法案重返众议院审议,经程序性投票(219:213)和最终表决(218:214),于7月3日深夜通过;特朗普在7月4日独立日签署生效,全程凸显两党对立、党内分歧及程序博弈。
</div>
<div
class=
"footer-right"
>
<img
src=
"./assets/icons/arrow-right.png"
alt=
""
/>
</div>
</div>
-->
</AnalysisBox>
<ProcessOverviewDetailDialog
...
...
src/views/bill/index.vue
浏览文件 @
31f63814
...
...
@@ -29,7 +29,7 @@ const siderBtnList = ref([
path
:
'/billLayout/bill/background'
},
{
name
:
'
内容概要
'
,
name
:
'
法案原文
'
,
path
:
'/billLayout/bill/template'
},
])
...
...
@@ -38,7 +38,7 @@ const siderBtnActive = ref("法案简介");
const
getSiderActiveByRoutePath
=
path
=>
{
if
(
path
.
includes
(
"/billLayout/bill/background"
))
return
"法案背景"
;
if
(
path
.
includes
(
"/billLayout/bill/template"
))
return
"
内容概要
"
;
if
(
path
.
includes
(
"/billLayout/bill/template"
))
return
"
法案原文
"
;
return
"法案简介"
;
};
...
...
src/views/bill/introdoction/index.vue
浏览文件 @
31f63814
差异被折叠。
点击展开。
src/views/bill/template/index.vue
浏览文件 @
31f63814
...
...
@@ -387,7 +387,7 @@ const handleChangeBill = val => {
};
const
handleOpenVersionCompare
=
()
=>
{
const
targetUrl
=
`/billLayout/
deepDig/processOverview
?billId=
${
route
.
query
.
billId
}
`
;
const
targetUrl
=
`/billLayout/
versionCompare
?billId=
${
route
.
query
.
billId
}
`
;
window
.
open
(
targetUrl
,
"_blank"
);
};
...
...
@@ -404,8 +404,8 @@ const handleGetBillList = async () => {
billList
.
value
=
rawList
.
map
(
item
=>
{
return
{
label
:
item
.
bbmc
,
value
:
item
.
bbmc
label
:
item
.
contentZh
,
value
:
item
.
contentZh
};
})
.
filter
(
item
=>
{
...
...
src/views/bill/versionCompare/assert/icons/translate-icons.svg
0 → 100644
浏览文件 @
31f63814
<svg
viewBox=
"0 0 13.5996 12.666"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"13.599609"
height=
"12.666016"
fill=
"none"
customFrame=
"#000000"
>
<path
id=
"矢量 455"
d=
"M2 8.66667L2 10C1.99999 10.0416 2.00192 10.0831 2.00578 10.1245C2.00965 10.1659 2.01545 10.207 2.02317 10.2479C2.03089 10.2888 2.0405 10.3292 2.052 10.3691C2.0635 10.4091 2.07684 10.4484 2.09202 10.4872C2.1072 10.5259 2.12416 10.5638 2.14289 10.6009C2.16162 10.6381 2.18204 10.6742 2.20416 10.7095C2.22627 10.7447 2.24998 10.7788 2.27529 10.8118C2.3006 10.8448 2.32739 10.8765 2.35566 10.907C2.38394 10.9375 2.41358 10.9666 2.44458 10.9944C2.47558 11.0221 2.50781 11.0483 2.54126 11.073C2.57472 11.0977 2.60925 11.1208 2.64487 11.1423C2.68048 11.1637 2.71702 11.1835 2.75448 11.2016C2.79195 11.2196 2.83017 11.2359 2.86916 11.2503C2.90814 11.2648 2.94772 11.2775 2.98788 11.2882C3.02805 11.299 3.06863 11.3079 3.10963 11.3149C3.15063 11.3218 3.19186 11.3269 3.23333 11.33L3.33333 11.3333L5.33333 11.3333L5.33333 12.6667L3.33333 12.6667C3.246 12.6667 3.15887 12.6624 3.07195 12.6538C2.98504 12.6453 2.89875 12.6325 2.81309 12.6154C2.72743 12.5984 2.64282 12.5772 2.55924 12.5518C2.47566 12.5265 2.39353 12.4971 2.31284 12.4637C2.23216 12.4303 2.1533 12.393 2.07627 12.3518C1.99925 12.3106 1.92443 12.2658 1.85181 12.2173C1.77919 12.1687 1.70913 12.1168 1.64162 12.0614C1.57411 12.006 1.50947 11.9474 1.44771 11.8856C1.38596 11.8239 1.32738 11.7592 1.27197 11.6917C1.21657 11.6242 1.1646 11.5541 1.11608 11.4815C1.06756 11.4089 1.02271 11.3341 0.981543 11.2571C0.940373 11.18 0.903077 11.1012 0.869654 11.0205C0.836232 10.9398 0.806845 10.8577 0.781492 10.7741C0.75614 10.6905 0.734944 10.6059 0.717906 10.5202C0.700867 10.4346 0.688068 10.3483 0.679507 10.2614C0.670947 10.1745 0.666666 10.0873 0.666666 10L0.666666 8.66667L2 8.66667L2 8.66667ZM10.6667 5.33333L13.6 12.6667L12.1633 12.6667L11.3627 10.6667L8.636 10.6667L7.83667 12.6667L6.40067 12.6667L9.33333 5.33333L10.6667 5.33333L10.6667 5.33333ZM10 7.25667L9.16867 9.33333L10.83 9.33333L10 7.25667ZM4 0L4 1.33333L6.66667 1.33333L6.66667 6L4 6L4 8L2.66667 8L2.66667 6L0 6L0 1.33333L2.66667 1.33333L2.66667 0L4 0ZM10 0.666667C10.0873 0.666667 10.1745 0.670947 10.2614 0.679507C10.3483 0.688068 10.4346 0.700867 10.5202 0.717906C10.6059 0.734944 10.6905 0.75614 10.7741 0.781492C10.8577 0.806845 10.9398 0.836232 11.0205 0.869654C11.1012 0.903077 11.18 0.940373 11.2571 0.981543C11.3341 1.02271 11.4089 1.06756 11.4815 1.11608C11.5541 1.1646 11.6242 1.21657 11.6917 1.27197C11.7592 1.32738 11.8239 1.38596 11.8856 1.44772C11.9474 1.50947 12.006 1.57411 12.0614 1.64162C12.1168 1.70913 12.1687 1.77919 12.2173 1.85181C12.2658 1.92443 12.3106 1.99925 12.3518 2.07628C12.393 2.1533 12.4303 2.23216 12.4637 2.31284C12.4971 2.39353 12.5265 2.47566 12.5518 2.55924C12.5772 2.64282 12.5984 2.72743 12.6154 2.81309C12.6325 2.89875 12.6453 2.98504 12.6538 3.07195C12.6624 3.15887 12.6667 3.246 12.6667 3.33333L12.6667 4.66667L11.3333 4.66667L11.3333 3.33333C11.3333 3.28966 11.3312 3.2461 11.3269 3.20264C11.3226 3.15919 11.3162 3.11604 11.3077 3.07321C11.2992 3.03038 11.2886 2.98807 11.2759 2.94629C11.2632 2.9045 11.2486 2.86343 11.2318 2.82309C11.2151 2.78274 11.1965 2.74332 11.1759 2.7048C11.1553 2.66629 11.1329 2.62888 11.1086 2.59257C11.0844 2.55626 11.0584 2.52123 11.0307 2.48748C11.003 2.45372 10.9737 2.4214 10.9428 2.39052C10.9119 2.35965 10.8796 2.33036 10.8459 2.30265C10.8121 2.27495 10.7771 2.24897 10.7408 2.22471C10.7045 2.20045 10.667 2.17802 10.6285 2.15744C10.59 2.13685 10.5506 2.1182 10.5102 2.10149C10.4699 2.08478 10.4288 2.07009 10.387 2.05741C10.3453 2.04474 10.303 2.03414 10.2601 2.02562C10.2173 2.0171 10.1741 2.0107 10.1307 2.00642C10.0872 2.00214 10.0437 2 10 2L8 2L8 0.666667L10 0.666667L10 0.666667ZM2.66667 2.66667L1.33333 2.66667L1.33333 4.66667L2.66667 4.66667L2.66667 2.66667ZM5.33333 2.66667L4 2.66667L4 4.66667L5.33333 4.66667L5.33333 2.66667Z"
fill=
"rgb(95,101,108)"
fill-rule=
"nonzero"
/>
</svg>
src/views/bill/versionCompare/index.vue
0 → 100644
浏览文件 @
31f63814
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论