Browse Source

[Feature][UI Next] Add password function. (#7802)

3.0.0/version-upgrade
songjianet 3 years ago committed by GitHub
parent
commit
81ef08af0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 13
      dolphinscheduler-ui-next/src/service/service.ts
  2. 4
      dolphinscheduler-ui-next/src/views/login/use-login.ts
  3. 22
      dolphinscheduler-ui-next/src/views/password/index.tsx
  4. 47
      dolphinscheduler-ui-next/src/views/password/use-form.ts
  5. 52
      dolphinscheduler-ui-next/src/views/password/use-update.ts

13
dolphinscheduler-ui-next/src/service/service.ts

@ -15,7 +15,12 @@
* limitations under the License. * limitations under the License.
*/ */
import axios, { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios' import axios, {
AxiosRequestConfig,
AxiosResponse,
AxiosError,
AxiosRequestHeaders,
} from 'axios'
import qs from 'qs' import qs from 'qs'
import { useUserStore } from '@/store/user/user' import { useUserStore } from '@/store/user/user'
@ -30,9 +35,6 @@ const baseRequestConfig: AxiosRequestConfig = {
paramsSerializer: (params) => { paramsSerializer: (params) => {
return qs.stringify(params, { arrayFormat: 'repeat' }) return qs.stringify(params, { arrayFormat: 'repeat' })
}, },
headers: {
sessionId: userStore.getSessionId,
},
} }
const service = axios.create(baseRequestConfig) const service = axios.create(baseRequestConfig)
@ -43,6 +45,9 @@ const err = (err: AxiosError): Promise<AxiosError> => {
service.interceptors.request.use((config: AxiosRequestConfig<any>) => { service.interceptors.request.use((config: AxiosRequestConfig<any>) => {
console.log('config', config) console.log('config', config)
config.headers && (config.headers.sessionId = userStore.getSessionId)
return config return config
}, err) }, err)

4
dolphinscheduler-ui-next/src/views/login/use-login.ts

@ -31,9 +31,9 @@ export function useLogin(state: any) {
state.loginFormRef.validate(async (valid: any) => { state.loginFormRef.validate(async (valid: any) => {
if (!valid) { if (!valid) {
const loginRes: SessionIdRes = await login({ ...state.loginForm }) const loginRes: SessionIdRes = await login({ ...state.loginForm })
const userInfoRes: UserInfoRes = await getUserInfo()
await userStore.setSessionId(loginRes.sessionId) await userStore.setSessionId(loginRes.sessionId)
const userInfoRes: UserInfoRes = await getUserInfo()
await userStore.setUserInfo(userInfoRes) await userStore.setUserInfo(userInfoRes)
router.push({ path: 'home' }) router.push({ path: 'home' })

22
dolphinscheduler-ui-next/src/views/password/index.tsx

@ -18,51 +18,53 @@
import { defineComponent, toRefs } from 'vue' import { defineComponent, toRefs } from 'vue'
import { NForm, NFormItem, NButton, NInput } from 'naive-ui' import { NForm, NFormItem, NButton, NInput } from 'naive-ui'
import { useForm } from './use-form' import { useForm } from './use-form'
import { useUpdate } from './use-update'
import Card from '@/components/card' import Card from '@/components/card'
const password = defineComponent({ const password = defineComponent({
name: 'password', name: 'password',
setup() { setup() {
const { state, t } = useForm() const { state, t } = useForm()
const { handleUpdate } = useUpdate(state)
return { ...toRefs(state), t } return { ...toRefs(state), t, handleUpdate }
}, },
render() { render() {
const { rules, passwordForm, t, handlePasswordInput } = this const { t } = this
return ( return (
<Card title={t('password.edit_password')}> <Card title={t('password.edit_password')}>
{{ {{
default: () => ( default: () => (
<div> <div>
<NForm rules={rules} ref='passwordFormRef'> <NForm rules={this.rules} ref='passwordFormRef'>
<NFormItem label={t('password.password')} path='password'> <NFormItem label={t('password.password')} path='password'>
<NInput <NInput
type='password' type='password'
placeholder={t('password.password_tips')} placeholder={t('password.password_tips')}
v-model={[passwordForm.password, 'value']} v-model={[this.passwordForm.password, 'value']}
onInput={handlePasswordInput}
/> />
</NFormItem> </NFormItem>
<NFormItem <NFormItem
label={t('password.confirm_password')} label={t('password.confirm_password')}
path='confirmPassword' path='confirmPassword'
ref='confirmPasswordItemFormRef'
> >
<NInput <NInput
type='password' type='password'
placeholder={t('password.confirm_password_tips')} placeholder={t('password.confirm_password_tips')}
v-model={[passwordForm.confirmPassword, 'value']} v-model={[this.passwordForm.confirmPassword, 'value']}
/> />
</NFormItem> </NFormItem>
</NForm> </NForm>
<NButton <NButton
disabled={ disabled={
!passwordForm.password || !this.passwordForm.password ||
!passwordForm.confirmPassword || !this.passwordForm.confirmPassword ||
passwordForm.password !== passwordForm.confirmPassword this.passwordForm.password !==
this.passwordForm.confirmPassword
} }
type='info' type='info'
onClick={this.handleUpdate}
> >
{t('password.submit')} {t('password.submit')}
</NButton> </NButton>

47
dolphinscheduler-ui-next/src/views/password/use-form.ts

@ -24,49 +24,28 @@ export function useForm() {
const state = reactive({ const state = reactive({
passwordFormRef: ref(), passwordFormRef: ref(),
confirmPasswordItemFormRef: ref(),
passwordForm: { passwordForm: {
password: '', password: '',
confirmPassword: '', confirmPassword: '',
}, },
rules: { rules: {
password: { password: {
required: true, trigger: ['input', 'blur'],
message: t('password.password_tips'), validator() {
}, if (state.passwordForm.password === '') {
confirmPassword: [ return new Error(t('password.password_tips'))
{ }
required: true,
message: t('password.confirm_password_tips'),
},
{
trigger: ['input'],
message: t('password.two_password_entries_are_inconsistent'),
validator: (rule: any, value: string): any => {
return (
state.passwordForm.password &&
state.passwordForm.password.startsWith(value) &&
state.passwordForm.password.length >= value.length
)
},
}, },
{ },
trigger: ['blur', 'password-input'], confirmPassword: {
message: t('password.two_password_entries_are_inconsistent'), trigger: ['input', 'blur'],
validator: (rule: any, value: string): any => { validator() {
return state.passwordForm.password === value if (state.passwordForm.confirmPassword === '') {
}, return new Error(t('password.confirm_password_tips'))
}
}, },
], },
} as FormRules, } as FormRules,
handlePasswordInput: () => {
if (state.passwordForm.confirmPassword) {
state.confirmPasswordItemFormRef.value.validate({
trigger: 'password-input',
})
}
},
}) })
return { state, t } return { state, t }

52
dolphinscheduler-ui-next/src/views/password/use-update.ts

@ -0,0 +1,52 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { useRouter } from 'vue-router'
import { updateUser } from '@/service/modules/users'
import { useUserStore } from '@/store/user/user'
import type { Router } from 'vue-router'
import type { UserInfoRes } from '@/service/modules/users/types'
export function useUpdate(state: any) {
const router: Router = useRouter()
const userStore = useUserStore()
const userInfo = userStore.userInfo as UserInfoRes
const handleUpdate = () => {
state.passwordFormRef.validate(async (valid: any) => {
if (!valid) {
await updateUser({
userPassword: state.passwordForm.password,
id: userInfo.id,
userName: userInfo.userName,
tenantId: userInfo.tenantId,
email: userInfo.email,
phone: userInfo.phone,
state: userInfo.state,
})
await userStore.setSessionId('')
await userStore.setUserInfo({})
await router.push({ path: 'login' })
}
})
}
return {
handleUpdate,
}
}
Loading…
Cancel
Save