refactor(站点配置): WS 直接推契约字段名,去掉前端那层 snake→驼峰胶水
上一版是在前端加 toCamel 把 `enable_maxkb` 换成 `enableMaxkb`。但 snake_case
是 options 表从 Django 继承来的**存储格式**,只该活在库里;WS 这一跳两边都是
OJ2 自己写的,没理由让前端再维护一层换名。
后端改成广播 OPTION_KEYS 的 key(契约字段名)而不是 value(表列键),前端直接
按名字赋值。库里的列名一个字没动。
顺带清掉两处已经死掉的客户端→服务端配置推送:
- admin/setting/config.vue 保存后调 updateConfig("enable_maxkb", ...) 和
("submission_list_show_all", ...)。那条 ConfigWebSocket 从没 connect() 过,
send() 直接返回 false;就算连上了,服务端的消息处理也只认 ping / subscribe,
会回一个 error 帧。广播本来就由后端在 POST /admin/website 里做,八个键一个
不落,这两行纯属多余,且用的正是刚废掉的 snake 键。
- ConfigWebSocket.updateConfig 一并删掉,免得再有人调一个静默失败的方法。
这条通道是单向的,原地留注释说明。
验证:dev 栈 + headless chromium 走 CDP 抓 Network.webSocketFrameReceived。
后台保存配置后,页面收到的八条帧的 key 全是驼峰(websiteName / enableMaxkb
/ submissionListShowAll ...),且页面不刷新,document.title 和页头站点名当场
跟着变。小助手那四条路径重跑一遍照旧:未登录不加载、登录后出现、后台关掉当场
消失、开回来当场重现。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -8,7 +8,6 @@ import {
|
||||
import { parseTime } from "utils/functions"
|
||||
import type { OrphanTestCase, Server, WebsiteConfig } from "utils/types"
|
||||
import { useConfigStore } from "shared/store/config"
|
||||
import { useConfigWebSocket } from "shared/composables/websocket"
|
||||
import {
|
||||
deleteJudgeServer,
|
||||
editWebsite,
|
||||
@@ -22,7 +21,6 @@ import { useUserStore } from "shared/store/user"
|
||||
const message = useMessage()
|
||||
const configStore = useConfigStore()
|
||||
const userStore = useUserStore()
|
||||
const { updateConfig } = useConfigWebSocket()
|
||||
|
||||
// 确保只有登录用户才能使用WebSocket
|
||||
watch(
|
||||
@@ -158,10 +156,9 @@ async function saveWebsiteConfig() {
|
||||
message.success("网站配置保存成功")
|
||||
getWebsiteConfig()
|
||||
configStore.getConfig()
|
||||
|
||||
// 通过 WebSocket 广播配置变化,实现实时切换
|
||||
updateConfig("enable_maxkb", websiteConfig.enableMaxkb)
|
||||
updateConfig("submission_list_show_all", websiteConfig.submissionListShowAll)
|
||||
// 广播由后端在 POST /admin/website 里做,八个键一个不落。
|
||||
// 这里原来还从客户端往 /ws/config 推两个键 —— 那条连接从没 connect() 过、
|
||||
// send() 直接返回 false,而且服务端只认 ping/subscribe,本来就收不下。
|
||||
}
|
||||
|
||||
async function deleteTestcase(id?: string) {
|
||||
|
||||
Reference in New Issue
Block a user