Commit 6df5750d authored by guxukai's avatar guxukai

chore: 添加pinia

parent 54947173
...@@ -20,5 +20,7 @@ module.exports = { ...@@ -20,5 +20,7 @@ module.exports = {
'@typescript-eslint/no-var-requires': 'off', '@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-explicit-any': 'off'
}, },
} }
module.exports = isProduction => { module.exports = isProduction => {
return { return {
name: 'account', name: 'account',
title: 'account 管理后台', projectName: 'account 管理后台',
publicPath: '/account', publicUrl: '/account',
serverHost: 'localhost', serverHost: 'localhost',
serverPort: 8020, serverPort: 8020,
pwaEnable: true,
apiHost: isProduction ? '' : '',
qsArrayFormat: 'none', qsArrayFormat: 'none',
mockPrefix: '/account-mock', mockPrefix: '/account-mock',
apiPrefix: '/api',
timeout: 30000,
} }
} }
...@@ -10,16 +10,17 @@ ...@@ -10,16 +10,17 @@
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^0.2.4", "@element-plus/icons-vue": "^0.2.4",
"@vuelidate/core": "^2.0.0-alpha.32",
"@vuelidate/validators": "^2.0.0-alpha.25",
"axios": "^0.24.0", "axios": "^0.24.0",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"element-plus": "^1.2.0-beta.6", "element-plus": "^1.2.0-beta.6",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"miragejs": "^0.1.43", "miragejs": "^0.1.43",
"pinia": "^2.0.0-rc.10",
"tailwindcss": "^3.0.2", "tailwindcss": "^3.0.2",
"vue": "^3.2.26", "vue": "^3.2.26",
"vue-router": "^4.0.0-0", "vue-router": "^4.0.0-0",
"vuelidate": "^0.7.7",
"vuex": "^4.0.0-0",
"vuex-persistedstate": "^4.1.0" "vuex-persistedstate": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
...@@ -30,7 +31,6 @@ ...@@ -30,7 +31,6 @@
"@vue/cli-plugin-eslint": "^5.0.0-alpha.5", "@vue/cli-plugin-eslint": "^5.0.0-alpha.5",
"@vue/cli-plugin-router": "^5.0.0-alpha.5", "@vue/cli-plugin-router": "^5.0.0-alpha.5",
"@vue/cli-plugin-typescript": "^5.0.0-alpha.5", "@vue/cli-plugin-typescript": "^5.0.0-alpha.5",
"@vue/cli-plugin-vuex": "^5.0.0-alpha.5",
"@vue/cli-service": "^5.0.0-alpha.5", "@vue/cli-service": "^5.0.0-alpha.5",
"@vue/compiler-sfc": "^3.2.26", "@vue/compiler-sfc": "^3.2.26",
"@vue/eslint-config-prettier": "^6.0.0", "@vue/eslint-config-prettier": "^6.0.0",
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
"sass": "^1.45.0", "sass": "^1.45.0",
"sass-loader": "^12.4.0", "sass-loader": "^12.4.0",
"typescript": "~4.1.5", "typescript": "~4.1.5",
"typescript-json-serializer": "^3.4.4",
"unplugin-vue-components": "^0.17.9" "unplugin-vue-components": "^0.17.9"
}, },
"engines": { "engines": {
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
"children": [ "children": [
{ {
"index": true, "index": true,
"path": "", "path": "list",
"title": "列表", "title": "列表",
"name": "admin-list", "name": "admin-list",
"showInAsideMenu": true, "showInAsideMenu": true,
......
import { createApp } from 'vue' import { createApp } from 'vue'
import App from './App.vue' import App from './App.vue'
import router from './router' import { router } from '@shared/router'
import store from './store' import { store } from '@shared/store'
import { createMockServer } from './mock' import { createMockServer } from '@shared/mock'
import 'tailwindcss/tailwind.css' import 'tailwindcss/tailwind.css'
import ElementPlus from 'element-plus' import ElementPlus from 'element-plus'
import Components from '@shared/components/global/index' import Components from '@shared/components/global/index'
import '@shared/assets/sass/index.scss' import '@shared/assets/sass/index.scss'
createMockServer() createMockServer()
createApp(App).use(store).use(router).use(ElementPlus).use(Components).mount('#app') const app = createApp(App)
app.use(store).use(router).use(ElementPlus).use(Components).mount('#app')
import { createStore } from 'vuex'
import createPersistedState from 'vuex-persistedstate'
const path = require('path-browserify')
const requireModules = require.context('./modules', true, /index\.(ts|js)$/iu)
const modules = {}
requireModules.keys().forEach(filePath => {
const modular = requireModules(filePath)
let name = path.resolve(filePath, '..')
name = name.split('/').pop()
modules[name] = {
namespaced: true,
...modular.default,
}
})
const sessionState = createPersistedState({
paths: ['layout.breadcrumb'],
})
const store = createStore({
modules: {
...modules,
},
plugins: [sessionState],
})
export default store
export default {
state: {
breadcrumb: [
{
name: 'Home',
level: 1,
path: '/',
},
],
},
getters: {},
mutations: {
changeBreadcrumb: function (state, payload) {
state.breadcrumb = payload
},
},
actions: {},
}
export class HttpResponse<T = any> {
code: string
message: string
data: T
status: string
constructor(options: Partial<HttpResponse<T>>) {
Object.assign(this, options)
}
}
import axios, { AxiosRequestConfig, Canceler } from 'axios'
import qs from 'qs'
import { HttpResponse } from '@shared/http/HttpResponse'
import { MessageUtils } from '@shared/utils/MessageUtils'
export const pendingRequest = new Map<string, Canceler>()
export function generateReqKey(config: AxiosRequestConfig) {
const { method, url, params, data } = config
return [method, url, qs.stringify(params), qs.stringify(data)].join('&')
}
export function addPendingRequest(config: AxiosRequestConfig) {
const requestKey = generateReqKey(config)
config.cancelToken =
config.cancelToken ||
new axios.CancelToken(cancel => {
if (!pendingRequest.has(requestKey)) {
pendingRequest.set(requestKey, cancel)
}
})
}
export function removePendingRequest(config: AxiosRequestConfig) {
const requestKey = generateReqKey(config)
if (pendingRequest.has(requestKey)) {
const cancelToken = pendingRequest.get(requestKey)
cancelToken && cancelToken(requestKey)
pendingRequest.delete(requestKey)
}
}
function createInstance(options: AxiosRequestConfig) {
const instance = axios.create(options)
// 请求拦截
instance.interceptors.request.use(
(config: AxiosRequestConfig) => {
removePendingRequest(config)
addPendingRequest(config)
return config
},
error => {
return Promise.reject(error)
},
)
//响应拦截
instance.interceptors.response.use(
response => {
removePendingRequest(response.config)
if (typeof response.data === 'string') {
return response.data
}
const data: HttpResponse = response.data
const message: string | undefined = '未知错误'
switch (data.code) {
default:
break
}
return Promise.reject(data)
},
error => {
if (axios.isCancel(error)) {
return new Promise(() => {})
}
if (!options.silent) {
let message: string | undefined = '未知错误'
if (
error.code === 'ECONNABORTED' ||
error.message.indexOf('timeout') !== -1 ||
error.message === 'Network Error'
) {
message = '网络异常'
MessageUtils.warning(message)
return Promise.reject(error)
}
switch (error.response?.status) {
case 403:
message = '拒绝访问(403)'
MessageUtils.warning(message)
break
case 404:
message = '资源不存在(404)'
MessageUtils.warning(message)
break
case 408:
message = '请求超时(404)'
MessageUtils.warning(message)
break
case 500:
message = '服务器错误(500)'
MessageUtils.warning(message)
break
case 501:
message = '服务未实现(501)'
MessageUtils.warning(message)
break
case 502:
message = '网络错误(502)'
MessageUtils.warning(message)
break
case 503:
message = '服务不可用(503)'
MessageUtils.warning(message)
break
case 504:
message = '网络超时(504)'
MessageUtils.warning(message)
break
case 505:
message = 'HTTP版本不受支持(505)'
MessageUtils.warning(message)
break
default:
MessageUtils.warning(message)
break
}
}
return Promise.reject(error)
},
)
return instance
}
const api = createInstance({
baseURL: process.env.API_PREFIX,
timeout: Number(process.env.TIMEOUT),
withCredentials: true,
})
const silentApi = createInstance({
baseURL: process.env.API_PREFIX,
timeout: Number(process.env.TIMEOUT),
withCredentials: true,
silent: true,
})
const mockApi = createInstance({
baseURL: process.env.MOCK_PREFIX,
timeout: Number(process.env.TIMEOUT),
})
export { axios, api, mockApi }
...@@ -106,7 +106,7 @@ ...@@ -106,7 +106,7 @@
> >
<el-breadcrumb :separator-icon="ArrowRight" class="pl-1"> <el-breadcrumb :separator-icon="ArrowRight" class="pl-1">
<el-breadcrumb-item <el-breadcrumb-item
v-for="(item, index) in store.state['layout'].breadcrumb" v-for="(item, index) in layoutStore.$state.breadcrumbList"
:key="index" :key="index"
:to="{ path: item.path }" :to="{ path: item.path }"
> >
...@@ -123,55 +123,54 @@ ...@@ -123,55 +123,54 @@
</div> </div>
</template> </template>
<script setup> <script setup>
import { useStore } from 'vuex'
import { onBeforeRouteUpdate } from 'vue-router' import { onBeforeRouteUpdate } from 'vue-router'
import { ref, toRaw, onMounted, getCurrentInstance } from 'vue' import { ref, toRaw, onMounted, getCurrentInstance } from 'vue'
import { ArrowRight } from '@element-plus/icons-vue' import { ArrowRight } from '@element-plus/icons-vue'
import AsideMenuList from '@shared/layouts/components/aside-menu-list/index.vue' import AsideMenuList from '@shared/layouts/components/aside-menu-list/index.vue'
import { layoutStore } from '@shared/store/modules/layout'
const PROJECT_NAME = process.env.PROJECT_NAME const PROJECT_NAME = process.env.PROJECT_NAME
let store = useStore()
let { proxy } = getCurrentInstance() let { proxy } = getCurrentInstance()
let currentActiveRoute = ref('/') let currentActiveRoute = ref('/')
onMounted(() => { onMounted(() => {
setTheme(false) setTheme(false)
currentActiveRoute.value = proxy.$route.path currentActiveRoute.value = proxy.$route.path
}), })
/** /**
* @description 面包屑导航和侧边导航 * @description 面包屑导航和侧边导航
* 根据路由元信息中的level属性判断该路由的层级 * 根据路由元信息中的level属性判断该路由的层级
* 你可以在route标签中,设置路由的level和name,参考index.vue * 你可以在route标签中,设置路由的level和name,参考index.vue
*/ */
onBeforeRouteUpdate((to, from) => { onBeforeRouteUpdate((to, from) => {
if (!to.meta?.level) { if (!to.meta?.level) {
return return
} }
let bread = toRaw(store.state['layout'].breadcrumb) let bread = toRaw(layoutStore.$state.breadcrumbList)
// 1. 已有层级,则替换path和name 2. 已添加的层级有小于新增的层级,则过滤 3. 若新增层级大于所有已有层级,则push // 1. 已有层级,则替换path和name 2. 已添加的层级有小于新增的层级,则过滤 3. 若新增层级大于所有已有层级,则push
let result = bread let result = bread
.map(val => { .map(val => {
if (to.meta.level === val.level) { if (to.meta.level === val.level) {
val.name = to.meta.name val.name = to.meta.name
val.path = to.path val.path = to.path
} }
return val return val
}) })
.sort((a, b) => { .sort((a, b) => {
return a.level - b.level return a.level - b.level
}) })
.filter(val => { .filter(val => {
return val.level <= to.meta.level return val.level <= to.meta.level
}) })
if (result[result.length - 1].level < to.meta.level) { if (result[result.length - 1].level < to.meta.level) {
result.push({ result.push({
name: to.meta.name, name: to.meta.name,
path: to.path, path: to.path,
level: to.meta.level, level: to.meta.level,
}) })
} }
store.commit('layout/changeBreadcrumb', result) layoutStore.changeBreadcrumb(result)
}) })
// 折叠aside // 折叠aside
let isCollapse = ref(false) let isCollapse = ref(false)
......
<template>
<router-view />
</template>
...@@ -334,7 +334,7 @@ export const createMockServer = () => { ...@@ -334,7 +334,7 @@ export const createMockServer = () => {
routes() { routes() {
this.passthrough(`${process.env.PUBLIC_URL}**`) this.passthrough(`${process.env.PUBLIC_URL}**`)
this.namespace = '/33-mock' this.namespace = process.env.MOCK_PREFIX ?? ''
this.logging = false this.logging = false
this.post('/auth/logout', (_, request) => { this.post('/auth/logout', (_, request) => {
return new Response(200) return new Response(200)
......
import { JsonProperty, Serializable } from 'typescript-json-serializer'
import { Model } from '@shared/models/Model'
@Serializable()
export class AuthLoginPostReq extends Model<AuthLoginPostReq> {
@JsonProperty() username: string
@JsonProperty() password: string
@JsonProperty() verCode: string
constructor(payload: Partial<AuthLoginPostReq>) {
super(payload)
}
}
@Serializable()
export class AuthLogin extends Model<AuthLogin> {
@JsonProperty() id: number
@JsonProperty() identity: string
@JsonProperty() token: string
@JsonProperty() username: string
constructor(payload: Partial<AuthLogin>) {
super(payload)
}
static post(payload: AuthLoginPostReq) {}
}
import { Serializable } from 'typescript-json-serializer'
@Serializable()
export class Model<T> {
constructor(payload: Partial<T>) {
Object.assign(this, payload)
}
}
<template>
<div id="sign-page"></div>
</template>
<script lang="ts"></script>
import RoutesJson from '../json/routes.json'
import { formatRoute } from './utils' import { formatRoute } from './utils'
//引入配置文件router.json //引入配置文件router.json
const routerMenu = RoutesJson.children const routerMenu = require(`@${process.env.NAME}/json/routes.json`).children
//初始化 //初始化
export const CONFIG_ROUTES = formatRoute(routerMenu) export const CONFIG_ROUTES = formatRoute(routerMenu)
export const STATIC_ROUTES = [ export const STATIC_ROUTES = [
{ {
path: '/login',
name: 'login',
component: () => import('@shared/pages/login/index.vue'),
},
{
path: '/401', path: '/401',
name: '401', name: '401',
component: () => import('@shared/pages/401/index.vue'), component: () => import('@shared/pages/401/index.vue'),
......
...@@ -12,9 +12,8 @@ const routes = [ ...@@ -12,9 +12,8 @@ const routes = [
...STATIC_ROUTES, ...STATIC_ROUTES,
] ]
const router = createRouter({ export const router = createRouter({
history: createWebHistory(process.env.PUBLIC_URL), history: createWebHistory(process.env.PUBLIC_URL),
routes, routes,
}) })
zookeeper(router) zookeeper(router)
export default router
...@@ -6,7 +6,9 @@ export const formatRoute = arr => { ...@@ -6,7 +6,9 @@ export const formatRoute = arr => {
children: formatRoute(_.children ?? []), children: formatRoute(_.children ?? []),
} }
if (_.element) { if (_.element) {
res.component = () => import(`../views/config/${_.element}`) || null res.component = () => import(`@${process.env.NAME}/views/config/${_.element}`) || null
} else {
res.component = () => import(`@shared/layouts/pure-layout.vue`)
} }
return res return res
}) })
......
import { createPinia } from 'pinia'
const store = createPinia()
export { store }
import { defineStore } from 'pinia'
import { store } from '@shared/store'
import { BreadcrumbType, LayoutType } from '@shared/types/layout'
export const layoutStore = defineStore('layout', {
state: (): LayoutType => ({
breadcrumbList: [
{
name: 'Home',
level: 1,
path: '/',
},
],
}),
actions: {
changeBreadcrumb: (payload: BreadcrumbType[]) => {
debugger
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
this.breadcrumbList = payload
},
},
})(store)
export type LayoutType = {
breadcrumbList: BreadcrumbType[]
}
export type BreadcrumbType = {
name: string
level: number
path: string
}
import { ElMessage } from 'element-plus'
export const MessageUtils = {
warning: message => {
ElMessage({
message: message,
type: 'warning',
})
},
}
import axios from 'axios'
declare module 'axios' {
export interface AxiosRequestConfig {
silent?: boolean
}
}
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
"sourceMap": true, "sourceMap": true,
"noImplicitAny": false, "noImplicitAny": false,
"resolveJsonModule": true, "resolveJsonModule": true,
"experimentalDecorators": true,
"strictPropertyInitialization": false,
"baseUrl": ".", "baseUrl": ".",
"types": [ "types": [
"webpack-env", "webpack-env",
......
...@@ -7,7 +7,7 @@ const productionGzipExtensions = ['js', 'css'] ...@@ -7,7 +7,7 @@ const productionGzipExtensions = ['js', 'css']
const UnpluginVueComponentsWebpack = require('unplugin-vue-components/webpack') const UnpluginVueComponentsWebpack = require('unplugin-vue-components/webpack')
const { ElementPlusResolver } = require('unplugin-vue-components/resolvers') const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')
const { EnvironmentPlugin, ProvidePlugin } = require('webpack') const { EnvironmentPlugin, ProvidePlugin } = require('webpack')
const { snakeCase, toUpper } = require('lodash')
console.log('sign:::', sign) console.log('sign:::', sign)
const isProduction = process.env.NODE_ENV !== 'production' const isProduction = process.env.NODE_ENV !== 'production'
const appConfig = require(`./config/${sign}.config.js`)(isProduction) const appConfig = require(`./config/${sign}.config.js`)(isProduction)
...@@ -16,6 +16,7 @@ module.exports = { ...@@ -16,6 +16,7 @@ module.exports = {
filenameHashing: true, filenameHashing: true,
outputDir: 'dist-' + sign, outputDir: 'dist-' + sign,
publicPath: `/${sign}/`, publicPath: `/${sign}/`,
productionSourceMap: !isProduction,
pages: { pages: {
[sign]: { [sign]: {
entry: `src/pages/${sign}/main.ts`, entry: `src/pages/${sign}/main.ts`,
...@@ -42,6 +43,7 @@ module.exports = { ...@@ -42,6 +43,7 @@ module.exports = {
} }
}, },
configureWebpack: { configureWebpack: {
devtool: !isProduction ? 'source-map' : undefined,
plugins: [ plugins: [
UnpluginVueComponentsWebpack({ UnpluginVueComponentsWebpack({
resolvers: [ resolvers: [
...@@ -50,12 +52,13 @@ module.exports = { ...@@ -50,12 +52,13 @@ module.exports = {
}), }),
], ],
}), }),
new EnvironmentPlugin({ /* publicPath => PUBLIC_PATH*/
PUBLIC_URL: appConfig.publicPath, new EnvironmentPlugin(
QS_ARRAY_FORMAT: appConfig.qsArrayFormat, Object.keys(appConfig).reduce((pre, cur) => {
MOCK_PREFIX: appConfig.mockPrefix, pre[toUpper(snakeCase(cur))] = appConfig[cur]
PROJECT_NAME: appConfig.title, return pre
}), }, {}),
),
new ProvidePlugin({ new ProvidePlugin({
process: require.resolve('process/browser'), process: require.resolve('process/browser'),
}), }),
......
...@@ -1631,7 +1631,7 @@ ...@@ -1631,7 +1631,7 @@
webpack "^5.54.0" webpack "^5.54.0"
yorkie "^2.0.0" yorkie "^2.0.0"
"@vue/cli-plugin-vuex@^5.0.0-alpha.5", "@vue/cli-plugin-vuex@^5.0.0-rc.1": "@vue/cli-plugin-vuex@^5.0.0-rc.1":
version "5.0.0-rc.1" version "5.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.0-rc.1.tgz#2f4f04ae831ebca688acea5531658d1236baed23" resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.0-rc.1.tgz#2f4f04ae831ebca688acea5531658d1236baed23"
integrity sha512-ShfPIvuD+AFUtUcTw5okLUnBy8o4NrC0ICPpD7z+KG4gbfWzZMmT2TAkjqO9pp21cI+bYzigsBZ/FoXiU5+h7Q== integrity sha512-ShfPIvuD+AFUtUcTw5okLUnBy8o4NrC0ICPpD7z+KG4gbfWzZMmT2TAkjqO9pp21cI+bYzigsBZ/FoXiU5+h7Q==
...@@ -1791,7 +1791,7 @@ ...@@ -1791,7 +1791,7 @@
optionalDependencies: optionalDependencies:
prettier "^1.18.2 || ^2.0.0" prettier "^1.18.2 || ^2.0.0"
"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.0.0-beta.18": "@vue/devtools-api@^6.0.0-beta.18":
version "6.0.0-beta.19" version "6.0.0-beta.19"
resolved "https://registry.npmmirror.com/@vue/devtools-api/download/@vue/devtools-api-6.0.0-beta.19.tgz#f8e88059daa424515992426a0c7ea5cde07e99bf" resolved "https://registry.npmmirror.com/@vue/devtools-api/download/@vue/devtools-api-6.0.0-beta.19.tgz#f8e88059daa424515992426a0c7ea5cde07e99bf"
integrity sha1-+OiAWdqkJFFZkkJqDH6lzeB+mb8= integrity sha1-+OiAWdqkJFFZkkJqDH6lzeB+mb8=
...@@ -1874,6 +1874,20 @@ ...@@ -1874,6 +1874,20 @@
resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz#b6b40a7625429d2bd7c2281ddba601ed05dc7f1a" resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz#b6b40a7625429d2bd7c2281ddba601ed05dc7f1a"
integrity sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA== integrity sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==
"@vuelidate/core@^2.0.0-alpha.32":
version "2.0.0-alpha.32"
resolved "https://registry.yarnpkg.com/@vuelidate/core/-/core-2.0.0-alpha.32.tgz#1ad6f4e6480a3fa061d5c0fe3d26f7c7b23e55dd"
integrity sha512-bB5YJzorKZyRm+R4d3svGChwpHjPw+ECOLwlKfvKJIuyC+y25Wf7NGbr/9odZggoGTi/rKPUYXhpbp5RXb4ssw==
dependencies:
vue-demi "^0.12.0"
"@vuelidate/validators@^2.0.0-alpha.25":
version "2.0.0-alpha.25"
resolved "https://registry.yarnpkg.com/@vuelidate/validators/-/validators-2.0.0-alpha.25.tgz#c58aede525772f1ae120b308de08cd5196ba0cb3"
integrity sha512-+Cz9itIlPbloXE8hWmTWCS/EXYdgZ0y/mH76v9Ou0ILirVUjErTtgEx/jCfkijbFJAttBTdwJmxaWakwQuA0qA==
dependencies:
vue-demi "^0.12.0"
"@vueuse/core@^7.0.0": "@vueuse/core@^7.0.0":
version "7.3.0" version "7.3.0"
resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-7.3.0.tgz#fe24ff698069cb7dcc835a8fe2eeb29b22b2a702" resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-7.3.0.tgz#fe24ff698069cb7dcc835a8fe2eeb29b22b2a702"
...@@ -5527,6 +5541,14 @@ pify@^2.3.0: ...@@ -5527,6 +5541,14 @@ pify@^2.3.0:
resolved "https://registry.nlark.com/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" resolved "https://registry.nlark.com/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
pinia@^2.0.0-rc.10:
version "2.0.0-rc.10"
resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.0.0-rc.10.tgz#81e823931897a4cf5c53c113d0c0e63b7bba9973"
integrity sha512-WY0KQoHxSBylhGc6aBQKPFfAupYHWpI1QBQKJSyK9btwwMTVQpwCdePgPho+ZoEMl832jb7RwfI5TN1srV5VEA==
dependencies:
"@vue/devtools-api" "^6.0.0-beta.18"
vue-demi "*"
pkg-dir@^4.1.0: pkg-dir@^4.1.0:
version "4.2.0" version "4.2.0"
resolved "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1633498133295&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" resolved "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1633498133295&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
...@@ -6282,6 +6304,11 @@ readdirp@~3.6.0: ...@@ -6282,6 +6304,11 @@ readdirp@~3.6.0:
dependencies: dependencies:
picomatch "^2.2.1" picomatch "^2.2.1"
reflect-metadata@^0.1.13:
version "0.1.13"
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
regenerate-unicode-properties@^9.0.0: regenerate-unicode-properties@^9.0.0:
version "9.0.0" version "9.0.0"
resolved "https://registry.nlark.com/regenerate-unicode-properties/download/regenerate-unicode-properties-9.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerate-unicode-properties%2Fdownload%2Fregenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" resolved "https://registry.nlark.com/regenerate-unicode-properties/download/regenerate-unicode-properties-9.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerate-unicode-properties%2Fdownload%2Fregenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326"
...@@ -7180,7 +7207,7 @@ tslib@^1.8.1, tslib@^1.9.0: ...@@ -7180,7 +7207,7 @@ tslib@^1.8.1, tslib@^1.9.0:
resolved "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" resolved "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha1-zy04vcNKE0vK8QkcQfZhni9nLQA= integrity sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=
tslib@^2.0.3: tslib@^2.0.3, tslib@^2.3.0:
version "2.3.1" version "2.3.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
...@@ -7227,6 +7254,14 @@ type-is@~1.6.17, type-is@~1.6.18: ...@@ -7227,6 +7254,14 @@ type-is@~1.6.17, type-is@~1.6.18:
media-typer "0.3.0" media-typer "0.3.0"
mime-types "~2.1.24" mime-types "~2.1.24"
typescript-json-serializer@^3.4.4:
version "3.4.4"
resolved "https://registry.yarnpkg.com/typescript-json-serializer/-/typescript-json-serializer-3.4.4.tgz#3cbd259b328ce099119a9106a179b0ba9d83e47c"
integrity sha512-SrVdMe1k9QMoVUIvTUGCOwSl65NJIQwg7ekXUpQkbdnWbGL11rBzHBlj+YW+E4upRPnM5aHGccc9y88EhTlM+Q==
dependencies:
reflect-metadata "^0.1.13"
tslib "^2.3.0"
typescript@~4.1.5: typescript@~4.1.5:
version "4.1.6" version "4.1.6"
resolved "https://registry.npmmirror.com/typescript/download/typescript-4.1.6.tgz#1becd85d77567c3c741172339e93ce2e69932138" resolved "https://registry.npmmirror.com/typescript/download/typescript-4.1.6.tgz#1becd85d77567c3c741172339e93ce2e69932138"
...@@ -7341,7 +7376,7 @@ vary@~1.1.2: ...@@ -7341,7 +7376,7 @@ vary@~1.1.2:
resolved "https://registry.nlark.com/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" resolved "https://registry.nlark.com/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
vue-demi@*: vue-demi@*, vue-demi@^0.12.0:
version "0.12.1" version "0.12.1"
resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.1.tgz#f7e18efbecffd11ab069d1472d7a06e319b4174c" resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.1.tgz#f7e18efbecffd11ab069d1472d7a06e319b4174c"
integrity sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw== integrity sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw==
...@@ -7404,11 +7439,6 @@ vue@^3.2.26: ...@@ -7404,11 +7439,6 @@ vue@^3.2.26:
"@vue/server-renderer" "3.2.26" "@vue/server-renderer" "3.2.26"
"@vue/shared" "3.2.26" "@vue/shared" "3.2.26"
vuelidate@^0.7.7:
version "0.7.7"
resolved "https://registry.yarnpkg.com/vuelidate/-/vuelidate-0.7.7.tgz#5df3930a63ddecf56fde7bdacea9dbaf0c9bf899"
integrity sha512-pT/U2lDI67wkIqI4tum7cMSIfGcAMfB+Phtqh2ttdXURwvHRBJEAQ0tVbUsW9Upg83Q5QH59bnCoXI7A9JDGnA==
vuex-persistedstate@^4.1.0: vuex-persistedstate@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.yarnpkg.com/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz#127165f85f5b4534fb3170a5d3a8be9811bd2a53" resolved "https://registry.yarnpkg.com/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz#127165f85f5b4534fb3170a5d3a8be9811bd2a53"
...@@ -7417,13 +7447,6 @@ vuex-persistedstate@^4.1.0: ...@@ -7417,13 +7447,6 @@ vuex-persistedstate@^4.1.0:
deepmerge "^4.2.2" deepmerge "^4.2.2"
shvl "^2.0.3" shvl "^2.0.3"
vuex@^4.0.0-0:
version "4.0.2"
resolved "https://registry.nlark.com/vuex/download/vuex-4.0.2.tgz#f896dbd5bf2a0e963f00c67e9b610de749ccacc9"
integrity sha1-+Jbb1b8qDpY/AMZ+m2EN50nMrMk=
dependencies:
"@vue/devtools-api" "^6.0.0-beta.11"
watchpack@^2.3.1: watchpack@^2.3.1:
version "2.3.1" version "2.3.1"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment