@tsingroc/tsingroc-components 2.4.0 → 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Auth.d.ts +12 -3
- package/dist/components/Auth.js +23 -4
- package/dist/components/Auth.js.map +1 -1
- package/dist/components/ImageBackground.d.ts +1 -1
- package/dist/components/Sidebar.d.ts +14 -5
- package/dist/components/Sidebar.js +55 -35
- package/dist/components/Sidebar.js.map +1 -1
- package/dist/components/TsingrocTheme.d.ts +13 -0
- package/dist/components/TsingrocTheme.js +46 -0
- package/dist/components/TsingrocTheme.js.map +1 -0
- package/dist/components/UserButton.d.ts +45 -0
- package/dist/components/UserButton.js +54 -0
- package/dist/components/UserButton.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -84,7 +84,7 @@ export interface UserInfo {
|
|
|
84
84
|
/** 用户的全名(显示名)。*/
|
|
85
85
|
name: string;
|
|
86
86
|
/** 短用户名(登录名)。*/
|
|
87
|
-
prefered_username
|
|
87
|
+
prefered_username?: string;
|
|
88
88
|
/** 用户的邮件地址。*/
|
|
89
89
|
email?: string;
|
|
90
90
|
/** 用户的邮件地址是否已确认。*/
|
|
@@ -100,7 +100,10 @@ export interface UserInfo {
|
|
|
100
100
|
/** 用户的角色。*/
|
|
101
101
|
roles: string[];
|
|
102
102
|
}
|
|
103
|
-
/**
|
|
103
|
+
/**
|
|
104
|
+
* 获取用户信息。必须在开启了 {@linkcode AuthProviderProps.onlineCheck | onlineCheck}
|
|
105
|
+
* 的 {@linkcode AuthProvider} 内部使用,否则返回 `undefined`。
|
|
106
|
+
*/
|
|
104
107
|
export declare function useUserInfo(): UserInfo | undefined;
|
|
105
108
|
export interface AuthProviderProps {
|
|
106
109
|
/**
|
|
@@ -116,7 +119,7 @@ export interface AuthProviderProps {
|
|
|
116
119
|
*/
|
|
117
120
|
onlineCheck?: boolean;
|
|
118
121
|
/**
|
|
119
|
-
* 如果开启了
|
|
122
|
+
* 如果开启了 {@linkcode AuthProviderProps.onlineCheck | onlineCheck},在检查过程中时向用户显示的加载界面。
|
|
120
123
|
* @default "正在登录……"
|
|
121
124
|
*/
|
|
122
125
|
loading?: ReactNode;
|
|
@@ -160,3 +163,9 @@ export interface AuthCallbackProps {
|
|
|
160
163
|
}
|
|
161
164
|
/** 登录的回调页面。*/
|
|
162
165
|
export declare function AuthCallback(props: AuthCallbackProps): ReactNode;
|
|
166
|
+
/**
|
|
167
|
+
* 获得一个用于登出账号的函数。必须在 {@linkcode AuthProvider} 内部使用,否则在登出后将不会自动跳转。
|
|
168
|
+
*
|
|
169
|
+
* **注意**:登出后默认会自动跳转到登录页面!为了更好的用户体验,最好在调用登出之后立即跳转到网站主页或者其它合适的页面。
|
|
170
|
+
*/
|
|
171
|
+
export declare function useLogout(): () => void;
|
package/dist/components/Auth.js
CHANGED
|
@@ -19,16 +19,23 @@ export function getDecodedAccessToken() {
|
|
|
19
19
|
return;
|
|
20
20
|
return jwtDecode(token);
|
|
21
21
|
}
|
|
22
|
-
const AuthContext = createContext(
|
|
23
|
-
|
|
22
|
+
const AuthContext = createContext({
|
|
23
|
+
recheckToken: () => { },
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* 获取用户信息。必须在开启了 {@linkcode AuthProviderProps.onlineCheck | onlineCheck}
|
|
27
|
+
* 的 {@linkcode AuthProvider} 内部使用,否则返回 `undefined`。
|
|
28
|
+
*/
|
|
24
29
|
export function useUserInfo() {
|
|
25
|
-
|
|
30
|
+
const { userInfo } = useContext(AuthContext);
|
|
31
|
+
return userInfo;
|
|
26
32
|
}
|
|
27
33
|
/**
|
|
28
34
|
* 确保只有已登录的用户可以访问到内部的内容,未登录的用户将被重定向到登录界面。
|
|
29
35
|
*/
|
|
30
36
|
export function AuthProvider(props) {
|
|
31
37
|
const sdk = getCasdoorSdk(props.sdkConfig);
|
|
38
|
+
const [, recheckToken] = useState(0);
|
|
32
39
|
const token = getAccessToken();
|
|
33
40
|
const [userInfo, setUserInfo] = useState();
|
|
34
41
|
useEffect(() => {
|
|
@@ -50,7 +57,7 @@ export function AuthProvider(props) {
|
|
|
50
57
|
}
|
|
51
58
|
}
|
|
52
59
|
}, [token, props.onlineCheck]);
|
|
53
|
-
return token === null ? ("正在跳转到登录页……") : props.onlineCheck && userInfo === undefined ? ((props.loading ?? "正在登录……")) : (_jsx(AuthContext.Provider, { value: userInfo, children: props.children }));
|
|
60
|
+
return token === null ? ("正在跳转到登录页……") : props.onlineCheck && userInfo === undefined ? ((props.loading ?? "正在登录……")) : (_jsx(AuthContext.Provider, { value: { userInfo, recheckToken: () => recheckToken((i) => i + 1) }, children: props.children }));
|
|
54
61
|
}
|
|
55
62
|
/** 登录的回调页面。*/
|
|
56
63
|
export function AuthCallback(props) {
|
|
@@ -80,4 +87,16 @@ export function AuthCallback(props) {
|
|
|
80
87
|
: error.toString()
|
|
81
88
|
: (props.children ?? "正在跳转……");
|
|
82
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* 获得一个用于登出账号的函数。必须在 {@linkcode AuthProvider} 内部使用,否则在登出后将不会自动跳转。
|
|
92
|
+
*
|
|
93
|
+
* **注意**:登出后默认会自动跳转到登录页面!为了更好的用户体验,最好在调用登出之后立即跳转到网站主页或者其它合适的页面。
|
|
94
|
+
*/
|
|
95
|
+
export function useLogout() {
|
|
96
|
+
const { recheckToken } = useContext(AuthContext);
|
|
97
|
+
return () => {
|
|
98
|
+
localStorage.removeItem("access_token");
|
|
99
|
+
recheckToken();
|
|
100
|
+
};
|
|
101
|
+
}
|
|
83
102
|
//# sourceMappingURL=Auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.js","sourceRoot":"","sources":["../../src/components/Auth.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EAEb,UAAU,EACV,SAAS,EACT,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAmB,MAAM,YAAY,CAAC;AACxD,OAAO,GAAG,MAAM,gBAAgB,CAAC;AAGjC,IAAI,UAA2B,CAAC;AAEhC,kDAAkD;AAClD,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,OAAO,CAAC,UAAU,KAAV,UAAU,GAAK,IAAI,GAAG,CAAC,MAAM,CAAC,EAAC,CAAC;AAC1C,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAC9C,CAAC;AA0DD;2CAC2C;AAC3C,MAAM,UAAU,qBAAqB;IACnC,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IAC3B,OAAO,SAAS,CAAqB,KAAK,CAAC,CAAC;AAC9C,CAAC;AAyCD,MAAM,WAAW,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"Auth.js","sourceRoot":"","sources":["../../src/components/Auth.tsx"],"names":[],"mappings":"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"}
|
|
@@ -13,20 +13,23 @@ export interface SidebarProps extends MenuProps {
|
|
|
13
13
|
*/
|
|
14
14
|
collapsible?: boolean;
|
|
15
15
|
/**
|
|
16
|
-
* 网站
|
|
16
|
+
* 网站 logo 的 URL。
|
|
17
17
|
*
|
|
18
|
-
*
|
|
18
|
+
* 建议导入图片,然后填入导入得到的地址,而不要硬编码地址。
|
|
19
19
|
*/
|
|
20
20
|
logo?: string;
|
|
21
21
|
/** 侧边栏的标题。*/
|
|
22
22
|
title?: string;
|
|
23
23
|
/**
|
|
24
24
|
* 侧边栏头部(logo 和标题部分)的高度。
|
|
25
|
-
* @default
|
|
25
|
+
* @default 116
|
|
26
26
|
*/
|
|
27
27
|
headerHeight?: number | string;
|
|
28
28
|
/**
|
|
29
|
-
* 侧边栏的头部(logo
|
|
29
|
+
* 侧边栏的头部(logo 和标题部分)。设置了该属性时,
|
|
30
|
+
* {@linkcode SidebarProps.logo | logo}、
|
|
31
|
+
* {@linkcode SidebarProps.title | title} 和
|
|
32
|
+
* {@linkcode SidebarProps.headerHeight | headerHeight} 将失去作用。
|
|
30
33
|
* 参数 `collapsed` 表示侧边栏是否收起。
|
|
31
34
|
*/
|
|
32
35
|
header?: (collapsed: boolean) => ReactNode;
|
|
@@ -46,11 +49,17 @@ export interface SidebarProps extends MenuProps {
|
|
|
46
49
|
onSelect?: MenuProps["onSelect"];
|
|
47
50
|
/** 子菜单展开/收起时的回调函数。 */
|
|
48
51
|
onOpenChange?: MenuProps["onOpenChange"];
|
|
49
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* 侧边栏底部的额外内容。参数 `collapsed` 表示侧边栏是否收起。
|
|
54
|
+
* 默认情况下使用 {@linkcode UserButton} 组件。
|
|
55
|
+
* @default (collapsed) => <UserButton compact={collapsed} />
|
|
56
|
+
*/
|
|
50
57
|
footer?: (collapsed: boolean) => ReactNode;
|
|
51
58
|
}
|
|
52
59
|
/**
|
|
53
60
|
* 出自 TMS 系统的侧边栏组件。该组件需要放置在 [Ant Design 的 `Layout` 组件][1]内部才能正常工作。
|
|
61
|
+
* 如果没有提供 {@linkcode SidebarProps.footer | footer} 属性,
|
|
62
|
+
* 那么还需要包裹在 {@linkcode AuthProvider} 内才能正常显示边栏底部的用户信息按钮。
|
|
54
63
|
*
|
|
55
64
|
* 一般来说,使用该组件时至少需要提供 `logo`、`items` 和 `onSelect` 三个属性,具体用法请参照范例。
|
|
56
65
|
*
|
|
@@ -3,6 +3,9 @@ import { BarChartOutlined, LeftOutlined, RightOutlined, SwapOutlined, TeamOutlin
|
|
|
3
3
|
import { Button, Flex, Layout, Menu } from "antd";
|
|
4
4
|
import { useState } from "react";
|
|
5
5
|
import { createStyles } from "antd-style";
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
7
|
+
import { AuthProvider } from "./Auth";
|
|
8
|
+
import UserButton from "./UserButton";
|
|
6
9
|
const { Sider } = Layout;
|
|
7
10
|
const menuItem = (label, key, icon, children) => ({ key, icon, children, label });
|
|
8
11
|
/** 默认菜单项配置,可以作为参考或默认值 */
|
|
@@ -24,51 +27,71 @@ const DEFAULT_MENU_ITEMS = [
|
|
|
24
27
|
menuItem("购电合约管理", "purchase-contract"),
|
|
25
28
|
]),
|
|
26
29
|
];
|
|
27
|
-
const useStyles = createStyles(({ token, css, cx, prefixCls }) => {
|
|
30
|
+
const useStyles = createStyles(({ token, css, cx, prefixCls }, collapsed) => {
|
|
31
|
+
const sidebarHeader = css `
|
|
32
|
+
margin-top: ${token.marginXXS}px;
|
|
33
|
+
|
|
34
|
+
> img {
|
|
35
|
+
width: 40%;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
> h1 {
|
|
39
|
+
margin: ${collapsed ? 0 : token.marginXXS}px 0 0 0;
|
|
40
|
+
font-size: ${collapsed ? 0 : token.fontSize}px;
|
|
41
|
+
font-weight: normal;
|
|
42
|
+
line-height: 1;
|
|
43
|
+
transition:
|
|
44
|
+
margin-top ${token.motionDurationMid},
|
|
45
|
+
font-size ${token.motionDurationMid};
|
|
46
|
+
}
|
|
47
|
+
`;
|
|
28
48
|
const sidebarMenu = css `
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
49
|
+
flex-basis: 100%;
|
|
50
|
+
overflow-y: auto;
|
|
51
|
+
`;
|
|
32
52
|
const sidebarBtn = css `
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
53
|
+
position: absolute;
|
|
54
|
+
top: 75%;
|
|
55
|
+
right: 0;
|
|
56
|
+
transform: translate(50%, -50%);
|
|
37
57
|
|
|
38
|
-
|
|
58
|
+
font-size: ${token.sizeSM}px;
|
|
39
59
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
60
|
+
transition: opacity ${token.motionDurationMid};
|
|
61
|
+
opacity: 0%;
|
|
62
|
+
`;
|
|
43
63
|
const sidebar = css `
|
|
44
|
-
|
|
45
|
-
|
|
64
|
+
position: relative;
|
|
65
|
+
box-shadow: rgba(0, 0, 0, 0.15) 0 2px 8px;
|
|
46
66
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
67
|
+
> .${prefixCls}-layout-sider-children {
|
|
68
|
+
display: flex;
|
|
69
|
+
flex-direction: column;
|
|
70
|
+
}
|
|
51
71
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
72
|
+
/* 为了提高权重 */
|
|
73
|
+
& .${cx(sidebarBtn)} {
|
|
74
|
+
width: ${token.controlHeightXS}px;
|
|
75
|
+
}
|
|
76
|
+
& .${cx(sidebarMenu)}.${cx(sidebarMenu)} {
|
|
77
|
+
border-inline-end: none;
|
|
78
|
+
}
|
|
59
79
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
80
|
+
&:hover .${cx(sidebarBtn)} {
|
|
81
|
+
opacity: 100%;
|
|
82
|
+
}
|
|
83
|
+
`;
|
|
64
84
|
return {
|
|
65
85
|
sidebar,
|
|
86
|
+
sidebarHeader,
|
|
66
87
|
sidebarMenu,
|
|
67
88
|
sidebarBtn,
|
|
68
89
|
};
|
|
69
90
|
});
|
|
70
91
|
/**
|
|
71
92
|
* 出自 TMS 系统的侧边栏组件。该组件需要放置在 [Ant Design 的 `Layout` 组件][1]内部才能正常工作。
|
|
93
|
+
* 如果没有提供 {@linkcode SidebarProps.footer | footer} 属性,
|
|
94
|
+
* 那么还需要包裹在 {@linkcode AuthProvider} 内才能正常显示边栏底部的用户信息按钮。
|
|
72
95
|
*
|
|
73
96
|
* 一般来说,使用该组件时至少需要提供 `logo`、`items` 和 `onSelect` 三个属性,具体用法请参照范例。
|
|
74
97
|
*
|
|
@@ -78,13 +101,10 @@ const useStyles = createStyles(({ token, css, cx, prefixCls }) => {
|
|
|
78
101
|
* [2]: https://ant-design.antgroup.com/components/menu-cn
|
|
79
102
|
*/
|
|
80
103
|
function Sidebar(props) {
|
|
81
|
-
const { width = 260, collapsible = false, logo, title, headerHeight =
|
|
82
|
-
const { cx, styles, theme } = useStyles();
|
|
104
|
+
const { width = 260, collapsible = false, logo, title, headerHeight = 116, header, items = DEFAULT_MENU_ITEMS, selectedKeys, openKeys, onSelect, onOpenChange, footer = (collapsed) => _jsx(UserButton, { compact: collapsed }), ...rest } = props;
|
|
83
105
|
const [collapsed, setCollapsed] = useState(false);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
transition: `font-size ${theme.motionDurationMid}`,
|
|
87
|
-
}, children: title })] })), _jsx(Menu, { mode: "inline", selectedKeys: selectedKeys, openKeys: openKeys, onSelect: onSelect, onOpenChange: onOpenChange, items: items, inlineCollapsed: collapsible ? collapsed : false, className: cx(styles.sidebarMenu, rest.className), ...rest }), footer?.(collapsed), collapsible && (_jsx(Button, { className: cx(styles.sidebarBtn), icon: collapsed ? _jsx(RightOutlined, {}) : _jsx(LeftOutlined, {}), onClick: () => setCollapsed(!collapsed) }))] }));
|
|
106
|
+
const { cx, styles } = useStyles(collapsed);
|
|
107
|
+
return (_jsxs(Sider, { theme: "light", width: width, collapsed: collapsible ? collapsed : false, collapsible: collapsible, trigger: null, className: cx(styles.sidebar), children: [header ? (header(collapsed)) : (_jsxs(Flex, { vertical: true, align: "center", justify: "center", className: cx(styles.sidebarHeader), style: { height: headerHeight }, children: [_jsx("img", { alt: "logo", src: logo }), _jsx("h1", { children: title })] })), _jsx(Menu, { mode: "inline", selectedKeys: selectedKeys, openKeys: openKeys, onSelect: onSelect, onOpenChange: onOpenChange, items: items, inlineCollapsed: collapsible ? collapsed : false, className: cx(styles.sidebarMenu, rest.className), ...rest }), footer?.(collapsed), collapsible && (_jsx(Button, { className: cx(styles.sidebarBtn), icon: collapsed ? _jsx(RightOutlined, {}) : _jsx(LeftOutlined, {}), onClick: () => setCollapsed(!collapsed) }))] }));
|
|
88
108
|
}
|
|
89
109
|
export default Sidebar;
|
|
90
110
|
//# sourceMappingURL=Sidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../src/components/Sidebar.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAkB,MAAM,MAAM,CAAC;AAClE,OAAO,EAA4B,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AAIzB,MAAM,QAAQ,GAAG,CACf,KAAgB,EAChB,GAAQ,EACR,IAAgB,EAChB,QAAqB,EACX,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAEhD,yBAAyB;AACzB,MAAM,kBAAkB,GAAe;IACrC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAC,gBAAgB,KAAG,EAAE;QACnD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;QAC9B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;QACrC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;KAChC,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAC,YAAY,KAAG,EAAE;QACrD,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;QACnC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;QAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;KACrC,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAC,YAAY,KAAG,EAAE;QACxD,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;QACrC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;QACpC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;QACxC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACxC,CAAC;CACH,CAAC;
|
|
1
|
+
{"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../src/components/Sidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface TsingrocThemeProps {
|
|
3
|
+
/** 是否开启黑暗模式。*/
|
|
4
|
+
dark?: boolean;
|
|
5
|
+
/** 主题覆盖的页面内容。*/
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 清鹏智能的公共 Ant Design 主题,会影响内部的所有 Ant Design 组件的样式。
|
|
10
|
+
* 请将该组件放置在整个 React 项目的顶层。
|
|
11
|
+
*/
|
|
12
|
+
declare function TsingrocTheme(props: TsingrocThemeProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export default TsingrocTheme;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ConfigProvider, theme } from "antd";
|
|
3
|
+
/**
|
|
4
|
+
* 清鹏智能的公共 Ant Design 主题,会影响内部的所有 Ant Design 组件的样式。
|
|
5
|
+
* 请将该组件放置在整个 React 项目的顶层。
|
|
6
|
+
*/
|
|
7
|
+
function TsingrocTheme(props) {
|
|
8
|
+
// Ant Design 主题编辑器链接:
|
|
9
|
+
// https://ant-design.antgroup.com/theme-editor-cn
|
|
10
|
+
// 色板设计工具链接:
|
|
11
|
+
// https://huetone.ardov.me/?palette=N4IgdghgtgpiBcICiAPaAHANjABABQmwBcjcBjAe3QE8QAaEACwFcYBnBAbVElgRDwBLMAGt6ISpgoAnDvE4gAxADMADDAAmygCzjFmjTGUBOPRuMAjAIww4DRWTIAOMjF32yAJgBs3jU70Lb20AVjJvPWMYTwsIdyUnAGZVVScIQNCYCwD7CDJki0S9J21ExKdTe29EmN89bW1PVW0I%2B0SQq2NE1qVPbStGkJAAXQBfOh5oOEQAQTAiABFxSRk5BX1vHWVlQIgYVW3IqzIIQ6rLKzOlbVVjTZ37K28AdmerxVuQp3M9J9f3xLOKI5JR-N4PUEhELaCAaX7QqzPOyQmohCy-KyeaFDR5WKwQTxkEajYYMIgUMDsLggAAyqnENKsDM8DKKDBp8RpONpPUA3HKADIzAE5B4gWPQW3IW8QWbJACxZDAWTIV9LGQA
|
|
12
|
+
return (_jsx(ConfigProvider, { theme: {
|
|
13
|
+
algorithm: props.dark ? theme.darkAlgorithm : theme.defaultAlgorithm,
|
|
14
|
+
token: props.dark
|
|
15
|
+
? {
|
|
16
|
+
colorPrimaryBg: "#241425",
|
|
17
|
+
colorPrimaryBgHover: "#351936",
|
|
18
|
+
colorPrimaryBorder: "#442046",
|
|
19
|
+
colorPrimaryBorderHover: "#632b66",
|
|
20
|
+
colorPrimaryHover: "#b45eb8",
|
|
21
|
+
colorPrimary: "#b93fc0",
|
|
22
|
+
colorPrimaryActive: "#843389",
|
|
23
|
+
colorPrimaryTextHover: "#b45eb8",
|
|
24
|
+
colorInfo: "#b93fc0",
|
|
25
|
+
colorPrimaryTextActive: "#843389",
|
|
26
|
+
colorLinkHover: "#632b66",
|
|
27
|
+
colorLinkActive: "#843389",
|
|
28
|
+
}
|
|
29
|
+
: {
|
|
30
|
+
colorPrimaryBg: "#f3f0f7",
|
|
31
|
+
colorPrimaryBgHover: "#eddef9",
|
|
32
|
+
colorPrimaryBorder: "#d9b1ee",
|
|
33
|
+
colorPrimaryBorderHover: "#cc8ce4",
|
|
34
|
+
colorPrimaryHover: "#c266d8",
|
|
35
|
+
colorPrimary: "#b645c6",
|
|
36
|
+
colorPrimaryActive: "#9e2ba4",
|
|
37
|
+
colorPrimaryTextHover: "#c266d8",
|
|
38
|
+
colorInfo: "#b645c6",
|
|
39
|
+
colorPrimaryTextActive: "#9e2ba4",
|
|
40
|
+
colorLinkHover: "#cc8ce4",
|
|
41
|
+
colorLinkActive: "#9e2ba4",
|
|
42
|
+
},
|
|
43
|
+
}, children: props.children }));
|
|
44
|
+
}
|
|
45
|
+
export default TsingrocTheme;
|
|
46
|
+
//# sourceMappingURL=TsingrocTheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TsingrocTheme.js","sourceRoot":"","sources":["../../src/components/TsingrocTheme.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAU7C;;;GAGG;AACH,SAAS,aAAa,CAAC,KAAyB;IAC9C,sBAAsB;IACtB,kDAAkD;IAClD,YAAY;IACZ,oeAAoe;IACpe,OAAO,CACL,KAAC,cAAc,IACb,KAAK,EAAE;YACL,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB;YACpE,KAAK,EAAE,KAAK,CAAC,IAAI;gBACf,CAAC,CAAC;oBACE,cAAc,EAAE,SAAS;oBACzB,mBAAmB,EAAE,SAAS;oBAC9B,kBAAkB,EAAE,SAAS;oBAC7B,uBAAuB,EAAE,SAAS;oBAClC,iBAAiB,EAAE,SAAS;oBAC5B,YAAY,EAAE,SAAS;oBACvB,kBAAkB,EAAE,SAAS;oBAC7B,qBAAqB,EAAE,SAAS;oBAChC,SAAS,EAAE,SAAS;oBACpB,sBAAsB,EAAE,SAAS;oBACjC,cAAc,EAAE,SAAS;oBACzB,eAAe,EAAE,SAAS;iBAC3B;gBACH,CAAC,CAAC;oBACE,cAAc,EAAE,SAAS;oBACzB,mBAAmB,EAAE,SAAS;oBAC9B,kBAAkB,EAAE,SAAS;oBAC7B,uBAAuB,EAAE,SAAS;oBAClC,iBAAiB,EAAE,SAAS;oBAC5B,YAAY,EAAE,SAAS;oBACvB,kBAAkB,EAAE,SAAS;oBAC7B,qBAAqB,EAAE,SAAS;oBAChC,SAAS,EAAE,SAAS;oBACpB,sBAAsB,EAAE,SAAS;oBACjC,cAAc,EAAE,SAAS;oBACzB,eAAe,EAAE,SAAS;iBAC3B;SACN,YAEA,KAAK,CAAC,QAAQ,GACA,CAClB,CAAC;AACJ,CAAC;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ButtonProps, type DropdownProps } from "antd";
|
|
2
|
+
import { type UserInfo } from "./Auth";
|
|
3
|
+
export interface UserButtonProps extends ButtonProps {
|
|
4
|
+
/**
|
|
5
|
+
* 是否显示为缩小形态(只显示头像)。
|
|
6
|
+
* @default false
|
|
7
|
+
*/
|
|
8
|
+
compact?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* 用户的信息。
|
|
11
|
+
*
|
|
12
|
+
* 若省略,则将通过 {@linkcode useUserInfo} 获取,
|
|
13
|
+
* 这意味着该组件必须放置在启用了 {@linkcode AuthProviderProps.onlineCheck | onlineCheck}
|
|
14
|
+
* 的 {@linkcode AuthProvider} 内部。
|
|
15
|
+
*
|
|
16
|
+
* @default useUserInfo()
|
|
17
|
+
*/
|
|
18
|
+
userInfo?: Partial<UserInfo>;
|
|
19
|
+
/** 打开账户页面的回调。若省略,将不显示弹出菜单中的“账户”选项。*/
|
|
20
|
+
onOpenProfile?: () => void;
|
|
21
|
+
/**
|
|
22
|
+
* 登出操作的回调。
|
|
23
|
+
*
|
|
24
|
+
* 若省略,则将使用 {@linkcode useLogout},这意味着该组件必须放置在 {@linkcode AuthProvider} 内部。
|
|
25
|
+
*
|
|
26
|
+
* @default useLogout()
|
|
27
|
+
*/
|
|
28
|
+
onLogout?: () => void;
|
|
29
|
+
/**
|
|
30
|
+
* 下拉菜单的属性,见 [Ant Design 文档][1]。
|
|
31
|
+
*
|
|
32
|
+
* [1]: https://ant-design.antgroup.com/components/dropdown-cn
|
|
33
|
+
*/
|
|
34
|
+
dropdownProps?: DropdownProps;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 显示用户信息的按钮,点击弹出登出或跳转到账户页的菜单。
|
|
38
|
+
* 默认设置下,该组件必须包裹在 {@linkcode AuthProvider} 内才能正常工作。
|
|
39
|
+
*
|
|
40
|
+
* 除了文档中列出的属性以外,该组件会把额外的属性传递给内部的 [`Button`][1] 组件。
|
|
41
|
+
*
|
|
42
|
+
* [1]: https://ant-design.antgroup.com/components/button-cn
|
|
43
|
+
*/
|
|
44
|
+
declare function UserButton(props: UserButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
export default UserButton;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Avatar, Button, Dropdown, theme, } from "antd";
|
|
3
|
+
import { LogoutOutlined, UpOutlined, UserOutlined } from "@ant-design/icons";
|
|
4
|
+
import {
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
6
|
+
AuthProvider, useLogout, useUserInfo, } from "./Auth";
|
|
7
|
+
/**
|
|
8
|
+
* 显示用户信息的按钮,点击弹出登出或跳转到账户页的菜单。
|
|
9
|
+
* 默认设置下,该组件必须包裹在 {@linkcode AuthProvider} 内才能正常工作。
|
|
10
|
+
*
|
|
11
|
+
* 除了文档中列出的属性以外,该组件会把额外的属性传递给内部的 [`Button`][1] 组件。
|
|
12
|
+
*
|
|
13
|
+
* [1]: https://ant-design.antgroup.com/components/button-cn
|
|
14
|
+
*/
|
|
15
|
+
function UserButton(props) {
|
|
16
|
+
const { token } = theme.useToken();
|
|
17
|
+
const { compact,
|
|
18
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
19
|
+
userInfo = useUserInfo(), onOpenProfile,
|
|
20
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
21
|
+
onLogout = useLogout(), dropdownProps, ...rest } = props;
|
|
22
|
+
return (_jsx(Dropdown, { trigger: ["click"], placement: "topLeft", ...dropdownProps, menu: {
|
|
23
|
+
items: [
|
|
24
|
+
onOpenProfile
|
|
25
|
+
? {
|
|
26
|
+
key: "profile",
|
|
27
|
+
label: _jsx(_Fragment, { children: "\u8D26\u6237" }), // 如果使用字符串,在缩小时会被裁剪,即使宽度足够
|
|
28
|
+
icon: _jsx(UserOutlined, {}),
|
|
29
|
+
title: "", // 若不设置,在缩小时总是会显示工具提示,即使宽度足够
|
|
30
|
+
onClick: onOpenProfile,
|
|
31
|
+
}
|
|
32
|
+
: null,
|
|
33
|
+
{
|
|
34
|
+
key: "logout",
|
|
35
|
+
icon: _jsx(LogoutOutlined, {}),
|
|
36
|
+
label: _jsx(_Fragment, { children: "\u767B\u51FA" }),
|
|
37
|
+
title: "",
|
|
38
|
+
onClick: onLogout,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
...dropdownProps?.menu,
|
|
42
|
+
style: {
|
|
43
|
+
minWidth: "100%",
|
|
44
|
+
...dropdownProps?.menu?.style,
|
|
45
|
+
},
|
|
46
|
+
}, children: _jsx(Button, { type: "text", icon: _jsx(Avatar, { src: userInfo?.picture, icon: _jsx(UserOutlined, {}) }), ...rest, style: {
|
|
47
|
+
width: "auto",
|
|
48
|
+
margin: token.marginXXS,
|
|
49
|
+
padding: token.paddingXXS,
|
|
50
|
+
...rest.styles,
|
|
51
|
+
}, children: !compact && (_jsxs(_Fragment, { children: [userInfo?.name ?? userInfo?.prefered_username ?? "平台用户", _jsx(UpOutlined, { style: { marginLeft: token.marginXXS } })] })) }) }));
|
|
52
|
+
}
|
|
53
|
+
export default UserButton;
|
|
54
|
+
//# sourceMappingURL=UserButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserButton.js","sourceRoot":"","sources":["../../src/components/UserButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EACN,MAAM,EAEN,QAAQ,EAER,KAAK,GACN,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO;AACL,6DAA6D;AAC7D,YAAY,EAGZ,SAAS,EAET,WAAW,GACZ,MAAM,QAAQ,CAAC;AAoChB;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,KAAsB;IACxC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnC,MAAM,EACJ,OAAO;IACP,sDAAsD;IACtD,QAAQ,GAAG,WAAW,EAAE,EACxB,aAAa;IACb,sDAAsD;IACtD,QAAQ,GAAG,SAAS,EAAE,EACtB,aAAa,EACb,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IACV,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,CAAC,OAAO,CAAC,EAClB,SAAS,EAAC,SAAS,KACf,aAAa,EACjB,IAAI,EAAE;YACJ,KAAK,EAAE;gBACL,aAAa;oBACX,CAAC,CAAC;wBACE,GAAG,EAAE,SAAS;wBACd,KAAK,EAAE,6CAAO,EAAE,0BAA0B;wBAC1C,IAAI,EAAE,KAAC,YAAY,KAAG;wBACtB,KAAK,EAAE,EAAE,EAAE,4BAA4B;wBACvC,OAAO,EAAE,aAAa;qBACvB;oBACH,CAAC,CAAC,IAAI;gBACR;oBACE,GAAG,EAAE,QAAQ;oBACb,IAAI,EAAE,KAAC,cAAc,KAAG;oBACxB,KAAK,EAAE,6CAAO;oBACd,KAAK,EAAE,EAAE;oBACT,OAAO,EAAE,QAAQ;iBAClB;aACF;YACD,GAAG,aAAa,EAAE,IAAI;YACtB,KAAK,EAAE;gBACL,QAAQ,EAAE,MAAM;gBAChB,GAAG,aAAa,EAAE,IAAI,EAAE,KAAK;aAC9B;SACF,YAED,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,IAAI,EAAE,KAAC,MAAM,IAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAC,YAAY,KAAG,GAAI,KAC5D,IAAI,EACR,KAAK,EAAE;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,KAAK,CAAC,SAAS;gBACvB,OAAO,EAAE,KAAK,CAAC,UAAU;gBACzB,GAAG,IAAI,CAAC,MAAM;aACf,YAEA,CAAC,OAAO,IAAI,CACX,8BACG,QAAQ,EAAE,IAAI,IAAI,QAAQ,EAAE,iBAAiB,IAAI,MAAM,EACxD,KAAC,UAAU,IAAC,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,GAAI,IACrD,CACJ,GACM,GACA,CACZ,CAAC;AACJ,CAAC;AAED,eAAe,UAAU,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { getCasdoorSdk, getAccessToken, getDecodedAccessToken, useUserInfo, AuthProvider, type AuthProviderProps, AuthCallback, type AuthCallbackProps, } from "./components/Auth";
|
|
1
|
+
export { getCasdoorSdk, getAccessToken, getDecodedAccessToken, useUserInfo, AuthProvider, type AuthProviderProps, AuthCallback, type AuthCallbackProps, useLogout, } from "./components/Auth";
|
|
2
2
|
export { default as Calendar, type CalendarProps } from "./components/Calendar";
|
|
3
3
|
export { default as CircularProgress, type CircularProgressProps, } from "./components/CircularProgress";
|
|
4
4
|
export { default as ImageBackground, type ImageBackgroundProps, } from "./components/ImageBackground";
|
|
@@ -10,3 +10,5 @@ default as TmsSidebar, type SidebarProps,
|
|
|
10
10
|
/** @deprecated 该名称已弃用,请改为导入 `SidebarProps`。*/
|
|
11
11
|
type SidebarProps as TmsSidebarProps, } from "./components/Sidebar";
|
|
12
12
|
export { default as TsingrocDatePicker, type DatePickerProps, } from "./components/TsingrocDatePicker";
|
|
13
|
+
export { default as TsingrocTheme, type TsingrocThemeProps, } from "./components/TsingrocTheme";
|
|
14
|
+
export { default as UserButton, type UserButtonProps, } from "./components/UserButton";
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { getCasdoorSdk, getAccessToken, getDecodedAccessToken, useUserInfo, AuthProvider, AuthCallback, } from "./components/Auth";
|
|
1
|
+
export { getCasdoorSdk, getAccessToken, getDecodedAccessToken, useUserInfo, AuthProvider, AuthCallback, useLogout, } from "./components/Auth";
|
|
2
2
|
export { default as Calendar } from "./components/Calendar";
|
|
3
3
|
export { default as CircularProgress, } from "./components/CircularProgress";
|
|
4
4
|
export { default as ImageBackground, } from "./components/ImageBackground";
|
|
@@ -8,4 +8,6 @@ export { default as Sidebar,
|
|
|
8
8
|
/** @deprecated 该名称已弃用,请改为导入 `Sidebar`。*/
|
|
9
9
|
default as TmsSidebar, } from "./components/Sidebar";
|
|
10
10
|
export { default as TsingrocDatePicker, } from "./components/TsingrocDatePicker";
|
|
11
|
+
export { default as TsingrocTheme, } from "./components/TsingrocTheme";
|
|
12
|
+
export { default as UserButton, } from "./components/UserButton";
|
|
11
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,YAAY,EAEZ,YAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,YAAY,EAEZ,YAAY,EAEZ,SAAS,GACV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAsB,MAAM,uBAAuB,CAAC;AAEhF,OAAO,EACL,OAAO,IAAI,gBAAgB,GAE5B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,OAAO,IAAI,eAAe,GAE3B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,OAAO,IAAI,oBAAoB,GAEhC,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,OAAO,IAAI,gBAAgB,EAC3B,gBAAgB,GAEjB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,OAAO,IAAI,OAAO;AAClB,yCAAyC;AACzC,OAAO,IAAI,UAAU,GAItB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,OAAO,IAAI,kBAAkB,GAE9B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,OAAO,IAAI,aAAa,GAEzB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,OAAO,IAAI,UAAU,GAEtB,MAAM,yBAAyB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsingroc/tsingroc-components",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -38,21 +38,21 @@
|
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@eslint/js": "^9.21.0",
|
|
41
|
-
"@rsbuild/core": "^1.3.
|
|
41
|
+
"@rsbuild/core": "^1.3.9",
|
|
42
42
|
"@rsbuild/plugin-react": "^1.2.0",
|
|
43
43
|
"@rspress/plugin-preview": "^2.0.0-alpha.0",
|
|
44
44
|
"@types/node": "^22.14.1",
|
|
45
45
|
"@types/react": "^18.3.20",
|
|
46
46
|
"@types/react-dom": "^18.3.6",
|
|
47
47
|
"echarts-for-react": "^3.0.2",
|
|
48
|
-
"eslint": "^9.
|
|
48
|
+
"eslint": "^9.25.0",
|
|
49
49
|
"eslint-plugin-react-hooks": "^5.2.0",
|
|
50
50
|
"globals": "^16.0.0",
|
|
51
51
|
"prettier": "^3.5.3",
|
|
52
52
|
"react-markdown": "^10.1.0",
|
|
53
53
|
"remark-gfm": "^4.0.1",
|
|
54
54
|
"rspress": "^2.0.0-alpha.8",
|
|
55
|
-
"typedoc": "^0.28.
|
|
55
|
+
"typedoc": "^0.28.3",
|
|
56
56
|
"typescript": "^5.8.3",
|
|
57
57
|
"typescript-eslint": "^8.30.1"
|
|
58
58
|
},
|