修掉审查查出的五个问题
保存失败会丢掉整张表单:对话框在 await commit 之前就关了,重开是空的。改成只有成功才关。
错误响应原本有两种形状({error} 和 {message,hint}),前端只读 message,于是服务端
写好的中文提示一律退化成「请求失败(HTTP 4xx)」。统一成 { message, hint? }。
路由处理器没有兜底:请求体不是合法 JSON、配置文件运行中被删,都会返回一个没有响应体
的 500。这条链路的立意是出事时把用户救回来,而出事时给的偏偏是最没信息量的一句话。
延迟测试失败被写进 done,而 done 的样式是成功绿。拆出中性的 notice——测不通是关于
线路的结论,既不是操作失败也不是成功。
刷新原本只有一个动词,测一条线路的延迟会导致整份配置被重读、重新解析、跑一遍引用校验,
外加四个往返。拆成 saved 和 runtime-changed 两个事件,运行时动作只重读运行时状态。
This commit is contained in:
+14
-1
@@ -102,6 +102,18 @@ function optimisticSelect(group: string, member: string) {
|
||||
if (info) info.now = member
|
||||
}
|
||||
|
||||
/**
|
||||
* 只重读运行时状态,不碰配置文件。
|
||||
*
|
||||
* 切换策略组、测一条线路的延迟,改变的只是内核的运行状态。走完整的 load() 会让服务端
|
||||
* 重读整份配置、重新解析、再跑一遍引用校验,外加两个多余的往返——最便宜的动作触发了
|
||||
* 最贵的操作。
|
||||
*/
|
||||
async function reloadRuntime() {
|
||||
if (!kernel.value.online) return
|
||||
runtime.value = await readRuntime()
|
||||
}
|
||||
|
||||
function submitToken(value: string) {
|
||||
setToken(value)
|
||||
void load()
|
||||
@@ -184,8 +196,9 @@ const current = computed(() => NAV.find((n) => n.key === active.value))
|
||||
:provider-lines="providerLines"
|
||||
:line-provider="lineProvider"
|
||||
:runtime="runtime"
|
||||
@changed="load"
|
||||
@saved="load"
|
||||
@optimistic-select="optimisticSelect"
|
||||
@runtime-changed="reloadRuntime"
|
||||
/>
|
||||
|
||||
<div v-else class="note">
|
||||
|
||||
Reference in New Issue
Block a user