import { Text, Box, Heading, Image, Center, Button, Flex, VStack, Divider, useToast, FormControl, FormLabel, FormHelperText, Input, FormErrorMessage, HStack, Wrap, useMediaQuery, Avatar, Textarea, Modal, ModalOverlay, ModalContent, ModalBody, useDisclosure, Alert, AlertIcon, } from "@chakra-ui/react" import Card from "components/card" import Nav from "layouts/nav/nav" import PageContainer from "layouts/page-container" import Sidebar from "layouts/sidebar/sidebar" import React, { useEffect, useState } from "react" import { adminLinks, orgSettingLinks, settingLinks } from "src/data/links" import { requestApi } from "utils/axios/request" import { useRouter } from "next/router" import { Field, Form, Formik } from "formik" import { config } from "configs/config" import Tags from "components/tags/tags" var validator = require('validator'); const UserProfilePage = () => { const { isOpen, onOpen, onClose } = useDisclosure() const [org, setOrg] = useState(null) const [newOnwer, setNewOnwer] = useState('') const [isLargerThan1280] = useMediaQuery("(min-width: 768px)") const router = useRouter() useEffect(() => { if (router.query.org_id) { requestApi.get(`/user/info/${router.query.org_id}`).then(res => setOrg(res.data)) } }, [router.query.org_id]) const toast = useToast() const submitUser = async (values, _) => { await requestApi.post(`/org/update`, values) setOrg(values) toast({ description: "更新成功", status: "success", duration: 2000, isClosable: true, }) } function validateNickname(value) { let error if (!value?.trim()) { error = "昵称不能为空" } if (value?.length > config.user.nicknameMaxLen) { error = `长度不能超过${config.user.nicknameMaxLen}` } return error } function validateEmail(value) { let email = value?.trim() let error if (email?.length > config.user.usernameMaxLen) { error = `长度不能超过${config.user.usernameMaxLen}` return error } if (email) { if (!validator.isEmail(email)) { error = "Email格式不合法" return error } } return error } function validateUrl(value, canBeEmpty = true) { let url = value?.trim() let error if (!canBeEmpty) { if (!url) { error = "url不能为空" return error } } if (url) { if (!validator.isURL(value)) { error = "URL格式不合法" return error } } return error } function validateLen(value) { let error if (value?.length > config.commonMaxlen) { error = `长度不能超过${config.commonMaxlen}` } return error } const transferOrg = async () => { await requestApi.post(`/org/transfer`,{orgID: router.query.org_id, ownerID: newOnwer}) toast({ description: "转移成功", status: "success", duration: 2000, isClosable: true, }) router.push('/settings/orgs') } const Layout = isLargerThan1280 ? HStack : VStack return ( <> {org && {(props) => (
基本信息 Username {({ field, form }) => ( 组织名称 {form.errors.nickname} )} {({ field, form }) => ( 联系邮箱 {form.errors.email} )} validateUrl(v, false)}> {({ field, form }) => ( 头像设置 {form.errors.avatar} {org.avatar && } )} validateUrl(v, true)}> {({ field, form }) => ( 封面图片 {form.errors.cover} {org.cover && } )} About You {({ field, form }) => ( 一句话描述组织 {form.errors.tagline} )} {({ field, form }) => ( Location {form.errors.location} )} {({ field, form }) => ( 详细介绍