Эх сурвалжийг харах

手机是否被使用的校验

luoyangwei 8 сар өмнө
parent
commit
82b7e856f8

BIN
public/template.xlsx


+ 3 - 1
src/app/(module)/dealer/[id]/Edit.tsx

@@ -568,7 +568,9 @@ export default function Edit(props: EditProps) {
                                 <span className="text-lg font-bold text-gray-800">名下设备列表</span>
                             </div>
                             <div className="flex items-center gap-4">
-                                <Button type="button" variant={"outline"}>下载模板</Button>
+                                <Button asChild type="button" variant={"outline"}>
+                                    <a href={"/template.xlsx"} target={"_blank"}>下载模板</a>
+                                </Button>
 
                                 <DialogTrigger asChild>
                                     <Button type="button" onClick={() => setOpen(true)}>

+ 20 - 2
src/app/(module)/dealer/add/Info.tsx

@@ -25,12 +25,13 @@ export default function Info() {
     const [loading, setLoading] = useState<boolean>(false);
     const [avatar, setAvatar] = useState<AvatarFile>()
     const [open, setOpen] = useState<boolean>(false);
+    const route = useRouter();
 
     const {register, control, handleSubmit, formState: {errors}} = useForm<FormType>({})
 
     function handleClose() {
         setOpen(false);
-        useRouter().push("/sale/dealer")
+        route.push("/dealer")
     }
 
     /**
@@ -90,6 +91,22 @@ export default function Info() {
         setOpen(true);
     }
 
+    /**
+     * 验证手机号是否已经被使用
+     * @param value 手机号值
+     */
+    async function handleLinkNumberValidate(value: string) {
+        const response = await fetch(`/api/v1/dealer/phoneNumber?phone_number=${value}`)
+        if (!response.ok) {
+            return "验证手机号失败"
+        }
+        const json = await response.json() as Response<undefined>;
+        if (json.code !== 0) {
+            return "手机号已被使用"
+        }
+        return true;
+    }
+
     return (
         <Dialog open={open} onOpenChange={setOpen}>
             <div className="grid grid-cols-12">
@@ -207,6 +224,7 @@ export default function Info() {
                                         placeholder="请输入联系电话"
                                         {...register("dealer_link_number", {
                                             required: "联系电话必填",
+                                            validate: handleLinkNumberValidate,
                                             pattern: {
                                                 value: /^(?:(?:\+|00)86)?1[3-9]\d{9}$/,
                                                 message: "手机号格式不正确"
@@ -392,7 +410,7 @@ export default function Info() {
                     <div className="flex flex-col items-center justify-center gap-1">
                         <h1 className="text-2xl my-4">创建成功</h1>
                         <p className="text-muted-foreground">账号为联系电话,
-                            默认密码 {process.env.DEFAULT_DEALER_PASSWORD}</p>
+                            默认密码 {process.env.DEFAULT_DEALER_PASSWORD || "tecanswer"}</p>
                         <p className="text-muted-foreground">经销商后台权限已开通</p>
                         <Button onClick={() => handleClose()} className="w-52 my-4">确定</Button>
                     </div>

+ 26 - 0
src/app/api/v1/dealer/phoneNumber/route.ts

@@ -0,0 +1,26 @@
+import {NextRequest, NextResponse} from "next/server";
+import {DatabasePool} from "@/lib/mysql";
+import {Dealer} from "@/app/api/v1/(model)/dealer";
+import {response} from "@/app/api/v1/(response)/response";
+
+export async function GET(request: NextRequest) {
+    const {searchParams} = request.nextUrl;
+    const phoneNumber = searchParams.get("phone_number")
+
+    const connection = await DatabasePool.getConnection();
+    try {
+        const [dealers] = await connection.query<Dealer[]>(`select *
+                                                            from tb_admin_dealer
+                                                            where dealer_link_number = ?`, [phoneNumber]);
+        if (dealers.length > 0) {
+            throw new Error("该手机号已被注册");
+        }
+
+        return NextResponse.json(response.success());
+    } catch (e) {
+        return NextResponse.json(response.error(500, (e as Error).message));
+    } finally {
+        connection.release();
+        console.log("Connection released");
+    }
+}