1
0
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:
源文雨
2023-03-14 13:53:59 +08:00
parent c14eb49661
commit 4553be7c8a
6 changed files with 115 additions and 39 deletions

View File

@@ -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',

View File

@@ -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
*/ */

View File

@@ -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
*/ */

View File

@@ -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>

View File

@@ -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)

View File

@@ -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