system-copyright-react/src/layout/head/Head.tsx
2024-04-02 18:45:46 +08:00

197 lines
7.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import './head.css'
import BalanceHead from '../../components/balance/BalanceHead.tsx';
import RechargeHead from '../../components/recharge/RechargeHead.tsx';
import {Divider, Dropdown, MenuProps, message, Modal, Space, Spin} from "antd";
import {DownOutlined, UserOutlined, KeyOutlined, LogoutOutlined, AccountBookOutlined} from "@ant-design/icons";
import {useContext, useEffect, useState} from "react";
import {put} from "../../util/AjaxUtils.ts";
import {GlobalContext, GlobalDispatchContext, reloadUser} from "../../context/GlobalContext.ts";
import UserEdit from "../../components/user/UserEdit.tsx";
import PasswordChange from "../../components/password/PasswordChange.tsx";
import headRightBg from '../../assets/head-right-bg.png';
import InvoiceList from "../../components/invoice/InvoiceList.tsx";
export default function Head() {
const globalContext = useContext(GlobalContext);
const globalDispatchContext = useContext(GlobalDispatchContext);
const [messageApi, contextHolder] = message.useMessage();
const [modal, modalHolder] = Modal.useModal();
const [loading, setLoading] = useState<boolean>(false);
const [isSelfModalOpen, setIsSelfModalOpen] = useState(false);
const [isPasswordModalOpen, setIsPasswordModalOpen] = useState(false);
useEffect(() => {
reloadUser(messageApi, globalDispatchContext).then((data) => {
if (!data.hasUserInfo) {
setIsSelfModalOpen(true);
}
});
}, [globalContext.user]);
const items: MenuProps['items'] = [
{
key: 'userinfo',
label: (
<div className="dropdown-item">
<UserOutlined/>
<span className="title"></span>
</div>
),
onClick: () => {
setIsSelfModalOpen(true);
}
},
{
key: 'changePass',
label: (
<div className="dropdown-item">
<KeyOutlined/>
<span className="title"></span>
</div>
),
onClick: () => {
setIsPasswordModalOpen(true);
}
},
{
key: 'invoice',
label: (
<div className="dropdown-item">
<AccountBookOutlined />
<span className="title"></span>
</div>
),
onClick: () => {
// nav('/invoice-list');
}
},
{
key: 'logout',
label: (
<div className="dropdown-item">
<LogoutOutlined/>
<span className="title">退</span>
</div>
),
},
]
return (
<>
<div className="head">
<div className="center">
<div className="left">
<span className="sys-title">AI引擎软著</span>
<Divider type="vertical"/>
<span className="sys-title-sub"></span>
</div>
<div className="right" style={{backgroundImage: `url(${headRightBg})`}}>
<BalanceHead/>
<RechargeHead/>
{/*<MessageHead/>*/}
<div style={{display: 'flex', alignContent: 'center', padding: '0 10px', cursor: 'pointer'}}>
<Dropdown menu={{
items: items
}}>
<Space>
{globalContext.user.nickname}
<DownOutlined/>
</Space>
</Dropdown>
</div>
</div>
</div>
</div>
<Modal open={isSelfModalOpen}
title="个人信息"
footer={false}
onCancel={() => {
if (!globalContext.user.hasUserInfo) {
messageApi.info('请完善个人信息');
return;
}
setIsSelfModalOpen(false)
}}>
<UserEdit handleConfirm={(data) => {
modal.confirm({
title: '提示',
content: '确定保存吗?',
okText: '确认',
cancelText: '取消',
okButtonProps: {
style: {
backgroundColor: 'var(--color-primary)'
}
},
onOk: () => {
setIsSelfModalOpen(false);
put({
messageApi,
url: '/api/user-info/update-self',
body: data,
onBefore() {
setLoading(true);
},
onSuccess() {
messageApi.success('修改成功');
},
onFinally() {
setLoading(false);
}
})
}
});
}}/>
</Modal>
<Modal open={isPasswordModalOpen}
title="修改密码"
footer={false}
onCancel={() => {
setIsPasswordModalOpen(false)
}}>
<PasswordChange handleConfirm={(data) => {
modal.confirm({
title: '提示',
content: '确定修改吗?',
okText: '确认',
cancelText: '取消',
okButtonProps: {
style: {
backgroundColor: 'var(--color-primary)'
}
},
onOk: () => {
put({
messageApi,
url: '/api/user/update-password',
body: data,
onBefore() {
setLoading(true);
},
onSuccess() {
setIsPasswordModalOpen(false);
messageApi.success('修改成功,重新登录生效');
},
onFinally() {
setLoading(false);
}
})
}
});
}}/>
</Modal>
<Modal open={true}
title="发票管理"
width={1100}
footer={false}
>
<InvoiceList/>
</Modal>
<Spin tip="正在提交..." spinning={loading} fullscreen/>
{contextHolder}
{modalHolder}
</>
)
}