import { RuleItem } from '@/common/setup/warehouse_receipt_trade/interface'; import { getGoodsById, getQuoteDayInfoByCode } from '@/services/bus/goods'; import { getRules } from '@/services/bus/rules'; import { RuleObject } from "ant-design-vue/lib/form/interface"; // 验证 挂牌数量 /** * * @param delistingQty 起摘数量 * @param 挂牌数量对应的key * @param minivalue 最小单位 * @param maxValue 最大数量(可选) * @returns */ export const useVerifyListingNum = (formState: T, key: k, minivalue: number, maxValue?: number) => { const v_num = async (rule: RuleObject, value: number) => { if (value) { if (formState[key] && value < (formState[key] as unknown as number)) { return Promise.reject(`挂牌数量不能小于起摘数量`) } if (value < minivalue) { return Promise.reject(`挂牌数量不能小于${minivalue}`) } if (maxValue && value > maxValue) { return Promise.reject(`挂牌数量不能大于${maxValue}`) } if (value % minivalue) { return Promise.reject(`挂牌数量不是${minivalue}的倍数`) } return Promise.resolve(); } else { return Promise.reject('请输入挂牌数量') } }; return { v_num } } /** * 验证 挂牌基差 */ export const useVerifyListingBasis = (getFormState: () => { goodsid?: number, marketid?: number }) => { const v_basis = async (rule: RuleObject, value: number) => { const { goodsid, marketid } = getFormState(); if (marketid) { const config = getRules().find((e) => e.marketid === marketid); if (config) { if (goodsid) { const goodsCode = getGoodsById(goodsid)?.goodscode as string; const quote = getQuoteDayInfoByCode(goodsCode); if (quote) { if (typeof value === 'number') { // 最小值 = 基差下限百分比 * 昨日收盘价 * -1 const minValue = (config.basisdownratio * quote.presettle * -1).toFixed(2); // 最大值 = 基差上限百分比 * 昨日收盘价 const maxValue = (config.basisupratio * quote.presettle).toFixed(2); if (value >= Number(minValue) && value <= Number(maxValue)) { return Promise.resolve(); } else { if (value < Number(minValue)) { return Promise.reject(`基差不能小于${minValue}`); } if (value > Number(maxValue)) { return Promise.reject(`基差不能大于${maxValue}`); } } } return Promise.reject('请输入基差'); } return Promise.reject('商品盘面不存在'); } return Promise.reject('请选择合约'); } return Promise.reject('市场参数未配置'); } return Promise.reject('请选择交易市场'); }; return { v_basis } } /** * 验证 起摘数量 * @param minValue 最小变动值 */ export const useVerifyBeginDelistingNum = (minValue: number) => { const v_beginDelistingNum = async (rule: RuleObject, value: number) => { if (value) { if (minValue) { if (value % minValue !== 0) { return Promise.reject(`起摘数量不是${minValue}的倍数`); } } return Promise.resolve(); } else { return Promise.reject('请输入起摘数量'); } } const v_beginDelistingRules: RuleItem[] = [{ required: true, validator: v_beginDelistingNum, trigger: 'blur', type: 'number', }] return { v_beginDelistingNum, v_beginDelistingRules } }