import { css, cx } from "@linaria/core"; import { IconCamera, IconCube, IconDashboard, IconDownload, IconSettings, } from "@queenjs/icons"; import { Avatar, Divider } from "ant-design-vue"; import { defineUI, queenApi } from "queenjs"; import { defineComponent } from "vue"; import { array, object } from "vue-types"; import Logo from "./Logo"; import { UserController } from "./UserController"; import dayjs from "dayjs"; import Payment from "../../Payment"; import { useAuth } from "@queenjs-modules/auth"; export default defineUI({ props: { Controller: object().isRequired, }, setup(props) { const auth = useAuth(); const footerOptions: TextListProps[] = [ { label: "退出", icon: IconDownload, onClick: () => props.Controller.loginOut(), }, ]; const menuOptions = [ { link: "/workbench/promotion", label: "我的作品", icon: IconDashboard, // suffix: "7", }, { link: "/workbench/collection", label: "作品集", icon: IconCube, // suffix: "32", }, { link: "/workbench/category", label: "我的分类", icon: IconCube, // suffix: "32", }, { link: "/workstage/material", label: "我的素材", icon: IconCamera, // suffix: "32", }, { link: "/settings", label: "个人资料", icon: IconSettings, }, ]; function showPayment() { queenApi.dialog(, { width: "12rem" }, [auth]); } return () => { const { userInfo } = props.Controller.state; const isSys = (userInfo.roles || []).indexOf("system") > -1; return (

{userInfo.name} {isSys?"(平台账号)":""}

{userInfo.saas ? "VIP 到期时间:" + dayjs(userInfo.saas.Exp).format("YYYY.MM.DD") : "免费版(限3个推广)"}
{/* new, icon: ( ), }} /> */}
{menuOptions?.map((option, index) => ( ))}
); }; }, }); const rootStyles = css` .icon_new { border-radius: 14px; padding: 5px 10px; text-transform: uppercase; font-size: 12px; line-height: 1; background: linear-gradient(90deg, #9788ff 0%, #7e6bff 100%); color: #fff; } .router-link-exact-active { display: block; border-radius: 4px; background-color: #414141; > div { color: @inf-text-color; } } `; type TextListProps = { label?: string; suffix?: any; icon?: any; link?: string; onClick?: () => void; }; const TextList = defineComponent({ props: { options: array(), }, setup(props) { return () => { return (
{props.options?.map((option, index) => ( ))}
); }; }, }); const TextListItem = defineComponent({ props: { option: object() }, setup(props) { return () => { const { option = {} } = props; return (
option.onClick?.()} > {option.icon && }
{option.label}
{option.suffix && typeof option.suffix == "string" ? ( {option.suffix} ) : ( option.suffix )}
); }; }, }); const itemStyles = css` margin-top: 10px; border-radius: 4px; padding: 10px 25px 10px 20px; color: @inf-text-sub-color; cursor: pointer; &:hover { background: #414141; } `;