@opendesign-plus-test/components 0.0.1-rc.82 → 0.0.1-rc.84

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.
Files changed (210) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -1
  2. package/dist/chunk-OElCookieNotice.es.js +10 -10
  3. package/dist/components/config-provider/OPlusConfigProvider.vue.d.ts +2 -2
  4. package/dist/components/config-provider/index.d.ts +3 -3
  5. package/dist/components/meeting/composables/useMeetingConfig.d.ts +1 -1
  6. package/dist/components.cjs.js +33 -33
  7. package/dist/components.css +1 -1
  8. package/dist/components.es.js +1511 -1504
  9. package/dist/treeshaking/components/banner/OBanner.css +37 -37
  10. package/dist/treeshaking/components/banner/OBanner.vue.mjs +1 -1
  11. package/dist/treeshaking/components/banner/OBanner.vue2.mjs +2 -1
  12. package/dist/treeshaking/components/banner/OBanner2.css +10 -10
  13. package/dist/treeshaking/components/config-provider/OPlusConfigProvider.vue.d.ts +2 -2
  14. package/dist/treeshaking/components/config-provider/index.d.ts +3 -3
  15. package/dist/treeshaking/components/cookie-notice/OCookieNotice.vue.mjs +1 -1
  16. package/dist/treeshaking/components/cookie-notice/OCookieNotice.vue2.mjs +1 -1
  17. package/dist/treeshaking/components/cookie-notice/OCookieNotice2.css +62 -62
  18. package/dist/treeshaking/components/events/OEventsApply.vue.mjs +1 -1
  19. package/dist/treeshaking/components/header/OHeader.css +12 -12
  20. package/dist/treeshaking/components/header/OHeader.vue.mjs +1 -1
  21. package/dist/treeshaking/components/header/OHeader.vue2.mjs +1 -1
  22. package/dist/treeshaking/components/header/components/HeaderContent.css +235 -235
  23. package/dist/treeshaking/components/header/components/HeaderContent.vue.mjs +1 -1
  24. package/dist/treeshaking/components/header/components/HeaderContent.vue2.mjs +3 -2
  25. package/dist/treeshaking/components/header/components/HeaderNav.css +26 -26
  26. package/dist/treeshaking/components/header/components/HeaderNav.vue.mjs +1 -1
  27. package/dist/treeshaking/components/header/components/HeaderNav.vue2.mjs +1 -1
  28. package/dist/treeshaking/components/meeting/composables/useMeetingConfig.d.ts +1 -1
  29. package/dist/treeshaking/i18n/index.mjs +1 -1
  30. package/dist/treeshaking/shared/theme.mjs +13 -0
  31. package/package.json +4 -1
  32. package/docs/design.md +0 -27
  33. package/docs/design_banner.md +0 -41
  34. package/docs/design_section.md +0 -27
  35. package/plugins/css-inject-plugin.ts +0 -37
  36. package/scripts/build.js +0 -17
  37. package/scripts/generate-components-index.js +0 -62
  38. package/src/assets/events/svg-icons/icon-checked.svg +0 -3
  39. package/src/assets/events/svg-icons/icon-competition.svg +0 -7
  40. package/src/assets/events/svg-icons/icon-events.svg +0 -4
  41. package/src/assets/events/svg-icons/icon-release.svg +0 -4
  42. package/src/assets/events/svg-icons/icon-summit.svg +0 -4
  43. package/src/assets/meeting/empty.png +0 -0
  44. package/src/assets/meeting/svg-icons/icon-all.svg +0 -4
  45. package/src/assets/meeting/svg-icons/icon-backward.svg +0 -4
  46. package/src/assets/meeting/svg-icons/icon-calendar.svg +0 -3
  47. package/src/assets/meeting/svg-icons/icon-cancel.svg +0 -4
  48. package/src/assets/meeting/svg-icons/icon-captions.svg +0 -4
  49. package/src/assets/meeting/svg-icons/icon-close-captions.svg +0 -6
  50. package/src/assets/meeting/svg-icons/icon-close-fullscreen.svg +0 -6
  51. package/src/assets/meeting/svg-icons/icon-copy.svg +0 -4
  52. package/src/assets/meeting/svg-icons/icon-create.svg +0 -5
  53. package/src/assets/meeting/svg-icons/icon-delete.svg +0 -7
  54. package/src/assets/meeting/svg-icons/icon-empty.svg +0 -65
  55. package/src/assets/meeting/svg-icons/icon-event.svg +0 -4
  56. package/src/assets/meeting/svg-icons/icon-export.svg +0 -3
  57. package/src/assets/meeting/svg-icons/icon-forward.svg +0 -4
  58. package/src/assets/meeting/svg-icons/icon-fullscreen.svg +0 -6
  59. package/src/assets/meeting/svg-icons/icon-help.svg +0 -3
  60. package/src/assets/meeting/svg-icons/icon-important.svg +0 -4
  61. package/src/assets/meeting/svg-icons/icon-info.svg +0 -3
  62. package/src/assets/meeting/svg-icons/icon-meet.svg +0 -4
  63. package/src/assets/meeting/svg-icons/icon-meeting-message.svg +0 -5
  64. package/src/assets/meeting/svg-icons/icon-meeting.svg +0 -4
  65. package/src/assets/meeting/svg-icons/icon-play.svg +0 -5
  66. package/src/assets/meeting/svg-icons/icon-playing-tip.svg +0 -7
  67. package/src/assets/meeting/svg-icons/icon-playing.svg +0 -5
  68. package/src/assets/meeting/svg-icons/icon-question.svg +0 -4
  69. package/src/assets/meeting/svg-icons/icon-sound.svg +0 -5
  70. package/src/assets/meeting/svg-icons/icon-speaker.svg +0 -3
  71. package/src/assets/meeting/svg-icons/icon-summit.svg +0 -4
  72. package/src/assets/meeting/svg-icons/icon-telligent.svg +0 -3
  73. package/src/assets/meeting/svg-icons/icon-tip.svg +0 -3
  74. package/src/assets/meeting/svg-icons/icon-todo.svg +0 -4
  75. package/src/assets/meeting/transparent.png +0 -0
  76. package/src/assets/styles/element-plus.scss +0 -283
  77. package/src/assets/svg-icons/icon-arrow-left.svg +0 -3
  78. package/src/assets/svg-icons/icon-avatar-line.svg +0 -3
  79. package/src/assets/svg-icons/icon-caret-left.svg +0 -3
  80. package/src/assets/svg-icons/icon-caret-right.svg +0 -3
  81. package/src/assets/svg-icons/icon-chevron-down.svg +0 -3
  82. package/src/assets/svg-icons/icon-chevron-right.svg +0 -3
  83. package/src/assets/svg-icons/icon-chevron-up.svg +0 -3
  84. package/src/assets/svg-icons/icon-close.svg +0 -3
  85. package/src/assets/svg-icons/icon-delete-hover.svg +0 -4
  86. package/src/assets/svg-icons/icon-delete.svg +0 -7
  87. package/src/assets/svg-icons/icon-filter.svg +0 -3
  88. package/src/assets/svg-icons/icon-header-back.svg +0 -3
  89. package/src/assets/svg-icons/icon-header-delete.svg +0 -3
  90. package/src/assets/svg-icons/icon-header-menu.svg +0 -3
  91. package/src/assets/svg-icons/icon-header-person.svg +0 -3
  92. package/src/assets/svg-icons/icon-header-search.svg +0 -4
  93. package/src/assets/svg-icons/icon-image-close.svg +0 -4
  94. package/src/assets/svg-icons/icon-image-upload.svg +0 -3
  95. package/src/assets/svg-icons/icon-image-zoomin.svg +0 -3
  96. package/src/assets/svg-icons/icon-loading.svg +0 -4
  97. package/src/assets/svg-icons/icon-locale.svg +0 -3
  98. package/src/assets/svg-icons/icon-log-off.svg +0 -3
  99. package/src/assets/svg-icons/icon-message.svg +0 -3
  100. package/src/assets/svg-icons/icon-moon.svg +0 -3
  101. package/src/assets/svg-icons/icon-outlink.svg +0 -3
  102. package/src/assets/svg-icons/icon-overview.svg +0 -3
  103. package/src/assets/svg-icons/icon-refresh.svg +0 -3
  104. package/src/assets/svg-icons/icon-search.svg +0 -3
  105. package/src/assets/svg-icons/icon-setting.svg +0 -3
  106. package/src/assets/svg-icons/icon-sun.svg +0 -3
  107. package/src/assets/svg-icons/icon-tips.svg +0 -3
  108. package/src/components/activity/OActivityApproval.vue +0 -868
  109. package/src/components/activity/OActivityForm.vue +0 -548
  110. package/src/components/activity/OActivityMyCalendar.vue +0 -1540
  111. package/src/components/activity/composables/useActivityConfig.ts +0 -141
  112. package/src/components/activity/config.ts +0 -1
  113. package/src/components/activity/index.ts +0 -24
  114. package/src/components/activity/types.ts +0 -95
  115. package/src/components/banner/OBanner.vue +0 -288
  116. package/src/components/banner/OBannerContent.vue +0 -175
  117. package/src/components/banner/index.ts +0 -18
  118. package/src/components/banner/types.ts +0 -39
  119. package/src/components/common/AppAvatar.vue +0 -83
  120. package/src/components/common/ClientOnly.vue +0 -13
  121. package/src/components/common/ContentWrapper.vue +0 -82
  122. package/src/components/common/MoreText.vue +0 -124
  123. package/src/components/common/ThFilter.vue +0 -330
  124. package/src/components/config-provider/OPlusConfigProvider.vue +0 -32
  125. package/src/components/config-provider/index.ts +0 -10
  126. package/src/components/cookie-notice/OCookieNotice.vue +0 -575
  127. package/src/components/cookie-notice/index.ts +0 -10
  128. package/src/components/element-plus/OElCookieNotice.vue +0 -603
  129. package/src/components/element-plus/index.ts +0 -3
  130. package/src/components/events/OEventsApply.vue +0 -509
  131. package/src/components/events/OEventsCalendar.vue +0 -600
  132. package/src/components/events/OEventsList.vue +0 -461
  133. package/src/components/events/config.ts +0 -35
  134. package/src/components/events/index.ts +0 -24
  135. package/src/components/events/types.ts +0 -84
  136. package/src/components/events/utils.ts +0 -9
  137. package/src/components/footer/OFooter.vue +0 -577
  138. package/src/components/footer/index.ts +0 -10
  139. package/src/components/header/OHeader.vue +0 -157
  140. package/src/components/header/OHeaderMobile.vue +0 -184
  141. package/src/components/header/components/HeaderContent.vue +0 -1125
  142. package/src/components/header/components/HeaderNav.vue +0 -278
  143. package/src/components/header/components/HeaderNavMobile.vue +0 -380
  144. package/src/components/header/index.ts +0 -18
  145. package/src/components/header/types.ts +0 -96
  146. package/src/components/header-language-switcher/OHeaderLanguageSwitcher.vue +0 -249
  147. package/src/components/header-language-switcher/index.ts +0 -10
  148. package/src/components/header-search/OHeaderSearch.vue +0 -628
  149. package/src/components/header-search/index.ts +0 -10
  150. package/src/components/header-source-code/OHeaderSourceCode.vue +0 -151
  151. package/src/components/header-source-code/index.ts +0 -10
  152. package/src/components/header-theme/OHeaderTheme.vue +0 -132
  153. package/src/components/header-theme/index.ts +0 -10
  154. package/src/components/header-user/OHeaderUser.vue +0 -249
  155. package/src/components/header-user/index.ts +0 -10
  156. package/src/components/meeting/OMeetingCalendar.vue +0 -943
  157. package/src/components/meeting/OMeetingForm.vue +0 -1131
  158. package/src/components/meeting/OMeetingMyCalendar.vue +0 -1628
  159. package/src/components/meeting/OMeetingPlayback.vue +0 -469
  160. package/src/components/meeting/OMeetingSigCalendar.vue +0 -500
  161. package/src/components/meeting/components/OMeetingCalendarList.vue +0 -626
  162. package/src/components/meeting/components/OMeetingCalendarSelector.vue +0 -213
  163. package/src/components/meeting/components/OMeetingDetail.vue +0 -285
  164. package/src/components/meeting/components/OMeetingPlaybackSubtitles.vue +0 -615
  165. package/src/components/meeting/components/OMeetingPlaybackVideo.vue +0 -741
  166. package/src/components/meeting/components/OMeetingSigAside.vue +0 -205
  167. package/src/components/meeting/composables/useMeetingConfig.ts +0 -108
  168. package/src/components/meeting/config.ts +0 -48
  169. package/src/components/meeting/index.ts +0 -45
  170. package/src/components/meeting/types.ts +0 -270
  171. package/src/components/meeting/utils.ts +0 -70
  172. package/src/components/search/OSearchInput.vue +0 -526
  173. package/src/components/search/composables/useImageSearch.ts +0 -157
  174. package/src/components/search/composables/useKeywordHighlight.ts +0 -30
  175. package/src/components/search/composables/useSearchHistory.ts +0 -75
  176. package/src/components/search/index.ts +0 -23
  177. package/src/components/search/internal/HighlightText.vue +0 -37
  178. package/src/components/search/internal/SearchImageInput.vue +0 -498
  179. package/src/components/search/internal/SearchPanel.vue +0 -431
  180. package/src/components/search/types.ts +0 -25
  181. package/src/components/section/OSection.vue +0 -178
  182. package/src/components/section/index.ts +0 -10
  183. package/src/draft/Banner.vue +0 -265
  184. package/src/draft/ButtonCards.vue +0 -106
  185. package/src/draft/Feature.vue +0 -134
  186. package/src/draft/Footer.vue +0 -519
  187. package/src/draft/HorizontalAnchor.vue +0 -165
  188. package/src/draft/ItemSwiper.vue +0 -133
  189. package/src/draft/Logo.vue +0 -141
  190. package/src/draft/LogoCard.vue +0 -75
  191. package/src/draft/LogoV2.vue +0 -19
  192. package/src/draft/MainCard.vue +0 -38
  193. package/src/draft/MultiCard.vue +0 -95
  194. package/src/draft/MultiIconCard.vue +0 -74
  195. package/src/draft/OInfoCard.vue +0 -176
  196. package/src/draft/Process.vue +0 -81
  197. package/src/draft/Section.vue +0 -167
  198. package/src/draft/SingleTabCard.vue +0 -85
  199. package/src/draft/SliderCard.vue +0 -111
  200. package/src/env.d.ts +0 -16
  201. package/src/i18n/en.ts +0 -278
  202. package/src/i18n/index.ts +0 -56
  203. package/src/i18n/zh.ts +0 -268
  204. package/src/index.ts +0 -18
  205. package/src/shared/provide.ts +0 -6
  206. package/src/shims-vue-dompurify-html.d.ts +0 -17
  207. package/src/vue.d.ts +0 -10
  208. package/tsconfig.json +0 -37
  209. package/vite.config.ts +0 -123
  210. package/vite.treeshaking.config.ts +0 -127
