@@ -25,12 +25,14 @@ const error = ref<string>('')
2525
2626const searchText = ref <string >(' ' )
2727const selectedBranch = ref <string >(' ' ) // 改为单选分支
28+ const selectedAuthor = ref <string >(' ' ) // 作者筛选
2829const isLoading = ref <boolean >(false )
2930const currentPage = ref <number >(1 )
3031const pageSize = ref <number >(45 )
3132const allCommits = ref <Commit []>([]) // 累积所有已加载的提交
3233const hasMoreData = ref <boolean >(true ) // 是否还有更多数据
3334const availableBranches = ref <string []>([]) // 可用分支
35+ const availableAuthors = ref <string []>([]) // 可用作者
3436// VSCode webview API
3537const vscode = acquireVsCodeApi <State >()
3638window .vscode = vscode
@@ -49,6 +51,10 @@ function applyFilter(resetPage: boolean = true) {
4951 filter .branches = [selectedBranch .value ]
5052 }
5153
54+ if (selectedAuthor .value ) {
55+ filter .author = selectedAuthor .value
56+ }
57+
5258 if (resetPage ) {
5359 currentPage .value = 1
5460 allCommits .value = []
@@ -82,6 +88,7 @@ function handleSearchKeyup(event: KeyboardEvent) {
8288function clearFilter() {
8389 searchText .value = ' '
8490 selectedBranch .value = ' '
91+ selectedAuthor .value = ' '
8592 currentPage .value = 1 // 重置页面
8693 allCommits .value = [] // 清空累积数据
8794 hasMoreData .value = true // 重置数据状态
@@ -102,6 +109,10 @@ watch(() => selectedBranch.value, () => {
102109 applyFilter (true )
103110})
104111
112+ watch (() => selectedAuthor .value , () => {
113+ applyFilter (true )
114+ })
115+
105116// Handle messages from extension
106117window .addEventListener (' message' , (event : { data: any }) => {
107118 const message = event .data
@@ -130,6 +141,9 @@ window.addEventListener('message', (event: { data: any }) => {
130141 case CHANNEL .BRANCHES :
131142 availableBranches .value = message .branches || []
132143 break
144+ case CHANNEL .AUTHORS :
145+ availableAuthors .value = message .authors || []
146+ break
133147 case ' error' :
134148 error .value = message .message
135149 isLoading .value = false // 出错时也停止加载状态
@@ -139,6 +153,7 @@ window.addEventListener('message', (event: { data: any }) => {
139153
140154onMounted (() => {
141155 vscode .postMessage ({ command: WEBVIEW_CHANNEL .GET_ALL_BRANCHES })
156+ vscode .postMessage ({ command: WEBVIEW_CHANNEL .GET_ALL_AUTHORS })
142157 applyFilter (true )
143158})
144159
@@ -148,7 +163,7 @@ const transformedCommits = computed(() => {
148163
149164// 计算筛选状态
150165const hasActiveFilter = computed (() => {
151- return searchText .value .trim () || selectedBranch .value
166+ return searchText .value .trim () || selectedBranch .value || selectedAuthor . value
152167})
153168 </script >
154169
@@ -200,6 +215,22 @@ const hasActiveFilter = computed(() => {
200215 {{ branch }}
201216 </option >
202217 </select >
218+ <select
219+ v-model =" selectedAuthor"
220+ class =" author-select"
221+ :disabled =" isLoading"
222+ >
223+ <option value =" " >
224+ 所有作者
225+ </option >
226+ <option
227+ v-for =" author in availableAuthors"
228+ :key =" author"
229+ :value =" author"
230+ >
231+ {{ author }}
232+ </option >
233+ </select >
203234 <button
204235 v-if =" hasActiveFilter"
205236 class =" clear-button"
@@ -314,7 +345,8 @@ const hasActiveFilter = computed(() => {
314345 justify-content : center ;
315346}
316347
317- .branch-select {
348+ .branch-select ,
349+ .author-select {
318350 min-width : 120px ;
319351 padding : 4px 8px ;
320352 border : 1px solid var (--vscode-input-border );
@@ -326,11 +358,13 @@ const hasActiveFilter = computed(() => {
326358 transition : border-color 0.2s ease ;
327359}
328360
329- .branch-select :focus {
361+ .branch-select :focus ,
362+ .author-select :focus {
330363 border-color : var (--vscode-focusBorder );
331364}
332365
333- .branch-select :disabled {
366+ .branch-select :disabled ,
367+ .author-select :disabled {
334368 opacity : 0.6 ;
335369 cursor : not-allowed ;
336370}
0 commit comments