fix:提交修复6个问题

This commit is contained in:
ljy
2026-07-08 23:01:18 +08:00
parent 99be8e0237
commit ab9654564e
43 changed files with 3671 additions and 277 deletions
@@ -0,0 +1,139 @@
import { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import PageHeader from '@dukang/shared-ui/PageHeader';
import { PARTNER_STAFF_ROLE_LABELS, PartnerStaffRole } from '@dukang/shared-types';
import { createPartnerStaff, sendStaffAddSms } from '../lib/staff';
const ROLE_OPTIONS = Object.values(PartnerStaffRole);
export default function StaffCreatePage() {
const navigate = useNavigate();
const [name, setName] = useState('');
const [phone, setPhone] = useState('');
const [code, setCode] = useState('');
const [staffRole, setStaffRole] = useState<PartnerStaffRole>(PartnerStaffRole.INTERNAL);
const [sending, setSending] = useState(false);
const [submitting, setSubmitting] = useState(false);
const [msg, setMsg] = useState('');
async function sendCode() {
if (!/^1[3-9]\d{9}$/.test(phone.trim())) {
setMsg('请输入正确的11位手机号');
return;
}
setSending(true);
setMsg('');
try {
await sendStaffAddSms(phone.trim());
setMsg('验证码已发送');
} catch (e) {
setMsg(e instanceof Error ? e.message : '发送失败');
} finally {
setSending(false);
}
}
async function submit() {
if (!name.trim()) {
setMsg('请填写真实姓名');
return;
}
if (!/^1[3-9]\d{9}$/.test(phone.trim())) {
setMsg('请输入正确的11位手机号');
return;
}
if (!code.trim()) {
setMsg('请输入验证码');
return;
}
setSubmitting(true);
setMsg('');
try {
await createPartnerStaff({
name: name.trim(),
phone: phone.trim(),
staffRole,
code: code.trim(),
});
navigate('/center/staff');
} catch (e) {
setMsg(e instanceof Error ? e.message : '创建失败');
} finally {
setSubmitting(false);
}
}
return (
<div className="page-no-tab partner-staff-create-page">
<PageHeader title="添加子账号" onBack={() => navigate('/center/staff')} />
<main style={{ padding: '16px 20px 120px' }}>
{msg && <p className="partner-form-error" role="alert" style={{ marginBottom: 12 }}>{msg}</p>}
<div className="partner-form-card">
<label className="partner-form-label"> *</label>
<div className="partner-form-input-wrap">
<input
className="partner-form-input"
placeholder="请输入员工姓名"
value={name}
onChange={(e) => setName(e.target.value)}
/>
<span className="material-symbols-outlined">person</span>
</div>
</div>
<div className="partner-form-card">
<label className="partner-form-label"> *</label>
<div style={{ display: 'flex', gap: 8 }}>
<input
className="partner-form-input"
placeholder="请输入11位手机号"
value={phone}
onChange={(e) => setPhone(e.target.value)}
inputMode="numeric"
/>
<button type="button" className="btn btn-outline" disabled={sending} onClick={() => void sendCode()}>
{sending ? '发送中' : '获取验证码'}
</button>
</div>
<input
className="partner-form-input"
style={{ marginTop: 8 }}
placeholder="验证码"
value={code}
onChange={(e) => setCode(e.target.value)}
inputMode="numeric"
/>
</div>
<div className="partner-form-card">
<label className="partner-form-label"> *</label>
<div className="partner-form-input-wrap">
<select
className="partner-form-input"
value={staffRole}
onChange={(e) => setStaffRole(e.target.value as PartnerStaffRole)}
>
{ROLE_OPTIONS.map((role) => (
<option key={role} value={role}>{PARTNER_STAFF_ROLE_LABELS[role]}</option>
))}
</select>
<span className="material-symbols-outlined">expand_more</span>
</div>
</div>
<p className="label-md text-muted" style={{ marginTop: 16, textAlign: 'center' }}>
</p>
</main>
<div className="partner-sticky-footer">
<button type="button" className="partner-btn-primary" disabled={submitting} onClick={() => void submit()}>
<span className="material-symbols-outlined">person_add</span>
{submitting ? '创建中...' : '确认创建'}
</button>
</div>
</div>
);
}