message-verify 1.0.1-beta.74 → 1.0.1-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,128 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useRef, useEffect, useState } from 'react';
3
- import { Modal, Input, Button, message } from '../compoments/index.js';
4
- import Api from '../utils/resource.js';
5
- import t from '../utils/i18n.js';
6
- import { axios } from '@yqg/resource';
7
- import eventEmitter from '../utils/eventEmitter.js';
8
- const CreateMessageVerifyModal = ({ props }) => {
9
- const [visible, setVisible] = useState(true);
10
- const [countdown, setCountdown] = useState(60);
11
- const [otp, setOtp] = useState('');
12
- const [captchaImage, setCaptchaImage] = useState('');
13
- const [captchCode, setCaptchCode] = useState('');
14
- const [captchaKey, setCaptchaKey] = useState('');
15
- const { data, http, lang, sendApi = '/admin/sms/send', config, apiResolve, apiPromiseToEmpty, onClose } = props || {};
16
- const dataObj = JSON.parse(data || '{}');
17
- const { mobile, verifyCodeKey } = dataObj || {};
18
- const resolveRef = useRef(null);
19
- const rejectRef = useRef(null);
20
- const getKey = async () => {
21
- try {
22
- const res = await Api.getCaptchaKey();
23
- const { body: key } = res.data || {};
24
- setCaptchaKey(key);
25
- if (key) {
26
- const image = Api.getCaptchaImgUrl(key);
27
- setCaptchaImage(image);
28
- }
29
- }
30
- catch (err) {
31
- const msg = typeof err === 'object' && err !== null && 'message' in err
32
- ? err.message
33
- : String(err);
34
- message.error(msg);
35
- }
36
- };
37
- useEffect(() => {
38
- let timer = null;
39
- if (visible && countdown > 0) {
40
- timer = setInterval(() => {
41
- setCountdown((prev) => prev - 1);
42
- }, 1000);
43
- }
44
- if (countdown === 0) {
45
- getKey();
46
- }
47
- return () => {
48
- if (timer)
49
- clearInterval(timer);
50
- };
51
- }, [visible, countdown]);
52
- useEffect(() => {
53
- const handler = (data) => {
54
- // 这里处理收到的数据
55
- console.log('收到 response 事件:', data);
56
- if (data === 0) {
57
- resolveRef.current({
58
- code: data,
59
- });
60
- }
61
- else {
62
- rejectRef.current({
63
- code: data,
64
- });
65
- }
66
- };
67
- eventEmitter.on('response', handler);
68
- return () => {
69
- eventEmitter.off('response', handler);
70
- };
71
- }, []);
72
- const handleResend = async () => {
73
- const formData = new FormData();
74
- formData.append('captchaKey', captchaKey);
75
- formData.append('captcha', captchCode);
76
- // 重新发送验证码
77
- const res = await axios.post(sendApi, formData) || {};
78
- const { code } = res.data?.status || {};
79
- if (code !== 0) {
80
- return;
81
- }
82
- message.success(t('sendSuccess', lang));
83
- // 重置倒计时、验证码
84
- setCountdown(60);
85
- setOtp('');
86
- };
87
- return (_jsxs(Modal, { width: 420, visible: visible, onClose: () => {
88
- setVisible(false);
89
- apiPromiseToEmpty?.();
90
- onClose?.();
91
- }, children: [_jsx("div", { style: { fontSize: 14, color: '#666' }, children: t('alreadySend', lang, { phone: mobile }) }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8, marginTop: 12 }, children: [_jsx(Input.OTP, { length: 6, value: otp, onChange: async (val) => {
92
- setOtp(val);
93
- if (val.length === 6) {
94
- try {
95
- const res = await new Promise((resolve, reject) => {
96
- resolveRef.current = resolve;
97
- rejectRef.current = reject;
98
- http({
99
- ...config,
100
- headers: {
101
- ...http.defaults.headers.common,
102
- 'sms-code': val,
103
- 'sms-code-key': verifyCodeKey,
104
- 'Content-Type': config.headers['Content-Type'],
105
- }
106
- });
107
- });
108
- if (res?.code === 0 || res?.data?.status?.code === 0) {
109
- apiResolve(res);
110
- setVisible(false);
111
- }
112
- else {
113
- message.error(t('verifyFail', lang));
114
- setOtp('');
115
- }
116
- }
117
- catch (error) {
118
- console.warn('catch=>error', error);
119
- message.error(t('verifyFail', lang));
120
- setOtp('');
121
- }
122
- }
123
- } }), _jsx(Button, { disabled: countdown > 0 || !captchCode, onClick: handleResend, style: { padding: '8px' }, children: countdown > 0 ? t('countDownSecound', lang, { countdown }) : t('reSend', lang) })] }), countdown > 0 ? null :
124
- _jsxs("div", { style: { marginTop: 12, display: 'flex', alignItems: 'center' }, children: [_jsx(Input, { placeholder: t('pleaseEnterPicVerifyCode', lang), onChange: (e) => {
125
- setCaptchCode(e);
126
- }, style: { width: 300 } }), captchaImage && _jsx("img", { src: captchaImage, alt: t('verifyCode', lang), style: { width: 100, height: 30, marginLeft: 8 }, onClick: getKey })] }), (countdown > 0 || captchCode) ? null : _jsx("div", { style: { fontSize: 14, color: 'red' }, children: t('pleaseEnterAndSend', lang) }), _jsx("div", { style: { fontSize: 14, color: '#666', marginTop: 12 }, children: t('chidoriOpenPro', lang) })] }));
127
- };
128
- export default CreateMessageVerifyModal;
@@ -1,10 +0,0 @@
1
- type Listener = (...args: any[]) => void;
2
- declare class EventEmitter {
3
- private events;
4
- on(event: string, listener: Listener): void;
5
- off(event: string, listener: Listener): void;
6
- emit(event: string, ...args: any[]): void;
7
- once(event: string, listener: Listener): void;
8
- }
9
- declare const eventEmitter: EventEmitter;
10
- export default eventEmitter;
@@ -1,28 +0,0 @@
1
- class EventEmitter {
2
- events = {};
3
- on(event, listener) {
4
- if (!this.events[event]) {
5
- this.events[event] = [];
6
- }
7
- this.events[event].push(listener);
8
- }
9
- off(event, listener) {
10
- if (!this.events[event])
11
- return;
12
- this.events[event] = this.events[event].filter(l => l !== listener);
13
- }
14
- emit(event, ...args) {
15
- if (!this.events[event])
16
- return;
17
- this.events[event].forEach(listener => listener(...args));
18
- }
19
- once(event, listener) {
20
- const onceListener = (...args) => {
21
- listener(...args);
22
- this.off(event, onceListener);
23
- };
24
- this.on(event, onceListener);
25
- }
26
- }
27
- const eventEmitter = new EventEmitter();
28
- export default eventEmitter;
@@ -1,2 +0,0 @@
1
- declare const _default: import("@yqg/resource").default & Record<"getCaptchaKey" | "reSendCode" | "getCaptchaImgUrl", import("@yqg/resource").CustomMethod>;
2
- export default _default;
@@ -1,7 +0,0 @@
1
- import { assign, customPost } from '@yqg/resource';
2
- const api = {
3
- getCaptchaKey: customPost('/messageVerify/admin/captcha/key'),
4
- reSendCode: customPost('/admin/sms/send'),
5
- getCaptchaImgUrl: (captchaKey) => { return `/messageVerify/admin/captcha/image/${captchaKey}`; },
6
- };
7
- export default assign(api);
@@ -1,33 +0,0 @@
1
- type Listener = (...args: any[]) => void;
2
-
3
- class EventEmitter {
4
- private events: Record<string, Listener[]> = {};
5
-
6
- on(event: string, listener: Listener) {
7
- if (!this.events[event]) {
8
- this.events[event] = [];
9
- }
10
- this.events[event].push(listener);
11
- }
12
-
13
- off(event: string, listener: Listener) {
14
- if (!this.events[event]) return;
15
- this.events[event] = this.events[event].filter(l => l !== listener);
16
- }
17
-
18
- emit(event: string, ...args: any[]) {
19
- if (!this.events[event]) return;
20
- this.events[event].forEach(listener => listener(...args));
21
- }
22
-
23
- once(event: string, listener: Listener) {
24
- const onceListener: Listener = (...args) => {
25
- listener(...args);
26
- this.off(event, onceListener);
27
- };
28
- this.on(event, onceListener);
29
- }
30
- }
31
-
32
- const eventEmitter = new EventEmitter();
33
- export default eventEmitter;
File without changes