diff --git a/internal/web/actions/default/servers/server/settings/cache/init.go b/internal/web/actions/default/servers/server/settings/cache/init.go index f7f0bfab..9a814079 100644 --- a/internal/web/actions/default/servers/server/settings/cache/init.go +++ b/internal/web/actions/default/servers/server/settings/cache/init.go @@ -17,6 +17,7 @@ func init() { GetPost("/createPopup", new(CreatePopupAction)). GetPost("/purge", new(PurgeAction)). GetPost("/preheat", new(PreheatAction)). + Post("/updateRefs", new(UpdateRefsAction)). EndAll() }) } diff --git a/internal/web/actions/default/servers/server/settings/cache/updateRefs.go b/internal/web/actions/default/servers/server/settings/cache/updateRefs.go new file mode 100644 index 00000000..34178def --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/cache/updateRefs.go @@ -0,0 +1,83 @@ +// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package cache + +import ( + "encoding/json" + "errors" + "github.com/TeaOSLab/EdgeAdmin/internal/oplogs" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" +) + +type UpdateRefsAction struct { + actionutils.ParentAction +} + +func (this *UpdateRefsAction) RunPost(params struct { + WebId int64 + RefsJSON []byte +}) { + // 日志 + defer this.CreateLog(oplogs.LevelInfo, "修改Web %d 的缓存设置", params.WebId) + + this.Data["isUpdated"] = false + + webConfigResp, err := this.RPC().HTTPWebRPC().FindEnabledHTTPWebConfig(this.AdminContext(), &pb.FindEnabledHTTPWebConfigRequest{HttpWebId: params.WebId}) + if err != nil { + this.ErrorPage(err) + return + } + var webConfig = &serverconfigs.HTTPWebConfig{} + err = json.Unmarshal(webConfigResp.HttpWebJSON, webConfig) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["webId"] = webConfig.Id + this.Data["cacheConfig"] = webConfig.Cache + + // 校验配置 + var cacheConfig = webConfig.Cache + if webConfig == nil { + this.Success() + } + + var refs = []*serverconfigs.HTTPCacheRef{} + err = json.Unmarshal(params.RefsJSON, &refs) + if err != nil { + this.ErrorPage(errors.New("decode refs json failed: " + err.Error())) + return + } + cacheConfig.CacheRefs = refs + + err = cacheConfig.Init() + if err != nil { + this.Fail("检查配置失败:" + err.Error()) + } + + // 去除不必要的部分 + 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{ + HttpWebId: params.WebId, + CacheJSON: cacheJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["isUpdated"] = true + this.Success() +} diff --git a/web/public/js/components/server/http-cache-config-box.js b/web/public/js/components/server/http-cache-config-box.js index be169dab..38988d77 100644 --- a/web/public/js/components/server/http-cache-config-box.js +++ b/web/public/js/components/server/http-cache-config-box.js @@ -1,5 +1,5 @@ Vue.component("http-cache-config-box", { - props: ["v-cache-config", "v-is-location", "v-is-group", "v-cache-policy"], + props: ["v-cache-config", "v-is-location", "v-is-group", "v-cache-policy", "v-web-id"], data: function () { let cacheConfig = this.vCacheConfig if (cacheConfig == null) { @@ -138,7 +138,7 @@ Vue.component("http-cache-config-box", {

缓存条件

