mirror of
https://github.com/fumiama/paper-manager.git
synced 2026-06-12 12:10:25 +08:00
finish reset password & fix login
This commit is contained in:
@@ -55,7 +55,7 @@ export default [
|
|||||||
(item) => item.username === username && password === item.password,
|
(item) => item.username === username && password === item.password,
|
||||||
)
|
)
|
||||||
if (!checkUser) {
|
if (!checkUser) {
|
||||||
return resultError('Incorrect account or password!')
|
return resultError('Incorrect account or password!')
|
||||||
}
|
}
|
||||||
const { userId, username: _username, token, realName, desc, roles } = checkUser
|
const { userId, username: _username, token, realName, desc, roles } = checkUser
|
||||||
return resultSuccess({
|
return resultSuccess({
|
||||||
@@ -68,6 +68,19 @@ export default [
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
// mock reset password
|
||||||
|
{
|
||||||
|
url: '/basic-api/resetPassword',
|
||||||
|
timeout: 200,
|
||||||
|
method: 'post',
|
||||||
|
response: ({ body }) => {
|
||||||
|
const { username, phonenum } = body
|
||||||
|
return resultSuccess({
|
||||||
|
msg:
|
||||||
|
'已将用户' + username + '电话' + phonenum + '的重置请求上报, 请耐心等待管理员与您联系!',
|
||||||
|
})
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
url: '/basic-api/getUserInfo',
|
url: '/basic-api/getUserInfo',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
|
|||||||
@@ -6,6 +6,14 @@ export interface LoginParams {
|
|||||||
password: string
|
password: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: Reset password interface parameters
|
||||||
|
*/
|
||||||
|
export interface ResetPasswordParams {
|
||||||
|
username: string
|
||||||
|
phonenum: string
|
||||||
|
}
|
||||||
|
|
||||||
export interface RoleInfo {
|
export interface RoleInfo {
|
||||||
roleName: string
|
roleName: string
|
||||||
value: string
|
value: string
|
||||||
@@ -20,6 +28,13 @@ export interface LoginResultModel {
|
|||||||
role: RoleInfo
|
role: RoleInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: Reset password interface return value
|
||||||
|
*/
|
||||||
|
export interface ResetPasswordResultModel {
|
||||||
|
msg: string
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: Get user information return value
|
* @description: Get user information return value
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,11 +1,18 @@
|
|||||||
import { defHttp } from '/@/utils/http/axios'
|
import { defHttp } from '/@/utils/http/axios'
|
||||||
import { LoginParams, LoginResultModel, GetUserInfoModel } from './model/userModel'
|
import {
|
||||||
|
LoginParams,
|
||||||
|
LoginResultModel,
|
||||||
|
GetUserInfoModel,
|
||||||
|
ResetPasswordParams,
|
||||||
|
ResetPasswordResultModel,
|
||||||
|
} from './model/userModel'
|
||||||
|
|
||||||
import { ErrorMessageMode } from '/#/axios'
|
import { ErrorMessageMode } from '/#/axios'
|
||||||
|
|
||||||
enum Api {
|
enum Api {
|
||||||
Login = '/login',
|
Login = '/login',
|
||||||
Logout = '/logout',
|
Logout = '/logout',
|
||||||
|
ResetPassword = '/resetPassword',
|
||||||
GetUserInfo = '/getUserInfo',
|
GetUserInfo = '/getUserInfo',
|
||||||
GetPermCode = '/getPermCode',
|
GetPermCode = '/getPermCode',
|
||||||
TestRetry = '/testRetry',
|
TestRetry = '/testRetry',
|
||||||
@@ -26,6 +33,21 @@ export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal')
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: reset password api
|
||||||
|
*/
|
||||||
|
export function resetPasswordApi(params: ResetPasswordParams, mode: ErrorMessageMode = 'modal') {
|
||||||
|
return defHttp.post<ResetPasswordResultModel>(
|
||||||
|
{
|
||||||
|
url: Api.ResetPassword,
|
||||||
|
params,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
errorMessageMode: mode,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: getUserInfo
|
* @description: getUserInfo
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -13,16 +13,16 @@
|
|||||||
<FormItem name="mobile" class="enter-x">
|
<FormItem name="mobile" class="enter-x">
|
||||||
<Input size="large" v-model:value="formData.mobile" :placeholder="t('sys.login.mobile')" />
|
<Input size="large" v-model:value="formData.mobile" :placeholder="t('sys.login.mobile')" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem name="sms" class="enter-x">
|
|
||||||
<CountdownInput
|
|
||||||
size="large"
|
|
||||||
v-model:value="formData.sms"
|
|
||||||
:placeholder="t('sys.login.smsCode')"
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<FormItem class="enter-x">
|
<FormItem class="enter-x">
|
||||||
<Button type="primary" size="large" block @click="handleReset" :loading="loading">
|
<Button
|
||||||
|
type="primary"
|
||||||
|
size="large"
|
||||||
|
block
|
||||||
|
@click="handleReset"
|
||||||
|
:loading="loading"
|
||||||
|
:disabled="!(formData.account && formData.mobile)"
|
||||||
|
>
|
||||||
{{ t('common.resetText') }}
|
{{ t('common.resetText') }}
|
||||||
</Button>
|
</Button>
|
||||||
<Button size="large" block class="mt-4" @click="handleBackLogin">
|
<Button size="large" block class="mt-4" @click="handleBackLogin">
|
||||||
@@ -36,13 +36,16 @@
|
|||||||
import { reactive, ref, computed, unref } from 'vue'
|
import { reactive, ref, computed, unref } from 'vue'
|
||||||
import LoginFormTitle from './LoginFormTitle.vue'
|
import LoginFormTitle from './LoginFormTitle.vue'
|
||||||
import { Form, Input, Button } from 'ant-design-vue'
|
import { Form, Input, Button } from 'ant-design-vue'
|
||||||
import { CountdownInput } from '/@/components/CountDown'
|
|
||||||
import { useI18n } from '/@/hooks/web/useI18n'
|
import { useI18n } from '/@/hooks/web/useI18n'
|
||||||
import { useLoginState, useFormRules, LoginStateEnum } from './useLogin'
|
import { useLoginState, useFormRules, LoginStateEnum, useFormValid } from './useLogin'
|
||||||
|
import { resetPasswordApi } from '/@/api/sys/user'
|
||||||
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||||||
|
import { ResetPasswordParams } from '/@/api/sys/model/userModel'
|
||||||
|
|
||||||
const FormItem = Form.Item
|
const FormItem = Form.Item
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const { handleBackLogin, getLoginState } = useLoginState()
|
const { handleBackLogin, getLoginState } = useLoginState()
|
||||||
|
const { notification } = useMessage()
|
||||||
const { getFormRules } = useFormRules()
|
const { getFormRules } = useFormRules()
|
||||||
|
|
||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
@@ -51,14 +54,39 @@
|
|||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
account: '',
|
account: '',
|
||||||
mobile: '',
|
mobile: '',
|
||||||
sms: '',
|
// sms: '',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const { validForm } = useFormValid(formRef)
|
||||||
|
|
||||||
const getShow = computed(() => unref(getLoginState) === LoginStateEnum.RESET_PASSWORD)
|
const getShow = computed(() => unref(getLoginState) === LoginStateEnum.RESET_PASSWORD)
|
||||||
|
|
||||||
async function handleReset() {
|
async function handleReset() {
|
||||||
const form = unref(formRef)
|
const form = unref(formRef)
|
||||||
if (!form) return
|
if (!form) return
|
||||||
await form.resetFields()
|
const data = await validForm()
|
||||||
|
if (!data) return
|
||||||
|
try {
|
||||||
|
loading.value = true
|
||||||
|
const { msg } = await resetPasswordApi({
|
||||||
|
username: data.account,
|
||||||
|
phonenum: data.mobile,
|
||||||
|
} as ResetPasswordParams)
|
||||||
|
notification.info({
|
||||||
|
message: t('sys.login.forgetFormTitle'),
|
||||||
|
description: msg,
|
||||||
|
duration: 10,
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
notification.error({
|
||||||
|
message: (error as Error).name,
|
||||||
|
description: (error as Error).message,
|
||||||
|
duration: 3,
|
||||||
|
})
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
form.resetFields()
|
||||||
|
handleBackLogin()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,37 +1,28 @@
|
|||||||
<template>
|
<template>
|
||||||
<LoginFormTitle v-show="getShow" class="enter-x" />
|
<LoginFormTitle v-show="getShow" class="enter-x" />
|
||||||
<!--<Form
|
<Form
|
||||||
class="p-4 enter-x"
|
class="p-4 enter-x"
|
||||||
:model="formData"
|
:model="formData"
|
||||||
:rules="getFormRules"
|
:rules="getFormRules"
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
v-show="getShow"
|
v-show="getShow"
|
||||||
@keypress.enter="handleLogin"
|
@keypress.enter="handleLogin"
|
||||||
>-->
|
|
||||||
<Form
|
|
||||||
class="p-4 enter-x"
|
|
||||||
:rules="getFormRules"
|
|
||||||
ref="formRef"
|
|
||||||
v-show="getShow"
|
|
||||||
@keypress.enter="handleLogin"
|
|
||||||
>
|
>
|
||||||
<FormItem name="account" class="enter-x">
|
<FormItem name="account" class="enter-x">
|
||||||
<Input size="large" :placeholder="t('sys.login.userName')" class="fix-auto-fill" />
|
<Input
|
||||||
<!--<Input
|
|
||||||
size="large"
|
size="large"
|
||||||
v-model:value="formData.account"
|
v-model:value="formData.account"
|
||||||
:placeholder="t('sys.login.userName')"
|
:placeholder="t('sys.login.userName')"
|
||||||
class="fix-auto-fill"
|
class="fix-auto-fill"
|
||||||
/> -->
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem name="password" class="enter-x">
|
<FormItem name="password" class="enter-x">
|
||||||
<InputPassword size="large" visibilityToggle :placeholder="t('sys.login.password')" />
|
<InputPassword
|
||||||
<!-- <InputPassword
|
|
||||||
size="large"
|
size="large"
|
||||||
visibilityToggle
|
visibilityToggle
|
||||||
v-model:value="formData.password"
|
v-model:value="formData.password"
|
||||||
:placeholder="t('sys.login.password')"
|
:placeholder="t('sys.login.password')"
|
||||||
/>-->
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<ARow class="enter-x">
|
<ARow class="enter-x">
|
||||||
@@ -54,7 +45,14 @@
|
|||||||
</ARow>
|
</ARow>
|
||||||
|
|
||||||
<FormItem class="enter-x">
|
<FormItem class="enter-x">
|
||||||
<Button type="primary" size="large" block @click="handleLogin" :loading="loading">
|
<Button
|
||||||
|
type="primary"
|
||||||
|
size="large"
|
||||||
|
block
|
||||||
|
@click="handleLogin"
|
||||||
|
:loading="loading"
|
||||||
|
:disabled="!(formData.account && formData.password)"
|
||||||
|
>
|
||||||
{{ t('sys.login.loginButton') }}
|
{{ t('sys.login.loginButton') }}
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
@@ -81,7 +79,7 @@
|
|||||||
</Form>
|
</Form>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { /*reactive,*/ ref, unref, computed } from 'vue'
|
import { reactive, ref, unref, computed } from 'vue'
|
||||||
|
|
||||||
import { Checkbox, Form, Input, Row, Col, Button } from 'ant-design-vue'
|
import { Checkbox, Form, Input, Row, Col, Button } from 'ant-design-vue'
|
||||||
import LoginFormTitle from './LoginFormTitle.vue'
|
import LoginFormTitle from './LoginFormTitle.vue'
|
||||||
@@ -92,7 +90,7 @@
|
|||||||
import { useUserStore } from '/@/store/modules/user'
|
import { useUserStore } from '/@/store/modules/user'
|
||||||
import { LoginStateEnum, useLoginState, useFormRules, useFormValid } from './useLogin'
|
import { LoginStateEnum, useLoginState, useFormRules, useFormValid } from './useLogin'
|
||||||
import { useDesign } from '/@/hooks/web/useDesign'
|
import { useDesign } from '/@/hooks/web/useDesign'
|
||||||
//import { onKeyStroke } from '@vueuse/core';
|
import { onKeyStroke } from '@vueuse/core'
|
||||||
|
|
||||||
const ACol = Col
|
const ACol = Col
|
||||||
const ARow = Row
|
const ARow = Row
|
||||||
@@ -110,14 +108,14 @@
|
|||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const rememberMe = ref(false)
|
const rememberMe = ref(false)
|
||||||
|
|
||||||
/*const formData = reactive({
|
const formData = reactive({
|
||||||
account: 'vben',
|
account: '',
|
||||||
password: '123456',
|
password: '',
|
||||||
})*/
|
})
|
||||||
|
|
||||||
const { validForm } = useFormValid(formRef)
|
const { validForm } = useFormValid(formRef)
|
||||||
|
|
||||||
//onKeyStroke('Enter', handleLogin);
|
onKeyStroke('Enter', handleLogin)
|
||||||
|
|
||||||
const getShow = computed(() => unref(getLoginState) === LoginStateEnum.LOGIN)
|
const getShow = computed(() => unref(getLoginState) === LoginStateEnum.LOGIN)
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ export function useFormRules(formData?: Recordable) {
|
|||||||
const getAccountFormRule = computed(() => createRule(t('sys.login.accountPlaceholder')))
|
const getAccountFormRule = computed(() => createRule(t('sys.login.accountPlaceholder')))
|
||||||
const getPasswordFormRule = computed(() => createRule(t('sys.login.passwordPlaceholder')))
|
const getPasswordFormRule = computed(() => createRule(t('sys.login.passwordPlaceholder')))
|
||||||
// const getSmsFormRule = computed(() => createRule(t('sys.login.smsPlaceholder')))
|
// const getSmsFormRule = computed(() => createRule(t('sys.login.smsPlaceholder')))
|
||||||
// const getMobileFormRule = computed(() => createRule(t('sys.login.mobilePlaceholder')))
|
const getMobileFormRule = computed(() => createRule(t('sys.login.mobilePlaceholder')))
|
||||||
|
|
||||||
const validatePolicy = async (_: RuleObject, value: boolean) => {
|
const validatePolicy = async (_: RuleObject, value: boolean) => {
|
||||||
return !value ? Promise.reject(t('sys.login.policyPlaceholder')) : Promise.resolve()
|
return !value ? Promise.reject(t('sys.login.policyPlaceholder')) : Promise.resolve()
|
||||||
@@ -66,7 +66,7 @@ export function useFormRules(formData?: Recordable) {
|
|||||||
const accountFormRule = unref(getAccountFormRule)
|
const accountFormRule = unref(getAccountFormRule)
|
||||||
const passwordFormRule = unref(getPasswordFormRule)
|
const passwordFormRule = unref(getPasswordFormRule)
|
||||||
// const smsFormRule = unref(getSmsFormRule)
|
// const smsFormRule = unref(getSmsFormRule)
|
||||||
// const mobileFormRule = unref(getMobileFormRule)
|
const mobileFormRule = unref(getMobileFormRule)
|
||||||
|
|
||||||
/*const mobileRule = {
|
/*const mobileRule = {
|
||||||
sms: smsFormRule,
|
sms: smsFormRule,
|
||||||
@@ -89,7 +89,7 @@ export function useFormRules(formData?: Recordable) {
|
|||||||
case LoginStateEnum.RESET_PASSWORD:
|
case LoginStateEnum.RESET_PASSWORD:
|
||||||
return {
|
return {
|
||||||
account: accountFormRule,
|
account: accountFormRule,
|
||||||
// ...mobileRule,
|
mobile: mobileFormRule,
|
||||||
}
|
}
|
||||||
|
|
||||||
// mobile form rules
|
// mobile form rules
|
||||||
|
|||||||
Reference in New Issue
Block a user