feat 添加自定按钮

This commit is contained in:
LittleBoy 2022-12-08 17:17:18 +08:00
parent 4935b9c24c
commit d01a491c22
14 changed files with 436 additions and 123 deletions

View File

@ -20,9 +20,10 @@
"@types/node": "^18.11.10", "@types/node": "^18.11.10",
"@vitejs/plugin-vue": "^3.2.0", "@vitejs/plugin-vue": "^3.2.0",
"@vitejs/plugin-vue-jsx": "^2.1.1", "@vitejs/plugin-vue-jsx": "^2.1.1",
"typescript": "^4.9.3",
"vite": "^3.2.4",
"less": "^4.1.3", "less": "^4.1.3",
"typescript": "^4.9.3",
"unplugin-vue-define-options": "^1.0.0",
"vite": "^3.2.4",
"vue-tsc": "^1.0.11" "vue-tsc": "^1.0.11"
} }
} }

View File

@ -0,0 +1,94 @@
<template>
<button :disabled="disabled || loading" class="btn" :class="{
'btn-primary':btnType == 'primary',
'btn-default':btnType == 'default',
'btn-text':btnType == 'text',
'btn-link':btnType == 'link',
}">
<span v-if="loading" class="btn-icon">
<Loading v-if="loading" class="btn-icon-loading"/>
</span>
<slot></slot>
</button>
</template>
<script setup lang="ts">
import {defineOptions} from "unplugin-vue-define-options/macros";
import {computed} from "vue";
import Loading from "../icon/Loading.vue";
defineOptions({
name: 'PButton'
})
type ButtonProps = {
type: 'primary' | 'default' | 'text' | 'link'
/**
* 是否正在加载中
*/
loading: boolean
disabled: boolean
}
const props = defineProps<ButtonProps>()
const btnType = computed(() => props.type || 'primary')
</script>
<style lang="less">
@keyframes anim-loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.btn {
cursor: pointer;
padding: 5px 15px;
line-height: 20px;
border-radius: var(--border-radius-middle);
position: relative;
display: inline-block;
border: none;
outline: none;
&.btn-primary {
background-color: var(--primary-color);
color: white;
&:hover{
background-color: var(--primary-color-hover);
}
&:active{
background-color: var(--primary-color-active);
}
&[disabled]{
background-color: var(--primary-3);
}
}
&.btn-default {
}
&.btn-text {
}
&.btn-link {
background: none;
text-decoration: underline;
color: var(--primary-color)
}
}
.btn-icon {
margin-right: 5px;
.btn-icon-loading {
height: 16px !important;
width: 16px !important;
vertical-align: middle;
animation: anim-loading 1s infinite linear;
//transition: transform ;
color: white;
}
}
</style>

View File

@ -0,0 +1,18 @@
<template>
<svg :style="sizeStyle" class="icon-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024">
<path fill="currentColor"
d="M270.4 214.4C336 160 420 128 512 128c212 0 384 172 384 384h64c0-247.2-200.8-448-448-448-107.2 0-205.6 37.6-282.4 100l40.8 50.4z"
p-id="2703"></path>
</svg>
</template>
<script lang="ts">
import {defineComponent} from "vue";
import iconComponent from "./iconComponent";
export default defineComponent({
name: "Loading",
props: iconComponent.props,
setup: iconComponent.setup
})
</script>

View File

