@opendesign-plus/components 0.0.1-rc.17 → 0.0.1-rc.19

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 (50) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -1
  2. package/dist/chunk-OElCookieNotice.es.js +18 -18
  3. package/dist/components/OHeaderUser.vue.d.ts +2 -0
  4. package/dist/components/header/OHeader.vue.d.ts +8 -2
  5. package/dist/components/header/OHeaderMobile.vue.d.ts +171 -0
  6. package/dist/components/header/components/HeaderContent.vue.d.ts +8 -1
  7. package/dist/components/header/components/HeaderNav.vue.d.ts +13 -1
  8. package/dist/components/header/components/HeaderNavMobile.vue.d.ts +33 -0
  9. package/dist/components/header/index.d.ts +128 -5
  10. package/dist/components/header/types.d.ts +80 -0
  11. package/dist/components/meeting/OMeetingCalendar.vue.d.ts +1 -0
  12. package/dist/components/meeting/types.d.ts +1 -0
  13. package/dist/components.cjs.js +36 -36
  14. package/dist/components.css +1 -1
  15. package/dist/components.es.js +8683 -8955
  16. package/package.json +1 -1
  17. package/src/components/OHeaderUser.vue +4 -4
  18. package/src/components/OSourceCode.vue +1 -1
  19. package/src/components/activity/OActivityApproval.vue +3 -10
  20. package/src/components/activity/OActivityForm.vue +1 -8
  21. package/src/components/activity/OMyActivityCalendar.vue +0 -15
  22. package/src/components/activity/composables/useActivityConfig.ts +140 -140
  23. package/src/components/events/OEventsApply.vue +1 -2
  24. package/src/components/events/OEventsCalendar.vue +10 -0
  25. package/src/components/header/OHeader.vue +6 -24
  26. package/src/components/header/OHeaderMobile.vue +177 -0
  27. package/src/components/header/components/HeaderContent.vue +190 -11
  28. package/src/components/header/components/HeaderNav.vue +3 -5
  29. package/src/components/header/components/HeaderNavMobile.vue +377 -0
  30. package/src/components/header/index.ts +5 -5
  31. package/src/components/header/types.ts +91 -0
  32. package/src/components/meeting/OMeetingCalendar.vue +35 -37
  33. package/src/components/meeting/OMyMeetingCalendar.vue +5 -1
  34. package/src/components/meeting/OSigMeetingCalendar.vue +2 -1
  35. package/src/components/meeting/components/OMeetingCalendarList.vue +21 -29
  36. package/src/components/meeting/components/OMeetingDetail.vue +2 -2
  37. package/src/components/meeting/components/OSigMeetingAside.vue +1 -0
  38. package/src/components/meeting/composables/useMeetingConfig.ts +0 -3
  39. package/src/components/meeting/config.ts +58 -58
  40. package/src/components/meeting/index.ts +1 -1
  41. package/src/components/meeting/types.ts +1 -0
  42. package/src/components/meeting/utils.ts +69 -69
  43. package/src/i18n/en.ts +2 -2
  44. package/src/i18n/zh.ts +2 -2
  45. package/dist/components/header/OHeaderMoblie.vue.d.ts +0 -33
  46. package/dist/components/header/components/HeaderNavMoblie.vue.d.ts +0 -17
  47. package/dist/components/header/components/HeaderUbmcNav.vue.d.ts +0 -2
  48. package/src/components/header/OHeaderMoblie.vue +0 -152
  49. package/src/components/header/components/HeaderNavMoblie.vue +0 -346
  50. package/src/components/header/components/HeaderUbmcNav.vue +0 -540
