index.tsx 3.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 * 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.
 */

18
import { defineComponent, toRefs, withKeys } from 'vue'
19
import styles from './index.module.scss'
20
import { NInput, NButton, NSwitch, NForm, NFormItem } from 'naive-ui'
21
import { useForm } from './use-form'
22 23
import { useTranslate } from './use-translate'
import { useLogin } from './use-login'
24

25 26 27
const login = defineComponent({
  name: 'login',
  setup() {
28
    const { state, t, locale } = useForm()
29

30
    const { handleChange } = useTranslate(locale)
31

32
    const { handleLogin } = useLogin(state)
33

34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
    return { t, handleChange, handleLogin, ...toRefs(state) }
  },
  render() {
    return (
      <div class={styles.container}>
        <div class={styles['language-switch']}>
          <NSwitch
            onUpdateValue={this.handleChange}
            checked-value='en_US'
            unchecked-value='zh_CN'
          >
            {{
              checked: () => 'en_US',
              unchecked: () => 'zh_CN',
            }}
          </NSwitch>
50
        </div>
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
        <div class={styles['login-model']}>
          <div class={styles.logo}>
            <div class={styles['logo-img']} />
          </div>
          <div class={styles['form-model']}>
            <NForm rules={this.rules} ref='loginFormRef'>
              <NFormItem
                label={this.t('login.userName')}
                label-style={{ color: 'black' }}
                path='userName'
              >
                <NInput
                  type='text'
                  size='large'
                  v-model={[this.loginForm.userName, 'value']}
                  placeholder={this.t('login.userName_tips')}
                  autofocus
                  onKeydown={withKeys(this.handleLogin, ['enter'])}
                />
              </NFormItem>
              <NFormItem
                label={this.t('login.userPassword')}
                label-style={{ color: 'black' }}
                path='userPassword'
              >
                <NInput
                  type='password'
                  size='large'
                  v-model={[this.loginForm.userPassword, 'value']}
                  placeholder={this.t('login.userPassword_tips')}
                  onKeydown={withKeys(this.handleLogin, ['enter'])}
                />
              </NFormItem>
            </NForm>
            <NButton
              round
              type='info'
88 89 90
              disabled={
                !this.loginForm.userName || !this.loginForm.userPassword
              }
91 92
              style={{ width: '100%' }}
              onClick={this.handleLogin}
93
            >
94 95 96
              {this.t('login.login')}
            </NButton>
          </div>
97
        </div>
98
      </div>
99 100 101
    )
  },
})
102

103
export default login