@ -24,144 +24,145 @@ import Eye from "../icon/Eye.vue";
import EyeClose from "../icon/EyeClose.vue"; import EyeClose from "../icon/EyeClose.vue";
interface PInputEvents { interface PInputEvents {
'update:modelValue': (value: any) => void 'update:modelValue': (value: any) => void
} }
type PInputProps = { type PInputProps = {
placeholder?: string placeholder?: string
modelValue?: any modelValue?: any
type?: 'text' | 'password' | 'textarea' type?: 'text' | 'password' | 'textarea'
} }
const props = defineProps<PInputProps>() const props = defineProps<PInputProps>()
const emit = defineEmits<PInputEvents>() const emit = defineEmits<PInputEvents>()
const slots = useSlots() const slots = useSlots()
const state = reactive({ const state = reactive({
focus: false, focus: false,
hover: false, hover: false,
passwordVisible: false passwordVisible: false
}) })
const inputType = computed(() => { const inputType = computed(() => {
const type = props.type || 'text'; const type = props.type || 'text';
if (type === 'password' && state.passwordVisible) return 'text'; if (type === 'password' && state.passwordVisible) return 'text';
return type; return type;
}) })
const value = computed({ const value = computed({
get() { get() {
return props.modelValue return props.modelValue
}, },
set(value) { set(value) {
emit('update:modelValue', value) emit('update:modelValue', value)
} }
}) })
</script> </script>
<style lang="less"> <style lang="less">
.p-input-box-focus { .p-input-box-focus {
border-color: #2a7dc9; border-color: #2a7dc9;
box-shadow: 0 0 0 2px #0960bd33; box-shadow: 0 0 0 2px #0960bd33;
outline: 0; outline: 0;
} }
.p-input { .p-input {
box-sizing: border-box; box-sizing: border-box;
margin: 0; margin: 0;
list-style: none; list-style: none;
position: relative; position: relative;
display: inline-block; display: inline-block;
width: 100%; width: 100%;
min-width: 0; min-width: 0;
padding: 4px 11px; padding: 4px 11px;
color: #000000d9; color: #000000d9;
font-size: 14px; font-size: 14px;
line-height: 1.5715; line-height: 1.5715;
background-color: #fff; background-color: #fff;
background-image: none; background-image: none;
border: 1px solid #d9d9d9; border: 1px solid #d9d9d9;
border-radius: 2px; border-radius: 2px;
transition: all .3s; transition: all .3s;
&::-moz-placeholder { &::-moz-placeholder {
opacity: 1 opacity: 1
} }
&::placeholder { &::placeholder {
color: #bfbfbf; color: #bfbfbf;
-webkit-user-select: none; -webkit-user-select: none;
-moz-user-select: none; -moz-user-select: none;
user-select: none user-select: none
} }
&:placeholder-shown { &:placeholder-shown {
text-overflow: ellipsis text-overflow: ellipsis
} }
&:hover { &:hover {
border-color: #2a7dc9; border-color: #2a7dc9;
border-right-width: 1px !important border-right-width: 1px !important
} }
.p-input-rtl .p-input:hover { .p-input-rtl .p-input:hover {
border-right-width: 0; border-right-width: 0;
border-left-width: 1px !important border-left-width: 1px !important
} }
&:focus, .p-input-focused { &:focus, .p-input-focused {
border-right-width: 1px !important; border-right-width: 1px !important;
} }
.p-input-disabled { .p-input-disabled {
color: #00000040; color: #00000040;
background-color: #f5f5f5; background-color: #f5f5f5;
border-color: #d9d9d9; border-color: #d9d9d9;
box-shadow: none; box-shadow: none;
cursor: not-allowed; cursor: not-allowed;
opacity: 1 opacity: 1
} }
} }
.p-input-wrapper { .p-input-wrapper {
display: inline-block; display: inline-block;
width: 100%;
} }
.p-input-wrapper-group { .p-input-wrapper-group {
display: inline-flex; display: inline-flex;
position: relative; position: relative;
max-width: 100%; max-width: 100%;
min-width: 0; min-width: 0;
padding: 4px 6px; padding: 4px 6px;
color: #000000d9; color: #000000d9;
font-size: 14px; font-size: 14px;
line-height: 1.5715; line-height: 1.5715;
background-color: #fff; background-color: #fff;
background-image: none; background-image: none;
border: 1px solid #d9d9d9; border: 1px solid #d9d9d9;
border-radius: var(--border-radius); border-radius: var(--border-radius);
transition: all .3s; transition: all .3s;
&:hover { &:hover {
border-color: #2a7dc9; border-color: #2a7dc9;
border-right-width: 1px !important border-right-width: 1px !important
} }
.p-input { .p-input {
padding: 0; padding: 0;
border: none; border: none;
outline: none; outline: none;
margin: 0 6px; margin: 0 6px;
&:focus { &:focus {
box-shadow: none; box-shadow: none;
}
} }
}
} }
.p-input-prefix, .p-input-suffix { .p-input-prefix, .p-input-suffix {
display: flex; display: flex;
flex: none; flex: none;
align-items: center; align-items: center;
} }
</style> </style>

View File