- +
` diff --git a/web/public/js/components/server/http-cache-refs-box.js b/web/public/js/components/server/http-cache-refs-box.js index 24b09451..611459f2 100644 --- a/web/public/js/components/server/http-cache-refs-box.js +++ b/web/public/js/components/server/http-cache-refs-box.js @@ -42,8 +42,8 @@ Vue.component("http-cache-refs-box", { 缓存时间 - - + + {{cacheRef.minSize.count}}{{cacheRef.minSize.unit}} - {{cacheRef.maxSize.count}}{{cacheRef.maxSize.unit}} @@ -54,11 +54,11 @@ Vue.component("http-cache-refs-box", { 状态码:{{cacheRef.status.map(function(v) {return v.toString()}).join(", ")}} 区间缓存 - + - + {{cacheRef.life.count}} {{timeUnitName(cacheRef.life.unit)}} 不缓存 diff --git a/web/public/js/components/server/http-cache-refs-config-box.js b/web/public/js/components/server/http-cache-refs-config-box.js index b81eda76..03e11652 100644 --- a/web/public/js/components/server/http-cache-refs-config-box.js +++ b/web/public/js/components/server/http-cache-refs-config-box.js @@ -1,5 +1,5 @@ Vue.component("http-cache-refs-config-box", { - props: ["v-cache-refs", "v-cache-config", "v-cache-policy-id"], + props: ["v-cache-refs", "v-cache-config", "v-cache-policy-id", "v-web-id"], mounted: function () { let that = this sortTable(function (ids) { @@ -101,6 +101,14 @@ Vue.component("http-cache-refs-config-box", { } }) }, + disableRef: function (ref) { + ref.isOn = false + this.change() + }, + enableRef: function (ref) { + ref.isOn = true + this.change() + }, removeRef: function (index) { let that = this teaweb.confirm("确定要删除此缓存设置吗?", function () { @@ -133,13 +141,25 @@ Vue.component("http-cache-refs-config-box", { }, change: function () { // 自动保存 - if (this.vCachePolicyId != null && this.vCachePolicyId > 0) { + if (this.vCachePolicyId != null && this.vCachePolicyId > 0) { // 缓存策略 Tea.action("/servers/components/cache/updateRefs") .params({ cachePolicyId: this.vCachePolicyId, refsJSON: JSON.stringify(this.refs) }) .post() + } else if (this.vWebId != null && this.vWebId > 0) { // Server Web or Group Web + Tea.action("/servers/server/settings/cache/updateRefs") + .params({ + webId: this.vWebId, + refsJSON: JSON.stringify(this.refs) + }) + .success(function (resp) { + if (resp.data.isUpdated) { + teaweb.successToast("保存成功") + } + }) + .post() } } }, @@ -155,14 +175,14 @@ Vue.component("http-cache-refs-config-box", { 缓存条件 分组关系 缓存时间 - 操作 + 操作 - - + + {{cacheRef.minSize.count}}{{cacheRef.minSize.unit}} - {{cacheRef.maxSize.count}}{{cacheRef.maxSize.unit}} @@ -173,16 +193,17 @@ Vue.component("http-cache-refs-config-box", { 状态码:{{cacheRef.status.map(function(v) {return v.toString()}).join(", ")}} 区间缓存 - + - + {{cacheRef.life.count}} {{timeUnitName(cacheRef.life.unit)}} 不缓存 修改   + 暂停恢复   删除 diff --git a/web/views/@default/@layout_override.css b/web/views/@default/@layout_override.css index 53b9391f..6b09eb7f 100644 --- a/web/views/@default/@layout_override.css +++ b/web/views/@default/@layout_override.css @@ -12,6 +12,9 @@ .ui.label.basic.grey { border: 1px #ccc solid !important; } +.disabled .ui.label { + color: #ccc !important; +} form .fields { margin-bottom: 0 !important; } @@ -49,7 +52,7 @@ body.swal2-shown { overflow: auto !important; } .grid { - margin-right: 0!important; + margin-right: 0 !important; } .fields button { min-width: 5em; diff --git a/web/views/@default/@layout_override.css.map b/web/views/@default/@layout_override.css.map index dace5f21..2dc51bf4 100644 --- a/web/views/@default/@layout_override.css.map +++ b/web/views/@default/@layout_override.css.map @@ -1 +1 @@ -{"version":3,"sources":["@layout_override.less"],"names":[],"mappings":"AACA,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,QAAO;EACrG,yBAAA;;AAGD,GAAG,OAAO,SAAU,MAAK,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,QAAS,QAAO;EACzF,yBAAA;;AAGD,GAAG,MAAM;EACR,kCAAA;;AAGD,GAAG,MAAM,MAAM;EACd,sBAAA;;AAID,IACC;EACC,2BAAA;;AAKF,KAAK;EACJ,sBAAA;;AAGD,KAAK,KAAK;EACT,cAAA;;AAID,KACC,GAAE;AADH,KACY,GAAE;EACZ,6BAAA;EACA,0BAAA;EACA,2BAAA;;AAJF,KAOC,GAAE;EACD,WAAA;;AARF,KAWC,GAAE;EACD,UAAA;;AAZF,KAeC,GAAE;EACD,UAAA;;AAKF,QAAQ;EACP,qBAAA;;AAID,MAAM;EACL,uBAAA;;AAID,QACC,MAAK;EACJ,yBAAA;;AAKF,IAAI;EACH,yBAAA;;AAID;EACC,yBAAA;;AAID,OACC;EACC,cAAA","file":"@layout_override.css"} \ No newline at end of file +{"version":3,"sources":["@layout_override.less"],"names":[],"mappings":"AACA,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,QAAO;EACrG,yBAAA;;AAGD,GAAG,OAAO,SAAU,MAAK,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,QAAS,QAAO;EACzF,yBAAA;;AAGD,GAAG,MAAM;EACR,kCAAA;;AAGD,GAAG,MAAM,MAAM;EACd,sBAAA;;AAGD,SAAU,IAAG;EACZ,WAAA;;AAID,IACC;EACC,2BAAA;;AAKF,KAAK;EACJ,sBAAA;;AAGD,KAAK,KAAK;EACT,cAAA;;AAID,KACC,GAAE;AADH,KACY,GAAE;EACZ,6BAAA;EACA,0BAAA;EACA,2BAAA;;AAJF,KAOC,GAAE;EACD,WAAA;;AARF,KAWC,GAAE;EACD,UAAA;;AAZF,KAeC,GAAE;EACD,UAAA;;AAKF,QAAQ;EACP,qBAAA;;AAID,MAAM;EACL,uBAAA;;AAID,QACC,MAAK;EACJ,yBAAA;;AAKF,IAAI;EACH,yBAAA;;AAID;EACC,0BAAA;;AAID,OACC;EACC,cAAA","file":"@layout_override.css"} \ No newline at end of file diff --git a/web/views/@default/@layout_override.less b/web/views/@default/@layout_override.less index db994e9a..81758162 100644 --- a/web/views/@default/@layout_override.less +++ b/web/views/@default/@layout_override.less @@ -15,6 +15,10 @@ border: 1px #ccc solid !important; } +.disabled .ui.label { + color: #ccc !important; +} + // fields form { .fields { @@ -76,7 +80,7 @@ body.swal2-shown { // grid .grid { - margin-right: 0!important; + margin-right: 0 !important; } // fields diff --git a/web/views/@default/servers/server/settings/cache/index.html b/web/views/@default/servers/server/settings/cache/index.html index a54ee449..20b0a3f0 100644 --- a/web/views/@default/servers/server/settings/cache/index.html +++ b/web/views/@default/servers/server/settings/cache/index.html @@ -13,7 +13,7 @@
- +

修改条件设置后请记得保存。