fix: make prefix required in TenantCreate schema and add frontend validation

prefix was optional with empty default, allowing accounts to be created
with broken account_code (no prefix). Root fix: enforce prefix at input
level rather than patching data after the fact.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
VMIS Developer
2026-03-15 21:45:45 +08:00
parent c96057c1b3
commit a3d5dd2e67
2 changed files with 13 additions and 5 deletions

View File

@@ -5,7 +5,7 @@ from pydantic import BaseModel, EmailStr
class TenantBase(BaseModel): class TenantBase(BaseModel):
code: str code: str
prefix: str = "" prefix: str
name: str name: str
name_eng: Optional[str] = None name_eng: Optional[str] = None
tax_id: Optional[str] = None tax_id: Optional[str] = None

View File

@@ -272,12 +272,20 @@ function editRow(t) {
async function saveForm() { async function saveForm() {
const id = document.getElementById('f-id').value; const id = document.getElementById('f-id').value;
const code = document.getElementById('f-code').value.trim();
const prefix = document.getElementById('f-prefix').value.trim();
const name = document.getElementById('f-name').value.trim();
const domain = document.getElementById('f-domain').value.trim();
if (!code || !prefix || !name || !domain) {
toast('代碼、前置碼、名稱、網域為必填', 'error');
return;
}
const payload = { const payload = {
code: document.getElementById('f-code').value.trim(), code,
prefix: document.getElementById('f-prefix').value.trim(), prefix,
name: document.getElementById('f-name').value.trim(), name,
name_eng: document.getElementById('f-name-eng').value.trim() || null, name_eng: document.getElementById('f-name-eng').value.trim() || null,
domain: document.getElementById('f-domain').value.trim(), domain,
tax_id: document.getElementById('f-tax-id').value.trim() || null, tax_id: document.getElementById('f-tax-id').value.trim() || null,
quota_per_user: parseInt(document.getElementById('f-quota-user').value), quota_per_user: parseInt(document.getElementById('f-quota-user').value),
total_quota: parseInt(document.getElementById('f-quota-total').value), total_quota: parseInt(document.getElementById('f-quota-total').value),