@@ -0,0 +1,377 @@
1
+ <script lang="ts" setup>
2
+ import { ref, onMounted, watch } from 'vue';
3
+ import { OIcon, OTag } from '@opensig/opendesign';
4
+
5
+ import { type NavMobileItemT, NavType } from '../types.ts';
6
+
7
+ export interface OHeaderEmitsT {
8
+ (e: 'on-click'): void;
9
+ (e: 'handle-click', val: any): void;
10
+ }
11
+ const emit = defineEmits<OHeaderEmitsT>();
12
+
13
+ const props = withDefaults(defineProps<NavMobileItemT>(), {
14
+ menuShow: false,
15
+ navData: () => [],
16
+ codeData: () => [],
17
+ langData: () => [],
18
+ });
19
+
20
+ const navActive = ref('');
21
+ const navInfo = ref({});
22
+
23
+ const handleNavClick = (item: any, val?: string) => {
24
+ if (val === NavType.NAV) {
25
+ if (item?.children?.length) {
26
+ navActive.value = item.id;
27
+ navInfo.value = item;
28
+ } else {
29
+ emit('handle-click', item);
30
+ }
31
+ } else if (val === NavType.CODE) {
32
+ navActive.value = val;
33
+ navInfo.value = props.codeData.list;
34
+ } else if (val === NavType.LANG) {
35
+ navActive.value = val;
36
+ navInfo.value = props.langData.list;
37
+ }
38
+ };
39
+
40
+ const onClick = (url: string, target?: string) => {
41
+ window.open(url, target ? target : '_self');
42
+ emit('on-click');
43
+ };
44
+
45
+ const onClickNav = (val: any) => {
46
+ if (navActive.value === NavType.CODE) {
47
+ onClick(val.href, val?.target);
48
+ }
49
+ };
50
+
51
+ onMounted(() => {
52
+ navActive.value = props.navData[0].id;
53
+ navInfo.value = props.navData[0];
54
+ });
55
+
56
+ watch(
57
+ () => props.navData || props.codeData || props.langData,
58
+ () => {
59
+ if (navActive.value === NavType.CODE) {
60
+ navInfo.value = props.codeData.list;
61
+ } else if (navActive.value === NavType.LANG) {
62
+ navInfo.value = props.langData.list;
63
+ } else {
64
+ navInfo.value = props.navData.find((item) => item.id === navActive.value);
65
+ }
66
+ },
67
+ {
68
+ deep: true,
69
+ }
70
+ );
71
+ </script>
72
+
73
+ <template>
74
+ <div class="header-nav" :class="{ active: menuShow }">
75
+ <div class="o-nav">
76
+ <ul class="o-nav-list">
77
+ <li
78
+ v-for="item in navData"
79
+ :key="item.id"
80
+ :class="{
81
+ active: navActive === item.id,
82
+ }"
83
+ >
84
+ <span @click="handleNavClick(item, 'nav')">{{ item.label }}</span>
85
+ </li>
86
+ </ul>
87
+ <div class="nav-aside">
88
+ <ul v-if="navActive !== 'code' && navActive !== 'lang'" class="nav-aside-wrapper">
89
+ <li v-for="item in navInfo.children" :value="item.label" :key="item.label" class="nav-aside-content">
90
+ <template v-if="item?.children">
91
+ <p class="content-label">{{ item.label }}</p>
92
+ <div class="container-mobile">
93
+ <div v-for="subItem in item?.children" :key="subItem.label" class="content-container-mobile">
94
+ <a @click="onClick(subItem.href, subItem?.target)" rel="noopener noreferrer" class="content-subtitle">
95
+ <span class="item-label">{{ subItem.label }}</span>
96
+ <OIcon v-if="subItem.icon">
97
+ <component :is="subItem.icon" class="icon" />
98
+ </OIcon>
99
+ <OTag v-if="subItem.tag" round="pill" color="danger" size="small" class="content-tag">{{ subItem.tag }}</OTag>
100
+ </a>
101
+ <div class="desc-container">
102
+ <p class="item-desc">{{ subItem.description }}</p>
103
+ </div>
104
+ </div>
105
+ </div>
106
+ </template>
107
+ <template v-else>
108
+ <a @click="onClick(item.href, item?.target)" rel="noopener noreferrer" class="content-subtitle item-not-children">
109
+ <span class="item-label">{{ item.label }}</span>
110
+ <OIcon v-if="item.icon">
111
+ <component :is="item.icon" class="icon" />
112
+ </OIcon>
113
+ <OTag v-if="item.tag" round="pill" color="danger" size="small">{{ item.tag }}</OTag>
114
+ </a>
115
+ </template>
116
+ </li>
117
+ </ul>
118
+ <div v-else class="nav-aside-wrapper">
119
+ <a v-for="item in navInfo" :key="item.label" @click="onClickNav(item)" class="source-code-item">
120
+ <span>{{ item.label }}</span>
121
+ <OIcon v-if="item.icon">
122
+ <component :is="item.icon" class="icon" />
123
+ </OIcon>
124
+ </a>
125
+ </div>
126
+ </div>
127
+ </div>
128
+ <!-- 移动端 tool -->
129
+ <div class="header-tool">
130
+ <!-- 源码 -->
131
+ <div
132
+ v-if="codeData"
133
+ class="header-tool-item"
134
+ @click="handleNavClick(null, 'code')"
135
+ :class="{
136
+ active: navActive === 'code',
137
+ }"
138
+ >
139
+ {{ codeData.label }}
140
+ </div>
141
+ <div
142
+ v-if="langData"
143
+ class="header-tool-item"
144
+ @click="handleNavClick(null, 'lang')"
145
+ :class="{
146
+ active: navActive === 'lang',
147
+ }"
148
+ >
149
+ {{ langData.label }}
150
+ </div>
151
+ <!-- 语言 -->
152
+ <div v-if="$slots.tool" class="other-tool">
153
+ <slot name="tool"></slot>
154
+ </div>
155
+ </div>
156
+ </div>
157
+ </template>
158
+
159
+ <style lang="scss" scoped>
160
+ @mixin nav-item {
161
+ display: flex;
162
+ align-items: center;
163
+ justify-content: center;
164
+ height: 48px;
165
+ color: var(--o-color-info1);
166
+
167
+ &.active {
168
+ color: var(--o-color-primary1);
169
+ background: var(--o-color-fill2);
170
+ font-weight: 500;
171
+ }
172
+ }
173
+
174
+ .header-nav {
175
+ flex: 1;
176
+ justify-content: space-between;
177
+ width: 100%;
178
+ overflow: hidden;
179
+ height: 100%;
180
+ background-color: var(--o-color-fill2);
181
+ transform: translateX(-130%);
182
+
183
+ transition-duration: 0.333s;
184
+ transition-property: all;
185
+ transition-timing-function: cubic-bezier(0.5, 0, 0.84, 0.25);
186
+ display: block;
187
+ opacity: 0;
188
+
189
+ &.active {
190
+ opacity: 1;
191
+ visibility: visible;
192
+ transform: translateX(0);
193
+ }
194
+ }
195
+
196
+ .o-nav {
197
+ height: 100%;
198
+ position: relative;
199
+ width: 99px;
200
+ background: var(--o-color-fill1);
201
+ display: flex;
202
+ flex-direction: column;
203
+ justify-content: space-between;
204
+
205
+ .o-nav-list {
206
+ padding: 0;
207
+ margin: 0;
208
+ height: auto;
209
+
210
+ > li {
211
+ position: relative;
212
+ text-align: center;
213
+ @include text2;
214
+ @include nav-item;
215
+ }
216
+ }
217
+ }
218
+
219
+ .nav-aside {
220
+ position: fixed;
221
+ background-color: var(--o-color-fill2);
222
+ top: 0;
223
+ left: 0;
224
+ width: calc(100% - 99px);
225
+ transform: translateX(99px);
226
+ height: 100%;
227
+ z-index: 190;
228
+ .nav-aside-wrapper {
229
+ overflow-y: auto;
230
+ padding: 16px 12px 32px;
231
+ height: 100%;
232
+ .nav-aside-content {
233
+ display: block;
234
+ flex: 0 1 auto;
235
+
236
+ & + .nav-aside-content {
237
+ position: relative;
238
+ padding-top: var(--o-gap-3);
239
+ &::before {
240
+ content: '';
241
+ position: absolute;
242
+ top: 0;
243
+ width: 100%;
244
+ height: 1px;
245
+ background-color: rgba(var(--o-mixedgray-14), 0.1);
246
+ }
247
+ }
248
+ .content-label {
249
+ color: var(--o-color-info3);
250
+ @include text2;
251
+ }
252
+
253
+ .item-not-children {
254
+ margin-bottom: 12px;
255
+ display: flex;
256
+ align-items: center;
257
+ .o-tag {
258
+ margin-left: var(--o-gap-2);
259
+ --layout-pkg-radius: 100vh;
260
+ }
261
+ .o-icon {
262
+ margin-left: var(--o-gap-2);
263
+ }
264
+ }
265
+ }
266
+
267
+ .source-code-item {
268
+ height: 40px;
269
+ display: flex;
270
+ align-items: center;
271
+ color: var(--o-color-info1);
272
+
273
+ &.active {
274
+ color: var(--o-color-primary1);
275
+ }
276
+
277
+ & + .source-code-item {
278
+ border-top: 1px solid var(--o-color-control4);
279
+ }
280
+
281
+ .icon {
282
+ margin-left: var(--o-gap-2);
283
+ }
284
+ }
285
+
286
+ &::-webkit-scrollbar-track {
287
+ border-radius: 3px;
288
+ }
289
+
290
+ &::-webkit-scrollbar {
291
+ width: 6px;
292
+ background-color: transparent;
293
+ }
294
+
295
+ &::-webkit-scrollbar-thumb {
296
+ border-radius: 3px;
297
+ background: var(--o-color-control1);
298
+ }
299
+ }
300
+
301
+ .container-mobile {
302
+ @include text2;
303
+
304
+ .o-icon {
305
+ --icon-size: 16px;
306
+ margin-left: var(--o-gap-2);
307
+ }
308
+ }
309
+
310
+ .content-container-mobile {
311
+ margin-top: var(--o-gap-3);
312
+
313
+ &:first-child {
314
+ margin-top: 8px;
315
+ }
316
+ &:last-child {
317
+ margin-bottom: 12px;
318
+ }
319
+
320
+ .content-subtitle {
321
+ color: var(--o-color-info1);
322
+ display: flex;
323
+ align-items: center;
324
+ @include text2;
325
+ }
326
+
327
+ .content-tag {
328
+ margin-left: var(--o-gap-2);
329
+ --layout-pkg-radius: var(--o-radius-xs);
330
+ }
331
+
332
+ .desc-container {
333
+ overflow: hidden;
334
+ position: relative;
335
+
336
+ .item-desc {
337
+ color: var(--o-color-info2);
338
+ margin-top: var(--o-gap-1);
339
+ text-align: justify;
340
+ word-break: normal;
341
+ @include tip1;
342
+ @include text-truncate(2);
343
+ @include respond-to('phone') {
344
+ @include text1;
345
+ }
346
+ }
347
+ }
348
+ }
349
+ }
350
+
351
+ .header-tool {
352
+ position: absolute;
353
+ bottom: 36px;
354
+ left: 0;
355
+ width: 99px;
356
+
357
+ display: flex;
358
+ height: auto;
359
+ justify-content: center;
360
+ align-items: center;
361
+ flex-direction: column;
362
+ }
363
+
364
+ .header-tool-item {
365
+ width: 99px;
366
+ @include nav-item;
367
+ @include tip1;
368
+ @include respond-to('phone') {
369
+ @include text1;
370
+ }
371
+ }
372
+ .other-tool {
373
+ width: 99px;
374
+ margin-top: 8px;
375
+ text-align: center;
376
+ }
377
+ </style>
@@ -1,16 +1,16 @@
1
1
  import _OHeader from './OHeader.vue';
