11<script lang="ts" setup>
22import type { VipProject } from ' @142vip/vitepress'
3- import { ElImage , ElLink , ElTable , ElTableColumn } from ' element-plus'
3+ import {
4+ ElDivider ,
5+ ElImage ,
6+ ElLink ,
7+ ElTable ,
8+ ElTableColumn ,
9+ } from ' element-plus'
410import ' element-plus/theme-chalk/base.css'
11+ import ' element-plus/theme-chalk/el-divider.css'
512import ' element-plus/theme-chalk/el-image.css'
613import ' element-plus/theme-chalk/el-link.css'
714import ' element-plus/theme-chalk/el-table-column.css'
815import ' element-plus/theme-chalk/el-table.css'
9- import ' element-plus/theme-chalk/el-checkbox.css'
10- import ' element-plus/theme-chalk/el-empty.css'
1116
1217defineProps <{
1318 data: VipProject []
@@ -31,84 +36,156 @@ function npmVersionBadgeUrl(name: string) {
3136 <h2 class =" vip-project-table__title" >
3237 {{ title ?? '核心业务' }}
3338 </h2 >
34- <ElTable
35- :data =" data"
36- border
37- class =" vip-project-table"
38- fit
39- flexible
40- stripe
41- :show-header =" false"
39+ <div
40+ :aria-label =" title ?? '项目列表表格'"
41+ class =" vip-project-table-scroll"
42+ role =" region"
4243 >
43- <ElTableColumn header-align =" center" label =" 项目名称" min-width =" 180" prop =" name" />
44- <ElTableColumn align =" center" header-align =" center" label =" 项目代号" min-width =" 50" prop =" id" />
45- <ElTableColumn header-align =" center" label =" 功能描述" min-width =" 300" prop =" description" width =" auto" />
46- <ElTableColumn align =" center" header-align =" center" label =" 当前版本" min-width =" 120" >
47- <template #default =" { row } " >
48- <ElLink
49- v-if =" !row.private"
50- :href =" npmPackageUrl(row.name)"
51- :underline =" false"
52- class =" vip-project-table__badge-link"
53- :title =" row.name"
54- rel =" noopener noreferrer"
55- target =" _blank"
56- >
44+ <ElTable
45+ :data =" data"
46+ :show-header =" false"
47+ border
48+ class =" vip-project-table"
49+ fit
50+ flexible
51+ stripe
52+ >
53+ <ElTableColumn header-align =" center" label =" 项目名称" min-width =" 160" prop =" name" />
54+ <ElTableColumn align =" center" header-align =" center" label =" 项目代号" min-width =" 48" prop =" id" />
55+ <ElTableColumn header-align =" center" label =" 功能描述" min-width =" 280" prop =" description" />
56+ <ElTableColumn align =" center" header-align =" center" label =" 当前版本" min-width =" 112" >
57+ <template #default =" { row } " >
58+ <ElLink
59+ v-if =" !row.private"
60+ :href =" npmPackageUrl(row.name)"
61+ :title =" row.name"
62+ :underline =" false"
63+ class =" vip-project-table__badge-link"
64+ rel =" noopener noreferrer"
65+ target =" _blank"
66+ >
67+ <ElImage
68+ :src =" npmVersionBadgeUrl(row.name)"
69+ :title =" `${row.name} ${row.version}`"
70+ />
71+ </ElLink >
5772 <ElImage
58- :src =" npmVersionBadgeUrl(row.name)"
73+ v-else
74+ :src =" privateBadgeUrl(row.version)"
5975 :title =" `${row.name} ${row.version}`"
6076 />
61- </ElLink >
62- <ElImage
63- v-else
64- :src =" privateBadgeUrl(row.version)"
65- :title =" `${row.name} ${row.version}`"
66- />
67- </template >
68- </ElTableColumn >
69- <ElTableColumn align =" center" header-align =" center" label =" 文档" width =" 150" >
70- <template #default =" { row } " >
71- <ElLink :href =" row.sourceCode" :underline =" false" rel =" noopener noreferrer" target =" _blank" title =" 源码" >
72- 源码
73- </ElLink >  ;
74- <ElLink :href =" row.changelog" :underline =" false" rel =" noopener noreferrer" target =" _blank" title =" 日志" >
75- 日志
76- </ElLink >  ;
77- <ElLink :href =" row.readme" :underline =" false" rel =" noopener noreferrer" target =" _blank" title =" 文档" >
78- 文档
79- </ElLink >
80- </template >
81- </ElTableColumn >
82- </ElTable >
77+ </template >
78+ </ElTableColumn >
79+ <ElTableColumn align =" left" header-align =" center" label =" 文档" width =" 148" >
80+ <template #default =" { row } " >
81+ <div class =" vip-project-table__doc" >
82+ <ElLink
83+ :href =" row.sourceCode"
84+ :underline =" false"
85+ class =" vip-project-table__doc-link"
86+ rel =" noopener noreferrer"
87+ target =" _blank"
88+ type =" primary"
89+ >
90+ 源码
91+ </ElLink >
92+ <ElDivider class =" vip-project-table__doc-divider" direction =" vertical" />
93+ <ElLink
94+ :href =" row.changelog"
95+ :underline =" false"
96+ class =" vip-project-table__doc-link"
97+ rel =" noopener noreferrer"
98+ target =" _blank"
99+ type =" primary"
100+ >
101+ 日志
102+ </ElLink >
103+ <ElDivider class =" vip-project-table__doc-divider" direction =" vertical" />
104+ <ElLink
105+ :href =" row.readme"
106+ :underline =" false"
107+ class =" vip-project-table__doc-link"
108+ rel =" noopener noreferrer"
109+ target =" _blank"
110+ type =" primary"
111+ >
112+ 文档
113+ </ElLink >
114+ </div >
115+ </template >
116+ </ElTableColumn >
117+ </ElTable >
118+ </div >
83119</template >
84120
85121<style lang="scss" scoped>
122+ $vip-table-radius : 10px ;
123+
86124.vip-project-table__title {
87125 margin-top : 0 ;
88126}
89127
128+ .vip-project-table-scroll {
129+ width : 100% ;
130+ max-width : 100% ;
131+ overflow-x : auto ;
132+ overflow-y : visible ;
133+ -webkit-overflow-scrolling : touch ;
134+ overscroll-behavior-x : contain ;
135+ border-radius : $vip-table-radius ;
136+ scrollbar-width : thin ;
137+
138+ // 抵消 VitePress `.vp-doc` 内对表格的外边距
139+ .vp-doc & {
140+ display : block ;
141+ margin : 0 !important ;
142+
143+ .vip-project-table {
144+ display : block ;
145+ margin : 0 !important ;
146+ overflow-x : visible ;
147+
148+ :deep (table ) {
149+ border-collapse : collapse ;
150+ margin : 0 !important ;
151+ }
152+ }
153+ }
154+ }
155+
90156.vip-project-table {
91157 width : 100% ;
92- border-radius : 10px !important ;
158+ min-width : 760px ;
159+ border-radius : $vip-table-radius !important ;
160+
161+ :deep (.el-link ),
162+ :deep (.el-link:is(:hover , :focus , :active )) {
163+ text-decoration : none !important ;
164+ }
93165}
94166
95167.vip-project-table__badge-link {
96168 display : inline-flex ;
97169 vertical-align : middle ;
98170 line-height : 0 ;
99171}
100- </style >
101172
102- <style lang="scss">
103- /* 避免 VitePress 文档全局 table 样式挤压本表格 */
104- .vp-doc .vip-project-table {
105- display : block ;
106- margin : 0 !important ;
107- overflow-x : auto ;
173+ .vip-project-table__doc {
174+ display : inline-flex ;
175+ flex-wrap : nowrap ;
176+ align-items : center ;
177+ white-space : nowrap ;
178+ }
179+
180+ .vip-project-table__doc-link {
181+ padding : 2px ;
108182}
109183
110- .vp-doc .vip-project-table :deep(table ) {
111- border-collapse : collapse ;
112- margin : 0 !important ;
184+ .vip-project-table__doc-divider.el-divider--vertical {
185+ flex-shrink : 0 ;
186+ align-self : center ;
187+ margin : 0 4px ;
188+ height : 14px ;
189+ border-color : var (--el-border-color-lighter );
113190}
114191 </style >
0 commit comments