LockAction.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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 { userStore } from '/@/store/modules/user';
  8. import { useI18n } from '/@/hooks/web/useI18n';
  9. import { lockStore } from '/@/store/modules/lock';
  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() {
  28. const values = (await validateFields()) as any;
  29. const password: string | undefined = values.password;
  30. closeModal();
  31. lockStore.commitLockInfoState({
  32. isLock: true,
  33. pwd: password,
  34. });
  35. await resetFields();
  36. }
  37. return () => (
  38. <BasicModal
  39. footer={null}
  40. title={t('layout.header.lockScreen')}
  41. {...attrs}
  42. class={prefixCls}
  43. onRegister={register}
  44. >
  45. {() => (
  46. <div class={`${prefixCls}__entry`}>
  47. <div class={`${prefixCls}__header`}>
  48. <img src={headerImg} class={`${prefixCls}__header-img`} />
  49. <p class={`${prefixCls}__header-name`}>{userStore.getUserInfoState.realName}</p>
  50. </div>
  51. <BasicForm onRegister={registerForm} />
  52. <div class={`${prefixCls}__footer`}>
  53. <Button type="primary" block class="mt-2" onClick={lock}>
  54. {() => t('layout.header.lockScreenBtn')}
  55. </Button>
  56. </div>
  57. </div>
  58. )}
  59. </BasicModal>
  60. );
  61. },
  62. });