注册验证码与账号弹出,修改密码

This commit is contained in:
孙景学
2025-07-28 13:14:17 +08:00
parent 0ac5c96438
commit 86ff7f2f26
9 changed files with 131 additions and 47 deletions

View File

@ -6,7 +6,7 @@ import { HomeOutlined } from '@ant-design/icons';
import DomesticForm from './supplier/DomesticForm';
import ForeignForm from './supplier/ForeignForm';
import Person from './supplier/Person';
import { addAgent, coscoSupplierBaseAdd, fetchSurveyQuestions } from '@/servers/api/register';
import { addAgent, coscoSupplierBaseAdd, fetchSurveyQuestions, sendPhoneCode, sendEmailCode } from '@/servers/api/register';
import './register.less';
interface supplierWithInputProps {
@ -57,27 +57,56 @@ const SupplierRegister: React.FC<supplierWithInputProps> = (props) => {
fetchQuestions();
}, []);
// 获取短信验证码
//倒计时
useEffect(() => {
if (countdown === 0) return;
const timer = setInterval(() => {
setCountdown(c => {
if (c === 1) {
clearInterval(timer);
return 0;
}
return c - 1;
});
}, 1000);
return () => clearInterval(timer);
}, [countdown]);
// 获取短信与邮箱验证码
const handleGetCaptcha = () => {
form
.validateFields(['contactPhone'])
.validateFields([['coscoSupplierBase']])
.then((values) => {
message.success(`验证码已发送至 ${values.contactPhone}`);
let count = 60;
setCountdown(count);
const timer = setInterval(() => {
count--;
setCountdown(count);
if (count === 0) {
clearInterval(timer);
const supplierType = values.coscoSupplierBase?.supplierType;
const contactsPhone = values.coscoSupplierBase?.contactsPhone;
const contactsEmail = values.coscoSupplierBase?.contactsEmail;
const phonePattern = /^1[3-9]\d{9}$/;
const emailPattern = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;
if (contactsPhone && phonePattern.test(contactsPhone) && supplierType === 'dvs') {
// 发送手机验证码
sendPhoneCode(contactsPhone);
message.success(`验证码已发送至 ${contactsPhone}`);
setCountdown(60);
} else if (contactsEmail && emailPattern.test(contactsEmail) && supplierType === 'ovs' ) {
// 发送邮箱验证码
sendEmailCode(contactsEmail);
message.success(`验证码已发送至 ${contactsEmail}`);
setCountdown(60);
} else {
if (supplierType === 'dvs') {
message.error('请输入正确的手机号');
} else if (supplierType === 'ovs') {
message.error('请输入正确的邮箱');
}
}, 1000);
}
})
.catch((errorInfo) => {
message.error('请输入正确的手机号');
.catch(() => {
message.error('请输入正确的信息');
});
};
const onFinishFailed = (errorInfo: any) => {
console.log('Failed:', errorInfo);
@ -114,19 +143,35 @@ const SupplierRegister: React.FC<supplierWithInputProps> = (props) => {
window.location.href = redirectRef.current;
return;
}
if (!supplierWithInput) {
message.success('注册成功,请登录');
history.push('/login');
Modal.success({
title: '注册成功,请登录',
content: (
<div>
<div>{response.data}</div>
</div>
),
onOk: () => {
// 确认后跳转
history.push('/login');
},
});
} else {
message.success(`${exitId ? '修改成功' : '注册成功'}`);
onOk?.();
Modal.success({
title: exitId ? '修改成功' : '注册成功',
content: (
<div>
<div>{response.data}</div>
</div>
),
onOk: () => {
onOk?.();
},
});
}
} else {
message.error(response.message || '注册失败,请重试');
}
}
} catch (error) {
console.error('注册出错:', error);
message.error('注册失败,请稍后重试');
} finally {
setLoading(false);
}
@ -260,7 +305,7 @@ const SupplierRegister: React.FC<supplierWithInputProps> = (props) => {
okText="我知道了"
cancelButtonProps={{ style: { display: 'none' } }}
destroyOnClose
// maskClosable={false}
// maskClosable={false}
>
<div style={{ maxHeight: '60vh', overflow: 'auto' }}>
<p></p>

View File

@ -298,7 +298,7 @@ const DomesticForm: React.FC<DomesticFormProps> = ({
</Col>
<Col span={8}>
<Form.Item
name="captcha"
name="encryptValue"
label="验证码"
rules={[{ required: true, message: '请输入验证码' }]}
>

View File

@ -102,7 +102,8 @@ const ForeignForm: React.FC<ForeignFormProps> = ({
</Form.Item>
</Col>
<Col span={8}>
<Form.Item name={['coscoSupplierBase', 'vat']} label="税号">
<Form.Item name={['coscoSupplierBase', 'vat']} label="税号"
rules={[{ required: true, message: '请输入税号' }]}>
<Input placeholder="请输入增值税号" />
</Form.Item>
</Col>
@ -289,7 +290,7 @@ const ForeignForm: React.FC<ForeignFormProps> = ({
</Col>
<Col span={8}>
<Form.Item
name="captcha"
name="encryptValue"
label="验证码"
rules={[
{ required: true, message: '请输入验证码' },
@ -308,8 +309,9 @@ const ForeignForm: React.FC<ForeignFormProps> = ({
</Form.Item>
</Col> */}
<Col span={8}>
<Form.Item name={['coscoSupplierBase', 'contactsPhone']} label="联系电话">
<Input placeholder="请输入企业联系电话" />
<Form.Item name={['coscoSupplierBase', 'contactsPhone']} label="联系电话"
rules={[{ required: true, message: '请输入联系电话' }]}>
<Input placeholder="请输入联系电话" />
</Form.Item>
</Col>
{/* <Col span={8}>

View File

@ -149,7 +149,7 @@ const SupplierEntryReview: React.FC = () => {
render: (value: { item: string }[] = []) => {
if (!value || value.length === 0) return '-';
if (value.length === 1) {
return <span>{value[0].item}</span>;
return <span>{value[0]}</span>;
}
// 多于1条
const allNames = value.map(item => item).join('、');

View File

@ -120,7 +120,7 @@ const CooperateEnterprise: React.FC = () => {
render: (value: { item: string }[] = []) => {
if (!value || value.length === 0) return '-';
if (value.length === 1) {
return <span>{value[0].item}</span>;
return <span>{value[0]}</span>;
}
// 多于1条
const allNames = value.map(item => item).join('、');

View File

@ -1,7 +1,8 @@
import React from 'react';
import { Form, Input, Button, message } from 'antd';
import { useIntl } from 'umi';
import { supplierUserPwd } from '../services'
const ChangePassword: React.FC = () => {
const intl = useIntl();
const [form] = Form.useForm();
@ -12,9 +13,14 @@ const ChangePassword: React.FC = () => {
return;
}
// 模拟提交
console.log('修改密码请求参数:', values);
message.success(intl.formatMessage({ id: 'page.changePassword.success' }));
form.resetFields();
supplierUserPwd({ password: values.newPassword }).then((res) => {
const { code } = res;
if(code == 200) {
message.success(intl.formatMessage({ id: 'page.changePassword.success' }));
form.resetFields();
}
})
};
return (

View File

@ -8,4 +8,16 @@ export async function getUserInfo() {
method: 'GET'
});
}
/**
* 修改密码
*/
interface supplierUser {
password: string;
}
export async function supplierUserPwd(data: supplierUser) {
return request('/user/supplierUserPwd', {
method: 'POST',
data
});
}

View File

@ -177,8 +177,8 @@ const PersonQualifiedSupplierQuery: React.FC<Props> = ({ dispatch }) => {
},
{ title: '身份证号', dataIndex: 'idCard', key: 'idCard', align: 'center', ellipsis: true },
{ title: '联系电话', dataIndex: 'personPhone', key: 'personPhone', align: 'center', ellipsis: true },
{ title: '准入单位', dataIndex: 'orgName', key: 'orgName', align: 'center' },
{ title: '创建部门', dataIndex: 'deptName', key: 'deptName', align: 'center' },
{ title: '准入单位', dataIndex: 'orgName', key: 'orgName', align: 'center', width: 120, ellipsis: true },
{ title: '创建', dataIndex: 'createName', key: 'createName', align: 'center', width: 120, ellipsis: true },
{ title: '创建时间', dataIndex: 'createTime', key: 'createTime', align: 'center', ellipsis: true },
{
title: '操作',
@ -225,7 +225,7 @@ const PersonQualifiedSupplierQuery: React.FC<Props> = ({ dispatch }) => {
<Form.Item style={{ marginLeft: 'auto' }}>
<Button className="buttonOther" type="primary" onClick={() => {
const values = form.getFieldsValue();
values.deptId = DeptId;
// values.deptId = DeptId;
values.orgId = DeptId? DeptId: currentUser.organizationId;
downloadFile('/coscoSupplierBase/getPagePeExport', 'GET', values);
}}>

View File

@ -1,15 +1,15 @@
import { request } from 'umi';
import request from '@/utils/request';
// 供应商注册
export async function coscoSupplierBaseAdd(data: API.RegisterRequest) {
return request('/api/coscoSupplierBase/add', {
return request('/coscoSupplierBase/add', {
method: 'POST',
data,
});
}
// 代录供应商注册
export async function addAgent(data: API.RegisterRequest) {
return request('/api/coscoSupplierBase/addAgent', {
return request('/coscoSupplierBase/addAgent', {
method: 'POST',
data,
});
@ -17,14 +17,14 @@ export async function addAgent(data: API.RegisterRequest) {
// 获取调查问卷
export async function fetchSurveyQuestions(): Promise<API.APIResponse<API.SurveyQuestionResponse>> {
return request('/api/coscoSurveyQuestion/list', {
return request('/coscoSurveyQuestion/list', {
method: 'GET',
})
}
// 获取省市县
export async function getRegionTree(){
return request('/api/cosco/dictRegion/region', {
return request('/cosco/dictRegion/region', {
method: 'GET',
})
}
@ -32,14 +32,33 @@ interface getregionInternationalParams {
pId: string | number;
}
export async function getregionInternational(params:getregionInternationalParams){
return request('/api/v1/dictRegionInternational/getChild', {
return request('/v1/dictRegionInternational/getChild', {
method: 'GET',
params
})
}
export async function getAllAreaList(){
return request('/api/cosco/dictProject/getAllList/area', {
return request('/cosco/dictProject/getAllList/area', {
method: 'GET',
})
}
/**
* 短信验证码
* @returns
*/
export async function sendPhoneCode(contactsPhone: string){
return request(`/supplierRegistration/sendPhoneCode?contactsPhone=${contactsPhone}`, {
method: 'GET',
})
}
/**
* 邮箱验证码
* @returns
*/
export async function sendEmailCode(contactsEmail: string){
return request(`/supplierRegistration/sendEmailCode?contactsEmail=${contactsEmail}`, {
method: 'GET',
})
}