Browse Source

初代-简单的封装工具请求类request

lihuilin/feature-20250718094329-25周年庆后台
wangxiangwen4 1 month ago
parent
commit
e6f9b1d475
  1. 2
      activitylink/.env.development
  2. 12
      activitylink/package-lock.json
  3. 1
      activitylink/package.json
  4. 10
      activitylink/src/api/manage/level.js
  5. 2
      activitylink/src/main.js
  6. 140
      activitylink/src/utils/request.js
  7. 20
      activitylink/src/views/zhongchou/level/index.vue
  8. 8
      activitylink/vite.config.js

2
activitylink/.env.development

@ -6,7 +6,7 @@ VITE_PUBLIC_PATH = /
#新数据接口 #新数据接口
# VITE_APP_API_BASE_URL = "http://39.101.133.168:8828/link" # VITE_APP_API_BASE_URL = "http://39.101.133.168:8828/link"
VITE_APP_BASE_API = 'http://47.92.148.30:3003/mock/3267'
# Whether to open mock # Whether to open mock
VITE_USE_MOCK = true VITE_USE_MOCK = true

12
activitylink/package-lock.json

@ -11,6 +11,7 @@
"@vitejs/plugin-vue": "^4.6.2", "@vitejs/plugin-vue": "^4.6.2",
"axios": "^1.10.0", "axios": "^1.10.0",
"element-plus": "^2.10.4", "element-plus": "^2.10.4",
"file-saver": "^2.0.5",
"pinia": "^3.0.3", "pinia": "^3.0.3",
"vite": "^4.5.3", "vite": "^4.5.3",
"vue": "^3.5.17", "vue": "^3.5.17",
@ -966,6 +967,12 @@
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==",
"license": "MIT"
},
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.9", "version": "1.15.9",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/follow-redirects/-/follow-redirects-1.15.9.tgz", "resolved": "https://mirrors.huaweicloud.com/repository/npm/follow-redirects/-/follow-redirects-1.15.9.tgz",
@ -2001,6 +2008,11 @@
"resolved": "https://mirrors.huaweicloud.com/repository/npm/estree-walker/-/estree-walker-2.0.2.tgz", "resolved": "https://mirrors.huaweicloud.com/repository/npm/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
}, },
"file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
},
"follow-redirects": { "follow-redirects": {
"version": "1.15.9", "version": "1.15.9",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/follow-redirects/-/follow-redirects-1.15.9.tgz", "resolved": "https://mirrors.huaweicloud.com/repository/npm/follow-redirects/-/follow-redirects-1.15.9.tgz",

1
activitylink/package.json

@ -12,6 +12,7 @@
"@vitejs/plugin-vue": "^4.6.2", "@vitejs/plugin-vue": "^4.6.2",
"axios": "^1.10.0", "axios": "^1.10.0",
"element-plus": "^2.10.4", "element-plus": "^2.10.4",
"file-saver": "^2.0.5",
"pinia": "^3.0.3", "pinia": "^3.0.3",
"vite": "^4.5.3", "vite": "^4.5.3",
"vue": "^3.5.17", "vue": "^3.5.17",

10
activitylink/src/api/manage/level.js

@ -0,0 +1,10 @@
import request from '@/utils/request'
export function deleteUser(id) {
return request({
url: '/admin/user/delete',
method: 'post',
params: { id }
})
}

2
activitylink/src/main.js

@ -11,7 +11,7 @@ import axios from 'axios'
const app = createApp(App) const app = createApp(App)
const pinia = createPinia() const pinia = createPinia()
window.axios = axios window.axios = axios
axios.defaults.baseURL = 'http://47.92.148.30:3003/mock/3267'
// axios.defaults.baseURL = 'http://47.92.148.30:3003/mock/3267'
app.use(router) app.use(router)
app.use(pinia) app.use(pinia)
app.use(ElementPlus, { app.use(ElementPlus, {

140
activitylink/src/utils/request.js

@ -1,130 +1,30 @@
import axios from 'axios' import axios from 'axios'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { config } from '@/config'
const ERROR_MESSAGES = {
badRequest: '请求错误(400)',
unauthorized: '未授权,请登录(401)',
forbidden: '拒绝访问(403)',
notFound: `请求地址出错: ${'[具体 URL 将在这里被替换]'}`,
methodNotAllowed: '请求方法未允许(405)',
requestTimeout: '请求超时(408)',
internalServerError: '服务器内部错误(500)',
notImplemented: '服务未实现(501)',
badGateway: '网络错误(502)',
serviceUnavailable: '服务不可用(503)',
gatewayTimeout: '网络超时(504)',
httpVersionNotSupported: 'HTTP 版本不受支持(505)',
defaultConnectionError: '连接错误: [原始错误消息]',
networkError: '网络异常,请检查后重试!',
serverFailure: '连接到服务器失败,请联系管理员'
}
// 创建基础实例
const service = axios.create({ const service = axios.create({
baseURL: '', // url = base url + request url+
// timeout: 50000,
withCredentials: false // send cookies when cross-domain requests
// headers: {
// // clear cors
// 'Cache-Control': 'no-cache',
// Pragma: 'no-cache'
// }
baseURL: import.meta.env.VITE_APP_BASE_API,
timeout: 10000
}) })
const setErrorMsg = (error) => {
if (error && error.response) {
switch (error.response.status) {
case 400:
error.message = ERROR_MESSAGES.badRequest
break
case 401:
error.message = ERROR_MESSAGES.unauthorized
break
case 403:
error.message = ERROR_MESSAGES.forbidden
break
case 404:
error.message = ERROR_MESSAGES.notFound.replace(
'[具体 URL 将在这里被替换]',
error.response.config.url
)
break
case 405:
error.message = ERROR_MESSAGES.methodNotAllowed
break
case 408:
error.message = ERROR_MESSAGES.requestTimeout
break
case 500:
error.message = ERROR_MESSAGES.internalServerError
break
case 501:
error.message = ERROR_MESSAGES.notImplemented
break
case 502:
error.message = ERROR_MESSAGES.badGateway
break
case 503:
error.message = ERROR_MESSAGES.serviceUnavailable
break
case 504:
error.message = ERROR_MESSAGES.gatewayTimeout
break
case 505:
error.message = ERROR_MESSAGES.httpVersionNotSupported
break
default:
error.message = ERROR_MESSAGES.defaultConnectionError.replace(
'[原始错误消息]',
error.message
)
}
} else {
if (error.message === 'Network Error') {
error.message = ERROR_MESSAGES.networkError
} else {
error.message = ERROR_MESSAGES.serverFailure
}
}
return error.message
}
// Request interceptors
service.interceptors.request.use(
(config) => {
// 在此处添加请求头等,如添加 token
// if (store.state.token) {
// config.headers['Authorization'] = `Bearer ${store.state.token}`
// }
return config
},
(error) => {
return Promise.reject(error)
}
)
// 请求拦截器(简化版)
service.interceptors.request.use(config => {
// 添加token逻辑(如果存在)
const token = localStorage.getItem('token')
if (token) {
config.headers['Authorization'] = 'Bearer ' + token
}
return config
})
// Response interceptors
// 响应拦截器(简化版)
service.interceptors.response.use( service.interceptors.response.use(
async (response) => {
// await new Promise(resovle => setTimeout(resovle, 3000));
// if (response.config.loadingInstance) {
// response.config.loadingInstance.close();
// }
const res = response.data
if (res.code !== 200) {
const errorMsg = res.msg || 'Unkonw error'
// ElMessage.error(errorMsg)
// return Promise.reject(new Error(res.msg || 'Error'))
return response.data
} else {
return response.data
}
},
(error) => {
const errorMessage = setErrorMsg(error)
ElMessage.error(errorMessage)
return Promise.reject(error)
}
response => response.data,
error => {
ElMessage.error(error.message || '请求错误')
return Promise.reject(error)
}
) )
export default service
export default service

20
activitylink/src/views/zhongchou/level/index.vue

@ -94,7 +94,9 @@
<script setup> <script setup>
import { ref, computed,onMounted } from 'vue' import { ref, computed,onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios';
// import { deleteUser } from '@/api/manage/level'
import { deleteUser } from '@/api/manage/level'
// import axios from 'axios';
// //
const tableData = ref([ const tableData = ref([
{ {
@ -204,14 +206,14 @@
onMounted(() => { onMounted(() => {
// //
const id = 1 // id
axios.post(`/admin/user/delete?id=${id}`)
.then(function (response) {
console.log('请求成功:', response.data)
})
.catch(function (error) {
console.error('请求失败:', error)
})
const id = 1
deleteUser(id).then(response => {
console.log('删除成功:', response)
}).catch(error => {
console.error('删除失败:', error)
})
}) })

8
activitylink/vite.config.js

@ -1,14 +1,12 @@
// vite.config.js
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import path from 'path' // 需要引入 path 模块
import path from 'path'
export default defineConfig({ export default defineConfig({
plugins: [vue()], plugins: [vue()],
resolve: { resolve: {
alias: { alias: {
'@': path.resolve(__dirname, './src') // 将 @ 映射为 src 目录
},
extensions: ['.js', '.vue', '.json', '.mjs'] // 确保支持 .js 文件
'@': path.resolve(__dirname, './src')
}
} }
}) })
Loading…
Cancel
Save