Skip to content

Utils 工具函数

提供一套完整的工具函数集合,包括数据验证、格式化、存储操作、网络请求等常用功能。

🎮 在线演示

想要查看工具函数的使用效果?请访问 在线演示 查看功能演示

特性

✅ 数据验证

完整的表单验证规则集合

🎨 数据格式化

常用的数据格式化工具

💾 存储操作

本地存储和会话存储工具

🌐 网络请求

封装的HTTP请求工具

数据验证

验证规则模式

内置常用的正则表达式模式:

查看代码
js
import { patterns } from 'imtes-ui'

// 邮箱验证
console.log(patterns.email.test('user@example.com')) // true

// 手机号验证
console.log(patterns.phone.test('13800138000')) // true

// 身份证验证
console.log(patterns.idCard.test('110101199001011234')) // true

// 密码强度验证
console.log(patterns.password.test('MyPassword123')) // true

// 中文姓名验证
console.log(patterns.chineseName.test('张三')) // true

// URL验证
console.log(patterns.url.test('https://www.example.com')) // true

// IP地址验证
console.log(patterns.ip.test('192.168.1.1')) // true

// 银行卡号验证
console.log(patterns.bankCard.test('6222021234567890123')) // true

// 车牌号验证
console.log(patterns.carNumber.test('京A12345')) // true

// 社会统一信用代码验证
console.log(patterns.creditCode.test('91110000MA001234X1')) // true

验证器函数

基于 Element Plus 的验证器函数:

查看代码
vue
<template>
  <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
    <el-form-item label="邮箱" prop="email">
      <el-input v-model="form.email" />
    </el-form-item>
    
    <el-form-item label="手机号" prop="phone">
      <el-input v-model="form.phone" />
    </el-form-item>
    
    <el-form-item label="身份证号" prop="idCard">
      <el-input v-model="form.idCard" />
    </el-form-item>
    
    <el-form-item label="密码" prop="password">
      <el-input v-model="form.password" type="password" />
    </el-form-item>
    
    <el-form-item label="中文姓名" prop="chineseName">
      <el-input v-model="form.chineseName" />
    </el-form-item>
    
    <el-form-item label="网址" prop="url">
      <el-input v-model="form.url" />
    </el-form-item>
    
    <el-form-item label="年龄" prop="age">
      <el-input-number v-model="form.age" />
    </el-form-item>
    
    <el-form-item label="用户名" prop="username">
      <el-input v-model="form.username" />
    </el-form-item>
    
    <el-form-item>
      <el-button type="primary" @click="handleSubmit">提交</el-button>
      <el-button @click="handleReset">重置</el-button>
    </el-form-item>
  </el-form>
</template>

<script setup>
import { ref, reactive } from 'vue'
import { validators } from 'imtes-ui'

const formRef = ref()

const form = reactive({
  email: '',
  phone: '',
  idCard: '',
  password: '',
  chineseName: '',
  url: '',
  age: null,
  username: ''
})

const rules = {
  email: [
    { required: true, message: '请输入邮箱', trigger: 'blur' },
    { validator: validators.email, trigger: 'blur' }
  ],
  phone: [
    { required: true, message: '请输入手机号', trigger: 'blur' },
    { validator: validators.phone, trigger: 'blur' }
  ],
  idCard: [
    { required: true, message: '请输入身份证号', trigger: 'blur' },
    { validator: validators.idCard, trigger: 'blur' }
  ],
  password: [
    { required: true, message: '请输入密码', trigger: 'blur' },
    { validator: validators.password, trigger: 'blur' }
  ],
  chineseName: [
    { required: true, message: '请输入中文姓名', trigger: 'blur' },
    { validator: validators.chineseName, trigger: 'blur' }
  ],
  url: [
    { validator: validators.url, trigger: 'blur' }
  ],
  age: [
    { required: true, message: '请输入年龄', trigger: 'blur' },
    { validator: validators.range(1, 120), trigger: 'blur' }
  ],
  username: [
    { required: true, message: '请输入用户名', trigger: 'blur' },
    { validator: validators.length(3, 20), trigger: 'blur' }
  ]
}

const handleSubmit = async () => {
  try {
    await formRef.value.validate()
    console.log('表单验证通过:', form)
  } catch (error) {
    console.log('表单验证失败:', error)
  }
}

const handleReset = () => {
  formRef.value.resetFields()
}
</script>

预设验证规则

常用的验证规则组合:

查看代码
js
import { rules } from 'imtes-ui'

// 使用预设规则
const formRules = {
  // 必填项
  name: rules.required,
  
  // 邮箱规则(必填 + 格式验证)
  email: rules.email,
  
  // 手机号规则(必填 + 格式验证)
  phone: rules.phone,
  
  // 密码规则(必填 + 强度验证)
  password: rules.password,
  
  // 中文姓名规则(必填 + 格式验证)
  chineseName: rules.chineseName,
  
  // URL规则(可选 + 格式验证)
  website: rules.url,
  
  // 身份证规则(必填 + 格式验证)
  idCard: rules.idCard,
  
  // 银行卡规则(可选 + 格式验证)
  bankCard: rules.bankCard,
  
  // 数字规则(必填 + 数字验证)
  amount: rules.number
}

自定义验证规则

创建自定义验证规则:

查看代码
js
import { createRule, createLengthRule, createRangeRule } from 'imtes-ui'

// 创建基础规则
const customRule = createRule(
  true,                    // 是否必填
  /^[A-Z]\d{8}$/,         // 正则模式
  '请输入正确的编号格式',   // 错误信息
  'blur'                   // 触发方式
)

// 创建长度规则
const usernameRule = createLengthRule(
  true,                    // 是否必填
  3,                       // 最小长度
  20,                      // 最大长度
  'blur'                   // 触发方式
)

// 创建数值范围规则
const ageRule = createRangeRule(
  true,                    // 是否必填
  18,                      // 最小值
  65,                      // 最大值
  'blur'                   // 触发方式
)

// 在表单中使用
const rules = {
  code: customRule,
  username: usernameRule,
  age: ageRule
}

数据格式化

基础格式化

常用的数据格式化函数:

查看代码
js
import { formatDate, formatNumber, formatFileSize, validate } from 'imtes-ui'

// 日期格式化
console.log(formatDate(new Date(), 'YYYY-MM-DD')) // '2024-01-15'
console.log(formatDate(new Date(), 'YYYY年MM月DD日')) // '2024年01月15日'
console.log(formatDate('2024-01-15', 'MM/DD/YYYY')) // '01/15/2024'

// 数字格式化
console.log(formatNumber(1234.567, 2)) // '1,234.57'
console.log(formatNumber(1000, 0, '元')) // '1,000元'
console.log(formatNumber(0.15, 2)) // '0.15'

// 文件大小格式化
console.log(formatFileSize(1024)) // '1.0KB'
console.log(formatFileSize(1048576)) // '1.0MB'
console.log(formatFileSize(1073741824)) // '1.0GB'

// 验证函数
console.log(validate.email('user@example.com')) // true
console.log(validate.phone('13800138000')) // true
console.log(validate.idCard('110101199001011234')) // true
console.log(validate.url('https://www.example.com')) // true
console.log(validate.custom(/^\d{6}$/, '123456')) // true

存储操作

LocalStorage 工具

带过期时间的本地存储:

查看代码
js
import { storage } from 'imtes-ui'

// 设置数据(永久存储)
storage.set('user_info', { 
  name: '张三', 
  email: 'zhang@example.com' 
})

// 设置数据(带过期时间,3600秒后过期)
storage.set('temp_token', 'abc123', 3600)

// 获取数据
const userInfo = storage.get('user_info')
console.log(userInfo) // { name: '张三', email: 'zhang@example.com' }

const token = storage.get('temp_token')
console.log(token) // 'abc123' 或 null(如果已过期)

// 删除数据
storage.remove('temp_token')

// 清空所有数据
storage.clear()

Cookie 操作工具:

查看代码
js
import { cookie } from 'imtes-ui'

// 设置 Cookie
cookie.set('session_id', 'xyz789')

// 设置带选项的 Cookie
cookie.set('user_preference', { theme: 'dark' }, {
  expires: 7,        // 7天后过期
  path: '/',         // 路径
  domain: '.example.com',  // 域名
  secure: true,      // 仅 HTTPS
  sameSite: 'strict' // SameSite 策略
})

// 获取 Cookie
const sessionId = cookie.get('session_id')
console.log(sessionId) // 'xyz789'

// 删除 Cookie
cookie.remove('session_id')

