fix: 修复前端 TypeScript 类型错误并移除 docker-compose.yml 中的 version 属性

- 移除 docker-compose.yml 中的 version 属性(已过时)
- 修复 RouteLocationNormalized 类型导入错误
- 修复 AxiosRequestConfig 类型错误,使用 InternalAxiosRequestConfig
- 添加 Vite 环境变量类型定义
- 扩展 axios 类型定义,正确处理响应拦截器返回的 data
- 修复 signature.ts 中未使用的 body 参数 bug
- 移除 UserManagement.vue 中未使用的 StatusHelper 导入
This commit is contained in:
张翔
2026-04-17 19:05:55 +08:00
parent 27aa8b66db
commit 958fc73c15
7 changed files with 28 additions and 7 deletions
-2
View File
@@ -1,5 +1,3 @@
version: '3.8'
x-common-env: &common-env x-common-env: &common-env
TZ: Asia/Shanghai TZ: Asia/Shanghai
LANG: zh_CN.UTF-8 LANG: zh_CN.UTF-8
+1 -1
View File
@@ -1,5 +1,5 @@
import { createRouter, createWebHistory } from 'vue-router' import { createRouter, createWebHistory } from 'vue-router'
import type { RouteRecordRaw } from 'vue-router' import type { RouteRecordRaw, RouteLocationNormalized } from 'vue-router'
declare module 'vue-router' { declare module 'vue-router' {
interface RouteMeta { interface RouteMeta {
+13
View File
@@ -0,0 +1,13 @@
import { AxiosRequestConfig, AxiosInstance } from 'axios'
declare module 'axios' {
interface AxiosInstance {
request<T = any>(config: AxiosRequestConfig): Promise<T>
get<T = any>(url: string, config?: AxiosRequestConfig): Promise<T>
delete<T = any>(url: string, config?: AxiosRequestConfig): Promise<T>
head<T = any>(url: string, config?: AxiosRequestConfig): Promise<T>
post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>
put<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>
patch<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T>
}
}
+2 -2
View File
@@ -1,4 +1,4 @@
import axios, { AxiosRequestConfig } from 'axios' import axios, { InternalAxiosRequestConfig } from 'axios'
import { generateSignatureHeaders } from './signature' import { generateSignatureHeaders } from './signature'
import { checkApiPermission } from './permission' import { checkApiPermission } from './permission'
@@ -8,7 +8,7 @@ const request = axios.create({
}) })
request.interceptors.request.use( request.interceptors.request.use(
(config: AxiosRequestConfig) => { (config: InternalAxiosRequestConfig) => {
const token = localStorage.getItem('token') const token = localStorage.getItem('token')
if (token) { if (token) {
config.headers = config.headers || {} config.headers = config.headers || {}
+1 -1
View File
@@ -16,7 +16,7 @@ export function generateSignature(
timestamp: number, timestamp: number,
nonce: string nonce: string
): string { ): string {
const stringToSign = buildStringToSign(method, path, query, '', timestamp, nonce) const stringToSign = buildStringToSign(method, path, query, body, timestamp, nonce)
const signature = CryptoJS.HmacSHA256(stringToSign, SIGNATURE_SECRET) const signature = CryptoJS.HmacSHA256(stringToSign, SIGNATURE_SECRET)
const signatureBase64 = CryptoJS.enc.Base64.stringify(signature) const signatureBase64 = CryptoJS.enc.Base64.stringify(signature)
@@ -226,7 +226,7 @@ import { Search } from '@element-plus/icons-vue'
import { userApi, type User, type CreateUserRequest, type UpdateUserRequest } from '@/api/user.api' import { userApi, type User, type CreateUserRequest, type UpdateUserRequest } from '@/api/user.api'
import { roleApi, type Role } from '@/api/role.api' import { roleApi, type Role } from '@/api/role.api'
import { handleApiError } from '@/utils/errorHandler' import { handleApiError } from '@/utils/errorHandler'
import { UserStatus, StatusHelper } from '@/constants/status' import { UserStatus } from '@/constants/status'
import { formatDateTime } from '@/utils/dateFormat' import { formatDateTime } from '@/utils/dateFormat'
const loading = ref(false) const loading = ref(false)
+10
View File
@@ -0,0 +1,10 @@
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_SIGNATURE_SECRET: string
readonly VITE_API_BASE_URL?: string
}
interface ImportMeta {
readonly env: ImportMetaEnv
}