@@ -1,151 +0,0 @@
1
- <script setup lang="ts">
2
- import { ref } from 'vue';
3
- import { OIcon, ODropdown, ODropdownItem } from '@opensig/opendesign';
4
-
5
- import IconChevronDown from '~icons/components/icon-chevron-down.svg';
6
-
7
- export interface CodeItemT {
8
- label: string;
9
- href: string;
10
- icon?: string;
11
- target?: string;
12
- }
13
-
14
- export interface CodePropsT {
15
- title?: string;
16
- options?: CodeItemT[];
17
- href?: string;
18
- target?: string;
19
- icon?: string;
20
- justify?: string;
21
- }
22
-
23
- withDefaults(defineProps<CodePropsT>(), {
24
- justify: 'center',
25
- });
26
-
27
- const itemChange = (data: Pick<CodeItemT, 'href' | 'target'>) => {
28
- window.open(data.href, data.target ? data.target : '_blank');
29
- };
30
-
31
- const dropdownVisible = ref(false);
32
- const visibleChange = (val: boolean) => {
33
- dropdownVisible.value = val;
34
- };
35
- </script>
36
-
37
- <template>
38
- <div class="source-code">
39
- <div v-if="href" class="info-wrap" @click="itemChange({ href: href, target: target })">
40
- <span class="title">{{ title }}</span>
41
- <OIcon v-if="icon">
42
- <component :is="icon" class="icon" />
43
- </OIcon>
44
- </div>
45
- <ODropdown
46
- v-else
47
- trigger="hover"
48
- optionPosition="bottom"
49
- option-wrap-class="dropdown"
50
- :class="{ 'dropdown-active': dropdownVisible }"
51
- @visible-change="visibleChange"
52
- >
53
- <div class="info-wrap hover-icon-rotate">
54
- <span class="title">{{ title }}</span>
55
- <OIcon class="icon"><IconChevronDown /></OIcon>
56
- </div>
57
- <template #dropdown>
58
- <ODropdownItem v-for="item in options" @click="itemChange(item)" :key="item.href" class="list" :style="{ '--dropdown-item-justify': justify }">
59
- {{ item.label }}
60
- <OIcon v-if="item.icon">
61
- <component :is="item.icon" class="icon" />
62
- </OIcon>
63
- </ODropdownItem>
64
- </template>
65
- </ODropdown>
66
- </div>
67
- </template>
68
-
69
- <style lang="scss" scoped>
70
- .source-code {
71
- height: 100%;
72
- display: flex;
73
- align-items: center;
74
- .info-wrap {
75
- height: 100%;
76
- display: flex;
77
- align-items: center;
78
- color: var(--o-color-info1);
79
- cursor: pointer;
80
-
81
- @include hover {
82
- color: var(--o-color-primary1);
83
- }
84
-
85
- .title {
86
- display: flex;
87
- align-items: center;
88
- cursor: pointer;
89
- height: 100%;
90
- @include tip1;
91
- }
92
- }
93
- .list {
94
- background: var(--o-color-fill2);
95
- cursor: pointer;
96
- box-shadow: var(--o-shadow-1);
97
- border-radius: var(--o-radius_control-xs);
98
- padding: var(--o-gap-1);
99
- width: 144px;
100
- }
101
- }
102
-
103
- .hover-icon-rotate {
104
- .o-icon {
105
- transition: all var(--o-duration-m1) var(--o-easing-standard-in);
106
- }
107
-
108
- @include hover {
109
- .o-icon {
110
- transform: rotate(-180deg);
111
- }
112
- }
113
- }
114
- .icon {
115
- font-size: var(--o-icon_size_control-xs);
116
- margin-left: var(--o-gap-1);
117
- }
118
- .o-dropdown {
119
- height: 100%;
120
- }
121
- .dropdown-active {
122
- .info-wrap {
123
- color: var(--o-color-primary1);
124
- }
125
- .o-icon {
126
- transform: rotate(-180deg);
127
- }
128
- }
129
- .o-dropdown-item {
130
- background: var(--o-color-fill2);
131
- cursor: pointer;
132
- border-radius: var(--o-radius_control-xs);
133
- padding: var(--o-gap-1) 12px;
134
- min-width: 144px;
135
- height: 32px;
136
- @include tip1;
137
-
138
- @include hover {
139
- background: var(--o-color-control2-light);
140
- }
141
-
142
- &:active {
143
- color: var(--o-color-primary1);
144
- background: var(--o-color-control3-light);
145
- font-weight: 600;
146
- }
147
- }
148
- .dropdown {
149
- --dropdown-list-radius: var(--o-radius-xs);
150
- }
151
- </style>
@@ -1,10 +0,0 @@
1
- import _OHeaderSourceCode from './OHeaderSourceCode.vue';
2
- import type { App } from 'vue';
3
-
4
- const OHeaderSourceCode = Object.assign(_OHeaderSourceCode, {
5
- install(app: App) {
6
- app.component('OHeaderSourceCode', _OHeaderSourceCode);
7
- },
8
- });
9
-
10
- export { OHeaderSourceCode };
@@ -1,132 +0,0 @@
1
- <script lang="ts" setup>
2
- import { computed } from 'vue';
3
- import { OIcon, OSwitch, OIconSun, OIconMoon } from '@opensig/opendesign';
4
- import { useScreen } from '@opendesign-plus/composables';
5
-
6
- import IconSun from '~icons/components/icon-sun.svg';
7
- import IconMoon from '~icons/components/icon-moon.svg';
8
-
9
- export interface OHeaderThemePropsT {
10
- theme?: string;
11
- type?: 'auto' | 'common' | 'mobile';
12
- lightValue?: string;
13
- darkValue?: string;
14
- disabled?: boolean;
15
- }
16
-
17
- export interface OHeaderThemeEmitsT {
18
- (e: 'update:theme', value: string): void;
19
- (e: 'change', val: string): void;
20
- }
21
-
22
- const props = withDefaults(defineProps<OHeaderThemePropsT>(), {
23
- theme: 'light',
24
- type: 'auto',
25
- lightValue: 'light',
26
- darkValue: 'dark',
27
- disabled: false,
28
- });
29
-
30
- const emit = defineEmits<OHeaderThemeEmitsT>();
31
-
32
- const { gtPhone } = useScreen();
33
-
34
- const switchVal = computed({
35
- get() {
36
- return props.theme;
37
- },
38
- set(val: string) {
39
- emit('update:theme', val);
40
- emit('change', val);
41
- },
42
- });
43
-
44
- const isCommon = computed(() => {
45
- return props.type === 'common' || (props.type === 'auto' && gtPhone.value);
46
- });
47
-
48
- const toggleTheme = () => {
49
- if (props.disabled) {
50
- return;
51
- }
52
-
53
- switchVal.value = switchVal.value === props.lightValue ? props.darkValue : props.lightValue;
54
- };
55
- </script>
56
-
57
- <template>
58
- <div class="o-theme-switcher">
59
- <div v-if="isCommon" class="o-theme-switcher-common" :class="{ disabled }" @click="toggleTheme">
60
- <OIcon class="o-theme-icon">
61
- <IconMoon v-if="switchVal === lightValue" />
62
- <IconSun v-else />
63
- </OIcon>
64
- </div>
65
-
66
- <div v-else class="o-theme-switcher-mobile">
67
- <OSwitch v-model="switchVal" class="o-theme-switch" :checked-value="lightValue" :unchecked-value="darkValue" :disabled="disabled">
68
- <template #inactive>
69
- <OIconMoon />
70
- </template>
71
- <template #active>
72
- <OIconSun />
73
- </template>
74
- <template #off>
75
- <OIconSun />
76
- </template>
77
- <template #on>
78
- <OIconMoon />
79
- </template>
80
- </OSwitch>
81
- </div>
82
- </div>
83
- </template>
84
-
85
- <style lang="scss" scoped>
86
- .o-theme-switcher-common {
87
- display: flex;
88
- align-items: center;
89
- width: var(--o-icon_size-m);
90
- height: var(--o-icon_size-m);
91
- font-size: var(--o-icon_size-m);
92
-
93
- @include respond-to('pad_h') {
94
- width: var(--o-icon_size-s);
95
- height: var(--o-icon_size-s);
96
- font-size: var(--o-icon_size-s);
97
- }
98
- }
99
-
100
- .o-theme-switcher-common:not(.disabled) {
101
- cursor: pointer;
102
-
103
- .o-theme-icon {
104
- color: var(--o-color-info2);
105
-
106
- @include hover {
107
- color: var(--o-color-primary2);
108
- background-color: var(--o-color-control2-light);
109
- border-radius: var(--o-radius-xs);
110
- }
111
-
112
- &:active {
113
- color: var(--o-color-primary3);
114
- }
115
- }
116
- }
117
-
118
- .o-theme-switcher-common.disabled {
119
- cursor: not-allowed;
120
-
121
- .o-theme-icon {
122
- color: var(--o-color-info4);
123
- }
124
- }
125
-
126
- .o-theme-switcher-mobile {
127
- .o-theme-switch {
128
- --switch-handler-color: var(--o-color-white);
129
- --switch-color: var(--o-color-info4);
130
- }
131
- }
132
- </style>
@@ -1,10 +0,0 @@
1
- import _OHeaderTheme from './OHeaderTheme.vue';
2
- import type { App } from 'vue';
3
-
4
- const OHeaderTheme = Object.assign(_OHeaderTheme, {
5
- install(app: App) {
6
- app.component('OHeaderTheme', _OHeaderTheme);
7
- },
8
- });
9
-
10
- export { OHeaderTheme };
@@ -1,249 +0,0 @@
1
- <script setup lang="ts">
2
- import { OIcon, OBadge, ODropdown, ODropdownItem } from '@opensig/opendesign';
3
-
4
- import AppAvatar from '../common/AppAvatar.vue';
5
-
6
- import IconAvatar from '~icons/components/icon-avatar-line.svg';
7
- import IconChevronDown from '~icons/components/icon-chevron-down.svg';
8
-
9
- import { useScreen } from '@opendesign-plus/composables';
10
-
11
- const { lePadV } = useScreen();
12
-
13
- export interface UserInfoT {
14
- photo: string;
15
- username: string;
16
- }
17
-
18
- export interface OptionsItemT {
19
- id: string; // id
20
- label: string; // 标题
21
- icon?: string; // icon
22
- url: string; // 跳转链接
23
- target: string; // 跳转方式
24
- total: number; // 消息数量
25
- logout: boolean; // 是否是退出登录 item
26
- }
27
-
28
- export interface UserPropsT {
29
- token?: string;
30
- lang?: string;
31
- noticeTotal?: number;
32
- userInfo?: UserInfoT;
33
- options?: OptionsItemT[];
34
- customSize?: number;
35
- }
36
-
37
- withDefaults(defineProps<UserPropsT>(), {
38
- token: undefined,
39
- lang: undefined,
40
- noticeTotal: undefined,
41
- userInfo: undefined,
42
- options: undefined,
43
- customSize: undefined,
44
- });
45
-
46
- export interface OHeaderUserEmitsT {
47
- (e: 'login'): void;
48
- (e: 'logout'): void;
49
- }
50
-
51
- const emit = defineEmits<OHeaderUserEmitsT>();
52
-
53
- const login = () => {
54
- emit('login');
55
- };
56
-
57
- const jumpToPage = (val: any) => {
58
- if (val?.logout) {
59
- emit('logout');
60
- } else {
61
- window.open(val.url, val.target);
62
- }
63
- };
64
- </script>
65
-
66
- <template>
67
- <div class="header-user">
68
- <!-- 未登录或登录失败 -->
69
- <template v-if="!token">
70
- <OIcon @click="login" class="avatar-icon">
71
- <IconAvatar />
72
- </OIcon>
73
- </template>
74
- <!-- 已登录 -->
75
- <Transition name="header-user-zoom-in">
76
- <div class="user-info" v-if="token">
77
- <ODropdown
78
- :trigger="lePadV ? 'click' : 'hover'"
79
- optionWidthMode="auto"
80
- :optionPosition="lePadV ? 'br' : 'bottom'"
81
- :option-wrap-class="`user-dropdown ${lang === 'en' ? 'is-en' : ''}`"
82
- >
83
- <div class="info-wrap hover-icon-rotate">
84
- <OBadge :value="noticeTotal" :dot="true" color="danger" class="header-message user-avatar" :class="{ 'notice-not': !noticeTotal }">
85
- <AppAvatar :avatar="userInfo.photo" :name="userInfo.username" :custom-size="customSize" />
86
- </OBadge>
87
- <p class="user-account">{{ userInfo.username }}</p>
88
- <OIcon class="icon">
89
- <IconChevronDown />
90
- </OIcon>
91
- </div>
92
- <template #dropdown>
93
- <!-- 账号信息 -->
94
- <template v-for="item in options" :key="item.label">
95
- <ODropdownItem @click="jumpToPage(item)">
96
- <OBadge v-if="item?.total" :value="item.total" color="danger" class="header-message message" :class="{ 'notice-not': !item.total }">
97
- {{ item.label }}
98
- </OBadge>
99
- <span v-else>{{ item.label }}</span>
100
- </ODropdownItem>
101
- </template>
102
- </template>
103
- </ODropdown>
104
- </div>
105
- </Transition>
106
- </div>
107
- </template>
108
-
109
- <style lang="scss" scoped>
110
- .header-user {
111
- display: flex;
112
- align-items: center;
113
- height: 100%;
114
- visibility: visible;
115
- opacity: 1;
116
- transition: opacity 0.15s;
117
- }
118
-
119
- .user-info {
120
- height: 100%;
121
- min-width: 32px;
122
- display: flex;
123
- cursor: pointer;
124
- }
125
-
126
- .info-wrap {
127
- height: calc(100% - 10px);
128
- margin: 5px 0;
129
- display: flex;
130
- align-items: center;
131
-
132
- .icon {
133
- margin-left: 4px;
134
- }
135
- }
136
-
137
- .user-avatar {
138
- margin-right: 4px;
139
-
140
- :deep(.o-badge-content) {
141
- --badge-dot-size: 6px;
142
- right: 7px;
143
- top: 2px;
144
- }
145
- }
146
-
147
- .o-dropdown-item {
148
- white-space: nowrap;
149
- --dropdown-item-color: var(--o-color-info1);
150
- --dropdown-item-padding: 5px 12px;
151
- @include tip1;
152
-
153
- @include hover {
154
- color: var(--o-color-primary1);
155
- background: var(--o-color-control2-light);
156
- }
157
- }
158
-
159
- .notice-not {
160
- :deep(.o-badge-content) {
161
- display: none;
162
- }
163
- }
164
-
165
- .user-account {
166
- color: var(--o-color-info1);
167
- max-width: 96px;
168
- font-weight: 500;
169
- @include tip1;
170
- @include text-truncate(1);
171
- }
172
-
173
- @include respond('<=pad_v') {
174
- .header-user {
175
- min-width: auto;
176
-
177
- .user-info {
178
- min-width: 24px;
179
-
180
- .info-wrap {
181
- .user-avatar {
182
- margin-right: 0;
183
- }
184
-
185
- .user-account {
186
- display: none;
187
- }
188
-
189
- .icon {
190
- display: none;
191
- }
192
- }
193
- }
194
- }
195
- }
196
- </style>
197
-
198
- <style lang="scss">
199
- .user-dropdown {
200
- --dropdown-list-radius: var(--o-radius-xs);
201
-
202
- .o-dropdown-item {
203
- padding-left: 12px;
204
- padding-right: 12px;
205
- font-size: 14px;
206
- line-height: 22px;
207
- @include respond('<=pad_v') {
208
- @include tip1;
209
- }
210
- }
211
- }
212
- .avatar-icon {
213
- font-size: 24px;
214
- color: var(--o-color-info1);
215
- cursor: pointer;
216
-
217
- @include hover {
218
- color: var(--o-color-primary1);
219
- }
220
- }
221
-
222
- @include respond('<=pad_v') {
223
- .user-dropdown {
224
- .o-divider {
225
- display: none;
226
- }
227
-
228
- .o-icon {
229
- display: none;
230
- }
231
-
232
- .o-badge-content {
233
- right: 0 !important;
234
- transform: translate(0, 0) scale(0.5);
235
- transform-origin: top right;
236
- min-width: 18px;
237
- width: fit-content;
238
- height: 18px;
239
- font-size: 12px;
240
- line-height: 18px;
241
- .o-badge-label {
242
- transform: scale(1);
243
- font-size: 12px;
244
- line-height: 18px;
245
- }
246
- }
247
- }
248
- }
249
- </style>
@@ -1,10 +0,0 @@
1
- import _OHeaderUser from './OHeaderUser.vue';
2
- import type { App } from 'vue';
3
-
4
- const OHeaderUser = Object.assign(_OHeaderUser, {
5
- install(app: App) {
6
- app.component('OHeaderUser', _OHeaderUser);
7
- },
8
- });
9
-
10
- export { OHeaderUser };