mirror of
https://github.com/vbenjs/vben-admin-thin-next.git
synced 2025-02-03 02:18:40 +08:00
feat: axios add joinTime field
This commit is contained in:
parent
c774a6d3a0
commit
f646e37754
@ -3,7 +3,8 @@
|
|||||||
### ✨ Features
|
### ✨ Features
|
||||||
|
|
||||||
- 移除左侧菜单搜索,新增顶部菜单搜索功能
|
- 移除左侧菜单搜索,新增顶部菜单搜索功能
|
||||||
- layout 移动端适配。页面未适配
|
- layout 移动端适配。业务页面未适配
|
||||||
|
- axios 加入 joinTime 配置。控制响应是否加入时间戳
|
||||||
|
|
||||||
### ⚡ Performance Improvements
|
### ⚡ Performance Improvements
|
||||||
|
|
||||||
@ -19,6 +20,10 @@
|
|||||||
- 刷新按钮布局调整
|
- 刷新按钮布局调整
|
||||||
- `route.meta` 移除 `externalLink` 属性
|
- `route.meta` 移除 `externalLink` 属性
|
||||||
|
|
||||||
|
### ✨ Refactor
|
||||||
|
|
||||||
|
- `openModal`与`openDrawer`第三个参数`openOnSet`默认设置为 true
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
- 修复多级路由缓存导致组件渲染多次的问题
|
- 修复多级路由缓存导致组件渲染多次的问题
|
||||||
@ -31,6 +36,7 @@
|
|||||||
- 修复 `Modal`与`Drawer`组件在使用 emits 数据传递失效问题
|
- 修复 `Modal`与`Drawer`组件在使用 emits 数据传递失效问题
|
||||||
- 修复菜单已知问题
|
- 修复菜单已知问题
|
||||||
- 修复上传组件 api 失效问题
|
- 修复上传组件 api 失效问题
|
||||||
|
- 修复菜单权限过滤失效问题
|
||||||
|
|
||||||
## 2.0.0-rc.13 (2020-12-10)
|
## 2.0.0-rc.13 (2020-12-10)
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ export function useDrawer(): UseDrawerReturnType {
|
|||||||
getInstance().setDrawerProps(props);
|
getInstance().setDrawerProps(props);
|
||||||
},
|
},
|
||||||
|
|
||||||
openDrawer: <T = any>(visible = true, data?: T, openOnSet = false): void => {
|
openDrawer: <T = any>(visible = true, data?: T, openOnSet = true): void => {
|
||||||
getInstance().setDrawerProps({
|
getInstance().setDrawerProps({
|
||||||
visible: visible,
|
visible: visible,
|
||||||
});
|
});
|
||||||
|
@ -60,7 +60,7 @@ export function useModal(): UseModalReturnType {
|
|||||||
getInstance().setModalProps(props);
|
getInstance().setModalProps(props);
|
||||||
},
|
},
|
||||||
|
|
||||||
openModal: <T = any>(visible = true, data?: T, openOnSet = false): void => {
|
openModal: <T = any>(visible = true, data?: T, openOnSet = true): void => {
|
||||||
getInstance().setModalProps({
|
getInstance().setModalProps({
|
||||||
visible: visible,
|
visible: visible,
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import { isObject, isString } from '/@/utils/is';
|
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
|
||||||
const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm';
|
const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm';
|
||||||
@ -34,28 +33,5 @@ export const formatAgo = (str: string | number) => {
|
|||||||
return parseInt(String(time / 31536000000)) + '年前';
|
return parseInt(String(time / 31536000000)) + '年前';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
/**
|
|
||||||
* @description: 格式化请求参数时间
|
|
||||||
*/
|
|
||||||
export function formatRequestDate(params: any) {
|
|
||||||
for (const key in params) {
|
|
||||||
if (params[key] && params[key]._isAMomentObject) {
|
|
||||||
params[key] = params[key].format(DATE_TIME_FORMAT);
|
|
||||||
}
|
|
||||||
if (isString(key)) {
|
|
||||||
const value = params[key];
|
|
||||||
if (value) {
|
|
||||||
try {
|
|
||||||
params[key] = isString(value) ? value.trim() : value;
|
|
||||||
} catch (error) {
|
|
||||||
throw new Error(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isObject(params[key])) {
|
|
||||||
formatRequestDate(params[key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const dateUtil = moment;
|
export const dateUtil = moment;
|
||||||
|
45
src/utils/http/axios/helper.ts
Normal file
45
src/utils/http/axios/helper.ts
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import { isObject, isString } from '/@/utils/is';
|
||||||
|
|
||||||
|
export function createNow<T extends boolean>(
|
||||||
|
join: boolean,
|
||||||
|
restful: T
|
||||||
|
): T extends true ? string : object;
|
||||||
|
|
||||||
|
export function createNow(join: boolean, restful = false): string | object {
|
||||||
|
if (!join) {
|
||||||
|
return restful ? '' : {};
|
||||||
|
}
|
||||||
|
const now = new Date().getTime();
|
||||||
|
if (restful) {
|
||||||
|
return `?_t=${now}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
_t: now,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm';
|
||||||
|
/**
|
||||||
|
* @description: 格式化请求参数时间
|
||||||
|
*/
|
||||||
|
export function formatRequestDate(params: any) {
|
||||||
|
for (const key in params) {
|
||||||
|
if (params[key] && params[key]._isAMomentObject) {
|
||||||
|
params[key] = params[key].format(DATE_TIME_FORMAT);
|
||||||
|
}
|
||||||
|
if (isString(key)) {
|
||||||
|
const value = params[key];
|
||||||
|
if (value) {
|
||||||
|
try {
|
||||||
|
params[key] = isString(value) ? value.trim() : value;
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isObject(params[key])) {
|
||||||
|
formatRequestDate(params[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
import type { AxiosResponse } from 'axios';
|
import type { AxiosResponse } from 'axios';
|
||||||
import type { CreateAxiosOptions, RequestOptions, Result } from './types';
|
import type { CreateAxiosOptions, RequestOptions, Result } from './types';
|
||||||
|
|
||||||
import { VAxios } from './Axios';
|
import { VAxios } from './Axios';
|
||||||
import { getToken } from '/@/utils/auth';
|
import { getToken } from '/@/utils/auth';
|
||||||
import { AxiosTransform } from './axiosTransform';
|
import { AxiosTransform } from './axiosTransform';
|
||||||
@ -16,11 +15,11 @@ import { useMessage } from '/@/hooks/web/useMessage';
|
|||||||
import { RequestEnum, ResultEnum, ContentTypeEnum } from '/@/enums/httpEnum';
|
import { RequestEnum, ResultEnum, ContentTypeEnum } from '/@/enums/httpEnum';
|
||||||
|
|
||||||
import { isString } from '/@/utils/is';
|
import { isString } from '/@/utils/is';
|
||||||
import { formatRequestDate } from '/@/utils/dateUtil';
|
|
||||||
import { setObjToUrlParams, deepMerge } from '/@/utils';
|
import { setObjToUrlParams, deepMerge } from '/@/utils';
|
||||||
import { errorStore } from '/@/store/modules/error';
|
import { errorStore } from '/@/store/modules/error';
|
||||||
import { errorResult } from './const';
|
import { errorResult } from './const';
|
||||||
import { useI18n } from '/@/hooks/web/useI18n';
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
import { createNow, formatRequestDate } from './helper';
|
||||||
|
|
||||||
const globSetting = useGlobSetting();
|
const globSetting = useGlobSetting();
|
||||||
const prefix = globSetting.urlPrefix;
|
const prefix = globSetting.urlPrefix;
|
||||||
@ -97,7 +96,7 @@ const transform: AxiosTransform = {
|
|||||||
|
|
||||||
// 请求之前处理config
|
// 请求之前处理config
|
||||||
beforeRequestHook: (config, options) => {
|
beforeRequestHook: (config, options) => {
|
||||||
const { apiUrl, joinPrefix, joinParamsToUrl, formatDate } = options;
|
const { apiUrl, joinPrefix, joinParamsToUrl, formatDate, joinTime = true } = options;
|
||||||
|
|
||||||
if (joinPrefix) {
|
if (joinPrefix) {
|
||||||
config.url = `${prefix}${config.url}`;
|
config.url = `${prefix}${config.url}`;
|
||||||
@ -107,17 +106,14 @@ const transform: AxiosTransform = {
|
|||||||
config.url = `${apiUrl}${config.url}`;
|
config.url = `${apiUrl}${config.url}`;
|
||||||
}
|
}
|
||||||
if (config.method?.toUpperCase() === RequestEnum.GET) {
|
if (config.method?.toUpperCase() === RequestEnum.GET) {
|
||||||
const now = new Date().getTime();
|
|
||||||
if (!isString(config.params)) {
|
if (!isString(config.params)) {
|
||||||
config.data = {
|
config.data = {
|
||||||
// 给 get 请求加上时间戳参数,避免从缓存中拿数据。
|
// 给 get 请求加上时间戳参数,避免从缓存中拿数据。
|
||||||
params: Object.assign(config.params || {}, {
|
params: Object.assign(config.params || {}, createNow(joinTime, false)),
|
||||||
_t: now,
|
|
||||||
}),
|
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
// 兼容restful风格
|
// 兼容restful风格
|
||||||
config.url = config.url + config.params + `?_t=${now}`;
|
config.url = config.url + config.params + `${createNow(joinTime, true)}`;
|
||||||
config.params = undefined;
|
config.params = undefined;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -187,6 +183,8 @@ function createAxios(opt?: Partial<CreateAxiosOptions>) {
|
|||||||
// 接口可能会有通用的地址部分,可以统一抽取出来
|
// 接口可能会有通用的地址部分,可以统一抽取出来
|
||||||
prefixUrl: prefix,
|
prefixUrl: prefix,
|
||||||
headers: { 'Content-Type': ContentTypeEnum.JSON },
|
headers: { 'Content-Type': ContentTypeEnum.JSON },
|
||||||
|
// 如果是form-data格式
|
||||||
|
// headers: { 'Content-Type': ContentTypeEnum.FORM_URLENCODED },
|
||||||
// 数据处理方式
|
// 数据处理方式
|
||||||
transform,
|
transform,
|
||||||
// 配置项,下面的选项都可以在独立的接口请求中覆盖
|
// 配置项,下面的选项都可以在独立的接口请求中覆盖
|
||||||
@ -203,6 +201,8 @@ function createAxios(opt?: Partial<CreateAxiosOptions>) {
|
|||||||
errorMessageMode: 'message',
|
errorMessageMode: 'message',
|
||||||
// 接口地址
|
// 接口地址
|
||||||
apiUrl: globSetting.apiUrl,
|
apiUrl: globSetting.apiUrl,
|
||||||
|
// 是否加入时间戳
|
||||||
|
joinTime: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
opt || {}
|
opt || {}
|
||||||
|
@ -16,6 +16,8 @@ export interface RequestOptions {
|
|||||||
apiUrl?: string;
|
apiUrl?: string;
|
||||||
// 错误消息提示类型
|
// 错误消息提示类型
|
||||||
errorMessageMode?: ErrorMessageMode;
|
errorMessageMode?: ErrorMessageMode;
|
||||||
|
// 是否加入时间戳
|
||||||
|
joinTime?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CreateAxiosOptions extends AxiosRequestConfig {
|
export interface CreateAxiosOptions extends AxiosRequestConfig {
|
||||||
|
@ -78,6 +78,7 @@ const viteConfig: UserConfig = {
|
|||||||
// The package will be recompiled using rollup, and the new package compiled into the esm module specification will be put into node_modules/.vite_opt_cache
|
// The package will be recompiled using rollup, and the new package compiled into the esm module specification will be put into node_modules/.vite_opt_cache
|
||||||
optimizeDeps: {
|
optimizeDeps: {
|
||||||
include: [
|
include: [
|
||||||
|
'qs',
|
||||||
'echarts/map/js/china',
|
'echarts/map/js/china',
|
||||||
'ant-design-vue/es/locale/zh_CN',
|
'ant-design-vue/es/locale/zh_CN',
|
||||||
'ant-design-vue/es/locale/en_US',
|
'ant-design-vue/es/locale/en_US',
|
||||||
|
Loading…
Reference in New Issue
Block a user