Files
ghatreh_user/src/utils/inputRules.ts
T

246 lines
6.6 KiB
TypeScript
Raw Normal View History

2025-10-05 09:44:14 +03:30
/*
export function inputRules(title?: string) {
if (title) {
return [required(title)]
} else {
return [required]
}
}
export function inputLenRules(len: number, title?: string) {
if (title) {
return [
required(title),
lenthValidation(len)
]
} else {
return [
required,
lenthValidation(len)
]
}
}
*/
/*export const persianValidation = computed(() => {
const temp = inputRules()
temp.push({ pattern: /^[A-Za-z]*$/, message: 'فقط حروف انگلیسی مجاز است' })
return temp
})*/
2025-11-12 14:43:00 +03:30
import { computed, ref } from 'vue'
import type { Rule } from 'ant-design-vue/es/form'
import { useWalletStore } from '@/store/walletStore'
2025-10-05 09:44:14 +03:30
export const mobileValidation = (title?: string) => {
2025-11-12 14:43:00 +03:30
return { len: 11, message: `شماره همراه باید 11 رقم باشد` }
2025-10-05 09:44:14 +03:30
}
export const required = (title?: string) => {
2025-11-12 14:43:00 +03:30
if (title) {
return { required: true, message: `پر کردن ${title} الزامی است` }
} else {
return { required: true, message: `پر کردن مورد بالا الزامی است` }
}
2025-10-05 09:44:14 +03:30
}
// function checkCodeMeli(code)
// {
//
// let L=code.length;
// if(L<8 || parseInt(code,10)==0) return false;
// code=('0000'+code).substr(L+4-10);
// if(parseInt(code.substr(3,6),10)==0) return false;
// let c=parseInt(code.substr(9,1),10);
// let s=0;
// for(let i=0;i<9;i++)
// s+=parseInt(code.substr(i,1),10)*(10-i);
// s=s%11;
// return (s<2 && c==s) || (s>=2 && c==(11-s));
//
// }
export const cardNumberValidation = (title?: string) => {
2025-11-12 14:43:00 +03:30
return { len: 16, message: `شماره کارت باید 16 رقم باشد` }
2025-10-05 09:44:14 +03:30
}
const isValidNationalCode = (code) => {
2025-11-12 14:43:00 +03:30
if (code.length !== 10 || /(\d)(\1){9}/.test(code)) return false
2025-10-05 09:44:14 +03:30
2025-11-12 14:43:00 +03:30
let sum = 0,
chars = code.split(''),
lastDigit,
remainder
2025-10-05 09:44:14 +03:30
2025-11-12 14:43:00 +03:30
for (let i = 0; i < 9; i++) sum += +chars[i] * (10 - i)
2025-10-05 09:44:14 +03:30
2025-11-12 14:43:00 +03:30
remainder = sum % 11
lastDigit = remainder < 2 ? remainder : 11 - remainder
2025-10-05 09:44:14 +03:30
2025-11-12 14:43:00 +03:30
return +chars[9] === lastDigit
2025-10-05 09:44:14 +03:30
}
export const requireNationalCode = (code?: string) => {
2025-11-12 14:43:00 +03:30
return { required: true, validator: validateNCode, trigger: 'change' }
2025-10-05 09:44:14 +03:30
}
async function validateNCode(rule: Rule, value: any) {
2025-11-12 14:43:00 +03:30
if (!value) {
return Promise.reject('وارد کردن کد ملی الزامیست')
}
if (isValidNationalCode(value)) return Promise.resolve()
else return Promise.reject('کد ملی وارد شده نامعتبر است')
2025-10-05 09:44:14 +03:30
}
export function inputLenRules(len: number, title?: string) {
2025-11-12 14:43:00 +03:30
if (title) {
return [
{ required: true, message: `پر کردن ${title} الزامی است` },
{ len: len, message: `تعداد کاراکتر باید ${len} عدد باشد` }
]
} else {
return [
{ required: true, message: 'پر کردن مورد بالا الزامی است' },
{ len: len, message: `تعداد کاراکتر باید ${len} عدد باشد` }
]
}
2025-10-05 09:44:14 +03:30
}
export const persianValidation = computed(() => {
2025-11-12 14:43:00 +03:30
return {
pattern: /^[A-Za-z]*$/,
message: 'فقط حروف انگلیسی مجاز است'
}
2025-10-05 09:44:14 +03:30
})
export const isValidPersian = () => {
2025-11-12 14:43:00 +03:30
return {
pattern: /^[\u0600-\u06FF\s]+$/,
message: 'فقط حروف فارسی مجاز است'
}
}
2025-10-05 09:44:14 +03:30
export const lengthValidation = (len: number) => {
2025-11-12 14:43:00 +03:30
return { len: len, message: `تعداد کاراکتر باید ${len} عدد باشد` }
2025-10-05 09:44:14 +03:30
}
export const justNumber = () => {
2025-11-12 14:43:00 +03:30
return {
required: true,
type: 'regexp',
pattern: /\d+/g,
message: 'لطفا اطلاعات را به صورت عدد و نقطه وارد کنید'
}
2025-10-05 09:44:14 +03:30
}
const walletCash = useWalletStore()
let priceP = 0
let methodP = 'cash'
2025-11-12 14:43:00 +03:30
let amountP = 0
let isBuyP = true
let NumP = 0
2025-10-05 09:44:14 +03:30
const checkNumber = async (_rule: Rule, value: number) => {
2025-11-12 14:43:00 +03:30
if (!value) {
return Promise.reject('تعداد محصول را مشخص کنید')
}
if (value % 1 !== 0) {
return Promise.reject('استفاده از اعداد اعشاری مجاز نمی باشد')
}
if (isBuyP) {
if (!walletCash?.walletInfo?.cash && methodP == 'cash') {
return Promise.reject('موجودی کیف پول ناکافی است')
2025-10-05 09:44:14 +03:30
}
2025-11-12 14:43:00 +03:30
if (!walletCash?.walletInfo?.gold && methodP == 'gold') {
return Promise.reject('موجودی کیف طلا ناکافی است')
2025-10-05 09:44:14 +03:30
}
if (priceP * value > walletCash?.walletInfo?.cash && methodP == 'cash')
2025-11-12 14:43:00 +03:30
return Promise.reject('موجودی کیف پول ناکافی است')
2025-10-05 09:44:14 +03:30
if (amountP * value > walletCash?.walletInfo?.gold && methodP == 'gold')
2025-11-12 14:43:00 +03:30
return Promise.reject('موجودی کیف طلا ناکافی است')
2025-10-05 09:44:14 +03:30
else
2025-11-12 14:43:00 +03:30
return Promise.resolve()
} else {
2025-10-05 09:44:14 +03:30
if (value > NumP)
2025-11-12 14:43:00 +03:30
return Promise.reject('موجودی محصول ناکافی است')
2025-10-05 09:44:14 +03:30
else
2025-11-12 14:43:00 +03:30
return Promise.resolve()
}
2025-10-05 09:44:14 +03:30
}
2025-11-12 14:43:00 +03:30
export const justNumber2 = (price: number, method?: string, amount?: number, isBuy?: boolean) => {
priceP = price
methodP = method
amountP = amount
isBuyP = isBuy
return {
required: true,
validator: checkNumber,
trigger: 'change'
}
2025-10-05 09:44:14 +03:30
}
2025-11-12 14:43:00 +03:30
export const justNumber3 = (price: number, Num?: number, isBuy?: boolean) => {
priceP = price
NumP = Num
isBuyP = isBuy
return {
required: true,
validator: checkNumber,
trigger: 'change'
}
2025-10-05 09:44:14 +03:30
}
export const ruleNumber = () => {
2025-11-12 14:43:00 +03:30
console.log('445455')
return {
required: true,
message: 'لطفا نحوه خرید',
trigger: 'change'
}
2025-10-05 09:44:14 +03:30
}
export const guideTypePassword = ref<{}>({
2025-11-12 14:43:00 +03:30
text: '',
color: ''
2025-10-05 09:44:14 +03:30
})
export const passwordRules = () => {
2025-11-12 14:43:00 +03:30
return [
{
validator: (rule: Rule, value: any) => {
if (value.length < 6) {
return Promise.reject('رمز عبور حداقل 6 رقم')
2025-10-05 09:44:14 +03:30
}
2025-11-12 14:43:00 +03:30
const lengthCriteria = value.length >= 8
const letterCriteria = /[A-Za-z]/.test(value)
const numberCriteria = /\d/.test(value)
const specialCharacterCriteria = /[@$!%*#?&]/.test(value)
const criteriaMet = [
lengthCriteria,
letterCriteria,
numberCriteria,
specialCharacterCriteria
].filter(Boolean).length
if (criteriaMet === 4) {
guideTypePassword.value = {
text: 'سطح : قوی',
color: 'text-green'
}
return Promise.resolve()
} else if (criteriaMet === 3) {
guideTypePassword.value = {
text: 'سطح : متوسط',
color: 'midLevel'
}
return Promise.resolve()
} else {
guideTypePassword.value = {
text: 'سطح : ضعیف',
color: 'week'
}
return Promise.resolve()
}
}
}
]
2025-10-05 09:44:14 +03:30
}