网站信息,登录,用户

This commit is contained in:
Jason 2022-09-08 19:09:53 +08:00
parent 669b91a99e
commit 0f47284235
13 changed files with 399 additions and 175 deletions

View File

@ -9,3 +9,8 @@ export function getUserList(params: any) {
export function getUserDetail(params: any) {
return request.get({ url: '/user/detail', params })
}
// 用户编辑
export function userEdit(params: any) {
return request.post({ url: '/user/edit', params })
}

View File

@ -0,0 +1,108 @@
<template>
<div @mouseenter="inPopover = true" @mouseleave="inPopover = false">
<el-popover
placement="top"
v-model:visible="visible"
:width="width"
trigger="contextmenu"
class="popover-input"
:teleported="false"
>
<div class="flex">
<div class="popover-input__input mr-[10px] flex-1">
<el-select
class="flex-1"
size="small"
v-if="type == 'select'"
v-model="inputValue"
:teleported="false"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<el-input
v-else
v-model="inputValue"
:type="type"
size="small"
:placeholder="placeholder"
/>
</div>
<div class="popover-input__btns flex-none">
<el-button link @click="visible = false">取消</el-button>
<el-button type="primary" size="small" @click="handleConfirm">确定</el-button>
</div>
</div>
<template #reference>
<div class="inline" @click.stop="handleOpen">
<slot></slot>
</div>
</template>
</el-popover>
</div>
</template>
<script lang="ts" setup>
import { useEventListener } from '@vueuse/core'
import type { PropType } from 'vue'
const props = defineProps({
value: {
type: String
},
type: {
type: String,
default: 'text'
},
width: {
type: [Number, String],
default: 250
},
placeholder: String,
disabled: {
type: Boolean,
default: false
},
options: {
type: Array as PropType<any[]>,
default: () => []
}
})
const emit = defineEmits(['confirm'])
const visible = ref(false)
const inPopover = ref(false)
const inputValue = ref()
const handleConfirm = () => {
close()
emit('confirm', inputValue.value)
}
const handleOpen = () => {
if (props.disabled) {
return
}
visible.value = true
}
const close = () => {
visible.value = false
}
watch(
() => props.value,
(value) => {
inputValue.value = value
},
{
immediate: true
}
)
useEventListener(document.body, 'click', () => {
if (inPopover.value) return
close()
})
</script>
<style scoped lang="scss"></style>

View File

@ -78,6 +78,6 @@ router.beforeEach(async (to, from, next) => {
})
router.afterEach(() => {
// console.log(router.getRoutes())
console.log(router.getRoutes())
NProgress.done()
})

View File

@ -86,6 +86,7 @@ export function findFirstValidRoute(routes: RouteRecordRaw[]): string | undefine
}
export function getRoutePath(perms: string) {
console.log(router.getRoutes())
console.log(router.getRoutes().find((item) => item.meta?.perms == perms)?.path)
return router.getRoutes().find((item) => item.meta?.perms == perms)?.path || ''
}

View File

@ -34,7 +34,7 @@
<router-link
v-perms="['article:add']"
:to="{
path: '/article/lists/edit'
path: getRoutePath('article:edit')
}"
>
<el-button type="primary" class="mb-4">
@ -57,6 +57,12 @@
/>
</template>
</el-table-column>
<el-table-column
label="标题"
prop="title"
min-width="160"
show-tooltip-when-overflow
/>
<el-table-column label="栏目" prop="category" min-width="100" />
<el-table-column label="作者" prop="author" min-width="120" />
<el-table-column label="浏览量" prop="visit" min-width="100" />
@ -64,10 +70,9 @@
<template #default="{ row }">
<el-switch
v-perms="['article:cate:change']"
v-if="row.id != 1"
v-model="row.isShow"
:active-value="0"
:inactive-value="1"
:active-value="1"
:inactive-value="0"
@change="changeStatus(row.id)"
/>
</template>

View File

