skyouc
2025-06-22 fee38f39e36bcda9924f5b26dca609dda6b331e0
zy-asrs-flow/src/pages/account/setting/components/security.jsx
@@ -1,61 +1,105 @@
import { List } from 'antd';
import React from 'react';
const passwordStrength = {
  strong: <span className="strong">强</span>,
  medium: <span className="medium">中</span>,
  weak: <span className="weak">弱 Weak</span>,
};
const SecurityView = () => {
  const getData = () => [
    {
      title: '账户密码',
      description: (
        <>
          当前密码强度:
          {passwordStrength.strong}
        </>
      ),
      actions: [<a key="Modify">修改</a>],
    },
    {
      title: '密保手机',
      description: `已绑定手机:138****8293`,
      actions: [<a key="Modify">修改</a>],
    },
    {
      title: '密保问题',
      description: '未设置密保问题,密保问题可有效保护账户安全',
      actions: [<a key="Set">设置</a>],
    },
    {
      title: '备用邮箱',
      description: `已绑定邮箱:ant***sign.com`,
      actions: [<a key="Modify">修改</a>],
    },
    {
      title: 'MFA 设备',
      description: '未绑定 MFA 设备,绑定后,可以进行二次确认',
      actions: [<a key="bind">绑定</a>],
    },
  ];
  const data = getData();
  return (
    <>
      <List
        itemLayout="horizontal"
        dataSource={data}
        renderItem={(item) => (
          <List.Item actions={item.actions}>
            <List.Item.Meta title={item.title} description={item.description} />
          </List.Item>
        )}
      />
    </>
  );
};
export default SecurityView;
import { Card, Form, message } from 'antd';
import React from 'react';
import {
  ProForm,
  ProFormText
} from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { useModel } from '@umijs/max';
import Http from '@/utils/http';
const resetPwd = async (val, form, intl) => {
  const hide = message.loading(intl.formatMessage({ id: 'page.updating', defaultMessage: '正在修改' }));
  try {
    const resp = await Http.doPost('api/user/reset/pwd', val);
    if (resp.code === 200) {
      message.success(intl.formatMessage({ id: 'page.update.success', defaultMessage: '修改成功' }));
      form.resetFields();
      return true;
    } else {
      message.error(resp.msg);
      return false;
    }
  } catch (error) {
    message.error(intl.formatMessage({ id: 'page.update.fail', defaultMessage: '修改失败请重试!' }));
    return false;
  } finally {
    hide();
  }
};
const SecurityView = () => {
  const intl = useIntl();
  const [form] = Form.useForm();
  const { initialState } = useModel('@@initialState');
  const { currentUser } = initialState || {};
  const handleFinish = (values) => {
    resetPwd({ ...values, id: currentUser.id }, form, intl);
  }
  return (
    <>
      <Card>
        <ProForm
          form={form}
          layout="vertical"
          onFinish={handleFinish}
          submitter={{
            searchConfig: {
              submitText: intl.formatMessage({ id: 'personal.security.button.name', defaultMessage: '修改密码' }),
            },
            render: (_, dom) => dom[1],
          }}
        >
          <ProFormText.Password
            width="md"
            name="oldPwd"
            label={intl.formatMessage({ id: 'personal.security.cur.pwd', defaultMessage: '当前密码' })}
            rules={[
              {
                required: true,
              },
            ]}
          />
          <ProFormText.Password
            width="md"
            name="password"
            label={intl.formatMessage({ id: 'personal.security.new.pwd', defaultMessage: '新密码' })}
            rules={[
              {
                required: true,
              },
              {
                validator(_, value) {
                  if (value.length >= 4 && value.length <= 16) {
                    return Promise.resolve();
                  }
                  return Promise.reject(new Error(intl.formatMessage({ id: 'personal.security.new.pwd.rule.length', defaultMessage: '新密码必须是4到16个字符!' })));
                },
              },
            ]}
          />
          <ProFormText.Password
            width="md"
            name="passwordRepeat"
            label={intl.formatMessage({ id: 'personal.security.new.pwd.confirm', defaultMessage: '确认密码' })}
            rules={[
              {
                required: true,
              },
              {
                validator(_, value) {
                  if (form.getFieldValue('password') === value) return Promise.resolve();
                  return Promise.reject(new Error(intl.formatMessage({ id: 'personal.security.new.pwd.rule.check', defaultMessage: '两次输入的密码不相符!' })));
                }
              }
            ]}
          />
        </ProForm>
      </Card>
    </>
  );
};
export default SecurityView;