feat 添加自定按钮
This commit is contained in:
parent
4935b9c24c
commit
d01a491c22
@ -20,9 +20,10 @@
|
||||
"@types/node": "^18.11.10",
|
||||
"@vitejs/plugin-vue": "^3.2.0",
|
||||
"@vitejs/plugin-vue-jsx": "^2.1.1",
|
||||
"typescript": "^4.9.3",
|
||||
"vite": "^3.2.4",
|
||||
"less": "^4.1.3",
|
||||
"typescript": "^4.9.3",
|
||||
"unplugin-vue-define-options": "^1.0.0",
|
||||
"vite": "^3.2.4",
|
||||
"vue-tsc": "^1.0.11"
|
||||
}
|
||||
}
|
||||
|
94
admin-fe/src/components/button/Index.vue
Normal file
94
admin-fe/src/components/button/Index.vue
Normal 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>
|
18
admin-fe/src/components/icon/Loading.vue
Normal file
18
admin-fe/src/components/icon/Loading.vue
Normal 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>
|
@ -24,144 +24,145 @@ import Eye from "../icon/Eye.vue";
|
||||
import EyeClose from "../icon/EyeClose.vue";
|
||||
|
||||
interface PInputEvents {
|
||||
'update:modelValue': (value: any) => void
|
||||
'update:modelValue': (value: any) => void
|
||||
}
|
||||
|
||||
type PInputProps = {
|
||||
placeholder?: string
|
||||
modelValue?: any
|
||||
type?: 'text' | 'password' | 'textarea'
|
||||
placeholder?: string
|
||||
modelValue?: any
|
||||
type?: 'text' | 'password' | 'textarea'
|
||||
}
|
||||
|
||||
const props = defineProps<PInputProps>()
|
||||
const emit = defineEmits<PInputEvents>()
|
||||
const slots = useSlots()
|
||||
const state = reactive({
|
||||
focus: false,
|
||||
hover: false,
|
||||
passwordVisible: false
|
||||
focus: false,
|
||||
hover: false,
|
||||
passwordVisible: false
|
||||
})
|
||||
const inputType = computed(() => {
|
||||
const type = props.type || 'text';
|
||||
if (type === 'password' && state.passwordVisible) return 'text';
|
||||
return type;
|
||||
const type = props.type || 'text';
|
||||
if (type === 'password' && state.passwordVisible) return 'text';
|
||||
return type;
|
||||
})
|
||||
const value = computed({
|
||||
get() {
|
||||
return props.modelValue
|
||||
},
|
||||
set(value) {
|
||||
emit('update:modelValue', value)
|
||||
}
|
||||
get() {
|
||||
return props.modelValue
|
||||
},
|
||||
set(value) {
|
||||
emit('update:modelValue', value)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.p-input-box-focus {
|
||||
|
||||
border-color: #2a7dc9;
|
||||
box-shadow: 0 0 0 2px #0960bd33;
|
||||
outline: 0;
|
||||
border-color: #2a7dc9;
|
||||
box-shadow: 0 0 0 2px #0960bd33;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.p-input {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
padding: 4px 11px;
|
||||
color: #000000d9;
|
||||
font-size: 14px;
|
||||
line-height: 1.5715;
|
||||
background-color: #fff;
|
||||
background-image: none;
|
||||
border: 1px solid #d9d9d9;
|
||||
border-radius: 2px;
|
||||
transition: all .3s;
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
padding: 4px 11px;
|
||||
color: #000000d9;
|
||||
font-size: 14px;
|
||||
line-height: 1.5715;
|
||||
background-color: #fff;
|
||||
background-image: none;
|
||||
border: 1px solid #d9d9d9;
|
||||
border-radius: 2px;
|
||||
transition: all .3s;
|
||||
|
||||
&::-moz-placeholder {
|
||||
opacity: 1
|
||||
}
|
||||
&::-moz-placeholder {
|
||||
opacity: 1
|
||||
}
|
||||
|
||||
&::placeholder {
|
||||
color: #bfbfbf;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none
|
||||
}
|
||||
&::placeholder {
|
||||
color: #bfbfbf;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none
|
||||
}
|
||||
|
||||
|
||||
&:placeholder-shown {
|
||||
text-overflow: ellipsis
|
||||
}
|
||||
&:placeholder-shown {
|
||||
text-overflow: ellipsis
|
||||
}
|
||||
|
||||
&:hover {
|
||||
border-color: #2a7dc9;
|
||||
border-right-width: 1px !important
|
||||
}
|
||||
&:hover {
|
||||
border-color: #2a7dc9;
|
||||
border-right-width: 1px !important
|
||||
}
|
||||
|
||||
.p-input-rtl .p-input:hover {
|
||||
border-right-width: 0;
|
||||
border-left-width: 1px !important
|
||||
}
|
||||
.p-input-rtl .p-input:hover {
|
||||
border-right-width: 0;
|
||||
border-left-width: 1px !important
|
||||
}
|
||||
|
||||
&:focus, .p-input-focused {
|
||||
border-right-width: 1px !important;
|
||||
}
|
||||
&:focus, .p-input-focused {
|
||||
border-right-width: 1px !important;
|
||||
}
|
||||
|
||||
.p-input-disabled {
|
||||
color: #00000040;
|
||||
background-color: #f5f5f5;
|
||||
border-color: #d9d9d9;
|
||||
box-shadow: none;
|
||||
cursor: not-allowed;
|
||||
opacity: 1
|
||||
}
|
||||
.p-input-disabled {
|
||||
color: #00000040;
|
||||
background-color: #f5f5f5;
|
||||
border-color: #d9d9d9;
|
||||
box-shadow: none;
|
||||
cursor: not-allowed;
|
||||
opacity: 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.p-input-wrapper {
|
||||
display: inline-block;
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.p-input-wrapper-group {
|
||||
display: inline-flex;
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
min-width: 0;
|
||||
padding: 4px 6px;
|
||||
color: #000000d9;
|
||||
font-size: 14px;
|
||||
line-height: 1.5715;
|
||||
background-color: #fff;
|
||||
background-image: none;
|
||||
border: 1px solid #d9d9d9;
|
||||
border-radius: var(--border-radius);
|
||||
transition: all .3s;
|
||||
display: inline-flex;
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
min-width: 0;
|
||||
padding: 4px 6px;
|
||||
color: #000000d9;
|
||||
font-size: 14px;
|
||||
line-height: 1.5715;
|
||||
background-color: #fff;
|
||||
background-image: none;
|
||||
border: 1px solid #d9d9d9;
|
||||
border-radius: var(--border-radius);
|
||||
transition: all .3s;
|
||||
|
||||
&:hover {
|
||||
border-color: #2a7dc9;
|
||||
border-right-width: 1px !important
|
||||
}
|
||||
|
||||
.p-input {
|
||||
padding: 0;
|
||||
border: none;
|
||||
outline: none;
|
||||
margin: 0 6px;
|
||||
|
||||
&:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
&:hover {
|
||||
border-color: #2a7dc9;
|
||||
border-right-width: 1px !important
|
||||
}
|
||||
|
||||
.p-input {
|
||||
padding: 0;
|
||||
border: none;
|
||||
outline: none;
|
||||
margin: 0 6px;
|
||||
|
||||
&:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.p-input-prefix, .p-input-suffix {
|
||||
display: flex;
|
||||
flex: none;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex: none;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
@ -1,7 +1,9 @@
|
||||
<template>
|
||||
<div class="modal" v-if="modalVisible">
|
||||
<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>
|
||||
<slot/>
|
||||
</div>
|
||||
@ -12,8 +14,12 @@
|
||||
import {computed} from "vue";
|
||||
|
||||
export default {
|
||||
name: "modal",
|
||||
name: "Modal",
|
||||
props: {
|
||||
width: {
|
||||
type: String,
|
||||
default: '500px'
|
||||
},
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
require: true
|
||||
|
@ -1,10 +1,10 @@
|
||||
<template>
|
||||
<div class="upload-wrapper">
|
||||
<input type="file" :accept="accept" @change="onFileSelectChange"/>
|
||||
<span>
|
||||
<input type="file" :id="fileUploaderId" :accept="accept" @change="onFileSelectChange" class="file-handler"/>
|
||||
<label :for="fileUploaderId">
|
||||
<!-- 上传触发元素的插槽 -->
|
||||
<slot/>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -45,6 +45,7 @@ type FileUploadResultModel = {
|
||||
}
|
||||
const props = defineProps<PropsType>()
|
||||
const emits = defineEmits<EmitsType>()
|
||||
const fileUploaderId = Math.random().toString(16).substring(3)
|
||||
|
||||
async function onFileSelectChange(e: InputEvent) {
|
||||
//@ts-ignore
|
||||
@ -58,5 +59,13 @@ async function onFileSelectChange(e: InputEvent) {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
.upload-wrapper{
|
||||
position: relative;
|
||||
}
|
||||
.file-handler{
|
||||
opacity: 0;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
position: absolute;
|
||||
}
|
||||
</style>
|
@ -52,7 +52,6 @@ export const useUserStore = defineStore('user-store', () => {
|
||||
const data = await http.get<AdminLoginModel>('/admin/user/info')
|
||||
localStorage.removeItem(TOKEN_KEY)
|
||||
userinfo.value = null
|
||||
|
||||
}
|
||||
|
||||
return {userinfo, login, logout, updateInfo, token}
|
||||
|
@ -63,7 +63,7 @@ p{
|
||||
margin: 10px 0;
|
||||
}
|
||||
.login-wrapper {
|
||||
width: 500px;
|
||||
width: 300px;
|
||||
margin: 50px auto;
|
||||
}
|
||||
</style>
|
@ -10,8 +10,8 @@
|
||||
<option v-for="(text,value) in CategoryEnum" :key="value" :value="value">{{ text }}</option>
|
||||
</select>
|
||||
</span>
|
||||
<button @click="onReset">重置</button>
|
||||
<button @click="onSearch">搜索</button>
|
||||
<PButton type="default" @click="onReset">重置</PButton>
|
||||
<PButton :disabled="true" :loading="searching" @click="onSearch">搜索</PButton>
|
||||
</div>
|
||||
<div class="toolbar-extra">
|
||||
<button @click="onEditData({id:0})">新增</button>
|
||||
@ -90,7 +90,6 @@
|
||||
<img :src="editData.cover" alt="" style="width: 120px;height: 120px;">
|
||||
</div>
|
||||
<div v-else>选择商品图</div>
|
||||
|
||||
</Uploader>
|
||||
</div>
|
||||
<div>
|
||||
@ -138,6 +137,7 @@
|
||||
<button @click="saveGoodsData">提交</button>
|
||||
</div>
|
||||
</Modal>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
@ -147,6 +147,8 @@ import message from "../../components/message";
|
||||
import Modal from "../../components/modal/modal.vue";
|
||||
import Pager from "../../components/pager/Pager.vue";
|
||||
import Uploader from "../../components/uploader/uploader.vue";
|
||||
import PButton from "../../components/button/Index.vue";
|
||||
|
||||
//
|
||||
//商品类别(1:普通 2:精选 3:秒杀 4:抽奖)
|
||||
const CategoryEnum = {
|
||||
@ -179,6 +181,7 @@ const editData = reactive<GoodsModel>({
|
||||
id: 0
|
||||
});
|
||||
const totalCount = ref(0)
|
||||
const searching = ref(false)
|
||||
|
||||
function onPageChange(currentPage: number) {
|
||||
param.page = currentPage;
|
||||
@ -198,16 +201,17 @@ function onSearch() {
|
||||
}
|
||||
|
||||
function loadDataList() {
|
||||
searching.value = true
|
||||
http.post<DataListModel<GoodsModel>>('/admin/goods/list', param).then(res => {
|
||||
goodsList.value = res.items
|
||||
totalCount.value = res.total
|
||||
})
|
||||
}).finally(() => searching.value = false)
|
||||
}
|
||||
|
||||
function fillDataToObject(obj: any, data: any, keys: string[]) {
|
||||
keys.forEach(key => {
|
||||
if (typeof (data[key]) === 'undefined') {
|
||||
if(typeof(obj[key]) != 'undefined'){
|
||||
if (typeof (obj[key]) != 'undefined') {
|
||||
// 如果数据的字段不存在则将在字段的值设置为null
|
||||
obj[key] = null;
|
||||
}
|
||||
|
@ -6,6 +6,7 @@
|
||||
<span>
|
||||
{{ userStore.userinfo?.account }}
|
||||
</span>
|
||||
<span @click="logout">退出</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main">
|
||||
@ -28,9 +29,15 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import {useUserStore} from "../../service/store";
|
||||
import {useRouter} from "vue-router";
|
||||
|
||||
const userStore = useUserStore();
|
||||
const router = useRouter()
|
||||
|
||||
function logout() {
|
||||
userStore.logout()
|
||||
router.replace('/login')
|
||||
}
|
||||
</script>
|
||||
<style lang="less">
|
||||
.app-admin-layout {
|
||||
@ -65,26 +72,31 @@ const userStore = useUserStore();
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
.title{
|
||||
|
||||
.title {
|
||||
height: var(--header-height);
|
||||
background-color: #333;
|
||||
line-height: var(--header-height);
|
||||
text-align: center;
|
||||
font-size: var(--font-size-large);
|
||||
}
|
||||
.menu-list{
|
||||
|
||||
.menu-list {
|
||||
margin-top: 20px;
|
||||
a{
|
||||
|
||||
a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color:white;
|
||||
padding:10px 20px;
|
||||
&.active-menu{
|
||||
color: white;
|
||||
padding: 10px 20px;
|
||||
|
||||
&.active-menu {
|
||||
background-color: #666666;
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.content-wrapper {
|
||||
margin: 20px;
|
||||
background-color: #fff;
|
||||
|
@ -12,6 +12,9 @@
|
||||
"**/*.js"
|
||||
],
|
||||
"compilerOptions": {
|
||||
"jsx": "preserve"
|
||||
"jsx": "preserve",
|
||||
"types": [
|
||||
"unplugin-vue-define-options/macros-global"
|
||||
]
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import vueJsxPlugin from "@vitejs/plugin-vue-jsx";
|
||||
import DefineOptions from 'unplugin-vue-define-options/vite'
|
||||
|
||||
export default {
|
||||
hmr: true,
|
||||
@ -10,6 +11,7 @@ export default {
|
||||
// 必须配置vue插件
|
||||
plugins: [
|
||||
vue(),
|
||||
DefineOptions(),
|
||||
vueJsxPlugin(), // 如果需要使用jsx或者tsx
|
||||
]
|
||||
}
|
@ -200,7 +200,7 @@
|
||||
chalk "^2.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"
|
||||
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8"
|
||||
integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==
|
||||
@ -253,7 +253,7 @@
|
||||
debug "^4.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"
|
||||
resolved "https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84"
|
||||
integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==
|
||||
@ -312,6 +312,14 @@
|
||||
"@jridgewell/resolve-uri" "3.1.0"
|
||||
"@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":
|
||||
version "18.11.10"
|
||||
resolved "https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz#4c64759f3c2343b7e6c4b9caf761c7a3a05cee34"
|
||||
@ -376,6 +384,15 @@
|
||||
"@volar/typescript" "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":
|
||||
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"
|
||||
@ -491,6 +508,11 @@
|
||||
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz#a3fffa7489eafff38d984e23d0236e230c818bc2"
|
||||
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:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||
@ -498,11 +520,32 @@ ansi-styles@^3.2.1:
|
||||
dependencies:
|
||||
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:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
||||
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:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
|
||||
@ -510,6 +553,13 @@ brace-expansion@^2.0.1:
|
||||
dependencies:
|
||||
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:
|
||||
version "4.21.4"
|
||||
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"
|
||||
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:
|
||||
version "1.9.3"
|
||||
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"
|
||||
integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
|
||||
|
||||
estree-walker@^2.0.2:
|
||||
estree-walker@^2.0.1, estree-walker@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
|
||||
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:
|
||||
version "2.3.2"
|
||||
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"
|
||||
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:
|
||||
version "11.12.0"
|
||||
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"
|
||||
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:
|
||||
version "2.11.0"
|
||||
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:
|
||||
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:
|
||||
version "3.14.1"
|
||||
resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
|
||||
@ -857,6 +960,13 @@ magic-string@^0.25.7:
|
||||
dependencies:
|
||||
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:
|
||||
version "2.1.0"
|
||||
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"
|
||||
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:
|
||||
version "1.0.1"
|
||||
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"
|
||||
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:
|
||||
version "4.0.1"
|
||||
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"
|
||||
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:
|
||||
version "1.22.1"
|
||||
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"
|
||||
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:
|
||||
version "2.4.1"
|
||||
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"
|
||||
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:
|
||||
version "1.0.10"
|
||||
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/server-renderer" "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==
|
||||
|
@ -43,7 +43,7 @@ public class UserAdminController {
|
||||
@SneakyThrows
|
||||
@PostMapping("login")
|
||||
public UserAdminInfo login(@Validated @RequestBody UserAdminInfo user) {
|
||||
Thread.sleep(1);
|
||||
Thread.sleep(2000);
|
||||
// 判断是否存在账号
|
||||
if (!userStoreMap.containsKey(user.getAccount())) {
|
||||
throw BizException.create("账号不存在");
|
||||
|
Loading…
x
Reference in New Issue
Block a user