申请证书任务列表区分管理员和用户

This commit is contained in:
GoEdgeLab
2023-10-09 16:18:27 +08:00
parent 536f080d81
commit 37e607d733
2 changed files with 62 additions and 20 deletions

View File

@@ -20,9 +20,13 @@ func (this *IndexAction) RunGet(params struct {
UserId int64 UserId int64
Type string Type string
Keyword string Keyword string
UserType string
}) { }) {
this.Data["type"] = params.Type this.Data["type"] = params.Type
this.Data["keyword"] = params.Keyword this.Data["keyword"] = params.Keyword
this.Data["userType"] = params.UserType
var userOnly = params.UserId > 0 || params.UserType == "user"
// 当前用户 // 当前用户
this.Data["searchingUserId"] = params.UserId this.Data["searchingUserId"] = params.UserId
@@ -60,6 +64,7 @@ func (this *IndexAction) RunGet(params struct {
resp, err := this.RPC().ACMETaskRPC().CountAllEnabledACMETasks(this.AdminContext(), &pb.CountAllEnabledACMETasksRequest{ resp, err := this.RPC().ACMETaskRPC().CountAllEnabledACMETasks(this.AdminContext(), &pb.CountAllEnabledACMETasksRequest{
UserId: params.UserId, UserId: params.UserId,
Keyword: params.Keyword, Keyword: params.Keyword,
UserOnly: userOnly,
}) })
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -72,6 +77,7 @@ func (this *IndexAction) RunGet(params struct {
UserId: params.UserId, UserId: params.UserId,
IsAvailable: true, IsAvailable: true,
Keyword: params.Keyword, Keyword: params.Keyword,
UserOnly: userOnly,
}) })
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -84,6 +90,7 @@ func (this *IndexAction) RunGet(params struct {
UserId: params.UserId, UserId: params.UserId,
IsExpired: true, IsExpired: true,
Keyword: params.Keyword, Keyword: params.Keyword,
UserOnly: userOnly,
}) })
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -96,6 +103,7 @@ func (this *IndexAction) RunGet(params struct {
UserId: params.UserId, UserId: params.UserId,
ExpiringDays: 7, ExpiringDays: 7,
Keyword: params.Keyword, Keyword: params.Keyword,
UserOnly: userOnly,
}) })
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -108,6 +116,7 @@ func (this *IndexAction) RunGet(params struct {
UserId: params.UserId, UserId: params.UserId,
ExpiringDays: 30, ExpiringDays: 30,
Keyword: params.Keyword, Keyword: params.Keyword,
UserOnly: userOnly,
}) })
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -134,6 +143,7 @@ func (this *IndexAction) RunGet(params struct {
Offset: page.Offset, Offset: page.Offset,
Size: page.Size, Size: page.Size,
Keyword: params.Keyword, Keyword: params.Keyword,
UserOnly: userOnly,
}) })
case "available": case "available":
page = this.NewPage(countAvailable) page = this.NewPage(countAvailable)
@@ -143,6 +153,7 @@ func (this *IndexAction) RunGet(params struct {
Offset: page.Offset, Offset: page.Offset,
Size: page.Size, Size: page.Size,
Keyword: params.Keyword, Keyword: params.Keyword,
UserOnly: userOnly,
}) })
case "expired": case "expired":
page = this.NewPage(countExpired) page = this.NewPage(countExpired)
@@ -152,6 +163,7 @@ func (this *IndexAction) RunGet(params struct {
Offset: page.Offset, Offset: page.Offset,
Size: page.Size, Size: page.Size,
Keyword: params.Keyword, Keyword: params.Keyword,
UserOnly: userOnly,
}) })
case "7days": case "7days":
page = this.NewPage(count7Days) page = this.NewPage(count7Days)
@@ -161,6 +173,7 @@ func (this *IndexAction) RunGet(params struct {
Offset: page.Offset, Offset: page.Offset,
Size: page.Size, Size: page.Size,
Keyword: params.Keyword, Keyword: params.Keyword,
UserOnly: userOnly,
}) })
case "30days": case "30days":
page = this.NewPage(count30Days) page = this.NewPage(count30Days)
@@ -170,12 +183,14 @@ func (this *IndexAction) RunGet(params struct {
Offset: page.Offset, Offset: page.Offset,
Size: page.Size, Size: page.Size,
Keyword: params.Keyword, Keyword: params.Keyword,
UserOnly: userOnly,
}) })
default: default:
page = this.NewPage(countAll) page = this.NewPage(countAll)
tasksResp, err = this.RPC().ACMETaskRPC().ListEnabledACMETasks(this.AdminContext(), &pb.ListEnabledACMETasksRequest{ tasksResp, err = this.RPC().ACMETaskRPC().ListEnabledACMETasks(this.AdminContext(), &pb.ListEnabledACMETasksRequest{
UserId: params.UserId, UserId: params.UserId,
Keyword: params.Keyword, Keyword: params.Keyword,
UserOnly: userOnly,
Offset: page.Offset, Offset: page.Offset,
Size: page.Size, Size: page.Size,
}) })
@@ -242,6 +257,23 @@ func (this *IndexAction) RunGet(params struct {
} }
} }
// user
userResp, err := this.RPC().ACMETaskRPC().FindACMETaskUser(this.AdminContext(), &pb.FindACMETaskUserRequest{AcmeTaskId: task.Id})
if err != nil {
this.ErrorPage(err)
return
}
var taskUserMap = maps.Map{
"id": 0,
}
if userResp.User != nil {
taskUserMap = maps.Map{
"id": userResp.User.Id,
"username": userResp.User.Username,
"fullname": userResp.User.Fullname,
}
}
taskMaps = append(taskMaps, maps.Map{ taskMaps = append(taskMaps, maps.Map{
"id": task.Id, "id": task.Id,
"authType": task.AuthType, "authType": task.AuthType,
@@ -257,6 +289,7 @@ func (this *IndexAction) RunGet(params struct {
"autoRenew": task.AutoRenew, "autoRenew": task.AutoRenew,
"cert": certMap, "cert": certMap,
"log": logMap, "log": logMap,
"user": taskUserMap,
}) })
} }
this.Data["tasks"] = taskMaps this.Data["tasks"] = taskMaps

