perf: 新增请求示例
This commit is contained in:
parent
88be3eea10
commit
2762aaf09b
|
@ -0,0 +1,64 @@
|
||||||
|
import config from '@/config/axios/config'
|
||||||
|
import { MockMethod } from 'vite-plugin-mock'
|
||||||
|
|
||||||
|
const timeout = 600000
|
||||||
|
|
||||||
|
const { code } = config
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{
|
||||||
|
url: '/request/1',
|
||||||
|
method: 'get',
|
||||||
|
timeout,
|
||||||
|
response: () => {
|
||||||
|
return {
|
||||||
|
code: code,
|
||||||
|
data: 'request-1'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: '/request/2',
|
||||||
|
method: 'get',
|
||||||
|
timeout,
|
||||||
|
response: () => {
|
||||||
|
return {
|
||||||
|
code: code,
|
||||||
|
data: 'request-2'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: '/request/3',
|
||||||
|
method: 'get',
|
||||||
|
timeout,
|
||||||
|
response: () => {
|
||||||
|
return {
|
||||||
|
code: code,
|
||||||
|
data: 'request-3'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: '/request/4',
|
||||||
|
method: 'get',
|
||||||
|
timeout,
|
||||||
|
response: () => {
|
||||||
|
return {
|
||||||
|
code: code,
|
||||||
|
data: 'request-4'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: '/request/5',
|
||||||
|
method: 'get',
|
||||||
|
timeout,
|
||||||
|
response: () => {
|
||||||
|
return {
|
||||||
|
code: code,
|
||||||
|
data: 'request-5'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
] as MockMethod[]
|
|
@ -316,6 +316,14 @@ const adminList = [
|
||||||
title: 'router.details',
|
title: 'router.details',
|
||||||
canTo: true
|
canTo: true
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'request',
|
||||||
|
component: 'views/Function/Request',
|
||||||
|
name: 'Request',
|
||||||
|
meta: {
|
||||||
|
title: 'router.request'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -637,6 +645,7 @@ const testList: string[] = [
|
||||||
'function',
|
'function',
|
||||||
'/function/multiple-tabs',
|
'/function/multiple-tabs',
|
||||||
'/function/multiple-tabs-demo/:id',
|
'/function/multiple-tabs-demo/:id',
|
||||||
|
'/function/request',
|
||||||
'/hooks',
|
'/hooks',
|
||||||
'/hooks/useWatermark',
|
'/hooks/useWatermark',
|
||||||
'/hooks/useTagsView',
|
'/hooks/useTagsView',
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
export type UserLoginType = {
|
export interface UserLoginType {
|
||||||
username: string
|
username: string
|
||||||
password: string
|
password: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export type UserType = {
|
export interface UserType {
|
||||||
username: string
|
username: string
|
||||||
password: string
|
password: string
|
||||||
role: string
|
role: string
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
import { RequestResponse } from './types'
|
||||||
|
|
||||||
|
export const request1 = () => {
|
||||||
|
return request.get<IResponse<RequestResponse>>({
|
||||||
|
url: '/request/1'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const request2 = () => {
|
||||||
|
return request.get<IResponse<RequestResponse>>({
|
||||||
|
url: '/request/2'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const request3 = () => {
|
||||||
|
return request.get<IResponse<RequestResponse>>({
|
||||||
|
url: '/request/3'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const request4 = () => {
|
||||||
|
return request.get<IResponse<RequestResponse>>({
|
||||||
|
url: '/request/4'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const request5 = () => {
|
||||||
|
return request.get<IResponse<RequestResponse>>({
|
||||||
|
url: '/request/5'
|
||||||
|
})
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
export interface RequestResponse {
|
||||||
|
data: string
|
||||||
|
}
|
|
@ -82,13 +82,16 @@ const defaultRequestInterceptors = (config: InternalAxiosRequestConfig) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultResponseInterceptors = (response: AxiosResponse<any>) => {
|
const defaultResponseInterceptors = (response: AxiosResponse<any>) => {
|
||||||
|
if ((response as any).code === 'ERR_CANCELED') {
|
||||||
|
return Promise.reject(response)
|
||||||
|
}
|
||||||
if (response?.config?.responseType === 'blob') {
|
if (response?.config?.responseType === 'blob') {
|
||||||
// 如果是文件流,直接过
|
// 如果是文件流,直接过
|
||||||
return response
|
return response
|
||||||
} else if (response.data.code === config.code) {
|
} else if (response.data.code === config.code) {
|
||||||
return response.data
|
return response.data
|
||||||
} else {
|
} else {
|
||||||
ElMessage.error(response.data.message)
|
ElMessage.error((response as any).message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
;(error: AxiosError) => {
|
;(error: AxiosError) => {
|
||||||
|
|
|
@ -175,7 +175,8 @@ export default {
|
||||||
function: 'Function',
|
function: 'Function',
|
||||||
multipleTabs: 'Multiple tabs',
|
multipleTabs: 'Multiple tabs',
|
||||||
details: 'Details',
|
details: 'Details',
|
||||||
iconPicker: 'Icon picker'
|
iconPicker: 'Icon picker',
|
||||||
|
request: 'Request'
|
||||||
},
|
},
|
||||||
permission: {
|
permission: {
|
||||||
hasPermission: 'Please set the operation permission value'
|
hasPermission: 'Please set the operation permission value'
|
||||||
|
|
|
@ -173,7 +173,8 @@ export default {
|
||||||
function: '功能',
|
function: '功能',
|
||||||
multipleTabs: '多开标签页',
|
multipleTabs: '多开标签页',
|
||||||
details: '详情页',
|
details: '详情页',
|
||||||
iconPicker: '图标选择器'
|
iconPicker: '图标选择器',
|
||||||
|
request: '请求'
|
||||||
},
|
},
|
||||||
permission: {
|
permission: {
|
||||||
hasPermission: '请设置操作权限值'
|
hasPermission: '请设置操作权限值'
|
||||||
|
|
|
@ -358,6 +358,14 @@ export const asyncRouterMap: AppRouteRecordRaw[] = [
|
||||||
canTo: true,
|
canTo: true,
|
||||||
activeMenu: '/function/multiple-tabs'
|
activeMenu: '/function/multiple-tabs'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'request',
|
||||||
|
component: () => import('@/views/Function/Request.vue'),
|
||||||
|
name: 'Request',
|
||||||
|
meta: {
|
||||||
|
title: t('router.request')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
import { ContentWrap } from '@/components/ContentWrap'
|
|
||||||
import { ElInput } from 'element-plus'
|
|
||||||
import { ref } from 'vue'
|
|
||||||
import { useRoute } from 'vue-router'
|
|
||||||
import { useTagsView } from '@/hooks/web/useTagsView'
|
|
||||||
|
|
||||||
const { setTitle } = useTagsView()
|
|
||||||
|
|
||||||
const { query } = useRoute()
|
|
||||||
|
|
||||||
const val = ref(query.id as string)
|
|
||||||
|
|
||||||
setTitle(`详情页query-${val.value}`)
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<ContentWrap> 获取参数: <ElInput v-model="val" /> </ContentWrap>
|
|
||||||
</template>
|
|
|
@ -0,0 +1,157 @@
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ContentWrap } from '@/components/ContentWrap'
|
||||||
|
import { useI18n } from '@/hooks/web/useI18n'
|
||||||
|
import { ElButton } from 'element-plus'
|
||||||
|
import { request1, request2, request3, request4, request5 } from '@/api/request'
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
const { t } = useI18n()
|
||||||
|
|
||||||
|
const pending = ref<Set<string>>(new Set())
|
||||||
|
|
||||||
|
const getRequest1 = async () => {
|
||||||
|
if (pending.value.has('/request/1')) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
pending.value.add('/request/1')
|
||||||
|
const res = await request1()
|
||||||
|
console.log('【res】:', res)
|
||||||
|
} catch (error) {
|
||||||
|
console.log('【error】:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const getRequest2 = async () => {
|
||||||
|
if (pending.value.has('/request/2')) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
pending.value.add('/request/2')
|
||||||
|
const res = await request2()
|
||||||
|
console.log('【res】:', res)
|
||||||
|
} catch (error) {
|
||||||
|
console.log('【error】:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const getRequest3 = async () => {
|
||||||
|
if (pending.value.has('/request/3')) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
pending.value.add('/request/3')
|
||||||
|
const res = await request3()
|
||||||
|
console.log('【res】:', res)
|
||||||
|
} catch (error) {
|
||||||
|
console.log('【error】:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const getRequest4 = async () => {
|
||||||
|
if (pending.value.has('/request/4')) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
pending.value.add('/request/4')
|
||||||
|
const res = await request4()
|
||||||
|
console.log('【res】:', res)
|
||||||
|
} catch (error) {
|
||||||
|
console.log('【error】:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const getRequest5 = async () => {
|
||||||
|
if (pending.value.has('/request/5')) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
pending.value.add('/request/5')
|
||||||
|
const res = await request5()
|
||||||
|
console.log('【res】:', res)
|
||||||
|
} catch (error) {
|
||||||
|
console.log('【error】:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const getAll = () => {
|
||||||
|
getRequest1()
|
||||||
|
getRequest2()
|
||||||
|
getRequest3()
|
||||||
|
getRequest4()
|
||||||
|
getRequest5()
|
||||||
|
}
|
||||||
|
|
||||||
|
const cancelAll = () => {
|
||||||
|
request.cancelAllRequest()
|
||||||
|
pending.value.clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
// set转数组
|
||||||
|
const setToArray = (set: Set<string>) => {
|
||||||
|
const arr: string[] = []
|
||||||
|
set.forEach((item) => {
|
||||||
|
arr.push(item)
|
||||||
|
})
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
||||||
|
const clickRequest1 = () => {
|
||||||
|
if (pending.value.has('/request/1')) {
|
||||||
|
request.cancelRequest('/request/1')
|
||||||
|
pending.value.delete('/request/1')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
getRequest1()
|
||||||
|
}
|
||||||
|
|
||||||
|
const clickRequest2 = () => {
|
||||||
|
if (pending.value.has('/request/2')) {
|
||||||
|
request.cancelRequest('/request/2')
|
||||||
|
pending.value.delete('/request/2')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
getRequest2()
|
||||||
|
}
|
||||||
|
|
||||||
|
const clickRequest3 = () => {
|
||||||
|
if (pending.value.has('/request/3')) {
|
||||||
|
request.cancelRequest('/request/3')
|
||||||
|
pending.value.delete('/request/3')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
getRequest3()
|
||||||
|
}
|
||||||
|
|
||||||
|
const clickRequest4 = () => {
|
||||||
|
if (pending.value.has('/request/4')) {
|
||||||
|
request.cancelRequest('/request/4')
|
||||||
|
pending.value.delete('/request/4')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
getRequest4()
|
||||||
|
}
|
||||||
|
|
||||||
|
const clickRequest5 = () => {
|
||||||
|
if (pending.value.has('/request/5')) {
|
||||||
|
request.cancelRequest('/request/5')
|
||||||
|
pending.value.delete('/request/5')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
getRequest5()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<ContentWrap :title="t('router.request')">
|
||||||
|
<p>正在请求的接口:{{ setToArray(pending) }}</p>
|
||||||
|
<ElButton type="primary" @click="clickRequest1">请求/取消request1</ElButton>
|
||||||
|
<ElButton type="primary" @click="clickRequest2">请求/取消request2</ElButton>
|
||||||
|
<ElButton type="primary" @click="clickRequest3">请求/取消request3</ElButton>
|
||||||
|
<ElButton type="primary" @click="clickRequest4">请求/取消request4</ElButton>
|
||||||
|
<ElButton type="primary" @click="clickRequest5">请求/取消request5</ElButton>
|
||||||
|
<ElButton type="primary" @click="getAll">发送五个请求</ElButton>
|
||||||
|
<ElButton type="primary" @click="cancelAll">关闭所有请求</ElButton>
|
||||||
|
</ContentWrap>
|
||||||
|
</template>
|
Loading…
Reference in New Issue