diff --git a/internal/web/actions/default/servers/server/settings/conds/condutils/utils.go b/internal/web/actions/default/servers/server/settings/conds/condutils/utils.go index ed727954..3b2e1147 100644 --- a/internal/web/actions/default/servers/server/settings/conds/condutils/utils.go +++ b/internal/web/actions/default/servers/server/settings/conds/condutils/utils.go @@ -14,9 +14,10 @@ type CondJSComponent struct { Name string `json:"name"` Description string `json:"description"` Component string `json:"component"` + IsRequest bool `json:"isRequest"` } -// 读取所有可用的条件 +// ReadAllAvailableCondTypes 读取所有可用的条件 func ReadAllAvailableCondTypes() []*CondJSComponent { result := []*CondJSComponent{} diff --git a/web/public/js/components/server/http-cache-ref-box.js b/web/public/js/components/server/http-cache-ref-box.js index 34137dcf..8f077880 100644 --- a/web/public/js/components/server/http-cache-ref-box.js +++ b/web/public/js/components/server/http-cache-ref-box.js @@ -44,7 +44,7 @@ Vue.component("http-cache-ref-box", { }, template: ` - 匹配条件 * + 匹配条件分组 * diff --git a/web/public/js/components/server/http-cond-definitions.js b/web/public/js/components/server/http-cond-definitions.js index d3215b02..69dd04db 100644 --- a/web/public/js/components/server/http-cond-definitions.js +++ b/web/public/js/components/server/http-cond-definitions.js @@ -102,6 +102,53 @@ Vue.component("http-cond-url-prefix", { ` }) +// URL精准匹配 +Vue.component("http-cond-url-eq", { + props: ["v-cond"], + data: function () { + let cond = this.vCond + if (cond == null) { + cond = { + isRequest: true, + param: "${requestPath}", + operator: "eq", + value: "" + } + } + return { + cond: cond + } + }, + template: `
+ + +
` +}) + +// URL正则匹配 +Vue.component("http-cond-url-regexp", { + props: ["v-cond"], + data: function () { + let cond = this.vCond + if (cond == null) { + cond = { + isRequest: true, + param: "${requestPath}", + operator: "regexp", + value: "" + } + } + return { + cond: cond + } + }, + template: `
+ + +
` +}) + + // 根据MimeType Vue.component("http-cond-mime-type", { props: ["v-cond"], diff --git a/web/public/js/components/server/http-request-conds-box.js b/web/public/js/components/server/http-request-conds-box.js index 3bad07d0..971762df 100644 --- a/web/public/js/components/server/http-request-conds-box.js +++ b/web/public/js/components/server/http-request-conds-box.js @@ -63,7 +63,8 @@ Vue.component("http-request-conds-box", {
- + - @@ -85,6 +86,10 @@ Vue.component("http-request-conds-box", {
+

+ 只要满足其中一个条件分组即可。 + 需要满足所有条件分组。 +

` }) \ No newline at end of file diff --git a/web/public/js/components/server/http-request-conds-view.js b/web/public/js/components/server/http-request-conds-view.js index 0fc40e83..2a12226a 100644 --- a/web/public/js/components/server/http-request-conds-view.js +++ b/web/public/js/components/server/http-request-conds-view.js @@ -10,10 +10,16 @@ Vue.component("http-request-conds-view", { } } return { - conds: conds, + initConds: conds, components: window.REQUEST_COND_COMPONENTS } }, + computed: { + // 之所以使用computed,是因为需要动态更新 + conds: function () { + return this.initConds + }, + }, methods: { typeName: function (cond) { let c = this.components.$find(function (k, v) { diff --git a/web/public/js/conds/official.json b/web/public/js/conds/official.json index 1f678caa..ef0857b0 100644 --- a/web/public/js/conds/official.json +++ b/web/public/js/conds/official.json @@ -3,18 +3,35 @@ "type": "url-extension", "name": "URL扩展名", "description": "根据URL中的文件路径扩展名进行过滤", - "component": "http-cond-url-extension" + "component": "http-cond-url-extension", + "isRequest": true }, { "type": "url-prefix", - "name": "路径前缀", + "name": "URL前缀", "description": "根据URL中的文件路径前缀进行过滤", - "component": "http-cond-url-prefix" + "component": "http-cond-url-prefix", + "isRequest": true + }, + { + "type": "url-eq", + "name": "URL精准匹配", + "description": "检查URL中的文件路径是否一致", + "component": "http-cond-url-eq", + "isRequest": true + }, + { + "type": "url-regexp", + "name": "URL正则匹配", + "description": "使用正则表达式检查URL中的文件路径是否一致", + "component": "http-cond-url-regexp", + "isRequest": true }, { "type": "mime-type", "name": "内容MimeType", - "description": "根据服务器返回的内容的MimeType进行过滤", - "component": "http-cond-mime-type" + "description": "根据服务器返回的内容的MimeType进行过滤。注意:当用于缓存条件时,此条件需要结合别的请求条件使用。", + "component": "http-cond-mime-type", + "isRequest": false } ] \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/conds/addGroupPopup.js b/web/views/@default/servers/server/settings/conds/addGroupPopup.js index 60c9ee53..0347a4e6 100644 --- a/web/views/@default/servers/server/settings/conds/addGroupPopup.js +++ b/web/views/@default/servers/server/settings/conds/addGroupPopup.js @@ -2,7 +2,7 @@ Tea.context(function () { this.success = NotifyPopup this.group = { - connector: "or", + connector: "and", // 默认为and,更符合用户的直觉 description: "", isReverse: false, conds: [],
+ 分组{{groupIndex+1}} {{cond.param}} {{cond.operator}} @@ -74,7 +75,7 @@ Vue.component("http-request-conds-box", { {{group.connector}}   +