From 82411cc5eb7c9ff850399c521f91c2798ee3aa5f Mon Sep 17 00:00:00 2001 From: Soybean <2570172956@qq.com> Date: Sat, 29 May 2021 03:02:15 +0800 Subject: [PATCH] =?UTF-8?q?build(deps):=20=E6=B7=BB=E5=8A=A0smooth-scroll?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E3=80=81axios=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 6 +++ .env.production | 6 +++ .eslintrc.js | 3 +- package.json | 6 +++ src/App.vue | 19 ++----- src/main.ts | 5 +- src/plugins/element-plus.ts | 11 +++-- src/plugins/index.ts | 3 +- src/plugins/smooth-scroll.ts | 6 +++ src/service/api/auth.ts | 0 src/service/index.ts | 0 src/service/middleware/auth.ts | 0 src/service/request/config.ts | 8 +++ src/service/request/errorHandler.ts | 77 +++++++++++++++++++++++++++++ src/service/request/index.ts | 11 +++++ src/service/request/instance.ts | 77 +++++++++++++++++++++++++++++ src/service/request/request.ts | 66 +++++++++++++++++++++++++ src/store/helpers/index.ts | 0 src/store/index.ts | 10 ++++ src/store/modules/aside/index.ts | 33 +++++++++++++ src/store/modules/auth/index.ts | 44 +++++++++++++++++ src/styles/css/global.css | 23 +++++++++ src/styles/css/scrollbar.css | 20 ++++++++ src/styles/scss/global.scss | 18 +++++++ src/utils/auth/index.ts | 5 ++ src/utils/index.ts | 1 + tailwind.config.js | 16 ++++++ vite.config.ts | 7 +++ yarn.lock | 47 +++++++++++++++++- 29 files changed, 504 insertions(+), 24 deletions(-) create mode 100644 .env.development create mode 100644 .env.production create mode 100644 src/plugins/smooth-scroll.ts create mode 100644 src/service/api/auth.ts create mode 100644 src/service/index.ts create mode 100644 src/service/middleware/auth.ts create mode 100644 src/service/request/config.ts create mode 100644 src/service/request/errorHandler.ts create mode 100644 src/service/request/index.ts create mode 100644 src/service/request/instance.ts create mode 100644 src/service/request/request.ts create mode 100644 src/store/helpers/index.ts create mode 100644 src/store/index.ts create mode 100644 src/store/modules/aside/index.ts create mode 100644 src/store/modules/auth/index.ts create mode 100644 src/styles/css/global.css create mode 100644 src/styles/css/scrollbar.css create mode 100644 src/styles/scss/global.scss create mode 100644 src/utils/auth/index.ts create mode 100644 src/utils/index.ts diff --git a/.env.development b/.env.development new file mode 100644 index 00000000..e72288ff --- /dev/null +++ b/.env.development @@ -0,0 +1,6 @@ +#请求的环境 测试环境 +VITE_HTTP_ENV=TEST +#请求地址 +VITE_HTTP_URL=http://192.168.100.57/ +#emoss-admin服务请求地址 +VITE_HTTP_URL_EMOSS_ADMIN = http://192.168.100.57:8201/emoss-admin diff --git a/.env.production b/.env.production new file mode 100644 index 00000000..f9c939b2 --- /dev/null +++ b/.env.production @@ -0,0 +1,6 @@ +#请求的环境 正式环境 +VITE_HTTP_ENV=OFFICAL +#请求地址 +VITE_HTTP_URL=http://119.23.220.176:17321 +#emoss-admin服务请求地址 +VITE_HTTP_URL_EMOSS_ADMIN = http://119.23.220.176:17321/emoss-admin diff --git a/.eslintrc.js b/.eslintrc.js index 4a106416..d5ccc3d6 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -14,6 +14,7 @@ module.exports = { 'no-unused-vars': 0, 'import/extensions': ['error', 'never'], 'import/no-extraneous-dependencies': [2, { devDependencies: true }], - 'import/no-unresolved': 0 + 'import/no-unresolved': 0, + 'no-shadow': 0 } }; diff --git a/package.json b/package.json index 52a3ed30..ab0f08f8 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,12 @@ "*.{vue,js,jsx,ts,tsx}": "eslint --fix" }, "dependencies": { + "axios": "^0.21.1", + "dayjs": "^1.10.5", "element-plus": "^1.0.2-beta.44", "nprogress": "^0.2.0", + "qs": "^6.10.1", + "smoothscroll-polyfill": "^0.4.4", "vue": "^3.0.5" }, "devDependencies": { @@ -21,6 +25,8 @@ "@commitlint/config-conventional": "^12.1.4", "@iconify/json": "^1.1.349", "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.6", + "@types/smoothscroll-polyfill": "^0.3.1", "@typescript-eslint/eslint-plugin": "^4.25.0", "@typescript-eslint/parser": "^4.25.0", "@vitejs/plugin-vue": "^1.2.2", diff --git a/src/App.vue b/src/App.vue index 328a4ee1..d99c46a5 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,19 +1,6 @@ - - - + + diff --git a/src/main.ts b/src/main.ts index 4f58aad2..08545c1d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,10 @@ import { createApp } from 'vue'; import App from './App.vue'; -import { setupElementPlus } from './plugins'; +import { setupSmoothScroll, setupElementPlus } from './plugins'; import 'virtual:windi.css'; +import './styles/css/global.css'; + +setupSmoothScroll(); const app = createApp(App); setupElementPlus(app); diff --git a/src/plugins/element-plus.ts b/src/plugins/element-plus.ts index 258e007f..780392ae 100644 --- a/src/plugins/element-plus.ts +++ b/src/plugins/element-plus.ts @@ -1,5 +1,7 @@ import type { App } from 'vue'; import 'element-plus/lib/theme-chalk/base.css'; +import lang from 'element-plus/lib/locale/lang/zh-cn'; +import 'dayjs/locale/zh-cn'; import { // ElAlert, // ElAside, @@ -26,7 +28,7 @@ import { ElCollapseTransition, // ElColorPicker, // ElContainer, - // ElDatePicker, + ElDatePicker, // ElDialog, // ElDivider, // ElDrawer, @@ -81,10 +83,11 @@ import { // ElTree, // ElUpload, // ElInfiniteScroll, - ElLoading + ElLoading, // ElMessage // ElMessageBox, // ElNotification + locale } from 'element-plus'; const components = [ @@ -113,7 +116,7 @@ const components = [ ElCollapseTransition, // ElColorPicker, // ElContainer, - // ElDatePicker, + ElDatePicker, // ElDialog, // ElDivider, // ElDrawer, @@ -179,6 +182,8 @@ const plugins = [ /** 引入element-plus UI组件 */ export default function setupElementPlus(app: App) { + /** 国际化 */ + locale(lang); components.forEach(component => { app.component(component.name, component); }); diff --git a/src/plugins/index.ts b/src/plugins/index.ts index 9c93f902..ee8f0f20 100644 --- a/src/plugins/index.ts +++ b/src/plugins/index.ts @@ -1,4 +1,5 @@ +import setupSmoothScroll from './smooth-scroll'; import setupElementPlus from './element-plus'; import NProgress from './nprogress'; -export { setupElementPlus, NProgress }; +export { setupSmoothScroll, setupElementPlus, NProgress }; diff --git a/src/plugins/smooth-scroll.ts b/src/plugins/smooth-scroll.ts new file mode 100644 index 00000000..e31a515c --- /dev/null +++ b/src/plugins/smooth-scroll.ts @@ -0,0 +1,6 @@ +import smoothscroll from 'smoothscroll-polyfill'; + +/** 平滑滚动插件(兼容主流浏览器) */ +export default function setupSmoothScroll() { + smoothscroll.polyfill(); +} diff --git a/src/service/api/auth.ts b/src/service/api/auth.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/service/index.ts b/src/service/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/service/middleware/auth.ts b/src/service/middleware/auth.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/service/request/config.ts b/src/service/request/config.ts new file mode 100644 index 00000000..d07df7c3 --- /dev/null +++ b/src/service/request/config.ts @@ -0,0 +1,8 @@ +/** 请求超时时间 */ +export const REQUEST_TIMEOUT = 15 * 1000; + +/** 请求头的content-type类型 */ +export enum ContentType { + json = 'application/json', + formUrlEncoded = 'application/x-www-form-urlencoded' +} diff --git a/src/service/request/errorHandler.ts b/src/service/request/errorHandler.ts new file mode 100644 index 00000000..b16d8dba --- /dev/null +++ b/src/service/request/errorHandler.ts @@ -0,0 +1,77 @@ +import { ElMessage } from 'element-plus'; + +const ERROR_STATUS = { + 400: '400: 请求出现语法错误', + 401: '401: 用户未授权~', + 403: '403: 服务器拒绝访问~', + 404: '404: 请求的资源不存在~', + 405: '405: 请求方法未允许~', + 408: '408: 网络请求超时~', + 500: '500: 服务器内部错误~', + 501: '501: 服务器未实现请求功能~', + 502: '502: 错误网关~', + 503: '503: 服务不可用~', + 504: '504: 网关超时~', + 505: '505: http版本不支持该请求~' +}; +type ErrorStatus = 400 | 401 | 403 | 404 | 405 | 408 | 500 | 501 | 502 | 503 | 504 | 505; + +/** 错误信息显示时间 */ +export const errorDuration = 3000 / 1000; + +/** + * 网络请求错误状态处理 + * @param error - 错误 + */ +export function errorHandler(error: any) { + if (error.response) { + const status = error.response.status as ErrorStatus; + ElMessage.error(ERROR_STATUS[status]); + return; + } + if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) { + ElMessage.error('网络连接超时~'); + return; + } + if (!window.navigator.onLine || error.message === 'Network Error') { + ElMessage.error('网络不可用~'); + return; + } + ElMessage.error('未知错误~'); +} + +/** + * 连续的请求错误依此显示 + * @param duration - 上一次弹出错误消息到下一次的时间(ms) + */ +export function continuousErrorHandler(duration: number) { + let errorStacks: string[] = []; + function pushError(id: string) { + errorStacks.push(id); + } + function removeError(id: string) { + errorStacks = errorStacks.filter(item => item !== id); + } + function handleError(id: string, callback: Function) { + callback(); + setTimeout(() => { + removeError(id); + }, duration); + } + + function handleContinuousError(callback: Function) { + const id = Date.now().toString(36); + const { length } = errorStacks; + if (length > 0) { + pushError(id); + setTimeout(() => { + handleError(id, callback); + }, duration * length); + } else { + pushError(id); + handleError(id, callback); + } + } + + return handleContinuousError; +} diff --git a/src/service/request/index.ts b/src/service/request/index.ts new file mode 100644 index 00000000..b39782e0 --- /dev/null +++ b/src/service/request/index.ts @@ -0,0 +1,11 @@ +import { createRequest } from './request'; +import { REQUEST_TIMEOUT, ContentType } from './config'; + +export { handleResponse } from './request'; +export { ContentType }; + +// emoss-admin +export const adminRequest = createRequest({ + baseURL: import.meta.env.VITE_HTTP_URL_EMOSS_ADMIN as string, + timeout: REQUEST_TIMEOUT +}); diff --git a/src/service/request/instance.ts b/src/service/request/instance.ts new file mode 100644 index 00000000..ea16c0bf --- /dev/null +++ b/src/service/request/instance.ts @@ -0,0 +1,77 @@ +import axios from 'axios'; +import qs from 'qs'; +import { getStorageToken } from '@/utils'; +import { ElMessage } from 'element-plus'; +import type { AxiosRequestConfig, AxiosInstance } from 'axios'; +import { errorHandler } from './errorHandler'; + +export interface StatusConfig { + /** 表明请求状态的属性key */ + statusKey: string; + /** 请求信息的属性key */ + msgKey: string; + /** 成功状态的状态码 */ + successCode: string | number; +} + +/** + * 封装axios请求类 + * @author Soybean(曹理斌) 2021-03-13 + * @class CustomAxiosInstance + */ +export default class CustomAxiosInstance { + instance: AxiosInstance; + + constructor( + axiosConfig: AxiosRequestConfig, + statusConfig: StatusConfig = { + statusKey: 'code', + msgKey: 'message', + successCode: 200 + } + ) { + this.instance = axios.create(axiosConfig); + this.setInterceptor(statusConfig); + } + + /** 设置请求拦截器 */ + setInterceptor(statusConfig: StatusConfig) { + this.instance.interceptors.request.use( + config => { + const handleConfig = { ...config }; + // content-type为application/x-www-form-urlencoded类型的data参数需要序列化 + if (handleConfig.headers['Content-Type'] === 'application/x-www-form-urlencoded') { + handleConfig.data = qs.stringify(handleConfig.data); + } + // 设置token + handleConfig.headers.Authorization = getStorageToken(); + + return handleConfig; + }, + error => { + errorHandler(error); + return Promise.reject(error); + } + ); + this.instance.interceptors.response.use( + response => { + const { status, data } = response; + const { statusKey, msgKey, successCode } = statusConfig; + if (status === 200 || status < 300 || status === 304) { + if (data[statusKey] === successCode) { + return Promise.resolve(data.data); + } + ElMessage.error(data[msgKey]); + return Promise.reject(data[msgKey]); + } + const error = { response }; + errorHandler(error); + return Promise.reject(error); + }, + error => { + errorHandler(error); + return Promise.reject(error); + } + ); + } +} diff --git a/src/service/request/request.ts b/src/service/request/request.ts new file mode 100644 index 00000000..6adc8044 --- /dev/null +++ b/src/service/request/request.ts @@ -0,0 +1,66 @@ +import type { AxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios'; +import CustomAxiosInstance from './instance'; +import type { StatusConfig } from './instance'; + +type ResponseSuccess = [null, any]; +type ResponseFail = [any, null]; + +/** + * 封装各个请求方法及结果处理的类 + * @author Soybean(曹理斌) 2021-03-15 + * @class Request + */ +class Request { + instance: AxiosInstance; + + constructor(instance: AxiosInstance) { + this.instance = instance; + } + + static successHandler(response: AxiosResponse) { + const result: ResponseSuccess = [null, response]; + return result; + } + + static failHandler(error: any) { + const result: ResponseFail = [error, null]; + return result; + } + + get(url: string, config?: AxiosRequestConfig) { + return this.instance.get(url, config).then(Request.successHandler).catch(Request.failHandler); + } + + post(url: string, data?: any, config?: AxiosRequestConfig) { + return this.instance.post(url, data, config).then(Request.successHandler).catch(Request.failHandler); + } + + put(url: string, data?: any, config?: AxiosRequestConfig) { + return this.instance.put(url, data, config).then(Request.successHandler).catch(Request.failHandler); + } + + delete(url: string, config?: AxiosRequestConfig) { + return this.instance.delete(url, config).then(Request.successHandler).catch(Request.failHandler); + } +} + +export function createRequest(axiosConfig: AxiosRequestConfig, statusConfig?: StatusConfig) { + const customInstance = new CustomAxiosInstance(axiosConfig, statusConfig); + const request = new Request(customInstance.instance); + return request; +} + +/** + * 对请求的结果数据进行格式化的处理 + * @param handleFunc - 处理函数 + * @param errors - 接收多个请求的错误 + * @param datas - 接收多个请求的数据 + */ +export function handleResponse(handleFunc: Function, errors: any[], datas: any[]) { + let handleData = null; + if (errors.every(error => !error)) { + handleData = handleFunc(...datas); + } + const resError = errors.find(error => Boolean(error)); + return [resError, handleData] as [any, T]; +} diff --git a/src/store/helpers/index.ts b/src/store/helpers/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/store/index.ts b/src/store/index.ts new file mode 100644 index 00000000..a9493436 --- /dev/null +++ b/src/store/index.ts @@ -0,0 +1,10 @@ +import type { App } from 'vue'; +import { createAuthStore, useAuthStore } from './modules/auth'; +import { createAsideStore, useAsideStore } from './modules/aside'; + +export function createStore(app: App) { + createAuthStore(app); + createAsideStore(app); +} + +export { useAuthStore, useAsideStore }; diff --git a/src/store/modules/aside/index.ts b/src/store/modules/aside/index.ts new file mode 100644 index 00000000..ca59e680 --- /dev/null +++ b/src/store/modules/aside/index.ts @@ -0,0 +1,33 @@ +import { inject, reactive } from 'vue'; +import type { App, InjectionKey } from 'vue'; + +interface AsideState { + collapse: boolean; +} + +interface AsideStore { + /** aside状态 */ + asideState: AsideState; + /** 切换collapse */ + toggle: () => void; +} + +const injectKey: InjectionKey = Symbol('aside-store'); + +export function createAsideStore(app: App) { + const state = reactive({ + collapse: false + }); + function toggle() { + state.collapse = !state.collapse; + } + const provideData: AsideStore = { + asideState: state, + toggle + }; + app.provide(injectKey, provideData); +} + +export function useAsideStore() { + return inject(injectKey)!; +} diff --git a/src/store/modules/auth/index.ts b/src/store/modules/auth/index.ts new file mode 100644 index 00000000..96801eb9 --- /dev/null +++ b/src/store/modules/auth/index.ts @@ -0,0 +1,44 @@ +import { computed, inject, reactive } from 'vue'; +import type { ComputedRef, App, InjectionKey } from 'vue'; + +interface UserInfo { + userId: string; + userName: string; + userPhone: string; +} + +interface AuthState { + token: string; + userInfo: UserInfo; +} + +interface AuthStore { + /** auth状态 */ + authState: AuthState; + /** 是否登录 */ + isLogin: ComputedRef; +} + +const injectKey: InjectionKey = Symbol('auth-store'); + +export function createAuthStore(app: App) { + const state = reactive({ + token: '', + userInfo: { + userId: '', + userName: '', + userPhone: '' + } + }); + const isLogin = computed(() => Boolean(state.token)); + + const provideData: AuthStore = { + authState: state, + isLogin + }; + app.provide(injectKey, provideData); +} + +export function useAuthStore() { + return inject(injectKey)!; +} diff --git a/src/styles/css/global.css b/src/styles/css/global.css new file mode 100644 index 00000000..ab2d754d --- /dev/null +++ b/src/styles/css/global.css @@ -0,0 +1,23 @@ +@import './scrollbar.css'; + +html, +body, +#app { + width: 100%; + height: 100%; +} +html { + min-width: 1320px; + min-height: 650px; + font-size: 16px; +} +#app { + font-family: Avenir, Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-size: 14px; + color: rgba(0, 0, 0, 0.65); +} +svg { + display: inline-block; +} diff --git a/src/styles/css/scrollbar.css b/src/styles/css/scrollbar.css new file mode 100644 index 00000000..f036c5d1 --- /dev/null +++ b/src/styles/css/scrollbar.css @@ -0,0 +1,20 @@ +/*---滚动条默认显示样式--*/ +::-webkit-scrollbar-thumb { + background-color: #d9d9d9; + border-radius: 8px; +} +/*---鼠标点击滚动条显示样式--*/ +::-webkit-scrollbar-thumb:hover { + background-color: #d9d9d9; + border-radius: 4px; +} +/*---滚动条大小--*/ +::-webkit-scrollbar { + width: 8px; + height: 10px; +} +/*---滚动框背景样式--*/ +::-webkit-scrollbar-track-piece { + background-color: rgba(0, 0, 0, 0); + border-radius: 0; +} diff --git a/src/styles/scss/global.scss b/src/styles/scss/global.scss new file mode 100644 index 00000000..52a0b637 --- /dev/null +++ b/src/styles/scss/global.scss @@ -0,0 +1,18 @@ +@mixin scrollbar($size:8px, $color:#d9d9d9) { + &::-webkit-scrollbar-thumb { + background-color: $color; + border-radius: $size; + } + &::-webkit-scrollbar-thumb:hover { + background-color: $color; + border-radius: $size; + } + &::-webkit-scrollbar { + width: $size; + height: $size; + } + &::-webkit-scrollbar-track-piece { + background-color: rgba(0, 0, 0, 0); + border-radius: 0; + } +} diff --git a/src/utils/auth/index.ts b/src/utils/auth/index.ts new file mode 100644 index 00000000..dcc1adc6 --- /dev/null +++ b/src/utils/auth/index.ts @@ -0,0 +1,5 @@ +export function getStorageToken() { + return ''; +} + +export function getStorageUserInfo() {} diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 00000000..e6661dbb --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1 @@ +export { getStorageToken, getStorageUserInfo } from './auth'; diff --git a/tailwind.config.js b/tailwind.config.js index 1dbf0109..0031f9d7 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,5 +1,21 @@ module.exports = { darkMode: 'class', // or 'media' + shortcuts: { + 'center-layout': 'w-1280px mx-auto', + 'flex-center': 'flex justify-center items-center', + 'flex-x-center': 'flex justify-center', + 'flex-y-center': 'flex items-center', + 'inline-flex-center': 'inline-flex justify-center items-center', + 'inline-flex-x-center': 'inline-flex justify-center', + 'inline-flex-y-center': 'inline-flex items-center', + 'absolute-center': 'absolute left-0 top-0 flex justify-center items-center w-full h-full', + 'absolute-lt': 'absolute left-0 top-0', + 'absolute-lb': 'absolute left-0 bottom-0', + 'absolute-rt': 'absolute right-0 top-0', + 'absolute-rb': 'absolute right-0 bottom-0', + 'fixed-center': 'fixed left-0 top-0 flex justify-center items-center w-full h-full', + 'ellipsis-text': 'whitespace-nowrap overflow-hidden overflow-ellipsis' + }, theme: {}, variants: {}, plugins: [] diff --git a/vite.config.ts b/vite.config.ts index 6938aa25..903f7ac6 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -5,5 +5,12 @@ import { alias, viteEnv, plugins } from './build'; export default defineConfig({ base: viteEnv.VITE_BASE_URL, resolve: { alias }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@import "./src/styles/scss/global.scss";` + } + } + }, plugins: [vue(), ...plugins] }); diff --git a/yarn.lock b/yarn.lock index 56b716e8..3efa82b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -434,6 +434,16 @@ resolved "https://registry.nlark.com/@types/parse-json/download/@types/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1621242198435&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fparse-json%2Fdownload%2F%40types%2Fparse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= +"@types/qs@^6.9.6": + version "6.9.6" + resolved "https://registry.nlark.com/@types/qs/download/@types/qs-6.9.6.tgz?cache=0&sync_timestamp=1621242292262&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fqs%2Fdownload%2F%40types%2Fqs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" + integrity sha1-35w8izGiR+wxXmmWVmvjFx30s7E= + +"@types/smoothscroll-polyfill@^0.3.1": + version "0.3.1" + resolved "https://registry.nlark.com/@types/smoothscroll-polyfill/download/@types/smoothscroll-polyfill-0.3.1.tgz#77fb3a6e116bdab4a5959122e3b8e201224dcd49" + integrity sha1-d/s6bhFr2rSllZEi47jiASJNzUk= + "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": version "2.0.3" resolved "https://registry.nlark.com/@types/unist/download/@types/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" @@ -850,6 +860,13 @@ at-least-node@^1.0.0: resolved "https://registry.npm.taobao.org/at-least-node/download/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha1-YCzUtG6EStTv/JKoARo8RuAjjcI= +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.nlark.com/axios/download/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg= + dependencies: + follow-redirects "^1.10.0" + babel-walk@3.0.0-canary-5: version "3.0.0-canary-5" resolved "https://registry.npm.taobao.org/babel-walk/download/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" @@ -1408,7 +1425,7 @@ dargs@^7.0.0: resolved "https://registry.nlark.com/dargs/download/dargs-7.0.0.tgz?cache=0&sync_timestamp=1620054548989&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdargs%2Fdownload%2Fdargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha1-BAFcQd4Ly2nshAUPPZvgyvjW1cw= -dayjs@1.x: +dayjs@1.x, dayjs@^1.10.5: version "1.10.5" resolved "https://registry.nlark.com/dayjs/download/dayjs-1.10.5.tgz?cache=0&sync_timestamp=1622012259636&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdayjs%2Fdownload%2Fdayjs-1.10.5.tgz#5600df4548fc2453b3f163ebb2abbe965ccfb986" integrity sha1-VgDfRUj8JFOz8WPrsqu+llzPuYY= @@ -2113,6 +2130,11 @@ fn-name@^2.0.1: resolved "https://registry.npm.taobao.org/fn-name/download/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= +follow-redirects@^1.10.0: + version "1.14.1" + resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.1.tgz?cache=0&sync_timestamp=1620555300559&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + integrity sha1-2RFN7Qoc/dM04WTmZirQK/2R/0M= + format@^0.2.0: version "0.2.2" resolved "https://registry.npm.taobao.org/format/download/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" @@ -3420,7 +3442,7 @@ object-assign@^4.1.1: resolved "https://registry.nlark.com/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1618847043548&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-inspect@^1.10.3: +object-inspect@^1.10.3, object-inspect@^1.9.0: version "1.10.3" resolved "https://registry.nlark.com/object-inspect/download/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" integrity sha1-wqp9LQn1DJk3VwT3oK3yTFeC02k= @@ -3958,6 +3980,13 @@ q@^1.5.1: resolved "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz?cache=0&sync_timestamp=1599054212574&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fq%2Fdownload%2Fq-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= +qs@^6.10.1: + version "6.10.1" + resolved "https://registry.nlark.com/qs/download/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha1-STFIL6jWR6Wqt5nFJx0hM7mB+2o= + dependencies: + side-channel "^1.0.4" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.nlark.com/queue-microtask/download/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -4312,6 +4341,15 @@ shellsubstitute@^1.1.0: resolved "https://registry.npm.taobao.org/shellsubstitute/download/shellsubstitute-1.2.0.tgz#e4f702a50c518b0f6fe98451890d705af29b6b70" integrity sha1-5PcCpQxRiw9v6YRRiQ1wWvKba3A= +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.nlark.com/side-channel/download/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha1-785cj9wQTudRslxY1CkAEfpeos8= + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -4340,6 +4378,11 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +smoothscroll-polyfill@^0.4.4: + version "0.4.4" + resolved "https://registry.npm.taobao.org/smoothscroll-polyfill/download/smoothscroll-polyfill-0.4.4.tgz#3a259131dc6930e6ca80003e1cb03b603b69abf8" + integrity sha1-OiWRMdxpMObKgAA+HLA7YDtpq/g= + snake-case@^3.0.4: version "3.0.4" resolved "https://registry.nlark.com/snake-case/download/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"