You've already forked template-MP
140 lines
2.8 KiB
JavaScript
140 lines
2.8 KiB
JavaScript
import { ref, computed } from 'vue'
|
|
import tool from '@/common/utils/tool.js'
|
|
|
|
/**
|
|
* 状态管理Hook
|
|
* @param {any} initialState 初始状态
|
|
* @returns {Object} 状态和操作方法
|
|
*/
|
|
export function useState(initialState) {
|
|
const state = ref(initialState)
|
|
|
|
/**
|
|
* 设置状态
|
|
* @param {any} newState 新状态
|
|
*/
|
|
function setState(newState) {
|
|
if (typeof newState === 'function') {
|
|
state.value = newState(state.value)
|
|
} else {
|
|
state.value = newState
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 重置状态到初始值
|
|
*/
|
|
function resetState() {
|
|
state.value = typeof initialState === 'function' ? initialState() : initialState
|
|
}
|
|
|
|
return {
|
|
state: computed(() => state.value),
|
|
setState,
|
|
resetState,
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 本地存储状态Hook
|
|
* @param {string} key 存储键名
|
|
* @param {any} defaultValue 默认值
|
|
* @returns {Object} 状态和操作方法
|
|
*/
|
|
export function useStorageState(key, defaultValue = null) {
|
|
const storageValue = tool.storage(key) ?? defaultValue
|
|
const { state, setState, resetState } = useState(storageValue)
|
|
|
|
/**
|
|
* 设置状态并同步到本地存储
|
|
* @param {any} newState 新状态
|
|
*/
|
|
function setStorageState(newState) {
|
|
if (typeof newState === 'function') {
|
|
newState = newState(state.value)
|
|
}
|
|
|
|
setState(newState)
|
|
tool.storage(key, newState)
|
|
}
|
|
|
|
/**
|
|
* 清除本地存储中的值
|
|
*/
|
|
function clearStorage() {
|
|
tool.removeStorage(key)
|
|
resetState()
|
|
}
|
|
|
|
return {
|
|
state,
|
|
setState: setStorageState,
|
|
resetState: () => {
|
|
clearStorage()
|
|
},
|
|
clearStorage,
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 表单状态Hook
|
|
* @param {Object} initialFormData 初始表单数据
|
|
* @returns {Object} 表单状态和操作方法
|
|
*/
|
|
export function useFormState(initialFormData = {}) {
|
|
const { state, setState, resetState } = useState({ ...initialFormData })
|
|
|
|
/**
|
|
* 设置表单项
|
|
* @param {string} field 字段名
|
|
* @param {any} value 字段值
|
|
*/
|
|
function setField(field, value) {
|
|
setState(prev => ({
|
|
...prev,
|
|
[field]: value,
|
|
}))
|
|
}
|
|
|
|
/**
|
|
* 重置表单到初始状态
|
|
*/
|
|
function resetForm() {
|
|
resetState()
|
|
}
|
|
|
|
/**
|
|
* 清空表单
|
|
*/
|
|
function clearForm() {
|
|
setState({})
|
|
}
|
|
|
|
/**
|
|
* 批量设置表单值
|
|
* @param {Object} values 表单值对象
|
|
*/
|
|
function setFields(values) {
|
|
setState(prev => ({
|
|
...prev,
|
|
...values,
|
|
}))
|
|
}
|
|
|
|
/**
|
|
* 获取表单验证器
|
|
* @returns {Object} 验证器实例
|
|
*/
|
|
function getValidator() {
|
|
return tool.getValidator()
|
|
}
|
|
|
|
return {
|
|
form: state,
|
|
setField,
|
|
resetForm,
|
|
clearForm,
|
|
setFields,
|
|
getValidator,
|
|
}
|
|
} |