View File

@@ -5,14 +5,15 @@
{$template "menu"} {$template "menu"}
<second-menu> <second-menu>
<menu-item :href="'/servers/certs/acme?keyword=' + keyword + '&userId=' + searchingUserId" :active="type == ''">所有任务({{countAll}})</menu-item> <menu-item :href="'/servers/certs/acme?userType=' + userType + '&keyword=' + keyword + '&userId=' + searchingUserId" :active="type == ''">所有任务({{countAll}})</menu-item>
<menu-item :href="'/servers/certs/acme?type=available&keyword=' + keyword + '&userId=' + searchingUserId" :active="type == 'available'">有效证书({{countAvailable}})</menu-item> <menu-item :href="'/servers/certs/acme?userType=' + userType + '&type=available&keyword=' + keyword + '&userId=' + searchingUserId" :active="type == 'available'">有效证书({{countAvailable}})</menu-item>
<menu-item :href="'/servers/certs/acme?type=expired&keyword=' + keyword + '&userId=' + searchingUserId" :active="type == 'expired'">过期证书<span :class="{red: countExpired > 0}">({{countExpired}})</span></menu-item> <menu-item :href="'/servers/certs/acme?userType=' + userType + '&type=expired&keyword=' + keyword + '&userId=' + searchingUserId" :active="type == 'expired'">过期证书<span :class="{red: countExpired > 0}">({{countExpired}})</span></menu-item>
<menu-item :href="'/servers/certs/acme?type=7days&keyword=' + keyword + '&userId=' + searchingUserId" :active="type == '7days'">7天内过期<span :class="{red: count7Days > 0}">({{count7Days}})</span></menu-item> <menu-item :href="'/servers/certs/acme?userType=' + userType + '&type=7days&keyword=' + keyword + '&userId=' + searchingUserId" :active="type == '7days'">7天内过期<span :class="{red: count7Days > 0}">({{count7Days}})</span></menu-item>
<menu-item :href="'/servers/certs/acme?type=30days&keyword=' + keyword + '&userId=' + searchingUserId" :active="type == '30days'">30天内过期({{count30Days}})</menu-item> <menu-item :href="'/servers/certs/acme?userType=' + userType + '&type=30days&keyword=' + keyword + '&userId=' + searchingUserId" :active="type == '30days'">30天内过期({{count30Days}})</menu-item>
</second-menu> </second-menu>
<form class="ui form"> <form class="ui form">
<input type="hidden" name="userType" :value="userType"/>
<div class="ui fields inline"> <div class="ui fields inline">
<div class="ui field"> <div class="ui field">
<input type="text" name="keyword" placeholder="域名等关键词" style="width:12em" v-model="keyword"/> <input type="text" name="keyword" placeholder="域名等关键词" style="width:12em" v-model="keyword"/>
@@ -24,11 +25,19 @@
<div class="ui field"> <div class="ui field">
<button type="submit" class="ui button">搜索</button> <button type="submit" class="ui button">搜索</button>
<a :href="Tea.url('.')" v-if="keyword.length > 0 || searchingUserId > 0">[清除条件]</a> <a :href="Tea.url('.', {userType:userType})" v-if="keyword.length > 0 || searchingUserId > 0">[清除条件]</a>
</div> </div>
</div> </div>
</form> </form>
<div v-if="searchingUserId == 0">
<div class="ui menu text basic tiny blue" style="margin-bottom:0">
<a :href="'/servers/certs/acme?userType=&type=' + type + '&keyword=' + keyword + '&userId=' + searchingUserId" class="item" :class="{active: userType == ''}">管理员证书</a>
<a :href="'/servers/certs/acme?userType=user&type=' + type + '&keyword=' + keyword + '&userId=' + searchingUserId" class="item" :class="{active: userType == 'user'}">用户证书</a>
</div>
<div class="ui divider" style="margin-top:0"></div>
</div>
<p class="comment" v-if="tasks.length == 0"><span v-if="searchingUserId > 0">当前用户下</span>暂时还没有证书申请任务。</p> <p class="comment" v-if="tasks.length == 0"><span v-if="searchingUserId > 0">当前用户下</span>暂时还没有证书申请任务。</p>
<div class="ui message blue" v-if="isRunning">有任务在执行中,可能需要的时间较长,请耐心等待。</div> <div class="ui message blue" v-if="isRunning">有任务在执行中,可能需要的时间较长,请耐心等待。</div>
@@ -84,7 +93,7 @@
<span class="disabled" v-else="">-</span> <span class="disabled" v-else="">-</span>
</td> </td>
<td> <td>
<span v-if="user != null && user.id > 0"><user-link :v-user="user"></user-link></span> <span v-if="task.user != null && task.user.id > 0"><user-link :v-user="task.user"></user-link></span>
<span v-else class="disabled">管理员</span> <span v-else class="disabled">管理员</span>
</td> </td>
<td> <td>