@ -1,7 +1,9 @@
<template> <template>
<div class="modal" v-if="modalVisible"> <div class="modal" v-if="modalVisible">
<div class="modal-mask"></div> <div class="modal-mask"></div>
<div class="modal-content"> <div class="modal-content" :style="{
width: width+(/(px|%)/.test(width)?'':'px')
}">
<div class="modal-close" @click="modalVisible = false">关闭</div> <div class="modal-close" @click="modalVisible = false">关闭</div>
<slot/> <slot/>
</div> </div>
@ -12,8 +14,12 @@
import {computed} from "vue"; import {computed} from "vue";
export default { export default {
name: "modal", name: "Modal",
props: { props: {
width: {
type: String,
default: '500px'
},
modelValue: { modelValue: {
type: Boolean, type: Boolean,
require: true require: true

View File

@ -1,10 +1,10 @@
<template> <template>
<div class="upload-wrapper"> <div class="upload-wrapper">
<input type="file" :accept="accept" @change="onFileSelectChange"/> <input type="file" :id="fileUploaderId" :accept="accept" @change="onFileSelectChange" class="file-handler"/>
<span> <label :for="fileUploaderId">
<!-- 上传触发元素的插槽 --> <!-- 上传触发元素的插槽 -->
<slot/> <slot/>
</span> </label>
</div> </div>
</template> </template>
@ -45,6 +45,7 @@ type FileUploadResultModel = {
} }
const props = defineProps<PropsType>() const props = defineProps<PropsType>()
const emits = defineEmits<EmitsType>() const emits = defineEmits<EmitsType>()
const fileUploaderId = Math.random().toString(16).substring(3)
async function onFileSelectChange(e: InputEvent) { async function onFileSelectChange(e: InputEvent) {
//@ts-ignore //@ts-ignore
@ -58,5 +59,13 @@ async function onFileSelectChange(e: InputEvent) {
</script> </script>
<style scoped> <style scoped>
.upload-wrapper{
position: relative;
}
.file-handler{
opacity: 0;
width: 1px;
height: 1px;
position: absolute;
}
</style> </style>

View File

@ -52,7 +52,6 @@ export const useUserStore = defineStore('user-store', () => {
const data = await http.get<AdminLoginModel>('/admin/user/info') const data = await http.get<AdminLoginModel>('/admin/user/info')
localStorage.removeItem(TOKEN_KEY) localStorage.removeItem(TOKEN_KEY)
userinfo.value = null userinfo.value = null
} }
return {userinfo, login, logout, updateInfo, token} return {userinfo, login, logout, updateInfo, token}

View File

@ -63,7 +63,7 @@ p{
margin: 10px 0; margin: 10px 0;
} }
.login-wrapper { .login-wrapper {
width: 500px; width: 300px;
margin: 50px auto; margin: 50px auto;
} }
</style> </style>

View File

@ -10,8 +10,8 @@
<option v-for="(text,value) in CategoryEnum" :key="value" :value="value">{{ text }}</option> <option v-for="(text,value) in CategoryEnum" :key="value" :value="value">{{ text }}</option>
</select> </select>
</span> </span>
<button @click="onReset">重置</button> <PButton type="default" @click="onReset">重置</PButton>
<button @click="onSearch">搜索</button> <PButton :disabled="true" :loading="searching" @click="onSearch">搜索</PButton>
</div> </div>
<div class="toolbar-extra"> <div class="toolbar-extra">
<button @click="onEditData({id:0})">新增</button> <button @click="onEditData({id:0})">新增</button>
@ -90,7 +90,6 @@
<img :src="editData.cover" alt="" style="width: 120px;height: 120px;"> <img :src="editData.cover" alt="" style="width: 120px;height: 120px;">
</div> </div>
<div v-else>选择商品图</div> <div v-else>选择商品图</div>
</Uploader> </Uploader>
</div> </div>
<div> <div>
@ -138,6 +137,7 @@
<button @click="saveGoodsData">提交</button> <button @click="saveGoodsData">提交</button>
</div> </div>
</Modal> </Modal>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -147,6 +147,8 @@ import message from "../../components/message";
import Modal from "../../components/modal/modal.vue"; import Modal from "../../components/modal/modal.vue";
import Pager from "../../components/pager/Pager.vue"; import Pager from "../../components/pager/Pager.vue";
import Uploader from "../../components/uploader/uploader.vue"; import Uploader from "../../components/uploader/uploader.vue";
import PButton from "../../components/button/Index.vue";
// //
//(1: 2: 3: 4:) //(1: 2: 3: 4:)
const CategoryEnum = { const CategoryEnum = {
@ -179,6 +181,7 @@ const editData = reactive<GoodsModel>({
id: 0 id: 0
}); });
const totalCount = ref(0) const totalCount = ref(0)
const searching = ref(false)
function onPageChange(currentPage: number) { function onPageChange(currentPage: number) {
param.page = currentPage; param.page = currentPage;
@ -198,16 +201,17 @@ function onSearch() {
} }
function loadDataList() { function loadDataList() {
searching.value = true
http.post<DataListModel<GoodsModel>>('/admin/goods/list', param).then(res => { http.post<DataListModel<GoodsModel>>('/admin/goods/list', param).then(res => {
goodsList.value = res.items goodsList.value = res.items
totalCount.value = res.total totalCount.value = res.total
}) }).finally(() => searching.value = false)
} }
function fillDataToObject(obj: any, data: any, keys: string[]) { function fillDataToObject(obj: any, data: any, keys: string[]) {
keys.forEach(key => { keys.forEach(key => {
if (typeof (data[key]) === 'undefined') { if (typeof (data[key]) === 'undefined') {
if(typeof(obj[key]) != 'undefined'){ if (typeof (obj[key]) != 'undefined') {
// null // null
obj[key] = null; obj[key] = null;
} }

View File

@ -6,6 +6,7 @@
<span> <span>
{{ userStore.userinfo?.account }} {{ userStore.userinfo?.account }}
</span> </span>
<span @click="logout">退出</span>
</div> </div>
</div> </div>
<div class="main"> <div class="main">
@ -28,9 +29,15 @@
</template> </template>
<script setup> <script setup>
import {useUserStore} from "../../service/store"; import {useUserStore} from "../../service/store";
import {useRouter} from "vue-router";
const userStore = useUserStore(); const userStore = useUserStore();
const router = useRouter()
function logout() {
userStore.logout()
router.replace('/login')
}
</script> </script>
<style lang="less"> <style lang="less">
.app-admin-layout { .app-admin-layout {
@ -65,26 +72,31 @@ const userStore = useUserStore();
top: 0; top: 0;
bottom: 0; bottom: 0;
} }
.title{
.title {
height: var(--header-height); height: var(--header-height);
background-color: #333; background-color: #333;
line-height: var(--header-height); line-height: var(--header-height);
text-align: center; text-align: center;
font-size: var(--font-size-large); font-size: var(--font-size-large);
} }
.menu-list{
.menu-list {
margin-top: 20px; margin-top: 20px;
a{
a {
display: block; display: block;
text-decoration: none; text-decoration: none;
color:white; color: white;
padding:10px 20px; padding: 10px 20px;
&.active-menu{
&.active-menu {
background-color: #666666; background-color: #666666;
color: white; color: white;
} }
} }
} }
.content-wrapper { .content-wrapper {
margin: 20px; margin: 20px;
background-color: #fff; background-color: #fff;

View File

@ -12,6 +12,9 @@
"**/*.js" "**/*.js"
], ],
"compilerOptions": { "compilerOptions": {
"jsx": "preserve" "jsx": "preserve",
"types": [
"unplugin-vue-define-options/macros-global"
]
} }
} }

View File

@ -1,5 +1,6 @@
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import vueJsxPlugin from "@vitejs/plugin-vue-jsx"; import vueJsxPlugin from "@vitejs/plugin-vue-jsx";
import DefineOptions from 'unplugin-vue-define-options/vite'
export default { export default {
hmr: true, hmr: true,
@ -10,6 +11,7 @@ export default {
// 必须配置vue插件 // 必须配置vue插件
plugins: [ plugins: [
vue(), vue(),
DefineOptions(),
vueJsxPlugin(), // 如果需要使用jsx或者tsx vueJsxPlugin(), // 如果需要使用jsx或者tsx
] ]
} }

View File

@ -200,7 +200,7 @@
chalk "^2.0.0" chalk "^2.0.0"
js-tokens "^4.0.0" js-tokens "^4.0.0"
"@babel/parser@^7.16.4", "@babel/parser@^7.18.10", "@babel/parser@^7.20.5": "@babel/parser@^7.16.4", "@babel/parser@^7.18.10", "@babel/parser@^7.20.0", "@babel/parser@^7.20.5":
version "7.20.5" version "7.20.5"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8" resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8"
integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA== integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==
@ -253,7 +253,7 @@
debug "^4.1.0" debug "^4.1.0"
globals "^11.1.0" globals "^11.1.0"
"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5": "@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5":
version "7.20.5" version "7.20.5"
resolved "https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84" resolved "https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84"
integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg== integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==
@ -312,6 +312,14 @@
"@jridgewell/resolve-uri" "3.1.0" "@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14" "@jridgewell/sourcemap-codec" "1.4.14"
"@rollup/pluginutils@^4.2.1":
version "4.2.1"
resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d"
integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==
dependencies:
estree-walker "^2.0.1"
picomatch "^2.2.2"
"@types/node@^18.11.10": "@types/node@^18.11.10":
version "18.11.10" version "18.11.10"
resolved "https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz#4c64759f3c2343b7e6c4b9caf761c7a3a05cee34" resolved "https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz#4c64759f3c2343b7e6c4b9caf761c7a3a05cee34"
@ -376,6 +384,15 @@
"@volar/typescript" "1.0.11" "@volar/typescript" "1.0.11"
"@volar/vue-language-core" "1.0.11" "@volar/vue-language-core" "1.0.11"
"@vue-macros/common@~0.13.4":
version "0.13.4"
resolved "https://registry.npmmirror.com/@vue-macros/common/-/common-0.13.4.tgz#f1a12c63aad18ad0020101bf386f5e9c95d444ba"
integrity sha512-mQooO33XcY4kQyKBrbGfdIPPsYhpcfmH75SQnXx2vNsNLSNvhLuDaIIV0fhMJ0HV5Z02V9Ka1gx7v1g5bk9Q0A==
dependencies:
"@babel/types" "^7.20.2"
"@vue/compiler-sfc" "^3.2.45"
magic-string "^0.26.7"
"@vue/babel-helper-vue-transform-on@^1.0.2": "@vue/babel-helper-vue-transform-on@^1.0.2":
version "1.0.2" version "1.0.2"
resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz#9b9c691cd06fc855221a2475c3cc831d774bc7dc" resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz#9b9c691cd06fc855221a2475c3cc831d774bc7dc"
@ -491,6 +508,11 @@
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz#a3fffa7489eafff38d984e23d0236e230c818bc2" resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz#a3fffa7489eafff38d984e23d0236e230c818bc2"
integrity sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg== integrity sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==
acorn@^8.8.1:
version "8.8.1"
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73"
integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
ansi-styles@^3.2.1: ansi-styles@^3.2.1:
version "3.2.1" version "3.2.1"
resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@ -498,11 +520,32 @@ ansi-styles@^3.2.1:
dependencies: dependencies:
color-convert "^1.9.0" color-convert "^1.9.0"
anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
dependencies:
normalize-path "^3.0.0"
picomatch "^2.0.4"
ast-walker-scope@^0.3.0:
version "0.3.0"
resolved "https://registry.npmmirror.com/ast-walker-scope/-/ast-walker-scope-0.3.0.tgz#955b00af19946e76d39ba86d3046b9bc2b7312d9"
integrity sha512-bsOBv3jB+1kGaxwPHhkLiagS+75KfzEqtkNWvATgMGtXM6kJZG3PlG4fYQFMiHeLpoAkwc6G61w07+hEXx39aA==
dependencies:
"@babel/parser" "^7.20.0"
"@babel/types" "^7.20.0"
balanced-match@^1.0.0: balanced-match@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
brace-expansion@^2.0.1: brace-expansion@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
@ -510,6 +553,13 @@ brace-expansion@^2.0.1:
dependencies: dependencies:
balanced-match "^1.0.0" balanced-match "^1.0.0"
braces@~3.0.2:
version "3.0.2"
resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
fill-range "^7.0.1"
browserslist@^4.21.3: browserslist@^4.21.3:
version "4.21.4" version "4.21.4"
resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987"
@ -539,6 +589,21 @@ chalk@^2.0.0:
escape-string-regexp "^1.0.5" escape-string-regexp "^1.0.5"
supports-color "^5.3.0" supports-color "^5.3.0"
chokidar@^3.5.3:
version "3.5.3"
resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
color-convert@^1.9.0: color-convert@^1.9.0:
version "1.9.3" version "1.9.3"
resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@ -742,11 +807,18 @@ escape-string-regexp@^1.0.5:
resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
estree-walker@^2.0.2: estree-walker@^2.0.1, estree-walker@^2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
dependencies:
to-regex-range "^5.0.1"
fsevents@~2.3.2: fsevents@~2.3.2:
version "2.3.2" version "2.3.2"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
@ -762,6 +834,13 @@ gensync@^1.0.0-beta.2:
resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
globals@^11.1.0: globals@^11.1.0:
version "11.12.0" version "11.12.0"
resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@ -806,6 +885,13 @@ image-size@~0.5.0:
resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
dependencies:
binary-extensions "^2.0.0"
is-core-module@^2.9.0: is-core-module@^2.9.0:
version "2.11.0" version "2.11.0"
resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
@ -813,6 +899,23 @@ is-core-module@^2.9.0:
dependencies: dependencies:
has "^1.0.3" has "^1.0.3"
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
is-glob@^4.0.1, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
is-extglob "^2.1.1"
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
is-what@^3.14.1: is-what@^3.14.1:
version "3.14.1" version "3.14.1"
resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
@ -857,6 +960,13 @@ magic-string@^0.25.7:
dependencies: dependencies:
sourcemap-codec "^1.4.8" sourcemap-codec "^1.4.8"
magic-string@^0.26.7:
version "0.26.7"
resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz#caf7daf61b34e9982f8228c4527474dac8981d6f"
integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==
dependencies:
sourcemap-codec "^1.4.8"
make-dir@^2.1.0: make-dir@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
@ -911,6 +1021,11 @@ node-releases@^2.0.6:
resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
parse-node-version@^1.0.1: parse-node-version@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
@ -926,6 +1041,11 @@ picocolors@^1.0.0:
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2:
version "2.3.1"
resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pify@^4.0.1: pify@^4.0.1:
version "4.0.1" version "4.0.1"
resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
@ -953,6 +1073,13 @@ prr@~1.0.1:
resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
dependencies:
picomatch "^2.2.1"
resolve@^1.22.1: resolve@^1.22.1:
version "1.22.1" version "1.22.1"
resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
@ -1026,6 +1153,13 @@ to-fast-properties@^2.0.0:
resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
dependencies:
is-number "^7.0.0"
tslib@^2.3.0: tslib@^2.3.0:
version "2.4.1" version "2.4.1"
resolved "https://registry.npmmirror.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" resolved "https://registry.npmmirror.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
@ -1036,6 +1170,26 @@ typescript@^4.9.3:
resolved "https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" resolved "https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db"
integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==
unplugin-vue-define-options@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/unplugin-vue-define-options/-/unplugin-vue-define-options-1.0.0.tgz#0aabe28748d5b445e68b6d44bc1170e3d01622a9"
integrity sha512-j90zM7NhZXBL5uMlHKzSOjvU98lFcIErdgAhj7bEEdvZarkwOkEUgMFsZDwStN9FEcMAiS/BTvcyGfItu3ry/g==
dependencies:
"@rollup/pluginutils" "^4.2.1"
"@vue-macros/common" "~0.13.4"
ast-walker-scope "^0.3.0"
unplugin "^1.0.0"
unplugin@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/unplugin/-/unplugin-1.0.0.tgz#8d12e0d116bf56313d42755094fc370e9c18da86"
integrity sha512-H5UnBUxfhTXBXGo2AwKsl0UaLSHzSNDZNehPQSgdhVfO/t+XAS1Yoj3vmLrrlBrS9ZwtH5tejbX/TCp5DcyCKg==
dependencies:
acorn "^8.8.1"
chokidar "^3.5.3"
webpack-sources "^3.2.3"
webpack-virtual-modules "^0.4.6"
update-browserslist-db@^1.0.9: update-browserslist-db@^1.0.9:
version "1.0.10" version "1.0.10"
resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3"
@ -1094,3 +1248,13 @@ vue@^3.2.45:
"@vue/runtime-dom" "3.2.45" "@vue/runtime-dom" "3.2.45"
"@vue/server-renderer" "3.2.45" "@vue/server-renderer" "3.2.45"
"@vue/shared" "3.2.45" "@vue/shared" "3.2.45"
webpack-sources@^3.2.3:
version "3.2.3"
resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
webpack-virtual-modules@^0.4.6:
version "0.4.6"
resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz#3e4008230731f1db078d9cb6f68baf8571182b45"
integrity sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==

View File

@ -43,7 +43,7 @@ public class UserAdminController {
@SneakyThrows @SneakyThrows
@PostMapping("login") @PostMapping("login")
public UserAdminInfo login(@Validated @RequestBody UserAdminInfo user) { public UserAdminInfo login(@Validated @RequestBody UserAdminInfo user) {
Thread.sleep(1); Thread.sleep(2000);
// 判断是否存在账号 // 判断是否存在账号
if (!userStoreMap.containsKey(user.getAccount())) { if (!userStoreMap.containsKey(user.getAccount())) {
throw BizException.create("账号不存在"); throw BizException.create("账号不存在");