From 7e8581a7de2cc5c65b445a6374a616c6070bda35 Mon Sep 17 00:00:00 2001
From: CityFun <31820853+zhengkunwang223@users.noreply.github.com>
Date: Mon, 15 Sep 2025 13:37:27 +0800
Subject: [PATCH] feat: The certificate list supports sorting by expiration
date. (#10372)
Refs https://github.com/1Panel-dev/1Panel/issues/10371
---
agent/app/dto/request/website_ssl.go | 2 ++
agent/app/service/website_ssl.go | 6 +++++-
frontend/src/views/website/ssl/index.vue | 12 ++++++++++++
3 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/agent/app/dto/request/website_ssl.go b/agent/app/dto/request/website_ssl.go
index a67c2d9f5..96c5c4d25 100644
--- a/agent/app/dto/request/website_ssl.go
+++ b/agent/app/dto/request/website_ssl.go
@@ -6,6 +6,8 @@ type WebsiteSSLSearch struct {
dto.PageInfo
AcmeAccountID string `json:"acmeAccountID"`
Domain string `json:"domain"`
+ OrderBy string `json:"orderBy" validate:"required,oneof=expire_date"`
+ Order string `json:"order" validate:"required,oneof=null ascending descending"`
}
type WebsiteSSLCreate struct {
diff --git a/agent/app/service/website_ssl.go b/agent/app/service/website_ssl.go
index 1e68665ae..5ce24c903 100644
--- a/agent/app/service/website_ssl.go
+++ b/agent/app/service/website_ssl.go
@@ -59,7 +59,11 @@ func (w WebsiteSSLService) Page(search request.WebsiteSSLSearch) (int64, []respo
result []response.WebsiteSSLDTO
opts []repo.DBOption
)
- opts = append(opts, repo.WithOrderBy("created_at desc"))
+ if search.OrderBy != "" && search.Order != "null" {
+ opts = append(opts, repo.WithOrderRuleBy(search.OrderBy, search.Order))
+ } else {
+ opts = append(opts, repo.WithOrderBy("created_at desc"))
+ }
if search.Domain != "" {
opts = append(opts, websiteSSLRepo.WithByDomain(search.Domain))
}
diff --git a/frontend/src/views/website/ssl/index.vue b/frontend/src/views/website/ssl/index.vue
index a1a698bfb..50b1bea5c 100644
--- a/frontend/src/views/website/ssl/index.vue
+++ b/frontend/src/views/website/ssl/index.vue
@@ -43,6 +43,7 @@
:columns="columns"
localKey="sslColumn"
:height-diff="260"
+ @sort-change="changeSort"
>
([]);
const columns = ref([]);
const req = reactive({
domain: '',
+ orderBy: 'expire_date',
+ order: 'ascending',
});
const routerButton = [
@@ -302,11 +306,19 @@ const mobile = computed(() => {
return globalStore.isMobile();
});
+const changeSort = ({ order }) => {
+ req.orderBy = 'expire_date';
+ req.order = order;
+ search();
+};
+
const search = () => {
const request = {
page: paginationConfig.currentPage,
pageSize: paginationConfig.pageSize,
domain: req.domain,
+ orderBy: req.orderBy,
+ order: req.order,
};
loading.value = true;
searchSSL(request)