foreign-admin-ui/src/views/account/market-maker/rules.ts

95 lines
4.4 KiB
TypeScript

// rules.ts
import type { FormRules } from 'element-plus'
// 接收上级上限参数
export const rules = (parentLimit: any = { position: 0, commissionRatio: 0 }): FormRules => {
return {
//手机号
phone: [
{ required: true, message: '请输入手机号', trigger: ['blur'] },
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号格式', trigger: ['blur'] },
],
//邮箱
email: [
{ required: true, message: '请输入邮箱地址', trigger: ['blur'] },
{ type: 'email', message: '请输入正确的邮箱格式', trigger: ['blur'] }
],
accountName: [
{ required: true, message: '请输入账户名称', trigger: 'blur' },
{ min: 2, max: 50, message: '账户名称长度需在2-50个字符之间', trigger: 'blur' }
],
level: [
{ required: true, message: '请选择级别', trigger: 'change' }
],
parentAccountName: [
{ required: true, message: '请选择所属上级', trigger: 'change' }
],
// 头寸:新增「不超过上级」校验
position: [
{ required: true, message: '请输入头寸', trigger: 'blur' },
{ pattern: /^-?\d+(\.\d+)?$/, message: '头寸需为数字(支持整数/小数/负数)', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (!value) return callback()
const inputVal = Number(value)
const maxVal = parentLimit.position
if (inputVal > maxVal) {
callback(new Error(`头寸不能大于上级的 ${maxVal}`))
} else {
callback()
}
},
trigger: 'blur'
}
],
// 手续费:新增「不超过上级」校验
commissionRatio: [
{ required: true, message: '请输入手续费', trigger: 'blur' },
{ pattern: /^\d+(\.\d+)?$/, message: '手续费需为非负数字(支持整数/小数)', trigger: 'blur' },
{ min: 0, max: 100, message: '手续费范围需在0-100之间', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (!value) return callback()
const inputVal = Number(value)
const maxVal = parentLimit.commissionRatio
if (inputVal > maxVal) {
callback(new Error(`手续费不能大于上级的 ${maxVal}`))
} else {
callback()
}
},
trigger: 'blur'
}
],
// 新增:批量校验已分配点差
pointDiffList: [
{
validator: (rule, value, callback) => {
// value 是 marketPointTree 数组
if (!value || value.length === 0) {
return callback() // 没有点差数据时不校验
}
// 遍历所有点差行,校验必填和数值合法性
for (const row of value) {
// 校验必填
if (row.assignedPointDifference === '' || row.assignedPointDifference === undefined) {
return callback(new Error(`品种【${row.varietyName || row.name}】的已分配点差不能为空`))
}
// 校验数值格式(非负数字)
const numVal = Number(row.assignedPointDifference)
if (isNaN(numVal) || numVal < 0) {
return callback(new Error(`品种【${row.varietyName || row.name}】的已分配点差需为非负数字`))
}
// 可选:校验不超过上级点差
if (row.pointDifference && numVal > Number(row.pointDifference)) {
return callback(new Error(`品种【${row.varietyName || row.name}】的已分配点差不能超过可分配点差 ${row.pointDifference}`))
}
}
callback()
},
trigger: 'change' // 数据变化时触发
}
]
}
}