|  | @@ -1,216 +1,220 @@
 | 
	
		
			
				|  |  | -import { defineComponent, reactive, ref } from 'vue';
 | 
	
		
			
				|  |  | -import styles from '../index.module.less';
 | 
	
		
			
				|  |  | -import lockIcon from '../images/lock-icon.png';
 | 
	
		
			
				|  |  | -import useIcon from '../images/user-icon.png';
 | 
	
		
			
				|  |  | -import openEye from '../images/openEye.png';
 | 
	
		
			
				|  |  | -import closeEye from '../images/closeEye.png';
 | 
	
		
			
				|  |  | -import {
 | 
	
		
			
				|  |  | -  useMessage,
 | 
	
		
			
				|  |  | -  NForm,
 | 
	
		
			
				|  |  | -  NFormItem,
 | 
	
		
			
				|  |  | -  NInput,
 | 
	
		
			
				|  |  | -  NButton,
 | 
	
		
			
				|  |  | -  NCheckbox
 | 
	
		
			
				|  |  | -} from 'naive-ui';
 | 
	
		
			
				|  |  | -import { useRoute, useRouter } from 'vue-router';
 | 
	
		
			
				|  |  | -import { PageEnum } from '/src/enums/pageEnum';
 | 
	
		
			
				|  |  | -import { storage } from '@/utils/storage';
 | 
	
		
			
				|  |  | -import { useUserStore } from '/src/store/modules/users';
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -interface FormState {
 | 
	
		
			
				|  |  | -  username: string;
 | 
	
		
			
				|  |  | -  password: string;
 | 
	
		
			
				|  |  | -  grant_type?: string;
 | 
	
		
			
				|  |  | -  loginType?: string;
 | 
	
		
			
				|  |  | -  client_id?: string;
 | 
	
		
			
				|  |  | -  client_secret?: string;
 | 
	
		
			
				|  |  | -  clientId?: string;
 | 
	
		
			
				|  |  | -  clientSecret?: string;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -export default defineComponent({
 | 
	
		
			
				|  |  | -  name: 'codeLogin',
 | 
	
		
			
				|  |  | -  props: {
 | 
	
		
			
				|  |  | -    phone: {
 | 
	
		
			
				|  |  | -      type: String,
 | 
	
		
			
				|  |  | -      default: ''
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  emits: ['changType', 'update:phone'],
 | 
	
		
			
				|  |  | -  setup(props, { emit }) {
 | 
	
		
			
				|  |  | -    const router = useRouter();
 | 
	
		
			
				|  |  | -    // const route = useRoute();
 | 
	
		
			
				|  |  | -    const formRef = ref();
 | 
	
		
			
				|  |  | -    const message = useMessage();
 | 
	
		
			
				|  |  | -    const loading = ref(false);
 | 
	
		
			
				|  |  | -    // const autoLogin = ref(true);
 | 
	
		
			
				|  |  | -    // const LOGIN_NAME = PageEnum.BASE_LOGIN_NAME;
 | 
	
		
			
				|  |  | -    const showPwd = ref(false);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    const userStore = useUserStore();
 | 
	
		
			
				|  |  | -    let formInline = reactive({
 | 
	
		
			
				|  |  | -      username: '',
 | 
	
		
			
				|  |  | -      password: '',
 | 
	
		
			
				|  |  | -      isCaptcha: true
 | 
	
		
			
				|  |  | -    });
 | 
	
		
			
				|  |  | -    const formInlineHistory = storage.get('userInfo-teacher');
 | 
	
		
			
				|  |  | -    if (formInlineHistory) {
 | 
	
		
			
				|  |  | -      formInline = reactive({ ...JSON.parse(formInlineHistory) });
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if (formInline.username) {
 | 
	
		
			
				|  |  | -      if (formInline.username !== props.phone && props.phone) {
 | 
	
		
			
				|  |  | -        formInline.username = props.phone;
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        emit('update:phone', formInline.username);
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    } else {
 | 
	
		
			
				|  |  | -      if (props.phone) {
 | 
	
		
			
				|  |  | -        formInline.username = props.phone;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    const handleSubmit = async () => {
 | 
	
		
			
				|  |  | -      formRef.value.validate(async (errors: any) => {
 | 
	
		
			
				|  |  | -        if (!errors) {
 | 
	
		
			
				|  |  | -          const { username, password } = formInline;
 | 
	
		
			
				|  |  | -          loading.value = true;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -          const params: FormState = {
 | 
	
		
			
				|  |  | -            username,
 | 
	
		
			
				|  |  | -            password,
 | 
	
		
			
				|  |  | -            loginType: 'PASSWORD',
 | 
	
		
			
				|  |  | -            grant_type: 'password',
 | 
	
		
			
				|  |  | -            client_id: 'cooleshow-teacher',
 | 
	
		
			
				|  |  | -            client_secret: 'cooleshow-teacher'
 | 
	
		
			
				|  |  | -          };
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -          try {
 | 
	
		
			
				|  |  | -            await userStore.login(params);
 | 
	
		
			
				|  |  | -            message.destroyAll();
 | 
	
		
			
				|  |  | -            //  判断是否勾选自动登录
 | 
	
		
			
				|  |  | -            if (formInline.isCaptcha) {
 | 
	
		
			
				|  |  | -              storage.set('userInfo-teacher', JSON.stringify(formInline));
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | -              storage.set(
 | 
	
		
			
				|  |  | -                'userInfo-teacher',
 | 
	
		
			
				|  |  | -                JSON.stringify({ ...formInline, password: '', isCaptcha: true })
 | 
	
		
			
				|  |  | -              );
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // route.query?.redirect ||
 | 
	
		
			
				|  |  | -            const toPath = decodeURIComponent('/' as string);
 | 
	
		
			
				|  |  | -            console.log(toPath, 'toPath');
 | 
	
		
			
				|  |  | -            message.success('登录成功,即将进入系统');
 | 
	
		
			
				|  |  | -            router.replace(toPath);
 | 
	
		
			
				|  |  | -            // if (route.name === LOGIN_NAME) {
 | 
	
		
			
				|  |  | -            //   router.replace('/');
 | 
	
		
			
				|  |  | -            // } else router.replace(toPath);
 | 
	
		
			
				|  |  | -          } catch (e: any) {
 | 
	
		
			
				|  |  | -            console.log(e, 'e');
 | 
	
		
			
				|  |  | -          } finally {
 | 
	
		
			
				|  |  | -            loading.value = false;
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      });
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    return () => (
 | 
	
		
			
				|  |  | -      <div class={styles['view-account-form-wrap']}>
 | 
	
		
			
				|  |  | -        {/* <div class={styles.formTitle}>
 | 
	
		
			
				|  |  | -      <div class={styles.dot}></div>
 | 
	
		
			
				|  |  | -      酷乐秀课堂乐器
 | 
	
		
			
				|  |  | -    </div> */}
 | 
	
		
			
				|  |  | -        <NForm
 | 
	
		
			
				|  |  | -          ref={formRef}
 | 
	
		
			
				|  |  | -          label-placement="left"
 | 
	
		
			
				|  |  | -          size="large"
 | 
	
		
			
				|  |  | -          model={formInline}>
 | 
	
		
			
				|  |  | -          <NFormItem
 | 
	
		
			
				|  |  | -            path="username"
 | 
	
		
			
				|  |  | -            rule={[
 | 
	
		
			
				|  |  | -              { required: true, message: '请输入用户名', trigger: 'blur' }
 | 
	
		
			
				|  |  | -            ]}>
 | 
	
		
			
				|  |  | -            <NInput
 | 
	
		
			
				|  |  | -              maxlength={11}
 | 
	
		
			
				|  |  | -              v-model:value={formInline.username}
 | 
	
		
			
				|  |  | -              placeholder="请输入用户名"
 | 
	
		
			
				|  |  | -              onInput={(val: any) => {
 | 
	
		
			
				|  |  | -                emit('update:phone', val);
 | 
	
		
			
				|  |  | -              }}>
 | 
	
		
			
				|  |  | -              {{
 | 
	
		
			
				|  |  | -                prefix: () => (
 | 
	
		
			
				|  |  | -                  <img src={useIcon} class={styles.prefixIcon} alt="" />
 | 
	
		
			
				|  |  | -                )
 | 
	
		
			
				|  |  | -              }}
 | 
	
		
			
				|  |  | -            </NInput>
 | 
	
		
			
				|  |  | -          </NFormItem>
 | 
	
		
			
				|  |  | -          <NFormItem
 | 
	
		
			
				|  |  | -            path="password"
 | 
	
		
			
				|  |  | -            rule={[{ required: true, message: '请输入密码', trigger: 'blur' }]}>
 | 
	
		
			
				|  |  | -            <NInput
 | 
	
		
			
				|  |  | -              v-model:value={formInline.password}
 | 
	
		
			
				|  |  | -              type="text"
 | 
	
		
			
				|  |  | -              showPasswordOn="click"
 | 
	
		
			
				|  |  | -              placeholder="请输入密码"
 | 
	
		
			
				|  |  | -              inputProps={{ autocomplete: 'off' }}
 | 
	
		
			
				|  |  | -              class={[showPwd.value ? '' : styles['no-pwd']]}
 | 
	
		
			
				|  |  | -              onKeydown={(e: KeyboardEvent) => {
 | 
	
		
			
				|  |  | -                if (e.code === 'Enter' || e.code === 'NumpadEnter') {
 | 
	
		
			
				|  |  | -                  handleSubmit();
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -              }}>
 | 
	
		
			
				|  |  | -              {{
 | 
	
		
			
				|  |  | -                prefix: () => (
 | 
	
		
			
				|  |  | -                  <img src={lockIcon} class={styles.prefixIcon} alt="" />
 | 
	
		
			
				|  |  | -                ),
 | 
	
		
			
				|  |  | -                suffix: () => (
 | 
	
		
			
				|  |  | -                  <img
 | 
	
		
			
				|  |  | -                    src={showPwd.value ? openEye : closeEye}
 | 
	
		
			
				|  |  | -                    class={styles.pwdIcon}
 | 
	
		
			
				|  |  | -                    alt=""
 | 
	
		
			
				|  |  | -                    onClick={() => {
 | 
	
		
			
				|  |  | -                      showPwd.value = !showPwd.value;
 | 
	
		
			
				|  |  | -                    }}
 | 
	
		
			
				|  |  | -                  />
 | 
	
		
			
				|  |  | -                )
 | 
	
		
			
				|  |  | -              }}
 | 
	
		
			
				|  |  | -            </NInput>
 | 
	
		
			
				|  |  | -          </NFormItem>
 | 
	
		
			
				|  |  | -          <NFormItem class={styles['default-color']}>
 | 
	
		
			
				|  |  | -            <div class={[styles['flex'], styles['justify-between']]}>
 | 
	
		
			
				|  |  | -              <div class={styles['flex-initial']}>
 | 
	
		
			
				|  |  | -                <NCheckbox v-model:checked={formInline.isCaptcha}>
 | 
	
		
			
				|  |  | -                  记住密码
 | 
	
		
			
				|  |  | -                </NCheckbox>
 | 
	
		
			
				|  |  | -              </div>
 | 
	
		
			
				|  |  | -            </div>
 | 
	
		
			
				|  |  | -          </NFormItem>
 | 
	
		
			
				|  |  | -          <NFormItem>
 | 
	
		
			
				|  |  | -            <NButton
 | 
	
		
			
				|  |  | -              class={styles.submitBtm}
 | 
	
		
			
				|  |  | -              type="primary"
 | 
	
		
			
				|  |  | -              onClick={handleSubmit}
 | 
	
		
			
				|  |  | -              size="large"
 | 
	
		
			
				|  |  | -              disabled={loading.value}
 | 
	
		
			
				|  |  | -              loading={loading.value}
 | 
	
		
			
				|  |  | -              block>
 | 
	
		
			
				|  |  | -              立即登录
 | 
	
		
			
				|  |  | -            </NButton>
 | 
	
		
			
				|  |  | -          </NFormItem>
 | 
	
		
			
				|  |  | -          <NFormItem>
 | 
	
		
			
				|  |  | -            <NButton
 | 
	
		
			
				|  |  | -              text
 | 
	
		
			
				|  |  | -              class={styles.forgetBtm}
 | 
	
		
			
				|  |  | -              onClick={() => {
 | 
	
		
			
				|  |  | -                emit('changType');
 | 
	
		
			
				|  |  | -              }}
 | 
	
		
			
				|  |  | -              size="large"
 | 
	
		
			
				|  |  | -              block>
 | 
	
		
			
				|  |  | -              忘记密码
 | 
	
		
			
				|  |  | -            </NButton>
 | 
	
		
			
				|  |  | -          </NFormItem>
 | 
	
		
			
				|  |  | -        </NForm>
 | 
	
		
			
				|  |  | -      </div>
 | 
	
		
			
				|  |  | -    );
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -});
 | 
	
		
			
				|  |  | +import { defineComponent, reactive, ref } from 'vue';
 | 
	
		
			
				|  |  | +import styles from '../index.module.less';
 | 
	
		
			
				|  |  | +import lockIcon from '../images/lock-icon.png';
 | 
	
		
			
				|  |  | +import useIcon from '../images/user-icon.png';
 | 
	
		
			
				|  |  | +import openEye from '../images/openEye.png';
 | 
	
		
			
				|  |  | +import closeEye from '../images/closeEye.png';
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  useMessage,
 | 
	
		
			
				|  |  | +  NForm,
 | 
	
		
			
				|  |  | +  NFormItem,
 | 
	
		
			
				|  |  | +  NInput,
 | 
	
		
			
				|  |  | +  NButton,
 | 
	
		
			
				|  |  | +  NCheckbox
 | 
	
		
			
				|  |  | +} from 'naive-ui';
 | 
	
		
			
				|  |  | +import { useRoute, useRouter } from 'vue-router';
 | 
	
		
			
				|  |  | +import { PageEnum } from '/src/enums/pageEnum';
 | 
	
		
			
				|  |  | +import { storage } from '@/utils/storage';
 | 
	
		
			
				|  |  | +import { useUserStore } from '/src/store/modules/users';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +interface FormState {
 | 
	
		
			
				|  |  | +  username: string;
 | 
	
		
			
				|  |  | +  password: string;
 | 
	
		
			
				|  |  | +  grant_type?: string;
 | 
	
		
			
				|  |  | +  loginType?: string;
 | 
	
		
			
				|  |  | +  client_id?: string;
 | 
	
		
			
				|  |  | +  client_secret?: string;
 | 
	
		
			
				|  |  | +  clientId?: string;
 | 
	
		
			
				|  |  | +  clientSecret?: string;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default defineComponent({
 | 
	
		
			
				|  |  | +  name: 'codeLogin',
 | 
	
		
			
				|  |  | +  props: {
 | 
	
		
			
				|  |  | +    phone: {
 | 
	
		
			
				|  |  | +      type: String,
 | 
	
		
			
				|  |  | +      default: ''
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  emits: ['changType', 'update:phone'],
 | 
	
		
			
				|  |  | +  setup(props, { emit }) {
 | 
	
		
			
				|  |  | +    const router = useRouter();
 | 
	
		
			
				|  |  | +    // const route = useRoute();
 | 
	
		
			
				|  |  | +    const formRef = ref();
 | 
	
		
			
				|  |  | +    const message = useMessage();
 | 
	
		
			
				|  |  | +    const loading = ref(false);
 | 
	
		
			
				|  |  | +    // const autoLogin = ref(true);
 | 
	
		
			
				|  |  | +    // const LOGIN_NAME = PageEnum.BASE_LOGIN_NAME;
 | 
	
		
			
				|  |  | +    const showPwd = ref(false);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const userStore = useUserStore();
 | 
	
		
			
				|  |  | +    let formInline = reactive({
 | 
	
		
			
				|  |  | +      username: '',
 | 
	
		
			
				|  |  | +      password: '',
 | 
	
		
			
				|  |  | +      isCaptcha: false
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    const formInlineHistory = storage.get('userInfo-teacher');
 | 
	
		
			
				|  |  | +    if (formInlineHistory) {
 | 
	
		
			
				|  |  | +      formInline = reactive({ ...JSON.parse(formInlineHistory) });
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (formInline.username) {
 | 
	
		
			
				|  |  | +      if (formInline.username !== props.phone && props.phone) {
 | 
	
		
			
				|  |  | +        formInline.username = props.phone;
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        emit('update:phone', formInline.username);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +      if (props.phone) {
 | 
	
		
			
				|  |  | +        formInline.username = props.phone;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const handleSubmit = async () => {
 | 
	
		
			
				|  |  | +      formRef.value.validate(async (errors: any) => {
 | 
	
		
			
				|  |  | +        if (!errors) {
 | 
	
		
			
				|  |  | +          const { username, password } = formInline;
 | 
	
		
			
				|  |  | +          loading.value = true;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          const params: FormState = {
 | 
	
		
			
				|  |  | +            username,
 | 
	
		
			
				|  |  | +            password,
 | 
	
		
			
				|  |  | +            loginType: 'PASSWORD',
 | 
	
		
			
				|  |  | +            grant_type: 'password',
 | 
	
		
			
				|  |  | +            client_id: 'cooleshow-teacher',
 | 
	
		
			
				|  |  | +            client_secret: 'cooleshow-teacher'
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          try {
 | 
	
		
			
				|  |  | +            await userStore.login(params);
 | 
	
		
			
				|  |  | +            message.destroyAll();
 | 
	
		
			
				|  |  | +            //  判断是否勾选自动登录
 | 
	
		
			
				|  |  | +            if (formInline.isCaptcha) {
 | 
	
		
			
				|  |  | +              storage.set('userInfo-teacher', JSON.stringify(formInline));
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +              storage.set(
 | 
	
		
			
				|  |  | +                'userInfo-teacher',
 | 
	
		
			
				|  |  | +                JSON.stringify({
 | 
	
		
			
				|  |  | +                  ...formInline,
 | 
	
		
			
				|  |  | +                  password: '',
 | 
	
		
			
				|  |  | +                  isCaptcha: false
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +              );
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // route.query?.redirect ||
 | 
	
		
			
				|  |  | +            const toPath = decodeURIComponent('/' as string);
 | 
	
		
			
				|  |  | +            console.log(toPath, 'toPath');
 | 
	
		
			
				|  |  | +            message.success('登录成功,即将进入系统');
 | 
	
		
			
				|  |  | +            router.replace(toPath);
 | 
	
		
			
				|  |  | +            // if (route.name === LOGIN_NAME) {
 | 
	
		
			
				|  |  | +            //   router.replace('/');
 | 
	
		
			
				|  |  | +            // } else router.replace(toPath);
 | 
	
		
			
				|  |  | +          } catch (e: any) {
 | 
	
		
			
				|  |  | +            console.log(e, 'e');
 | 
	
		
			
				|  |  | +          } finally {
 | 
	
		
			
				|  |  | +            loading.value = false;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    return () => (
 | 
	
		
			
				|  |  | +      <div class={styles['view-account-form-wrap']}>
 | 
	
		
			
				|  |  | +        {/* <div class={styles.formTitle}>
 | 
	
		
			
				|  |  | +      <div class={styles.dot}></div>
 | 
	
		
			
				|  |  | +      酷乐秀课堂乐器
 | 
	
		
			
				|  |  | +    </div> */}
 | 
	
		
			
				|  |  | +        <NForm
 | 
	
		
			
				|  |  | +          ref={formRef}
 | 
	
		
			
				|  |  | +          label-placement="left"
 | 
	
		
			
				|  |  | +          size="large"
 | 
	
		
			
				|  |  | +          model={formInline}>
 | 
	
		
			
				|  |  | +          <NFormItem
 | 
	
		
			
				|  |  | +            path="username"
 | 
	
		
			
				|  |  | +            rule={[
 | 
	
		
			
				|  |  | +              { required: true, message: '请输入用户名', trigger: 'blur' }
 | 
	
		
			
				|  |  | +            ]}>
 | 
	
		
			
				|  |  | +            <NInput
 | 
	
		
			
				|  |  | +              maxlength={11}
 | 
	
		
			
				|  |  | +              v-model:value={formInline.username}
 | 
	
		
			
				|  |  | +              placeholder="请输入用户名"
 | 
	
		
			
				|  |  | +              onInput={(val: any) => {
 | 
	
		
			
				|  |  | +                emit('update:phone', val);
 | 
	
		
			
				|  |  | +              }}>
 | 
	
		
			
				|  |  | +              {{
 | 
	
		
			
				|  |  | +                prefix: () => (
 | 
	
		
			
				|  |  | +                  <img src={useIcon} class={styles.prefixIcon} alt="" />
 | 
	
		
			
				|  |  | +                )
 | 
	
		
			
				|  |  | +              }}
 | 
	
		
			
				|  |  | +            </NInput>
 | 
	
		
			
				|  |  | +          </NFormItem>
 | 
	
		
			
				|  |  | +          <NFormItem
 | 
	
		
			
				|  |  | +            path="password"
 | 
	
		
			
				|  |  | +            rule={[{ required: true, message: '请输入密码', trigger: 'blur' }]}>
 | 
	
		
			
				|  |  | +            <NInput
 | 
	
		
			
				|  |  | +              v-model:value={formInline.password}
 | 
	
		
			
				|  |  | +              type="text"
 | 
	
		
			
				|  |  | +              showPasswordOn="click"
 | 
	
		
			
				|  |  | +              placeholder="请输入密码"
 | 
	
		
			
				|  |  | +              inputProps={{ autocomplete: 'off' }}
 | 
	
		
			
				|  |  | +              class={[showPwd.value ? '' : styles['no-pwd']]}
 | 
	
		
			
				|  |  | +              onKeydown={(e: KeyboardEvent) => {
 | 
	
		
			
				|  |  | +                if (e.code === 'Enter' || e.code === 'NumpadEnter') {
 | 
	
		
			
				|  |  | +                  handleSubmit();
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              }}>
 | 
	
		
			
				|  |  | +              {{
 | 
	
		
			
				|  |  | +                prefix: () => (
 | 
	
		
			
				|  |  | +                  <img src={lockIcon} class={styles.prefixIcon} alt="" />
 | 
	
		
			
				|  |  | +                ),
 | 
	
		
			
				|  |  | +                suffix: () => (
 | 
	
		
			
				|  |  | +                  <img
 | 
	
		
			
				|  |  | +                    src={showPwd.value ? openEye : closeEye}
 | 
	
		
			
				|  |  | +                    class={styles.pwdIcon}
 | 
	
		
			
				|  |  | +                    alt=""
 | 
	
		
			
				|  |  | +                    onClick={() => {
 | 
	
		
			
				|  |  | +                      showPwd.value = !showPwd.value;
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  | +                  />
 | 
	
		
			
				|  |  | +                )
 | 
	
		
			
				|  |  | +              }}
 | 
	
		
			
				|  |  | +            </NInput>
 | 
	
		
			
				|  |  | +          </NFormItem>
 | 
	
		
			
				|  |  | +          <NFormItem class={styles['default-color']}>
 | 
	
		
			
				|  |  | +            <div class={[styles['flex'], styles['justify-between']]}>
 | 
	
		
			
				|  |  | +              <div class={styles['flex-initial']}>
 | 
	
		
			
				|  |  | +                <NCheckbox v-model:checked={formInline.isCaptcha}>
 | 
	
		
			
				|  |  | +                  记住密码
 | 
	
		
			
				|  |  | +                </NCheckbox>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </NFormItem>
 | 
	
		
			
				|  |  | +          <NFormItem>
 | 
	
		
			
				|  |  | +            <NButton
 | 
	
		
			
				|  |  | +              class={styles.submitBtm}
 | 
	
		
			
				|  |  | +              type="primary"
 | 
	
		
			
				|  |  | +              onClick={handleSubmit}
 | 
	
		
			
				|  |  | +              size="large"
 | 
	
		
			
				|  |  | +              disabled={loading.value}
 | 
	
		
			
				|  |  | +              loading={loading.value}
 | 
	
		
			
				|  |  | +              block>
 | 
	
		
			
				|  |  | +              立即登录
 | 
	
		
			
				|  |  | +            </NButton>
 | 
	
		
			
				|  |  | +          </NFormItem>
 | 
	
		
			
				|  |  | +          <NFormItem>
 | 
	
		
			
				|  |  | +            <NButton
 | 
	
		
			
				|  |  | +              text
 | 
	
		
			
				|  |  | +              class={styles.forgetBtm}
 | 
	
		
			
				|  |  | +              onClick={() => {
 | 
	
		
			
				|  |  | +                emit('changType');
 | 
	
		
			
				|  |  | +              }}
 | 
	
		
			
				|  |  | +              size="large"
 | 
	
		
			
				|  |  | +              block>
 | 
	
		
			
				|  |  | +              忘记密码
 | 
	
		
			
				|  |  | +            </NButton>
 | 
	
		
			
				|  |  | +          </NFormItem>
 | 
	
		
			
				|  |  | +        </NForm>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +});
 |