mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-08 07:50:28 +08:00
实现服务的缓存策略设置
This commit is contained in:
@@ -113,5 +113,13 @@ func (this *ParentAction) RPC() *rpc.RPCClient {
|
|||||||
|
|
||||||
// 获取Context
|
// 获取Context
|
||||||
func (this *ParentAction) AdminContext() context.Context {
|
func (this *ParentAction) AdminContext() context.Context {
|
||||||
|
if this.rpcClient == nil {
|
||||||
|
rpcClient, err := rpc.SharedRPC()
|
||||||
|
if err != nil {
|
||||||
|
logs.Fatal(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
this.rpcClient = rpcClient
|
||||||
|
}
|
||||||
return this.rpcClient.Context(this.AdminId())
|
return this.rpcClient.Context(this.AdminId())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ func (this *CreatePopupAction) Init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (this *CreatePopupAction) RunGet(params struct{}) {
|
func (this *CreatePopupAction) RunGet(params struct{}) {
|
||||||
this.Data["types"] = serverconfigs.AllCachePolicyTypes
|
this.Data["types"] = serverconfigs.AllCachePolicyStorageTypes
|
||||||
this.Show()
|
this.Show()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,15 +44,15 @@ func (this *CreatePopupAction) RunPost(params struct {
|
|||||||
// 校验选项
|
// 校验选项
|
||||||
var options interface{}
|
var options interface{}
|
||||||
switch params.Type {
|
switch params.Type {
|
||||||
case serverconfigs.CachePolicyTypeFile:
|
case serverconfigs.CachePolicyStorageFile:
|
||||||
params.Must.
|
params.Must.
|
||||||
Field("fileDir", params.FileDir).
|
Field("fileDir", params.FileDir).
|
||||||
Require("请输入缓存目录")
|
Require("请输入缓存目录")
|
||||||
options = &serverconfigs.HTTPFileCacheConfig{
|
options = &serverconfigs.HTTPFileCacheStorage{
|
||||||
Dir: params.FileDir,
|
Dir: params.FileDir,
|
||||||
}
|
}
|
||||||
case serverconfigs.CachePolicyTypeMemory:
|
case serverconfigs.CachePolicyStorageMemory:
|
||||||
options = &serverconfigs.HTTPMemoryCacheConfig{
|
options = &serverconfigs.HTTPMemoryCacheStorage{
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
this.Fail("请选择正确的缓存类型")
|
this.Fail("请选择正确的缓存类型")
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ func (this *IndexAction) RunGet(params struct{}) {
|
|||||||
countServers := countServersResp.Count
|
countServers := countServersResp.Count
|
||||||
|
|
||||||
infos = append(infos, maps.Map{
|
infos = append(infos, maps.Map{
|
||||||
"typeName": serverconfigs.FindCachePolicyTypeName(cachePolicy.Type),
|
"typeName": serverconfigs.FindCachePolicyStorageName(cachePolicy.Type),
|
||||||
"countServers": countServers,
|
"countServers": countServers,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ func (this *PolicyAction) RunGet(params struct {
|
|||||||
}
|
}
|
||||||
this.Data["cachePolicy"] = cachePolicy
|
this.Data["cachePolicy"] = cachePolicy
|
||||||
|
|
||||||
this.Data["typeName"] = serverconfigs.FindCachePolicyTypeName(cachePolicy.Type)
|
this.Data["typeName"] = serverconfigs.FindCachePolicyStorageName(cachePolicy.Type)
|
||||||
|
|
||||||
this.Show()
|
this.Show()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ func (this *UpdateAction) RunGet(params struct {
|
|||||||
this.Data["cachePolicy"] = cachePolicy
|
this.Data["cachePolicy"] = cachePolicy
|
||||||
|
|
||||||
// 其他选项
|
// 其他选项
|
||||||
this.Data["types"] = serverconfigs.AllCachePolicyTypes
|
this.Data["types"] = serverconfigs.AllCachePolicyStorageTypes
|
||||||
|
|
||||||
this.Show()
|
this.Show()
|
||||||
}
|
}
|
||||||
@@ -69,15 +69,15 @@ func (this *UpdateAction) RunPost(params struct {
|
|||||||
// 校验选项
|
// 校验选项
|
||||||
var options interface{}
|
var options interface{}
|
||||||
switch params.Type {
|
switch params.Type {
|
||||||
case serverconfigs.CachePolicyTypeFile:
|
case serverconfigs.CachePolicyStorageFile:
|
||||||
params.Must.
|
params.Must.
|
||||||
Field("fileDir", params.FileDir).
|
Field("fileDir", params.FileDir).
|
||||||
Require("请输入缓存目录")
|
Require("请输入缓存目录")
|
||||||
options = &serverconfigs.HTTPFileCacheConfig{
|
options = &serverconfigs.HTTPFileCacheStorage{
|
||||||
Dir: params.FileDir,
|
Dir: params.FileDir,
|
||||||
}
|
}
|
||||||
case serverconfigs.CachePolicyTypeMemory:
|
case serverconfigs.CachePolicyStorageMemory:
|
||||||
options = &serverconfigs.HTTPMemoryCacheConfig{
|
options = &serverconfigs.HTTPMemoryCacheStorage{
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
this.Fail("请选择正确的缓存类型")
|
this.Fail("请选择正确的缓存类型")
|
||||||
|
|||||||
81
internal/web/actions/default/servers/server/settings/cache/createPopup.go
vendored
Normal file
81
internal/web/actions/default/servers/server/settings/cache/createPopup.go
vendored
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
package cache
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/models"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||||
|
"github.com/iwind/TeaGo/actions"
|
||||||
|
"github.com/iwind/TeaGo/maps"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CreatePopupAction struct {
|
||||||
|
actionutils.ParentAction
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *CreatePopupAction) Init() {
|
||||||
|
this.Nav("", "", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *CreatePopupAction) RunGet(params struct{}) {
|
||||||
|
// 缓存策略列表
|
||||||
|
cachePoliciesResp, err := this.RPC().HTTPCachePolicyRPC().FindAllEnabledHTTPCachePolicies(this.AdminContext(), &pb.FindAllEnabledHTTPCachePoliciesRequest{})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cachePolicyMaps := []maps.Map{}
|
||||||
|
for _, cachePolicy := range cachePoliciesResp.CachePolicies {
|
||||||
|
cachePolicyMaps = append(cachePolicyMaps, maps.Map{
|
||||||
|
"id": cachePolicy.Id,
|
||||||
|
"name": cachePolicy.Name,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.Data["cachePolicies"] = cachePolicyMaps
|
||||||
|
|
||||||
|
this.Show()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *CreatePopupAction) RunPost(params struct {
|
||||||
|
CachePolicyId int64
|
||||||
|
CacheRefJSON []byte
|
||||||
|
|
||||||
|
Must *actions.Must
|
||||||
|
}) {
|
||||||
|
if params.CachePolicyId <= 0 {
|
||||||
|
this.Fail("请选择要使用的缓存策略")
|
||||||
|
}
|
||||||
|
|
||||||
|
cachePolicy, err := models.SharedHTTPCachePolicyDAO.FindEnabledCachePolicyConfig(this.AdminContext(), params.CachePolicyId)
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if cachePolicy == nil {
|
||||||
|
this.Fail("找不到你要使用的缓存策略")
|
||||||
|
}
|
||||||
|
|
||||||
|
cacheRef := &serverconfigs.HTTPCacheRef{}
|
||||||
|
err = json.Unmarshal(params.CacheRefJSON, cacheRef)
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(cacheRef.Key) == 0 {
|
||||||
|
this.Fail("请输入缓存Key")
|
||||||
|
}
|
||||||
|
|
||||||
|
cacheRef.CachePolicyId = cachePolicy.Id
|
||||||
|
cacheRef.CachePolicy = cachePolicy
|
||||||
|
|
||||||
|
err = cacheRef.Init()
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.Data["cacheRef"] = cacheRef
|
||||||
|
|
||||||
|
this.Success()
|
||||||
|
}
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
package cache
|
package cache
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||||
"github.com/iwind/TeaGo/actions"
|
"github.com/iwind/TeaGo/actions"
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type IndexAction struct {
|
type IndexAction struct {
|
||||||
@@ -27,23 +28,7 @@ func (this *IndexAction) RunGet(params struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.Data["webId"] = webConfig.Id
|
this.Data["webId"] = webConfig.Id
|
||||||
this.Data["cacheConfig"] = webConfig.CacheRefs
|
this.Data["cacheConfig"] = webConfig.Cache
|
||||||
|
|
||||||
// 所有缓存策略
|
|
||||||
cachePoliciesResp, err := this.RPC().HTTPCachePolicyRPC().FindAllEnabledHTTPCachePolicies(this.AdminContext(), &pb.FindAllEnabledHTTPCachePoliciesRequest{})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
policyMaps := []maps.Map{}
|
|
||||||
for _, policy := range cachePoliciesResp.CachePolicies {
|
|
||||||
policyMaps = append(policyMaps, maps.Map{
|
|
||||||
"id": policy.Id,
|
|
||||||
"name": policy.Name,
|
|
||||||
"isOn": policy.IsOn,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["policies"] = policyMaps
|
|
||||||
|
|
||||||
this.Show()
|
this.Show()
|
||||||
}
|
}
|
||||||
@@ -55,10 +40,27 @@ func (this *IndexAction) RunPost(params struct {
|
|||||||
Must *actions.Must
|
Must *actions.Must
|
||||||
}) {
|
}) {
|
||||||
// TODO 校验配置
|
// TODO 校验配置
|
||||||
|
cacheConfig := &serverconfigs.HTTPCacheConfig{}
|
||||||
|
err := json.Unmarshal(params.CacheJSON, cacheConfig)
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
_, err := this.RPC().HTTPWebRPC().UpdateHTTPWebCache(this.AdminContext(), &pb.UpdateHTTPWebCacheRequest{
|
// 去除不必要的部分
|
||||||
|
for _, cacheRef := range cacheConfig.CacheRefs {
|
||||||
|
cacheRef.CachePolicy = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
cacheJSON, err := json.Marshal(cacheConfig)
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = this.RPC().HTTPWebRPC().UpdateHTTPWebCache(this.AdminContext(), &pb.UpdateHTTPWebCacheRequest{
|
||||||
WebId: params.WebId,
|
WebId: params.WebId,
|
||||||
CacheJSON: params.CacheJSON,
|
CacheJSON: cacheJSON,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ func init() {
|
|||||||
Helper(serverutils.NewServerHelper()).
|
Helper(serverutils.NewServerHelper()).
|
||||||
Prefix("/servers/server/settings/cache").
|
Prefix("/servers/server/settings/cache").
|
||||||
GetPost("", new(IndexAction)).
|
GetPost("", new(IndexAction)).
|
||||||
|
GetPost("/createPopup", new(CreatePopupAction)).
|
||||||
EndAll()
|
EndAll()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
package cache
|
package cache
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||||
"github.com/iwind/TeaGo/actions"
|
"github.com/iwind/TeaGo/actions"
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type IndexAction struct {
|
type IndexAction struct {
|
||||||
@@ -25,23 +26,7 @@ func (this *IndexAction) RunGet(params struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.Data["webId"] = webConfig.Id
|
this.Data["webId"] = webConfig.Id
|
||||||
this.Data["cacheConfig"] = webConfig.CacheRefs
|
this.Data["cacheConfig"] = webConfig.Cache
|
||||||
|
|
||||||
// 所有缓存策略
|
|
||||||
cachePoliciesResp, err := this.RPC().HTTPCachePolicyRPC().FindAllEnabledHTTPCachePolicies(this.AdminContext(), &pb.FindAllEnabledHTTPCachePoliciesRequest{})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
policyMaps := []maps.Map{}
|
|
||||||
for _, policy := range cachePoliciesResp.CachePolicies {
|
|
||||||
policyMaps = append(policyMaps, maps.Map{
|
|
||||||
"id": policy.Id,
|
|
||||||
"name": policy.Name,
|
|
||||||
"isOn": policy.IsOn,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["policies"] = policyMaps
|
|
||||||
|
|
||||||
this.Show()
|
this.Show()
|
||||||
}
|
}
|
||||||
@@ -53,10 +38,27 @@ func (this *IndexAction) RunPost(params struct {
|
|||||||
Must *actions.Must
|
Must *actions.Must
|
||||||
}) {
|
}) {
|
||||||
// TODO 校验配置
|
// TODO 校验配置
|
||||||
|
cacheConfig := &serverconfigs.HTTPCacheConfig{}
|
||||||
|
err := json.Unmarshal(params.CacheJSON, cacheConfig)
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
_, err := this.RPC().HTTPWebRPC().UpdateHTTPWebCache(this.AdminContext(), &pb.UpdateHTTPWebCacheRequest{
|
// 去除不必要的部分
|
||||||
|
for _, cacheRef := range cacheConfig.CacheRefs {
|
||||||
|
cacheRef.CachePolicy = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
cacheJSON, err := json.Marshal(cacheConfig)
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = this.RPC().HTTPWebRPC().UpdateHTTPWebCache(this.AdminContext(), &pb.UpdateHTTPWebCacheRequest{
|
||||||
WebId: params.WebId,
|
WebId: params.WebId,
|
||||||
CacheJSON: params.CacheJSON,
|
CacheJSON: cacheJSON,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ func (this *LocationHelper) createMenus(serverIdString string, locationIdString
|
|||||||
"name": "缓存",
|
"name": "缓存",
|
||||||
"url": "/servers/server/settings/locations/cache?serverId=" + serverIdString + "&locationId=" + locationIdString,
|
"url": "/servers/server/settings/locations/cache?serverId=" + serverIdString + "&locationId=" + locationIdString,
|
||||||
"isActive": secondMenuItem == "cache",
|
"isActive": secondMenuItem == "cache",
|
||||||
"isOn": locationConfig != nil && locationConfig.Web != nil && len(locationConfig.Web.CacheRefs) > 0,
|
"isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.Cache != nil && locationConfig.Web.Cache.IsOn && len(locationConfig.Web.Cache.CacheRefs) > 0,
|
||||||
})
|
})
|
||||||
menuItems = append(menuItems, maps.Map{
|
menuItems = append(menuItems, maps.Map{
|
||||||
"name": "访问控制",
|
"name": "访问控制",
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri
|
|||||||
"name": "缓存",
|
"name": "缓存",
|
||||||
"url": "/servers/server/settings/cache?serverId=" + serverIdString,
|
"url": "/servers/server/settings/cache?serverId=" + serverIdString,
|
||||||
"isActive": secondMenuItem == "cache",
|
"isActive": secondMenuItem == "cache",
|
||||||
"isOn": serverConfig.Web != nil && len(serverConfig.Web.CacheRefs) > 0,
|
"isOn": serverConfig.Web != nil && serverConfig.Web.Cache != nil && serverConfig.Web.Cache.IsOn && len(serverConfig.Web.Cache.CacheRefs) > 0,
|
||||||
})
|
})
|
||||||
menuItems = append(menuItems, maps.Map{
|
menuItems = append(menuItems, maps.Map{
|
||||||
"name": "访问控制",
|
"name": "访问控制",
|
||||||
|
|||||||
35
internal/web/models/http_cache_policy_dao.go
Normal file
35
internal/web/models/http_cache_policy_dao.go
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/rpc"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||||
|
)
|
||||||
|
|
||||||
|
var SharedHTTPCachePolicyDAO = new(HTTPCachePolicyDAO)
|
||||||
|
|
||||||
|
type HTTPCachePolicyDAO struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查找缓存策略配置
|
||||||
|
func (this *HTTPCachePolicyDAO) FindEnabledCachePolicyConfig(ctx context.Context, cachePolicyId int64) (*serverconfigs.HTTPCachePolicy, error) {
|
||||||
|
rpcClient, err := rpc.SharedRPC()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp, err := rpcClient.HTTPCachePolicyRPC().FindEnabledHTTPCachePolicyConfig(ctx, &pb.FindEnabledHTTPCachePolicyConfigRequest{CachePolicyId: cachePolicyId})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(resp.CachePolicyJSON) == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
config := &serverconfigs.HTTPCachePolicy{}
|
||||||
|
err = json.Unmarshal(resp.CachePolicyJSON, config)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return config, nil
|
||||||
|
}
|
||||||
@@ -5,14 +5,15 @@ Vue.component("more-options-indicator", {
|
|||||||
data: function () {
|
data: function () {
|
||||||
return {
|
return {
|
||||||
visible: false
|
visible: false
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
changeVisible: function () {
|
changeVisible: function () {
|
||||||
this.visible = !this.visible;
|
this.visible = !this.visible
|
||||||
if (Tea.Vue != null) {
|
if (Tea.Vue != null) {
|
||||||
Tea.Vue.moreOptionsVisible = this.visible;
|
Tea.Vue.moreOptionsVisible = this.visible
|
||||||
}
|
}
|
||||||
|
this.$emit("change", this.visible)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
template: '<a href="" style="font-weight: normal" @click.prevent="changeVisible()"><span v-if="!visible">更多选项</span><span v-if="visible">收起选项</span> <i class="icon angle" :class="{down:!visible, up:visible}"></i> </a>'
|
template: '<a href="" style="font-weight: normal" @click.prevent="changeVisible()"><span v-if="!visible">更多选项</span><span v-if="visible">收起选项</span> <i class="icon angle" :class="{down:!visible, up:visible}"></i> </a>'
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Vue.component("size-capacity-box", {
|
|||||||
v["count"] = -1
|
v["count"] = -1
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
"size": v,
|
size: v,
|
||||||
countString: (v.count >= 0) ? v.count.toString() : ""
|
countString: (v.count >= 0) ? v.count.toString() : ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -21,12 +21,19 @@ Vue.component("size-capacity-box", {
|
|||||||
let value = newValue.trim()
|
let value = newValue.trim()
|
||||||
if (value.length == 0) {
|
if (value.length == 0) {
|
||||||
this.size.count = -1
|
this.size.count = -1
|
||||||
|
this.change()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let count = parseInt(value)
|
let count = parseInt(value)
|
||||||
if (!isNaN(count)) {
|
if (!isNaN(count)) {
|
||||||
this.size.count = count
|
this.size.count = count
|
||||||
}
|
}
|
||||||
|
this.change()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
change: function () {
|
||||||
|
this.$emit("change", this.size)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
template: `<div class="ui fields inline">
|
template: `<div class="ui fields inline">
|
||||||
@@ -35,7 +42,7 @@ Vue.component("size-capacity-box", {
|
|||||||
<input type="text" v-model="countString" maxlength="11" size="11"/>
|
<input type="text" v-model="countString" maxlength="11" size="11"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="ui field">
|
<div class="ui field">
|
||||||
<select class="ui dropdown" v-model="size.unit">
|
<select class="ui dropdown" v-model="size.unit" @change="change">
|
||||||
<option value="byte">字节</option>
|
<option value="byte">字节</option>
|
||||||
<option value="kb">KB</option>
|
<option value="kb">KB</option>
|
||||||
<option value="mb">MB</option>
|
<option value="mb">MB</option>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Vue.component("time-duration-box", {
|
|||||||
v["count"] = -1
|
v["count"] = -1
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
"size": v,
|
duration: v,
|
||||||
countString: (v.count >= 0) ? v.count.toString() : ""
|
countString: (v.count >= 0) ? v.count.toString() : ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -20,22 +20,28 @@ Vue.component("time-duration-box", {
|
|||||||
"countString": function (newValue) {
|
"countString": function (newValue) {
|
||||||
let value = newValue.trim()
|
let value = newValue.trim()
|
||||||
if (value.length == 0) {
|
if (value.length == 0) {
|
||||||
this.size.count = -1
|
this.duration.count = -1
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let count = parseInt(value)
|
let count = parseInt(value)
|
||||||
if (!isNaN(count)) {
|
if (!isNaN(count)) {
|
||||||
this.size.count = count
|
this.duration.count = count
|
||||||
}
|
}
|
||||||
|
this.change()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
change: function () {
|
||||||
|
this.$emit("change", this.duration)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
template: `<div class="ui fields inline">
|
template: `<div class="ui fields inline">
|
||||||
<input type="hidden" :name="vName" :value="JSON.stringify(size)"/>
|
<input type="hidden" :name="vName" :value="JSON.stringify(duration)"/>
|
||||||
<div class="ui field">
|
<div class="ui field">
|
||||||
<input type="text" v-model="countString" maxlength="11" size="11"/>
|
<input type="text" v-model="countString" maxlength="11" size="11"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="ui field">
|
<div class="ui field">
|
||||||
<select class="ui dropdown" v-model="size.unit">
|
<select class="ui dropdown" v-model="duration.unit" @change="change">
|
||||||
<option value="ms">毫秒</option>
|
<option value="ms">毫秒</option>
|
||||||
<option value="second">秒</option>
|
<option value="second">秒</option>
|
||||||
<option value="minute">分钟</option>
|
<option value="minute">分钟</option>
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
Vue.component("http-cache-cond-box", {
|
|
||||||
template: `<div>
|
|
||||||
<table class="ui table definition selectable">
|
|
||||||
<tr>
|
|
||||||
<td>匹配条件</td>
|
|
||||||
<td><http-request-conds-box></http-request-conds-box></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>缓存有效期</td>
|
|
||||||
<td>
|
|
||||||
<time-duration-box :name="'lifeJSON'" :v-count="3600" :v-unit="'second'"></time-duration-box>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>状态码列表</td>
|
|
||||||
<td>
|
|
||||||
<values-box name="statusList" size="3" maxlength="3" :values="['200']"></values-box>
|
|
||||||
<p class="comment">允许缓存的HTTP状态码列表。</p>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>跳过的Cache-Control值</td>
|
|
||||||
<td>
|
|
||||||
<values-box name="skipResponseCacheControlValues" size="10" maxlength="100" :values="['private', 'no-cache', 'no-store']"></values-box>
|
|
||||||
<p class="comment">当响应的Cache-Control为这些值时不缓存响应内容,而且不区分大小写。</p>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>跳过Set-Cookie</td>
|
|
||||||
<td>
|
|
||||||
<div class="ui checkbox">
|
|
||||||
<input type="checkbox" name="skipResponseSetCookie" value="1" checked="checked"/>
|
|
||||||
<label></label>
|
|
||||||
</div>
|
|
||||||
<p class="comment">选中后,当响应的Header中有Set-Cookie时不缓存响应内容。</p>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>支持请求no-cache刷新</td>
|
|
||||||
<td>
|
|
||||||
<div class="ui checkbox">
|
|
||||||
<input type="checkbox" name="enableRequestCachePragma" value="1"/>
|
|
||||||
<label></label>
|
|
||||||
</div>
|
|
||||||
<p class="comment">选中后,当请求的Header中含有Pragma: no-cache或Cache-Control: no-cache时,会跳过缓存直接读取源内容。</p>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>`
|
|
||||||
})
|
|
||||||
@@ -6,7 +6,7 @@ Vue.component("http-cache-config-box", {
|
|||||||
cacheConfig = {
|
cacheConfig = {
|
||||||
isPrior: false,
|
isPrior: false,
|
||||||
isOn: false,
|
isOn: false,
|
||||||
cachePolicyId: 0
|
cacheRefs: []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
@@ -14,8 +14,71 @@ Vue.component("http-cache-config-box", {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
changePolicyId: function () {
|
isOn: function () {
|
||||||
this.cacheConfig.cachePolicyId = parseInt(this.cacheConfig.cachePolicyId)
|
return (!this.vIsLocation || this.cacheConfig.isPrior) && this.cacheConfig.isOn
|
||||||
|
},
|
||||||
|
addRef: function () {
|
||||||
|
window.UPDATING_CACHE_REF = null
|
||||||
|
|
||||||
|
let width = window.innerWidth
|
||||||
|
if (width > 1024) {
|
||||||
|
width = 1024
|
||||||
|
}
|
||||||
|
let height = window.innerHeight
|
||||||
|
if (height > 500) {
|
||||||
|
height = 500
|
||||||
|
}
|
||||||
|
let that = this
|
||||||
|
teaweb.popup("/servers/server/settings/cache/createPopup", {
|
||||||
|
width: width + "px",
|
||||||
|
height: height + "px",
|
||||||
|
callback: function (resp) {
|
||||||
|
that.cacheConfig.cacheRefs.push(resp.data.cacheRef)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
updateRef: function (index, cacheRef) {
|
||||||
|
window.UPDATING_CACHE_REF = cacheRef
|
||||||
|
|
||||||
|
let width = window.innerWidth
|
||||||
|
if (width > 1024) {
|
||||||
|
width = 1024
|
||||||
|
}
|
||||||
|
let height = window.innerHeight
|
||||||
|
if (height > 500) {
|
||||||
|
height = 500
|
||||||
|
}
|
||||||
|
let that = this
|
||||||
|
teaweb.popup("/servers/server/settings/cache/createPopup", {
|
||||||
|
width: width + "px",
|
||||||
|
height: height + "px",
|
||||||
|
callback: function (resp) {
|
||||||
|
Vue.set(that.cacheConfig.cacheRefs, index, resp.data.cacheRef)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
removeRef: function (index) {
|
||||||
|
let that = this
|
||||||
|
teaweb.confirm("确定要删除此缓存设置吗?", function () {
|
||||||
|
that.cacheConfig.cacheRefs.$remove(index)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
timeUnitName: function (unit) {
|
||||||
|
switch (unit) {
|
||||||
|
case "ms":
|
||||||
|
return "毫秒"
|
||||||
|
case "second":
|
||||||
|
return "秒"
|
||||||
|
case "minute":
|
||||||
|
return "分钟"
|
||||||
|
case "hour":
|
||||||
|
return "小时"
|
||||||
|
case "day":
|
||||||
|
return "天"
|
||||||
|
case "week":
|
||||||
|
return "周 "
|
||||||
|
}
|
||||||
|
return unit
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
template: `<div>
|
template: `<div>
|
||||||
@@ -33,21 +96,33 @@ Vue.component("http-cache-config-box", {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
<tbody v-show="(!vIsLocation || cacheConfig.isPrior) && cacheConfig.isOn">
|
|
||||||
<tr>
|
|
||||||
<td class="title">选择缓存策略</td>
|
|
||||||
<td>
|
|
||||||
<span class="disabled" v-if="vCachePolicies.length == 0">暂时没有可选的缓存策略</span>
|
|
||||||
<div v-if="vCachePolicies.length > 0">
|
|
||||||
<select class="ui dropdown auto-width" v-model="cacheConfig.cachePolicyId" @change="changePolicyId">
|
|
||||||
<option value="0">[不使用缓存策略]</option>
|
|
||||||
<option v-for="policy in vCachePolicies" :value="policy.id">{{policy.name}}</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<div v-show="isOn()">
|
||||||
|
<table class="ui table selectable" v-show="cacheConfig.cacheRefs.length > 0">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>缓存策略</th>
|
||||||
|
<th>条件</th>
|
||||||
|
<th>缓存时间</th>
|
||||||
|
<th class="two op">操作</th>
|
||||||
|
</tr>
|
||||||
|
<tr v-for="(cacheRef, index) in cacheConfig.cacheRefs">
|
||||||
|
<td>{{cacheRef.cachePolicy.name}}</td>
|
||||||
|
<td>
|
||||||
|
<http-request-conds-view :v-conds="cacheRef.conds"></http-request-conds-view>
|
||||||
|
</td>
|
||||||
|
<td>{{cacheRef.life.count}} {{timeUnitName(cacheRef.life.unit)}}</td>
|
||||||
|
<td>
|
||||||
|
<a href="" @click.prevent="updateRef(index, cacheRef)">修改</a>
|
||||||
|
<a href="" @click.prevent="removeRef(index)">删除</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<button class="ui button tiny" @click.prevent="addRef">+添加缓存设置</button>
|
||||||
|
</div>
|
||||||
<div class="margin"></div>
|
<div class="margin"></div>
|
||||||
</div>`
|
</div>`
|
||||||
})
|
})
|
||||||
110
web/public/js/components/server/http-cache-ref-box.js
Normal file
110
web/public/js/components/server/http-cache-ref-box.js
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
Vue.component("http-cache-ref-box", {
|
||||||
|
props: ["v-cache-ref"],
|
||||||
|
data: function () {
|
||||||
|
let ref = this.vCacheRef
|
||||||
|
if (ref == null) {
|
||||||
|
ref = {
|
||||||
|
isOn: true,
|
||||||
|
cachePolicyId: 0,
|
||||||
|
key: "${scheme}://${host}${requestURI}",
|
||||||
|
life: {count: 2, unit: "hour"},
|
||||||
|
status: [200],
|
||||||
|
maxSize: {count: 32, unit: "mb"},
|
||||||
|
skipCacheControlValues: ["private", "no-cache", "no-store"],
|
||||||
|
skipSetCookie: true,
|
||||||
|
enableRequestCachePragma: false,
|
||||||
|
conds: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ref.life == null) {
|
||||||
|
ref.life = {count: 2, unit: "hour"}
|
||||||
|
}
|
||||||
|
if (ref.maxSize == null) {
|
||||||
|
ref.maxSize = {count: 32, unit: "mb"}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
ref: ref,
|
||||||
|
moreOptionsVisible: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
changeOptionsVisible: function (v) {
|
||||||
|
this.moreOptionsVisible = v
|
||||||
|
},
|
||||||
|
changeLife: function (v) {
|
||||||
|
this.ref.life = v
|
||||||
|
},
|
||||||
|
changeMaxSize: function (v) {
|
||||||
|
this.ref.maxSize = v
|
||||||
|
},
|
||||||
|
changeConds: function (v) {
|
||||||
|
this.ref.conds = v
|
||||||
|
}
|
||||||
|
},
|
||||||
|
template: `<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>匹配条件 *</td>
|
||||||
|
<td>
|
||||||
|
<http-request-conds-box :v-conds="ref.conds" @change="changeConds"></http-request-conds-box>
|
||||||
|
|
||||||
|
<input type="hidden" name="cacheRefJSON" :value="JSON.stringify(ref)"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>缓存有效期 *</td>
|
||||||
|
<td>
|
||||||
|
<time-duration-box :v-value="ref.life" @change="changeLife"></time-duration-box>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>缓存Key *</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" v-model="ref.key"/>
|
||||||
|
<p class="comment">用来区分不同缓存内容的唯一Key。</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2"><more-options-indicator @change="changeOptionsVisible"></more-options-indicator></td>
|
||||||
|
</tr>
|
||||||
|
<tr v-show="moreOptionsVisible">
|
||||||
|
<td>可缓存的最大文件</td>
|
||||||
|
<td>
|
||||||
|
<size-capacity-box :v-value="ref.maxSize" @change="changeMaxSize"></size-capacity-box>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr v-show="moreOptionsVisible">
|
||||||
|
<td>状态码列表</td>
|
||||||
|
<td>
|
||||||
|
<values-box name="statusList" size="3" maxlength="3" :values="ref.status"></values-box>
|
||||||
|
<p class="comment">允许缓存的HTTP状态码列表。</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr v-show="moreOptionsVisible">
|
||||||
|
<td>跳过的Cache-Control值</td>
|
||||||
|
<td>
|
||||||
|
<values-box name="skipResponseCacheControlValues" size="10" maxlength="100" :values="ref.skipCacheControlValues"></values-box>
|
||||||
|
<p class="comment">当响应的Cache-Control为这些值时不缓存响应内容,而且不区分大小写。</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr v-show="moreOptionsVisible">
|
||||||
|
<td>跳过Set-Cookie</td>
|
||||||
|
<td>
|
||||||
|
<div class="ui checkbox">
|
||||||
|
<input type="checkbox" value="1" v-model="ref.skipSetCookie"/>
|
||||||
|
<label></label>
|
||||||
|
</div>
|
||||||
|
<p class="comment">选中后,当响应的Header中有Set-Cookie时不缓存响应内容。</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr v-show="moreOptionsVisible">
|
||||||
|
<td>支持请求no-cache刷新</td>
|
||||||
|
<td>
|
||||||
|
<div class="ui checkbox">
|
||||||
|
<input type="checkbox" name="enableRequestCachePragma" value="1" v-model="ref.enableRequestCachePragma"/>
|
||||||
|
<label></label>
|
||||||
|
</div>
|
||||||
|
<p class="comment">选中后,当请求的Header中含有Pragma: no-cache或Cache-Control: no-cache时,会跳过缓存直接读取源内容。</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>`
|
||||||
|
})
|
||||||
@@ -15,12 +15,18 @@ Vue.component("http-request-conds-box", {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
change: function () {
|
||||||
|
this.$emit("change", this.conds)
|
||||||
|
},
|
||||||
addGroup: function () {
|
addGroup: function () {
|
||||||
|
window.UPDATING_COND_GROUP = null
|
||||||
|
|
||||||
let that = this
|
let that = this
|
||||||
teaweb.popup("/servers/server/settings/conds/addGroupPopup", {
|
teaweb.popup("/servers/server/settings/conds/addGroupPopup", {
|
||||||
height: "30em",
|
height: "30em",
|
||||||
callback: function (resp) {
|
callback: function (resp) {
|
||||||
that.conds.groups.push(resp.data.group)
|
that.conds.groups.push(resp.data.group)
|
||||||
|
that.change()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@@ -31,6 +37,7 @@ Vue.component("http-request-conds-box", {
|
|||||||
height: "30em",
|
height: "30em",
|
||||||
callback: function (resp) {
|
callback: function (resp) {
|
||||||
Vue.set(that.conds.groups, groupIndex, resp.data.group)
|
Vue.set(that.conds.groups, groupIndex, resp.data.group)
|
||||||
|
that.change()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@@ -38,6 +45,7 @@ Vue.component("http-request-conds-box", {
|
|||||||
let that = this
|
let that = this
|
||||||
teaweb.confirm("确定要删除这一组条件吗?", function () {
|
teaweb.confirm("确定要删除这一组条件吗?", function () {
|
||||||
that.conds.groups.$remove(groupIndex)
|
that.conds.groups.$remove(groupIndex)
|
||||||
|
that.change()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
typeName: function (cond) {
|
typeName: function (cond) {
|
||||||
|
|||||||
45
web/public/js/components/server/http-request-conds-view.js
Normal file
45
web/public/js/components/server/http-request-conds-view.js
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
Vue.component("http-request-conds-view", {
|
||||||
|
props: ["v-conds"],
|
||||||
|
data: function () {
|
||||||
|
let conds = this.vConds
|
||||||
|
if (conds == null) {
|
||||||
|
conds = {
|
||||||
|
isOn: true,
|
||||||
|
connector: "or",
|
||||||
|
groups: []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
conds: conds,
|
||||||
|
components: window.REQUEST_COND_COMPONENTS
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
typeName: function (cond) {
|
||||||
|
let c = this.components.$find(function (k, v) {
|
||||||
|
return v.type == cond.type
|
||||||
|
})
|
||||||
|
if (c != null) {
|
||||||
|
return c.name;
|
||||||
|
}
|
||||||
|
return cond.param + " " + cond.operator
|
||||||
|
}
|
||||||
|
},
|
||||||
|
template: `<div>
|
||||||
|
<div v-if="conds.groups.length > 0">
|
||||||
|
<div v-for="(group, groupIndex) in conds.groups">
|
||||||
|
<var v-for="(cond, index) in group.conds" style="font-style: normal;display: inline-block; margin-bottom:0.5em">
|
||||||
|
<span class="ui label tiny">
|
||||||
|
<var v-if="cond.type.length == 0" style="font-style: normal">{{cond.param}} <var>{{cond.operator}}</var></var>
|
||||||
|
<var v-if="cond.type.length > 0" style="font-style: normal">{{typeName(cond)}}: </var>
|
||||||
|
{{cond.value}}
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<var v-if="index < group.conds.length - 1"> {{group.connector}} </var>
|
||||||
|
</var>
|
||||||
|
<div class="ui divider" v-if="groupIndex != conds.groups.length - 1" style="margin-top:0.3em;margin-bottom:0.5em"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>`
|
||||||
|
})
|
||||||
18
web/views/@default/servers/server/settings/cache/createPopup.html
vendored
Normal file
18
web/views/@default/servers/server/settings/cache/createPopup.html
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{$layout "layout_popup"}
|
||||||
|
|
||||||
|
<h3>添加缓存设置</h3>
|
||||||
|
|
||||||
|
<form class="ui form" data-tea-action="$" data-tea-success="success">
|
||||||
|
<table class="ui table definition selectable">
|
||||||
|
<tr>
|
||||||
|
<td class="title">缓存策略 *</td>
|
||||||
|
<td>
|
||||||
|
<select class="ui dropdown auto-width" name="cachePolicyId" v-model="cachePolicyId">
|
||||||
|
<option v-for="cachePolicy in cachePolicies" :value="cachePolicy.id">{{cachePolicy.name}}</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tbody is="http-cache-ref-box" :v-cache-ref="cacheRef"></tbody>
|
||||||
|
</table>
|
||||||
|
<submit-btn></submit-btn>
|
||||||
|
</form>
|
||||||
17
web/views/@default/servers/server/settings/cache/createPopup.js
vendored
Normal file
17
web/views/@default/servers/server/settings/cache/createPopup.js
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
Tea.context(function () {
|
||||||
|
this.success = NotifyPopup
|
||||||
|
this.cacheRef = null
|
||||||
|
|
||||||
|
let cachePolicyId = 0
|
||||||
|
if (this.cachePolicies.length > 0) {
|
||||||
|
cachePolicyId = this.cachePolicies[0].id
|
||||||
|
}
|
||||||
|
if (window.parent.UPDATING_CACHE_REF != null) {
|
||||||
|
let cacheRef = window.parent.UPDATING_CACHE_REF
|
||||||
|
this.cacheRef = cacheRef
|
||||||
|
if (cacheRef.cachePolicy != null) {
|
||||||
|
cachePolicyId = cacheRef.cachePolicy.id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.cachePolicyId = cachePolicyId
|
||||||
|
})
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
<div class="right-box">
|
<div class="right-box">
|
||||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
|
<form class="ui form" data-tea-action="$" data-tea-success="success">
|
||||||
<input type="hidden" name="webId" :value="webId"/>
|
<input type="hidden" name="webId" :value="webId"/>
|
||||||
<http-cache-config-box :v-cache-config="cacheConfig" :v-cache-policies="policies"></http-cache-config-box>
|
<http-cache-config-box :v-cache-config="cacheConfig"></http-cache-config-box>
|
||||||
<submit-btn></submit-btn>
|
<submit-btn></submit-btn>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@@ -13,6 +13,9 @@ Tea.context(function () {
|
|||||||
this.$delay(function () {
|
this.$delay(function () {
|
||||||
if (window.parent.UPDATING_COND_GROUP != null) {
|
if (window.parent.UPDATING_COND_GROUP != null) {
|
||||||
this.group = window.parent.UPDATING_COND_GROUP
|
this.group = window.parent.UPDATING_COND_GROUP
|
||||||
|
} else if (this.group.conds.length == 0) {
|
||||||
|
// 如果尚未有条件,则自动弹出添加界面
|
||||||
|
this.addCond()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<div class="right-box tiny">
|
<div class="right-box tiny">
|
||||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
|
<form class="ui form" data-tea-action="$" data-tea-success="success">
|
||||||
<input type="hidden" name="webId" :value="webId"/>
|
<input type="hidden" name="webId" :value="webId"/>
|
||||||
<http-cache-config-box :v-cache-config="cacheConfig" :v-cache-policies="policies" :v-is-location="true"></http-cache-config-box>
|
<http-cache-config-box :v-cache-config="cacheConfig" :v-is-location="true"></http-cache-config-box>
|
||||||
<submit-btn></submit-btn>
|
<submit-btn></submit-btn>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user