2
- import _OHeaderMoblie from './OHeaderMoblie.vue';
2
+ import _OHeaderMobile from './OHeaderMobile.vue';
3
3
  import type { App } from 'vue';
4
4
 
5
5
  const OHeader = Object.assign(_OHeader, {
6
6
  install(app: App) {
7
- app.component('OEventsCalendar', _OHeader);
7
+ app.component('OHeader', _OHeader);
8
8
  },
9
9
  });
10
- const OHeaderMoblie = Object.assign(_OHeaderMoblie, {
10
+ const OHeaderMobile = Object.assign(_OHeaderMobile, {
11
11
  install(app: App) {
12
- app.component('OEventsList', _OHeaderMoblie);
12
+ app.component('OHeaderMobile', _OHeaderMobile);
13
13
  },
14
14
  });
15
15
 
16
- export { OHeader, OHeaderMoblie };
16
+ export { OHeader, OHeaderMobile };
@@ -0,0 +1,91 @@
1
+ type tagT = 'HOT' | 'NEW';
2
+
3
+ export enum NavType {
4
+ NAV = 'nav',
5
+ CODE = 'code',
6
+ LANG = 'lang',
7
+ }
8
+
9
+ export interface ChildrenItemT {
10
+ label: string; // 标题
11
+ description?: string; // 描述
12
+ href?: string; // 链接
13
+ tag?: tagT; // 标签
14
+ children?: ChildrenItemT[];
15
+ }
16
+
17
+ export interface ShortcutItemT {
18
+ label: string; // 标题
19
+ description?: string; // 描述
20
+ picture?: string; // 缩略图
21
+ href?: string; // 链接
22
+ tag?: tagT; // 标签
23
+ remark?: string; // 时间
24
+ type?: string; // 类型
25
+ }
26
+
27
+ export interface NavItemT {
28
+ label: string; // 标题
29
+ id: string; // id
30
+ href?: string; // 链接
31
+ withPicture: boolean; // 快捷链接是否显示缩略图
32
+ children: ChildrenItemT[]; // 导航子项
33
+ shortcut: ShortcutItemT[]; // 右侧快捷链接
34
+ }
35
+
36
+ export interface CodeItemT {
37
+ label: string; // 标题
38
+ href: string; // 链接
39
+ icon?: string; // icon
40
+ }
41
+
42
+ export interface LangItemT {
43
+ id: string; // id
44
+ label: string; // 全称
45
+ simple: string; // 简写
46
+ }
47
+
48
+ export interface CodeT {
49
+ label: string; // 标题
50
+ list: CodeItemT[]; // 代码仓数据
51
+ }
52
+
53
+ export interface LangT {
54
+ label: string; // 标题
55
+ list: LangItemT[]; // 语言数据
56
+ }
57
+
58
+ export interface NavT {
59
+ logo: string; // 社区logo
60
+ community: string; // 社区 openEuler/openUBMC/mindspore
61
+ navData: NavItemT[];
62
+ bgLeft?: string; // 导航左侧背景插图
63
+ bgRight?: string; // 导航右侧背景插图
64
+ activeIndex: string | number; // 激活态
65
+ codeData?: CodeT[]; // 导航右侧代码仓数据
66
+ langData?: LangT[]; // 导航右侧语言数据
67
+ isSimpleHeader?: boolean; // 移动端二级导航
68
+ headerTitle?: string; // 移动端二级标题
69
+ }
70
+
71
+ export interface NavLiT {
72
+ navData: NavItemT[];
73
+ activeIndex: string | number; // 激活态
74
+ hoverId: string | number; // hover态
75
+ }
76
+
77
+ export interface NavLiItemT {
78
+ itemData: NavItemT;
79
+ itemVisible: boolean; // 下拉面板
80
+ community: string; // 社区 openEuler/openUBMC/mindspore
81
+ bgLeft?: string; // 导航左侧背景插图
82
+ bgRight?: string; // 导航右侧背景插图
83
+ hoverIndex: string | number; // hover态
84
+ }
85
+
86
+ export interface NavMobileItemT {
87
+ menuShow: boolean; // 展开导航
88
+ navData: NavItemT[];
89
+ codeData?: CodeT[]; // 导航右侧代码仓数据
90
+ langData?: LangT[]; // 导航右侧语言数据
91
+ }
@@ -19,7 +19,7 @@ import IconSummit from '~icons/meeting/icon-summit.svg';
19
19
  import IconMeeting from '~icons/meeting/icon-meet.svg';
20
20
  import { Locales } from '@/i18n';
21
21
  import { useMeetingConfig } from './composables/useMeetingConfig';
22
- import { CalendarDataType, GroupItemT, MeetingCalendarPropsT, MeetingGroupType } from './types.ts';
22
+ import { CalendarDataType, MeetingCalendarPropsT, MeetingGroupType } from './types.ts';
23
23
  import { formatDate } from './utils.ts';
24
24
  import { useDebounceFn } from '@vueuse/core';
25
25
 
@@ -29,8 +29,8 @@ const props = withDefaults(defineProps<MeetingCalendarPropsT>(), {
29
29
  hiddenEvents: false,
30
30
  hiddenSummit: false,
31
31
  groupType: MeetingGroupType.SIG,
32
+ groups: () => [],
32
33
  });
33
-
34
34
  const { t, locale, meetingTabs, getConfig } = useMeetingConfig();
35
35
  const isEn = computed(() => locale.value === Locales.EN);
36
36
 
@@ -67,8 +67,7 @@ const isLimit = ref(false);
67
67
  const currentDay = ref('');
68
68
  const isAutoClick = ref(false);
69
69
  // sig组列表
70
- const sig = ref('');
71
- const sigOptions = ref<GroupItemT[]>([]);
70
+ const group = ref('');
72
71
  const getSummitData = async (date) => {
73
72
  if (props.getSummitListRequest) {
74
73
  const list = await props.getSummitListRequest(date);
@@ -76,7 +75,7 @@ const getSummitData = async (date) => {
76
75
  return {
77
76
 
78
77
  ...v,
79
- type: 'summit',
78
+ type: CalendarDataType.SUMMIT,
80
79
  };
81
80
  });
82
81
  } else {
@@ -89,7 +88,7 @@ const getActivityData = async (date) => {
89
88
  eventsData.value = (list || []).map(v => {
90
89
  return {
91
90
  ...v,
92
- type: 'activity',
91
+ type: CalendarDataType.EVENTS,
93
92
  start_date_time: `${ formatDate(v.start_date) } ${ v.start }`,
94
93
  end_date_time: `${ formatDate(v.end_date) } ${ v.end }`,
95
94
  };
@@ -101,7 +100,7 @@ const getActivityData = async (date) => {
101
100
 
102
101
  const getDateList = async (date) => {
103
102
  if (props.getDateListRequest) {
104
- props.getDateListRequest(date).then(res => {
103
+ props.getDateListRequest(date, group.value || '').then(res => {
105
104
  dateList.value = res;
106
105
  });
107
106
  }
@@ -125,7 +124,7 @@ const paramGetDaysData = async (params: { date: string; type: string }) => {
125
124
  return;
126
125
  }
127
126
  try {
128
- const res = await props.getMeetingListRequest(params.date, sig.value);
127
+ const res = await props.getMeetingListRequest(params.date, group.value, '');
129
128
  meetingData.value = res.map((v) => {
130
129
  return {
131
130
  ...v,
@@ -136,11 +135,6 @@ const paramGetDaysData = async (params: { date: string; type: string }) => {
136
135
  }).sort((a: any, b: any) => {
137
136
  return parseInt((a.start || a.cycle_start)?.replace(':', '')) - parseInt(b.end || b.cycle_end?.replace(':', ''));
138
137
  });
139
-
140
- sigOptions.value = [...new Set(meetingData.value.map((v) => v.group_name))].map((v) => ({ group_name: v }));
141
- if (!sigOptions.value.find((v) => v.group_name === sig.value)) {
142
- sig.value = '';
143
- }
144
138
  } catch {
145
139
  meetingData.value = [];
146
140
  }
@@ -148,7 +142,7 @@ const paramGetDaysData = async (params: { date: string; type: string }) => {
148
142
 
149
143
  const renderData = computed(() => {
150
144
  return [
151
- ...meetingData.value.filter((v) => !sig.value || v.group_name === sig.value),
145
+ ...meetingData.value,
152
146
  ...eventsData.value.filter(v => (!dayjs(v.start_date).isAfter(dayjs(currentDay.value)) && !dayjs(currentDay.value).isAfter(dayjs(v.end_date))) || v.dates?.includes(currentDay.value)),
153
147
  ...summitData.value.filter(v => v.dates?.includes(currentDay.value)),
154
148
  ].filter((v) => {
@@ -186,20 +180,6 @@ const getDateData = async (day?: string) => {
186
180
  });
187
181
  };
188
182
 
189
- watch([() => tabType.value, () => tabs.value], () => {
190
- selectTab();
191
- });
192
-
193
- // 活动会议筛选
194
- function selectTab() {
195
- nextTick(() => {
196
- paramGetDaysData({
197
- date: currentDay.value,
198
- type: tabType.value,
199
- });
200
- });
201
- }
202
-
203
183
  const changeMeetingDay = useDebounceFn((day: string, event?: Event) => {
204
184
  if (isAutoClick.value) {
205
185
  isAutoClick.value = false;
@@ -222,6 +202,15 @@ const selectDate = (val: string, date: string) => {
222
202
  calendar.value.selectDate(val);
223
203
  changeMeetingDay(formatDate(calendar.value.selectedDay));
224
204
  };
205
+ const changeGroup = () => {
206
+ nextTick(() => {
207
+ paramGetDaysData({
208
+ date: currentDay.value,
209
+ type: tabType.value,
210
+ });
211
+ getDateList(currentDay.value);
212
+ });
213
+ };
225
214
 
226
215
  const removeLeadingZero = (str: string) => {
227
216
  // 使用正则表达式匹配以 0 开头的字符串,然后去除开头的 0
@@ -302,11 +291,12 @@ const checkSelectedDay = (type: CalendarDataType, date: string) => {
302
291
  </OIcon>
303
292
  </div>
304
293
  <OSelect
305
- v-model="sig"
306
- :placeholder="groupType === MeetingGroupType.GROUP ? t('meeting.allGroups') : t('meeting.allSigs')"
294
+ v-model="group"
295
+ :placeholder="t(groupType === MeetingGroupType.GROUP ? 'meeting.allGroups' : 'meeting.allSigs')"
307
296
  clearable
297
+ @change="changeGroup"
308
298
  >
309
- <OOption v-for="t in sigOptions" :value="t.group_name" :key="t.group_name">{{ t.group_name }}</OOption>
299
+ <OOption v-for="t in groups" :value="t" :key="t">{{ t }}</OOption>
310
300
  </OSelect>
311
301
  </div>
312
302
 
@@ -362,8 +352,13 @@ const checkSelectedDay = (type: CalendarDataType, date: string) => {
362
352
  </div>
363
353
  <div class="right-title">
364
354
  <div class="title-list">
365
- <OSelect v-model="sig" :placeholder="t('meeting.allSigs')" clearable>
366
- <OOption v-for="t in sigOptions" :value="t.group_name" :key="t.group_name">{{ t.group_name }}</OOption>
355
+ <OSelect
356
+ v-model="group"
357
+ :placeholder="t(groupType === MeetingGroupType.GROUP ? 'meeting.allGroups' : 'meeting.allSigs')"
358
+ clearable
359
+ @change="changeGroup"
360
+ >
361
+ <OOption v-for="t in groups" :value="t" :key="t">{{ t }}</OOption>
367
362
  </OSelect>
368
363
  <OTab v-model="tabType" :line="false">
369
364
  <OTabPane v-for="item in tabs" :key="item.value" :value="item.value">
@@ -449,6 +444,7 @@ const checkSelectedDay = (type: CalendarDataType, date: string) => {
449
444
  padding: 0 var(--o-gap-6);
450
445
  gap: var(--o-gap-6);
451
446
  border-bottom: 1px solid var(--o-color-control4);
447
+ background: var(--o-color-fill2);
452
448
  @include respond-to('<=pad_v') {
453
449
  justify-content: center;
454
450
  border-bottom: none;
@@ -473,7 +469,11 @@ const checkSelectedDay = (type: CalendarDataType, date: string) => {
473
469
  display: flex;
474
470
  align-items: center;
475
471
  flex-shrink: 0;
472
+ color: var(--o-color-info1);
476
473
  @include text2;
474
+ @include respond-to('<=pad_v') {
475
+ @include h3;
476
+ }
477
477
 
478
478
  .o-icon {
479
479
  cursor: pointer;
@@ -502,6 +502,7 @@ const checkSelectedDay = (type: CalendarDataType, date: string) => {
502
502
  padding: 0 var(--o-gap-6) var(--o-gap-6);
503
503
  border-right: 1px solid var(--o-color-control4);
504
504
  margin-bottom: 0;
505
+ background: var(--o-color-fill2);
505
506
 
506
507
  thead {
507
508
  th {
@@ -776,13 +777,10 @@ const checkSelectedDay = (type: CalendarDataType, date: string) => {
776
777
  }
777
778
 
778
779
  .current-day {
780
+ color: var(--o-color-info2);
779
781
  @include respond-to('>pad_v') {
780
-
781
782
  display: none;
782
783
  }
783
- }
784
-
785
- .current-day {
786
784
  @include respond-to('<=pad_v') {
787
785
  display: flex;
788
786
  margin: 16px 16px 12px;
@@ -871,10 +871,10 @@ const cancelActions = computed<DialogActionT[]>(() => {
871
871
 
872
872
  .el-calendar__header {
873
873
  border-bottom: 1px solid var(--o-color-control4);
874
+ color: var(--o-color-info1);
874
875
 
875
876
  & > span {
876
877
  font-weight: 500;
877
- color: var(--o-color-info1);
878
878
  @include h1;
879
879
  }
880
880
 
@@ -890,6 +890,10 @@ const cancelActions = computed<DialogActionT[]>(() => {
890
890
  &:hover {
891
891
  color: var(--o-color-primary1);
892
892
  }
893
+
894
+ svg path {
895
+ fill: currentColor;
896
+ }
893
897
  }
894
898
  }
895
899
  }