@ -10,11 +10,59 @@
<el-avatar :src="formData.avatar" :size="58" />
</div>
<el-form-item label="用户编号:"> {{ formData.sn }} </el-form-item>
<el-form-item label="用户昵称:"> {{ formData.nickname }} </el-form-item>
<el-form-item label="账号:"> {{ formData.username }} </el-form-item>
<el-form-item label="真实姓名:"> {{ formData.realName || '-' }} </el-form-item>
<el-form-item label="性别:"> {{ formData.sex }} </el-form-item>
<el-form-item label="联系电话:"> {{ formData.mobile || '-' }} </el-form-item>
<el-form-item label="用户昵称:">
{{ formData.nickname }}
</el-form-item>
<el-form-item label="账号:">
{{ formData.username }}
<popover-input class="ml-[10px]" @confirm="handleEdit($event, 'username')">
<el-button type="primary" link v-perms="['user:edit']">
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>
</el-form-item>
<el-form-item label="真实姓名:">
{{ formData.realName || '-' }}
<popover-input class="ml-[10px]" @confirm="handleEdit($event, 'realName')">
<el-button type="primary" link v-perms="['user:edit']">
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>
</el-form-item>
<el-form-item label="性别:">
{{ formData.sex }}
<popover-input
class="ml-[10px]"
type="select"
:options="[
{
label: '未知',
value: 0
},
{
label: '男',
value: 1
},
{
label: '女',
value: 0
}
]"
@confirm="handleEdit($event, 'sex')"
>
<el-button type="primary" link v-perms="['user:edit']">
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>
</el-form-item>
<el-form-item label="联系电话:">
{{ formData.mobile || '-' }}
<popover-input class="ml-[10px]" @confirm="handleEdit($event, 'mobile')">
<el-button type="primary" link v-perms="['user:edit']">
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>
</el-form-item>
<el-form-item label="注册来源:"> {{ formData.channel }} </el-form-item>
<el-form-item label="注册时间:"> {{ formData.createTime }} </el-form-item>
<el-form-item label="最近登录时间:"> {{ formData.lastLoginTime }} </el-form-item>
@ -25,7 +73,8 @@
<script lang="ts" setup>
import type { FormInstance } from 'element-plus'
import { getUserDetail } from '@/api/consumer'
import { getUserDetail, userEdit } from '@/api/consumer'
import feedback from '@/utils/feedback'
const route = useRoute()
const formData = reactive({
@ -54,5 +103,15 @@ const getDetails = async () => {
})
}
const handleEdit = async (value: string, field: string) => {
await userEdit({
id: route.query.id,
field,
value
})
feedback.msgSuccess('编辑成功')
getDetails()
}
getDetails()
</script>

View File

@ -47,10 +47,10 @@
<el-table-column label="注册时间" prop="createTime" min-width="120" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['consumer:lists:detail']" type="primary" link>
<el-button v-perms="['user:detail']" type="primary" link>
<router-link
:to="{
path: getRoutePath('consumer:lists:detail'),
path: getRoutePath('user:detail'),
query: {
id: row.id
}

View File

