落日与鲸
2025-02-22 8646f0866d09df5e8b5518e8094e451c29b87c48
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import { LockOutlined, SafetyOutlined, UserOutlined } from '@ant-design/icons';
import { ProForm, ProFormCaptcha, ProFormText } from '@ant-design/pro-components';
import { Modal } from 'antd';
import { forwardRef, useImperativeHandle, useRef } from 'react';
import { sendMessage } from './service.js';
 
const editPwd = ({ visible, onSave, onCancel }, ref) => {
  const captchaRef = useRef();
  const form = useRef();
  /**
   * 确定按钮事件
   */
  const okHandle = () => {
    form.current.validateFields().then((values) => {
      delete values.oldPassword
      onSave(values);
    });
  };
 
  useImperativeHandle(ref, () => {
    return {
      refreshData: (data) => {
        form.resetFields();
        form.setFieldsValue(data);
        setEditData(data);
      },
      clean: () => {
        form.resetFields();
      },
    };
  });
 
  return (
    <Modal
      getContainer={false}
      width="25%"
      destroyOnClose
      title={'修改密码'}
      open={visible}
      onCancel={() => onCancel(false)}
      onOk={okHandle}
    >
      <ProForm
        title="新建表单"
        formRef={form}
        submitter={{
          render: (props, doms) => {
            return [];
          },
        }}
      >
        <ProFormText
          name="phone"
          fieldProps={{
            prefix: <UserOutlined />,
          }}
          placeholder="请输入账号"
          rules={[
            {
              required: true,
              message: '请输入账号',
            },
            { pattern: /^1[0-9][0-9]\d{8}$/, message: '请输入正确的手机号' },
          ]}
        />
        <ProFormCaptcha
          onGetCaptcha={() => {
            return new Promise((resolve, reject) => {
              form.current
                .validateFields(['phone'])
                .then(async (value) => {
                  let success = await sendMessage({
                    phone : value.phone,
                  });
                  if (success.code == '200') {
                    resolve();
                  } else {
                    reject();
                  }
                })
                .catch((err) => {
                  reject();
                });
            });
          }}
          onTiming={(count) => {
          }}
          placeholder="请输入验证码"
          rules={[
            {
              required: true,
              message: '请输入验证码',
            },
          ]}
          fieldRef={captchaRef}
          fieldProps={{
            prefix: <SafetyOutlined />,
          }}
          name="phoneCode"
        />
        <ProFormText.Password
          name="oldPassword"
          fieldProps={{
            size: 'large',
            prefix: <LockOutlined />,
          }}
          placeholder="请输入新密码"
          rules={[
            {
              validator: (rule, value) => {
                return new Promise((resolve, reject) => {
                  if (!value) {
                    reject('请输入新密码');
                  }
                  resolve('');
                });
              },
            },
          ]}
        />
        <ProFormText.Password
          name="password"
          fieldProps={{
            size: 'large',
            prefix: <LockOutlined />,
          }}
          placeholder="请确认新密码"
          rules={[
            {
              validator: (rule, value) => {
                return new Promise((resolve, reject) => {
                  if (!value) {
                    reject('请再次输入新密码');   
                  }
                  if (value != form.current.getFieldValue('oldPassword')) {
                    reject('两次密码请保持一致');
                  }
                  resolve('');
                });
              },
            },
          ]}
        />
      </ProForm>
    </Modal>
  );
};
 
export default forwardRef(editPwd);