🐛 fix: preserve key data when editing channels & update MultiKeySize correctly

Backend
• `model/channel.go`
  – On multi-key channel updates, recalculate `MultiKeySize` from the current key list.
  – If the request omits `key`, fetch existing keys from DB to avoid resetting the count to `0/0`.
  – Remove out-of-range entries from `MultiKeyStatusList` to keep data consistent.

Frontend
• `web/src/pages/Channel/EditChannel.js`
  – Vertex AI channels no longer require re-uploading a key file in edit mode.
  – When no new key is provided during editing, exclude the `key` field from the payload to prevent overwriting the stored value.

These changes ensure that editing a channel no longer zeroes out the enabled key counter and that Vertex AI channels can be modified without mandatory key re-submission.
This commit is contained in:
t0ng7u
2025-07-13 00:09:27 +08:00
parent 203edaed50
commit d22ee5d451
2 changed files with 35 additions and 10 deletions

View File

@@ -441,8 +441,9 @@ const EditChannel = (props) => {
if (localInputs.type === 41) {
let keys = vertexKeys;
if (keys.length === 0) {
// 确保提交时也能解析,避免因异步延迟导致 keys 为空
// 若当前未选择文件,尝试从已上传文件列表解析(异步读取)
if (keys.length === 0 && vertexFileList.length > 0) {
try {
const parsed = await Promise.all(
vertexFileList.map(async (item) => {
@@ -459,17 +460,29 @@ const EditChannel = (props) => {
}
}
// 创建模式必须上传密钥;编辑模式可选
if (keys.length === 0) {
showInfo(t('请上传密钥文件!'));
return;
}
if (batch) {
localInputs.key = JSON.stringify(keys);
if (!isEdit) {
showInfo(t('请上传密钥文件!'));
return;
} else {
// 编辑模式且未上传新密钥,不修改 key
delete localInputs.key;
}
} else {
localInputs.key = JSON.stringify(keys[0]);
// 有新密钥,则覆盖
if (batch) {
localInputs.key = JSON.stringify(keys);
} else {
localInputs.key = JSON.stringify(keys[0]);
}
}
}
// 如果是编辑模式且 key 为空字符串,避免提交空值覆盖旧密钥
if (isEdit && (!localInputs.key || localInputs.key.trim() === '')) {
delete localInputs.key;
}
delete localInputs.vertex_files;
if (!isEdit && (!localInputs.name || !localInputs.key)) {