@ -1,8 +1,9 @@
<!-- 网站信息 -->
<template>
<div class="website-information">
<el-card shadow="never" class="!border-none">
<el-form ref="formRef" :rules="rules" :model="formData" label-width="120px">
<el-form ref="formRef" :rules="rules" :model="formData" label-width="120px">
<el-card shadow="never" class="!border-none">
<div class="text-xl font-medium mb-[20px]">后台设置</div>
<el-form-item label="网站名称" prop="name">
<div class="w-80">
<el-input
@ -13,27 +14,45 @@
></el-input>
</div>
</el-form-item>
<el-form-item label="网站图标" prop="favicon" required>
<el-form-item label="网站图标" prop="favicon">
<div>
<material-picker v-model="formData.favicon" :limit="1" />
<div class="form-tips">建议尺寸100*100像素支持jpgjpegpng格式</div>
</div>
</el-form-item>
<el-form-item label="网站logo" prop="logo" required>
<el-form-item label="网站logo" prop="logo">
<div>
<material-picker v-model="formData.logo" :limit="1" />
<div class="form-tips">建议尺寸200*200像素支持jpgjpegpng格式</div>
</div>
</el-form-item>
<el-form-item label="登录页广告图" prop="backdrop" required>
<el-form-item label="登录页广告图" prop="backdrop">
<div>
<material-picker v-model="formData.backdrop" :limit="1" />
<div class="form-tips">建议尺寸400*400像素支持jpgjpegpng格式</div>
</div>
</el-form-item>
</el-form>
</el-card>
</el-card>
<el-card shadow="never" class="!border-none mt-4">
<div class="text-xl font-medium mb-[20px]">商城设置</div>
<el-form-item label="商城名称" prop="shopName">
<div class="w-80">
<el-input
v-model="formData.shopName"
placeholder="请输入店铺/商城名称"
maxlength="30"
show-word-limit
></el-input>
</div>
</el-form-item>
<el-form-item label="商城LOGO" prop="shopLogo">
<div>
<material-picker v-model="formData.shopLogo" :limit="1" />
<div class="form-tips">建议尺寸100*100px支持jpgjpegpng格式</div>
</div>
</el-form-item>
</el-card>
</el-form>
<footer-btns v-perms="['setting:website:save']">
<el-button type="primary" @click="handleSubmit">保存</el-button>
</footer-btns>
@ -51,7 +70,9 @@ const formData = reactive({
name: '', //
favicon: '', //
logo: '', // logo
backdrop: '' // 广
backdrop: '', // 广
shopName: '',
shopLogo: ''
})
//
@ -62,6 +83,41 @@ const rules = {
message: '请输入网站名称',
trigger: ['blur']
}
],
favicon: [
{
required: true,
message: '请选择网站图标',
trigger: ['change']
}
],
logo: [
{
required: true,
message: '请选择网站logo',
trigger: ['change']
}
],
backdrop: [
{
required: true,
message: '请选择登录页广告图',
trigger: ['change']
}
],
shopName: [
{
required: true,
message: '请输入店铺/商城名称',
trigger: ['blur']
}
],
shopLogo: [
{
required: true,
message: '请选择商城LOGO',
trigger: ['change']
}
]
}

204
app/package-lock.json generated
View File

