()
| 472 | }; |
| 473 | |
| 474 | const submit = async () => { |
| 475 | const formValues = formApiRef.current ? formApiRef.current.getValues() : {}; |
| 476 | let localInputs = { ...formValues }; |
| 477 | |
| 478 | if (localInputs.type === 41) { |
| 479 | if (useManualInput) { |
| 480 | // 手动输入模式 |
| 481 | if (localInputs.key && localInputs.key.trim() !== '') { |
| 482 | try { |
| 483 | // 验证 JSON 格式 |
| 484 | const parsedKey = JSON.parse(localInputs.key); |
| 485 | // 确保是有效的密钥格式 |
| 486 | localInputs.key = JSON.stringify(parsedKey); |
| 487 | } catch (err) { |
| 488 | showError(t('密钥格式无效,请输入有效的 JSON 格式密钥')); |
| 489 | return; |
| 490 | } |
| 491 | } else if (!isEdit) { |
| 492 | showInfo(t('请输入密钥!')); |
| 493 | return; |
| 494 | } |
| 495 | } else { |
| 496 | // 文件上传模式 |
| 497 | let keys = vertexKeys; |
| 498 | |
| 499 | // 若当前未选择文件,尝试从已上传文件列表解析(异步读取) |
| 500 | if (keys.length === 0 && vertexFileList.length > 0) { |
| 501 | try { |
| 502 | const parsed = await Promise.all( |
| 503 | vertexFileList.map(async (item) => { |
| 504 | const fileObj = item.fileInstance; |
| 505 | if (!fileObj) return null; |
| 506 | const txt = await fileObj.text(); |
| 507 | return JSON.parse(txt); |
| 508 | }) |
| 509 | ); |
| 510 | keys = parsed.filter(Boolean); |
| 511 | } catch (err) { |
| 512 | showError(t('解析密钥文件失败: {{msg}}', { msg: err.message })); |
| 513 | return; |
| 514 | } |
| 515 | } |
| 516 | |
| 517 | // 创建模式必须上传密钥;编辑模式可选 |
| 518 | if (keys.length === 0) { |
| 519 | if (!isEdit) { |
| 520 | showInfo(t('请上传密钥文件!')); |
| 521 | return; |
| 522 | } else { |
| 523 | // 编辑模式且未上传新密钥,不修改 key |
| 524 | delete localInputs.key; |
| 525 | } |
| 526 | } else { |
| 527 | // 有新密钥,则覆盖 |
| 528 | if (batch) { |
| 529 | localInputs.key = JSON.stringify(keys); |
| 530 | } else { |
| 531 | localInputs.key = JSON.stringify(keys[0]); |
nothing calls this directly
no test coverage detected