fix: 输入校验统一字符串防御(数字输入不再引发 trim 类型崩溃)
This commit is contained in:
@@ -120,8 +120,9 @@ watch(fAmount, () => {
|
||||
})
|
||||
|
||||
async function submit() {
|
||||
const v = Number(fAmount.value)
|
||||
if (!fAmount.value.trim() || !isFinite(v) || v <= 0) {
|
||||
const amountText = String(fAmount.value ?? '').trim()
|
||||
const v = Number(amountText)
|
||||
if (!amountText || !isFinite(v) || v <= 0) {
|
||||
fError.value = '请填写大于 0 的金额'
|
||||
return
|
||||
}
|
||||
@@ -137,7 +138,7 @@ async function submit() {
|
||||
category: fCategory.value,
|
||||
amount: Math.round(v * 100),
|
||||
date: fDate.value,
|
||||
note: fNote.value.trim(),
|
||||
note: String(fNote.value ?? '').trim(),
|
||||
reimbursable: fType.value === 'expense' && fReimb.value ? 1 : 0,
|
||||
reimbursed: 0
|
||||
})
|
||||
@@ -154,6 +155,8 @@ async function submit() {
|
||||
showToast('记账已添加')
|
||||
submitting.value = false
|
||||
}
|
||||
const formDirty = computed(() => String(fAmount.value ?? '').trim() !== '' || String(fNote.value ?? '').trim() !== '')
|
||||
|
||||
function resetForm() {
|
||||
fAmount.value = ''
|
||||
fNote.value = ''
|
||||
@@ -262,7 +265,7 @@ async function confirmDelete() {
|
||||
</div>
|
||||
<div v-if="fError" class="form-error">{{ fError }}</div>
|
||||
<div class="form-footer">
|
||||
<button class="btn btn-sm" :disabled="!(fAmount.trim() || fNote.trim())" @click="resetForm">重置</button>
|
||||
<button class="btn btn-sm" :disabled="!formDirty" @click="resetForm">重置</button>
|
||||
<button class="btn btn-primary btn-sm" :disabled="submitting" @click="submit">添加记录</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user