修改测试

This commit is contained in:
wuweihua
2026-09-10 14:23:58 +08:00
parent 05c8d3f90d
commit 6d718320e6
24 changed files with 475 additions and 210 deletions
@@ -0,0 +1,190 @@
<template>
<el-dialog :title="title" v-model="visible" width="640px" append-to-body>
<basic-form ref="formRef" v-model="form" :schemas="schemas" label-width="100px" />
<template #footer>
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="visible = false">取 消</el-button>
</template>
</el-dialog>
</template>
<script setup>
import BasicForm from '@/components/BasicForm'
import { getSurcharge, addSurcharge, updateSurcharge } from '@/api/price/surcharge'
import { listRegionOptions } from '@/api/data/region'
const emit = defineEmits(['success'])
const { proxy } = getCurrentInstance()
const formRef = ref()
const visible = ref(false)
const title = ref('')
const form = ref(emptyForm())
const regionOptions = ref([])
const countrySelectOptions = computed(() => {
const all = [{ label: "全部国家", value: '' }]
return all.concat((regionOptions.value || []).map(r => ({
label: regionLabel(r),
value: r.countryCode2
})))
})
const schemas = computed(() => [
{
label: "附加费名称",
prop: 'scName',
component: 'input',
placeholder: "如 燃油附加费",
span: 12,
width: '100%',
props: { maxlength: 100 },
rules: [{ required: true, message: "附加费名称不能为空", trigger: 'blur' }]
},
{
label: "费用类型",
prop: 'feeType',
component: 'select',
placeholder: "请选择",
dict: 'bms_fee_type',
span: 12,
width: '100%',
disabled: true,
rules: [{ required: true, message: "请选择费用类型", trigger: 'change' }]
},
{
label: "计费方式",
prop: 'chargeType',
component: 'select',
placeholder: "请选择",
dict: 'bms_charge_type',
span: 12,
width: '100%',
rules: [{ required: true, message: "请选择计费方式", trigger: 'change' }]
},
{
label: "计费数值",
prop: 'chargeValue',
component: 'inputNumber',
span: 12,
width: '100%',
props: { min: 0, precision: 6, step: 1, controlsPosition: 'right' },
rules: [{ required: true, message: "计费数值不能为空", trigger: 'blur' }]
},
{
label: "币种",
prop: 'currency',
component: 'select',
placeholder: "请选择",
dict: 'bms_currency',
span: 12,
width: '100%'
},
{
label: "取值方式",
prop: 'roundMode',
component: 'select',
placeholder: "请选择",
dict: 'bms_round_mode',
span: 12,
width: '100%',
rules: [{ required: true, message: "请选择取值方式", trigger: 'change' }]
},
{
label: "适用国家",
prop: 'countryCode',
component: 'select',
placeholder: "全部国家",
options: countrySelectOptions.value,
span: 12,
width: '100%',
props: { filterable: true, clearable: true }
},
{
label: "状态",
prop: 'ssCode',
component: 'radio',
span: 12,
options: [
{ label: "有效", value: 'on' },
{ label: "停用", value: 'of' }
]
},
{
label: "备注",
prop: 'scNote',
component: 'textarea',
placeholder: "请输入备注",
span: 24,
width: '100%',
props: { rows: 2, maxlength: 500 }
}
])
function emptyForm() {
return {
scId: undefined,
scName: undefined,
feeType: 'SURCHARGE',
chargeType: 'FIXED',
chargeValue: undefined,
currency: 'CNY',
roundMode: 'HALF_UP',
ssCode: 'on',
countryCode: undefined,
scNote: undefined
}
}
function regionLabel(r) {
const cn = r.countryNameCn || r.countryNameEn || ''
return cn ? `${r.flagEmoji || ''} ${cn} (${r.countryCode2})`.trim() : r.countryCode2
}
function ensureRegions() {
if (regionOptions.value.length) return Promise.resolve()
return listRegionOptions().then(res => {
regionOptions.value = res.data || []
})
}
function reset() {
form.value = emptyForm()
nextTick(() => formRef.value?.clearValidate())
}
function open(row) {
reset()
ensureRegions()
if (!row) {
title.value = "新建附加费"
visible.value = true
return
}
getSurcharge(row.scId).then(res => {
const data = res.data || {}
if (data.ssCode) data.ssCode = String(data.ssCode).toLowerCase()
form.value = { ...emptyForm(), ...data }
title.value = "修改附加费"
visible.value = true
nextTick(() => formRef.value?.clearValidate())
})
}
function submitForm() {
formRef.value.validate(valid => {
if (!valid) return
const payload = { ...form.value }
if (!payload.countryCode) payload.countryCode = undefined
if (payload.chargeValue != null) payload.chargeValue = Number(payload.chargeValue)
const req = payload.scId != null ? updateSurcharge(payload) : addSurcharge(payload)
req.then(() => {
proxy.$modal.msgSuccess(payload.scId != null ? "修改成功" : "新增成功")
visible.value = false
emit('success')
})
})
}
defineExpose({ open })
</script>