"use client" import { getUserGroupAll, userEditById } from "@/components/label/api/user" import { User } from "@/components/label/api/user/typing" import { Button, Group, Modal, Select, Stack, TextInput, } from "@mantine/core" import { useForm } from "@mantine/form" import { notifications } from "@mantine/notifications" import { useEffect, useMemo, useState } from "react" interface ComponentProps { opened: boolean data: User.UserInfo | null onCloseAction: (refresh?: boolean) => void } export default function EditUserModal({ opened, data, onCloseAction, }: ComponentProps) { const [groupOpts, setGroupOpts] = useState>( [] ) const [submitting, setSubmitting] = useState(false) const groupValueByName = useMemo(() => { const map = new Map() groupOpts.forEach((g) => map.set(g.label, g.value)) return map }, [groupOpts]) const form = useForm({ initialValues: { name: "", group_uuid: "", base_city: "", work_status: "1", }, validate: { name: (v) => (v.trim() ? null : "请输入用户名"), group_uuid: (v) => (v ? null : "请选择组织"), base_city: (v) => (v.trim() ? null : "请输入所在地"), work_status: (v) => (v ? null : "请选择状态"), }, }) useEffect(() => { if (!opened) return const run = async () => { const res = await getUserGroupAll() setGroupOpts(res ?? []) } queueMicrotask(run) }, [opened]) useEffect(() => { if (!opened || !data) return form.setValues({ name: data.name ?? "", group_uuid: groupValueByName.get(data.group_name ?? "") ?? "", base_city: data.base_city ?? "", work_status: data.work_status === 0 ? "0" : "1", }) // eslint-disable-next-line react-hooks/exhaustive-deps }, [opened, data, groupValueByName]) const submit = form.onSubmit(async (values) => { if (!data?.uid) return try { setSubmitting(true) await userEditById( { user_name: values.name.trim(), group_uuid: values.group_uuid, base_city: values.base_city.trim(), work_status: Number(values.work_status), }, data.uid ) notifications.show({ color: "green", title: "操作成功", message: "已更新用户信息", }) onCloseAction(true) } catch (e) { notifications.show({ color: "red", title: "操作失败", message: e instanceof Error ? e.message : "请求失败", }) } finally { setSubmitting(false) } }) return ( onCloseAction()} title="编辑用户" centered size={560} closeOnClickOutside={false}>
) }