提交 3b47eb31 authored 作者: yanpeng's avatar yanpeng

Merge branch 'master' into yp-dev

...@@ -9,5 +9,6 @@ ...@@ -9,5 +9,6 @@
<body> <body>
<div id="app"></div> <div id="app"></div>
<script type="module" src="/src/main.js"></script> <script type="module" src="/src/main.js"></script>
<script src="/js/config.js"></script>
</body> </body>
</html> </html>
\ No newline at end of file
const baseUrl = `http://8.140.26.4:9085/`
\ No newline at end of file
差异被折叠。
<template> <template>
<div id="app"> <div id="app">
<div class="pro-wrapper"> <router-view></router-view>
<div class="home-page">
<ModuleHeader />
<div class="main-container">
<router-view />
</div>
</div>
<div class="right-btn" @click="handleClickToolBox">
<div class="item">
<div class="icon">
<img src="@/assets/icons/overview/domain.png" alt="" />
</div>
<div class="text">{{ "领域" }}</div>
</div>
<div class="item">
<div class="icon">
<img src="@/assets/icons/overview/element.png" alt="" />
</div>
<div class="text">{{ "要素" }}</div>
</div>
</div>
<div class="tool-box">
<!-- <div class="tool-item">
<img src="@/assets/icons/tool-item-icon1.png" alt="" />
</div>
<div class="tool-item">
<img src="@/assets/icons/tool-item-icon2.png" alt="" />
</div>
<div class="tool-item">
<img src="@/assets/icons/tool-item-icon3.png" alt="" />
</div>
<div class="tool-item">
<img src="@/assets/icons/tool-item-icon4.png" alt="" />
</div> -->
<el-tooltip content="智能写报" placement="left" :offset="10">
<div class="tool-item" @click="handleOpenPage('znxb')">
<img src="@/assets/icons/tool-item-icon1.png" alt="" />
</div>
</el-tooltip>
<el-tooltip content="智能翻译" placement="left" :offset="10">
<div class="tool-item" @click="handleClickToolBox">
<img src="@/assets/icons/tool-item-icon2.png" alt="" />
</div>
</el-tooltip>
<!-- <div class="tool-item">
<img src="@/assets/icons/tool-item-icon3.png" alt="" />
</div> -->
<el-tooltip content="智能问答" placement="left" :offset="10">
<div class="tool-item" @click="handleOpenPage('znwd')">
<img src="@/assets/icons/tool-item-icon4.png" alt="" />
</div>
</el-tooltip>
</div>
<!-- <div class="ai-btn" @click="openAiBox">
<div class="icon">
<img src="@/assets/icons/ai-icon.png" alt="" />
</div>
<div class="text">智能问答</div>
</div> -->
<div class="ai-dialog" v-if="isShowAiBox">
<AiBox @close="closeAiBox" />
</div>
</div>
</div> </div>
</template> </template>
...@@ -95,27 +29,6 @@ import { ElMessage } from "element-plus"; ...@@ -95,27 +29,6 @@ import { ElMessage } from "element-plus";
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
// const target = ref(null);
// const { x, y, isDragging } = useDraggable(target, {
// initialValue: { x: 1770, y: 800 },
// onStart: () => console.log("开始拖动"),
// onEnd: () => console.log("结束拖动")
// });
// const style = computed(() => ({
// position: "absolute",
// left: `${x.value}px`,
// top: `${y.value}px`,
// cursor: isDragging.value ? "grabbing" : "grab"
// }));
const handleToHome = () => {
router.push({
path: "/ZMOverView"
});
isCurrentOverview.value = true;
};
const isShowAiBox = ref(false); const isShowAiBox = ref(false);
...@@ -322,12 +235,26 @@ body { ...@@ -322,12 +235,26 @@ body {
display: none; display: none;
} }
/* #region 公共样式类名 */
/* 单行文本溢出隐藏显示省略号 */ /* 单行文本溢出隐藏显示省略号 */
.one-line-ellipsis { .one-line-ellipsis {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
/* 多行文本两端对齐 最后一行正常显示 */
.text-align-justify {
text-align: justify;
text-align-last: left;
-webkit-text-align-last: left;
}
/* 可点击文本 鼠标悬浮样式 */
#app .text-click-hover:hover {
text-decoration: underline;
color: rgb(5, 95, 194);
cursor: pointer;
}
/* #endregion 公共样式类名 */
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -192,3 +192,30 @@ export function getBillFullText(params) { ...@@ -192,3 +192,30 @@ export function getBillFullText(params) {
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,
});
}
import request from "@/api/request.js"; import request from "@/api/request.js";
// 最新科技政令 // 最新科技政令
export function getDepartmentList() { export function getDepartmentList(params) {
return request({ return request({
method: 'GET', method: 'GET',
url: `/api/administrativeDict/department`, url: `/api/administrativeDict/department`,
...@@ -43,10 +43,10 @@ export function getDecreeArea(params) { ...@@ -43,10 +43,10 @@ export function getDecreeArea(params) {
} }
// 关键行政令 // 关键行政令
export function getKeyDecree() { export function getKeyDecree(params) {
return request({ return request({
method: 'GET', method: 'GET',
url: `/api/administrativeOrderOverview/action`, url: `/api/administrativeOrderOverview/action?pageSize=${params.pageSize}&pageNum=${params.pageNum}`,
}) })
} }
......
...@@ -17,7 +17,7 @@ defineProps({ ...@@ -17,7 +17,7 @@ defineProps({
}) })
</script> </script>
<style scoped> <style lang="scss" scoped>
.action-button { .action-button {
height: 28px; height: 28px;
padding: 0 8px; padding: 0 8px;
...@@ -29,11 +29,16 @@ defineProps({ ...@@ -29,11 +29,16 @@ defineProps({
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
transition: all 0.3s; transition: all 0.3s;
} }
.action-button[type="normal"] { .action-button[type="normal"] {
background-color: rgba(255, 255, 255, 1); background-color: rgba(255, 255, 255, 1);
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
&:hover {
background: var(--color-primary-2);
}
} }
.action-button[type="active"] { .action-button[type="active"] {
...@@ -52,6 +57,4 @@ defineProps({ ...@@ -52,6 +57,4 @@ defineProps({
.action-button[type="active"]:hover { .action-button[type="active"]:hover {
background-color: #40a9ff; background-color: #40a9ff;
} */ } */
</style> </style>
\ No newline at end of file
<svg viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.000000" height="12.000000" fill="none" customFrame="url(#clipPath_1)">
<defs>
<clipPath id="clipPath_1">
<rect width="16.000000" height="12.000000" x="0.000000" y="0.000000" rx="6.000000" fill="rgb(255,255,255)" />
</clipPath>
</defs>
<rect id="AI-logo" width="16.000000" height="12.000000" x="0.000000" y="0.000000" rx="6.000000" />
<path id="合并" d="M13.0238 1.46629C13.7681 0.916637 14.14 0 14.14 0C14.14 0 14.0472 0.916623 14.5122 1.46629C14.9772 2.01595 16 2.19866 16 2.19866C16 2.19866 14.8838 2.38224 14.1396 2.93288C13.3955 3.48351 13.0234 4.40121 13.0234 4.40121C13.0234 4.40121 13.1163 3.48353 12.6512 2.93288C12.1861 2.38222 11.163 2.1986 11.163 2.1986C11.163 2.1986 12.2795 2.01594 13.0238 1.46629ZM8.72107 2.20032L9.85481 10.5L7.29299 10.5L6.99502 8.24068L3.42302 8.24068L2.42736 10.5L0 10.5L3.28857 2.61208L2.85978 2.20032L8.72107 2.20032ZM5.4325 3.60747L4.00442 6.83353L6.86057 6.83353L6.43179 3.60747L5.4325 3.60747ZM13.9457 10.4999L14.9162 4.57493L11.475 4.57493L11.9074 5.13349L11.2386 10.4999L13.9457 10.4999Z" fill="rgb(5,95,194)" fill-rule="evenodd" />
</svg>
<template>
<div class="ai-button-wrapper">
<div class="icon">
<img src="./ai-icon.svg" alt="">
</div>
<div class="text text-tip-1">{{ '总结' }}</div>
</div>
</template>
<style lang="scss" scoped>
.ai-button-wrapper{
width: 74px;
height: 28px;
border-radius: 20px 0 0 20px;
background: var(--color-primary-10);
display: flex;
gap: 6px;
align-items: center;
justify-content: left;
box-sizing: border-box;
padding-left: 12px;
cursor: pointer;
.text{
color: var(--color-primary-100);
}
}
</style>
\ No newline at end of file
<svg viewBox="0 0 20 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20.000000" height="16.000000" fill="none" customFrame="url(#clipPath_2)">
<defs>
<clipPath id="clipPath_2">
<rect width="20.000000" height="16.000000" x="0.000000" y="0.000000" rx="8.000000" fill="rgb(255,255,255)" />
</clipPath>
</defs>
<rect id="AI-logo" width="20.000000" height="16.000000" x="0.000000" y="0.000000" rx="8.000000" />
<path id="合并" d="M16.2798 1.95505C17.2101 1.22218 17.6751 0 17.6751 0C17.6751 0 17.559 1.22216 18.1403 1.95505C18.7215 2.68794 20 2.93155 20 2.93155C20 2.93155 18.6047 3.17632 17.6745 3.9105C16.7443 4.64468 16.2793 5.86828 16.2793 5.86828C16.2793 5.86828 16.3954 4.6447 15.814 3.9105C15.2326 3.1763 13.9537 2.93147 13.9537 2.93147C13.9537 2.93147 15.3494 2.68792 16.2798 1.95505ZM10.9013 2.93376L12.3185 14L9.11624 14L8.74378 10.9876L4.27877 10.9876L3.03421 14L0 14L4.11071 3.48277L3.57473 2.93376L10.9013 2.93376ZM6.79062 4.80996L5.00553 9.11138L8.57572 9.11138L8.03974 4.80996L6.79062 4.80996ZM17.4321 13.9999L18.6452 6.09991L14.3437 6.09991L14.8843 6.84466L14.0482 13.9999L17.4321 13.9999Z" fill="rgb(5,95,194)" fill-rule="evenodd" />
</svg>
<template>
<div class="ai-pane-wrapper">
<div class="header">
<div class="icon">
<img src="./ai-icon.svg" alt="">
</div>
<div class="title text-title-3-show">{{ '智能总结' }}</div>
</div>
<div class="content text-regular">{{ aiContent }}</div>
</div>
</template>
<script setup>
const props = defineProps({
aiContent: {
type: String,
default: ''
}
})
</script>
<style lang="scss">
.ai-pane-wrapper {
width: 100%;
height: 156px;
background: var(--color-primary-2);
box-sizing: border-box;
padding: 12px 16px;
.header {
width: 126px;
height: 30px;
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
border-radius: 20px;
background: var(--color-primary-10);
.icon {
width: 20px;
height: 16px;
img {
width: 100%;
height: 100%;
}
}
.title {
color: var(--color-primary-100);
}
}
.content {
margin-top: 8px;
width: 100%;
height: 90px;
box-sizing: border-box;
padding: 0 12px;
color: var(--color-primary-100);
display: -webkit-box;
-webkit-line-clamp: 3;
/* 控制显示的行数 */
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
word-break: break-word;
/* 防止长单词溢出 */
}
}
</style>
\ No newline at end of file
<svg viewBox="0 0 1019 61" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1019.000000" height="61.000000" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_1" x1="7.60449219" x2="10.1398888" y1="-1.90734863e-06" y2="61.0955963" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(231,243,255)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(231,243,255)" offset="1" stop-opacity="0" />
</linearGradient>
</defs>
<path id="矩形 5734" d="M0.000322558 0L1019 0L1019 31.5006L0 61.0008L0.000322558 0Z" fill="url(#paint_linear_1)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 15 12" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15.000000" height="12.000000" fill="none" customFrame="url(#clipPath_0)">
<defs>
<clipPath id="clipPath_0">
<rect width="15.000000" height="12.000000" x="0.000000" y="0.000000" rx="6.000000" fill="rgb(255,255,255)" />
</clipPath>
<linearGradient id="paint_linear_0" x1="7.49999952" x2="7.49999952" y1="0" y2="10.5" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(5,95,194)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(137,193,255)" offset="1" stop-opacity="1" />
</linearGradient>
</defs>
<rect id="AI-logo" width="15.000000" height="12.000000" x="0.000000" y="0.000000" rx="6.000000" />
<path id="合并" d="M12.2098 1.46629C12.9076 0.916637 13.2563 0 13.2563 0C13.2563 0 13.1693 0.916623 13.6052 1.46629C14.0411 2.01595 15 2.19866 15 2.19866C15 2.19866 13.9535 2.38224 13.2559 2.93288C12.5583 3.48351 12.2095 4.40121 12.2095 4.40121C12.2095 4.40121 12.2966 3.48353 11.8605 2.93288C11.4245 2.38222 10.4653 2.1986 10.4653 2.1986C10.4653 2.1986 11.5121 2.01594 12.2098 1.46629ZM8.176 2.20032L9.23888 10.5L6.83718 10.5L6.55783 8.24068L3.20908 8.24068L2.27565 10.5L0 10.5L3.08303 2.61208L2.68105 2.20032L8.176 2.20032ZM5.09297 3.60747L3.75415 6.83353L6.43179 6.83353L6.0298 3.60747L5.09297 3.60747ZM13.0741 10.4999L13.9839 4.57493L10.7578 4.57493L11.1632 5.13349L10.5361 10.4999L13.0741 10.4999Z" fill="url(#paint_linear_0)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 6.70703 13.4102" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="6.707031" height="13.410156" fill="none" customFrame="#000000">
<rect id="容器 848" width="6.000000" height="11.997072" x="0.353516" y="0.707031" />
<path id="矢量 626" d="M0 0L2.99854 2.99854L6 0" stroke="rgb(5,95,194)" stroke-width="1.000000" transform="matrix(1,0,0,-1,0.353516,3.70508)" />
<path id="矢量 627" d="M0.353516 9.70508L3.35205 12.7036L6.35352 9.70508" stroke="rgb(5,95,194)" stroke-width="1.000000" />
</svg>
<template>
<div class="summary-wrapper">
<div class="summary-header">
<div class="icon1">
<img src="./icon1.svg" alt="">
</div>
<div class="text text-tip-1">{{ '智库报告总结摘要' }}</div>
<div class="icon2">
<img src="./icon2.svg" alt="">
</div>
</div>
<div class="summary-main">
<slot name="summary-content"></slot>
</div>
</div>
</template>
<style lang="scss">
.summary-wrapper {
width: 100%;
height: 100%;
// background: linear-gradient(90deg, var(--color-primary-10) 0%, var(--bg-white-100) 100%) ;
background: url('./bg.svg') no-repeat;
overflow: hidden;
border-radius: 4px;
border: 1px solid #E7F3FF;
.summary-header {
margin-top: 16px;
margin-left: 24px;
width: 199px;
height: 32px;
border: 1px solid var(--color-primary-100);
border-radius: 16px;
background: var(--color-primary-10);
display: flex;
justify-content: center;
align-items: center;
gap: 9px;
.icon1 {
width: 15px;
height: 12px;
img {
width: 100%;
height: 100%;
}
}
.text {
color: var(--color-primary-100);
}
.icon2 {
width: 6px;
height: 12px;
img {
width: 100%;
height: 100%;
}
}
}
.summary-main {
margin: 0 auto;
margin-top: 24px;
width: calc(100% - 52px);
height: calc(100% - 92px);
}
}
</style>
\ No newline at end of file
...@@ -239,6 +239,8 @@ watch(isTranslate, () => { ...@@ -239,6 +239,8 @@ watch(isTranslate, () => {
background-color: white; background-color: white;
padding: 0 60px; padding: 0 60px;
flex: auto; flex: auto;
height: 100%;
min-height: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.report-header { .report-header {
...@@ -324,9 +326,14 @@ watch(isTranslate, () => { ...@@ -324,9 +326,14 @@ watch(isTranslate, () => {
.report-main { .report-main {
flex: auto; flex: auto;
min-height: 0;
box-sizing: border-box; box-sizing: border-box;
padding-top: 10px; padding-top: 10px;
:deep(.el-scrollbar) {
height: 100%;
}
.no-content { .no-content {
height: 100%; height: 100%;
display: flex; display: flex;
......
<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.000000" height="16.000000" fill="none" customFrame="#000000">
<rect id="Line/Calendar" width="16.000000" height="16.000000" x="0.000000" y="0.000000" />
<path id="形状" d="M11 3.08L13.52 3.08C13.7855 3.08 14 3.2945 14 3.56L14 13.52C14 13.7855 13.7855 14 13.52 14L2.48 14C2.2145 14 2 13.7855 2 13.52L2 3.56C2 3.2945 2.2145 3.08 2.48 3.08L5 3.08L5 2.12C5 2.054 5.054 2 5.12 2L5.96 2C6.026 2 6.08 2.054 6.08 2.12L6.08 3.08L9.92 3.08L9.92 2.12C9.92 2.054 9.974 2 10.04 2L10.88 2C10.946 2 11 2.054 11 2.12L11 3.08ZM3.08 4.16L3.08 6.2L12.92 6.2L12.92 4.16L11 4.16L11 4.88C11 4.946 10.946 5 10.88 5L10.04 5C9.974 5 9.92 4.946 9.92 4.88L9.92 4.16L6.08 4.16L6.08 4.88C6.08 4.946 6.026 5 5.96 5L5.12 5C5.054 5 5 4.946 5 4.88L5 4.16L3.08 4.16ZM12.92 12.92L3.08 12.92L3.08 7.22L12.92 7.22L12.92 12.92Z" fill="rgb(59,65,75)" fill-rule="evenodd" />
</svg>
<template>
<div class="time-tab-pane-wrapper">
<div
class="time-item"
:class="{'time-item-active': item.active}"
v-for="item,index in timeList"
:key="index"
@click="handleTimeClick(item,index)"
>
<div class="icon" v-if="item.active">
<img src="./calendat-icon.svg" alt="">
</div>
<div class="text text-tip-1" :class="{'text-active': item.active}">{{ item.time }}</div>
</div>
</div>
</template>
<script setup>
import {ref} from 'vue'
const timeList = ref([
{
time: '近一周',
active: true
},
{
time: '近一月',
active: false
},
{
time: '近一年',
active: false
},
])
const handleTimeClick = (item, index) => {
timeList.value.forEach(time => {
time.active = false
})
timeList.value[index].active = true
emit('time-click', item)
}
const emit = defineEmits(['time-click'])
</script>
<style lang="scss" scoped>
.time-tab-pane-wrapper{
display: flex;
width: 248px;
height: 36px;
background: rgba(255, 255, 255, 0.5);
border-radius: 50px;
border: 2px solid rgba(255,255,255,1);
.time-item{
height: 32px;
box-sizing: border-box;
padding: 4px 12px;
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
cursor: pointer;
.icon{
width: 16px;
height: 16px;
img{
width: 100%;
height: 100%;
}
}
.text{
color: var(--text-primary-50-color);
}
.text-active{
color: var(--text-primary-80-color)
}
}
.time-item-active{
background: rgba(255, 255, 255, 0.65);
border-radius: 50px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
}
}
</style>
\ No newline at end of file
<template>
<div class="tree-chart-wrapper" id="tree-chart">
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import setChart from '@/utils/setChart';
import getTreeChart from './treeChart';
import CompanyImg from "@/assets/icons/symbol.png";
const props = defineProps({
treeData: {
type: Array,
default: [
{
id: 1,
name: 'a1',
symbolSize: 30,
value: 5,
symbol: `image://${CompanyImg}`,
children: [
{
id: 11,
name: 'b1',
symbolSize: 30,
value: 5,
symbol: `image://${CompanyImg}`,
},
{
id: 12,
name: 'b2',
symbolSize: 30,
value: 5,
symbol: `image://${CompanyImg}`,
},
{
id: 13,
name: 'b3',
symbolSize: 30,
value: 5,
symbol: `image://${CompanyImg}`,
},
{
id: 14,
name: 'b4',
symbolSize: 30,
value: 5,
symbol: `image://${CompanyImg}`,
}
]
}
]
}
})
onMounted(() => {
const treeChart = getTreeChart(props.treeData)
setChart(treeChart, 'tree-chart')
})
</script>
<style lang="scss" scoped>
.tree-chart-wrapper {
width: 100%;
height: 100%;
}
</style>
\ No newline at end of file
const getTreeChart = (treeData) => {
const option = {
series: [{
type: 'tree',
layout: 'orthogonal', // 从上到下布局
orient: 'TB', // Top to Bottom
data: treeData,
top: '10%',
bottom: '10%',
left: '3%',
right: '3%',
symbol: 'circle',
symbolSize: 40,
label: {
position: 'top',
verticalAlign: 'middle',
align: 'center',
fontSize: 20, // 字体大小
color: 'rgb(59, 65, 75)', // 字体颜色
fontWeight: 'normal', // 字体粗细
// formatter: '{b}', // 标签内容格式器
// rotate: 0, // 旋转角度
offset: [0, -6], // 偏移量
// lineHeight: 20, // 行高
// backgroundColor: 'transparent', // 背景色
// borderColor: 'transparent', // 边框颜色
// borderWidth: 0, // 边框宽度
// borderRadius: 0, // 圆角
// padding: 0, // 内边距
// shadowBlur: 0, // 阴影模糊
// shadowColor: 'transparent' // 阴影颜色
},
leaves: {
label: {
position: 'bottom',
verticalAlign: 'middle',
align: 'center',
offset: [0, 6],
}
},
lineStyle: {
color: '#ccc',
width: 2,
type: 'dashed', // 线条类型:'solid'(实线), 'dashed'(虚线), 'dotted'(点线)
curveness: 0.5, // 曲线弧度(0-1),仅当 edgeShape 为 'curve' 时有效
cap: 'round', // 线帽:'butt', 'round', 'square'
join: 'round', // 连接点:'bevel', 'round', 'miter'
shadowBlur: 0, // 阴影模糊大小
shadowColor: 'rgba(0,0,0,0.5)', // 阴影颜色
shadowOffsetX: 0, // 阴影水平偏移
shadowOffsetY: 0 // 阴影垂直偏移
},
emphasis: {
focus: 'descendant'
},
expandAndCollapse: false,
initialTreeDepth: 3
}]
};
return option
}
export default getTreeChart
\ No newline at end of file
...@@ -21,9 +21,10 @@ const getWordCloudChart = data => { ...@@ -21,9 +21,10 @@ const getWordCloudChart = data => {
gridSize: 15, // 网格大小,影响词间距。 gridSize: 15, // 网格大小,影响词间距。
sizeRange: [16, 36], // 定义词云中文字大小的范围 sizeRange: [16, 36], // 定义词云中文字大小的范围
rotationRange: [0, 0], rotationRange: [0, 0],
rotationStep: 0, // rotationRange: [-90, 90],
drawOutOfBound: false, // 是否超出画布 // rotationStep: 10,
shrinkToFit: true, // 是否自动缩小以适应容器 drawOutOfBound: false, // 是否超出画布
shrinkToFit: true, // 是否自动缩小以适应容器
// 字体 // 字体
textStyle: { textStyle: {
color: function (params) { color: function (params) {
......
...@@ -133,11 +133,12 @@ const emit = defineEmits(['save', 'download', 'collect']) ...@@ -133,11 +133,12 @@ const emit = defineEmits(['save', 'download', 'collect'])
} }
} }
// .header-btn { .header-btn {
// display: flex; // display: flex;
// justify-content: flex-end; // justify-content: flex-end;
// gap: 8px; // gap: 8px;
// } margin-right: 10px;
}
// .header-btn1 { // .header-btn1 {
// position: absolute; // position: absolute;
......
// 法案资源库
const CountryBill = () => import('@/views/dataLibrary/bill/countryBill/index.vue')
const StateBill = () => import('@/views/dataLibrary/bill/stateBill/index.vue')
const dataBillRoutes = [
// 科技法案资源库路由
{
path: "/dataLibrary/countryBill",
name: "CountryBill",
component: CountryBill,
meta: {
title: '国会法案', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/stateBill",
name: "StateBill",
component: StateBill,
meta: {
title: '州法案', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
]
export default dataBillRoutes
\ No newline at end of file
// 法案资源库
const Decree = () => import('@/views/dataLibrary/decree/index.vue')
const dataDecreeRoutes = [
// 科技法案资源库路由
{
path: "/dataLibrary/dataDecree",
name: "DataDecree",
component: Decree,
meta: {
title: '科技政令', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
]
export default dataDecreeRoutes
\ No newline at end of file
// 法案资源库
const CommerceControlList = () => import('@/views/dataLibrary/exportControl/commerceControlList/index.vue')
const CommerceControlListEvent = () => import('@/views/dataLibrary/exportControl/commerceControlListEvent/index.vue')
const EntityList = () => import('@/views/dataLibrary/exportControl/entityList/index.vue')
const EntityListEvent = () => import('@/views/dataLibrary/exportControl/entityListEvent/index.vue')
const dataDecreeRoutes = [
// 科技法案资源库路由
{
path: "/dataLibrary/dataCommerceControlList",
name: "CommerceControlList",
component: CommerceControlList,
meta: {
title: '商业管制清单', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/dataCommerceControlListEvent",
name: "CommerceControlListEvent",
component: CommerceControlListEvent,
meta: {
title: '商业管制清单事件', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/dataEntityList",
name: "EntityList",
component: EntityList,
meta: {
title: '实体清单', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/dataEntityListEvent",
name: "EntityListEvent",
component: EntityListEvent,
meta: {
title: '实体清单事件', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
]
export default dataDecreeRoutes
\ No newline at end of file
// 法案资源库
const MREList = () => import('@/views/dataLibrary/financeControl/mREList/index.vue')
const MREListEvent = () => import('@/views/dataLibrary/financeControl/mREListEvent/index.vue')
const SDNList = () => import('@/views/dataLibrary/financeControl/sDNList/index.vue')
const SDNListEvent = () => import('@/views/dataLibrary/financeControl/sDNListEvent/index.vue')
const dataDecreeRoutes = [
// 科技法案资源库路由
{
path: "/dataLibrary/mREList",
name: "MREList",
component: MREList,
meta: {
title: '涉军企业清单', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/mREListEvent",
name: "MREListEvent",
component: MREListEvent,
meta: {
title: '涉军企业清单事件', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/sDNList",
name: "SDNList",
component: SDNList,
meta: {
title: 'SDN清单', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/sDNListEvent",
name: "SDNListEvent",
component: SDNListEvent,
meta: {
title: 'SDN清单事件', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
]
export default dataDecreeRoutes
\ No newline at end of file
// 法案资源库
const KeyLab = () => import('@/views/dataLibrary/innovationSubject/keyLab/index.vue')
const ResearchUniversity = () => import('@/views/dataLibrary/innovationSubject/researchUniversity/index.vue')
const TechnologyCompany = () => import('@/views/dataLibrary/innovationSubject/technologyCompany/index.vue')
const dataDecreeRoutes = [
// 科技法案资源库路由
{
path: "/dataLibrary/keyLab",
name: "KeyLab",
component: KeyLab,
meta: {
title: '重点实验室', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/researchUniversity",
name: "ResearchUniversity",
component: ResearchUniversity,
meta: {
title: '研究型大学', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/technologyCompany",
name: "TechnologyCompany",
component: TechnologyCompany,
meta: {
title: '科技企业', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
]
export default dataDecreeRoutes
\ No newline at end of file
// 法案资源库
const Case337 = () => import('@/views/dataLibrary/marketControl/case337/index.vue')
const Case232 = () => import('@/views/dataLibrary/marketControl/case232/index.vue')
const Case301 = () => import('@/views/dataLibrary/marketControl/case301/index.vue')
const dataDecreeRoutes = [
// 科技法案资源库路由
{
path: "/dataLibrary/case337",
name: "Case337",
component: Case337,
meta: {
title: '337调查', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/case232",
name: "Case232",
component: Case232,
meta: {
title: '232调查', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/case301",
name: "Case301",
component: Case301,
meta: {
title: '301调查', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
]
export default dataDecreeRoutes
\ No newline at end of file
// 法案资源库
const CongressMan = () => import('@/views/dataLibrary/technologyFigures/congressMan/index.vue')
const Minister = () => import('@/views/dataLibrary/technologyFigures/minister/index.vue')
const TechnologyLeader = () => import('@/views/dataLibrary/technologyFigures/technologyLeader/index.vue')
const ThinkTankResearcher = () => import('@/views/dataLibrary/technologyFigures/thinkTankResearcher/index.vue')
const dataDecreeRoutes = [
// 科技法案资源库路由
{
path: "/dataLibrary/congressMan",
name: "CongressMan",
component: CongressMan,
meta: {
title: '国会议员', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/minister",
name: "Minister",
component: Minister,
meta: {
title: '机构主官', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/technologyLeader",
name: "TechnologyLeader",
component: TechnologyLeader,
meta: {
title: '科技企业领袖', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
{
path: "/dataLibrary/thinkTankResearcher",
name: "ThinkTankResearcher",
component: ThinkTankResearcher,
meta: {
title: '智库研究人员', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
]
export default dataDecreeRoutes
\ No newline at end of file
// 法案资源库
const ThinkTank = () => import('@/views/dataLibrary/thinkTank/index.vue')
const dataThinkTankRoutes = [
// 科技法案资源库路由
{
path: "/dataLibrary/dataThinkTank",
name: "DataThinkTank",
component: ThinkTank,
meta: {
title: '美国科技智库', // 显示在tag上的文字
affix: false, // 是否为固定tag(首页通常设置为true,不可关闭)
keepAlive: true // 是否需要缓存
}
},
]
export default dataThinkTankRoutes
\ No newline at end of file
import { createRouter, createWebHistory } from "vue-router"; import { createRouter, createWebHistory } from "vue-router";
const Home = () => import('@/views/home/index.vue')
const DataLibrary = () => import('@/views/dataLibrary/index.vue')
// 自动导入所有模块路由 // 自动导入所有模块路由
const modules = import.meta.glob('./modules/*.js', { eager: true }) const modules = import.meta.glob('./modules/*.js', { eager: true })
...@@ -9,8 +11,38 @@ const fileRoutes = Object.keys(modules).reduce((acc, path) => { ...@@ -9,8 +11,38 @@ const fileRoutes = Object.keys(modules).reduce((acc, path) => {
return acc return acc
}, []) }, [])
// 自动导入所有资源库模块路由
const datas = import.meta.glob('./dataLibrary/*.js', { eager: true })
const dataRoutes = Object.keys(datas).reduce((acc, path) => {
const module = datas[path].default
acc.push(...module)
return acc
}, [])
const routes = [ const routes = [
...fileRoutes, {
path: "/",
name: "Home",
component: Home,
children: [
...fileRoutes
]
},
{
path: "/dataLibrary",
name: "DataLibrary",
component: DataLibrary,
meta: {
title: '数据资源库'
},
children: [
...dataRoutes
]
},
]; ];
......
...@@ -13,7 +13,7 @@ const BillInfluenceLayout = () => import('@/views/bill/influence/index.vue') ...@@ -13,7 +13,7 @@ const BillInfluenceLayout = () => import('@/views/bill/influence/index.vue')
const BillInfluenceIndustry = () => import('@/views/bill/influence/industry/index.vue') const BillInfluenceIndustry = () => import('@/views/bill/influence/industry/index.vue')
const BillInfluenceScientificResearch = () => import('@/views/bill/influence/scientificResearch/index.vue') const BillInfluenceScientificResearch = () => import('@/views/bill/influence/scientificResearch/index.vue')
const BillRelevantCircumstance = () => import('@/views/bill/relevantCircumstance/index.vue') const BillRelevantCircumstance = () => import('@/views/bill/relevantCircumstance/index.vue')
const BillOriginalText = () => import('@/views/bill/billOriginalText/index.vue') const BillVersionCompare = () => import('@/views/bill/versionCompare/index.vue')
const billRoutes = [ const billRoutes = [
...@@ -36,14 +36,6 @@ const billRoutes = [ ...@@ -36,14 +36,6 @@ const billRoutes = [
dynamicTitle: true // 标记需要动态设置标题 dynamicTitle: true // 标记需要动态设置标题
}, },
children: [ children: [
{
path: "originalText",
name: "BillOriginalText",
component: BillOriginalText,
meta: {
title: "法案原文"
}
},
// 法案分析路由 // 法案分析路由
{ {
path: "bill", path: "bill",
...@@ -138,6 +130,14 @@ const billRoutes = [ ...@@ -138,6 +130,14 @@ const billRoutes = [
// meta: { // meta: {
// title: "相关情况" // title: "相关情况"
// } // }
},
{
path: "versionCompare",
name: "BillVersionCompare",
component: BillVersionCompare,
meta: {
title: "版本对比"
}
} }
] ]
}, },
......
...@@ -18,7 +18,7 @@ const decreeRoutes = [ ...@@ -18,7 +18,7 @@ const decreeRoutes = [
name: "Decree", name: "Decree",
component: Decree, component: Decree,
meta: { meta: {
title: "政令概览" title: "科技政令概况"
} }
}, },
{ {
......
import { defineStore } from 'pinia'
const useTagsViewStore = defineStore('tags-view', {
state: () => ({
visitedViews: [], // 存放打开的标签页列表 [{ path, title, name, affix }]
cachedViews: [] // 存放需要缓存的组件名称 (用于 keep-alive)
}),
actions: {
// 添加标签页
addView(view) {
this.addVisitedView(view)
this.addCachedView(view)
},
addVisitedView(view) {
this.visitedViews.forEach(item => {
item.active = false
})
// 防止重复添加
const isExists = this.visitedViews.some(v => v.path === view.path)
if (!isExists) {
// 可以给不同路由设置不同的标题,比如从 route.meta.title 获取
this.visitedViews.push({
...view,
title: view.meta?.title || '未命名'
})
} else {
this.visitedViews.forEach(v => {
if (v.path === view.path) {
v.active = true
}
})
}
},
addCachedView(view) {
// 只有配置了 keepAlive: true 的路由才加入缓存数组
if (view.meta?.keepAlive && !this.cachedViews.includes(view.name)) {
this.cachedViews.push(view.name)
}
},
// 关闭当前标签页
delView(view) {
return new Promise((resolve) => {
// 1. 先从缓存数组中移除(如果有)
this.delCachedView(view)
// 2. 再从访问数组中移除
const index = this.visitedViews.findIndex(v => v.path === view.path)
if (index !== -1) {
this.visitedViews.splice(index, 1)
}
resolve([...this.visitedViews])
})
},
// 从缓存中移除
delCachedView(view) {
if (view.meta?.keepAlive) {
const index = this.cachedViews.indexOf(view.name)
if (index !== -1) {
this.cachedViews.splice(index, 1)
}
}
},
// 关闭其他/右侧/全部
delOthersViews(view) {
// ...
}
}
})
export default useTagsViewStore
\ No newline at end of file
<template>
<el-row class="wrapper layout-grid-line">
<el-col :span="span">
<pre>
{{
`
import AiButton from '@/components/base/AiButton/index.vue'
import AiPane from '@/components/base/AiPane/index.vue'
<div class="chart-box">
<div class="btn-box" @mouseenter="handleSwitchAiContentShow(true)">
<AiButton />
</div>
<div class="content-box" v-if="isShowAiContent" @mouseleave="handleSwitchAiContentShow(false)">
<AiPane :aiContent="aiContent" />
</div>
</div>
`
}}
</pre>
<div class="chart-box">
<div class="btn-box" @mouseenter="handleSwitchAiContentShow(true)">
<AiButton />
</div>
<div class="content-box" v-if="isShowAiContent" @mouseleave="handleSwitchAiContentShow(false)">
<AiPane :aiContent="aiContent" />
</div>
</div>
</el-col>
</el-row>
</template>
<script setup>
import { ref } from 'vue'
import '@/styles/common.scss'
import AiButton from '@/components/base/Ai/AiButton/index.vue'
import AiPane from '@/components/base/Ai/AiPane/index.vue'
const span = 12
const handleSwitchAiContentShow = (isShow) => {
isShowAiContent.value = isShow
}
const isShowAiContent = ref(false)
const aiContent = ref(`整个立法过程反映了美国政治的高度极化特点。民主党全员反对该法案,批评其"劫贫济富"。而共和党内部也有分歧,特别是在财政赤字问题上。马斯克多次公开批评该法案是"疯狂的支出计划"。整个立法过程反映了美国政治的高度极化特点。民主党全员反对该法案,批评其"劫贫济富"。而共和党内部也有分歧,特别是在财政赤字问题上。马斯克多次公开批评该法案是"疯狂的支出计划"。`)
</script>
<style lang="scss" scoped>
.chart-box {
width: 520px;
height: 300px;
border: 1px solid var(--bg-black-5);
position: relative;
.btn-box {
position: absolute;
right: 0;
bottom: 18px;
}
.content-box {
position: absolute;
left: 0;
bottom: 0;
}
}
</style>
\ No newline at end of file
<template>
<el-row class="wrapper layout-grid-line">
<el-col :span="span">
<pre>
{{
`
import AiSummary from '@/components/base/Ai/AiSummary/index.vue'
<div class="summary-box">
<AiSummary />
</div>
`
}}
</pre>
<div class="summary-box">
<AiSummary>
<template #summary-content>
<div class="content-box">
我是插槽内容区域(忽略背景色)
</div>
</template>
</AiSummary>
</div>
</el-col>
</el-row>
</template>
<script setup>
import { ref } from 'vue'
import '@/styles/common.scss'
import AiSummary from '@/components/base/Ai/AiSummary/index.vue'
const span = 24
const aiContent = ref(`整个立法过程反映了美国政治的高度极化特点。民主党全员反对该法案,批评其"劫贫济富"。而共和党内部也有分歧,特别是在财政赤字问题上。马斯克多次公开批评该法案是"疯狂的支出计划"。整个立法过程反映了美国政治的高度极化特点。民主党全员反对该法案,批评其"劫贫济富"。而共和党内部也有分歧,特别是在财政赤字问题上。马斯克多次公开批评该法案是"疯狂的支出计划"。`)
</script>
<style lang="scss" scoped>
.summary-box {
margin-left: 10px;
margin-bottom: 10px;
width: 1019px;
height: 453px;
.content-box{
width: 100%;
height: 100%;
background: var(--color-primary-2);
}
}
</style>
\ No newline at end of file
<template>
<el-row class="wrapper layout-grid-line">
<el-col :span="span">
<pre>
{{
`
import TimeTabPane from '@/components/base/TimeTabPane/index.vue'
<TimeTabPane @time-click="handleTimeClick" />
`
}}
</pre>
<div class="time-box">
<TimeTabPane @time-click="handleTimeClick" />
</div>
</el-col>
</el-row>
</template>
<script setup>
import { ref } from 'vue'
import '@/styles/common.scss'
import TimeTabPane from '@/components/base/TimeTabPane/index.vue'
const span = 12
const handleTimeClick = (val) => {
console.log('val',val);
}
</script>
<style lang="scss" scoped>
.time-box {
width: 700px;
height: 400px;
padding: 100px;
background: #F2F8FF;
border: 1px solid var(--bg-black-5);
}
</style>
\ No newline at end of file
<template>
<el-row class="wrapper layout-grid-line">
<el-col :span="span">
<pre>
{{
`
import TreeChart from '@/components/base/TreeChart/index.vue'
<div class="chart-box">
<TreeChart :treeData="treeData" />
</div>
`
}}
</pre>
<div class="chart-box">
<TreeChart :treeData="treeData" />
</div>
</el-col>
</el-row>
</template>
<script setup>
import { ref } from 'vue'
import '@/styles/common.scss'
import TreeChart from '@/components/base/TreeChart/index.vue'
import CompanyImg from "@/assets/icons/symbol.png";
const span = 12
const treeData = ref([
{
id: 1,
name: 'a1',
symbolSize: 30,
value: 5,
symbol: `image://${CompanyImg}`,
children: [
{
id: 11,
name: 'b1',
symbolSize: 30,
value: 5,
symbol: `image://${CompanyImg}`,
},
{
id: 12,
name: 'b2',
symbolSize: 30,
value: 5,
symbol: `image://${CompanyImg}`,
},
{
id: 13,
name: 'b3',
symbolSize: 30,
value: 5,
symbol: `image://${CompanyImg}`,
},
{
id: 14,
name: 'b4',
symbolSize: 30,
value: 5,
symbol: `image://${CompanyImg}`,
}
]
}
])
</script>
<style lang="scss" scoped>
.chart-box {
width: 700px;
height: 400px;
border: 1px solid var(--bg-black-5);
}
</style>
\ No newline at end of file
...@@ -11,10 +11,15 @@ const span = 24 ...@@ -11,10 +11,15 @@ const span = 24
<pre> <pre>
{{ {{
`import WarnningPane from '@/components/base/WarningPane/index.vue'; `import WarnningPane from '@/components/base/WarningPane/index.vue';
<template> <template>
<WarnningPane warnningLevel="特别重大风险" warnningContent="我是特别重大风险内容文字我是特别重大风险内容文字" /> <WarnningPane warnningLevel="特别重大风险" warnningContent="我是特别重大风险内容我是特别重大风险内容我是特别重大风险内容" />
</template> <WarnningPane warnningLevel="重大风险" warnningContent="我是重大风险内容我是重大风险内容我是重大风险内容" />
`}} <WarnningPane warnningLevel="较大风险" warnningContent="我是较大风险内容我是较大风险内容我是较大风险内容" />
<WarnningPane warnningLevel="一般风险" warnningContent="我是一般风险内容我是一般风险内容我是一般风险内容" />
<WarnningPane warnningLevel="低风险" warnningContent="我是低风险内容我是低风险内容我是低风险内容" />
</template>
`
}}
</pre> </pre>
<div class="warnning-box"> <div class="warnning-box">
<WarnningPane warnningLevel="特别重大风险" warnningContent="我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字" /> <WarnningPane warnningLevel="特别重大风险" warnningContent="我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字我是特别重大风险内容文字" />
......
...@@ -40,12 +40,24 @@ ...@@ -40,12 +40,24 @@
<el-tab-pane label="按钮" lazy> <el-tab-pane label="按钮" lazy>
<ActionButton /> <ActionButton />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="时间选择框" lazy>
<TimeTabPane />
</el-tab-pane>
<el-tab-pane label="Ai智能总结" lazy>
<AiInfo />
</el-tab-pane>
<el-tab-pane label="Ai内容摘要" lazy>
<AiSummary />
</el-tab-pane>
<el-tab-pane label="层级关系图" lazy> <el-tab-pane label="层级关系图" lazy>
<GraphChart /> <GraphChart />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="引力关系图" lazy> <el-tab-pane label="引力关系图" lazy>
<GraphTreeChart /> <GraphTreeChart />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="树状图" lazy>
<TreeChart />
</el-tab-pane>
<el-tab-pane label="词云图" lazy> <el-tab-pane label="词云图" lazy>
<WordCloudChart /> <WordCloudChart />
</el-tab-pane> </el-tab-pane>
...@@ -71,10 +83,14 @@ import PeoplePage from './People/index.vue'; ...@@ -71,10 +83,14 @@ import PeoplePage from './People/index.vue';
import WarnningPane from './WarnningPane/index.vue' import WarnningPane from './WarnningPane/index.vue'
import GraphChart from './GraphChart/index.vue' import GraphChart from './GraphChart/index.vue'
import GraphTreeChart from './GraphTreeChart/index.vue' import GraphTreeChart from './GraphTreeChart/index.vue'
import TreeChart from './TreeChart/index.vue'
import AreaTag from './AreaTag/index.vue' import AreaTag from './AreaTag/index.vue'
import ActionButton from './ActionButton/index.vue' import ActionButton from './ActionButton/index.vue'
import WordCloudChart from './WordCloudChart/index.vue' import WordCloudChart from './WordCloudChart/index.vue'
import NewsPage from './News/index.vue' import NewsPage from './News/index.vue'
import TimeTabPane from './TimeTabPane/index.vue'
import AiInfo from './Ai/AiInfo/index.vue'
import AiSummary from './Ai/AiSummary/index.vue'
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -204,16 +204,20 @@ ...@@ -204,16 +204,20 @@
<div class="coop-members"> <div class="coop-members">
<div class="coop-member"> <div class="coop-member">
<img class="coop-avatar" :src="item.avatar || defaultAvatar" alt="committee-avatar" /> <img class="coop-avatar" :src="item.avatar || defaultAvatar" alt="committee-avatar" />
<div class="coop-member-name" :title="item.name">{{ item.name }}</div> <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>
</div> </div>
<div class="coop-summary" :title="item.desc"> <!-- <div class="coop-summary" :title="item.desc">
{{ item.desc }} {{ item.desc }}
</div> </div> -->
<div class="coop-count"> <div class="coop-count">
{{ `${item.proposalSize ?? (item.bills || []).length}项重点法案` }} {{ `${item.proposalSize ?? (item.bills || []).length}项重点法案` }}
</div> </div>
<slot name="committee-extra" :committee="item" />
</div> </div>
<div class="coop-proposals"> <div class="coop-proposals">
<div <div
...@@ -447,6 +451,7 @@ const handleGetCommitteeList = async () => { ...@@ -447,6 +451,7 @@ const handleGetCommitteeList = async () => {
const descText = billInfoPage[0]?.originDepart || ""; const descText = billInfoPage[0]?.originDepart || "";
return { return {
id: item.id, id: item.id,
nameEn:item.nameEn || "",
avatar: "", avatar: "",
name: item.name || "-", name: item.name || "-",
desc: descText, desc: descText,
...@@ -1232,6 +1237,12 @@ onMounted(() => { ...@@ -1232,6 +1237,12 @@ onMounted(() => {
min-width: 0; min-width: 0;
} }
.coop-member-info {
display: flex;
flex-direction: column;
min-width: 0;
}
.coop-avatar { .coop-avatar {
width: 40px; width: 40px;
height: 40px; height: 40px;
...@@ -1273,6 +1284,17 @@ onMounted(() => { ...@@ -1273,6 +1284,17 @@ onMounted(() => {
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.coop-member-name-en {
color: var(--text-primary-65-color);
font-family: "Microsoft YaHei";
font-size: 14px;
font-weight: 400;
line-height: 22px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.coop-count { .coop-count {
flex-shrink: 0; flex-shrink: 0;
color: #1459bb; color: #1459bb;
...@@ -1284,7 +1306,6 @@ onMounted(() => { ...@@ -1284,7 +1306,6 @@ onMounted(() => {
} }
.coop-proposals { .coop-proposals {
margin-top: 10px;
padding-top: 10px; padding-top: 10px;
border-top: 1px solid #eaeced; border-top: 1px solid #eaeced;
display: grid; display: grid;
......
...@@ -127,7 +127,13 @@ ...@@ -127,7 +127,13 @@
<el-empty v-if="!box5HasData" description="暂无数据" :image-size="100" /> <el-empty v-if="!box5HasData" description="暂无数据" :image-size="100" />
<div v-else id="box5Chart" class="overview-chart"></div> <div v-else id="box5Chart" class="overview-chart"></div>
</div> </div>
<TipTab class="overview-tip" /> <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> </div>
</OverviewCard> </OverviewCard>
<OverviewCard class="overview-card--single box6" title="涉华法案领域分布" :icon="box6HeaderIcon"> <OverviewCard class="overview-card--single box6" title="涉华法案领域分布" :icon="box6HeaderIcon">
...@@ -141,7 +147,13 @@ ...@@ -141,7 +147,13 @@
<el-empty v-if="!box9HasData" description="暂无数据" :image-size="100" /> <el-empty v-if="!box9HasData" description="暂无数据" :image-size="100" />
<div v-else id="box9Chart" class="overview-chart"></div> <div v-else id="box9Chart" class="overview-chart"></div>
</div> </div>
<TipTab class="overview-tip" /> <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> </div>
</OverviewCard> </OverviewCard>
</div> </div>
...@@ -157,7 +169,13 @@ ...@@ -157,7 +169,13 @@
<el-empty v-if="!box7HasData" description="暂无数据" :image-size="100" /> <el-empty v-if="!box7HasData" description="暂无数据" :image-size="100" />
<div v-else id="box7Chart" class="overview-chart"></div> <div v-else id="box7Chart" class="overview-chart"></div>
</div> </div>
<TipTab class="overview-tip" /> <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> </div>
</OverviewCard> </OverviewCard>
<OverviewCard class="overview-card--single box8" title="涉华法案进展分布" :icon="box7HeaderIcon"> <OverviewCard class="overview-card--single box8" title="涉华法案进展分布" :icon="box7HeaderIcon">
...@@ -174,7 +192,13 @@ ...@@ -174,7 +192,13 @@
<div id="box8Chart" class="overview-chart box8-chart"></div> <div id="box8Chart" class="overview-chart box8-chart"></div>
</template> </template>
</div> </div>
<TipTab class="overview-tip" /> <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> </div>
</OverviewCard> </OverviewCard>
<OverviewCard class="overview-card--single box9" title="涉华法案关键条款" :icon="box7HeaderIcon"> <OverviewCard class="overview-card--single box9" title="涉华法案关键条款" :icon="box7HeaderIcon">
...@@ -183,7 +207,13 @@ ...@@ -183,7 +207,13 @@
<el-empty v-if="!wordCloudHasData" description="暂无数据" :image-size="100" /> <el-empty v-if="!wordCloudHasData" description="暂无数据" :image-size="100" />
<WordCloundChart v-else class="overview-chart" width="100%" height="100%" :data="wordCloudData" /> <WordCloundChart v-else class="overview-chart" width="100%" height="100%" :data="wordCloudData" />
</div> </div>
<TipTab class="overview-tip" /> <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> </div>
</OverviewCard> </OverviewCard>
</div> </div>
...@@ -221,6 +251,8 @@ import OverviewCard from "./OverviewCard.vue"; ...@@ -221,6 +251,8 @@ import OverviewCard from "./OverviewCard.vue";
import ResourceLibrarySection from "./ResourceLibrarySection.vue"; import ResourceLibrarySection from "./ResourceLibrarySection.vue";
import { useContainerScroll } from "@/hooks/useScrollShow"; import { useContainerScroll } from "@/hooks/useScrollShow";
import TipTab from "@/components/base/TipTab/index.vue"; 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 WordCloundChart from "@/components/base/WordCloundChart/index.vue";
import getMultiLineChart from "./utils/multiLineChart"; import getMultiLineChart from "./utils/multiLineChart";
...@@ -370,6 +402,36 @@ const box7YearList = ref([ ...@@ -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 box8selectetedTime = ref("2025");
const box8YearList = ref([ const box8YearList = ref([
{ {
...@@ -2109,6 +2171,20 @@ onUnmounted(() => { ...@@ -2109,6 +2171,20 @@ onUnmounted(() => {
.overview-card-body { .overview-card-body {
display: flex; display: flex;
flex-direction: column; 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 { .overview-chart-wrap {
...@@ -2131,8 +2207,17 @@ onUnmounted(() => { ...@@ -2131,8 +2207,17 @@ onUnmounted(() => {
min-height: 0; min-height: 0;
} }
.overview-tip { .overview-tip-row {
margin-top: 10px; margin-top: 10px;
position: relative;
display: flex;
align-items: center;
justify-content: center;
}
.overview-tip-action {
position: absolute;
right: -30px;
} }
} }
} }
......
...@@ -78,14 +78,6 @@ ...@@ -78,14 +78,6 @@
<div class="right-box-bottom" v-if="showActions"> <div class="right-box-bottom" v-if="showActions">
<template v-if="isLoading"> <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="btn3 is-skeleton">
<div class="icon"> <div class="icon">
<el-skeleton-item class="skeleton-action-icon" variant="text" /> <el-skeleton-item class="skeleton-action-icon" variant="text" />
...@@ -96,13 +88,6 @@ ...@@ -96,13 +88,6 @@
</div> </div>
</template> </template>
<template v-else> <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="btn3" @click="emit('open-analysis')">
<div class="icon"> <div class="icon">
<img :src="btnIconAnalysis" alt="" /> <img :src="btnIconAnalysis" alt="" />
...@@ -118,7 +103,6 @@ ...@@ -118,7 +103,6 @@
<script setup> <script setup>
import { computed } from "vue"; import { computed } from "vue";
import btnIconOriginalText from "@/views/thinkTank/ReportDetail/images/btn-icon1.png";
import btnIconAnalysis from "@/views/thinkTank/ReportDetail/images/btn-icon3.png"; import btnIconAnalysis from "@/views/thinkTank/ReportDetail/images/btn-icon3.png";
const props = defineProps({ const props = defineProps({
...@@ -150,7 +134,7 @@ const props = defineProps({ ...@@ -150,7 +134,7 @@ const props = defineProps({
const isLoading = computed(() => !props.billInfo || !props.billInfo.billName); 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> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -363,41 +347,6 @@ const emit = defineEmits(["tab-click", "open-original-text", "open-analysis"]); ...@@ -363,41 +347,6 @@ const emit = defineEmits(["tab-click", "open-original-text", "open-analysis"]);
justify-content: flex-end; justify-content: flex-end;
gap: 8px; 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 { .btn3 {
cursor: pointer; cursor: pointer;
width: 120px; width: 120px;
......
...@@ -7,10 +7,9 @@ ...@@ -7,10 +7,9 @@
:defaultLogo="USALogo" :defaultLogo="USALogo"
:tabs="mainHeaderBtnList" :tabs="mainHeaderBtnList"
:activeTitle="activeTitle" :activeTitle="activeTitle"
:showTabs="!isBillOriginalTextPage" :showTabs="showHeaderTabs"
:showActions="!isBillOriginalTextPage" :showActions="showHeaderActions"
@tab-click="handleClickMainHeaderBtn" @tab-click="handleClickMainHeaderBtn"
@open-original-text="handleOpenBillOriginalText"
@open-analysis="handleAnalysisClick" @open-analysis="handleAnalysisClick"
/> />
...@@ -22,14 +21,13 @@ ...@@ -22,14 +21,13 @@
</template> </template>
<script setup> <script setup>
import { ref, onMounted, computed, watch } from "vue"; import { ref, onMounted, watch } from "vue";
import router from "@/router"; import router from "@/router";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import { getBillInfoGlobal } from "@/api/bill"; import { getBillInfoGlobal } from "@/api/bill";
import BillHeader from "./components/BillHeader.vue"; import BillHeader from "./components/BillHeader.vue";
const route = useRoute(); const route = useRoute();
const isBillOriginalTextPage = computed(() => route.path === "/billLayout/originalText");
import icon1 from "./assets/icons/icon1.svg"; import icon1 from "./assets/icons/icon1.svg";
import icon1Active from "./assets/icons/icon1_active.svg"; import icon1Active from "./assets/icons/icon1_active.svg";
...@@ -55,16 +53,6 @@ const getBillInfoGlobalFn = async () => { ...@@ -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([ const mainHeaderBtnList = ref([
{ {
icon: icon1, icon: icon1,
...@@ -93,6 +81,8 @@ const mainHeaderBtnList = ref([ ...@@ -93,6 +81,8 @@ const mainHeaderBtnList = ref([
]); ]);
const activeTitle = ref("法案概况"); const activeTitle = ref("法案概况");
const showHeaderTabs = ref(true);
const showHeaderActions = ref(true);
const getActiveTitleByRoutePath = path => { const getActiveTitleByRoutePath = path => {
if (path.startsWith("/billLayout/deepDig")) return "深度挖掘"; if (path.startsWith("/billLayout/deepDig")) return "深度挖掘";
...@@ -102,8 +92,12 @@ const getActiveTitleByRoutePath = path => { ...@@ -102,8 +92,12 @@ const getActiveTitleByRoutePath = path => {
return "法案概况"; return "法案概况";
}; };
const syncActiveTitleFromRoute = () => { const syncHeaderStateFromRoute = () => {
const currentPath = route.path || "";
activeTitle.value = getActiveTitleByRoutePath(route.path); activeTitle.value = getActiveTitleByRoutePath(route.path);
const isVersionCompare = currentPath.startsWith("/billLayout/versionCompare");
showHeaderTabs.value = !isVersionCompare;
showHeaderActions.value = !isVersionCompare;
}; };
const handleClickMainHeaderBtn = item => { const handleClickMainHeaderBtn = item => {
...@@ -134,7 +128,7 @@ const handleAnalysisClick = () => { ...@@ -134,7 +128,7 @@ const handleAnalysisClick = () => {
onMounted(() => { onMounted(() => {
getBillInfoGlobalFn(); getBillInfoGlobalFn();
// 以当前路由为准,避免 sessionStorage 造成高亮错乱 // 以当前路由为准,避免 sessionStorage 造成高亮错乱
syncActiveTitleFromRoute(); syncHeaderStateFromRoute();
// 兜底:如果未来出现未知路由且有缓存,再用缓存 // 兜底:如果未来出现未知路由且有缓存,再用缓存
const cachedTitle = window.sessionStorage.getItem("activeTitle"); const cachedTitle = window.sessionStorage.getItem("activeTitle");
if (!activeTitle.value && cachedTitle) activeTitle.value = cachedTitle; if (!activeTitle.value && cachedTitle) activeTitle.value = cachedTitle;
...@@ -143,7 +137,7 @@ onMounted(() => { ...@@ -143,7 +137,7 @@ onMounted(() => {
watch( watch(
() => route.path, () => route.path,
() => { () => {
syncActiveTitleFromRoute(); syncHeaderStateFromRoute();
}, },
{ immediate: true } { immediate: true }
); );
......
...@@ -696,6 +696,7 @@ onMounted(() => { ...@@ -696,6 +696,7 @@ onMounted(() => {
position: absolute; position: absolute;
right: 84px; right: 84px;
top: 15px; top: 15px;
.btn { .btn {
height: 28px; height: 28px;
......
<template> <template>
<div class="process-overview-wrap"> <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"> <AnalysisBox title="流程概要" :showAllBtn="false">
<div class="main"> <div class="main">
<div class="left" :style="{ width: (maxLineWidth + 250) + 'px' }"> <div class="left" :style="{ width: (maxLineWidth + 250) + 'px' }">
...@@ -207,17 +99,6 @@ ...@@ -207,17 +99,6 @@
</div> </div>
</div> </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> </AnalysisBox>
<ProcessOverviewDetailDialog <ProcessOverviewDetailDialog
......
...@@ -29,7 +29,7 @@ const siderBtnList = ref([ ...@@ -29,7 +29,7 @@ const siderBtnList = ref([
path: '/billLayout/bill/background' path: '/billLayout/bill/background'
}, },
{ {
name: '内容概要', name: '法案原文',
path: '/billLayout/bill/template' path: '/billLayout/bill/template'
}, },
]) ])
...@@ -38,7 +38,7 @@ const siderBtnActive = ref("法案简介"); ...@@ -38,7 +38,7 @@ const siderBtnActive = ref("法案简介");
const getSiderActiveByRoutePath = path => { const getSiderActiveByRoutePath = path => {
if (path.includes("/billLayout/bill/background")) return "法案背景"; if (path.includes("/billLayout/bill/background")) return "法案背景";
if (path.includes("/billLayout/bill/template")) return "内容概要"; if (path.includes("/billLayout/bill/template")) return "法案原文";
return "法案简介"; return "法案简介";
}; };
......
...@@ -387,7 +387,7 @@ const handleChangeBill = val => { ...@@ -387,7 +387,7 @@ const handleChangeBill = val => {
}; };
const handleOpenVersionCompare = () => { const handleOpenVersionCompare = () => {
const targetUrl = `/billLayout/deepDig/processOverview?billId=${route.query.billId}`; const targetUrl = `/billLayout/versionCompare?billId=${route.query.billId}`;
window.open(targetUrl, "_blank"); window.open(targetUrl, "_blank");
}; };
...@@ -404,8 +404,8 @@ const handleGetBillList = async () => { ...@@ -404,8 +404,8 @@ const handleGetBillList = async () => {
billList.value = rawList billList.value = rawList
.map(item => { .map(item => {
return { return {
label: item.bbmc, label: item.contentZh,
value: item.bbmc value: item.contentZh
}; };
}) })
.filter(item => { .filter(item => {
......
<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>
差异被折叠。
<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.000000" height="16.000000" fill="none" customFrame="#000000">
<rect id="Line/Down" width="16.000000" height="16.000000" x="0.000000" y="0.000000" />
<path id="路径" d="M13.7502 4L12.5783 4C12.4986 4 12.4236 4.03906 12.3768 4.10313L7.9377 10.2219L3.49864 4.10313C3.45176 4.03906 3.37676 4 3.29707 4L2.1252 4C2.02364 4 1.96426 4.11562 2.02364 4.19844L7.53301 11.7937C7.73301 12.0688 8.14239 12.0688 8.34082 11.7937L13.8502 4.19844C13.9111 4.11562 13.8518 4 13.7502 4Z" fill="rgb(59,65,75)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.000000" height="16.000000" fill="none" customFrame="#000000">
<rect id="Line/Up" width="16.000000" height="16.000000" x="0.000000" y="0.000000" />
<path id="路径" d="M13.914 11.8016L8.40466 4.20625C8.20465 3.93125 7.79528 3.93125 7.59684 4.20625L2.0859 11.8016C2.02653 11.8844 2.08434 12 2.18747 12L3.35934 12C3.43903 12 3.51403 11.9609 3.5609 11.8969L7.99997 5.77812L12.439 11.8969C12.4859 11.9609 12.5609 12 12.6406 12L13.8125 12C13.914 12 13.9734 11.8844 13.914 11.8016L13.914 11.8016Z" fill="rgb(5,95,194)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.000000" height="16.000000" fill="none" customFrame="#000000">
<rect id="Line/Close" width="16.000000" height="16.000000" x="0.000000" y="0.000000" />
<path id="路径" d="M8.82436 8L12.9699 3.20092C13.0394 3.12117 12.9809 3 12.8735 3L11.6133 3C11.5391 3 11.468 3.03221 11.4191 3.08742L8 7.04601L4.58095 3.08742C4.53357 3.03221 4.4625 3 4.3867 3L3.12647 3C3.01908 3 2.96065 3.12117 3.03013 3.20092L7.17564 8L3.03013 12.7991C2.96065 12.8788 3.01908 13 3.12647 13L4.3867 13C4.46092 13 4.53199 12.9678 4.58095 12.9126L8 8.95399L11.4191 12.9126C11.4664 12.9678 11.5375 13 11.6133 13L12.8735 13C12.9809 13 13.0394 12.8788 12.9699 12.7991L8.82436 8Z" fill="rgb(5,95,194)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.000000" height="16.000000" fill="none" customFrame="#000000">
<rect id="Line/Close" width="16.000000" height="16.000000" x="0.000000" y="0.000000" />
<path id="路径" d="M8.82436 8L12.9699 3.20092C13.0394 3.12117 12.9809 3 12.8735 3L11.6133 3C11.5391 3 11.468 3.03221 11.4191 3.08742L8 7.04601L4.58095 3.08742C4.53357 3.03221 4.4625 3 4.3867 3L3.12647 3C3.01908 3 2.96065 3.12117 3.03013 3.20092L7.17564 8L3.03013 12.7991C2.96065 12.8788 3.01908 13 3.12647 13L4.3867 13C4.46092 13 4.53199 12.9678 4.58095 12.9126L8 8.95399L11.4191 12.9126C11.4664 12.9678 11.5375 13 11.6133 13L12.8735 13C12.9809 13 13.0394 12.8788 12.9699 12.7991L8.82436 8Z" fill="rgb(132,136,142)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 16 14" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.000000" height="14.000000" fill="none">
<rect id="降序 1" width="16.000000" height="14.000000" x="0.000000" y="0.000000" />
<path id="矢量 469" d="M5.19867 14C5.1619 14 5.12548 13.9955 5.08942 13.9865C5.05336 13.9776 5.01834 13.9643 4.98437 13.9467C4.9504 13.9291 4.91813 13.9076 4.88755 13.882C4.85698 13.8565 4.82869 13.8275 4.80269 13.795C4.77669 13.7625 4.75348 13.7271 4.73305 13.6889C4.71262 13.6507 4.69537 13.6103 4.6813 13.5679C4.66723 13.5254 4.65661 13.4816 4.64943 13.4366C4.64226 13.3915 4.63867 13.346 4.63867 13.3L4.63867 0.7C4.63867 0.654037 4.64226 0.608516 4.64943 0.563437C4.65661 0.518357 4.66723 0.474586 4.6813 0.432122C4.69537 0.389658 4.71262 0.349317 4.73305 0.311101C4.75348 0.272884 4.77669 0.237526 4.80269 0.205025C4.82869 0.172525 4.85698 0.143507 4.88755 0.117971C4.91813 0.0924358 4.9504 0.0708735 4.98437 0.0532843C5.01834 0.0356952 5.05336 0.0224172 5.08942 0.0134503C5.12548 0.00448343 5.1619 0 5.19867 0C5.23544 0 5.27186 0.00448343 5.30792 0.0134503C5.34399 0.0224172 5.379 0.0356952 5.41297 0.0532843C5.44695 0.0708735 5.47922 0.0924358 5.50979 0.117971C5.54036 0.143507 5.56865 0.172525 5.59465 0.205025C5.62065 0.237526 5.64387 0.272884 5.66429 0.311101C5.68472 0.349317 5.70197 0.389658 5.71604 0.432122C5.73012 0.474586 5.74074 0.518357 5.74791 0.563437C5.75508 0.608516 5.75867 0.654037 5.75867 0.7L5.75867 13.3C5.75867 13.346 5.75508 13.3915 5.74791 13.4366C5.74074 13.4816 5.73012 13.5254 5.71604 13.5679C5.70197 13.6103 5.68472 13.6507 5.66429 13.6889C5.64387 13.7271 5.62065 13.7625 5.59465 13.795C5.56865 13.8275 5.54036 13.8565 5.50979 13.882C5.47922 13.9076 5.44695 13.9291 5.41297 13.9467C5.379 13.9643 5.34399 13.9776 5.30792 13.9865C5.27186 13.9955 5.23544 14 5.19867 14L5.19867 14ZM11.1963 10.297L8.39627 13.797C8.34144 13.8593 8.27984 13.9083 8.21147 13.944C8.1433 13.979 8.07237 13.9965 7.99867 13.9965C7.92498 13.9965 7.85404 13.979 7.78587 13.944C7.71745 13.9085 7.65705 13.858 7.60467 13.7925C7.55228 13.727 7.51188 13.6515 7.48347 13.566C7.4545 13.481 7.43957 13.3924 7.43867 13.3L7.43867 0.7C7.43867 0.654037 7.44226 0.608516 7.44943 0.563437C7.4566 0.518357 7.46723 0.474586 7.4813 0.432122C7.49537 0.389658 7.51262 0.349317 7.53305 0.311101C7.55348 0.272884 7.57669 0.237526 7.60269 0.205025C7.62869 0.172525 7.65698 0.143507 7.68755 0.117971C7.71813 0.0924358 7.7504 0.0708735 7.78437 0.0532843C7.81834 0.0356952 7.85336 0.0224172 7.88942 0.0134503C7.92548 0.00448343 7.9619 0 7.99867 0C8.03544 0 8.07186 0.00448343 8.10792 0.0134503C8.14399 0.0224172 8.179 0.0356952 8.21297 0.0532843C8.24694 0.0708735 8.27922 0.0924358 8.30979 0.117971C8.34036 0.143507 8.36865 0.172525 8.39465 0.205025C8.42065 0.237526 8.44387 0.272884 8.46429 0.311101C8.48472 0.349317 8.50197 0.389658 8.51604 0.432122C8.53012 0.474586 8.54074 0.518357 8.54791 0.563437C8.55509 0.608516 8.55867 0.654037 8.55867 0.7L8.55867 11.613L10.4011 9.303C10.4272 9.27036 10.4556 9.24123 10.4863 9.21559C10.517 9.18995 10.5494 9.1683 10.5835 9.15064C10.6176 9.13298 10.6528 9.11964 10.689 9.11064C10.7252 9.10164 10.7618 9.09713 10.7987 9.09713C10.8356 9.09713 10.8722 9.10164 10.9084 9.11064C10.9446 9.11964 10.9797 9.13298 11.0139 9.15064C11.048 9.1683 11.0804 9.18995 11.1111 9.21559C11.1418 9.24123 11.1702 9.27036 11.1963 9.303C11.2224 9.33563 11.2457 9.37114 11.2662 9.40951C11.2867 9.44788 11.304 9.48839 11.3182 9.53102C11.3323 9.57366 11.343 9.61761 11.3502 9.66288C11.3574 9.70814 11.361 9.75385 11.361 9.8C11.361 9.84615 11.3574 9.89186 11.3502 9.93712C11.343 9.98238 11.3323 10.0263 11.3182 10.069C11.304 10.1116 11.2867 10.1521 11.2662 10.1905C11.2457 10.2289 11.2224 10.2644 11.1963 10.297L11.1963 10.297Z" fill="rgb(95,101,108)" fill-rule="nonzero" />
</svg>
<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.000000" height="16.000000" fill="none" customFrame="#000000">
<rect id="Line/Download" width="16.000000" height="16.000000" x="0.000000" y="0.000000" />
<path id="形状" d="M7.90156 10.3281C7.95156 10.3922 8.04844 10.3922 8.09844 10.3281L9.84844 8.11406C9.9125 8.03281 9.85469 7.9125 9.75 7.9125L8.59219 7.9125L8.59219 2.625C8.59219 2.55625 8.53594 2.5 8.46719 2.5L7.52969 2.5C7.46094 2.5 7.40469 2.55625 7.40469 2.625L7.40469 7.91094L6.25 7.91094C6.14531 7.91094 6.0875 8.03125 6.15156 8.1125L7.90156 10.3281ZM12.7812 9.78125L13.7188 9.78125C13.7875 9.78125 13.8438 9.8375 13.8438 9.90625L13.8438 13C13.8438 13.2766 13.6203 13.5 13.3438 13.5L2.65625 13.5C2.37969 13.5 2.15625 13.2766 2.15625 13L2.15625 9.90625C2.15625 9.8375 2.2125 9.78125 2.28125 9.78125L3.21875 9.78125C3.2875 9.78125 3.34375 9.8375 3.34375 9.90625L3.34375 12.3125L12.6562 12.3125L12.6562 9.90625C12.6562 9.8375 12.7125 9.78125 12.7812 9.78125Z" fill="rgb(95,101,108)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.000000" height="24.000000" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_0" x1="12" x2="12" y1="4" y2="20" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(22,119,255)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(22,119,255)" offset="1" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect id="容器 1594" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
<path id="矢量 1678" d="M18.1122 18.2262C18.0733 18.2132 18.0396 18.1882 18.0158 18.1549C17.992 18.1216 17.9794 18.0816 17.9797 18.0406L17.9797 17.7399C17.9797 17.6494 17.9559 17.5606 17.9106 17.4823C17.8653 17.404 17.8001 17.3389 17.7217 17.2937C17.6433 17.2485 17.5543 17.2247 17.4637 17.2247L7.23085 17.2247C7.14027 17.2247 7.05129 17.2485 6.97284 17.2937C6.8944 17.3389 6.82926 17.404 6.78397 17.4823C6.73868 17.5606 6.71483 17.6494 6.71483 17.7399L6.71483 17.9628C6.71486 17.9937 6.70754 18.0241 6.69347 18.0517C6.6794 18.0792 6.65899 18.103 6.63392 18.1211C6.60884 18.1392 6.57982 18.1511 6.54924 18.1558C6.25727 18.2014 5.98027 18.3153 5.74095 18.4884C5.50163 18.6614 5.30681 18.8887 5.17246 19.1514C5.03811 19.4142 4.96806 19.705 4.96805 20L19.4006 20C19.4004 19.6065 19.2757 19.2232 19.0443 18.9047C18.813 18.5861 18.4867 18.3487 18.1122 18.2262ZM7.02145 14.107C7.0551 14.139 7.09459 14.1643 7.13779 14.1815C7.18099 14.1987 7.22709 14.2074 7.27359 14.2072C7.34669 14.207 7.41806 14.185 7.47853 14.144C7.53899 14.103 7.58579 14.0449 7.6129 13.9771C7.64001 13.9093 7.64619 13.835 7.63066 13.7637C7.61512 13.6923 7.57858 13.6273 7.52572 13.5769L5.35053 11.5183C5.3042 11.4735 5.24676 11.4418 5.18411 11.4265C5.12146 11.4112 5.05585 11.4128 4.99403 11.4312C4.93221 11.4496 4.87641 11.4841 4.83237 11.5311C4.78779 11.5774 4.75633 11.6347 4.74121 11.6972C4.72608 11.7596 4.72784 11.8249 4.7463 11.8864C4.76476 11.948 4.79925 12.0035 4.84626 12.0474L7.02145 14.107ZM7.42637 15.3485C7.41596 15.2851 7.38903 15.2256 7.34827 15.1759C7.30752 15.1262 7.25438 15.0881 7.1942 15.0654C7.13402 15.0427 7.06891 15.0363 7.00543 15.0467L4.30673 15.4904C4.23036 15.503 4.15995 15.5394 4.10559 15.5944C4.05123 15.6495 4.01571 15.7203 4.00413 15.7967C3.99254 15.8731 4.00549 15.9512 4.0411 16.0198C4.07672 16.0884 4.13318 16.144 4.20239 16.1786C4.27161 16.2132 4.35002 16.2251 4.42639 16.2125L7.12509 15.7688C7.18844 15.7582 7.2479 15.7312 7.29752 15.6905C7.34713 15.6498 7.38515 15.5967 7.40776 15.5367C7.43038 15.4767 7.43679 15.4118 7.42637 15.3485ZM19.6976 15.3517L14.2297 10.2672L16.1955 8.3057L16.1966 8.30677C16.2541 8.36406 16.3257 8.40526 16.4042 8.42622C16.4827 8.44719 16.5654 8.44719 16.6439 8.42622C16.7224 8.40526 16.794 8.36406 16.8515 8.30677L16.8707 8.28864C16.9282 8.23108 16.9695 8.15948 16.9905 8.08099C17.0115 8.0025 17.0115 7.91988 16.9905 7.84139C16.9695 7.7629 16.9282 7.6913 16.8707 7.63374L13.3665 4.13527C13.3088 4.07793 13.2371 4.03671 13.1585 4.01573C13.0799 3.99476 12.9971 3.99476 12.9185 4.01573C12.8399 4.03671 12.7682 4.07793 12.7105 4.13527L12.6913 4.1534C12.6335 4.21077 12.5919 4.28235 12.5708 4.36091C12.5496 4.43947 12.5496 4.52222 12.5708 4.60078C12.5919 4.67934 12.6335 4.75093 12.6913 4.8083L12.6924 4.8083L7.79602 9.69656L7.79495 9.6955C7.7373 9.63816 7.66558 9.59694 7.58696 9.57596C7.50834 9.55499 7.42559 9.55499 7.34697 9.57596C7.26835 9.59694 7.19663 9.63816 7.13897 9.6955L7.12188 9.71363C7.06445 9.77119 7.02316 9.84279 7.00215 9.92128C6.98114 9.99977 6.98114 10.0824 7.00215 10.1609C7.02316 10.2394 7.06445 10.311 7.12188 10.3685L10.6261 13.8681C10.6838 13.9254 10.7555 13.9666 10.8341 13.9876C10.9127 14.0086 10.9955 14.0086 11.0741 13.9876C11.1527 13.9666 11.2245 13.9254 11.2821 13.8681L11.3003 13.8489C11.3577 13.7914 11.3989 13.7199 11.4199 13.6416C11.4409 13.5632 11.4409 13.4807 11.4199 13.4023C11.3989 13.324 11.3577 13.2525 11.3003 13.195L11.2992 13.194L13.2639 11.2314L18.3568 16.6903C18.4729 16.8149 18.6205 16.906 18.784 16.9539C18.9476 17.0018 19.1211 17.0048 19.2862 16.9625C19.4513 16.9203 19.6019 16.8343 19.7222 16.7138C19.8427 16.5936 19.9285 16.4433 19.9706 16.2786C20.0127 16.1138 20.0096 15.9408 19.9615 15.7777C19.9135 15.6146 19.8223 15.4675 19.6976 15.3517ZM9.16674 10.1051C9.14288 10.1288 9.11321 10.1458 9.08069 10.1545C9.04817 10.1632 9.01394 10.1632 8.98142 10.1545C8.9489 10.1458 8.91923 10.1288 8.89537 10.1051L8.88683 10.0965C8.86308 10.0727 8.846 10.0431 8.83731 10.0106C8.82863 9.97817 8.82863 9.94399 8.83731 9.91153C8.846 9.87906 8.86308 9.84944 8.88683 9.82562L12.8216 5.8973C12.8964 5.82264 13.0193 5.82264 13.0941 5.8973L13.1005 5.90477C13.1242 5.92858 13.1413 5.95821 13.15 5.99067C13.1587 6.02314 13.1587 6.05732 13.15 6.08978C13.1413 6.12225 13.1242 6.15187 13.1005 6.17569L9.16674 10.1051Z" fill="url(#paint_linear_0)" fill-rule="nonzero" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.000000" height="24.000000" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_9" x1="12" x2="12" y1="4.02734375" y2="20.0272427" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(47,84,235)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(47,84,235)" offset="1" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect id="容器 1602" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
<path id="合并" d="M12.2963 5.02783C12.2963 4.37781 12.9067 3.90055 13.5375 4.05737L19.2413 5.47529C19.687 5.58611 20 5.98639 20 6.44575L20 19.0272C20 19.5795 19.5523 20.0272 19 20.0272L13.2963 20.0272C12.744 20.0272 12.2963 19.5795 12.2963 19.0272L12.2963 5.02783ZM4 9.94126C4 9.48913 4.30338 9.09324 4.73995 8.97567L9.85106 7.59918C10.4865 7.42806 11.1111 7.90672 11.1111 8.56478L11.1111 19.0272C11.1111 19.5795 10.6634 20.0272 10.1111 20.0272L5 20.0272C4.44772 20.0272 4 19.5795 4 19.0272L4 9.94126ZM13.9603 8.21739L18.336 8.21739C18.6005 8.21739 18.8148 8.43175 18.8148 8.69617C18.8148 8.96059 18.6005 9.17495 18.336 9.17495L13.9603 9.17495C13.6958 9.17495 13.4815 8.96059 13.4815 8.69617C13.4815 8.43175 13.6958 8.21739 13.9603 8.21739ZM13.9603 10.1325L18.336 10.1325C18.6005 10.1325 18.8148 10.3469 18.8148 10.6113C18.8148 10.8757 18.6005 11.0901 18.336 11.0901L13.9603 11.0901C13.6958 11.0901 13.4815 10.8757 13.4815 10.6113C13.4815 10.3469 13.6958 10.1325 13.9603 10.1325ZM5.66396 11.0901L9.44715 11.0901C9.71157 11.0901 9.92593 11.3044 9.92593 11.5688C9.92593 11.8333 9.71157 12.0476 9.44715 12.0476L5.66396 12.0476C5.39954 12.0476 5.18519 11.8333 5.18519 11.5688C5.18519 11.3044 5.39954 11.0901 5.66396 11.0901ZM13.9603 12.0476L18.336 12.0476C18.6005 12.0476 18.8148 12.262 18.8148 12.5264C18.8148 12.7908 18.6005 13.0052 18.336 13.0052L13.9603 13.0052C13.6958 13.0052 13.4815 12.7908 13.4815 12.5264C13.4815 12.262 13.6958 12.0476 13.9603 12.0476ZM5.66396 13.0052L9.44715 13.0052C9.71157 13.0052 9.92593 13.2195 9.92593 13.4839C9.92593 13.7484 9.71157 13.9627 9.44715 13.9627L5.66396 13.9627C5.39954 13.9627 5.18519 13.7484 5.18519 13.4839C5.18519 13.2195 5.39954 13.0052 5.66396 13.0052ZM13.9603 13.9627L18.336 13.9627C18.6005 13.9627 18.8148 14.1771 18.8148 14.4415C18.8148 14.7059 18.6005 14.9203 18.336 14.9203L13.9603 14.9203C13.6958 14.9203 13.4815 14.7059 13.4815 14.4415C13.4815 14.1771 13.6958 13.9627 13.9603 13.9627ZM9.44715 15.8778C9.71157 15.8778 9.92593 15.6635 9.92593 15.3991C9.92593 15.1346 9.71157 14.9203 9.44715 14.9203L5.66396 14.9203C5.39954 14.9203 5.18519 15.1346 5.18519 15.3991C5.18519 15.6635 5.39954 15.8778 5.66396 15.8778L9.44715 15.8778Z" fill="url(#paint_linear_9)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.000000" height="24.000000" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_10" x1="12" x2="12" y1="4" y2="20" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(114,46,209)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(114,46,209)" offset="1" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect id="容器 1604" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
<path id="矢量 1680" d="M9.63557 4.71309L9.63557 4.71448C9.53504 4.71448 9.45369 4.6337 9.45369 4.53621L9.45369 4.35655C9.45404 4.16017 9.61674 4 9.81746 4L12.0001 4L14.1827 4C14.3837 4 14.5465 4.16017 14.5465 4.35655L14.5465 4.53482C14.5465 4.6337 14.4651 4.71309 14.3646 4.71309C14.264 4.71309 14.1827 4.79248 14.1827 4.89137L14.1827 8.45125C14.1827 8.51532 14.2001 8.57799 14.2335 8.63231L19.7952 17.8482C20.3689 18.798 19.6698 20 18.5429 20L5.45721 20C4.33038 20 3.63126 18.798 4.20498 17.8482L9.76666 8.63231C9.80005 8.57799 9.81746 8.51532 9.81746 8.45125L9.81746 4.89137C9.81746 4.79248 9.73611 4.71309 9.63557 4.71309ZM10.545 15.0529C10.545 14.4624 10.0565 13.9833 9.45369 13.9833C8.85084 13.9833 8.36238 14.4624 8.36238 15.0529C8.36238 15.6435 8.85084 16.1226 9.45369 16.1226C10.0565 16.1226 10.545 15.6435 10.545 15.0529ZM15.0921 14.6964C15.5944 14.6964 16.0015 15.0961 16.0015 15.5877C16.0015 16.0794 15.5944 16.4791 15.0921 16.4791C14.5898 16.4791 14.1827 16.0794 14.1827 15.5877C14.1827 15.0961 14.5898 14.6964 15.0921 14.6964ZM12.7276 17.5487C12.7276 17.1546 12.4018 16.8357 12.0001 16.8357C11.5983 16.8357 11.2725 17.1546 11.2725 17.5487C11.2725 17.9429 11.5983 18.2618 12.0001 18.2618C12.4018 18.2618 12.7276 17.9429 12.7276 17.5487Z" fill="url(#paint_linear_10)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.000000" height="24.000000" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_7" x1="12" x2="12" y1="5" y2="19" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(250,173,20)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(250,173,20)" offset="1" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect id="容器 1596" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
<path id="矢量 810" d="M17.6869 11.7998C18.0371 11.7998 18.3372 11.5028 18.3372 11.1564L18.3372 10.6204L15.686 10.6204L15.686 11.1069C15.686 11.4534 15.9862 11.7503 16.3363 11.7503L16.3363 16.076L17.6869 16.076L17.6869 11.7998L17.6869 11.7998ZM14.3354 11.7998C14.6856 11.7998 14.9857 11.5028 14.9857 11.1564L14.9857 10.6204L12.3346 10.6204L12.3346 11.1069C12.3346 11.4534 12.6347 11.7503 12.9848 11.7503L12.9848 16.076L14.3354 16.076L14.3354 11.7998L14.3354 11.7998ZM10.984 11.7998C11.1841 11.7998 11.3341 11.7503 11.4342 11.6018C11.5842 11.4534 11.6343 11.3049 11.6343 11.1564L11.6343 10.6204L8.98308 10.6204L8.98308 11.1069C8.98308 11.3049 9.0331 11.4534 9.18317 11.5523C9.33323 11.7008 9.4833 11.7503 9.63337 11.7503L9.63337 16.076L10.984 16.076L10.984 11.7998L10.984 11.7998ZM7.63248 11.7998C7.83257 11.7998 7.98264 11.7503 8.08268 11.6018C8.23275 11.4534 8.28277 11.3049 8.28277 11.1564L8.28277 10.6204L5.6316 10.6204L5.6316 11.1069C5.6316 11.3049 5.68162 11.4534 5.83169 11.5523C5.98176 11.7008 6.13182 11.7503 6.28189 11.7503L6.28189 16.076L7.63248 16.076L7.63248 11.7998L7.63248 11.7998ZM12.3346 5.11136L18.6874 8.97172C18.9375 9.12019 19.0375 9.41714 18.9875 9.7141C18.8875 10.011 18.6373 10.209 18.3372 10.209L5.68162 10.209C5.38149 10.209 5.13138 10.011 5.03134 9.7141C4.93129 9.41714 5.08136 9.12019 5.33147 8.97172L11.6843 5.11136C11.8844 4.96288 12.1345 4.96288 12.3346 5.11136ZM11.9844 9.51613C12.7347 9.51613 13.335 8.92223 13.335 8.17985C13.335 7.48696 12.7347 6.89306 11.9844 6.89306C11.2341 6.89306 10.6338 7.48696 10.6338 8.22934C10.6838 8.92223 11.2841 9.51613 11.9844 9.51613ZM6.16664 17.4444L17.8333 17.4445C18.3835 17.4445 18.6874 17.9297 18.6874 18.4741L18.6874 19L5.33147 19L5.33147 18.4741C5.33147 17.9297 5.6164 17.4444 6.16664 17.4444ZM6.16664 16.497L17.8333 16.4971L17.8333 17.4445L6.16664 17.4444L6.16664 16.497Z" fill="url(#paint_linear_7)" fill-rule="nonzero" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.000000" height="24.000000" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_1" x1="12" x2="12" y1="3" y2="21" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(114,46,209)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(114,46,209)" offset="1" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect id="容器 1598" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
<path id="合并" d="M12 5.66667C12.3728 5.66667 12.675 5.36446 12.675 4.99167L12.675 3.675C12.675 3.30221 12.3728 3 12 3C11.6272 3 11.325 3.30221 11.325 3.675L11.325 4.99167C11.325 5.36446 11.6272 5.66667 12 5.66667ZM5.44365 5.52492C5.18004 5.78527 5.18004 6.20738 5.44365 6.46773L6.39824 7.41054C6.66184 7.67089 7.08923 7.67089 7.35283 7.41054C7.61644 7.15019 7.61644 6.72808 7.35283 6.46773L6.39824 5.52492C6.13464 5.26457 5.70725 5.26457 5.44365 5.52492ZM18.3319 5.52589C18.0683 5.26554 17.6409 5.26554 17.3773 5.52589L16.4227 6.4687C16.1591 6.72905 16.1591 7.15116 16.4227 7.41151C16.6863 7.67186 17.1137 7.67186 17.3773 7.41151L18.3319 6.4687C18.5955 6.20835 18.5955 5.78624 18.3319 5.52589ZM6.6 11.8889C6.6 8.94337 9.01766 6.55556 12 6.55556C14.9823 6.55556 17.4 8.94337 17.4 11.8889C17.4 13.3616 16.7956 14.695 15.8184 15.6601C15.5683 15.9072 15.22 16.1387 14.9249 16.3336L14.925 16.9762C14.925 17.9702 14.1191 18.7763 13.1251 18.7761L13.1251 18.7758L12.675 18.776L12.675 15.2298C12.7037 15.2093 12.7312 15.1862 12.7571 15.1607L14.6663 13.275C14.9299 13.0147 14.9299 12.5926 14.6663 12.3322C14.4027 12.0719 13.9753 12.0719 13.7117 12.3322L11.9361 14.086L10.1604 12.3322C9.89679 12.0719 9.4694 12.0719 9.2058 12.3322C8.94219 12.5926 8.94219 13.0147 9.2058 13.275L11.115 15.1607C11.1773 15.2222 11.2487 15.2692 11.325 15.3016L11.325 18.7761L10.875 18.7761L10.875 18.7765C9.88095 18.7767 9.07494 17.9705 9.07494 16.9764L9.07506 16.3337C8.77997 16.1388 8.43175 15.9072 8.18162 15.6601C7.20442 14.695 6.6 13.3616 6.6 11.8889ZM5.7 11.8889C5.7 11.5207 5.40152 11.2222 5.03333 11.2222L3.66667 11.2222C3.29848 11.2222 3 11.5207 3 11.8889C3 12.2571 3.29848 12.5556 3.66667 12.5556L5.03333 12.5556C5.40152 12.5556 5.7 12.2571 5.7 11.8889ZM21 11.8889C21 11.5207 20.7015 11.2222 20.3333 11.2222L18.9667 11.2222C18.5985 11.2222 18.3 11.5207 18.3 11.8889C18.3 12.2571 18.5985 12.5556 18.9667 12.5556L20.3333 12.5556C20.7015 12.5556 21 12.2571 21 11.8889ZM14.475 20.3333C14.475 19.9651 14.1765 19.6667 13.8083 19.6667L10.1917 19.6667C9.82348 19.6667 9.525 19.9651 9.525 20.3333C9.525 20.7015 9.82348 21 10.1917 21L13.8083 21C14.1765 21 14.475 20.7015 14.475 20.3333Z" fill="url(#paint_linear_1)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.000000" height="24.000000" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_2" x1="12" x2="12" y1="4" y2="20" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(8,151,156)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(8,151,156)" offset="1" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect id="容器 1595" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
<path id="矢量 1663" d="M19.7026 19.1999L11.4944 19.1999C11.3755 19.1999 11.2566 19.4823 11.2566 19.5966L11.2566 19.6537C11.2566 19.768 11.3755 20 11.4944 20L19.7026 20C19.8216 20 19.9407 19.768 19.9407 19.6537L19.9407 19.5966C19.9407 19.4823 19.8216 19.1999 19.7026 19.1999ZM19.9405 17.4857C19.7621 17.1429 19.5242 17.0857 19.3457 17.0286C18.8104 16.9714 18.3941 16.9143 18.2156 16.8571C17.9182 16.7429 17.6803 16.6286 17.4424 16.4571C17.2639 16.3429 16.9665 16.0571 16.9071 15.8857C16.7881 15.7143 16.8476 15.2571 16.9071 15.0286C16.9665 14.8571 17.3234 14.4 17.3234 14.4C17.7993 13.9429 18.0967 13.3143 18.0967 12.6857C18.0967 11.8286 17.6208 11.0286 16.8476 10.6286C16.0744 10.2286 15.1227 10.2286 14.3494 10.6286C13.5762 11.0286 13.1004 11.8286 13.1004 12.6857C13.1004 13.3714 13.3978 14 13.8736 14.4C13.8736 14.4 14.29 14.8571 14.3494 15.0286C14.4089 15.2571 14.4684 15.6571 14.3494 15.8857C14.29 16.0571 13.9926 16.3429 13.8141 16.4571C13.5762 16.6286 13.3383 16.7429 13.0409 16.8571C12.8625 16.9143 12.4461 16.9143 11.9108 17.0286C11.7323 17.0286 11.4944 17.1429 11.316 17.4857C11.2565 17.6 11.2565 18.2857 11.316 18.4C11.3755 18.5143 11.6134 18.7429 11.6134 18.7429L19.7026 18.7429C19.7026 18.7429 19.9405 18.5143 20 18.4C20 18.2857 20 17.6 19.9405 17.4857ZM10.7212 17.2571C10.9591 16.8571 11.316 16.5714 11.7323 16.5143C11.9108 16.5143 12.1487 16.4571 12.2677 16.4571C12.4461 16.4571 12.6245 16.4 12.684 16.4C12.9219 16.2857 13.1004 16.2286 13.3978 16.0571L13.6952 15.7714L13.6952 15.3143C13.6357 15.2571 13.4572 14.9714 13.3978 14.8571C12.803 14.2857 12.4461 13.5429 12.4461 12.7429C12.4461 11.7143 13.0409 10.6857 13.9926 10.1714C14.4684 9.88572 15.0037 9.77143 15.539 9.77143C16.0743 9.77143 16.6097 9.88572 17.0855 10.1714C17.6803 10.5143 18.1561 10.9714 18.3941 11.5429L18.3941 5.71429C18.3941 4.74286 17.5613 4 16.6097 4L5.78439 4C4.77323 4 4 4.8 4 5.71429L4 18.2857C4 19.2 4.83271 20 5.78439 20L10.6617 20C10.6617 19.9429 10.6022 19.8286 10.6022 19.7714L10.6022 19.7143C10.6022 19.4286 10.7212 19.2 10.9591 19.0286C10.7212 18.8 10.6617 18.6286 10.6022 18.5714C10.5428 18.4 10.5428 17.5429 10.7212 17.2571L10.7212 17.2571ZM6.73606 6.97143L15.3011 6.97143C15.658 6.97143 15.9554 7.2 15.9554 7.48571C15.9554 7.77143 15.658 8 15.3011 8L6.73606 8C6.55762 8 6.37918 7.94286 6.26022 7.82857C6.14126 7.71429 6.08178 7.6 6.08178 7.42857C6.08178 7.2 6.37918 6.97143 6.73606 6.97143ZM6.26022 10C6.37918 9.88571 6.55762 9.82857 6.73606 9.82857L11.7918 9.82857C12.1487 9.82857 12.4461 10.0571 12.4461 10.3429C12.4461 10.6286 12.1487 10.8571 11.7918 10.8571L6.73606 10.8571C6.55762 10.8571 6.37918 10.8 6.26022 10.6857C6.14126 10.5714 6.08178 10.4571 6.08178 10.2857C6.08178 10.2286 6.14126 10.1143 6.26022 10ZM8.99628 13.3714C8.87732 13.4857 8.75837 13.5429 8.57993 13.5429L6.6171 13.5429C6.49814 13.5429 6.3197 13.4857 6.20074 13.3714C6.08178 13.2571 6.0223 13.1429 6.0223 12.9714C6.0223 12.6857 6.26022 12.4571 6.6171 12.4571L8.57993 12.4571C8.87732 12.4571 9.11524 12.6857 9.11524 12.9714C9.17472 13.1429 9.11524 13.2571 8.99628 13.3714L8.99628 13.3714Z" fill="url(#paint_linear_2)" fill-rule="nonzero" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.000000" height="24.000000" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_4" x1="12" x2="12" y1="4" y2="20" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(206,79,81)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(206,79,81)" offset="1" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect id="容器 1597" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
<path id="矢量 1664" d="M12.0011 14.9998C8.13541 14.9998 5 13.9683 5 12.3128L5 14.0004C5 15.6577 8.13328 17.0002 12.0011 17.0002C15.8688 17.0002 19 15.6577 19 14.0004L19 12.3128C19 13.9701 15.8667 14.9998 12.0011 14.9998ZM12.0011 17.9996C8.13541 17.9996 5 16.968 5 15.3126L5 17.0002C5 18.6574 8.13541 20 12.0011 20C15.8667 20 19 18.6574 19 17.0002L19 15.3126C19 16.9698 15.8667 17.9996 12.0011 17.9996ZM12.0011 12C8.13541 12 5 10.9703 5 9.31307L5 11.0007C5 12.6579 8.13328 14.0004 12.0011 14.0004C15.8688 14.0004 19 12.6579 19 11.0007L19 9.31307C19 10.9703 15.8667 12 12.0011 12L12.0011 12ZM12.0011 4C8.13541 4 5 5.34257 5 6.99978L5 7.99911C5 9.65631 8.13328 10.9989 12.0011 10.9989C15.8688 10.9989 19 9.65631 19 7.99911L19 6.99978C19 5.34257 15.8667 4 12.0011 4L12.0011 4ZM13.2981 7.4771C13.0879 7.51643 12.865 7.54324 12.6252 7.57899C12.6252 7.68268 12.6294 7.79352 12.6252 7.90078C12.6209 7.96872 12.6146 7.97229 12.4341 7.97587C12.1815 7.97944 11.931 7.97587 11.6784 7.97408C11.6168 7.97408 11.585 7.96157 11.5807 7.94011C11.5701 7.88648 11.5595 7.83464 11.5574 7.78101C11.5531 7.72201 11.5553 7.66302 11.5553 7.60224C11.3281 7.58615 11.1052 7.57363 10.8823 7.55576C10.5618 7.53073 10.2497 7.49497 9.98438 7.41453C9.95678 7.40559 9.92919 7.38592 9.93768 7.3752C10.029 7.24648 10.1309 7.11598 10.2306 6.98726C10.2327 6.9819 10.2412 6.97654 10.254 6.96939C10.3559 6.98548 10.4578 7.00157 10.5575 7.01765C10.9566 7.08022 11.3621 7.13207 11.7973 7.13922C12.0626 7.14279 12.3216 7.13564 12.5487 7.07129C12.9436 6.95866 12.9563 6.77631 12.5594 6.66548C12.3938 6.619 12.1942 6.5886 12.0053 6.55643C11.6593 6.49743 11.2984 6.44916 10.9651 6.38123C10.5448 6.29542 10.2136 6.17028 10.0629 5.98972C9.80606 5.67866 10.1351 5.35687 10.8845 5.1924C11.0861 5.1495 11.3133 5.12268 11.5319 5.09229C11.5998 5.08335 11.6211 5.07441 11.6211 5.0476C11.6232 4.94749 11.6317 4.84916 11.6359 4.74905C11.6381 4.70972 11.6826 4.69363 11.7824 4.69542C12.0371 4.699 12.2919 4.70078 12.5466 4.70078C12.6485 4.70078 12.6782 4.72224 12.6825 4.75263C12.691 4.8009 12.6931 4.84738 12.6973 4.89564C12.6995 4.9314 12.6973 4.96715 12.691 5.00291C12.6846 5.03687 12.7143 5.05117 12.8077 5.05654C13.1792 5.08157 13.5507 5.10302 13.8925 5.17095C14.0963 5.21028 14.0963 5.21028 14.0368 5.29609C13.9604 5.4105 13.8925 5.52671 13.7397 5.63754C13.6887 5.6286 13.6378 5.62145 13.5868 5.61252C13.1474 5.54458 12.6952 5.4981 12.2218 5.50168C12.0754 5.50347 11.9225 5.5124 11.7867 5.53386C11.4555 5.58391 11.3578 5.74481 11.5807 5.85028C11.7124 5.91285 11.8907 5.95039 12.0754 5.98078C12.4596 6.04514 12.8523 6.10235 13.2281 6.17207C13.6123 6.24179 13.9392 6.34369 14.143 6.49207C14.5527 6.79419 14.4338 7.26257 13.2981 7.4771L13.2981 7.4771Z" fill="url(#paint_linear_4)" fill-rule="nonzero" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.000000" height="24.000000" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_5" x1="12" x2="12" y1="4" y2="20" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(212,107,8)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(212,107,8)" offset="1" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect id="容器 1599" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
<path id="合并" d="M14.7006 4.3477L14.5714 4.30284C13.9485 4.09492 13.2969 3.99277 12.642 4.0004C11.9872 4.00802 11.3379 4.12533 10.7198 4.3477L10.2498 4.51684C11.0933 4.47163 11.9374 4.59585 12.7348 4.88255L16.47 6.21424L16.5709 6.25881C17.3125 6.60823 17.7903 7.37193 17.7842 8.20677L17.7842 15.3478L17.7247 15.5269L17.6878 15.6326C17.4686 16.2263 17.0128 16.9829 16.237 17.7969C15.7958 18.2567 15.3152 18.6746 14.8009 19.0454C18.7583 17.046 19.5 14.6067 19.5 14.6067L19.5 6.85137L19.4989 6.79308C19.4891 6.58267 19.4213 6.37948 19.3033 6.20728C19.1854 6.03509 19.0221 5.90104 18.8328 5.82082L14.7006 4.3477ZM12.3705 6.02596L12.2511 5.98453C11.6932 5.79878 11.1097 5.70764 10.5233 5.71469C9.937 5.72173 9.35569 5.82686 8.8022 6.02596L5.13666 7.34651L5.08583 7.36708C4.91349 7.44296 4.76635 7.56878 4.66232 7.72919C4.5583 7.88961 4.5019 8.07768 4.5 8.27049L4.5 15.2232L4.52638 15.2967L4.54916 15.3538L4.58 15.4258L4.61972 15.5115L4.64888 15.5721L4.71277 15.6946L4.76944 15.7966L4.83416 15.9069L4.90749 16.0246L4.98972 16.1498L5.04972 16.2369L5.11388 16.3269L5.18277 16.4195L5.2561 16.5146L5.33388 16.6123L5.45971 16.7629L5.50416 16.8143L5.59666 16.9181L5.64499 16.9709L5.74527 17.0775L5.8511 17.1858L5.96221 17.2955L6.07888 17.4066L6.20138 17.5189L6.26471 17.5752L6.39582 17.6895C6.44122 17.728 6.48696 17.7661 6.53304 17.8038L6.67637 17.9192L6.82609 18.0349L6.9822 18.1512C7.06165 18.2095 7.14387 18.2677 7.22831 18.326L7.40081 18.4429C8.22136 18.9869 9.26469 19.5277 10.5864 20C10.8256 19.9147 11.063 19.8242 11.2986 19.7286L11.5675 19.6166C12.1678 19.3625 12.7507 19.0672 13.3124 18.7326L13.5108 18.6112C13.6077 18.5503 13.7022 18.4895 13.7938 18.4283L13.9733 18.3063C14.0905 18.2249 14.2027 18.1437 14.3105 18.0626L14.4683 17.9415C14.5199 17.9009 14.5702 17.8606 14.6194 17.8206L14.7638 17.7006C14.8108 17.6606 14.8566 17.6209 14.9016 17.5815L15.0327 17.4635L15.1577 17.3466L15.2766 17.2312L15.3894 17.1172C15.426 17.0795 15.4616 17.0421 15.4963 17.0049L15.5974 16.8949L15.693 16.7863L15.7833 16.6803L15.868 16.5766L15.9474 16.4755L16.0222 16.3772L16.0916 16.2815L16.1566 16.1889L16.2169 16.0995L16.2991 15.9718L16.3483 15.8912L16.3935 15.8141L16.4538 15.7061L16.5058 15.6075L16.5627 15.4915L16.5966 15.4169L16.6383 15.3181L16.673 15.2227L16.673 8.2702L16.6716 8.21306C16.662 8.02536 16.6009 7.8443 16.4953 7.69091C16.3897 7.53752 16.2439 7.41809 16.0749 7.34651L12.3705 6.02596ZM9.05303 9.0999C9.45442 8.92962 9.85525 8.85705 10.2802 8.85705C10.705 8.85705 11.13 8.92962 11.5311 9.0999C11.9325 9.2699 12.31 9.53675 12.6166 9.85275C12.9002 10.1439 13.1358 10.4839 13.2775 10.8479C13.4427 11.2124 13.5374 11.5764 13.5608 11.965C13.5847 12.3536 13.5608 12.7421 13.4666 13.1064C13.3955 13.4704 13.2305 13.8347 13.0416 14.1504L14.4811 15.6315C14.6463 15.8258 14.7411 15.9958 14.7411 16.1415C14.7644 16.2869 14.7172 16.4326 14.5755 16.5783C14.4341 16.7486 14.2924 16.8458 14.1272 16.8212C13.9622 16.7972 13.7969 16.7241 13.6316 16.6029L12.1213 15.1215C11.7905 15.3158 11.4605 15.4618 11.0827 15.5586C10.705 15.6558 10.3272 15.6801 9.9733 15.6558C9.60914 15.6044 9.25247 15.5066 8.91136 15.3644C8.55748 15.2192 8.25053 14.9758 7.96748 14.6849C7.63693 14.3692 7.40109 13.9804 7.2361 13.5678C7.07054 13.155 6.99999 12.7178 6.99999 12.2807C6.99999 11.8436 7.07054 11.4064 7.23582 10.9936C7.40082 10.581 7.66054 10.1925 7.96748 9.85275C8.29803 9.51247 8.65164 9.2699 9.05303 9.0999ZM12.5069 12.2713C12.5069 10.9896 11.5038 9.95074 10.2669 9.95074C9.0297 9.95075 8.02692 10.9896 8.02692 12.2713C8.02692 13.5527 9.02997 14.5915 10.2669 14.5915C11.5041 14.5915 12.5069 13.5527 12.5069 12.2713Z" fill="url(#paint_linear_5)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.000000" height="24.000000" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_6" x1="13" x2="13" y1="4" y2="20" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(212,56,13)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(212,56,13)" offset="1" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect id="容器 1601" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
<path id="矢量 1679" d="M17 4C18.0195 4 18.8462 4.81132 18.8462 5.81132L18.8462 11.3443C18.2323 11.0861 17.5562 10.9434 16.8462 10.9434C14.0424 10.9434 11.7692 13.1733 11.7692 15.9245C11.7692 17.6097 12.6217 19.0991 13.9264 20L6.84615 20C5.82662 20 5 19.1887 5 18.1887L5 5.81132C5 4.81132 5.82662 4 6.84615 4L17 4ZM15.7692 6.71698C16.1091 6.71698 16.3846 6.98703 16.3846 7.32076C16.3846 7.65448 16.1091 7.92453 15.7692 7.92453L8.07692 7.92453C7.73708 7.92453 7.46154 7.65448 7.46154 7.32076C7.46154 6.98703 7.73708 6.71698 8.07692 6.71698L15.7692 6.71698ZM12.6923 9.73585C13.0322 9.73585 13.3077 10.0059 13.3077 10.3396C13.3077 10.6733 13.0322 10.9434 12.6923 10.9434L8.07692 10.9434C7.73708 10.9434 7.46154 10.6733 7.46154 10.3396C7.46154 10.0059 7.73708 9.73585 8.07692 9.73585L12.6923 9.73585ZM21 15.9245C21 13.6733 19.1403 11.8491 16.8462 11.8491C14.552 11.8491 12.6923 13.6733 12.6923 15.9245C12.6923 18.1757 14.552 20 16.8462 20C19.1403 20 21 18.1757 21 15.9245ZM10.8462 13.3585C10.8462 13.0248 10.5706 12.7547 10.2308 12.7547L8.07692 12.7547C7.73708 12.7547 7.46154 13.0248 7.46154 13.3585C7.46154 13.6922 7.73708 13.9623 8.07692 13.9623L10.2308 13.9623C10.5706 13.9623 10.8462 13.6922 10.8462 13.3585ZM16.8462 13.0566C17.4378 13.0566 17.9886 13.2288 18.4486 13.5259L14.4011 17.4965C14.0989 17.0448 13.9231 16.5047 13.9231 15.9245C13.9231 14.3408 15.2317 13.0566 16.8462 13.0566ZM16.8462 18.7925C16.2689 18.7925 15.7305 18.6285 15.2773 18.3443L19.3131 14.3856C19.6019 14.8302 19.7692 15.3585 19.7692 15.9245C19.7692 17.5083 18.4606 18.7925 16.8462 18.7925Z" fill="url(#paint_linear_6)" fill-rule="evenodd" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.000000" height="24.000000" fill="none" customFrame="#000000">
<defs>
<linearGradient id="paint_linear_8" x1="12" x2="12" y1="3" y2="21" gradientUnits="userSpaceOnUse">
<stop stop-color="rgb(206,79,81)" offset="0" stop-opacity="1" />
<stop stop-color="rgb(206,79,81)" offset="1" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect id="容器 1603" width="24.000000" height="24.000000" x="0.000000" y="0.000000" />
<path id="矢量 1680" d="M16.8795 13.0551L7.1203 13.0551C6.60329 13.0551 6.17254 12.6591 6.12954 12.1444L6.00178 10.6135C5.97742 10.324 6.20634 10.0757 6.49716 10.0757L17.5029 10.0757C17.7937 10.0757 18.0224 10.324 17.9983 10.6135L17.8705 12.1444C17.8275 12.6591 17.3967 13.0551 16.8795 13.0551ZM16.8002 13.5516L7.19959 13.5516L8.19383 21L15.806 21L16.8002 13.5516ZM12.0424 6.34879C12.9683 6.34879 13.7187 5.59899 13.7187 4.6744C13.7187 3.74956 12.968 3 12.0424 3C11.1168 3 10.3661 3.7498 10.3661 4.6744C10.3659 5.59899 11.1165 6.34879 12.0424 6.34879ZM15.8526 9.57915L15.4854 7.94175C15.3922 7.52539 15.0515 7.20958 14.6289 7.14751L13.1383 6.92852L12.4001 8.6203L12.3049 7.78658C12.3024 7.76026 12.28 7.74015 12.2537 7.74015L11.8319 7.74015C11.805 7.74015 11.7829 7.76051 11.7804 7.78707L11.6939 8.64165L10.9465 6.92877L9.45589 7.14775C9.03334 7.20982 8.69256 7.52563 8.59935 7.942L8.23223 9.57915L15.8526 9.57915ZM11.5266 6.99283C11.5271 7.14751 11.6549 7.35358 11.7322 7.43079C11.8095 7.50801 11.9392 7.50801 12.0424 7.50801C12.1455 7.50801 12.2753 7.50801 12.3526 7.43079C12.4299 7.35358 12.5577 7.14751 12.5582 6.99283C12.5589 6.81258 12.2432 6.78676 12.0424 6.78676C11.8413 6.78676 11.5259 6.81233 11.5266 6.99283Z" fill="url(#paint_linear_8)" fill-rule="nonzero" />
</svg>
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论