Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
486b8d7c
提交
486b8d7c
authored
1月 04, 2026
作者:
付康
浏览文件
操作
浏览文件
下载
差异文件
合并分支 'lzl-dev' 到 'master'
Lzl dev 查看合并请求
!72
上级
95bfa457
e2355325
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
23 个修改的文件
包含
743 行增加
和
540 行删除
+743
-540
bill.js
src/api/bill.js
+32
-7
exportControl.js
src/router/modules/exportControl.js
+10
-0
WordCloudMap.vue
src/views/bill/background/WordCloudMap.vue
+101
-73
index.vue
src/views/bill/background/index.vue
+0
-0
index.vue
src/views/bill/billHome/index.vue
+7
-131
index.vue
src/views/bill/billLayout/index.vue
+44
-18
index.vue
src/views/bill/commonPrompt/index.vue
+1
-0
index.vue
src/views/bill/deepDig/index.vue
+9
-1
index.vue
src/views/bill/deepDig/poliContribution/index.vue
+1
-0
index.vue
src/views/bill/deepDig/processAnalysis/index.vue
+12
-11
index.vue
src/views/bill/deepDig/processOverview/index.vue
+14
-5
index.vue
src/views/bill/index.vue
+9
-1
index.vue
src/views/bill/influence/index.vue
+6
-1
index.vue
src/views/bill/influence/industry/index.vue
+7
-4
index.vue
src/views/bill/introdoction/index.vue
+40
-64
index.vue
src/views/bill/template/index.vue
+60
-204
news.vue
src/views/exportControl/components/news.vue
+11
-6
index.vue
src/views/exportControl/index.vue
+21
-5
index.vue
...s/sanctionsOverview/components/introductionPage/index.vue
+18
-4
index.vue
...omponents/sanctionsOverview/components/listPage/index.vue
+16
-1
index.vue
...v2.0SingleSanction/components/sanctionsOverview/index.vue
+49
-3
index.vue
src/views/exportControl/v2.0SingleSanction/index.vue
+7
-1
index.vue
...ews/exportControl/v2.0SingleSanction/originPage/index.vue
+268
-0
没有找到文件。
src/api/bill.js
浏览文件 @
486b8d7c
...
@@ -89,6 +89,19 @@ export function getBillPersonAnalyze(params) {
...
@@ -89,6 +89,19 @@ export function getBillPersonAnalyze(params) {
})
})
}
}
// 议员相关性分析领域人物动态-根据法案ID获取议员分析领域人物动态
/**
* @param {id, isOppose,areaId}
* @header token
*/
export
function
getBillPersonAnalyzeDy
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/billInfoBean/personAnalyze/news/
${
params
.
id
}
/
${
params
.
areaId
}
`
,
params
,
})
}
// 主要条款-根据法案ID获取原文id列表
// 主要条款-根据法案ID获取原文id列表
/**
/**
* @param {id}
* @param {id}
...
@@ -110,33 +123,33 @@ export function getBillContentId(params) {
...
@@ -110,33 +123,33 @@ export function getBillContentId(params) {
export
function
getBillContentTk
(
params
)
{
export
function
getBillContentTk
(
params
)
{
return
request
({
return
request
({
method
:
'GET'
,
method
:
'GET'
,
url
:
`/api/billInfoBean/content/tk/
${
params
.
bill
i
d
}
/
${
params
.
id
}
`
,
url
:
`/api/billInfoBean/content/tk/
${
params
.
bill
I
d
}
/
${
params
.
id
}
`
,
params
,
params
,
})
})
}
}
// 限制方式-根据法案原文ID获取限制方式列表
// 限制方式-根据法案原文ID获取限制方式列表
/**
/**
* @param {billId}
* @param {billId
,versionId,cRelated
}
* @header token
* @header token
*/
*/
export
function
getBillContentXzfs
(
params
)
{
export
function
getBillContentXzfs
(
params
)
{
return
request
({
return
request
({
method
:
'GET'
,
method
:
'GET'
,
url
:
`/api/billInfoBean/content/xzfs/
${
params
.
i
d
}
`
,
url
:
`/api/billInfoBean/content/xzfs/
${
params
.
billId
}
/
${
params
.
versionI
d
}
`
,
params
,
params
,
})
})
}
}
// 涉及行业-根据法案原文ID获取行业领域列表
// 涉及行业-根据法案原文ID获取行业领域列表
/**
/**
* @param {
i
d}
* @param {
billId,versionId,cRelate
d}
* @header token
* @header token
*/
*/
export
function
getBillHyly
(
params
)
{
export
function
getBillHyly
(
params
)
{
return
request
({
return
request
({
method
:
'GET'
,
method
:
'GET'
,
url
:
`/api/billInfoBean/content/hyly/
${
params
.
i
d
}
`
,
url
:
`/api/billInfoBean/content/hyly/
${
params
.
billId
}
/
${
params
.
versionI
d
}
`
,
params
,
params
,
})
})
}
}
...
@@ -165,4 +178,17 @@ export function getBillDyqkSummary(params) {
...
@@ -165,4 +178,17 @@ export function getBillDyqkSummary(params) {
url
:
`/api/billDeepDive/processSummary/
${
params
.
id
}
`
,
url
:
`/api/billDeepDive/processSummary/
${
params
.
id
}
`
,
params
,
params
,
})
})
}
}
\ No newline at end of file
// 获取法案全文-根据法案ID获取法案全文
/**
* @param {id}
* @header token
*/
export
function
getBillFullText
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/billInfoBean/content/
${
params
.
id
}
`
,
params
,
})
}
src/router/modules/exportControl.js
浏览文件 @
486b8d7c
...
@@ -104,6 +104,15 @@ const exportControlRoutes = [
...
@@ -104,6 +104,15 @@ const exportControlRoutes = [
title
:
"单条制裁详情"
title
:
"单条制裁详情"
}
}
},
},
// V2.0单条制裁详情-实体清单原文
{
path
:
"/exportControl/origin"
,
name
:
"entityListOrigin"
,
component
:
()
=>
import
(
"@/views/exportControl/v2.0SingleSanction/originPage/index.vue"
),
meta
:
{
title
:
"实体清单原文"
}
},
]
]
export
default
exportControlRoutes
export
default
exportControlRoutes
\ No newline at end of file
src/views/bill/background/WordCloudMap.vue
浏览文件 @
486b8d7c
...
@@ -5,91 +5,119 @@
...
@@ -5,91 +5,119 @@
</
template
>
</
template
>
<
script
setup
>
<
script
setup
>
import
{
ref
,
onMounted
,
onBeforeUnmount
}
from
"vue"
;
import
{
ref
,
onMounted
,
onBeforeUnmount
,
watch
}
from
"vue"
;
import
*
as
echarts
from
"echarts"
;
import
*
as
echarts
from
"echarts"
;
import
"echarts-wordcloud"
;
import
"echarts-wordcloud"
;
const
props
=
defineProps
({
const
props
=
defineProps
({
// 词云数据
// 词云数据
data
:
{
data
:
{
type
:
Array
,
type
:
Array
,
required
:
true
,
required
:
true
// 示例:
},
// [
// 词云形状
// { name: 'Vue', value: 1000 },
shape
:
{
// { name: 'ECharts', value: 618 },
type
:
String
,
// // ...
default
:
"circle"
// ]
},
},
// 选中的项的名字
// 词云形状,可以是 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon' 等
selectedName
:
{
shape
:
{
type
:
String
,
type
:
String
,
default
:
""
default
:
"circle"
,
}
},
});
});
const
emit
=
defineEmits
([
"wordClick"
]);
const
echartWord
=
ref
(
null
);
const
echartWord
=
ref
(
null
);
let
myChart
=
null
;
let
myChart
=
null
;
const
initChart
=
()
=>
{
const
initChart
=
()
=>
{
if
(
echartWord
.
value
)
{
if
(
echartWord
.
value
)
{
myChart
=
echarts
.
init
(
echartWord
.
value
);
if
(
myChart
)
{
const
option
=
{
myChart
.
dispose
();
grid
:
{
}
left
:
5
,
myChart
=
echarts
.
init
(
echartWord
.
value
);
top
:
5
,
right
:
5
,
const
chartData
=
props
.
data
.
map
(
item
=>
{
bottom
:
5
,
const
isSelected
=
item
.
name
===
props
.
selectedName
;
},
if
(
isSelected
)
{
series
:
[
return
{
{
...
item
,
type
:
"wordCloud"
,
// 提升选中项的权重,确保其在布局中占主导地位
shape
:
props
.
shape
,
value
:
100
,
// 给予一个显著高于其他的固定大值,使其占据中心
// 其他形状你可以使用形状路径
textStyle
:
{
// shape: 'circle', // 示例
fontWeight
:
"bold"
,
// 或者自定义路径
color
:
"#fff"
,
gridSize
:
20
,
// 网格大小,影响词间距。
backgroundColor
:
"rgba(189, 33, 33, 0.9)"
,
sizeRange
:
[
15
,
25
],
// 定义词云中文字大小的范围
borderRadius
:
20
,
rotationRange
:
[
0
,
0
],
padding
:
[
8
,
16
]
// 适当增加 padding 以确保背景块足够大
rotationStep
:
0
,
}
drawOutOfBound
:
false
,
// 是否超出画布
};
// 字体
}
textStyle
:
{
return
{
// normal: {
...
item
,
// color: function () {
value
:
Math
.
floor
(
Math
.
random
()
*
20
)
+
10
// 为非选中项分配较小的随机权重,有助于均匀分布
// return 'rgb(' + [
};
// Math.round(Math.random() * 160),
});
// Math.round(Math.random() * 160),
// Math.round(Math.random() * 160)
const
option
=
{
// ].join(',') + ')';
grid
:
{
// }
left
:
0
,
// },
top
:
0
,
color
:
function
()
{
right
:
0
,
let
colors
=
[
bottom
:
0
"rgba(189, 33, 33, 1)"
,
},
"rgba(232, 151, 21, 1)"
,
series
:
[
"rgba(220, 190, 68, 1)"
,
{
"rgba(96, 58, 186, 1)"
,
type
:
"wordCloud"
,
"rgba(32, 121, 69, 1)"
,
shape
:
props
.
shape
,
"rgba(22, 119, 255, 1)"
,
gridSize
:
30
,
// 增大网格间距,防止重叠
];
sizeRange
:
[
16
,
26
],
// 保持字体大小
return
colors
[
parseInt
(
Math
.
random
()
*
colors
.
length
)];
rotationRange
:
[
0
,
0
],
},
rotationStep
:
0
,
emphasis
:
{
drawOutOfBound
:
true
,
shadowBlur
:
5
,
layoutAnimation
:
true
,
shadowColor
:
"#333"
,
keepAspect
:
true
,
},
textStyle
:
{
},
color
:
function
()
{
// 设置词云数据
let
colors
=
[
data
:
props
.
data
,
"rgba(189, 33, 33, 1)"
,
},
"rgba(232, 151, 21, 1)"
,
],
"rgba(220, 190, 68, 1)"
,
};
"rgba(96, 58, 186, 1)"
,
myChart
.
setOption
(
option
);
"rgba(32, 121, 69, 1)"
,
window
.
addEventListener
(
"resize"
,
myChart
.
resize
);
"rgba(22, 119, 255, 1)"
}
];
return
colors
[
parseInt
(
Math
.
random
()
*
colors
.
length
)];
},
emphasis
:
{
shadowBlur
:
5
,
shadowColor
:
"#333"
}
},
data
:
chartData
}
]
};
myChart
.
setOption
(
option
);
myChart
.
on
(
"click"
,
params
=>
{
emit
(
"wordClick"
,
params
.
data
);
});
window
.
addEventListener
(
"resize"
,
myChart
.
resize
);
}
};
};
watch
(
()
=>
[
props
.
data
,
props
.
selectedName
],
()
=>
{
initChart
();
},
{
deep
:
true
}
);
onMounted
(()
=>
{
onMounted
(()
=>
{
initChart
();
initChart
();
});
});
...
...
src/views/bill/background/index.vue
浏览文件 @
486b8d7c
差异被折叠。
点击展开。
src/views/bill/billHome/index.vue
浏览文件 @
486b8d7c
...
@@ -223,7 +223,7 @@
...
@@ -223,7 +223,7 @@
</div>
</div>
</div>
</div>
<div
class=
"box2-main"
>
<div
class=
"box2-main"
>
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
>
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
@
click=
"handleClickToDetailO(item)"
>
<div
<div
class=
"item-left"
class=
"item-left"
:class=
"
{
:class=
"
{
...
@@ -283,7 +283,9 @@
...
@@ -283,7 +283,9 @@
{{
news
.
newsDate
?
news
.
newsDate
.
slice
(
5
)
:
""
}}
-
{{
news
.
newsOrg
}}
{{
news
.
newsDate
?
news
.
newsDate
.
slice
(
5
)
:
""
}}
-
{{
news
.
newsOrg
}}
</div>
</div>
</div>
</div>
<div
class=
"right-footer"
>
{{
news
.
newsContent
}}
</div>
<CommonPrompt
:content=
"news.newsContent"
>
<div
class=
"right-footer"
>
{{
news
.
newsContent
}}
</div>
</CommonPrompt>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -772,6 +774,7 @@ import {
...
@@ -772,6 +774,7 @@ import {
}
from
"@/api/bill/billHome"
;
}
from
"@/api/bill/billHome"
;
import
{
getPersonSummaryInfo
}
from
"@/api/common/index"
;
import
{
getPersonSummaryInfo
}
from
"@/api/common/index"
;
import
DivideHeader
from
"@/components/DivideHeader.vue"
;
import
DivideHeader
from
"@/components/DivideHeader.vue"
;
import
CommonPrompt
from
"../commonPrompt/index.vue"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
...
@@ -944,13 +947,13 @@ const curBill = ref({
...
@@ -944,13 +947,13 @@ const curBill = ref({
// 查看详情
// 查看详情
const
handleClickToDetail
=
()
=>
{
const
handleClickToDetail
=
()
=>
{
window
.
sessionStorage
.
setItem
(
"billId"
,
curBill
.
value
.
billId
);
window
.
sessionStorage
.
setItem
(
"billId"
,
curBill
.
value
.
billId
);
const
route
=
router
.
resolve
(
"/billLayout
"
);
const
route
=
router
.
resolve
(
"/billLayout
?billId="
+
curBill
.
value
.
billId
);
window
.
open
(
route
.
href
,
"_blank"
);
window
.
open
(
route
.
href
,
"_blank"
);
}
;
}
;
// 查看详情 传递参数
// 查看详情 传递参数
const
handleClickToDetailO
=
item
=>
{
const
handleClickToDetailO
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"billId"
,
item
.
billId
);
window
.
sessionStorage
.
setItem
(
"billId"
,
item
.
billId
);
const
route
=
router
.
resolve
(
"/billLayout
"
);
const
route
=
router
.
resolve
(
"/billLayout
?billId="
+
item
.
billId
);
window
.
open
(
route
.
href
,
"_blank"
);
window
.
open
(
route
.
href
,
"_blank"
);
}
;
}
;
...
@@ -980,133 +983,6 @@ const handleToMoreNews = () => {
...
@@ -980,133 +983,6 @@ const handleToMoreNews = () => {
// 风险信号
// 风险信号
const
warningList
=
ref
([]);
const
warningList
=
ref
([]);
// 资源库 法案列表
// const billList = ref([
//
{
// billName: "大而美法案",
// introductionDate: "2025年7月4日",
// status: "特别重大风险",
// tagList: ["集成电路", "人工智能"],
// img: bill1,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "GENIUS稳定币法案",
// introductionDate: "2025年7月5日",
// status: "",
// tagList: ["集成电路", "人工智能"],
// img: bill2,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "美越贸易协议",
// introductionDate: "2025年7月6日",
// status: "",
// tagList: ["集成电路", "人工智能"],
// img: bill3,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "美越贸易协议",
// introductionDate: "2025年7月7日",
// status: "特别重大风险",
// tagList: ["集成电路", "人工智能"],
// img: bill4,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "汽车零部件25%关税实施规则",
// introductionDate: "2025年7月10日",
// status: "重大风险",
// tagList: ["集成电路", "人工智能"],
// img: bill5,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "汽车零部件25%关税实施规则",
// introductionDate: "2025年7月12日",
// status: "",
// tagList: ["集成电路", "人工智能"],
// img: bill6,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "小额豁免包裹政策调整",
// introductionDate: "2025年7月14日",
// status: "特别重大风险",
// tagList: ["集成电路", "人工智能"],
// img: bill7,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "NIH预算否决案",
// introductionDate: "2025年7月15日",
// status: "重大风险",
// tagList: ["集成电路", "人工智能"],
// img: bill8,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "得州国会选区重划法案",
// introductionDate: "2025年7月17日",
// status: "一般风险",
// tagList: ["集成电路", "人工智能"],
// img: bill9,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "美越贸易协议",
// introductionDate: "2025年7月24日",
// status: "",
// tagList: ["集成电路", "人工智能"],
// img: bill10,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "美越贸易协议",
// introductionDate: "2025年8月4日",
// status: "",
// tagList: ["集成电路", "人工智能"],
// img: bill11,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "美越贸易协议",
// introductionDate: "2025年8月8日",
// status: "特别重大风险",
// tagList: ["集成电路", "人工智能"],
// img: bill12,
// yuan: "众议院",
// dangpai: "共和党"
//
}
,
//
{
// billName: "美越贸易协议",
// introductionDate: "2025年8月8日",
// status: "特别重大风险",
// tagList: ["集成电路", "人工智能"],
// img: bill12,
// yuan: "众议院",
// dangpai: "共和党"
//
}
// ]);
// 当前展示法案列表
// const curBillList = computed(() =>
{
// const startIndex = (currentPage.value - 1) * 12;
// const endIndex = startIndex + 12;
// return billList.value.slice(startIndex, endIndex);
//
}
);
const
box7selectetedTime
=
ref
(
"2025"
);
const
box7selectetedTime
=
ref
(
"2025"
);
const
box7YearList
=
ref
([
const
box7YearList
=
ref
([
...
...
src/views/bill/billLayout/index.vue
浏览文件 @
486b8d7c
...
@@ -39,11 +39,6 @@
...
@@ -39,11 +39,6 @@
<div
class=
"name"
>
{{
billInfoGlobal
.
tarName
}}
</div>
<div
class=
"name"
>
{{
billInfoGlobal
.
tarName
}}
</div>
</div>
</div>
<div
class=
"right-box-bottom"
>
<div
class=
"right-box-bottom"
>
<!--
<el-button
type=
"plain"
size=
"large"
icon=
"Search"
@
click=
"handleSwitchActiveName('法案原文')"
>
法案原文
</el-button
>
<el-button
type=
"primary"
size=
"large"
icon=
"EditPen"
>
分析报告
</el-button>
-->
<div
class=
"btn1"
@
click=
"handleSwitchActiveName('法案原文')"
>
<div
class=
"btn1"
@
click=
"handleSwitchActiveName('法案原文')"
>
<div
class=
"icon"
>
<div
class=
"icon"
>
<img
src=
"./assets/icons/btn-icon1.png"
alt=
""
/>
<img
src=
"./assets/icons/btn-icon1.png"
alt=
""
/>
...
@@ -85,21 +80,21 @@
...
@@ -85,21 +80,21 @@
<div
class=
"report-main"
>
<div
class=
"report-main"
>
<div
class=
"report-header"
>
<div
class=
"report-header"
>
<div
class=
"report-header-left"
>
<div
class=
"report-header-left"
>
<div
class=
"text"
>
法案版本:
</div>
<
!--
<
div
class=
"text"
>
法案版本:
</div>
<div
class=
"select-box"
>
<div
class=
"select-box"
>
<el-select
v-model=
"curBill"
placeholder=
"选择法案"
style=
"width: 240px"
>
<el-select
v-model=
"curBill"
placeholder=
"选择法案"
style=
"width: 240px"
>
<el-option
v-for=
"item in billList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
<el-option
v-for=
"item in billList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-select>
</div>
</div>
-->
</div>
</div>
<div
class=
"report-header-right"
>
<div
class=
"report-header-right"
>
<div
class=
"btn"
>
<
!--
<
div
class=
"btn"
>
<div
class=
"icon"
>
<div
class=
"icon"
>
<img
src=
"./assets/images/report-header-icon1.png"
alt=
""
/>
<img
src=
"./assets/images/report-header-icon1.png"
alt=
""
/>
</div>
</div>
<div
class=
"text"
>
翻译
</div>
<div
class=
"text"
>
翻译
</div>
</div>
</div>
-->
<div
class=
"btn"
>
<
!--
<
div
class=
"btn"
>
<div
class=
"icon"
>
<div
class=
"icon"
>
<img
src=
"./assets/images/report-header-icon2.png"
alt=
""
/>
<img
src=
"./assets/images/report-header-icon2.png"
alt=
""
/>
</div>
</div>
...
@@ -116,16 +111,17 @@
...
@@ -116,16 +111,17 @@
<img
src=
"./assets/images/report-header-icon4.png"
alt=
""
/>
<img
src=
"./assets/images/report-header-icon4.png"
alt=
""
/>
</div>
</div>
<div
class=
"text"
>
查找
</div>
<div
class=
"text"
>
查找
</div>
</div>
</div>
-->
</div>
</div>
</div>
</div>
<div
class=
"report-content"
>
<div
class=
"report-content"
>
<div
class=
"content-left"
>
<div
class=
"content-left"
>
<img
src=
"./assets/images/report1.png"
alt=
""
/>
<iframe
v-if=
"billFullText"
:src=
"billFullText"
width=
"100%"
height=
"100%"
frameborder=
"0"
></iframe>
<!--
<img
v-else
src=
"./assets/images/report1.png"
alt=
""
/>
-->
</div>
</div>
<div
class=
"content-right"
>
<
!--
<
div
class=
"content-right"
>
<img
src=
"./assets/images/report2.png"
alt=
""
/>
<img
src=
"./assets/images/report2.png"
alt=
""
/>
</div>
</div>
-->
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -135,7 +131,10 @@
...
@@ -135,7 +131,10 @@
<
script
setup
>
<
script
setup
>
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
ref
,
onMounted
}
from
"vue"
;
import
router
from
"@/router"
;
import
router
from
"@/router"
;
import
{
getBillInfoGlobal
}
from
"@/api/bill"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
getBillInfoGlobal
,
getBillFullText
}
from
"@/api/bill"
;
const
route
=
useRoute
();
import
icon1
from
"./assets/icons/icon1.png"
;
import
icon1
from
"./assets/icons/icon1.png"
;
import
icon1Active
from
"./assets/icons/icon1_active.png"
;
import
icon1Active
from
"./assets/icons/icon1_active.png"
;
...
@@ -147,13 +146,28 @@ import icon4 from "./assets/icons/icon4.png";
...
@@ -147,13 +146,28 @@ import icon4 from "./assets/icons/icon4.png";
import
icon4Active
from
"./assets/icons/icon4_active.png"
;
import
icon4Active
from
"./assets/icons/icon4_active.png"
;
import
USALogo
from
"./assets/images/USA-logo.png"
;
import
USALogo
from
"./assets/images/USA-logo.png"
;
// 法案原文
const
billFullText
=
ref
(
""
);
const
getBillFullTextFn
=
async
()
=>
{
const
res
=
await
getBillFullText
({
id
:
route
.
query
.
billId
});
if
(
res
.
code
===
200
)
{
console
.
log
(
"法案全文"
,
res
);
if
(
res
.
data
)
{
billFullText
.
value
=
typeof
res
.
data
===
"string"
?
res
.
data
.
trim
()
:
res
.
data
;
}
}
};
const
activeName
=
ref
(
"分析报告"
);
const
activeName
=
ref
(
"分析报告"
);
// 获取法案全局信息
// 获取法案全局信息
const
billInfoGlobal
=
ref
({});
const
billInfoGlobal
=
ref
({});
const
getBillInfoGlobalFn
=
async
()
=>
{
const
getBillInfoGlobalFn
=
async
()
=>
{
const
res
=
await
getBillInfoGlobal
({
const
res
=
await
getBillInfoGlobal
({
id
:
window
.
sessionStorage
.
getItem
(
"billId"
)
id
:
route
.
query
.
billId
});
});
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
console
.
log
(
"法案全局信息"
,
res
);
console
.
log
(
"法案全局信息"
,
res
);
...
@@ -165,6 +179,9 @@ const getBillInfoGlobalFn = async () => {
...
@@ -165,6 +179,9 @@ const getBillInfoGlobalFn = async () => {
const
handleSwitchActiveName
=
name
=>
{
const
handleSwitchActiveName
=
name
=>
{
activeName
.
value
=
name
;
activeName
.
value
=
name
;
if
(
name
===
"法案原文"
)
{
getBillFullTextFn
();
}
};
};
const
curBill
=
ref
(
"公法(2025年7月4日)"
);
const
curBill
=
ref
(
"公法(2025年7月4日)"
);
...
@@ -212,7 +229,12 @@ const activeTitle = ref("法案概况");
...
@@ -212,7 +229,12 @@ const activeTitle = ref("法案概况");
const
handleClickMainHeaderBtn
=
item
=>
{
const
handleClickMainHeaderBtn
=
item
=>
{
activeTitle
.
value
=
item
.
name
;
activeTitle
.
value
=
item
.
name
;
window
.
sessionStorage
.
setItem
(
"activeTitle"
,
activeTitle
.
value
);
window
.
sessionStorage
.
setItem
(
"activeTitle"
,
activeTitle
.
value
);
router
.
push
(
item
.
path
);
router
.
push
({
path
:
item
.
path
,
query
:
{
billId
:
route
.
query
.
billId
}
});
};
};
onMounted
(()
=>
{
onMounted
(()
=>
{
...
@@ -499,6 +521,7 @@ onMounted(() => {
...
@@ -499,6 +521,7 @@ onMounted(() => {
justify-content
:
flex-end
;
justify-content
:
flex-end
;
gap
:
8px
;
gap
:
8px
;
.btn1
{
.btn1
{
cursor
:
pointer
;
width
:
120px
;
width
:
120px
;
height
:
36px
;
height
:
36px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
...
@@ -559,6 +582,7 @@ onMounted(() => {
...
@@ -559,6 +582,7 @@ onMounted(() => {
}
}
}
}
.btn3
{
.btn3
{
cursor
:
pointer
;
width
:
120px
;
width
:
120px
;
height
:
36px
;
height
:
36px
;
border-radius
:
6px
;
border-radius
:
6px
;
...
@@ -715,10 +739,12 @@ onMounted(() => {
...
@@ -715,10 +739,12 @@ onMounted(() => {
}
}
}
}
.report-content
{
.report-content
{
width
:
100%
;
display
:
flex
;
display
:
flex
;
margin-top
:
35px
;
margin-top
:
35px
;
.content-left
{
.content-left
{
width
:
680px
;
// width: 680px;
width
:
100%
;
height
:
786px
;
height
:
786px
;
// background: #eee;
// background: #eee;
// overflow-y: auto;
// overflow-y: auto;
...
...
src/views/bill/commonPrompt/index.vue
浏览文件 @
486b8d7c
...
@@ -33,6 +33,7 @@ defineProps({
...
@@ -33,6 +33,7 @@ defineProps({
<
style
>
<
style
>
.common-prompt-popper.el-popper
{
.common-prompt-popper.el-popper
{
z-index
:
10000000
!important
;
padding
:
8px
16px
!important
;
padding
:
8px
16px
!important
;
border-radius
:
10px
!important
;
border-radius
:
10px
!important
;
background-color
:
rgb
(
59
,
65
,
75
)
!important
;
background-color
:
rgb
(
59
,
65
,
75
)
!important
;
...
...
src/views/bill/deepDig/index.vue
浏览文件 @
486b8d7c
...
@@ -24,8 +24,11 @@
...
@@ -24,8 +24,11 @@
<
script
setup
>
<
script
setup
>
import
{
onMounted
,
ref
}
from
"vue"
;
import
{
onMounted
,
ref
}
from
"vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
router
from
"@/router"
;
import
router
from
"@/router"
;
const
route
=
useRoute
();
const
siderBtnList
=
ref
([
const
siderBtnList
=
ref
([
{
{
name
:
"流程概要"
,
name
:
"流程概要"
,
...
@@ -49,7 +52,12 @@ const handleClickLeftSiderBtn = (item,index) => {
...
@@ -49,7 +52,12 @@ const handleClickLeftSiderBtn = (item,index) => {
item
.
isActive
=
false
item
.
isActive
=
false
})
})
siderBtnList
.
value
[
index
].
isActive
=
true
siderBtnList
.
value
[
index
].
isActive
=
true
router
.
push
(
item
.
path
);
router
.
push
({
path
:
item
.
path
,
query
:
{
billId
:
route
.
query
.
billId
}
});
};
};
</
script
>
</
script
>
...
...
src/views/bill/deepDig/poliContribution/index.vue
浏览文件 @
486b8d7c
...
@@ -861,6 +861,7 @@ onMounted(() => {
...
@@ -861,6 +861,7 @@ onMounted(() => {
img
{
img
{
width
:
100
%
;
width
:
100
%
;
height
:
100
%
;
height
:
100
%
;
border
-
radius
:
50
%
;
}
}
}
}
.
item
-
center
{
.
item
-
center
{
...
...
src/views/bill/deepDig/processAnalysis/index.vue
浏览文件 @
486b8d7c
...
@@ -1195,8 +1195,9 @@ onMounted(async () => {
...
@@ -1195,8 +1195,9 @@ onMounted(async () => {
font
-
size
:
14
px
;
font
-
size
:
14
px
;
font
-
weight
:
600
;
font
-
weight
:
600
;
line
-
height
:
22
px
;
line
-
height
:
22
px
;
padding
:
0
20
px
;
.
box3
-
main
-
center
-
header
-
box1
{
.
box3
-
main
-
center
-
header
-
box1
{
width
:
43
0
px
;
width
:
37
0
px
;
text
-
align
:
center
;
text
-
align
:
center
;
}
}
.
box3
-
main
-
center
-
header
-
box2
{
.
box3
-
main
-
center
-
header
-
box2
{
...
@@ -1204,7 +1205,7 @@ onMounted(async () => {
...
@@ -1204,7 +1205,7 @@ onMounted(async () => {
text
-
align
:
center
;
text
-
align
:
center
;
}
}
.
box3
-
main
-
center
-
header
-
box3
{
.
box3
-
main
-
center
-
header
-
box3
{
width
:
7
7
px
;
width
:
7
5
px
;
text
-
align
:
center
;
text
-
align
:
center
;
}
}
.
box3
-
main
-
center
-
header
-
box4
{
.
box3
-
main
-
center
-
header
-
box4
{
...
@@ -1212,11 +1213,11 @@ onMounted(async () => {
...
@@ -1212,11 +1213,11 @@ onMounted(async () => {
text
-
align
:
center
;
text
-
align
:
center
;
}
}
.
box3
-
main
-
center
-
header
-
box5
{
.
box3
-
main
-
center
-
header
-
box5
{
width
:
8
0
px
;
width
:
10
0
px
;
text
-
align
:
center
;
text
-
align
:
center
;
}
}
.
box3
-
main
-
center
-
header
-
box6
{
.
box3
-
main
-
center
-
header
-
box6
{
width
:
126
px
;
width
:
90
px
;
text
-
align
:
center
;
text
-
align
:
center
;
}
}
}
}
...
@@ -1236,7 +1237,7 @@ onMounted(async () => {
...
@@ -1236,7 +1237,7 @@ onMounted(async () => {
display
:
flex
;
display
:
flex
;
height
:
45
px
;
height
:
45
px
;
.
item
-
box1
{
.
item
-
box1
{
width
:
40
0
px
;
width
:
37
0
px
;
display
:
flex
;
display
:
flex
;
.
box1
-
left
{
.
box1
-
left
{
width
:
130
px
;
width
:
130
px
;
...
@@ -1282,7 +1283,7 @@ onMounted(async () => {
...
@@ -1282,7 +1283,7 @@ onMounted(async () => {
border
-
radius
:
0
;
border
-
radius
:
0
;
}
}
:
deep
(.
el
-
progress
-
bar__outer
)
{
:
deep
(.
el
-
progress
-
bar__outer
)
{
background
:
rgba
(
22
,
119
,
255
,
0.
5
);
background
:
rgba
(
22
,
119
,
255
,
0.
1
);
border
-
radius
:
0
;
border
-
radius
:
0
;
}
}
}
}
...
@@ -1292,7 +1293,7 @@ onMounted(async () => {
...
@@ -1292,7 +1293,7 @@ onMounted(async () => {
border
-
radius
:
0
;
border
-
radius
:
0
;
}
}
:
deep
(.
el
-
progress
-
bar__outer
)
{
:
deep
(.
el
-
progress
-
bar__outer
)
{
background
:
rgba
(
255
,
172
,
77
,
0.
5
);
background
:
rgba
(
255
,
172
,
77
,
0.
1
);
border
-
radius
:
0
;
border
-
radius
:
0
;
}
}
}
}
...
@@ -1322,7 +1323,7 @@ onMounted(async () => {
...
@@ -1322,7 +1323,7 @@ onMounted(async () => {
}
}
}
}
.
item
-
box3
{
.
item
-
box3
{
width
:
7
7
px
;
width
:
7
5
px
;
text
-
align
:
center
;
text
-
align
:
center
;
.
box3
-
1
{
.
box3
-
1
{
height
:
14
px
;
height
:
14
px
;
...
@@ -1368,7 +1369,7 @@ onMounted(async () => {
...
@@ -1368,7 +1369,7 @@ onMounted(async () => {
}
}
}
}
.
item
-
box5
{
.
item
-
box5
{
width
:
8
0
px
;
width
:
10
0
px
;
text
-
align
:
center
;
text
-
align
:
center
;
.
box5
-
1
{
.
box5
-
1
{
height
:
14
px
;
height
:
14
px
;
...
@@ -1389,12 +1390,12 @@ onMounted(async () => {
...
@@ -1389,12 +1390,12 @@ onMounted(async () => {
}
}
}
}
.
item
-
box6
{
.
item
-
box6
{
width
:
116
px
;
width
:
90
px
;
text
-
align
:
center
;
text
-
align
:
center
;
.
img
-
box
{
.
img
-
box
{
width
:
30
px
;
width
:
30
px
;
height
:
30
px
;
height
:
30
px
;
margin
-
left
:
5
0
px
;
margin
-
left
:
3
0
px
;
img
{
img
{
width
:
100
%
;
width
:
100
%
;
height
:
100
%
;
height
:
100
%
;
...
...
src/views/bill/deepDig/processOverview/index.vue
浏览文件 @
486b8d7c
...
@@ -156,9 +156,9 @@
...
@@ -156,9 +156,9 @@
</div>
</div>
<div
class=
"text"
>
{{
"变更条款"
}}
</div>
<div
class=
"text"
>
{{
"变更条款"
}}
</div>
</div>
</div>
<div
class=
"box4-right"
@
click=
"handleSwitchCompareDialog(true)"
>
<
!--
<
div
class=
"box4-right"
@
click=
"handleSwitchCompareDialog(true)"
>
{{
"条款对比 >"
}}
{{
"条款对比 >"
}}
</div>
</div>
-->
</div>
</div>
<div
class=
"dialog-box5"
>
<div
class=
"dialog-box5"
>
<div
class=
"box5-item"
v-for=
"(sub, subIndex) in currentDetailItem.fynrList"
:key=
"subIndex"
>
<div
class=
"box5-item"
v-for=
"(sub, subIndex) in currentDetailItem.fynrList"
:key=
"subIndex"
>
...
@@ -757,6 +757,7 @@ onMounted(() => {
...
@@ -757,6 +757,7 @@ onMounted(() => {
height
:
30px
;
height
:
30px
;
border-left
:
1px
solid
rgb
(
20
,
89
,
187
);
border-left
:
1px
solid
rgb
(
20
,
89
,
187
);
padding
:
0
10px
;
padding
:
0
10px
;
margin-bottom
:
8px
;
.item-title
{
.item-title
{
line-height
:
26px
;
line-height
:
26px
;
color
:
rgb
(
59
,
65
,
75
);
color
:
rgb
(
59
,
65
,
75
);
...
@@ -794,6 +795,7 @@ onMounted(() => {
...
@@ -794,6 +795,7 @@ onMounted(() => {
font-size
:
16px
;
font-size
:
16px
;
font-weight
:
400
;
font-weight
:
400
;
line-height
:
24px
;
line-height
:
24px
;
margin-bottom
:
4px
;
}
}
.item-main
{
.item-main
{
border-left
:
1px
solid
rgb
(
20
,
89
,
187
);
border-left
:
1px
solid
rgb
(
20
,
89
,
187
);
...
@@ -802,6 +804,7 @@ onMounted(() => {
...
@@ -802,6 +804,7 @@ onMounted(() => {
display
:
flex
;
display
:
flex
;
align-items
:
baseline
;
align-items
:
baseline
;
width
:
269px
;
width
:
269px
;
margin-bottom
:
4px
;
.icon
{
.icon
{
margin
:
9px
12px
;
margin
:
9px
12px
;
width
:
6px
;
width
:
6px
;
...
@@ -965,6 +968,7 @@ onMounted(() => {
...
@@ -965,6 +968,7 @@ onMounted(() => {
height
:
30px
;
height
:
30px
;
border-left
:
1px
solid
rgba
(
255
,
172
,
77
,
1
);
border-left
:
1px
solid
rgba
(
255
,
172
,
77
,
1
);
padding
:
5px
10px
;
padding
:
5px
10px
;
margin-top
:
8px
;
.item-title
{
.item-title
{
line-height
:
26px
;
line-height
:
26px
;
color
:
rgb
(
59
,
65
,
75
);
color
:
rgb
(
59
,
65
,
75
);
...
@@ -1002,6 +1006,7 @@ onMounted(() => {
...
@@ -1002,6 +1006,7 @@ onMounted(() => {
font-size
:
16px
;
font-size
:
16px
;
font-weight
:
400
;
font-weight
:
400
;
line-height
:
24px
;
line-height
:
24px
;
margin-top
:
8px
;
}
}
.item-main
{
.item-main
{
border-left
:
1px
solid
rgba
(
255
,
172
,
77
,
1
);
border-left
:
1px
solid
rgba
(
255
,
172
,
77
,
1
);
...
@@ -1010,6 +1015,7 @@ onMounted(() => {
...
@@ -1010,6 +1015,7 @@ onMounted(() => {
display
:
flex
;
display
:
flex
;
align-items
:
baseline
;
align-items
:
baseline
;
width
:
269px
;
width
:
269px
;
margin-top
:
4px
;
.icon
{
.icon
{
margin
:
9px
12px
;
margin
:
9px
12px
;
width
:
6px
;
width
:
6px
;
...
@@ -1339,23 +1345,26 @@ onMounted(() => {
...
@@ -1339,23 +1345,26 @@ onMounted(() => {
margin-left
:
23px
;
margin-left
:
23px
;
width
:
438px
;
width
:
438px
;
.box5-item
{
.box5-item
{
height
:
30px
;
min-
height
:
30px
;
color
:
rgba
(
132
,
136
,
142
,
1
);
color
:
rgba
(
132
,
136
,
142
,
1
);
font-family
:
Microsoft
YaHei
;
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-size
:
16px
;
font-weight
:
400
;
font-weight
:
400
;
line-height
:
30px
;
line-height
:
1
.5
;
display
:
flex
;
display
:
flex
;
margin-bottom
:
8px
;
.icon
{
.icon
{
flex-shrink
:
0
;
margin-left
:
15px
;
margin-left
:
15px
;
width
:
6px
;
width
:
6px
;
height
:
6px
;
height
:
6px
;
margin-top
:
12
px
;
margin-top
:
9
px
;
border-radius
:
3px
;
border-radius
:
3px
;
background
:
#84888e
;
background
:
#84888e
;
}
}
.text
{
.text
{
margin-left
:
10px
;
margin-left
:
10px
;
word-break
:
break-all
;
}
}
}
}
}
}
...
...
src/views/bill/index.vue
浏览文件 @
486b8d7c
...
@@ -86,8 +86,11 @@
...
@@ -86,8 +86,11 @@
<
script
setup
>
<
script
setup
>
import
{
onMounted
,
ref
}
from
"vue"
;
import
{
onMounted
,
ref
}
from
"vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
router
from
'@/router'
import
router
from
'@/router'
const
route
=
useRoute
();
const
siderBtnList
=
ref
([
const
siderBtnList
=
ref
([
{
{
name
:
'法案简介'
,
name
:
'法案简介'
,
...
@@ -106,7 +109,12 @@ const siderBtnList = ref([
...
@@ -106,7 +109,12 @@ const siderBtnList = ref([
const
siderBtnActive
=
ref
(
"法案简介"
);
const
siderBtnActive
=
ref
(
"法案简介"
);
const
handleClickLeftSiderBtn
=
(
item
)
=>
{
const
handleClickLeftSiderBtn
=
(
item
)
=>
{
siderBtnActive
.
value
=
item
.
name
siderBtnActive
.
value
=
item
.
name
router
.
push
(
item
.
path
)
router
.
push
({
path
:
item
.
path
,
query
:
{
billId
:
route
.
query
.
billId
}
})
}
}
const
progressList
=
ref
([
const
progressList
=
ref
([
{
{
...
...
src/views/bill/influence/index.vue
浏览文件 @
486b8d7c
...
@@ -44,7 +44,12 @@ const handleClickLeftSiderBtn = (item,index) => {
...
@@ -44,7 +44,12 @@ const handleClickLeftSiderBtn = (item,index) => {
item
.
isActive
=
false
item
.
isActive
=
false
})
})
siderBtnList
.
value
[
index
].
isActive
=
true
siderBtnList
.
value
[
index
].
isActive
=
true
router
.
push
(
item
.
path
);
router
.
push
({
path
:
item
.
path
,
query
:
{
billId
:
route
.
query
.
billId
}
});
};
};
</
script
>
</
script
>
...
...
src/views/bill/influence/industry/index.vue
浏览文件 @
486b8d7c
...
@@ -179,7 +179,9 @@
...
@@ -179,7 +179,9 @@
<!--
<
img
:
src
=
"uncheckIcon"
alt
=
""
>
-->
<!--
<
img
:
src
=
"uncheckIcon"
alt
=
""
>
-->
<
img
:
src
=
"checkedIcon"
alt
=
""
/>
<
img
:
src
=
"checkedIcon"
alt
=
""
/>
<
/div
>
<
/div
>
<
div
class
=
"item-right"
>
{{
val
}}
<
/div
>
<
div
class
=
"item-right"
>
<
CommonPrompt
:
content
=
"val"
>
{{
val
}}
<
/CommonPrompt
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
...
@@ -209,7 +211,10 @@
...
@@ -209,7 +211,10 @@
<
script
setup
>
<
script
setup
>
import
{
ref
,
onMounted
,
nextTick
,
computed
}
from
"vue"
;
import
{
ref
,
onMounted
,
nextTick
,
computed
}
from
"vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
*
as
echarts
from
"echarts"
;
import
*
as
echarts
from
"echarts"
;
const
route
=
useRoute
();
import
{
getCompanyList
,
getIndustryHyly
,
getHylyList
,
getCompanyDetail
}
from
"@/api/influence"
;
import
{
getCompanyList
,
getIndustryHyly
,
getHylyList
,
getCompanyDetail
}
from
"@/api/influence"
;
import
getBarChart
from
"./utils/barChart"
;
import
getBarChart
from
"./utils/barChart"
;
import
getLineChart
from
"./utils/lineChart"
;
import
getLineChart
from
"./utils/lineChart"
;
...
@@ -229,6 +234,7 @@ import checkedIcon from "./assets/images/checked.png";
...
@@ -229,6 +234,7 @@ import checkedIcon from "./assets/images/checked.png";
import
closeIcon
from
"./assets/images/close.png"
;
import
closeIcon
from
"./assets/images/close.png"
;
import
Fishbone
from
"./components/fishbone.vue"
;
import
Fishbone
from
"./components/fishbone.vue"
;
import
CommonPrompt
from
"../../commonPrompt/index.vue"
;
import
CompanyImg
from
"./assets/images/symbol.png"
;
import
CompanyImg
from
"./assets/images/symbol.png"
;
...
@@ -1127,9 +1133,6 @@ onMounted(async () => {
...
@@ -1127,9 +1133,6 @@ onMounted(async () => {
font-size: 14px;
font-size: 14px;
font-weight: 400;
font-weight: 400;
line-height: 22px;
line-height: 22px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
}
}
}
...
...
src/views/bill/introdoction/index.vue
浏览文件 @
486b8d7c
...
@@ -177,7 +177,7 @@
...
@@ -177,7 +177,7 @@
<
/div> --
>
<
/div> --
>
<
div
class
=
"info-box"
>
<
div
class
=
"info-box"
>
<
div
class
=
"info-left"
>
<
div
class
=
"info-left"
>
<
img
:
src
=
"defaultAvatar"
alt
=
""
/>
<
img
:
src
=
"defaultAvatar"
alt
=
""
@
click
=
"handleClickAvatar(curPerson.id)"
/>
<
div
class
=
"usr-icon1"
>
<
div
class
=
"usr-icon1"
>
<
img
src
=
"./assets/images/usr-icon1.png"
alt
=
""
/>
<
img
src
=
"./assets/images/usr-icon1.png"
alt
=
""
/>
<
/div
>
<
/div
>
...
@@ -267,7 +267,7 @@
...
@@ -267,7 +267,7 @@
<
div
class
=
"inner-left"
>
<
div
class
=
"inner-left"
>
<
div
class
=
"info-box"
>
<
div
class
=
"info-box"
>
<
div
class
=
"info-top"
>
<
div
class
=
"info-top"
>
<
img
src
=
"./assets/images/usr1.png
"
alt
=
""
/>
<
img
:
src
=
"defaultAvatar
"
alt
=
""
/>
<
div
class
=
"usr-icon1"
>
<
div
class
=
"usr-icon1"
>
<
img
src
=
"./assets/images/usr-icon1.png"
alt
=
""
/>
<
img
src
=
"./assets/images/usr-icon1.png"
alt
=
""
/>
<
/div
>
<
/div
>
...
@@ -305,7 +305,7 @@
...
@@ -305,7 +305,7 @@
status2: tag.status === 2,
status2: tag.status === 2,
status3: tag.status === 3
status3: tag.status === 3
}
"
}
"
v
-
for
=
"(tag, index) in tagList"
v
-
for
=
"(tag, index) in
curPerson.
tagList"
:
key
=
"index"
:
key
=
"index"
>
>
{{
tag
.
title
}}
{{
tag
.
title
}}
...
@@ -335,30 +335,10 @@
...
@@ -335,30 +335,10 @@
{{
item
.
newsContent
}}
{{
item
.
newsContent
}}
<
/div
>
<
/div
>
<
div
class
=
"pic"
>
<
div
class
=
"pic"
>
<
img
src
=
"./assets/imgs/img1.png
"
alt
=
""
/>
<
img
:
src
=
"defaultNew
"
alt
=
""
/>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/el-timeline-item
>
<
/el-timeline-item
>
<!--
<
el
-
timeline
-
item
timestamp
=
"2018/4/3"
placement
=
"top"
>
<
div
class
=
"timeline-content1"
>
<
div
class
=
"text"
>
当地时间周五,美国众议院预算委员会投票否决了共和党提出的党派性税收与支出法案,强硬派保守党人的持续反对导致法案推进受阻。为安抚委员会内的极右翼成员,共和党领袖正考虑对法案进行重大修改,包括将医疗补助的工作要求实施时间从原定的
2029
年提前,并立即取消无证移民
...
<
/div
>
<
div
class
=
"pic"
>
<
img
src
=
"./assets/imgs/img2.png"
alt
=
""
/>
<
/div
>
<
/div
>
<
/el-timeline-item
>
<
el
-
timeline
-
item
timestamp
=
"2018/4/2"
placement
=
"top"
>
<
div
class
=
"timeline-content1"
>
<
div
class
=
"text"
>
2025
年
2
月中旬,众议院预算委员会通过《
2025
财年预算决议》,特朗普的减税议程迈出第一步。决议要求:延长
2017
年特朗普首个任期内出台的减税条款,计划在未来十年减税
4.5
万亿美元,强制性支出需合计削减
2
万亿美元,部分支出需控制增幅,未来十年共削减政府开支
1.5
万亿
...
<
/div
>
<
div
class
=
"pic"
>
<
img
src
=
"./assets/imgs/img3.png"
alt
=
""
/>
<
/div
>
<
/div
>
<
/el-timeline-item> --
>
<
/el-timeline
>
<
/el-timeline
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
...
@@ -369,22 +349,41 @@
...
@@ -369,22 +349,41 @@
<
script
setup
>
<
script
setup
>
import
{
onMounted
,
ref
}
from
"vue"
;
import
{
onMounted
,
ref
}
from
"vue"
;
import
{
useRoute
,
useRouter
}
from
"vue-router"
;
import
WordCloudMap
from
"./WordCloudMap.vue"
;
import
WordCloudMap
from
"./WordCloudMap.vue"
;
import
STimeline
from
"./STimeline.vue"
;
import
STimeline
from
"./STimeline.vue"
;
import
{
getBillInfo
,
getBillPerson
,
getBillEvent
,
getBillDyqk
}
from
"@/api/bill"
;
import
{
getBillInfo
,
getBillPerson
,
getBillEvent
,
getBillDyqk
}
from
"@/api/bill"
;
import
defaultAvatar
from
"../assets/images/default-icon1.png"
;
import
defaultAvatar
from
"../assets/images/default-icon1.png"
;
import
defaultNew
from
"../assets/images/default-icon-news.png"
;
const
box2BtnActive
=
ref
(
1
);
const
route
=
useRoute
();
const
handleClcikBox2Btn
=
index
=>
{
const
router
=
useRouter
();
box2BtnActive
.
value
=
index
;
}
;
const
box3BtnActive
=
ref
(
""
);
// 跳转到人物页面
const
handleClcikBox3Btn
=
(
name
,
index
)
=>
{
const
handleClickAvatar
=
id
=>
{
box3BtnActive
.
value
=
name
;
const
routeData
=
router
.
resolve
({
curPerson
.
value
=
personList
.
value
[
index
];
path
:
"/characterPage"
,
personEventList
.
value
=
personList
.
value
[
index
].
eventList
;
query
:
{
personId
:
id
}
}
);
window
.
open
(
routeData
.
href
,
"_blank"
);
}
;
}
;
// 获取URL地址里面的billId
const
billId
=
ref
(
route
.
query
.
billId
);
// console.log(billId.value)
// const box2BtnActive = ref(1);
// const handleClcikBox2Btn = index =>
{
// box2BtnActive.value = index;
//
}
;
// const box3BtnActive = ref("");
// const handleClcikBox3Btn = (name, index) =>
{
// box3BtnActive.value = name;
// curPerson.value = personList.value[index];
// personEventList.value = personList.value[index].eventList;
//
}
;
const
dialogBoxBtnActive
=
ref
(
0
);
const
dialogBoxBtnActive
=
ref
(
0
);
const
handleClcikDialogBoxBtn
=
index
=>
{
const
handleClcikDialogBoxBtn
=
index
=>
{
...
@@ -540,7 +539,7 @@ const basicInfo = ref({});
...
@@ -540,7 +539,7 @@ const basicInfo = ref({});
const
handleGetBasicInfo
=
async
()
=>
{
const
handleGetBasicInfo
=
async
()
=>
{
const
params
=
{
const
params
=
{
id
:
window
.
sessionStorage
.
getItem
(
"billId"
)
id
:
billId
.
value
}
;
}
;
try
{
try
{
const
res
=
await
getBillInfo
(
params
);
const
res
=
await
getBillInfo
(
params
);
...
@@ -579,21 +578,13 @@ const warningNum = ref(0);
...
@@ -579,21 +578,13 @@ const warningNum = ref(0);
// 法案进展 获取前期进展 --也是提出人左上角列表
// 法案进展 获取前期进展 --也是提出人左上角列表
const
handleGetBillDyqk
=
async
()
=>
{
const
handleGetBillDyqk
=
async
()
=>
{
const
params
=
{
const
params
=
{
id
:
window
.
sessionStorage
.
getItem
(
"billId"
)
id
:
billId
.
value
}
;
}
;
try
{
try
{
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 =>
{
// return
{
// label: item.actionTitle,
// value: item.actionTitle,
// id: item.id
//
}
;
//
}
);
// selectValue.value = faList.value[0];
// handleGetBillPerson(faList.value[0].id);
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
error
);
console
.
error
(
error
);
}
}
...
@@ -605,35 +596,20 @@ const curPerson = ref({});
...
@@ -605,35 +596,20 @@ const curPerson = ref({});
// 人物动态
// 人物动态
const
personEventList
=
ref
([]);
const
personEventList
=
ref
([]);
// 提出人 --动议id
// const handleGetBillPerson = async id =>
{
// const params =
{
// id: id
//
}
;
// try
{
// const res = await getBillPerson(params);
// console.log("提出人", res);
// personList.value = res.data;
// box3BtnActive.value = res.data.length ? res.data[0].name : "";
// curPerson.value = res.data.length ? res.data[0] :
{
}
;
// personEventList.value = res.data.length ? res.data[0].eventList : [];
//
}
catch
(
error
)
{
// console.error(error);
//
}
//
}
;
// 法案提出人
// 法案提出人
const
handleGetBillPerson
=
async
()
=>
{
const
handleGetBillPerson
=
async
()
=>
{
const
params
=
{
const
params
=
{
billId
:
window
.
sessionStorage
.
getItem
(
"billId"
)
billId
:
billId
.
value
}
;
}
;
try
{
try
{
const
res
=
await
getBillPerson
(
params
);
const
res
=
await
getBillPerson
(
params
);
console
.
log
(
"提出人"
,
res
);
console
.
log
(
"提出人"
,
res
);
personList
.
value
=
res
.
data
;
//
personList.value = res.data;
box3BtnActive
.
value
=
res
.
data
.
length
?
res
.
data
[
0
].
name
:
""
;
//
box3BtnActive.value = res.data.length ? res.data[0].name : "";
curPerson
.
value
=
res
.
data
.
length
?
res
.
data
[
0
]
:
{
}
;
curPerson
.
value
=
res
.
data
.
length
?
res
.
data
[
0
]
:
{
}
;
personEventList
.
value
=
res
.
data
.
length
?
res
.
data
[
0
].
eventList
:
[];
//
personEventList.value = res.data.length ? res.data[0].eventList : [];
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
error
);
console
.
error
(
error
);
}
}
...
...
src/views/bill/template/index.vue
浏览文件 @
486b8d7c
...
@@ -160,10 +160,13 @@
...
@@ -160,10 +160,13 @@
<
script
setup
>
<
script
setup
>
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
*
as
echarts
from
"echarts"
;
import
*
as
echarts
from
"echarts"
;
import
getPieChart
from
"./utils/piechart"
;
import
getPieChart
from
"./utils/piechart"
;
import
{
getBillContentId
,
getBillContentTk
,
getBillContentXzfs
,
getBillHyly
}
from
"@/api/bill"
;
import
{
getBillContentId
,
getBillContentTk
,
getBillContentXzfs
,
getBillHyly
}
from
"@/api/bill"
;
const
route
=
useRoute
();
const
curBill
=
ref
(
""
);
const
curBill
=
ref
(
""
);
const
curBillId
=
ref
(
null
);
const
curBillId
=
ref
(
null
);
const
checkedValue
=
ref
(
false
);
const
checkedValue
=
ref
(
false
);
...
@@ -173,172 +176,7 @@ const currentPage = ref(1);
...
@@ -173,172 +176,7 @@ const currentPage = ref(1);
const
pageSize
=
ref
(
10
);
const
pageSize
=
ref
(
10
);
const
total
=
ref
(
0
);
const
total
=
ref
(
0
);
const
mainTermsList
=
ref
([
const
mainTermsList
=
ref
([]);
{
id
:
1
,
title
:
"废除价值800美元以下进口包裹的免税政策,改为征收30%关税或每件25-50美元费用。"
,
header
:
"第51255条"
,
headerEn
:
"Sec.51225"
,
content
:
"Elimination of De Minimis Rule for imports valued below $800."
,
tags
:
[
{
name
:
"关税"
,
status
:
2
}
,
{
name
:
"跨境电商"
,
status
:
1
}
]
}
,
{
id
:
2
,
title
:
"对所有进口商品加征10%关税。"
,
header
:
"第51255条"
,
headerEn
:
"Sec.51225"
,
content
:
"Imposing a 10% baseline tariff on all imported goods."
,
tags
:
[
{
name
:
"关税"
,
status
:
2
}
]
}
,
{
id
:
3
,
title
:
"第50404条:若美企与中企签订超100万美元技术许可协议,将丧失政府补贴资格。"
,
header
:
"第51255条"
,
headerEn
:
"Sec.51225"
,
content
:
"Sec. 50404. If the taxpayer has entered into any technology licensing agreement with a FEOC exceeding $1,000,000..."
,
tags
:
[
{
name
:
"技术封锁"
,
status
:
6
}
]
}
,
{
id
:
4
,
title
:
"第4502条:2025年9月30日后终止电动汽车消费者税收抵免。"
,
header
:
"第51255条"
,
headerEn
:
"Sec.51225"
,
content
:
"Sec.4502. Termination of electric vehicle consumer tax credits after September 30, 2025."
,
tags
:
[
{
name
:
"税收"
,
status
:
2
}
,
{
name
:
"新能源"
,
status
:
1
}
]
}
,
{
id
:
5
,
title
:
"2026年1月1日起对使用进口组件的光伏项目征收15%消费税。"
,
header
:
"第51255条"
,
headerEn
:
"Sec.51225"
,
content
:
"Imposition of 15% excise tax on solar projects using imported components after January 1, 2026."
,
tags
:
[
{
name
:
"供应链打压"
,
status
:
3
}
,
{
name
:
"光伏"
,
status
:
1
}
]
}
,
{
id
:
6
,
title
:
"若风电/光伏项目中受关注外国实体(FEOC)组件成本占比超标(如2026年太阳能为40%),则取消税收抵免。"
,
header
:
"第51255条"
,
headerEn
:
"Sec.51225"
,
content
:
"Prohibiting tax credits for wind/solar projects if components from Foreign Entities of Concern (FEOC) exceed cost ratios ..."
,
tags
:
[
{
name
:
"供应链打压"
,
status
:
3
}
,
{
name
:
"光伏"
,
status
:
1
}
]
}
,
{
id
:
7
,
title
:
"第50401条:2025年起,若电池中关键矿物由受关注外国实体(FEOC)提取、加工或回收,则该车辆无法享受税收抵免。"
,
header
:
"第51255条"
,
headerEn
:
"Sec.51225"
,
content
:
"Sec. 50401. No tax credit shall be allowed for any vehicle placed in service after December 31, 2024, if any of the..."
,
tags
:
[
{
name
:
"供应链打压"
,
status
:
3
}
,
{
name
:
"新能源"
,
status
:
1
}
]
}
,
{
id
:
8
,
title
:
"Sec. 50401. No tax credit shall be allowed for any vehicle placed in service after December 31, 2024, if any of the..."
,
header
:
"第51255条"
,
headerEn
:
"Sec.51225"
,
content
:
"Sec. 50405. No credit shall be allowed under this chapter to any entity in which a foreign adversary holds 25% or more ..."
,
tags
:
[
{
name
:
"新能源"
,
status
:
1
}
]
}
,
{
id
:
9
,
title
:
"第4501条:芯片企业税收抵免提至35%,但禁止在中国大陆扩大先进制程生产。"
,
header
:
"第51255条"
,
headerEn
:
"Sec.51225"
,
content
:
"Sec. 4501. The advanced manufacturing investment credit under section 48D shall be increased to 35%, provided that ..."
,
tags
:
[
{
name
:
"技术封锁"
,
status
:
5
}
,
{
name
:
"半导体"
,
status
:
4
}
]
}
,
{
id
:
10
,
title
:
"第20013条:授权拨款5亿美元用于向台湾提供防御物资、训练及其他服务。"
,
content
:
"Sec. 20013. $500,000,000 is authorized to be appropriated for the provision of defense articles, training, and other ..."
,
header
:
"第51255条"
,
headerEn
:
"Sec.51225"
,
tags
:
[
{
name
:
"拨款"
,
status
:
2
}
,
{
name
:
"军工"
,
status
:
6
}
]
}
]);
const
btnActiveIndex
=
ref
(
1
);
const
btnActiveIndex
=
ref
(
1
);
const
handleSelectBtn
=
index
=>
{
const
handleSelectBtn
=
index
=>
{
btnActiveIndex
.
value
=
index
;
btnActiveIndex
.
value
=
index
;
...
@@ -382,13 +220,15 @@ const handleChangeBill = val => {
...
@@ -382,13 +220,15 @@ const handleChangeBill = val => {
curBillId
.
value
=
item
.
id
;
curBillId
.
value
=
item
.
id
;
currentPage
.
value
=
1
;
currentPage
.
value
=
1
;
handleGetBillContentTk
(
checkedValue
.
value
?
"Y"
:
"N"
);
handleGetBillContentTk
(
checkedValue
.
value
?
"Y"
:
"N"
);
handleGetBillContentXzfs
();
handleGetBillHyly
();
}
}
}
;
}
;
// 获取法案id列表
// 获取法案id列表
const
handleGetBillList
=
async
()
=>
{
const
handleGetBillList
=
async
()
=>
{
const
params
=
{
const
params
=
{
id
:
window
.
sessionStorage
.
getItem
(
"billId"
)
id
:
route
.
query
.
billId
}
;
}
;
try
{
try
{
const
res
=
await
getBillContentId
(
params
);
const
res
=
await
getBillContentId
(
params
);
...
@@ -410,6 +250,8 @@ const handleGetBillList = async () => {
...
@@ -410,6 +250,8 @@ const handleGetBillList = async () => {
const
handleChangeCheckbox
=
val
=>
{
const
handleChangeCheckbox
=
val
=>
{
currentPage
.
value
=
1
;
currentPage
.
value
=
1
;
handleGetBillContentTk
(
val
?
"Y"
:
"N"
);
handleGetBillContentTk
(
val
?
"Y"
:
"N"
);
handleGetBillContentXzfs
();
handleGetBillHyly
();
}
;
}
;
const
handleCurrentChange
=
val
=>
{
const
handleCurrentChange
=
val
=>
{
...
@@ -420,56 +262,67 @@ const handleCurrentChange = val => {
...
@@ -420,56 +262,67 @@ const handleCurrentChange = val => {
// 根据原文ID获取条款列表
// 根据原文ID获取条款列表
const
handleGetBillContentTk
=
async
cRelated
=>
{
const
handleGetBillContentTk
=
async
cRelated
=>
{
const
params
=
{
const
params
=
{
bill
id
:
window
.
sessionStorage
.
getItem
(
"billId"
)
,
bill
Id
:
route
.
query
.
billId
,
id
:
curBill
.
value
,
id
:
curBill
.
value
,
cRelated
:
cRelated
,
cRelated
:
cRelated
,
currentPage
:
currentPage
.
value
-
1
,
pageSize
:
pageSize
.
value
,
pageSize
:
pageSiz
e
.
value
currentPage
:
currentPag
e
.
value
}
;
}
;
try
{
try
{
const
res
=
await
getBillContentTk
(
params
);
const
res
=
await
getBillContentTk
(
params
);
console
.
log
(
"条款内容"
,
res
);
console
.
log
(
"条款内容"
,
res
);
mainTermsList
.
value
=
res
.
data
.
content
.
map
(
item
=>
{
if
(
res
&&
res
.
data
)
{
// 处理 fynr
mainTermsList
.
value
=
(
res
.
data
.
content
||
[]).
map
(
item
=>
{
if
(
item
.
fynr
)
{
// 处理 fynr
const
matchComplex
=
item
.
fynr
.
match
(
/^
(?:
正文内容
[
::
]\s
*
)?[
“"
]?\s
*第
\s
*
([
0-9a-zA-Z
]
+
)\s
*
[
条节
][
::
\.\。]?[
”"
]?\s
*/
);
if
(
item
.
fynr
)
{
if
(
matchComplex
)
{
const
matchComplex
=
item
.
fynr
.
match
(
/^
(?:
正文内容
[
::
]\s
*
)?[
“"
]?\s
*第
\s
*
([
0-9a-zA-Z
]
+
)\s
*
[
条节
][
::
\.\。]?[
”"
]?\s
*/
);
// 匹配 "第xxx条"、"正文内容:第xxx条"、"“第xxx条" 等
if
(
matchComplex
)
{
if
(
!
item
.
tkxh
)
{
// 匹配 "第xxx条"、"正文内容:第xxx条"、"“第xxx条" 等
item
.
tkxh
=
matchComplex
[
1
];
if
(
!
item
.
tkxh
)
{
item
.
tkxh
=
matchComplex
[
1
];
}
item
.
fynr
=
item
.
fynr
.
replace
(
matchComplex
[
0
],
""
);
}
else
{
// 匹配 "xxx."
item
.
fynr
=
item
.
fynr
.
replace
(
/^
\d
+
\.\s
*/
,
""
);
}
}
item
.
fynr
=
item
.
fynr
.
replace
(
matchComplex
[
0
],
""
);
}
else
{
// 匹配 "xxx."
item
.
fynr
=
item
.
fynr
.
replace
(
/^
\d
+
\.\s
*/
,
""
);
}
}
}
// 处理 ywnr
// 处理 ywnr
if
(
item
.
ywnr
)
{
if
(
item
.
ywnr
)
{
const
matchSec
=
item
.
ywnr
.
match
(
/^
(?:
SEC
\.
|SECTION
)\s
*
([
0-9a-zA-Z
]
+
)[\.
:
]?\s
*/i
);
const
matchSec
=
item
.
ywnr
.
match
(
/^
(?:
SEC
\.
|SECTION
)\s
*
([
0-9a-zA-Z
]
+
)[\.
:
]?\s
*/i
);
if
(
matchSec
)
{
if
(
matchSec
)
{
if
(
!
item
.
tkxh
)
{
if
(
!
item
.
tkxh
)
{
item
.
tkxh
=
matchSec
[
1
];
item
.
tkxh
=
matchSec
[
1
];
}
item
.
ywnr
=
item
.
ywnr
.
replace
(
matchSec
[
0
],
""
);
}
else
{
item
.
ywnr
=
item
.
ywnr
.
replace
(
/^
\d
+
\.\s
*/
,
""
);
}
}
item
.
ywnr
=
item
.
ywnr
.
replace
(
matchSec
[
0
],
""
);
}
else
{
item
.
ywnr
=
item
.
ywnr
.
replace
(
/^
\d
+
\.\s
*/
,
""
);
}
}
}
// 处理 tkxh 末尾的点
// 处理 tkxh 末尾的点
if
(
item
.
tkxh
)
{
if
(
item
.
tkxh
)
{
item
.
tkxh
=
item
.
tkxh
.
replace
(
/
\.
$/
,
""
);
item
.
tkxh
=
item
.
tkxh
.
replace
(
/
\.
$/
,
""
);
}
}
return
item
;
return
item
;
}
);
}
);
total
.
value
=
res
.
data
.
totalElements
||
0
;
total
.
value
=
res
.
data
.
totalElements
;
}
else
{
}
catch
(
error
)
{
}
mainTermsList
.
value
=
[];
total
.
value
=
0
;
}
}
catch
(
error
)
{
console
.
error
(
"获取条款内容失败"
,
error
);
mainTermsList
.
value
=
[];
total
.
value
=
0
;
}
}
;
}
;
// 获取限制方式列表
// 获取限制方式列表
const
handleGetBillContentXzfs
=
async
()
=>
{
const
handleGetBillContentXzfs
=
async
()
=>
{
const
params
=
{
const
params
=
{
id
:
window
.
sessionStorage
.
getItem
(
"billId"
)
billId
:
route
.
query
.
billId
,
versionId
:
curBill
.
value
,
cRelated
:
checkedValue
.
value
?
"Y"
:
"N"
}
;
}
;
try
{
try
{
...
@@ -481,13 +334,17 @@ const handleGetBillContentXzfs = async () => {
...
@@ -481,13 +334,17 @@ const handleGetBillContentXzfs = async () => {
value
:
item
.
countTk
value
:
item
.
countTk
}
;
}
;
}
);
}
);
let
chart1
=
getPieChart
(
chart1Data
.
value
,
chart1ColorList
.
value
);
setChart
(
chart1
,
"chart1"
);
}
catch
(
error
)
{
}
}
catch
(
error
)
{
}
}
;
}
;
// 行业领域
// 行业领域
const
handleGetBillHyly
=
async
()
=>
{
const
handleGetBillHyly
=
async
()
=>
{
const
params
=
{
const
params
=
{
id
:
window
.
sessionStorage
.
getItem
(
"billId"
)
billId
:
route
.
query
.
billId
,
versionId
:
curBill
.
value
,
cRelated
:
checkedValue
.
value
?
"Y"
:
"N"
}
;
}
;
try
{
try
{
...
@@ -499,7 +356,6 @@ const handleGetBillHyly = async () => {
...
@@ -499,7 +356,6 @@ const handleGetBillHyly = async () => {
value
:
item
.
countTk
value
:
item
.
countTk
}
;
}
;
}
);
}
);
console
.
log
(
"chart2Data"
,
chart2Data
.
value
);
let
chart2
=
getPieChart
(
chart2Data
.
value
,
chart2ColorList
.
value
);
let
chart2
=
getPieChart
(
chart2Data
.
value
,
chart2ColorList
.
value
);
setChart
(
chart2
,
"chart2"
);
setChart
(
chart2
,
"chart2"
);
...
...
src/views/exportControl/components/news.vue
浏览文件 @
486b8d7c
...
@@ -6,7 +6,9 @@
...
@@ -6,7 +6,9 @@
</div>
</div>
<div
class=
"news-content"
>
<div
class=
"news-content"
>
<div
class=
"news-header"
>
<div
class=
"news-header"
>
<div
class=
"news-title"
>
{{
item
.
title
}}
</div>
<CommonPrompt
:content=
"item.title"
class=
"news-title-prompt"
>
<span
class=
"news-title"
>
{{
item
.
title
}}
</span>
</CommonPrompt>
<div
class=
"news-meta"
>
<div
class=
"news-meta"
>
<span
class=
"news-time"
>
{{
item
.
time
}}
</span>
·
<span
class=
"news-time"
>
{{
item
.
time
}}
</span>
·
<span
class=
"news-source"
>
{{
item
.
source
}}
</span>
<span
class=
"news-source"
>
{{
item
.
source
}}
</span>
...
@@ -100,6 +102,13 @@ const handleItemClick = item => {
...
@@ -100,6 +102,13 @@ const handleItemClick = item => {
justify-content
:
space-between
;
justify-content
:
space-between
;
align-items
:
flex-start
;
align-items
:
flex-start
;
margin-bottom
:
8px
;
margin-bottom
:
8px
;
overflow
:
hidden
;
}
.news-title-prompt
{
flex
:
1
;
min-width
:
0
;
margin-right
:
12px
;
}
}
.news-title
{
.news-title
{
...
@@ -108,11 +117,7 @@ const handleItemClick = item => {
...
@@ -108,11 +117,7 @@ const handleItemClick = item => {
font-weight
:
700
;
font-weight
:
700
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
line-height
:
24px
;
line-height
:
24px
;
flex
:
1
;
display
:
inline-block
;
margin-right
:
12px
;
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
}
.news-meta
{
.news-meta
{
...
...
src/views/exportControl/index.vue
浏览文件 @
486b8d7c
...
@@ -190,7 +190,7 @@
...
@@ -190,7 +190,7 @@
>
>
<
template
#
default
>
<
template
#
default
>
<div
class=
"box2-main"
>
<div
class=
"box2-main"
>
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
>
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
@
click=
"handleToRiskSignalDetail(item)"
>
<div
<div
class=
"item-left"
class=
"item-left"
:class=
"
{
:class=
"
{
...
@@ -202,7 +202,9 @@
...
@@ -202,7 +202,9 @@
</div>
</div>
<div
class=
"item-right"
>
<div
class=
"item-right"
>
<div
class=
"text"
>
<div
class=
"text"
>
{{
item
.
title
}}
<CommonPrompt
:content=
"item.title"
>
{{
item
.
title
}}
</CommonPrompt>
</div>
</div>
<div
class=
"time"
>
{{
item
.
time
}}
</div>
<div
class=
"time"
>
{{
item
.
time
}}
</div>
</div>
</div>
...
@@ -758,6 +760,18 @@ import {
...
@@ -758,6 +760,18 @@ import {
getExportControlList
getExportControlList
}
from
"@/api/exportControl"
;
}
from
"@/api/exportControl"
;
// 跳转到单项制裁页面
const
handleToRiskSignalDetail
=
item
=>
{
const
routeData
=
router
.
resolve
({
path
:
"/exportControl/singleSanction"
,
query
:
{
id
:
item
.
sanId
}
});
// 打开新页面
window
.
open
(
routeData
.
href
,
"_blank"
);
};
const
sanctionList
=
ref
([]);
const
sanctionList
=
ref
([]);
const
techOptions
=
[
const
techOptions
=
[
...
@@ -797,8 +811,8 @@ import { formatAnyDateToChinese } from "./utils";
...
@@ -797,8 +811,8 @@ import { formatAnyDateToChinese } from "./utils";
import
_
from
"lodash"
;
import
_
from
"lodash"
;
const
handleCompClick
=
item
=>
{
const
handleCompClick
=
item
=>
{
console
.
log
(
"item"
,
item
);
//
console.log("item", item);
if
(
item
.
entityType
!=
2
)
return
;
//
if (item.entityType != 2) return;
const
route
=
router
.
resolve
({
const
route
=
router
.
resolve
({
path
:
"/companyPages"
,
path
:
"/companyPages"
,
query
:
{
query
:
{
...
@@ -1426,12 +1440,14 @@ const fetchRiskSignals = async () => {
...
@@ -1426,12 +1440,14 @@ const fetchRiskSignals = async () => {
try
{
try
{
const
data
=
await
getRiskSignal
();
const
data
=
await
getRiskSignal
();
if
(
data
&&
Array
.
isArray
(
data
))
{
if
(
data
&&
Array
.
isArray
(
data
))
{
console
.
log
(
data
);
warningList
.
value
=
data
.
map
(
item
=>
({
warningList
.
value
=
data
.
map
(
item
=>
({
...
item
,
...
item
,
title
:
item
.
signalTitle
,
title
:
item
.
signalTitle
,
time
:
item
.
signalTime
,
time
:
item
.
signalTime
,
status
:
item
.
signalLevel
,
status
:
item
.
signalLevel
,
id
:
item
.
signalId
id
:
item
.
signalId
,
sanId
:
item
.
sanId
}));
}));
}
}
}
catch
(
err
)
{
}
catch
(
err
)
{
...
...
src/views/exportControl/v2.0EntityList/components/sanctionsOverview/components/introductionPage/index.vue
浏览文件 @
486b8d7c
...
@@ -104,7 +104,7 @@
...
@@ -104,7 +104,7 @@
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"right-main"
>
<
div
class
=
"right-main"
>
<
div
class
=
"right-main-title"
>
<
div
class
=
"right-main-title"
@
click
=
"handleClickOrg(publishInfo)"
>
<
img
:
src
=
"publishInfo.imageUrl"
alt
=
""
/>
<
img
:
src
=
"publishInfo.imageUrl"
alt
=
""
/>
<
div
>
<
div
>
<
div
class
=
"title-text"
>
{{
publishInfo
.
orgNameZh
}}
><
/div
>
<
div
class
=
"title-text"
>
{{
publishInfo
.
orgNameZh
}}
><
/div
>
...
@@ -170,10 +170,11 @@ import icon02 from "../../assets/icon02.png";
...
@@ -170,10 +170,11 @@ import icon02 from "../../assets/icon02.png";
import
{
ArrowDown
}
from
"@element-plus/icons-vue"
;
import
{
ArrowDown
}
from
"@element-plus/icons-vue"
;
import
{
getEntityInfo
,
getPublishInfo
,
getPublishOrgInfo
,
getEntityUpdateInfo
}
from
"@/api/exportControlV2.0.js"
;
import
{
getEntityInfo
,
getPublishInfo
,
getPublishOrgInfo
,
getEntityUpdateInfo
}
from
"@/api/exportControlV2.0.js"
;
// 跳转到详情页
// 处理点击发布机构的方法
const
handleClick
=
item
=>
{
const
handleClickOrg
=
item
=>
{
// console.log("点击了发布机构:", item);
const
route
=
router
.
resolve
({
const
route
=
router
.
resolve
({
path
:
"/
exportControl/singleSanc
tion"
,
path
:
"/
institu
tion"
,
query
:
{
query
:
{
id
:
item
.
id
id
:
item
.
id
}
}
...
@@ -194,6 +195,18 @@ const handlePerClick = item => {
...
@@ -194,6 +195,18 @@ const handlePerClick = item => {
window
.
open
(
route
.
href
,
"_blank"
);
window
.
open
(
route
.
href
,
"_blank"
);
}
;
}
;
// 处理点击实体名称的方法
const
handleClick
=
item
=>
{
// console.log("点击了实体名称:", item);
const
route
=
router
.
resolve
({
path
:
"/exportControl/singleSanction"
,
query
:
{
id
:
item
.
id
}
}
);
window
.
open
(
route
.
href
,
"_blank"
);
}
;
const
selectedDomain
=
ref
(
0
);
const
selectedDomain
=
ref
(
0
);
const
onlyChina
=
ref
(
false
);
const
onlyChina
=
ref
(
false
);
const
domainOptions
=
[
const
domainOptions
=
[
...
@@ -560,6 +573,7 @@ onMounted(() => {
...
@@ -560,6 +573,7 @@ onMounted(() => {
.
right
-
main
{
.
right
-
main
{
padding
:
7
px
24
px
0
px
23
px
;
padding
:
7
px
24
px
0
px
23
px
;
.
right
-
main
-
title
{
.
right
-
main
-
title
{
cursor
:
pointer
;
width
:
473
px
;
width
:
473
px
;
height
:
auto
;
height
:
auto
;
border
-
radius
:
4
px
;
border
-
radius
:
4
px
;
...
...
src/views/exportControl/v2.0EntityList/components/sanctionsOverview/components/listPage/index.vue
浏览文件 @
486b8d7c
...
@@ -66,7 +66,7 @@
...
@@ -66,7 +66,7 @@
>
>
<el-table-column
label=
"实体名称"
min-width=
"200"
>
<el-table-column
label=
"实体名称"
min-width=
"200"
>
<template
#
default=
"
{ row }">
<template
#
default=
"
{ row }">
<div
class=
"entity-name-cell"
>
<div
class=
"entity-name-cell"
@
click=
"handleCompClick(row)"
>
<el-image
<el-image
v-if=
"row.img"
v-if=
"row.img"
class=
"avatar"
class=
"avatar"
...
@@ -138,12 +138,27 @@
...
@@ -138,12 +138,27 @@
<
script
setup
>
<
script
setup
>
import
{
ref
,
computed
,
onMounted
,
watch
}
from
"vue"
;
import
{
ref
,
computed
,
onMounted
,
watch
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
Search
}
from
"@element-plus/icons-vue"
;
import
{
Search
}
from
"@element-plus/icons-vue"
;
import
defaultIcon
from
"../../../../../assets/icons/default-avatar.png"
;
import
defaultIcon
from
"../../../../../assets/icons/default-avatar.png"
;
import
RuleSubsidiaryDialog
from
"./RuleSubsidiaryDialog.vue"
;
import
RuleSubsidiaryDialog
from
"./RuleSubsidiaryDialog.vue"
;
import
{
getExportControlList
,
get50PercentEntityCount
}
from
"@/api/exportControlV2.0.js"
import
{
getExportControlList
,
get50PercentEntityCount
}
from
"@/api/exportControlV2.0.js"
import
CommonPrompt
from
'@/views/exportControl/commonPrompt/index.vue'
import
CommonPrompt
from
'@/views/exportControl/commonPrompt/index.vue'
const
router
=
useRouter
();
// 跳转公司详情页
const
handleCompClick
=
item
=>
{
console
.
log
(
"item"
,
item
);
const
route
=
router
.
resolve
({
path
:
"/companyPages"
,
query
:
{
id
:
item
.
id
}
});
window
.
open
(
route
.
href
,
"_blank"
);
};
const
searchKeyword
=
ref
(
""
);
const
searchKeyword
=
ref
(
""
);
const
onlyChina
=
ref
(
false
);
const
onlyChina
=
ref
(
false
);
const
sanctionTime
=
ref
(
""
);
const
sanctionTime
=
ref
(
""
);
...
...
src/views/exportControl/v2.0SingleSanction/components/sanctionsOverview/index.vue
浏览文件 @
486b8d7c
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
<div
class=
"label"
>
发布机构:
</div>
<div
class=
"label"
>
发布机构:
</div>
<div
class=
"value link"
>
<div
class=
"value link"
>
<img
:src=
"title"
alt=
""
class=
"icon"
>
<img
:src=
"title"
alt=
""
class=
"icon"
>
<span>
{{
formattedData
.
postOrgName
}}
>
</span>
<span
@
click=
"handleClickDp"
>
{{
formattedData
.
postOrgName
}}
>
</span>
</div>
</div>
</div>
</div>
<div
class=
"info-row"
>
<div
class=
"info-row"
>
...
@@ -165,7 +165,7 @@
...
@@ -165,7 +165,7 @@
<div
class=
"name-cell"
>
<div
class=
"name-cell"
>
<div
class=
"dot"
></div>
<div
class=
"dot"
></div>
<img
:src=
"defaultTitle"
class=
"company-icon"
/>
<img
:src=
"defaultTitle"
class=
"company-icon"
/>
<span
class=
"company-name"
>
{{
scope
.
row
.
name
}}
</span>
<span
class=
"company-name"
@
click=
"handleCompClick(scope.row)"
>
{{
scope
.
row
.
name
}}
</span>
</div>
</div>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
...
@@ -185,7 +185,7 @@
...
@@ -185,7 +185,7 @@
<el-table-column
prop=
"revenue"
label=
"营收(亿元)"
width=
"110"
align=
"center"
/>
<el-table-column
prop=
"revenue"
label=
"营收(亿元)"
width=
"110"
align=
"center"
/>
<el-table-column
label=
"50%规则子企业"
width=
"180"
align=
"center"
>
<el-table-column
label=
"50%规则子企业"
width=
"180"
align=
"center"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<span
v-if=
"scope.row.subsidiaryCount"
class=
"subsidiary-link"
>
<span
v-if=
"scope.row.subsidiaryCount"
class=
"subsidiary-link"
@
click=
"handleSubsidiaryClick(scope.row)"
>
{{
scope
.
row
.
subsidiaryText
}}
<span
class=
"blue-text"
>
{{
scope
.
row
.
subsidiaryCount
}}
家 >
</span>
{{
scope
.
row
.
subsidiaryText
}}
<span
class=
"blue-text"
>
{{
scope
.
row
.
subsidiaryCount
}}
家 >
</span>
</span>
</span>
<span
v-else
>
--
</span>
<span
v-else
>
--
</span>
...
@@ -200,6 +200,13 @@
...
@@ -200,6 +200,13 @@
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 50%规则子企业弹框 -->
<RuleSubsidiaryDialog
v-model=
"subsidiaryDialogVisible"
:company-name=
"currentSubsidiaryCompanyName"
:total-count=
"currentSubsidiaryCount"
:data-list=
"currentSubsidiaryList"
/>
</div>
</div>
</template>
</template>
...
@@ -212,6 +219,44 @@ import title from "../../assets/title.png"
...
@@ -212,6 +219,44 @@ import title from "../../assets/title.png"
import
defaultTitle
from
"../../assets/default-icon1.png"
import
defaultTitle
from
"../../assets/default-icon1.png"
import
flag
from
"../../assets/default-icon2.png"
import
flag
from
"../../assets/default-icon2.png"
import
{
getSingleSanctionEntityCountry
,
getSingleSanctionBackground
,
getSingleSanctionOverviewList
}
from
"@/api/exportControlV2.0"
;
import
{
getSingleSanctionEntityCountry
,
getSingleSanctionBackground
,
getSingleSanctionOverviewList
}
from
"@/api/exportControlV2.0"
;
import
RuleSubsidiaryDialog
from
"../../../v2.0EntityList/components/sanctionsOverview/components/listPage/RuleSubsidiaryDialog.vue"
;
// 跳转公司详情页
const
handleCompClick
=
item
=>
{
console
.
log
(
"item"
,
item
);
const
route
=
router
.
resolve
({
path
:
"/companyPages"
,
query
:
{
id
:
item
.
id
}
});
window
.
open
(
route
.
href
,
"_blank"
);
};
// 跳转发布机构详情页
const
handleClickDp
=
()
=>
{
// console.log("点击了发布机构:", props.data);
const
route
=
router
.
resolve
({
path
:
"/institution"
,
query
:
{
id
:
props
.
data
.
postOrgId
}
});
window
.
open
(
route
.
href
,
"_blank"
);
};
// 50%规则子企业弹框逻辑
const
subsidiaryDialogVisible
=
ref
(
false
);
const
currentSubsidiaryCompanyName
=
ref
(
""
);
const
currentSubsidiaryCount
=
ref
(
0
);
const
currentSubsidiaryList
=
ref
([]);
const
handleSubsidiaryClick
=
(
row
)
=>
{
currentSubsidiaryCompanyName
.
value
=
row
.
name
;
currentSubsidiaryCount
.
value
=
row
.
subsidiaryCount
;
currentSubsidiaryList
.
value
=
row
.
ruleOrgList
||
[];
subsidiaryDialogVisible
.
value
=
true
;
};
// 单次制裁-制裁概况-制裁清单
// 单次制裁-制裁概况-制裁清单
const
sanctionList
=
ref
([])
const
sanctionList
=
ref
([])
...
@@ -240,6 +285,7 @@ const getSanctionOverviewList = async () => {
...
@@ -240,6 +285,7 @@ const getSanctionOverviewList = async () => {
sanctionList
.
value
=
list
.
map
(
item
=>
({
sanctionList
.
value
=
list
.
map
(
item
=>
({
reason
:
item
.
sanReason
,
reason
:
item
.
sanReason
,
entities
:
(
item
.
orgList
||
[]).
map
(
org
=>
({
entities
:
(
item
.
orgList
||
[]).
map
(
org
=>
({
...
org
,
name
:
org
.
entityNameZh
||
org
.
entityName
,
name
:
org
.
entityNameZh
||
org
.
entityName
,
fields
:
org
.
techDomains
||
[],
fields
:
org
.
techDomains
||
[],
location
:
"--"
,
// 接口暂无数据
location
:
"--"
,
// 接口暂无数据
...
...
src/views/exportControl/v2.0SingleSanction/index.vue
浏览文件 @
486b8d7c
...
@@ -28,7 +28,7 @@
...
@@ -28,7 +28,7 @@
<span>
{{
item
.
title
}}
</span>
<span>
{{
item
.
title
}}
</span>
<div
class=
"active-line"
v-if=
"activeIndex === index"
></div>
<div
class=
"active-line"
v-if=
"activeIndex === index"
></div>
</div>
</div>
<div
class=
"original-text-btn"
>
<div
class=
"original-text-btn"
@
click=
"handleClickOriginalText"
>
<img
:src=
"icon1"
alt=
""
>
<img
:src=
"icon1"
alt=
""
>
<span>
实体清单原文
</span>
<span>
实体清单原文
</span>
</div>
</div>
...
@@ -67,6 +67,12 @@ import icon3Active from "../assets/icons/icon3_active.png";
...
@@ -67,6 +67,12 @@ import icon3Active from "../assets/icons/icon3_active.png";
import
{
getSingleSanctionOverview
}
from
"@/api/exportControlV2.0.js"
import
{
getSingleSanctionOverview
}
from
"@/api/exportControlV2.0.js"
// 处理点击实体清单原文按钮
const
handleClickOriginalText
=
()
=>
{
// 打开新标签页
window
.
open
(
`/exportControl/origin?id=
${
sanRecordId
.
value
}
`
,
"_blank"
)
}
// 获取URL参数
// 获取URL参数
const
sanRecordId
=
ref
(
""
)
const
sanRecordId
=
ref
(
""
)
const
getUrlParams
=
()
=>
{
const
getUrlParams
=
()
=>
{
...
...
src/views/exportControl/v2.0SingleSanction/originPage/index.vue
0 → 100644
浏览文件 @
486b8d7c
<
template
>
<div
class=
"entity-list"
>
<div
class=
"header"
>
<div
class=
"header-title"
>
<img
:src=
"headerTitle.img"
alt=
""
>
<div>
<div
class=
"title"
>
{{
headerTitle
.
title
}}
<!--
<span>
{{
headerTitle
.
titleEn
}}
</span>
-->
</div>
<div
class=
"department"
>
{{
headerTitle
.
department
}}
</div>
</div>
<!--
<div
class=
"btn"
>
<img
:src=
"icon01"
alt=
""
>
切换
</div>
-->
</div>
</div>
<div
class=
"main"
>
<div
class=
"pdf-container"
>
<iframe
v-if=
"headerTitle.srcUrl"
:src=
"headerTitle.srcUrl"
width=
"100%"
height=
"100%"
frameborder=
"0"
></iframe>
<div
v-else
class=
"no-pdf"
>
暂无原文
</div>
</div>
<div
class=
"pdf-container"
>
<iframe
v-if=
"headerTitle.transUrl"
:src=
"headerTitle.transUrl"
width=
"100%"
height=
"100%"
frameborder=
"0"
></iframe>
<div
v-else
class=
"no-pdf"
>
暂无译文
</div>
</div>
</div>
</div>
</
template
>
<
script
setup
>
import
{
ref
,
onMounted
}
from
'vue'
import
{
getSingleSanctionOverview
}
from
"@/api/exportControlV2.0.js"
import
title
from
"../assets/title.png"
import
icon01
from
"../assets/icon01.png"
// 单次制裁-制裁概况-基本信息
const
singleSanctionOverview
=
ref
({})
const
getSingleSanctionOverviewData
=
async
()
=>
{
if
(
!
sanRecordId
.
value
)
return
try
{
const
res
=
await
getSingleSanctionOverview
({
sanRecordId
:
sanRecordId
.
value
})
if
(
res
.
code
===
200
)
{
singleSanctionOverview
.
value
=
res
.
data
||
{}
// 格式化日期
let
dateStr
=
""
;
if
(
singleSanctionOverview
.
value
.
postDate
)
{
const
date
=
new
Date
(
singleSanctionOverview
.
value
.
postDate
);
if
(
!
isNaN
(
date
.
getTime
()))
{
dateStr
=
`
${
date
.
getFullYear
()}
年
${
date
.
getMonth
()
+
1
}
月
${
date
.
getDate
()}
日`
;
}
else
{
dateStr
=
singleSanctionOverview
.
value
.
postDate
;
}
}
// 更新头部信息
headerTitle
.
value
=
{
...
headerTitle
.
value
,
title
:
`
${
dateStr
}
《
${
singleSanctionOverview
.
value
.
sanTitleZh
||
singleSanctionOverview
.
value
.
sanTitle
}
》`
,
titleEn
:
singleSanctionOverview
.
value
.
sanTitle
||
""
,
department
:
singleSanctionOverview
.
value
.
fileCode
||
""
,
srcUrl
:
singleSanctionOverview
.
value
.
srcUrl
||
""
,
transUrl
:
singleSanctionOverview
.
value
.
transUrl
||
""
}
}
}
catch
(
error
)
{
console
.
error
(
"获取制裁概况失败:"
,
error
)
}
}
const
headerTitle
=
ref
({
img
:
title
,
})
// 获取URL参数
const
sanRecordId
=
ref
(
""
)
const
getUrlParams
=
()
=>
{
const
urlParams
=
new
URLSearchParams
(
window
.
location
.
search
);
sanRecordId
.
value
=
urlParams
.
get
(
"id"
)
||
""
}
onMounted
(()
=>
{
getUrlParams
()
getSingleSanctionOverviewData
()
})
</
script
>
<
style
scoped
lang=
"scss"
>
*
{
margin
:
0
;
padding
:
0
;
}
.entity-list
{
width
:
100%
;
height
:
100%
;
.header
{
width
:
100%
;
height
:
148px
;
background-color
:
#fff
;
padding-top
:
16px
;
.header-title
{
width
:
1601px
;
height
:
72px
;
background-color
:
rgba
(
246
,
250
,
255
,
1
);
margin
:
0
auto
;
border-radius
:
10px
;
border
:
2px
solid
rgba
(
174
,
214
,
255
,
1
);
display
:
flex
;
align-items
:
center
;
margin-bottom
:
12px
;
position
:
relative
;
img
{
width
:
54px
;
height
:
54px
;
margin-left
:
15px
;
margin-right
:
11px
;
}
.title
{
font-size
:
20px
;
font-weight
:
700
;
font-family
:
"Microsoft YaHei"
;
line-height
:
26px
;
color
:
rgb
(
59
,
65
,
75
);
span
{
font-size
:
16px
;
font-weight
:
400
;
font-family
:
"Microsoft YaHei"
;
line-height
:
24px
;
color
:
rgb
(
95
,
101
,
108
);
margin-left
:
11px
;
}
}
.department
{
font-size
:
16px
;
font-weight
:
400
;
font-family
:
"Microsoft YaHei"
;
line-height
:
24px
;
color
:
rgb
(
95
,
101
,
108
);
}
.btn
{
cursor
:
pointer
;
display
:
flex
;
align-items
:
center
;
position
:
absolute
;
right
:
16px
;
top
:
25px
;
font-size
:
18px
;
font-weight
:
700
;
font-family
:
"Microsoft YaHei"
;
line-height
:
24px
;
color
:
rgb
(
5
,
95
,
194
);
img
{
width
:
20px
;
height
:
20px
;
margin-right
:
7px
;
}
}
}
.header-nav
{
width
:
1601px
;
margin
:
0
auto
;
height
:
48px
;
display
:
flex
;
align-items
:
center
;
.nav-item
{
display
:
flex
;
align-items
:
center
;
height
:
100%
;
margin-right
:
32px
;
cursor
:
pointer
;
position
:
relative
;
font-size
:
18px
;
font-weight
:
400
;
font-family
:
"Microsoft YaHei"
;
color
:
rgb
(
59
,
65
,
75
);
&
:last-child
{
margin-right
:
0
;
}
img
{
width
:
16px
;
height
:
16px
;
margin-right
:
4px
;
}
&
.active
{
color
:
rgb
(
5
,
95
,
194
);
font-weight
:
700
;
}
.active-line
{
position
:
absolute
;
bottom
:
0
;
left
:
0
;
width
:
100%
;
height
:
3px
;
background-color
:
#055fc2
;
border-radius
:
1
.5px
;
}
}
.original-text-btn
{
margin-left
:
auto
;
width
:
152px
;
height
:
36px
;
background
:
#FFFFFF
;
border-radius
:
4px
;
border
:
1px
solid
rgba
(
230
,
231
,
232
,
1
);
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
cursor
:
pointer
;
img
{
width
:
16px
;
height
:
16px
;
margin-right
:
8px
;
}
span
{
font-size
:
16px
;
font-weight
:
400
;
color
:
rgb
(
95
,
101
,
108
);
font-family
:
"Microsoft YaHei"
;
line-height
:
24px
;
}
}
}
}
.main
{
width
:
1601px
;
height
:
calc
(
100%
-
148px
);
background-color
:
#F7F8F9
;
margin
:
0
auto
;
display
:
flex
;
justify-content
:
space-between
;
padding-top
:
20px
;
box-sizing
:
border-box
;
.pdf-container
{
width
:
790px
;
height
:
calc
(
100%
-
20px
);
background-color
:
#fff
;
// border: 1px solid rgba(174, 214, 255, 1);
border-radius
:
4px
;
overflow
:
hidden
;
.no-pdf
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
height
:
100%
;
color
:
#909399
;
font-size
:
16px
;
background-color
:
#fff
;
}
}
}
}
</
style
>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论