@opendesign-plus-test/components 0.0.1-rc.41 → 0.0.1-rc.43
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/chunk-OElCookieNotice.cjs.js +1 -1
- package/dist/chunk-OElCookieNotice.es.js +111 -111
- package/dist/components/OHeaderSearch.vue.d.ts +6 -10
- package/dist/components/OSourceCode.vue.d.ts +4 -6
- package/dist/components/activity/OActivityApproval.vue.d.ts +6 -10
- package/dist/components/activity/OActivityForm.vue.d.ts +3 -5
- package/dist/components/activity/OMyActivityCalendar.vue.d.ts +18 -26
- package/dist/components/activity/index.d.ts +15 -23
- package/dist/components/activity/types.d.ts +8 -1
- package/dist/components/events/config.d.ts +5 -18
- package/dist/components/events/types.d.ts +4 -1
- package/dist/components/header/OHeaderMobile.vue.d.ts +18 -11
- package/dist/components/header/components/HeaderNavMobile.vue.d.ts +4 -1
- package/dist/components/header/index.d.ts +12 -5
- package/dist/components/header/types.d.ts +4 -0
- package/dist/components/meeting/OMeetingCalendar.vue.d.ts +10 -14
- package/dist/components/meeting/OMeetingForm.vue.d.ts +3 -5
- package/dist/components/meeting/OMeetingPlayback.vue.d.ts +45 -0
- package/dist/components/meeting/OMyMeetingCalendar.vue.d.ts +18 -26
- package/dist/components/meeting/components/OMeetingCalendarList.vue.d.ts +1 -1
- package/dist/components/meeting/components/OMeetingDetail.vue.d.ts +2 -1
- package/dist/components/meeting/index.d.ts +786 -0
- package/dist/components/meeting/types.d.ts +83 -18
- package/dist/components/meeting/utils.d.ts +1 -1
- package/dist/components.cjs.js +38 -38
- package/dist/components.css +1 -1
- package/dist/components.es.js +12466 -12392
- package/package.json +3 -3
- package/src/components/OSourceCode.vue +8 -10
- package/src/components/activity/OActivityApproval.vue +35 -34
- package/src/components/activity/OActivityForm.vue +4 -4
- package/src/components/activity/OMyActivityCalendar.vue +44 -27
- package/src/components/activity/types.ts +8 -1
- package/src/components/common/MoreText.vue +1 -1
- package/src/components/common/ThFilter.vue +7 -7
- package/src/components/element-plus/OElCookieNotice.vue +1 -1
- package/src/components/events/OEventsList.vue +45 -10
- package/src/components/events/config.ts +1 -1
- package/src/components/events/types.ts +4 -1
- package/src/components/header/OHeaderMobile.vue +8 -1
- package/src/components/header/components/HeaderContent.vue +7 -3
- package/src/components/header/components/HeaderNavMobile.vue +5 -2
- package/src/components/header/types.ts +4 -0
- package/src/components/meeting/OMeetingCalendar.vue +42 -48
- package/src/components/meeting/OMeetingForm.vue +75 -37
- package/src/components/meeting/OMeetingPlayback.vue +4 -4
- package/src/components/meeting/OMyMeetingCalendar.vue +33 -27
- package/src/components/meeting/OSigMeetingCalendar.vue +29 -26
- package/src/components/meeting/components/OMeetingCalendarList.vue +107 -88
- package/src/components/meeting/components/OMeetingCalendarSelector.vue +10 -6
- package/src/components/meeting/components/OMeetingDetail.vue +32 -16
- package/src/components/meeting/components/OMeetingPlaybackVideo.vue +7 -7
- package/src/components/meeting/components/OSigMeetingAside.vue +2 -3
- package/src/components/meeting/config.ts +1 -12
- package/src/components/meeting/types.ts +89 -18
- package/vite.config.ts +3 -2
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { ref, onMounted, computed, nextTick, watch } from 'vue';
|
|
3
|
-
import { ODivider, OPopover, OIcon, OTabPane, OTab } from '@opensig/opendesign';
|
|
3
|
+
import { ODivider, OPopover, OIcon, OTabPane, OTab, OScroller } from '@opensig/opendesign';
|
|
4
4
|
import dayjs from 'dayjs';
|
|
5
5
|
import IconTips from '~icons/components/icon-tips.svg';
|
|
6
6
|
import OSigMeetingAside from './components/OSigMeetingAside.vue';
|
|
7
|
-
import { CalendarDataType, MeetingItemT } from './types.ts';
|
|
7
|
+
import { CalendarDataType, MeetingEventsItemT, MeetingItemT } from './types.ts';
|
|
8
8
|
import { useScreen } from '@opendesign-plus/composables';
|
|
9
9
|
import { useMeetingConfig } from './composables/useMeetingConfig';
|
|
10
10
|
import OMeetingCalendarList from '@/components/meeting/components/OMeetingCalendarList.vue';
|
|
@@ -21,22 +21,22 @@ const { lePadV } = useScreen();
|
|
|
21
21
|
const selectDate = ref<string>('');
|
|
22
22
|
|
|
23
23
|
const loading = ref(false); // 数据加载状态
|
|
24
|
-
const list = ref<MeetingItemT[]>([]); // 某天的会议列表
|
|
24
|
+
const list = ref<(MeetingItemT | MeetingEventsItemT)[]>([]); // 某天的会议列表
|
|
25
25
|
const calendarRows = computed(() => (lePadV.value ? 100 : 5)); // 日历行数
|
|
26
26
|
|
|
27
27
|
const latestDate = ref<string>('');
|
|
28
28
|
const meetingDates = ref<string[]>([]);
|
|
29
29
|
const eventsDates = ref<string[]>([]);
|
|
30
|
-
const eventsData = ref([]);
|
|
30
|
+
const eventsData = ref<MeetingEventsItemT[]>([]);
|
|
31
31
|
const monthIdx = ref(-1);
|
|
32
|
-
const clickDateCell2 = (date) => {
|
|
32
|
+
const clickDateCell2 = (date: string) => {
|
|
33
33
|
clickDateCell(date);
|
|
34
34
|
};
|
|
35
|
-
const changeSelect = (v) => {
|
|
35
|
+
const changeSelect = (v: string) => {
|
|
36
36
|
clickDateCell(v);
|
|
37
37
|
};
|
|
38
38
|
// 获取所选日期的会议列表
|
|
39
|
-
const clickDateCell = async (date) => {
|
|
39
|
+
const clickDateCell = async (date: string) => {
|
|
40
40
|
if (!props.getMeetingListRequest) {
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
@@ -44,7 +44,7 @@ const clickDateCell = async (date) => {
|
|
|
44
44
|
loading.value = true;
|
|
45
45
|
selectDate.value = dayjs(date).format('YYYY-MM-DD');
|
|
46
46
|
const res = await props.getMeetingListRequest(selectDate.value, props.sigName);
|
|
47
|
-
list.value = res.map((v) => {
|
|
47
|
+
list.value = res.map((v: MeetingItemT) => {
|
|
48
48
|
return {
|
|
49
49
|
...v,
|
|
50
50
|
time: `${ v.start }-${ v.end }`,
|
|
@@ -55,7 +55,7 @@ const clickDateCell = async (date) => {
|
|
|
55
55
|
} finally {
|
|
56
56
|
loading.value = false;
|
|
57
57
|
eventsData.value.forEach((v) => {
|
|
58
|
-
if (v.dates
|
|
58
|
+
if (v.dates?.includes(selectDate.value)) {
|
|
59
59
|
list.value.push(v);
|
|
60
60
|
}
|
|
61
61
|
});
|
|
@@ -69,7 +69,7 @@ const getDates = async () => {
|
|
|
69
69
|
}
|
|
70
70
|
if (props.getEventsListRequest) {
|
|
71
71
|
eventsData.value = await props.getEventsListRequest();
|
|
72
|
-
eventsDates.value = (eventsData.value || []).map(v => v.dates).flat();
|
|
72
|
+
eventsDates.value = (eventsData.value || []).map(v => v.dates || []).flat();
|
|
73
73
|
}
|
|
74
74
|
};
|
|
75
75
|
const tabType = ref(CalendarDataType.ALL);
|
|
@@ -81,13 +81,14 @@ watch(
|
|
|
81
81
|
() => lePadV.value,
|
|
82
82
|
() => {
|
|
83
83
|
if (lePadV.value) {
|
|
84
|
-
|
|
84
|
+
tabType.value = CalendarDataType.ALL;
|
|
85
|
+
selectTab();
|
|
85
86
|
}
|
|
86
87
|
},
|
|
87
88
|
);
|
|
88
89
|
// -------------------- 获取有会议的日期 --------------------
|
|
89
90
|
|
|
90
|
-
const getMonthAndDay = (date) => {
|
|
91
|
+
const getMonthAndDay = (date: string) => {
|
|
91
92
|
const dateStr = dayjs(date).format('YYYY-MM-DD');
|
|
92
93
|
return [dateStr.slice(0, 7), dateStr.slice(8, 10)];
|
|
93
94
|
};
|
|
@@ -121,9 +122,8 @@ watch(() => dateList.value, (val) => {
|
|
|
121
122
|
});
|
|
122
123
|
}
|
|
123
124
|
});
|
|
124
|
-
|
|
125
125
|
const groupDateList = computed(() => {
|
|
126
|
-
const obj = dateList.value.reduce((pre, cur) => {
|
|
126
|
+
const obj = dateList.value.reduce((pre: any, cur: any) => {
|
|
127
127
|
const [month, day] = getMonthAndDay(cur);
|
|
128
128
|
pre[month] = {
|
|
129
129
|
count: (pre[month]?.count || 0) + 1,
|
|
@@ -139,11 +139,11 @@ const groupDateList = computed(() => {
|
|
|
139
139
|
};
|
|
140
140
|
});
|
|
141
141
|
const list: any[] = [];
|
|
142
|
-
let current = [];
|
|
142
|
+
let current: any[] = [];
|
|
143
143
|
monthList.forEach((t) => {
|
|
144
144
|
while (t.days.length) {
|
|
145
145
|
if (!current.length) {
|
|
146
|
-
t.days.splice(0, 6).forEach((day) => {
|
|
146
|
+
t.days.splice(0, 6).forEach((day: string) => {
|
|
147
147
|
current.push({
|
|
148
148
|
month: t.month,
|
|
149
149
|
day: day,
|
|
@@ -160,7 +160,7 @@ const groupDateList = computed(() => {
|
|
|
160
160
|
count += 1;
|
|
161
161
|
}
|
|
162
162
|
if (t.days.length + current.length <= 6) {
|
|
163
|
-
t.days.splice(0, 6).forEach((day) => {
|
|
163
|
+
t.days.splice(0, 6).forEach((day: string) => {
|
|
164
164
|
current.push({
|
|
165
165
|
month: t.month,
|
|
166
166
|
day: day,
|
|
@@ -171,7 +171,7 @@ const groupDateList = computed(() => {
|
|
|
171
171
|
current = [];
|
|
172
172
|
}
|
|
173
173
|
} else {
|
|
174
|
-
t.days.splice(0, 6 - count).forEach((day) => {
|
|
174
|
+
t.days.splice(0, 6 - count).forEach((day: string) => {
|
|
175
175
|
current.push({
|
|
176
176
|
month: t.month,
|
|
177
177
|
day: day,
|
|
@@ -196,7 +196,7 @@ const groupDateList = computed(() => {
|
|
|
196
196
|
|
|
197
197
|
const dateMapList = computed(() => {
|
|
198
198
|
return groupDateList.value.map((group) => {
|
|
199
|
-
const obj = group.reduce((prev, cur) => {
|
|
199
|
+
const obj = group.reduce((prev: any, cur: any) => {
|
|
200
200
|
prev[cur.month] = prev[cur.month] || [];
|
|
201
201
|
prev[cur.month].push(cur.day);
|
|
202
202
|
return prev;
|
|
@@ -212,9 +212,9 @@ const dateMapList = computed(() => {
|
|
|
212
212
|
|
|
213
213
|
const getMonthIdx = () => {
|
|
214
214
|
if (groupDateList.value.length) {
|
|
215
|
-
monthIdx.value = groupDateList.value.findIndex((v) => v.some((t) => latestDate.value === `${ t.month }-${ t.day }`));
|
|
215
|
+
monthIdx.value = groupDateList.value.findIndex((v) => v.some((t: any) => latestDate.value === `${ t.month }-${ t.day }`));
|
|
216
216
|
if (monthIdx.value === -1) {
|
|
217
|
-
monthIdx.value = groupDateList.value.findIndex((v) => v.some((t) => latestDate.value.includes(t.month)));
|
|
217
|
+
monthIdx.value = groupDateList.value.findIndex((v) => v.some((t: any) => latestDate.value.includes(t.month)));
|
|
218
218
|
}
|
|
219
219
|
} else {
|
|
220
220
|
monthIdx.value = -1;
|
|
@@ -228,7 +228,7 @@ watch(
|
|
|
228
228
|
{ deep: true },
|
|
229
229
|
);
|
|
230
230
|
|
|
231
|
-
const changeMonthIdx = (step) => {
|
|
231
|
+
const changeMonthIdx = (step: number) => {
|
|
232
232
|
monthIdx.value += step;
|
|
233
233
|
};
|
|
234
234
|
|
|
@@ -292,16 +292,16 @@ onMounted(() => {
|
|
|
292
292
|
:active="selectDate"
|
|
293
293
|
/>
|
|
294
294
|
</template>
|
|
295
|
-
<
|
|
295
|
+
<OScroller class="list-content" show-type="hover" size="small">
|
|
296
296
|
<OMeetingCalendarList
|
|
297
|
-
:list="list"
|
|
297
|
+
:list="list as unknown as MeetingItemT[]"
|
|
298
298
|
:rows="calendarRows"
|
|
299
299
|
>
|
|
300
300
|
<template #empty>
|
|
301
301
|
<slot name="empty"></slot>
|
|
302
302
|
</template>
|
|
303
303
|
</OMeetingCalendarList>
|
|
304
|
-
</
|
|
304
|
+
</OScroller>
|
|
305
305
|
</div>
|
|
306
306
|
</div>
|
|
307
307
|
</template>
|
|
@@ -404,7 +404,10 @@ onMounted(() => {
|
|
|
404
404
|
|
|
405
405
|
.list-content {
|
|
406
406
|
flex-grow: 1;
|
|
407
|
-
height:
|
|
407
|
+
height: 400px;
|
|
408
|
+
@include respond-to('<=pad_v') {
|
|
409
|
+
height: auto;
|
|
410
|
+
}
|
|
408
411
|
}
|
|
409
412
|
}
|
|
410
413
|
</style>
|
|
@@ -3,7 +3,7 @@ import { OCollapse, OCollapseItem, ODivider, OIcon, OLink, OTag, useMessage } fr
|
|
|
3
3
|
import OMeetingDetail from './OMeetingDetail.vue';
|
|
4
4
|
import { computed, nextTick, ref, watch } from 'vue';
|
|
5
5
|
import IconCopy from '~icons/meeting/icon-copy.svg';
|
|
6
|
-
import { MeetingGroupType, MeetingItemT } from '../types.ts';
|
|
6
|
+
import { CalendarDataType, CycleSubItemT, MeetingGroupType, MeetingItemT, ObsDataItemT } from '../types.ts';
|
|
7
7
|
import IconChevronRight from '~icons/components/icon-chevron-right.svg';
|
|
8
8
|
import { INTERVAL_DAY, INTERVAL_MONTH, INTERVAL_WEEK } from '../config.ts';
|
|
9
9
|
import { formatDate } from '../utils.ts';
|
|
@@ -14,14 +14,14 @@ const { activityTypeMap } = useActivityConfig();
|
|
|
14
14
|
|
|
15
15
|
const props = withDefaults(defineProps<{
|
|
16
16
|
list: MeetingItemT[];
|
|
17
|
-
groupType
|
|
17
|
+
groupType?: MeetingGroupType;
|
|
18
18
|
}>(), {
|
|
19
19
|
list: () => [],
|
|
20
20
|
});
|
|
21
21
|
const { t, locale, getConfig, getPointStr } = useMeetingConfig();
|
|
22
|
-
const detailRefs = ref([]);
|
|
22
|
+
const detailRefs = ref<any[]>([]);
|
|
23
23
|
const message = useMessage(null);
|
|
24
|
-
const copyInfo = async (idx) => {
|
|
24
|
+
const copyInfo = async (idx: number) => {
|
|
25
25
|
const instance = detailRefs.value[idx];
|
|
26
26
|
await instance.copyInfo();
|
|
27
27
|
message.success({
|
|
@@ -29,7 +29,7 @@ const copyInfo = async (idx) => {
|
|
|
29
29
|
});
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
const collapseNames = ref([]);
|
|
32
|
+
const collapseNames = ref<number[]>([]);
|
|
33
33
|
const i18n = computed(() => {
|
|
34
34
|
return {
|
|
35
35
|
SIG_GROUP: `${ props.groupType === MeetingGroupType.GROUP ? t('meeting.groups') : t('meeting.sigs') }: `,
|
|
@@ -43,7 +43,7 @@ const i18n = computed(() => {
|
|
|
43
43
|
});
|
|
44
44
|
|
|
45
45
|
// -------------------- 监听尺寸变化 --------------------
|
|
46
|
-
const meetInfoRef = ref();
|
|
46
|
+
const meetInfoRef = ref<HTMLDivElement[]>();
|
|
47
47
|
const resizeObserver = new ResizeObserver((entries) => {
|
|
48
48
|
for (let entry of entries) {
|
|
49
49
|
const { height } = entry.contentRect;
|
|
@@ -70,11 +70,11 @@ watch(
|
|
|
70
70
|
},
|
|
71
71
|
);
|
|
72
72
|
|
|
73
|
-
const computedList = computed(() => {
|
|
74
|
-
return props.list.map((v) => {
|
|
73
|
+
const computedList = computed<any[]>(() => {
|
|
74
|
+
return props.list.map((v: any) => {
|
|
75
75
|
const type = v.type;
|
|
76
76
|
let dateRange = '';
|
|
77
|
-
if (type !==
|
|
77
|
+
if (type !== CalendarDataType.MEETING) {
|
|
78
78
|
let activity_type = activityTypeMap.value.get(v.activity_type)?.label;
|
|
79
79
|
if (v.start && v.end) {
|
|
80
80
|
if (v.end_date === v.start_date) {
|
|
@@ -113,7 +113,7 @@ const computedList = computed(() => {
|
|
|
113
113
|
let timeRange = `${ start } - ${ end }`;
|
|
114
114
|
let replay_url = null;
|
|
115
115
|
let hasObsData = false;
|
|
116
|
-
const obsData = v.obs_data?.filter((v) => v.text_video_url) || [];
|
|
116
|
+
const obsData = v.obs_data?.filter((v: ObsDataItemT) => v.text_video_url) || [];
|
|
117
117
|
|
|
118
118
|
if (is_cycle) {
|
|
119
119
|
let cycleType = '';
|
|
@@ -122,13 +122,13 @@ const computedList = computed(() => {
|
|
|
122
122
|
}
|
|
123
123
|
if (cycle_type === INTERVAL_WEEK) {
|
|
124
124
|
if (cycle_interval > 1) {
|
|
125
|
-
cycleType = t('meeting.cycleWeek.other', [getPointStr(cycle_type, cycle_point), cycle_interval]);
|
|
125
|
+
cycleType = t('meeting.cycleWeek.other', [getPointStr(cycle_type, cycle_point as unknown as number[]), cycle_interval]);
|
|
126
126
|
} else {
|
|
127
|
-
cycleType = t('meeting.cycleWeek.one', [getPointStr(cycle_type, cycle_point)]);
|
|
127
|
+
cycleType = t('meeting.cycleWeek.one', [getPointStr(cycle_type, cycle_point as unknown as number[])]);
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
if (cycle_type === INTERVAL_MONTH) {
|
|
131
|
-
cycleType = t('meeting.cycleMonth', [getPointStr(cycle_type, cycle_point)]);
|
|
131
|
+
cycleType = t('meeting.cycleMonth', [getPointStr(cycle_type, cycle_point as unknown as number[])]);
|
|
132
132
|
}
|
|
133
133
|
timeRange = t('meeting.cycleMeetingText2', {
|
|
134
134
|
startDate: cycle_start_date,
|
|
@@ -137,7 +137,7 @@ const computedList = computed(() => {
|
|
|
137
137
|
endTime: cycle_end,
|
|
138
138
|
cycleType,
|
|
139
139
|
});
|
|
140
|
-
hasObsData = obsData.some((t) => t.sub_id === v.cycle_sub.find((z) => z.date === date)?.sub_id);
|
|
140
|
+
hasObsData = obsData.some((t: ObsDataItemT) => t.sub_id === v.cycle_sub.find((z: CycleSubItemT) => z.date === date)?.sub_id);
|
|
141
141
|
} else {
|
|
142
142
|
hasObsData = obsData.length > 0;
|
|
143
143
|
}
|
|
@@ -161,63 +161,65 @@ const computedList = computed(() => {
|
|
|
161
161
|
<OCollapse v-else v-model="collapseNames" :style="{ '--collapse-padding': '0' }">
|
|
162
162
|
<OCollapseItem v-for="(item, index) in computedList" :key="item.id" :value="item.id">
|
|
163
163
|
<template #title>
|
|
164
|
-
<div class="meet-title"
|
|
165
|
-
<
|
|
166
|
-
|
|
164
|
+
<div class="meet-title-left">
|
|
165
|
+
<div class="meet-title" :title="item.topic || item.name">
|
|
166
|
+
<OIcon
|
|
167
|
+
:style="{
|
|
167
168
|
backgroundColor: `${getConfig(item.type, 'color')}`
|
|
168
169
|
}"
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
170
|
+
>
|
|
171
|
+
<component :is="getConfig(item.type, 'icon')" />
|
|
172
|
+
</OIcon>
|
|
173
|
+
<div class="text">
|
|
174
|
+
{{ item.topic || item.name || item.title }}
|
|
175
|
+
</div>
|
|
176
|
+
<div class="tag-wrapper" v-if="item.is_cycle">
|
|
177
|
+
<OTag color="primary" variant="outline">{{ t('meeting.cycle') }}</OTag>
|
|
178
|
+
</div>
|
|
177
179
|
</div>
|
|
178
|
-
|
|
179
|
-
<div class="meet-info" ref="meetInfoRef">
|
|
180
|
+
<div class="meet-info" ref="meetInfoRef">
|
|
180
181
|
<span class="start-time">
|
|
181
182
|
<span>{{ item.dateRange }}</span>
|
|
182
183
|
</span>
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
184
|
+
<ODivider direction="v" />
|
|
185
|
+
<div>
|
|
186
|
+
<template v-if="item.group_name">{{ i18n.SIG_GROUP }} {{ item.group_name }}</template>
|
|
187
|
+
<template v-if="item.activity_type">{{ item.activity_type }}</template>
|
|
188
|
+
</div>
|
|
187
189
|
</div>
|
|
190
|
+
<OLink v-if="item.url" :href="item.url" target="_blank" class="jump-detail-link">
|
|
191
|
+
<span>{{ i18n.LEARN_MORE }}</span>
|
|
192
|
+
<template #suffix>
|
|
193
|
+
<OIcon>
|
|
194
|
+
<IconChevronRight />
|
|
195
|
+
</OIcon>
|
|
196
|
+
</template>
|
|
197
|
+
</OLink>
|
|
198
|
+
<OLink v-if="item.join_url" :href="item.join_url" target="_blank" class="jump-detail-link">
|
|
199
|
+
<span>{{ i18n.JOIN_MEETING }}</span>
|
|
200
|
+
<template #suffix>
|
|
201
|
+
<OIcon>
|
|
202
|
+
<IconChevronRight />
|
|
203
|
+
</OIcon>
|
|
204
|
+
</template>
|
|
205
|
+
</OLink>
|
|
206
|
+
<OLink v-if="item.content_url" :href="item.content_url" target="_blank" class="jump-detail-link">
|
|
207
|
+
<span>{{ i18n.DETAILS }}</span>
|
|
208
|
+
<template #suffix>
|
|
209
|
+
<OIcon>
|
|
210
|
+
<IconChevronRight />
|
|
211
|
+
</OIcon>
|
|
212
|
+
</template>
|
|
213
|
+
</OLink>
|
|
214
|
+
<OLink v-if="item.register_url" :href="item.register_url" target="_blank" class="jump-detail-link">
|
|
215
|
+
<span>{{ i18n.SIGN }}</span>
|
|
216
|
+
<template #suffix>
|
|
217
|
+
<OIcon>
|
|
218
|
+
<IconChevronRight />
|
|
219
|
+
</OIcon>
|
|
220
|
+
</template>
|
|
221
|
+
</OLink>
|
|
188
222
|
</div>
|
|
189
|
-
<OLink v-if="item.url" :href="item.url" target="_blank" class="jump-detail-link">
|
|
190
|
-
<span>{{ i18n.LEARN_MORE }}</span>
|
|
191
|
-
<template #suffix>
|
|
192
|
-
<OIcon>
|
|
193
|
-
<IconChevronRight />
|
|
194
|
-
</OIcon>
|
|
195
|
-
</template>
|
|
196
|
-
</OLink>
|
|
197
|
-
<OLink v-if="item.join_url" :href="item.join_url" target="_blank" class="jump-detail-link">
|
|
198
|
-
<span>{{ i18n.JOIN_MEETING }}</span>
|
|
199
|
-
<template #suffix>
|
|
200
|
-
<OIcon>
|
|
201
|
-
<IconChevronRight />
|
|
202
|
-
</OIcon>
|
|
203
|
-
</template>
|
|
204
|
-
</OLink>
|
|
205
|
-
<OLink v-if="item.content_url" :href="item.content_url" target="_blank" class="jump-detail-link">
|
|
206
|
-
<span>{{ i18n.DETAILS }}</span>
|
|
207
|
-
<template #suffix>
|
|
208
|
-
<OIcon>
|
|
209
|
-
<IconChevronRight />
|
|
210
|
-
</OIcon>
|
|
211
|
-
</template>
|
|
212
|
-
</OLink>
|
|
213
|
-
<OLink v-if="item.register_url" :href="item.register_url" target="_blank" class="jump-detail-link">
|
|
214
|
-
<span>{{ i18n.SIGN }}</span>
|
|
215
|
-
<template #suffix>
|
|
216
|
-
<OIcon>
|
|
217
|
-
<IconChevronRight />
|
|
218
|
-
</OIcon>
|
|
219
|
-
</template>
|
|
220
|
-
</OLink>
|
|
221
223
|
<OIcon @click.stop="() => copyInfo(index)" class="copy-icon">
|
|
222
224
|
<IconCopy />
|
|
223
225
|
</OIcon>
|
|
@@ -295,9 +297,17 @@ const computedList = computed(() => {
|
|
|
295
297
|
}
|
|
296
298
|
|
|
297
299
|
&.o-collapse-item-expanded {
|
|
298
|
-
.
|
|
299
|
-
|
|
300
|
+
.o-collapse-item-header {
|
|
301
|
+
padding-bottom: var(--o-gap-2);
|
|
302
|
+
|
|
303
|
+
.o-collapse-item-title {
|
|
304
|
+
.copy-icon {
|
|
305
|
+
opacity: 1;
|
|
306
|
+
visibility: visible;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
300
309
|
}
|
|
310
|
+
|
|
301
311
|
}
|
|
302
312
|
}
|
|
303
313
|
|
|
@@ -312,8 +322,11 @@ const computedList = computed(() => {
|
|
|
312
322
|
|
|
313
323
|
@include respond-to('>pad_v') {
|
|
314
324
|
&:hover {
|
|
315
|
-
.
|
|
316
|
-
|
|
325
|
+
.o-collapse-item-title {
|
|
326
|
+
.copy-icon {
|
|
327
|
+
opacity: 1;
|
|
328
|
+
visibility: visible;
|
|
329
|
+
}
|
|
317
330
|
}
|
|
318
331
|
}
|
|
319
332
|
}
|
|
@@ -324,6 +337,31 @@ const computedList = computed(() => {
|
|
|
324
337
|
.o-collapse-item-title {
|
|
325
338
|
flex-grow: 1;
|
|
326
339
|
margin-bottom: 0;
|
|
340
|
+
display: flex;
|
|
341
|
+
align-items: center;
|
|
342
|
+
justify-content: center;
|
|
343
|
+
gap: var(--o-gap-4);
|
|
344
|
+
padding-right: var(--o-gap-4);
|
|
345
|
+
|
|
346
|
+
.meet-title-left {
|
|
347
|
+
flex-grow: 1;
|
|
348
|
+
min-width: 0;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.copy-icon {
|
|
352
|
+
flex-shrink: 0;
|
|
353
|
+
display: inline-flex;
|
|
354
|
+
opacity: 0;
|
|
355
|
+
visibility: hidden;
|
|
356
|
+
|
|
357
|
+
&:hover {
|
|
358
|
+
color: var(--o-color-primary1);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
svg path {
|
|
362
|
+
fill: currentColor;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
327
365
|
}
|
|
328
366
|
|
|
329
367
|
|
|
@@ -349,7 +387,7 @@ const computedList = computed(() => {
|
|
|
349
387
|
display: flex;
|
|
350
388
|
color: var(--o-color-info3);
|
|
351
389
|
flex-direction: column;
|
|
352
|
-
background-color: color-mix(in srgb, var(--o-color-control2-light)
|
|
390
|
+
background-color: color-mix(in srgb, var(--o-color-control2-light) 40%, transparent);
|
|
353
391
|
padding: 16px 16px 16px calc(var(--icon-right) + var(--icon-size2) + var(--o-gap-5) - 12px);
|
|
354
392
|
border-radius: var(--o-radius-xs);
|
|
355
393
|
@include tip1;
|
|
@@ -405,7 +443,7 @@ const computedList = computed(() => {
|
|
|
405
443
|
display: flex;
|
|
406
444
|
align-items: center;
|
|
407
445
|
width: calc(100% - 48px);
|
|
408
|
-
color: var(--o-color-
|
|
446
|
+
color: var(--o-color-info2);
|
|
409
447
|
@include text2;
|
|
410
448
|
|
|
411
449
|
@include respond-to('<=pad_v') {
|
|
@@ -469,26 +507,7 @@ const computedList = computed(() => {
|
|
|
469
507
|
}
|
|
470
508
|
}
|
|
471
509
|
|
|
472
|
-
.copy-icon {
|
|
473
|
-
position: absolute;
|
|
474
|
-
top: 50%;
|
|
475
|
-
transform: translateY(-50%);
|
|
476
|
-
right: 56px;
|
|
477
|
-
font-size: 18px;
|
|
478
|
-
display: none;
|
|
479
510
|
|
|
480
|
-
@include respond-to('phone') {
|
|
481
|
-
right: 48px;
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
&:hover {
|
|
485
|
-
color: var(--o-color-primary1);
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
svg path {
|
|
489
|
-
fill: currentColor;
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
511
|
|
|
493
512
|
}
|
|
494
513
|
}
|
|
@@ -26,9 +26,9 @@ const getList = () => {
|
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
const list = computed(() => getList());
|
|
29
|
-
const checked = ref([]);
|
|
30
|
-
const temp = ref([]);
|
|
31
|
-
const selectorRef = ref(null);
|
|
29
|
+
const checked = ref<number[]>([]);
|
|
30
|
+
const temp = ref<number[]>([]);
|
|
31
|
+
const selectorRef = ref<InstanceType<typeof ElSelect> | null>(null);
|
|
32
32
|
|
|
33
33
|
const init = () => {
|
|
34
34
|
checked.value = [...props.modelValue];
|
|
@@ -41,12 +41,16 @@ watchEffect(() => {
|
|
|
41
41
|
|
|
42
42
|
const confirm = () => {
|
|
43
43
|
emits('update:modelValue', temp.value);
|
|
44
|
-
selectorRef.value
|
|
44
|
+
if (selectorRef.value) {
|
|
45
|
+
selectorRef.value.expanded = false;
|
|
46
|
+
}
|
|
45
47
|
};
|
|
46
48
|
|
|
47
49
|
const cancel = () => {
|
|
48
50
|
init();
|
|
49
|
-
selectorRef.value
|
|
51
|
+
if (selectorRef.value) {
|
|
52
|
+
selectorRef.value.expanded = false;
|
|
53
|
+
}
|
|
50
54
|
};
|
|
51
55
|
|
|
52
56
|
const clickItem = (val: number) => {
|
|
@@ -83,7 +87,7 @@ const removeTag = (val: number) => {
|
|
|
83
87
|
size="large"
|
|
84
88
|
multiple
|
|
85
89
|
collapseTags
|
|
86
|
-
maxCollapseTags="3"
|
|
90
|
+
:maxCollapseTags="3"
|
|
87
91
|
:modelValue="checked"
|
|
88
92
|
@remove-tag="removeTag"
|
|
89
93
|
>
|
|
@@ -10,6 +10,7 @@ const props = defineProps<{
|
|
|
10
10
|
data: MeetingItemT;
|
|
11
11
|
from?: string;
|
|
12
12
|
show: boolean;
|
|
13
|
+
page?: CalendarDataType
|
|
13
14
|
}>();
|
|
14
15
|
const { t, getPlatformLabel } = useMeetingConfig();
|
|
15
16
|
|
|
@@ -29,7 +30,7 @@ const infoList = computed(() =>
|
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
const activityInfoList = computed(() => {
|
|
32
|
-
const isLive = props.data.live_url?.length
|
|
33
|
+
const isLive = !!props.data.live_url?.length;
|
|
33
34
|
return [
|
|
34
35
|
{ label: t('meeting.activityDetail2'), key: 'agenda', ellipsis: true },
|
|
35
36
|
{ label: t('meeting.startDate'), key: 'start_date_time' },
|
|
@@ -42,7 +43,7 @@ const activityInfoList = computed(() => {
|
|
|
42
43
|
].slice(0, props.from === 'home' ? 5 : 8);
|
|
43
44
|
});
|
|
44
45
|
const activityInfoApprovalList = computed(() => {
|
|
45
|
-
const isLive = props.data.live_url?.length
|
|
46
|
+
const isLive = !!props.data.live_url?.length;
|
|
46
47
|
return [
|
|
47
48
|
{ label: t('meeting.activityType'), key: 'activity_type', isType: true },
|
|
48
49
|
{ label: isLive ? t('meeting.livePlatform') : t('meeting.activityAddress'), key: isLive ? 'live_url' : 'address' },
|
|
@@ -56,13 +57,28 @@ const activityInfoApprovalList = computed(() => {
|
|
|
56
57
|
];
|
|
57
58
|
});
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
interface ColumnItemT {
|
|
61
|
+
label: string;
|
|
62
|
+
key: string;
|
|
63
|
+
ellipsis?: boolean;
|
|
64
|
+
isLink?: boolean;
|
|
65
|
+
isRecord?: boolean;
|
|
66
|
+
isType?: boolean;
|
|
67
|
+
extra?: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const getField = (key: string) => (props.data as Record<string, any>)[key];
|
|
71
|
+
|
|
72
|
+
const columns = computed<ColumnItemT[]>(() => {
|
|
60
73
|
if (props.data.type === CalendarDataType.EVENTS) {
|
|
61
74
|
if (props.page === CalendarDataType.APPROVAL) {
|
|
62
75
|
return activityInfoApprovalList.value;
|
|
63
76
|
}
|
|
64
77
|
return activityInfoList.value;
|
|
65
78
|
}
|
|
79
|
+
if (props.data.type === CalendarDataType.SUMMIT) {
|
|
80
|
+
return activityInfoList.value;
|
|
81
|
+
}
|
|
66
82
|
return infoList.value;
|
|
67
83
|
});
|
|
68
84
|
|
|
@@ -71,7 +87,7 @@ const domRef = ref([]);
|
|
|
71
87
|
const copyInfo = () => {
|
|
72
88
|
try {
|
|
73
89
|
let text = `${ t('meeting.meetingTopic') + props.data.topic }\n`;
|
|
74
|
-
text += [...domRef.value].reduce((pre, cur) => `${ pre }${ cur.textContent }\n`, '');
|
|
90
|
+
text += [...domRef.value].reduce((pre, cur: HTMLDivElement) => `${ pre }${ cur.textContent }\n`, '');
|
|
75
91
|
navigator.clipboard.writeText(text);
|
|
76
92
|
return Promise.resolve();
|
|
77
93
|
} catch (e) {
|
|
@@ -89,36 +105,36 @@ defineExpose({ copyInfo });
|
|
|
89
105
|
v-for="(info, infoIdx) in columns"
|
|
90
106
|
:key="infoIdx"
|
|
91
107
|
:class="{
|
|
92
|
-
'record-item': info.isRecord &&
|
|
108
|
+
'record-item': info.isRecord && getField(info.key)?.length,
|
|
93
109
|
'link-item': info.isLink,
|
|
94
|
-
'is-empty':!
|
|
110
|
+
'is-empty':!getField(info.key)?.length,
|
|
95
111
|
[`label-item_${data.id}`]: true,
|
|
96
112
|
[`type_${data.type}`]: true,
|
|
97
113
|
}"
|
|
98
114
|
>
|
|
99
|
-
<template v-if="
|
|
115
|
+
<template v-if="getField(info.key) && !info.isRecord">
|
|
100
116
|
<span class="label">{{ info.label }}</span>
|
|
101
|
-
<MoreText :show="show" v-if="info.ellipsis" :text="
|
|
117
|
+
<MoreText :show="show" v-if="info.ellipsis" :text="getField(info.key) || '-'" />
|
|
102
118
|
<OLink
|
|
103
119
|
v-else-if="info.isLink"
|
|
104
120
|
target="_blank"
|
|
105
121
|
class="value"
|
|
106
122
|
color="primary"
|
|
107
123
|
hover-underline
|
|
108
|
-
:href="
|
|
124
|
+
:href="getField(info.key)"
|
|
109
125
|
>
|
|
110
|
-
{{
|
|
126
|
+
{{ getField(info.key) }}
|
|
111
127
|
</OLink>
|
|
112
|
-
<span v-else-if="info.key === 'platform'">{{ getPlatformLabel(
|
|
128
|
+
<span v-else-if="info.key === 'platform'">{{ getPlatformLabel(getField(info.key)) }}</span>
|
|
113
129
|
<span v-else class="value">
|
|
114
|
-
<i v-if="info.extra" class="extra">{{
|
|
115
|
-
{{
|
|
130
|
+
<i v-if="info.extra" class="extra">{{ getField(info.extra) }}</i>
|
|
131
|
+
{{ getField(info.key) || '-' }}
|
|
116
132
|
</span>
|
|
117
133
|
</template>
|
|
118
|
-
<template v-if="info.isRecord &&
|
|
134
|
+
<template v-if="info.isRecord && getField(info.key)?.length">
|
|
119
135
|
<span class="label">{{ info.label }}</span>
|
|
120
136
|
<div>
|
|
121
|
-
<p v-for="re in
|
|
137
|
+
<p v-for="re in getField(info.key)" :key="re.create_time" class="value">
|
|
122
138
|
{{ re.reason }}
|
|
123
139
|
{{ formatDate(re.create_time, 'YYYY/MM/DD HH:mm:ss') }}
|
|
124
140
|
{{ re.action === 1 ? t('meeting.approveReview') : t('meeting.rejectReview') }}
|
|
@@ -174,7 +190,7 @@ defineExpose({ copyInfo });
|
|
|
174
190
|
}
|
|
175
191
|
}
|
|
176
192
|
|
|
177
|
-
&.
|
|
193
|
+
&.type_events {
|
|
178
194
|
.label {
|
|
179
195
|
width: 6em;
|
|
180
196
|
}
|