// 删除带选项的 Cookie
cookie.remove('user_preference', { 
  path: '/', 
  domain: '.example.com' 
})

网络请求

HTTP 客户端

封装的 HTTP 请求工具:

查看代码
js
import { http } from 'imtes-ui'

// 配置拦截器
http.use(
  // 请求拦截器
  (config) => {
    // 添加认证头
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  // 响应拦截器 - 成功
  (response) => {
    return response.data
  },
  // 响应拦截器 - 错误
  (error) => {
    console.error('请求失败:', error)
    return Promise.reject(error)
  }
)

// GET 请求
const getUserList = async () => {
  try {
    const users = await http.get('/api/users', { page: 1, size: 10 })
    console.log('用户列表:', users)
  } catch (error) {
    console.error('获取用户列表失败:', error)
  }
}

// POST 请求
const createUser = async (userData) => {
  try {
    const result = await http.post('/api/users', userData)
    console.log('创建用户成功:', result)
  } catch (error) {
    console.error('创建用户失败:', error)
  }
}

// PUT 请求
const updateUser = async (id, userData) => {
  try {
    const result = await http.put(`/api/users/${id}`, userData)
    console.log('更新用户成功:', result)
  } catch (error) {
    console.error('更新用户失败:', error)
  }
}

// DELETE 请求
const deleteUser = async (id) => {
  try {
    await http.delete(`/api/users/${id}`)
    console.log('删除用户成功')
  } catch (error) {
    console.error('删除用户失败:', error)
  }
}

常用工具函数

防抖和节流

函数防抖和节流工具:

查看代码
js
import { debounce, throttle } from 'imtes-ui'

// 防抖函数
const debouncedSearch = debounce((query) => {
  console.log('搜索:', query)
  // 执行搜索逻辑
}, 300)

// 在输入事件中使用
const handleInput = (event) => {
  debouncedSearch(event.target.value)
}

// 节流函数
const throttledScroll = throttle(() => {
  console.log('滚动事件')
  // 执行滚动逻辑
}, 100)

// 在滚动事件中使用
window.addEventListener('scroll', throttledScroll)

深拷贝

深度克隆对象:

查看代码
js
import { deepClone } from 'imtes-ui'

const originalData = {
  name: '张三',
  details: {
    age: 25,
    hobbies: ['读书', '运动'],
    address: {
      city: '北京',
      district: '朝阳区'
    }
  }
}

// 深拷贝
const clonedData = deepClone(originalData)

// 修改克隆的数据不会影响原数据
clonedData.details.age = 26
clonedData.details.hobbies.push('旅游')

console.log(originalData.details.age) // 25 (不变)
console.log(clonedData.details.age) // 26

唯一ID生成

生成唯一标识符:

查看代码
js
import { generateUniqueId } from 'imtes-ui'

// 生成唯一ID
const id1 = generateUniqueId()
const id2 = generateUniqueId()

console.log(id1) // 例如: '1704960000000_1'
console.log(id2) // 例如: '1704960000000_2'

// 使用场景
const addListItem = () => {
  const newItem = {
    id: generateUniqueId(),
    name: '新项目',
    createdAt: new Date()
  }
  list.value.push(newItem)
}

API 参考

验证相关

js
// 正则模式
import { patterns } from 'imtes-ui'

// 验证器函数
import { validators } from 'imtes-ui'

// 预设规则
import { rules } from 'imtes-ui'

// 自定义规则创建
import { createRule, createLengthRule, createRangeRule } from 'imtes-ui'

格式化相关

js
// 格式化函数
import { 
  formatDate, 
  formatNumber, 
  formatFileSize, 
  validate 
} from 'imtes-ui'

存储相关

js
// 存储工具
import { storage, cookie } from 'imtes-ui'

网络相关

js
// HTTP 客户端
import { http } from 'imtes-ui'

工具函数

js
// 常用工具
import { 
  debounce, 
  throttle, 
  deepClone, 
  generateUniqueId 
} from 'imtes-ui'

最佳实践

  1. 验证规则:根据业务需求选择合适的验证规则,避免过度验证
  2. 数据格式化:统一使用格式化函数,保持数据展示的一致性
  3. 存储管理:合理设置过期时间,及时清理无用数据
  4. 网络请求:统一配置拦截器,处理认证和错误
  5. 性能优化:合理使用防抖和节流,避免频繁操作

基于 MIT 许可发布