hrp-ui-base 1.0.2 → 1.0.4
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.cjs +1 -1
- package/dist/components.es.js +3595 -1224
- package/dist/index.cjs +1 -1
- package/dist/index.es.js +86 -69
- package/dist/style.css +1 -1
- package/package.json +2 -1
- package/src/api/notice/NoticeController.ts +73 -0
- package/src/api/notice/bo/NoticePageBO.ts +24 -0
- package/src/api/notice/bo/NoticeVO.ts +31 -0
- package/src/assets/layout/avatar-default.svg +6 -0
- package/src/assets/layout/collect-active.svg +7 -0
- package/src/assets/layout/collect-default.svg +7 -0
- package/src/assets/layout/download-active.svg +8 -0
- package/src/assets/layout/download-default.svg +8 -0
- package/src/assets/layout/export-dark.svg +7 -0
- package/src/assets/layout/export-default.svg +7 -0
- package/src/assets/layout/font-active.svg +6 -0
- package/src/assets/layout/font-default.svg +6 -0
- package/src/assets/layout/help-active.svg +10 -0
- package/src/assets/layout/help-default.svg +10 -0
- package/src/assets/layout/home-active.svg +6 -0
- package/src/assets/layout/home.svg +6 -0
- package/src/assets/layout/menu-expand.svg +6 -0
- package/src/assets/layout/menu-icon.png +0 -0
- package/src/assets/layout/menu-position-active.svg +6 -0
- package/src/assets/layout/menu-position-default.svg +6 -0
- package/src/assets/layout/message-active.svg +9 -0
- package/src/assets/layout/message-default.svg +9 -0
- package/src/assets/layout/moon.svg +8 -0
- package/src/assets/layout/router-all-dark.svg +11 -0
- package/src/assets/layout/router-all-default.svg +17 -0
- package/src/assets/layout/search-active.svg +20 -0
- package/src/assets/layout/search-default.svg +20 -0
- package/src/assets/layout/star-active.svg +1 -0
- package/src/assets/layout/star-default.svg +3 -0
- package/src/assets/layout/sun-active.svg +6 -0
- package/src/assets/layout/sun-default.svg +6 -0
- package/src/assets/layout/switch-moon.svg +3 -0
- package/src/assets/layout/switch-sun.svg +41 -0
- package/src/assets/layout/todo-active.svg +12 -0
- package/src/assets/layout/todo-default.svg +12 -0
- package/src/assets/layout/user-dark.svg +13 -0
- package/src/assets/layout/user-default.svg +13 -0
- package/src/components/base-layout/index.vue +198 -0
- package/src/components/layout/SysHeader.vue +90 -0
- package/src/components/layout/SysHeaderLeft.vue +116 -0
- package/src/components/layout/SysHeaderRight.vue +112 -0
- package/src/components/layout/SysHeaderTabs.vue +289 -0
- package/src/components/layout/components/avatar-component.vue +77 -0
- package/src/components/layout/components/dark-component.vue +82 -0
- package/src/components/layout/components/download-component.vue +49 -0
- package/src/components/layout/components/font-size-component.vue +66 -0
- package/src/components/layout/components/menu-position-component.vue +97 -0
- package/src/components/layout/components/message-component.vue +64 -0
- package/src/components/layout/components/todo-component.vue +55 -0
- package/src/components/layout/index.ts +24 -0
- package/src/components/layout/message/message-dictionary.ts +27 -0
- package/src/components/layout/message/message-icon//345/205/250/351/203/250/351/200/232/347/237/245-/350/223/235.svg +8 -0
- package/src/components/layout/message/message-icon//345/205/250/351/203/250/351/200/232/347/237/245-/351/273/221.svg +8 -0
- package/src/components/layout/message/message-icon//345/205/250/351/203/250/351/200/232/347/237/245.svg +8 -0
- package/src/components/layout/message/message-icon//345/205/254/345/221/212/351/200/232/347/237/245-/350/223/235.svg +12 -0
- package/src/components/layout/message/message-icon//345/205/254/345/221/212/351/200/232/347/237/245-/351/273/221.svg +12 -0
- package/src/components/layout/message/message-icon//345/205/254/345/221/212/351/200/232/347/237/245.svg +12 -0
- package/src/components/layout/message/message-icon//345/256/241/346/211/271/351/200/232/347/237/245-/350/223/235.svg +8 -0
- package/src/components/layout/message/message-icon//345/256/241/346/211/271/351/200/232/347/237/245-/351/273/221.svg +8 -0
- package/src/components/layout/message/message-icon//345/256/241/346/211/271/351/200/232/347/237/245.svg +8 -0
- package/src/components/layout/message/message-icon//345/257/274/345/207/272/351/200/232/347/237/245-/350/223/235.svg +13 -0
- package/src/components/layout/message/message-icon//345/257/274/345/207/272/351/200/232/347/237/245-/351/273/221.svg +13 -0
- package/src/components/layout/message/message-icon//345/257/274/345/207/272/351/200/232/347/237/245.svg +13 -0
- package/src/components/layout/message/message-icon//346/234/252/350/257/273/351/200/232/347/237/245-/350/223/235.svg +11 -0
- package/src/components/layout/message/message-icon//346/234/252/350/257/273/351/200/232/347/237/245-/351/273/221.svg +11 -0
- package/src/components/layout/message/message-icon//346/234/252/350/257/273/351/200/232/347/237/245.svg +11 -0
- package/src/components/layout/message/message-icon//347/251/272/347/212/266/346/200/201.svg +17 -0
- package/src/components/layout/message/message-icon//347/263/273/347/273/237/351/200/232/347/237/245-/350/223/235.svg +13 -0
- package/src/components/layout/message/message-icon//347/263/273/347/273/237/351/200/232/347/237/245-/351/273/221.svg +13 -0
- package/src/components/layout/message/message-icon//347/263/273/347/273/237/351/200/232/347/237/245.svg +13 -0
- package/src/components/layout/message/message-notification-drawer.vue +529 -0
- package/src/components/layout/personalization-guide-dialog.vue +255 -0
- package/src/components/layout/sideMenu-global.scss +115 -0
- package/src/components/layout/sideMenu.scss +312 -0
- package/src/components/layout/sideMenu.vue +542 -0
- package/src/components/layout/sideMenuSonList.vue +185 -0
- package/src/components/layout/styles/icon.scss +72 -0
- package/src/components/layout/types.ts +98 -0
- package/src/components.ts +19 -4
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="29" height="29" viewBox="0 0 29 29">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
.cls-1 {
|
|
5
|
+
fill: #909399;
|
|
6
|
+
}
|
|
7
|
+
</style>
|
|
8
|
+
</defs>
|
|
9
|
+
<g id="组_60" data-name="组 60" transform="translate(-1878 -19)">
|
|
10
|
+
<rect id="头像_男孩" data-name="头像 男孩" class="cls-1" width="29" height="29" rx="5" transform="translate(1878 19)"/>
|
|
11
|
+
<image id="个人中心" width="17" height="17" transform="translate(1884 25)" xlink:href="data:image/png;base64,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"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="big-box-outer">
|
|
3
|
+
<el-container id="common-layout">
|
|
4
|
+
<!-- 顶部导航栏插槽 -->
|
|
5
|
+
<slot name="header"></slot>
|
|
6
|
+
<!-- 额外内容插槽(如个性化引导弹窗等) -->
|
|
7
|
+
<slot name="extra"></slot>
|
|
8
|
+
|
|
9
|
+
<!-- 左侧菜单布局 -->
|
|
10
|
+
<div v-if="isLeftMenu" class="layout-content is-left-menu">
|
|
11
|
+
<slot name="side-menu"></slot>
|
|
12
|
+
<div class="layout-main-column">
|
|
13
|
+
<slot name="tabs"></slot>
|
|
14
|
+
<transition name="width-change">
|
|
15
|
+
<el-main
|
|
16
|
+
class="common-layout-main"
|
|
17
|
+
style="padding: 6px 10px; background: var(--custom-main-bg-fill)"
|
|
18
|
+
>
|
|
19
|
+
<el-main
|
|
20
|
+
class="common-workbench-main hide-scroll-bar"
|
|
21
|
+
style="border-radius: 12px"
|
|
22
|
+
>
|
|
23
|
+
<slot></slot>
|
|
24
|
+
</el-main>
|
|
25
|
+
</el-main>
|
|
26
|
+
</transition>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<!-- 顶部菜单布局 -->
|
|
31
|
+
<template v-else>
|
|
32
|
+
<slot name="tabs"></slot>
|
|
33
|
+
<div class="layout-content">
|
|
34
|
+
<transition name="width-change">
|
|
35
|
+
<el-main
|
|
36
|
+
class="common-layout-main"
|
|
37
|
+
style="padding: 6px 10px; background: var(--custom-main-bg-fill)"
|
|
38
|
+
>
|
|
39
|
+
<el-main
|
|
40
|
+
class="common-workbench-main hide-scroll-bar"
|
|
41
|
+
style="border-radius: 12px"
|
|
42
|
+
>
|
|
43
|
+
<slot></slot>
|
|
44
|
+
</el-main>
|
|
45
|
+
</el-main>
|
|
46
|
+
</transition>
|
|
47
|
+
</div>
|
|
48
|
+
</template>
|
|
49
|
+
</el-container>
|
|
50
|
+
</div>
|
|
51
|
+
</template>
|
|
52
|
+
|
|
53
|
+
<script lang="ts" setup>
|
|
54
|
+
defineOptions({
|
|
55
|
+
name: "BaseLayout",
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
defineProps({
|
|
59
|
+
/**
|
|
60
|
+
* 是否使用左侧菜单布局
|
|
61
|
+
*/
|
|
62
|
+
isLeftMenu: {
|
|
63
|
+
type: Boolean,
|
|
64
|
+
default: false,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
</script>
|
|
68
|
+
|
|
69
|
+
<style lang="scss" scoped>
|
|
70
|
+
.big-box-outer {
|
|
71
|
+
width: 100%;
|
|
72
|
+
min-width: 850px;
|
|
73
|
+
overflow: auto;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** 隐藏滚动条 */
|
|
77
|
+
#common-layout,
|
|
78
|
+
.common-layout-main {
|
|
79
|
+
overflow: hidden;
|
|
80
|
+
scrollbar-width: none;
|
|
81
|
+
-ms-overflow-style: none;
|
|
82
|
+
background: var(--custom-theme-fill-7);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
#common-layout::-webkit-scrollbar,
|
|
86
|
+
.common-layout-main::-webkit-scrollbar {
|
|
87
|
+
display: none;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
#common-layout {
|
|
91
|
+
height: 100%;
|
|
92
|
+
width: 100%;
|
|
93
|
+
min-width: 600px;
|
|
94
|
+
display: flex;
|
|
95
|
+
flex-direction: column;
|
|
96
|
+
flex-wrap: nowrap;
|
|
97
|
+
flex-grow: 1;
|
|
98
|
+
flex-shrink: 1;
|
|
99
|
+
|
|
100
|
+
.common-layout {
|
|
101
|
+
.common-layout-header {
|
|
102
|
+
width: 100%;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.common-layout-main {
|
|
106
|
+
width: 100%;
|
|
107
|
+
box-sizing: border-box;
|
|
108
|
+
height: calc(100% - 78px) !important;
|
|
109
|
+
display: flex;
|
|
110
|
+
flex-direction: row;
|
|
111
|
+
justify-content: flex-start;
|
|
112
|
+
align-items: flex-start;
|
|
113
|
+
flex-wrap: nowrap;
|
|
114
|
+
flex-grow: 0;
|
|
115
|
+
flex-shrink: 0;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.layout-content {
|
|
121
|
+
flex: 1;
|
|
122
|
+
min-height: 0;
|
|
123
|
+
display: flex;
|
|
124
|
+
flex-direction: row;
|
|
125
|
+
overflow: hidden;
|
|
126
|
+
background: var(--custom-theme-fill-7);
|
|
127
|
+
|
|
128
|
+
.common-layout-main {
|
|
129
|
+
flex: 1;
|
|
130
|
+
min-width: 0;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.layout-main-column {
|
|
135
|
+
flex: 1;
|
|
136
|
+
min-width: 0;
|
|
137
|
+
min-height: 0;
|
|
138
|
+
display: flex;
|
|
139
|
+
flex-direction: column;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.layout-content.is-left-menu {
|
|
143
|
+
.common-workbench-main {
|
|
144
|
+
border-left: none;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.common-layout-main {
|
|
148
|
+
flex: 1;
|
|
149
|
+
min-height: 0;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.common-workbench-main {
|
|
154
|
+
height: calc(100%);
|
|
155
|
+
box-sizing: border-box;
|
|
156
|
+
padding: 0;
|
|
157
|
+
background: var(--custom-theme-fill-4);
|
|
158
|
+
border-left: 1px solid var(--el-border-color);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.common-workbench-main-rv {
|
|
162
|
+
height: calc(100% - 24px);
|
|
163
|
+
width: 100%;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* 移动端 */
|
|
167
|
+
@media only screen and (max-device-width: 640px) {
|
|
168
|
+
.common-layout-header {
|
|
169
|
+
display: none;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
#common-layout {
|
|
173
|
+
height: 100%;
|
|
174
|
+
width: 100%;
|
|
175
|
+
min-width: 100%;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.common-layout-main {
|
|
179
|
+
height: 100% !important;
|
|
180
|
+
display: flex !important;
|
|
181
|
+
flex-direction: column !important;
|
|
182
|
+
overflow: hidden;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.common-workbench-main {
|
|
186
|
+
height: 100%;
|
|
187
|
+
width: 100%;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.el-main {
|
|
191
|
+
padding: 0 !important;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* pad端 */
|
|
196
|
+
@media screen and (min-device-width: 640px) and (max-device-width: 1000px) {
|
|
197
|
+
}
|
|
198
|
+
</style>
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="system-header flex-row-between">
|
|
3
|
+
<SysHeaderLeft
|
|
4
|
+
:menuList="menuList"
|
|
5
|
+
:currentApplication="currentApplication"
|
|
6
|
+
:menuPosition="userConfig.menuPosition"
|
|
7
|
+
:currentPath="currentPath"
|
|
8
|
+
:navigationBar="userConfig.navigationBar"
|
|
9
|
+
:showSubmenuDrawer="showSubmenuDrawer"
|
|
10
|
+
@menu-item-click="(item) => emit('menu-item-click', item)"
|
|
11
|
+
@parent-click="(item, index) => emit('parent-click', item, index)"
|
|
12
|
+
@logo-click="emit('logo-click')"
|
|
13
|
+
@collapse-change="(val) => emit('collapse-change', val)"
|
|
14
|
+
/>
|
|
15
|
+
<SysHeaderRight
|
|
16
|
+
:userConfig="userConfig"
|
|
17
|
+
:noticeCount="noticeCount"
|
|
18
|
+
:approvalCount="approvalCount"
|
|
19
|
+
:avatar="userConfig.avatar"
|
|
20
|
+
:downloadActive="downloadActive"
|
|
21
|
+
:todoActive="todoActive"
|
|
22
|
+
@change-dark="(val, ref) => emit('change-dark', val, ref)"
|
|
23
|
+
@change-follow-system="(val) => emit('change-follow-system', val)"
|
|
24
|
+
@change-font-size="(val) => emit('change-font-size', val)"
|
|
25
|
+
@change-menu-position="(val) => emit('change-menu-position', val)"
|
|
26
|
+
@download-click="emit('download-click')"
|
|
27
|
+
@todo-click="emit('todo-click')"
|
|
28
|
+
@message-click="(val) => emit('message-click', val)"
|
|
29
|
+
@message-navigate="(notice) => emit('message-navigate', notice)"
|
|
30
|
+
@message-download="(notice) => emit('message-download', notice)"
|
|
31
|
+
@message-update-count="emit('message-update-count')"
|
|
32
|
+
@personal-sign="emit('personal-sign')"
|
|
33
|
+
@clean-cache="emit('clean-cache')"
|
|
34
|
+
@logout="emit('logout')"
|
|
35
|
+
/>
|
|
36
|
+
</div>
|
|
37
|
+
</template>
|
|
38
|
+
<script lang="ts" setup>
|
|
39
|
+
import { PropType } from "vue";
|
|
40
|
+
import SysHeaderRight from "./SysHeaderRight.vue";
|
|
41
|
+
import SysHeaderLeft from "./SysHeaderLeft.vue";
|
|
42
|
+
import type HomeMenu from "../../api/bms/home/bo/HomeMenu";
|
|
43
|
+
import type NoticeVO from "../../api/notice/bo/NoticeVO";
|
|
44
|
+
import type { UserConfig, DomainInfo } from "./types";
|
|
45
|
+
|
|
46
|
+
defineProps({
|
|
47
|
+
userConfig: { type: Object as PropType<UserConfig>, required: true },
|
|
48
|
+
menuList: { type: Array as PropType<HomeMenu[]>, default: () => [] },
|
|
49
|
+
currentApplication: { type: Object as PropType<DomainInfo>, default: () => ({ domainName: '-' }) },
|
|
50
|
+
currentPath: { type: String, default: '' },
|
|
51
|
+
showSubmenuDrawer: { type: Boolean, default: true },
|
|
52
|
+
noticeCount: { type: Number, default: 0 },
|
|
53
|
+
approvalCount: { type: Number, default: 0 },
|
|
54
|
+
downloadActive: { type: Boolean, default: false },
|
|
55
|
+
todoActive: { type: Boolean, default: false },
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const emit = defineEmits<{
|
|
59
|
+
(e: 'menu-item-click', item: HomeMenu): void
|
|
60
|
+
(e: 'parent-click', item: HomeMenu, index: number): void
|
|
61
|
+
(e: 'logo-click'): void
|
|
62
|
+
(e: 'collapse-change', collapsed: boolean): void
|
|
63
|
+
(e: 'change-dark', value: string, ref?: HTMLElement): void
|
|
64
|
+
(e: 'change-follow-system', value: boolean): void
|
|
65
|
+
(e: 'change-font-size', value: string): void
|
|
66
|
+
(e: 'change-menu-position', value: string): void
|
|
67
|
+
(e: 'download-click'): void
|
|
68
|
+
(e: 'todo-click'): void
|
|
69
|
+
(e: 'message-click', isOpen: boolean): void
|
|
70
|
+
(e: 'message-navigate', notice: NoticeVO): void
|
|
71
|
+
(e: 'message-download', notice: NoticeVO): void
|
|
72
|
+
(e: 'message-update-count'): void
|
|
73
|
+
(e: 'personal-sign'): void
|
|
74
|
+
(e: 'clean-cache'): void
|
|
75
|
+
(e: 'logout'): void
|
|
76
|
+
}>();
|
|
77
|
+
</script>
|
|
78
|
+
<style scoped lang="scss">
|
|
79
|
+
.system-header {
|
|
80
|
+
width: 100%;
|
|
81
|
+
height: 50px;
|
|
82
|
+
background: var(--custom-theme-bg-0);
|
|
83
|
+
border-radius: 0;
|
|
84
|
+
border-bottom: 1px solid var(--el-border-color);
|
|
85
|
+
user-select: none;
|
|
86
|
+
display: flex;
|
|
87
|
+
justify-content: space-between;
|
|
88
|
+
align-items: center;
|
|
89
|
+
}
|
|
90
|
+
</style>
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="sys-header-left" ref="headerLeftRef">
|
|
3
|
+
<img
|
|
4
|
+
ref="logoRef"
|
|
5
|
+
src="../../assets/layout/avatar-default.svg"
|
|
6
|
+
style="width: 30px;height: 30px;cursor: pointer;"
|
|
7
|
+
@click="emit('logo-click')"
|
|
8
|
+
/>
|
|
9
|
+
<span class="sys-left-area-title" ref="titleRef">
|
|
10
|
+
{{ currentApplication.domainName || "-" }}
|
|
11
|
+
</span>
|
|
12
|
+
<div
|
|
13
|
+
class="second-menu-list"
|
|
14
|
+
ref="secondMenuRef"
|
|
15
|
+
:style="{ width: secondMenuWidth + 'px' }"
|
|
16
|
+
v-if="Array.isArray(menuList) && menuList.length > 0"
|
|
17
|
+
>
|
|
18
|
+
<SideMenu
|
|
19
|
+
:menuList="menuList"
|
|
20
|
+
:menuPosition="menuPosition"
|
|
21
|
+
:show-submenu-drawer="showSubmenuDrawer"
|
|
22
|
+
:currentPath="currentPath"
|
|
23
|
+
:navigationBar="navigationBar"
|
|
24
|
+
@parent-click="(item, index) => emit('parent-click', item, index)"
|
|
25
|
+
@menu-item-click="(item) => emit('menu-item-click', item)"
|
|
26
|
+
@collapse-change="(val) => emit('collapse-change', val)"
|
|
27
|
+
/>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</template>
|
|
31
|
+
|
|
32
|
+
<script lang="ts" setup>
|
|
33
|
+
import { computed, onMounted, onUnmounted, ref, nextTick, watch, PropType } from "vue";
|
|
34
|
+
import SideMenu from "./sideMenu.vue";
|
|
35
|
+
import type HomeMenu from "../../api/bms/home/bo/HomeMenu";
|
|
36
|
+
import type { DomainInfo } from "./types";
|
|
37
|
+
|
|
38
|
+
const props = defineProps({
|
|
39
|
+
menuList: { type: Array as PropType<HomeMenu[]>, default: () => [] },
|
|
40
|
+
currentApplication: { type: Object as PropType<DomainInfo>, default: () => ({ domainName: '-' }) },
|
|
41
|
+
menuPosition: { type: String as PropType<"top" | "left">, default: "top" },
|
|
42
|
+
currentPath: { type: String, default: '' },
|
|
43
|
+
showSubmenuDrawer: { type: Boolean, default: true },
|
|
44
|
+
navigationBar: { type: Boolean, default: false },
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const emit = defineEmits<{
|
|
48
|
+
(e: 'parent-click', item: HomeMenu, index: number): void
|
|
49
|
+
(e: 'menu-item-click', item: HomeMenu): void
|
|
50
|
+
(e: 'logo-click'): void
|
|
51
|
+
(e: 'collapse-change', collapsed: boolean): void
|
|
52
|
+
}>();
|
|
53
|
+
|
|
54
|
+
const headerLeftRef = ref<HTMLElement | null>(null);
|
|
55
|
+
const logoRef = ref<HTMLImageElement | null>(null);
|
|
56
|
+
const titleRef = ref<HTMLElement | null>(null);
|
|
57
|
+
const secondMenuRef = ref<HTMLElement | null>(null);
|
|
58
|
+
const secondMenuWidth = ref<number>(0);
|
|
59
|
+
|
|
60
|
+
const calculateSecondMenuWidth = () => {
|
|
61
|
+
if (!headerLeftRef.value || !logoRef.value || !titleRef.value) return;
|
|
62
|
+
const headerLeftWidth = headerLeftRef.value.offsetWidth;
|
|
63
|
+
const logoWidth = logoRef.value.offsetWidth;
|
|
64
|
+
const titleWidth = titleRef.value.offsetWidth;
|
|
65
|
+
const marginOffset = 16;
|
|
66
|
+
secondMenuWidth.value = Math.max(headerLeftWidth - logoWidth - titleWidth - marginOffset, 0);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const handleResize = () => { calculateSecondMenuWidth(); };
|
|
70
|
+
|
|
71
|
+
onMounted(async () => {
|
|
72
|
+
await nextTick();
|
|
73
|
+
calculateSecondMenuWidth();
|
|
74
|
+
window.addEventListener('resize', handleResize);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
watch(() => props.menuPosition, async () => {
|
|
78
|
+
await nextTick();
|
|
79
|
+
calculateSecondMenuWidth();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
onUnmounted(() => {
|
|
83
|
+
window.removeEventListener('resize', handleResize);
|
|
84
|
+
});
|
|
85
|
+
</script>
|
|
86
|
+
<style scoped lang="scss">
|
|
87
|
+
.sys-header-left {
|
|
88
|
+
display: flex;
|
|
89
|
+
align-items: center;
|
|
90
|
+
user-select: none;
|
|
91
|
+
flex-direction: row;
|
|
92
|
+
margin-left: 19px;
|
|
93
|
+
height: 100%;
|
|
94
|
+
flex: 1;
|
|
95
|
+
min-width: 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.second-menu-list {
|
|
99
|
+
margin-left: 10px;
|
|
100
|
+
padding: 4px;
|
|
101
|
+
overflow-x: auto;
|
|
102
|
+
overflow-y: hidden;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.sys-left-area-title {
|
|
106
|
+
color: var(--custom-theme-text-1);
|
|
107
|
+
font-size: 18px;
|
|
108
|
+
font-weight: 500;
|
|
109
|
+
margin-left: 6px;
|
|
110
|
+
width: auto;
|
|
111
|
+
color: var(--header-system-big-title);
|
|
112
|
+
white-space: nowrap;
|
|
113
|
+
flex-shrink: 0;
|
|
114
|
+
cursor: pointer;
|
|
115
|
+
}
|
|
116
|
+
</style>
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="sys-header-right">
|
|
3
|
+
<!-- 下载中心 -->
|
|
4
|
+
<DownloadComponent :active="downloadActive" @click="emit('download-click')" />
|
|
5
|
+
<!-- 审批中心 -->
|
|
6
|
+
<TodoComponent :approvalCount="approvalCount" :active="todoActive" @click="emit('todo-click')" />
|
|
7
|
+
<!-- 消息 -->
|
|
8
|
+
<MessageComponent
|
|
9
|
+
:noticeCount="noticeCount"
|
|
10
|
+
ref="messageComponentRef"
|
|
11
|
+
@click="handleMessageClick"
|
|
12
|
+
/>
|
|
13
|
+
<!-- 昼夜模式 -->
|
|
14
|
+
<DarkComponent
|
|
15
|
+
:dayOrNight="userConfig.dayOrNight"
|
|
16
|
+
:followSystem="userConfig.followSystem"
|
|
17
|
+
@change-dark="(val, ref) => emit('change-dark', val, ref)"
|
|
18
|
+
@change-follow-system="(val) => emit('change-follow-system', val)"
|
|
19
|
+
/>
|
|
20
|
+
<!-- 菜单栏位置 -->
|
|
21
|
+
<MenuPositionComponent
|
|
22
|
+
:menuPosition="userConfig.menuPosition"
|
|
23
|
+
@change="(val) => emit('change-menu-position', val)"
|
|
24
|
+
/>
|
|
25
|
+
<!-- 修改字体 -->
|
|
26
|
+
<FontSizeComponent
|
|
27
|
+
:fontSize="userConfig.fontSize"
|
|
28
|
+
@change="(val) => emit('change-font-size', val)"
|
|
29
|
+
/>
|
|
30
|
+
<!-- 个人信息 -->
|
|
31
|
+
<AvatarComponent
|
|
32
|
+
:avatar="avatar"
|
|
33
|
+
@personal-sign="emit('personal-sign')"
|
|
34
|
+
@clean-cache="emit('clean-cache')"
|
|
35
|
+
@logout="emit('logout')"
|
|
36
|
+
/>
|
|
37
|
+
<!-- 消息通知抽屉 -->
|
|
38
|
+
<MessageNotificationDrawer
|
|
39
|
+
ref="messageDrawerRef"
|
|
40
|
+
@close="handleMessageClose"
|
|
41
|
+
@update-count="emit('message-update-count')"
|
|
42
|
+
@navigate="(notice) => emit('message-navigate', notice)"
|
|
43
|
+
@download="(notice) => emit('message-download', notice)"
|
|
44
|
+
/>
|
|
45
|
+
</div>
|
|
46
|
+
</template>
|
|
47
|
+
|
|
48
|
+
<script lang="ts" setup>
|
|
49
|
+
import { ref, PropType } from "vue";
|
|
50
|
+
import TodoComponent from './components/todo-component.vue'
|
|
51
|
+
import MessageComponent from './components/message-component.vue'
|
|
52
|
+
import DownloadComponent from './components/download-component.vue'
|
|
53
|
+
import DarkComponent from './components/dark-component.vue'
|
|
54
|
+
import FontSizeComponent from './components/font-size-component.vue'
|
|
55
|
+
import MenuPositionComponent from './components/menu-position-component.vue'
|
|
56
|
+
import AvatarComponent from './components/avatar-component.vue'
|
|
57
|
+
import MessageNotificationDrawer from './message/message-notification-drawer.vue'
|
|
58
|
+
import type { UserConfig } from "./types";
|
|
59
|
+
import type NoticeVO from "../../api/notice/bo/NoticeVO";
|
|
60
|
+
|
|
61
|
+
defineProps({
|
|
62
|
+
userConfig: { type: Object as PropType<UserConfig>, required: true },
|
|
63
|
+
noticeCount: { type: Number, default: 0 },
|
|
64
|
+
approvalCount: { type: Number, default: 0 },
|
|
65
|
+
avatar: { type: String, default: '' },
|
|
66
|
+
downloadActive: { type: Boolean, default: false },
|
|
67
|
+
todoActive: { type: Boolean, default: false },
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const emit = defineEmits<{
|
|
71
|
+
(e: 'change-dark', value: string, ref?: HTMLElement): void
|
|
72
|
+
(e: 'change-follow-system', value: boolean): void
|
|
73
|
+
(e: 'change-font-size', value: string): void
|
|
74
|
+
(e: 'change-menu-position', value: string): void
|
|
75
|
+
(e: 'download-click'): void
|
|
76
|
+
(e: 'todo-click'): void
|
|
77
|
+
(e: 'message-click', isOpen: boolean): void
|
|
78
|
+
(e: 'message-navigate', notice: NoticeVO): void
|
|
79
|
+
(e: 'message-download', notice: NoticeVO): void
|
|
80
|
+
(e: 'message-update-count'): void
|
|
81
|
+
(e: 'personal-sign'): void
|
|
82
|
+
(e: 'clean-cache'): void
|
|
83
|
+
(e: 'logout'): void
|
|
84
|
+
}>();
|
|
85
|
+
|
|
86
|
+
const messageComponentRef = ref()
|
|
87
|
+
const messageDrawerRef = ref()
|
|
88
|
+
|
|
89
|
+
const handleMessageClick = (isOpen: boolean) => {
|
|
90
|
+
emit('message-click', isOpen)
|
|
91
|
+
if (isOpen) {
|
|
92
|
+
messageDrawerRef.value?.open()
|
|
93
|
+
} else {
|
|
94
|
+
messageDrawerRef.value?.close()
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const handleMessageClose = () => {
|
|
99
|
+
messageComponentRef.value?.close()
|
|
100
|
+
}
|
|
101
|
+
</script>
|
|
102
|
+
<style scoped lang="scss">
|
|
103
|
+
.sys-header-right {
|
|
104
|
+
width: auto;
|
|
105
|
+
flex-shrink: 0;
|
|
106
|
+
display: flex;
|
|
107
|
+
align-items: center;
|
|
108
|
+
user-select: none;
|
|
109
|
+
flex-direction: row;
|
|
110
|
+
margin-right: 9px;
|
|
111
|
+
}
|
|
112
|
+
</style>
|