LockAction.tsx 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import './LockAction.less';
  2. import { defineComponent } from 'vue';
  3. import { BasicModal, useModalInner } from '/@/components/Modal/index';
  4. import { Button } from '/@/components/Button';
  5. import { BasicForm, useForm } from '/@/components/Form/index';
  6. import headerImg from '/@/assets/images/header.jpg';
  7. import { appStore } from '/@/store/modules/app';
  8. import { userStore } from '/@/store/modules/user';
  9. import { useI18n } from '/@/hooks/web/useI18n';
  10. const prefixCls = 'lock-modal';
  11. export default defineComponent({
  12. name: 'LockModal',
  13. setup(_, { attrs }) {
  14. const { t } = useI18n();
  15. const [register, { closeModal }] = useModalInner();
  16. const [registerForm, { validateFields, resetFields }] = useForm({
  17. showActionButtonGroup: false,
  18. schemas: [
  19. {
  20. field: 'password',
  21. label: t('layout.header.lockScreenPassword'),
  22. component: 'InputPassword',
  23. required: true,
  24. },
  25. ],
  26. });
  27. async function lock(valid = true) {
  28. let password: string | undefined = '';
  29. try {
  30. if (!valid) {
  31. password = undefined;
  32. } else {
  33. const values = (await validateFields()) as any;
  34. password = values.password;
  35. }
  36. closeModal();
  37. appStore.commitLockInfoState({
  38. isLock: true,
  39. pwd: password,
  40. });
  41. await resetFields();
  42. } catch (error) {}
  43. }
  44. return () => (
  45. <BasicModal
  46. footer={null}
  47. title={t('layout.header.lockScreen')}
  48. {...attrs}
  49. class={prefixCls}
  50. onRegister={register}
  51. >
  52. {() => (
  53. <div class={`${prefixCls}__entry`}>
  54. <div class={`${prefixCls}__header`}>
  55. <img src={headerImg} class={`${prefixCls}__header-img`} />
  56. <p class={`${prefixCls}__header-name`}>{userStore.getUserInfoState.realName}</p>
  57. </div>
  58. <BasicForm onRegister={registerForm} layout="vertical" />
  59. <div class={`${prefixCls}__footer`}>
  60. <Button type="primary" block class="mt-2" onClick={lock}>
  61. {() => t('layout.header.lockScreenBtn')}
  62. </Button>
  63. <Button block class="mt-2" onClick={lock.bind(null, false)}>
  64. {() => t('layout.header.notLockScreenPassword')}
  65. </Button>
  66. </div>
  67. </div>
  68. )}
  69. </BasicModal>
  70. );
  71. },
  72. });