@ -22,7 +22,7 @@
"@dcloudio/uni-quickapp-webview": "^3.0.0-alpha-3050520220824001",
"lodash-es": "^4.17.21",
"pinia": "^2.0.20",
"uview-plus": "^3.1.6",
"uni-crazy-router": "^1.1.1",
"vconsole": "^3.14.6",
"vue": "^3.2.37",
"vue-i18n": "^9.2.2",
@ -526,6 +526,11 @@
"node": ">=6.9.0"
}
},
"node_modules/@babel/runtime/node_modules/regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
},
"node_modules/@babel/standalone": {
"version": "7.18.13",
"resolved": "https://registry.npmmirror.com/@babel/standalone/-/standalone-7.18.13.tgz",
@ -1538,6 +1543,12 @@
"vite": "^2.8.0"
}
},
"node_modules/@vitejs/plugin-legacy/node_modules/regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
"dev": true
},
"node_modules/@vitejs/plugin-vue": {
"version": "2.3.4",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz",
@ -2134,16 +2145,6 @@
"fsevents": "~2.3.2"
}
},
"node_modules/clipboard": {
"version": "2.0.11",
"resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz",
"integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==",
"dependencies": {
"good-listener": "^1.2.2",
"select": "^1.1.2",
"tiny-emitter": "^2.0.0"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
@ -2313,11 +2314,6 @@
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz",
"integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
},
"node_modules/dayjs": {
"version": "1.11.5",
"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz",
"integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA=="
},
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
@ -2358,11 +2354,6 @@
"integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==",
"dev": true
},
"node_modules/delegate": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz",
"integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
},
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
@ -3149,14 +3140,6 @@
"node": ">=10"
}
},
"node_modules/good-listener": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz",
"integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==",
"dependencies": {
"delegate": "^3.1.2"
}
},
"node_modules/graceful-fs": {
"version": "4.2.10",
"resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz",
@ -4249,6 +4232,16 @@
"node": ">=0.6"
}
},
"node_modules/querystring": {
"version": "0.2.0",
"resolved": "https://registry.npmmirror.com/querystring/-/querystring-0.2.0.tgz",
"integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
"deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
"peer": true,
"engines": {
"node": ">=0.4.x"
}
},
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
@ -4307,9 +4300,10 @@
}
},
"node_modules/regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
"version": "0.12.1",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
"integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==",
"peer": true
},
"node_modules/regexpp": {
"version": "3.2.0",
@ -4419,11 +4413,6 @@
"node": ">=12.0.0"
}
},
"node_modules/select": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz",
"integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
},
"node_modules/semver": {
"version": "7.3.7",
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz",
@ -4723,11 +4712,6 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
"node_modules/tiny-emitter": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@ -4824,6 +4808,15 @@
"node": ">=4.2.0"
}
},
"node_modules/uni-crazy-router": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/uni-crazy-router/-/uni-crazy-router-1.1.1.tgz",
"integrity": "sha512-vxGq9AgSx85Ed6lkg1R5tQ1umTqluUhNDyMXE0lmdIVgCGRVblE/iaHoPKQmPgwvZTObVvVaHKQk0et5O44UWQ==",
"peerDependencies": {
"regenerator-runtime": "0.12.1",
"url": "^0.11.0"
}
},
"node_modules/universalify": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz",
@ -4870,6 +4863,22 @@
"punycode": "^2.1.0"
}
},
"node_modules/url": {
"version": "0.11.0",
"resolved": "https://registry.npmmirror.com/url/-/url-0.11.0.tgz",
"integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
"peer": true,
"dependencies": {
"punycode": "1.3.2",
"querystring": "0.2.0"
}
},
"node_modules/url/node_modules/punycode": {
"version": "1.3.2",
"resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz",
"integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==",
"peer": true
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
@ -4884,18 +4893,6 @@
"node": ">= 0.4.0"
}
},
"node_modules/uview-plus": {
"version": "3.1.6",
"resolved": "https://registry.npmmirror.com/uview-plus/-/uview-plus-3.1.6.tgz",
"integrity": "sha512-C/JX3KBah0AcW6zg3y0nH/L3VphzE040npG7d6K58qFR9Mi+QBoPiHAG212DwzBP8vSYWrQ6K+3WgbPFKMULqw==",
"dependencies": {
"clipboard": "^2.0.11",
"dayjs": "^1.11.3"
},
"engines": {
"HBuilderX": "^3.1.0"
}
},
"node_modules/v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@ -5668,6 +5665,13 @@
"integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==",
"requires": {
"regenerator-runtime": "^0.13.4"
},
"dependencies": {
"regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
}
}
},
"@babel/standalone": {
@ -6505,6 +6509,14 @@
"magic-string": "^0.26.1",
"regenerator-runtime": "^0.13.9",
"systemjs": "^6.12.1"
},
"dependencies": {
"regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
"dev": true
}
}
},
"@vitejs/plugin-vue": {
@ -6990,16 +7002,6 @@
"readdirp": "~3.6.0"
}
},
"clipboard": {
"version": "2.0.11",
"resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz",
"integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==",
"requires": {
"good-listener": "^1.2.2",
"select": "^1.1.2",
"tiny-emitter": "^2.0.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
@ -7137,11 +7139,6 @@
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz",
"integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
},
"dayjs": {
"version": "1.11.5",
"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz",
"integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA=="
},
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
@ -7171,11 +7168,6 @@
"integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==",
"dev": true
},
"delegate": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz",
"integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
},
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
@ -7797,14 +7789,6 @@
"slash": "^3.0.0"
}
},
"good-listener": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz",
"integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==",
"requires": {
"delegate": "^3.1.2"
}
},
"graceful-fs": {
"version": "4.2.10",
"resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz",
@ -8604,6 +8588,12 @@
"side-channel": "^1.0.4"
}
},
"querystring": {
"version": "0.2.0",
"resolved": "https://registry.npmmirror.com/querystring/-/querystring-0.2.0.tgz",
"integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
"peer": true
},
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
@ -8650,9 +8640,10 @@
}
},
"regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
"version": "0.12.1",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
"integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==",
"peer": true
},
"regexpp": {
"version": "3.2.0",
@ -8734,11 +8725,6 @@
"source-map-js": ">=0.6.2 <2.0.0"
}
},
"select": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz",
"integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
},
"semver": {
"version": "7.3.7",
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz",
@ -8977,11 +8963,6 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
"tiny-emitter": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
},
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@ -9047,6 +9028,12 @@
"integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
"devOptional": true
},
"uni-crazy-router": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/uni-crazy-router/-/uni-crazy-router-1.1.1.tgz",
"integrity": "sha512-vxGq9AgSx85Ed6lkg1R5tQ1umTqluUhNDyMXE0lmdIVgCGRVblE/iaHoPKQmPgwvZTObVvVaHKQk0et5O44UWQ==",
"requires": {}
},
"universalify": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz",
@ -9081,6 +9068,24 @@
"punycode": "^2.1.0"
}
},
"url": {
"version": "0.11.0",
"resolved": "https://registry.npmmirror.com/url/-/url-0.11.0.tgz",
"integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
"peer": true,
"requires": {
"punycode": "1.3.2",
"querystring": "0.2.0"
},
"dependencies": {
"punycode": {
"version": "1.3.2",
"resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz",
"integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==",
"peer": true
}
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
@ -9092,15 +9097,6 @@
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
"dev": true
},
"uview-plus": {
"version": "3.1.6",
"resolved": "https://registry.npmmirror.com/uview-plus/-/uview-plus-3.1.6.tgz",
"integrity": "sha512-C/JX3KBah0AcW6zg3y0nH/L3VphzE040npG7d6K58qFR9Mi+QBoPiHAG212DwzBP8vSYWrQ6K+3WgbPFKMULqw==",
"requires": {
"clipboard": "^2.0.11",
"dayjs": "^1.11.3"
}
},
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",

View File

@ -2,6 +2,7 @@ import { createSSRApp } from 'vue'
import App from './App.vue'
import plugins from './plugins'
import './styles/index.scss'
import './router'
export function createApp() {
const app = createSSRApp(App)
app.use(plugins)

View File

@ -3,9 +3,9 @@
class="bg-white login min-h-full flex flex-col items-center px-[40rpx] pt-[80rpx] box-border"
>
<view>
<u-image src="" mode="widthFix" height="160" width="160" />
<u-image :src="appStore.config.website.logo" mode="widthFix" height="160" width="160" />
</view>
<view class="mt-4">这里是商城名称</view>
<view class="mt-4">{{ appStore.config.website.name }}</view>
<view class="w-full mt-[60rpx]">
<u-form borderBottom>
<template v-if="scene == LoginTypeEnum.ACCOUNT">
@ -117,8 +117,9 @@ import { login } from '@/api/account'
import { smsSend } from '@/api/app'
import { SMSEnum } from '@/enums/appEnums'
import { useLockFn } from '@/hooks/useLockFn'
import { useAppStore } from '@/stores/app'
import { useUserStore } from '@/stores/user'
import { reactive, ref, shallowRef, watch } from 'vue'
import { reactive, ref, shallowRef } from 'vue'
enum LoginTypeEnum {
MOBILE = 'mobile',
ACCOUNT = 'account',
@ -130,6 +131,7 @@ const codeTips = ref('')
const isCheckAgreement = ref(false)
const userStore = useUserStore()
const appStore = useAppStore()
const formData = reactive({
username: '',
password: '',

View File

@ -7,7 +7,9 @@ interface AppSate {
export const useAppStore = defineStore({
id: 'appStore',
state: (): AppSate => ({
config: {}
config: {
website: {}
}
}),
getters: {},
actions: {

View File

@ -1442,15 +1442,6 @@
optionalDependencies:
"fsevents" "~2.3.2"
"clipboard@^2.0.11":
"integrity" "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw=="
"resolved" "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz"
"version" "2.0.11"
dependencies:
"good-listener" "^1.2.2"
"select" "^1.1.2"
"tiny-emitter" "^2.0.0"
"color-convert@^1.9.0":
"integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="
"resolved" "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz"
@ -1580,11 +1571,6 @@
"resolved" "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz"
"version" "2.6.20"
"dayjs@^1.11.3":
"integrity" "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA=="
"resolved" "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz"
"version" "1.11.5"
"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4":
"integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="
"resolved" "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz"
@ -1616,11 +1602,6 @@
"resolved" "https://registry.npmmirror.com/defined/-/defined-1.0.0.tgz"
"version" "1.0.0"
"delegate@^3.1.2":
"integrity" "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
"resolved" "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz"
"version" "3.2.0"
"depd@2.0.0":
"integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
"resolved" "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz"
@ -2157,13 +2138,6 @@
"merge2" "^1.4.1"
"slash" "^3.0.0"
"good-listener@^1.2.2":
"integrity" "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw=="
"resolved" "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz"
"version" "1.2.2"
dependencies:
"delegate" "^3.1.2"
"graceful-fs@^4.1.6", "graceful-fs@^4.2.0":
"integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
"resolved" "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz"
@ -2882,6 +2856,11 @@
"resolved" "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz"
"version" "2.1.1"
"punycode@1.3.2":
"integrity" "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="
"resolved" "https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz"
"version" "1.3.2"
"qrcode-reader@^1.0.4":
"integrity" "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ=="
"resolved" "https://registry.npmmirror.com/qrcode-reader/-/qrcode-reader-1.0.4.tgz"
@ -2899,6 +2878,11 @@
dependencies:
"side-channel" "^1.0.4"
"querystring@0.2.0":
"integrity" "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g=="
"resolved" "https://registry.npmmirror.com/querystring/-/querystring-0.2.0.tgz"
"version" "0.2.0"
"queue-microtask@^1.2.2":
"integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
"resolved" "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz"
@ -2938,11 +2922,21 @@
dependencies:
"picomatch" "^2.2.1"
"regenerator-runtime@^0.13.4", "regenerator-runtime@^0.13.9":
"regenerator-runtime@^0.13.4":
"integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
"resolved" "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
"version" "0.13.9"
"regenerator-runtime@^0.13.9":
"integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
"resolved" "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
"version" "0.13.9"
"regenerator-runtime@0.12.1":
"integrity" "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="
"resolved" "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz"
"version" "0.12.1"
"regexpp@^3.2.0":
"integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg=="
"resolved" "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz"
@ -3017,11 +3011,6 @@
"immutable" "^4.0.0"
"source-map-js" ">=0.6.2 <2.0.0"
"select@^1.1.2":
"integrity" "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
"resolved" "https://registry.npmmirror.com/select/-/select-1.1.2.tgz"
"version" "1.1.2"
"semver@^6.3.0":
"integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
"resolved" "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz"
@ -3208,11 +3197,6 @@
"resolved" "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz"
"version" "0.2.0"
"tiny-emitter@^2.0.0":
"integrity" "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
"resolved" "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz"
"version" "2.1.0"
"to-fast-properties@^2.0.0":
"integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
"resolved" "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz"
@ -3267,6 +3251,11 @@
"resolved" "https://registry.npmmirror.com/typescript/-/typescript-4.7.4.tgz"
"version" "4.7.4"
"uni-crazy-router@^1.1.1":
"integrity" "sha512-vxGq9AgSx85Ed6lkg1R5tQ1umTqluUhNDyMXE0lmdIVgCGRVblE/iaHoPKQmPgwvZTObVvVaHKQk0et5O44UWQ=="
"resolved" "https://registry.npmmirror.com/uni-crazy-router/-/uni-crazy-router-1.1.1.tgz"
"version" "1.1.1"
"universalify@^2.0.0":
"integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
"resolved" "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz"
@ -3297,6 +3286,14 @@
dependencies:
"punycode" "^2.1.0"
"url@^0.11.0":
"integrity" "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ=="
"resolved" "https://registry.npmmirror.com/url/-/url-0.11.0.tgz"
"version" "0.11.0"
dependencies:
"punycode" "1.3.2"
"querystring" "0.2.0"
"util-deprecate@^1.0.2":
"integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
"resolved" "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz"
@ -3307,14 +3304,6 @@
"resolved" "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz"
"version" "1.0.1"
"uview-plus@^3.1.6":
"integrity" "sha512-C/JX3KBah0AcW6zg3y0nH/L3VphzE040npG7d6K58qFR9Mi+QBoPiHAG212DwzBP8vSYWrQ6K+3WgbPFKMULqw=="
"resolved" "https://registry.npmmirror.com/uview-plus/-/uview-plus-3.1.6.tgz"
"version" "3.1.6"
dependencies:
"clipboard" "^2.0.11"
"dayjs" "^1.11.3"
"v8-compile-cache@^2.0.3":
"integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA=="
"resolved" "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz"