规则页:全局分流规则的编辑与规则组管理
新增 RulesPage.vue 和规则、规则组、ini 导入三个对话框,纯逻辑放在 shared/rules.ts。拆分规则字符串复用 vendor 的 splitRuleFields——引号和 嵌套括号里的逗号不会被当成字段分隔;目标之后的选项段原样拼回,改一条 规则不会丢掉它的 no-resolve 尾巴。规则组的缓存路径显式生成:不写 path 时内核按 url 哈希自己算一个,那个路径这里算不出来。
This commit is contained in:
+31
@@ -113,6 +113,20 @@ export interface ListenerFields {
|
||||
types: Record<string, { note: string; fields: FieldSpec[] }>
|
||||
}
|
||||
|
||||
export interface RuleProviderInfo {
|
||||
/** domain / ipcidr / classical */
|
||||
behavior: string
|
||||
/** yaml / text / mrs。inline 类型的没有这个字段 */
|
||||
format?: string
|
||||
name: string
|
||||
/** 当前装了多少条规则 */
|
||||
ruleCount: number
|
||||
/** HTTP / File / Inline */
|
||||
vehicleType: string
|
||||
/** RFC3339。还没拉取过时是零值(0001-01-01) */
|
||||
updatedAt: string
|
||||
}
|
||||
|
||||
export const api = {
|
||||
readConfig: () => request<ConfigSnapshot>('GET', '/api/config'),
|
||||
|
||||
@@ -158,6 +172,23 @@ export const api = {
|
||||
return request<{ delay: number }>('GET', path)
|
||||
},
|
||||
|
||||
/**
|
||||
* 每个规则组的运行时状态:装了多少条规则、上次什么时候更新。
|
||||
* 配置文件里只有声明,这两个数字只有运行中的内核知道。
|
||||
*/
|
||||
ruleProviders: () =>
|
||||
request<{ providers: Record<string, RuleProviderInfo> }>('GET', '/api/kernel/providers/rules'),
|
||||
|
||||
/**
|
||||
* 让内核立刻重新拉取某个规则组。
|
||||
* 这是运行时动作,不写配置文件,所以不走落盘那条保护链路。
|
||||
*/
|
||||
updateRuleProvider: (name: string) =>
|
||||
request<Record<string, never>>(
|
||||
'PUT',
|
||||
`/api/kernel/providers/rules/${encodeURIComponent(name)}`,
|
||||
),
|
||||
|
||||
/**
|
||||
* 订阅及其线路。配置文件里只有订阅地址,有哪些线路只有运行中的内核知道。
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user