Compare commits
10 Commits
aada2a8b2b
...
904f9b37f7
| Author | SHA1 | Date | |
|---|---|---|---|
| 904f9b37f7 | |||
| 3908bc2226 | |||
| c0fbae9d52 | |||
| c4263813dc | |||
| a7903c299d | |||
| 01215a98e7 | |||
| 4f84d39665 | |||
| c0c8534fc6 | |||
| 7ea4a9ae38 | |||
| a399a483f0 |
@ -15,7 +15,9 @@ VUE_APP_CDN_PATH=/view/mhzc
|
||||
VUE_APP_ROUTER_BASE=/view/mhzc
|
||||
VUE_APP_API_BASE_URL=
|
||||
VUE_APP_DEV_SERVER_PORT=9002
|
||||
VUE_APP_MHZC_PROXY=http://localhost:9300
|
||||
VUE_APP_MHZC_PROXY=https://carbon.liantu.tech
|
||||
# VUE_APP_MHZC_PROXY=https://www.cciw.com.cn
|
||||
# VUE_APP_MHZC_PROXY=http://localhost:9300
|
||||
VUE_APP_MOCK=true
|
||||
VUE_APP_AUTO_ROUTER=false
|
||||
VUE_APP_USE_NEW_BACKEND=false
|
||||
|
||||
@ -40,4 +40,13 @@ export default {
|
||||
data: JSON.stringify(params),
|
||||
});
|
||||
},
|
||||
|
||||
/** 分类列表 */
|
||||
flList() {
|
||||
return fetchSso({
|
||||
url: `${basurl}/fl/list`,
|
||||
method: 'post',
|
||||
__silent401: true,
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
@ -97,19 +97,19 @@
|
||||
// 渐变(字符串,直接用于 background / background-image)
|
||||
// -----------------------------------------------------------------------------
|
||||
@home-gradient-title: linear-gradient(90deg, #008dff 0%, #00e0d3 50.48%, #00c858 100%);
|
||||
@home-gradient-search-btn: linear-gradient(180deg, @home-color-primary-green 0%, @home-color-primary-green-dark 100%);
|
||||
@home-gradient-hero-fade: linear-gradient(180deg, @home-color-page-bg-transparent 0%, @home-color-page-bg 100%);
|
||||
@home-gradient-search-btn: linear-gradient(0deg, @home-color-primary-green 0%, @home-color-primary-green-dark 100%);
|
||||
@home-gradient-hero-fade: linear-gradient(0deg, @home-color-page-bg-transparent 0%, @home-color-page-bg 100%);
|
||||
@home-gradient-core-tag: linear-gradient(90deg, #ffffff 0%, #e6efff 36.06%, #e6efff 62.5%, #ffffff 100%);
|
||||
@home-gradient-ability-card: linear-gradient(0deg, rgba(255, 255, 255, 0.4) 0%, rgba(255, 255, 255, 0.9) 100%);
|
||||
@home-gradient-export-btn: linear-gradient(180deg, @home-color-btn-blue-from 0%, @home-color-btn-blue-to 100%);
|
||||
@home-gradient-card-blue: linear-gradient(180deg, rgba(127, 210, 255, 0.35) 0%, rgba(232, 247, 255, 0.15) 100%);
|
||||
@home-gradient-card-blue-header: linear-gradient(180deg, rgba(127, 210, 255, 0.55) 0%, rgba(232, 247, 255, 0.35) 100%);
|
||||
@home-gradient-card-chain-header: linear-gradient(180deg, rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0.25) 100%);
|
||||
@home-gradient-card-green: linear-gradient(180deg, rgba(156, 255, 221, 0.45) 0%, rgba(156, 255, 221, 0.2) 100%);
|
||||
@home-gradient-card-green-header: linear-gradient(180deg, rgba(107, 255, 204, 0.55) 0%, rgba(107, 255, 204, 0.25) 100%);
|
||||
@home-gradient-export-btn: linear-gradient(0deg, @home-color-btn-blue-from 0%, @home-color-btn-blue-to 100%);
|
||||
@home-gradient-card-blue: linear-gradient(0deg, rgba(127, 210, 255, 0.35) 0%, rgba(232, 247, 255, 0.15) 100%);
|
||||
@home-gradient-card-blue-header: linear-gradient(0deg, rgba(127, 210, 255, 0.55) 0%, rgba(232, 247, 255, 0.35) 100%);
|
||||
@home-gradient-card-chain-header: linear-gradient(0deg, rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0.25) 100%);
|
||||
@home-gradient-card-green: linear-gradient(0deg, rgba(156, 255, 221, 0.45) 0%, rgba(156, 255, 221, 0.2) 100%);
|
||||
@home-gradient-card-green-header: linear-gradient(0deg, rgba(107, 255, 204, 0.55) 0%, rgba(107, 255, 204, 0.25) 100%);
|
||||
@home-gradient-cta-btn: linear-gradient(90deg, @home-color-cta-btn-from 0%, @home-color-cta-btn-to 100%);
|
||||
@home-gradient-section-title-bar: linear-gradient(180deg, #00b42a, #00d468);
|
||||
@home-gradient-nav-active: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.15) 100%);
|
||||
@home-gradient-section-title-bar: linear-gradient(0deg, #00b42a, #00d468);
|
||||
@home-gradient-nav-active: linear-gradient(0deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.15) 100%);
|
||||
@home-gradient-skeleton: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
|
||||
@home-gradient-ability-section-bg: linear-gradient(
|
||||
180deg,
|
||||
@ -1173,15 +1173,20 @@ html.portal-figma-scale-active.portal-market-figma-scale-active {
|
||||
@qych-policy-btn-size: 14px;
|
||||
@qych-policy-btn-height: 32px;
|
||||
@qych-policy-btn-radius: 3px;
|
||||
@qych-policy-header-gradient-battery: linear-gradient(180deg, #f1efff 0%, #f0efff 52.885%, #fff 100%);
|
||||
@qych-policy-header-gradient-cbam: linear-gradient(180deg, #effdfe 0%, #fff 100%);
|
||||
@qych-policy-header-gradient-shipping: linear-gradient(180deg, #e0f2e1 0%, #fff 100%);
|
||||
@qych-policy-card-gradient-battery-1: linear-gradient(180deg, #f5f4ff 0%, #ebe8ff 100%);
|
||||
@qych-policy-card-gradient-battery-2: linear-gradient(180deg, #f0f9ff 0%, #e0efff 100%);
|
||||
@qych-policy-card-gradient-cbam-1: linear-gradient(180deg, #fffaf6 0%, #fff0e3 100%);
|
||||
@qych-policy-card-gradient-cbam-2: linear-gradient(180deg, #ebfcff 0%, #daf9fc 100%);
|
||||
@qych-policy-card-gradient-shipping-1: linear-gradient(180deg, #f0f9ff 0%, #e0efff 100%);
|
||||
@qych-policy-card-gradient-shipping-2: linear-gradient(180deg, #ebfcff 0%, #daf9fc 100%);
|
||||
// ── 电池法案:明亮蓝色系 ──
|
||||
@qych-policy-header-gradient-battery: linear-gradient(180deg, #d6e6f8 0%, #ecf3fc 52.885%, #fff 100%);
|
||||
@qych-policy-card-gradient-battery-1: linear-gradient(0deg, #d9e7f6 0%, #edf3fa 100%);
|
||||
@qych-policy-card-gradient-battery-2: linear-gradient(0deg, #e0ecf8 0%, #f1f6fb 100%);
|
||||
|
||||
// ── CBAM:明亮青色系 ──
|
||||
@qych-policy-header-gradient-cbam: linear-gradient(180deg, #d4eeec 0%, #eaf7f6 52.885%, #fff 100%);
|
||||
@qych-policy-card-gradient-cbam-1: linear-gradient(0deg, #d6efed 0%, #ebf7f5 100%);
|
||||
@qych-policy-card-gradient-cbam-2: linear-gradient(0deg, #ddf2f0 0%, #eff9f8 100%);
|
||||
|
||||
// ── 航运燃料:海绿色系(海洋物流 / 航运可持续)──
|
||||
@qych-policy-header-gradient-shipping: linear-gradient(180deg, #cde6de 0%, #e8f4f0 52.885%, #fff 100%);
|
||||
@qych-policy-card-gradient-shipping-1: linear-gradient(0deg, #d0e8e0 0%, #e9f4ef 100%);
|
||||
@qych-policy-card-gradient-shipping-2: linear-gradient(0deg, #d9ece5 0%, #eef6f2 100%);
|
||||
@qych-policy-card-min-height: 164px;
|
||||
@qych-policy-card-icon-right: 30px;
|
||||
@qych-policy-card-icon-opacity: 0.3;
|
||||
|
||||
@ -113,6 +113,136 @@
|
||||
@market-pagination-total-color: #666;
|
||||
@market-pagination-total-font-size: 16px;
|
||||
|
||||
// 分页共享样式(桌面端)
|
||||
.market-pagination() {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding-top: @market-pagination-padding-top;
|
||||
gap: 16px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
|
||||
::v-deep .t-pagination {
|
||||
display: flex !important;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
gap: 12px 16px;
|
||||
|
||||
.t-pagination__number,
|
||||
.t-pagination__btn {
|
||||
border-radius: @market-nav-tab-radius;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
// 当前页:品牌绿色
|
||||
.t-pagination__number.t-is-current {
|
||||
background: #009a29;
|
||||
border-color: #009a29;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
// 页码 hover:绿色浅底
|
||||
.t-pagination__number:not(.t-is-current):hover {
|
||||
background: rgba(0, 154, 41, 0.08);
|
||||
border-color: #009a29;
|
||||
color: #009a29;
|
||||
}
|
||||
|
||||
// 箭头按钮 hover
|
||||
.t-pagination__btn:hover {
|
||||
background: rgba(0, 154, 41, 0.06);
|
||||
border-color: #009a29;
|
||||
color: #009a29;
|
||||
}
|
||||
|
||||
.t-input.t-is-readonly {
|
||||
width: 110px;
|
||||
}
|
||||
|
||||
.t-pagination__select {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 分页共享样式(移动端)
|
||||
.market-pagination-mobile(@h: 36px) {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 12px;
|
||||
padding: 16px 12px 28px;
|
||||
|
||||
::v-deep .t-pagination {
|
||||
display: flex !important;
|
||||
flex-wrap: wrap !important;
|
||||
align-items: center;
|
||||
justify-content: center !important;
|
||||
width: 100% !important;
|
||||
max-width: 100%;
|
||||
row-gap: 12px;
|
||||
column-gap: 8px;
|
||||
}
|
||||
|
||||
::v-deep .t-pagination__total {
|
||||
display: none;
|
||||
}
|
||||
|
||||
::v-deep .t-pagination__btn-prev { order: 1; }
|
||||
::v-deep .t-pagination__pager { order: 2; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px; max-width: 100%; }
|
||||
::v-deep .t-pagination__btn-next { order: 3; }
|
||||
::v-deep .t-pagination__select { order: 4; flex: 0 0 auto; width: auto; max-width: none; margin: 0 0 0 8px !important; display: flex; justify-content: center; }
|
||||
::v-deep .t-pagination__jump { display: none !important; }
|
||||
|
||||
::v-deep .t-pagination__number {
|
||||
min-width: @h;
|
||||
height: @h;
|
||||
line-height: @h;
|
||||
margin: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
::v-deep .t-pagination__btn {
|
||||
min-width: @h;
|
||||
width: @h;
|
||||
height: @h;
|
||||
line-height: @h;
|
||||
}
|
||||
|
||||
::v-deep .t-pagination__select {
|
||||
height: @h;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
::v-deep .t-pagination__select .t-select__wrap,
|
||||
::v-deep .t-pagination__select .t-input__wrap,
|
||||
::v-deep .t-pagination__select .t-input {
|
||||
height: @h !important;
|
||||
min-height: @h !important;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
::v-deep .t-pagination__select .t-input__inner {
|
||||
height: @h !important;
|
||||
min-height: @h !important;
|
||||
line-height: @h;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
font-size: 13px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
::v-deep .t-input.t-is-readonly {
|
||||
width: auto;
|
||||
min-width: 96px;
|
||||
max-width: none;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// 卡片分类色标(左侧 3px 彩条)
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
@ -732,6 +732,22 @@ export default {
|
||||
&.enterprise-options {
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background: #c1c9c4;
|
||||
border-radius: 4px;
|
||||
&:hover {
|
||||
background: #a0aba4;
|
||||
}
|
||||
}
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: #c1c9c4 transparent;
|
||||
}
|
||||
}
|
||||
|
||||
@ -973,43 +989,12 @@ export default {
|
||||
|
||||
// 分页
|
||||
.pagination-total {
|
||||
font-size: 16px;
|
||||
color: #666;
|
||||
font-size: @market-pagination-total-font-size;
|
||||
color: @market-pagination-total-color;
|
||||
}
|
||||
|
||||
.pagination-box {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding-top: 32px;
|
||||
gap: 16px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
|
||||
::v-deep .t-pagination {
|
||||
display: flex !important;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
gap: 12px 16px;
|
||||
|
||||
.t-input.t-is-readonly {
|
||||
width: 110px;
|
||||
}
|
||||
|
||||
.t-pagination__select {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
/* 优化需求:分页按钮线框统一为长方形+圆角 */
|
||||
.t-pagination__number,
|
||||
.t-pagination__btn {
|
||||
border-radius: 6px;
|
||||
}
|
||||
}
|
||||
.market-pagination();
|
||||
}
|
||||
|
||||
// 弹窗样式
|
||||
@ -1173,11 +1158,9 @@ export default {
|
||||
}
|
||||
|
||||
.pagination-box {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
.market-pagination-mobile(32px);
|
||||
padding-top: 16px;
|
||||
padding-bottom: 32px;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.pagination-total {
|
||||
@ -1187,108 +1170,6 @@ export default {
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination {
|
||||
display: flex !important;
|
||||
flex-wrap: wrap !important;
|
||||
align-items: center;
|
||||
justify-content: center !important;
|
||||
width: 100% !important;
|
||||
max-width: 100%;
|
||||
white-space: normal !important;
|
||||
row-gap: 12px;
|
||||
column-gap: 8px;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__total {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__btn-prev {
|
||||
order: 1;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__pager {
|
||||
order: 2;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__btn-next {
|
||||
order: 3;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select {
|
||||
order: 4;
|
||||
flex: 0 0 auto;
|
||||
width: auto;
|
||||
max-width: none;
|
||||
margin: 0 0 0 8px !important;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select .t-select__wrap {
|
||||
width: auto;
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__pager {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 6px;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
@mob-pagination-h: 32px;
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__number {
|
||||
min-width: @mob-pagination-h;
|
||||
height: @mob-pagination-h;
|
||||
line-height: @mob-pagination-h;
|
||||
margin: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__btn {
|
||||
min-width: @mob-pagination-h;
|
||||
width: @mob-pagination-h;
|
||||
height: @mob-pagination-h;
|
||||
line-height: @mob-pagination-h;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select {
|
||||
height: @mob-pagination-h;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select .t-select__wrap,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input__wrap,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input {
|
||||
height: @mob-pagination-h !important;
|
||||
min-height: @mob-pagination-h !important;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input__inner {
|
||||
height: @mob-pagination-h !important;
|
||||
min-height: @mob-pagination-h !important;
|
||||
line-height: @mob-pagination-h;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
font-size: 13px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__jump {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-input.t-is-readonly {
|
||||
width: auto;
|
||||
min-width: 96px;
|
||||
max-width: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
@ -1334,32 +1215,7 @@ export default {
|
||||
|
||||
.pagination-box {
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
|
||||
@mob-pagination-h-sm: 28px;
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__number {
|
||||
min-width: @mob-pagination-h-sm;
|
||||
height: @mob-pagination-h-sm;
|
||||
line-height: @mob-pagination-h-sm;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__btn {
|
||||
min-width: @mob-pagination-h-sm;
|
||||
width: @mob-pagination-h-sm;
|
||||
height: @mob-pagination-h-sm;
|
||||
line-height: @mob-pagination-h-sm;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-select__wrap,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input__wrap,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input__inner {
|
||||
height: @mob-pagination-h-sm !important;
|
||||
min-height: @mob-pagination-h-sm !important;
|
||||
line-height: @mob-pagination-h-sm;
|
||||
.market-pagination-mobile(28px);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1286,9 +1286,7 @@ export default {
|
||||
|
||||
// 分页
|
||||
.pagination-box {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding-top: 32px;
|
||||
.market-pagination();
|
||||
}
|
||||
|
||||
// 详情弹窗
|
||||
|
||||
@ -3,33 +3,24 @@
|
||||
<div class="portal-figma-scale-viewport">
|
||||
<div class="portal-figma-scale-stage" ref="figmaStage">
|
||||
<!-- 面包屑导航 -->
|
||||
<div class="breadcrumb-box">
|
||||
<span class="breadcrumb-link" @click="$router.push('/view/mhzc/home')">首页</span>
|
||||
<span class="breadcrumb-separator">/</span>
|
||||
<span class="breadcrumb-link" @click="$router.push('/fwsc')">服务中心</span>
|
||||
<span class="breadcrumb-separator">/</span>
|
||||
<span class="breadcrumb-link" @click="$router.push('/tsjsc')">碳数据市场</span>
|
||||
<span class="breadcrumb-separator">/</span>
|
||||
<span class="breadcrumb-current">{{ sjscInfo && sjscInfo.sjmc || '数据列表' }}</span>
|
||||
</div>
|
||||
|
||||
<!-- 数据市场信息卡片 -->
|
||||
<div class="sjsc-info-card" v-if="sjscInfo">
|
||||
<div class="sjsc-info-main">
|
||||
<h2 class="sjsc-name">{{ sjscInfo.sjmc || '数据市场' }}</h2>
|
||||
<p class="sjsc-desc">{{ sjscInfo.sjms || '暂无描述' }}</p>
|
||||
</div>
|
||||
<div class="sjsc-info-stats" v-if="sjscInfo.llcs">
|
||||
<!-- <div class="stat-item" v-if="sjscInfo.llcs">
|
||||
<span class="stat-value">{{ sjscInfo.llcs }}</span>
|
||||
<span class="stat-label">浏览次数</span>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
<BreadcrumbNav
|
||||
:currentPage="sjscInfo && sjscInfo.sjmc || '数据列表'"
|
||||
secondPage="碳数据市场"
|
||||
secondLink="/tsjsc"
|
||||
/>
|
||||
|
||||
<!-- 主内容区 -->
|
||||
<div class="content-wrapper">
|
||||
<!-- 右侧数据列表 -->
|
||||
<!-- 数据库信息卡片 -->
|
||||
<div class="info-card" v-if="sjscInfo">
|
||||
<div class="info-card__accent"></div>
|
||||
<div class="info-card__body">
|
||||
<h2 class="info-card__name">{{ sjscInfo.sjmc || '数据市场' }}</h2>
|
||||
<p class="info-card__desc">{{ sjscInfo.sjms || '暂无描述' }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 数据列表 -->
|
||||
<div class="data-list">
|
||||
<SkeletonCard v-if="loading" :count="4" />
|
||||
<EmptyState
|
||||
@ -326,120 +317,48 @@ export default {
|
||||
|
||||
<style lang="less" scoped>
|
||||
@import '../../styles/home-figma-variables.less';
|
||||
@import '../../styles/market-list-variables.less';
|
||||
|
||||
.sjlbc-page {
|
||||
background: #f5f5f5;
|
||||
background: @market-page-bg;
|
||||
.portal-figma-scale-page();
|
||||
}
|
||||
|
||||
// 面包屑导航
|
||||
.breadcrumb-box {
|
||||
// 数据库信息卡片
|
||||
.info-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 83%;
|
||||
max-width: 1400px;
|
||||
padding: 20px 20px 0;
|
||||
margin: 0 auto;
|
||||
box-sizing: border-box;
|
||||
margin-bottom: 20px;
|
||||
background: #fff;
|
||||
border-radius: @market-card-radius;
|
||||
box-shadow: @market-card-shadow;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.breadcrumb-link {
|
||||
font-size: 14px;
|
||||
color: #009a29;
|
||||
cursor: pointer;
|
||||
transition: color 0.3s;
|
||||
|
||||
&:hover {
|
||||
color: #007a1f;
|
||||
}
|
||||
.info-card__accent {
|
||||
width: 4px;
|
||||
flex-shrink: 0;
|
||||
background: linear-gradient(180deg, #009a29, #48C666);
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
|
||||
.breadcrumb-separator {
|
||||
margin: 0 8px;
|
||||
font-size: 14px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.breadcrumb-current {
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
// 数据市场信息卡片
|
||||
.sjsc-info-card {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
width: 81%;
|
||||
max-width: 1400px;
|
||||
padding: 24px;
|
||||
margin: 16px auto 0;
|
||||
background: linear-gradient(135deg, #009a29 0%, #00c853 100%);
|
||||
border-radius: 6px;
|
||||
box-shadow: 0 4px 12px rgba(0, 154, 41, 0.15);
|
||||
color: #fff;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.sjsc-info-main {
|
||||
.info-card__body {
|
||||
flex: 1;
|
||||
padding: 20px 24px;
|
||||
}
|
||||
|
||||
.sjsc-name {
|
||||
.info-card__name {
|
||||
margin: 0 0 8px;
|
||||
font-size: 22px;
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: #fff;
|
||||
line-height: 1.3;
|
||||
color: #003B1A;
|
||||
}
|
||||
|
||||
.sjsc-desc {
|
||||
.info-card__desc {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 1.6;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.sjsc-info-stats {
|
||||
display: flex;
|
||||
gap: 32px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.stat-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.stat-label {
|
||||
margin-top: 4px;
|
||||
font-size: 12px;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.sjsc-info-card {
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.sjsc-info-stats {
|
||||
gap: 24px;
|
||||
width: 100%;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 20px;
|
||||
}
|
||||
line-height: 1.7;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
// 主内容区
|
||||
@ -455,7 +374,7 @@ export default {
|
||||
.data-list {
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
border-radius: @market-card-radius;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@ -510,8 +429,12 @@ export default {
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.breadcrumb-box {
|
||||
padding: 12px 12px 0;
|
||||
.info-card__body {
|
||||
padding: 16px 18px;
|
||||
}
|
||||
|
||||
.info-card__name {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.content-wrapper {
|
||||
@ -547,6 +470,30 @@ export default {
|
||||
.sjlbc-pagination ::v-deep .t-pagination {
|
||||
flex: 1 1 auto;
|
||||
justify-content: flex-end;
|
||||
|
||||
.t-pagination__number,
|
||||
.t-pagination__btn {
|
||||
border-radius: @market-nav-tab-radius;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.t-pagination__number.t-is-current {
|
||||
background: #009a29;
|
||||
border-color: #009a29;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.t-pagination__number:not(.t-is-current):hover {
|
||||
background: rgba(0, 154, 41, 0.08);
|
||||
border-color: #009a29;
|
||||
color: #009a29;
|
||||
}
|
||||
|
||||
.t-pagination__btn:hover {
|
||||
background: rgba(0, 154, 41, 0.06);
|
||||
border-color: #009a29;
|
||||
color: #009a29;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
|
||||
@ -247,9 +247,8 @@ export default {
|
||||
statsItems() {
|
||||
return [
|
||||
{ label: '数据总量', value: this.page.total || 0 },
|
||||
{ label: '公共数据', value: '—' },
|
||||
{ label: '因子库', value: '—' },
|
||||
{ label: '社会性数据', value: '—' },
|
||||
{ label: '数据类型', value: this.sjlxOptions.length || '—' },
|
||||
{ label: '覆盖行业', value: this.sshyDmOptions.length || '—' },
|
||||
];
|
||||
},
|
||||
},
|
||||
@ -661,6 +660,22 @@ export default {
|
||||
&.enterprise-options {
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background: #c1c9c4;
|
||||
border-radius: 4px;
|
||||
&:hover {
|
||||
background: #a0aba4;
|
||||
}
|
||||
}
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: #c1c9c4 transparent;
|
||||
}
|
||||
}
|
||||
|
||||
@ -918,37 +933,12 @@ export default {
|
||||
|
||||
// 分页
|
||||
.pagination-total {
|
||||
font-size: 16px;
|
||||
color: #666;
|
||||
font-size: @market-pagination-total-font-size;
|
||||
color: @market-pagination-total-color;
|
||||
}
|
||||
|
||||
.pagination-box {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding-top: 32px;
|
||||
gap: 16px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
|
||||
::v-deep .t-pagination {
|
||||
display: flex !important;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
gap: 12px 16px;
|
||||
|
||||
.t-input.t-is-readonly {
|
||||
width: 110px;
|
||||
}
|
||||
|
||||
.t-pagination__select {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
.market-pagination();
|
||||
}
|
||||
|
||||
// 弹窗样式
|
||||
|
||||
@ -287,9 +287,8 @@ export default {
|
||||
statsItems() {
|
||||
return [
|
||||
{ label: '需求总数', value: this.page.total || 0 },
|
||||
{ label: '进行中', value: '—' },
|
||||
{ label: '已匹配', value: '—' },
|
||||
{ label: '本周新增', value: '—' },
|
||||
{ label: '需求类型', value: this.xqlxOptions.length || '—' },
|
||||
{ label: '覆盖地区', value: this.fwfwOptions.length || '—' },
|
||||
];
|
||||
},
|
||||
},
|
||||
@ -893,7 +892,7 @@ export default {
|
||||
.budget-value {
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
color: #FF4D4F;
|
||||
color: #2e7d32;
|
||||
}
|
||||
|
||||
.card-actions {
|
||||
@ -956,43 +955,12 @@ export default {
|
||||
|
||||
// 分页
|
||||
.pagination-total {
|
||||
font-size: 16px;
|
||||
color: #666;
|
||||
font-size: @market-pagination-total-font-size;
|
||||
color: @market-pagination-total-color;
|
||||
}
|
||||
|
||||
.pagination-box {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding-top: 32px;
|
||||
gap: 16px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
|
||||
::v-deep .t-pagination {
|
||||
display: flex !important;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
gap: 12px 16px;
|
||||
|
||||
.t-input.t-is-readonly {
|
||||
width: 110px;
|
||||
}
|
||||
|
||||
.t-pagination__select {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
/* 优化需求:分页按钮线框统一为长方形+圆角 */
|
||||
.t-pagination__number,
|
||||
.t-pagination__btn {
|
||||
border-radius: 6px;
|
||||
}
|
||||
}
|
||||
.market-pagination();
|
||||
}
|
||||
|
||||
// 弹窗样式
|
||||
@ -1150,11 +1118,9 @@ export default {
|
||||
}
|
||||
|
||||
.pagination-box {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
.market-pagination-mobile(32px);
|
||||
padding-top: 16px;
|
||||
padding-bottom: 32px;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.pagination-total {
|
||||
@ -1164,108 +1130,6 @@ export default {
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination {
|
||||
display: flex !important;
|
||||
flex-wrap: wrap !important;
|
||||
align-items: center;
|
||||
justify-content: center !important;
|
||||
width: 100% !important;
|
||||
max-width: 100%;
|
||||
white-space: normal !important;
|
||||
row-gap: 12px;
|
||||
column-gap: 8px;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__total {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__btn-prev {
|
||||
order: 1;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__pager {
|
||||
order: 2;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__btn-next {
|
||||
order: 3;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select {
|
||||
order: 4;
|
||||
flex: 0 0 auto;
|
||||
width: auto;
|
||||
max-width: none;
|
||||
margin: 0 0 0 8px !important;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select .t-select__wrap {
|
||||
width: auto;
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__pager {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 6px;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
@mob-pagination-h: 32px;
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__number {
|
||||
min-width: @mob-pagination-h;
|
||||
height: @mob-pagination-h;
|
||||
line-height: @mob-pagination-h;
|
||||
margin: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__btn {
|
||||
min-width: @mob-pagination-h;
|
||||
width: @mob-pagination-h;
|
||||
height: @mob-pagination-h;
|
||||
line-height: @mob-pagination-h;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select {
|
||||
height: @mob-pagination-h;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select .t-select__wrap,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input__wrap,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input {
|
||||
height: @mob-pagination-h !important;
|
||||
min-height: @mob-pagination-h !important;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input__inner {
|
||||
height: @mob-pagination-h !important;
|
||||
min-height: @mob-pagination-h !important;
|
||||
line-height: @mob-pagination-h;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
font-size: 13px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__jump {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-input.t-is-readonly {
|
||||
width: auto;
|
||||
min-width: 96px;
|
||||
max-width: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
@ -1307,32 +1171,7 @@ export default {
|
||||
|
||||
.pagination-box {
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
|
||||
@mob-pagination-h-sm: 28px;
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__number {
|
||||
min-width: @mob-pagination-h-sm;
|
||||
height: @mob-pagination-h-sm;
|
||||
line-height: @mob-pagination-h-sm;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__btn {
|
||||
min-width: @mob-pagination-h-sm;
|
||||
width: @mob-pagination-h-sm;
|
||||
height: @mob-pagination-h-sm;
|
||||
line-height: @mob-pagination-h-sm;
|
||||
}
|
||||
|
||||
.pagination-box ::v-deep .t-pagination__select,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-select__wrap,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input__wrap,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input,
|
||||
.pagination-box ::v-deep .t-pagination__select .t-input__inner {
|
||||
height: @mob-pagination-h-sm !important;
|
||||
min-height: @mob-pagination-h-sm !important;
|
||||
line-height: @mob-pagination-h-sm;
|
||||
.market-pagination-mobile(28px);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -689,8 +689,9 @@ const CATEGORY_META = [
|
||||
{ id: 'content-15', title: '咨询机构', flDm: '15', icon: 'tjszx.svg', keywords: ['咨询', '服务', '股份', '智能'] },
|
||||
];
|
||||
|
||||
function buildCategoryList() {
|
||||
return CATEGORY_META.map((meta) => ({
|
||||
function buildCategoryList(metaList) {
|
||||
const source = metaList || CATEGORY_META;
|
||||
return source.map((meta) => ({
|
||||
...meta,
|
||||
cardList: [],
|
||||
displayList: [],
|
||||
@ -780,21 +781,18 @@ export default {
|
||||
return groups.filter((g) => g.list.length > 0);
|
||||
},
|
||||
favoriteCards() {
|
||||
if (this.favoriteList && this.favoriteList.length) {
|
||||
return this.favoriteList;
|
||||
}
|
||||
const list = [];
|
||||
this.categoryList.forEach((cat) => {
|
||||
cat.cardList.forEach((card) => {
|
||||
if (card.scbz === 'Y') {
|
||||
list.push(card);
|
||||
}
|
||||
});
|
||||
});
|
||||
return list;
|
||||
return this.favoriteList;
|
||||
},
|
||||
statsItems() {
|
||||
const totalLinks = this.categoryList.reduce((s, c) => s + c.cardList.length, 0);
|
||||
// 去重计数:同一记录可能匹配多个分类,不能简单累加 cardList.length
|
||||
const seen = new Set();
|
||||
this.categoryList.forEach((c) => {
|
||||
c.cardList.forEach((card) => {
|
||||
const id = card.gxUuid || card.wzUuid || card._demoId;
|
||||
if (id) seen.add(id);
|
||||
});
|
||||
});
|
||||
const totalLinks = seen.size;
|
||||
const totalCats = this.categoryList.filter((c) => c.cardList.length > 0).length;
|
||||
const totalFavs = this.favoriteCards.length;
|
||||
return [
|
||||
@ -860,12 +858,19 @@ export default {
|
||||
return false;
|
||||
},
|
||||
async bootstrap() {
|
||||
this.pageLoading = true;
|
||||
// 1. 从接口获取分类列表(失败则沿用前端硬编码默认值)
|
||||
await this.loadCategoryList();
|
||||
// 2. 加载网站列表
|
||||
try {
|
||||
await this.loadAllSections();
|
||||
} catch (e) {
|
||||
console.error('共性能力页加载失败', e);
|
||||
this.applyDemoFallback();
|
||||
}
|
||||
// 静默加载收藏数据(收藏状态同步到卡片后再展示,避免 scbz 闪烁)
|
||||
await this.loadFavorites({ silent: true });
|
||||
this.pageLoading = false;
|
||||
this.$nextTick(() => {
|
||||
if (this.navigateToRouteAnchor()) return;
|
||||
this.initScrollSpy();
|
||||
@ -1101,29 +1106,53 @@ export default {
|
||||
card.tagList = inferred;
|
||||
card.fwlxbqList = inferred;
|
||||
},
|
||||
matchCategory(record, category) {
|
||||
// 优先按共性能力分类代码精确匹配(gxnlFlDm: 01~05)
|
||||
if (record.gxnlFlDm && category.flDm && record.gxnlFlDm === category.flDm) {
|
||||
return true;
|
||||
}
|
||||
// 兜底:按关键词匹配
|
||||
/** 按关键词匹配(仅用于数据兜底,优先走 gxnlFlDm) */
|
||||
_matchByKeywords(record, category) {
|
||||
const text = `${record.bt1 || ''}${record.jj || ''}${record.fwlxjh || ''}${record.qymc || ''}`;
|
||||
return category.keywords.some((kw) => text.includes(kw));
|
||||
},
|
||||
/** 按 FL 代码匹配 */
|
||||
_matchByFlDm(record, category) {
|
||||
return record.gxnlFlDm && category.flDm && record.gxnlFlDm === category.flDm;
|
||||
},
|
||||
assignCategoryCards(allRecords) {
|
||||
// 每条记录只归属一个分类,避免跨分类重复展示
|
||||
const assigned = new Set();
|
||||
this.categoryList.forEach((cat) => {
|
||||
const list = allRecords
|
||||
.filter((r) => this.matchCategory(r, cat))
|
||||
.map((r) => {
|
||||
const list = [];
|
||||
allRecords.forEach((r) => {
|
||||
const id = r.wzUuid || r.gxUuid;
|
||||
if (!id || assigned.has(id)) return;
|
||||
// 优先 FL 代码精确匹配,其次关键词兜底
|
||||
if (this._matchByFlDm(r, cat) || (!r.gxnlFlDm && this._matchByKeywords(r, cat))) {
|
||||
const card = this.normalizeRecord(r);
|
||||
this.ensureCardTags(card, cat);
|
||||
return card;
|
||||
});
|
||||
list.push(card);
|
||||
assigned.add(id);
|
||||
}
|
||||
});
|
||||
cat.cardList = list;
|
||||
cat.total = list.length;
|
||||
cat.visibleCount = cat.previewSize;
|
||||
this.refreshDisplayList(cat);
|
||||
});
|
||||
// 仍有未归类的:只用关键词再做一轮(gxnlFlDm 可能指向不存在的分类)
|
||||
allRecords.forEach((r) => {
|
||||
const id = r.wzUuid || r.gxUuid;
|
||||
if (!id || assigned.has(id)) return;
|
||||
for (const cat of this.categoryList) {
|
||||
if (this._matchByKeywords(r, cat)) {
|
||||
const card = this.normalizeRecord(r);
|
||||
this.ensureCardTags(card, cat);
|
||||
cat.cardList.push(card);
|
||||
cat.total = cat.cardList.length;
|
||||
cat.visibleCount = cat.previewSize;
|
||||
this.refreshDisplayList(cat);
|
||||
assigned.add(id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
applyDemoFallback() {
|
||||
this.useDemoData = true;
|
||||
@ -1177,12 +1206,28 @@ export default {
|
||||
this.refreshDisplayList(category);
|
||||
}
|
||||
},
|
||||
/** 从接口获取分类列表,失败时沿用前端硬编码 CATEGORY_META */
|
||||
async loadCategoryList() {
|
||||
try {
|
||||
const res = await api.flList();
|
||||
const flList = (res && res.data) || [];
|
||||
if (!flList.length) return;
|
||||
// 以接口 flDm 为准,合并前端硬编码的 icon / keywords
|
||||
const apiMap = new Map(flList.map((item) => [item.flDm, item.flMc]));
|
||||
const merged = CATEGORY_META
|
||||
.filter((meta) => apiMap.has(meta.flDm))
|
||||
.map((meta) => ({ ...meta, title: apiMap.get(meta.flDm) }));
|
||||
if (merged.length) {
|
||||
this.categoryList = buildCategoryList(merged);
|
||||
}
|
||||
} catch (e) {
|
||||
// 接口失败:使用 data() 初始化时的默认 CATEGORY_META,不做替换
|
||||
}
|
||||
},
|
||||
async loadAllSections() {
|
||||
this.pageLoading = true;
|
||||
this.useDemoData = false;
|
||||
if (FORCE_DEMO_PREVIEW) {
|
||||
this.applyDemoFallback();
|
||||
this.pageLoading = false;
|
||||
return;
|
||||
}
|
||||
try {
|
||||
@ -1201,8 +1246,6 @@ export default {
|
||||
} catch (e) {
|
||||
console.error('共性能力列表加载失败', e);
|
||||
this.applyDemoFallback();
|
||||
} finally {
|
||||
this.pageLoading = false;
|
||||
}
|
||||
},
|
||||
getScrollRoot() {
|
||||
@ -1349,8 +1392,9 @@ export default {
|
||||
if (scrollRoot.scrollTop === 0) return;
|
||||
scrollRoot.scrollTo({ top: 0, behavior: 'auto' });
|
||||
},
|
||||
async loadFavorites() {
|
||||
this.favoritesLoading = true;
|
||||
async loadFavorites(opts = {}) {
|
||||
const { silent = false } = opts;
|
||||
if (!silent) this.favoritesLoading = true;
|
||||
try {
|
||||
const res = await api.myFavoriteList({ pageNo: 1, pageSize: 200 });
|
||||
const data = res && res.data;
|
||||
@ -1359,16 +1403,34 @@ export default {
|
||||
card.scbz = 'Y';
|
||||
return card;
|
||||
});
|
||||
// 同步收藏状态到主列表所有卡片
|
||||
this.syncFavoriteStatusToCards();
|
||||
} catch (e) {
|
||||
if (isUnauthorizedError(e)) {
|
||||
showLoginGuide({ actionText: '查看我的收藏' });
|
||||
if (!silent) showLoginGuide({ actionText: '查看我的收藏' });
|
||||
return;
|
||||
}
|
||||
this.$message.warning('我的收藏加载失败');
|
||||
if (!silent) this.$message.warning('我的收藏加载失败');
|
||||
} finally {
|
||||
this.favoritesLoading = false;
|
||||
if (!silent) this.favoritesLoading = false;
|
||||
}
|
||||
},
|
||||
/** 根据 favoriteList 同步 categoryList 中所有卡片的 scbz 状态 */
|
||||
syncFavoriteStatusToCards() {
|
||||
const favIds = new Set((this.favoriteList || []).map((c) => c.gxUuid || c.wzUuid).filter(Boolean));
|
||||
this.categoryList.forEach((cat) => {
|
||||
cat.cardList.forEach((card) => {
|
||||
const id = card.gxUuid || card.wzUuid;
|
||||
if (!id) return;
|
||||
const next = favIds.has(id) ? 'Y' : 'N';
|
||||
if (card.scbz !== next) {
|
||||
this.$set(card, 'scbz', next);
|
||||
}
|
||||
});
|
||||
// 强制刷新 displayList,确保 Vue 2 深层响应触发模板更新
|
||||
cat.displayList = cat.cardList.slice(0, cat.visibleCount);
|
||||
});
|
||||
},
|
||||
resetSubmitForm() {
|
||||
this.submitForm = SUBMIT_FORM_EMPTY();
|
||||
this.submitTouched = {};
|
||||
|
||||
@ -471,6 +471,21 @@ export default {
|
||||
this.setNavActive(sectionIndex - 1);
|
||||
}
|
||||
},
|
||||
/** 检查事件源是否在可滚动面板内,且面板仍有滚动空间 */
|
||||
_isInsideScrollablePanel(e, direction) {
|
||||
let el = e.target;
|
||||
while (el) {
|
||||
if (el.classList && el.classList.contains('content-item1')) {
|
||||
const atTop = el.scrollTop <= 1;
|
||||
const atBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 1;
|
||||
if (direction > 0 && !atBottom) return true; // 向下滚,面板未到底
|
||||
if (direction < 0 && !atTop) return true; // 向上滚,面板未到顶
|
||||
return false;
|
||||
}
|
||||
el = el.parentElement;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
handleWheel(e) {
|
||||
if (this.isScrolling) return;
|
||||
const delta = Math.abs(e.deltaY);
|
||||
@ -480,6 +495,12 @@ export default {
|
||||
if (!scrollRoot) return;
|
||||
|
||||
const direction = e.deltaY > 0 ? 1 : -1;
|
||||
|
||||
// 如果事件来自内部滚动面板且面板还能滚,交给浏览器处理
|
||||
if (this._isInsideScrollablePanel(e, direction)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const currentIndex = this.getCurrentSectionIndex(scrollRoot);
|
||||
const currentEl = document.getElementById(this.sectionIds[currentIndex]);
|
||||
|
||||
@ -1138,30 +1159,19 @@ body {
|
||||
padding-top: 24px;
|
||||
}
|
||||
|
||||
.banner1.qych-snap-section {
|
||||
--qych-section-bg: #f7faf8;
|
||||
}
|
||||
|
||||
.banner2.qych-snap-section {
|
||||
--qych-section-bg: #f5f5f5;
|
||||
}
|
||||
|
||||
.banner3.qych-snap-section {
|
||||
--qych-section-bg: #f0faf2;
|
||||
}
|
||||
.banner1.qych-snap-section { --qych-section-bg: #f5f8fc; }
|
||||
.banner2.qych-snap-section { --qych-section-bg: #f4fafa; }
|
||||
.banner3.qych-snap-section { --qych-section-bg: #f3f9f7; }
|
||||
|
||||
.banner1 {
|
||||
--qych-section-bg: #f7faf8;
|
||||
background: url(../../assets/qych/banner3.png);
|
||||
background-size: cover;
|
||||
background-position: center top;
|
||||
}
|
||||
.banner2 {
|
||||
--qych-section-bg: #f5f5f5;
|
||||
background: #f5f5f5;
|
||||
background: #f4fafa;
|
||||
}
|
||||
.banner3 {
|
||||
--qych-section-bg: #f0faf2;
|
||||
background: url(../../assets/qych/banner1.png);
|
||||
background-size: cover;
|
||||
}
|
||||
@ -1181,7 +1191,7 @@ body {
|
||||
line-height: normal;
|
||||
color: @home-color-white;
|
||||
white-space: nowrap;
|
||||
background: @home-gradient-export-btn;
|
||||
background: linear-gradient(135deg, #009a29 0%, #00b96b 100%);
|
||||
border-radius: @qych-policy-btn-radius;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@ -326,24 +326,26 @@ module.exports = {
|
||||
},
|
||||
'^/sso': {
|
||||
// 老栈 target 走 cciw.com.cn 生产 (历史行为保留)。
|
||||
target: 'https://www.cciw.com.cn',
|
||||
target: 'http://carbon.liantu.tech',
|
||||
// target: 'https://www.cciw.com.cn',
|
||||
changeOrigin: true,
|
||||
},
|
||||
'^/mhzc': {
|
||||
target: process.env.VUE_APP_MHZC_PROXY || 'https://www.cciw.com.cn',
|
||||
target: 'http://carbon.liantu.tech',
|
||||
// target: 'https://www.cciw.com.cn',
|
||||
changeOrigin: true,
|
||||
},
|
||||
'^/gxzx': {
|
||||
// target: 'http://localhost:9300',
|
||||
// target: 'http://carbon.liantu.tech',
|
||||
target: 'https://www.cciw.com.cn',
|
||||
target: 'http://carbon.liantu.tech',
|
||||
// target: 'https://www.cciw.com.cn',
|
||||
// target: 'http://10.23.20.13:94/',
|
||||
changeOrigin: true,
|
||||
},
|
||||
'^/yygl': {
|
||||
// target: 'http://localhost:20010',
|
||||
// target: 'http://carbon.liantu.tech',
|
||||
target: 'https://www.cciw.com.cn',
|
||||
target: 'http://carbon.liantu.tech',
|
||||
// target: 'https://www.cciw.com.cn',
|
||||
// target: 'http://10.23.20.13:94/',
|
||||
changeOrigin: true,
|
||||
},
|
||||
|
||||
@ -6,6 +6,7 @@ import com.css.txw.mhzc.pojo.vo.GxnlGxscToggleReqVO;
|
||||
import com.css.txw.mhzc.pojo.vo.GxnlSlxxAuditReqVO;
|
||||
import com.css.txw.mhzc.pojo.vo.GxnlSlxxSubmitReqVO;
|
||||
import com.css.txw.mhzc.pojo.vo.GxnlWzxxListReqVO;
|
||||
import com.css.txw.mhzc.constants.gxnl.GxnlFlConstants;
|
||||
import com.css.txw.mhzc.pojo.vo.GxnlWzxxVO;
|
||||
import com.css.txw.mhzc.service.TxwMhzcGxnlService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@ -17,7 +18,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@ -68,4 +71,17 @@ public class GxnlController {
|
||||
data.put("total", page.getTotal());
|
||||
return CommonResult.success(data);
|
||||
}
|
||||
|
||||
@PostMapping("/fl/list")
|
||||
@Operation(summary = "共性能力分类列表")
|
||||
public CommonResult<List<Map<String, String>>> flList() {
|
||||
List<Map<String, String>> list = new ArrayList<>();
|
||||
GxnlFlConstants.FL_DM_TO_MC.forEach((dm, mc) -> {
|
||||
Map<String, String> item = new HashMap<>();
|
||||
item.put("flDm", dm);
|
||||
item.put("flMc", mc);
|
||||
list.add(item);
|
||||
});
|
||||
return CommonResult.success(list);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user