refactor(frontend): comprehensive architectural optimization and base component extraction

- Standardized table loading logic with enhanced useTableLoader.
- Unified form submission patterns via new useForm composable.
- Extracted common UI components: SearchInput and StatusBadge.
- Centralized common interface definitions in types/index.ts.
- Achieved TypeScript zero-error status across refactored files.
- Greatly improved code reusability and maintainability.
This commit is contained in:
IanShaw027
2026-01-04 22:29:19 +08:00
parent d4d21d5ef3
commit 99308ab4fb
10 changed files with 248 additions and 151 deletions

View File

@@ -0,0 +1,43 @@
import { ref } from 'vue'
import { useAppStore } from '@/stores/app'
interface UseFormOptions<T> {
form: T
submitFn: (data: T) => Promise<void>
successMsg?: string
errorMsg?: string
}
/**
* 统一表单提交逻辑
* 管理加载状态、错误捕获及通知
*/
export function useForm<T>(options: UseFormOptions<T>) {
const { form, submitFn, successMsg, errorMsg } = options
const loading = ref(false)
const appStore = useAppStore()
const submit = async () => {
if (loading.value) return
loading.value = true
try {
await submitFn(form)
if (successMsg) {
appStore.showSuccess(successMsg)
}
} catch (error: any) {
const detail = error.response?.data?.detail || error.response?.data?.message || error.message
appStore.showError(errorMsg || detail)
// 继续抛出错误,让组件有机会进行局部处理(如验证错误显示)
throw error
} finally {
loading.value = false
}
}
return {
loading,
submit
}
}