@opendesign-plus-test/components 0.0.1-rc.21 → 0.0.1-rc.22

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 (148) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -1
  2. package/dist/chunk-OElCookieNotice.es.js +428 -137
  3. package/dist/components/OBanner.vue.d.ts +10 -1
  4. package/dist/components/OFooter.vue.d.ts +1 -1
  5. package/dist/components/OHeaderSearch.vue.d.ts +4 -4
  6. package/dist/components/activity/OActivityApproval.vue.d.ts +277 -0
  7. package/dist/components/activity/OActivityForm.vue.d.ts +140 -0
  8. package/dist/components/activity/OMyActivityCalendar.vue.d.ts +2 -0
  9. package/dist/components/activity/config.d.ts +15 -0
  10. package/dist/components/activity/data.d.ts +51 -0
  11. package/dist/components/activity/index.d.ts +332 -0
  12. package/dist/components/activity/types.d.ts +72 -0
  13. package/dist/components/meeting/OMeetingCalendar.vue.d.ts +309 -0
  14. package/dist/components/meeting/OMeetingForm.vue.d.ts +156 -0
  15. package/dist/components/meeting/OMyMeetingCalendar.vue.d.ts +582 -0
  16. package/dist/components/meeting/OSigMeetingCalendar.vue.d.ts +24 -0
  17. package/dist/components/meeting/components/OMeetingCalendarList.vue.d.ts +27 -0
  18. package/dist/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +664 -0
  19. package/dist/components/meeting/components/OMeetingDetail.vue.d.ts +12 -0
  20. package/dist/components/meeting/components/OMeetingPlaybackSubtitles.vue.d.ts +5 -0
  21. package/dist/components/meeting/components/OMeetingPlaybackVideo.vue.d.ts +17 -0
  22. package/dist/components/meeting/components/OSigMeetingAside.vue.d.ts +16 -0
  23. package/dist/components/meeting/config.d.ts +27 -0
  24. package/dist/components/meeting/types.d.ts +140 -0
  25. package/dist/components/meeting/utils.d.ts +21 -0
  26. package/dist/components.cjs.js +224 -3
  27. package/dist/components.css +1 -1
  28. package/dist/components.es.js +43019 -2293
  29. package/dist/index.d.ts +2 -0
  30. package/package.json +6 -3
  31. package/scripts/generate-components-index.js +4 -0
  32. package/src/assets/meeting/svg-icons/icon-all.svg +3 -0
  33. package/src/assets/meeting/svg-icons/icon-backward.svg +4 -0
  34. package/src/assets/meeting/svg-icons/icon-calendar.svg +3 -0
  35. package/src/assets/meeting/svg-icons/icon-cancel.svg +4 -0
  36. package/src/assets/meeting/svg-icons/icon-captions.svg +4 -0
  37. package/src/assets/meeting/svg-icons/icon-close-captions.svg +6 -0
  38. package/src/assets/meeting/svg-icons/icon-close-fullscreen.svg +6 -0
  39. package/src/assets/meeting/svg-icons/icon-copy.svg +3 -0
  40. package/src/assets/meeting/svg-icons/icon-create.svg +5 -0
  41. package/src/assets/meeting/svg-icons/icon-delete.svg +7 -0
  42. package/src/assets/meeting/svg-icons/icon-empty.svg +31 -0
  43. package/src/assets/meeting/svg-icons/icon-empty_dark.svg +49 -0
  44. package/src/assets/meeting/svg-icons/icon-event.svg +3 -0
  45. package/src/assets/meeting/svg-icons/icon-export.svg +3 -0
  46. package/src/assets/meeting/svg-icons/icon-forward.svg +4 -0
  47. package/src/assets/meeting/svg-icons/icon-fullscreen.svg +6 -0
  48. package/src/assets/meeting/svg-icons/icon-help.svg +3 -0
  49. package/src/assets/meeting/svg-icons/icon-important.svg +4 -0
  50. package/src/assets/meeting/svg-icons/icon-info.svg +3 -0
  51. package/src/assets/meeting/svg-icons/icon-meet.svg +3 -0
  52. package/src/assets/meeting/svg-icons/icon-meeting-message.svg +5 -0
  53. package/src/assets/meeting/svg-icons/icon-meeting.svg +4 -0
  54. package/src/assets/meeting/svg-icons/icon-play.svg +5 -0
  55. package/src/assets/meeting/svg-icons/icon-playing-tip.svg +7 -0
  56. package/src/assets/meeting/svg-icons/icon-playing.svg +5 -0
  57. package/src/assets/meeting/svg-icons/icon-question.svg +4 -0
  58. package/src/assets/meeting/svg-icons/icon-sound.svg +5 -0
  59. package/src/assets/meeting/svg-icons/icon-speaker.svg +3 -0
  60. package/src/assets/meeting/svg-icons/icon-summit.svg +3 -0
  61. package/src/assets/meeting/svg-icons/icon-telligent.svg +3 -0
  62. package/src/assets/meeting/svg-icons/icon-tip.svg +3 -0
  63. package/src/assets/meeting/svg-icons/icon-todo.svg +4 -0
  64. package/src/assets/meeting/transparent.png +0 -0
  65. package/src/assets/svg-icons/icon-chevron-up.svg +3 -0
  66. package/src/assets/svg-icons/icon-filter.svg +3 -0
  67. package/src/assets/svg-icons/icon-loading.svg +4 -0
  68. package/src/assets/svg-icons/icon-search.svg +3 -0
  69. package/src/assets/svg-icons/icon-tips.svg +3 -0
  70. package/src/components/OBanner.vue +11 -3
  71. package/src/components/OFooter.vue +1 -1
  72. package/src/components/activity/OActivityApproval.vue +775 -0
  73. package/src/components/activity/OActivityForm.vue +540 -0
  74. package/src/components/activity/OMyActivityCalendar.vue +13 -0
  75. package/src/components/activity/config.ts +130 -0
  76. package/src/components/activity/data.ts +365 -0
  77. package/src/components/activity/index.ts +24 -0
  78. package/src/components/activity/types.ts +78 -0
  79. package/src/components/common/MoreText.vue +119 -0
  80. package/src/components/common/ThFilter.vue +326 -0
  81. package/src/components/events/OEventsApply.vue +2 -86
  82. package/src/components/events/OEventsCalendar.vue +0 -25
  83. package/src/components/events/OEventsList.vue +0 -51
  84. package/src/components/events/index.ts +1 -0
  85. package/src/components/meeting/OMeetingCalendar.vue +865 -0
  86. package/src/components/meeting/OMeetingForm.vue +1035 -0
  87. package/src/components/meeting/OMeetingPlayback.vue +439 -0
  88. package/src/components/meeting/OMyMeetingCalendar.vue +1534 -0
  89. package/src/components/meeting/OSigMeetingCalendar.vue +411 -0
  90. package/src/components/meeting/components/OMeetingCalendarList.vue +462 -0
  91. package/src/components/meeting/components/OMeetingCalendarSelector.vue +206 -0
  92. package/src/components/meeting/components/OMeetingDetail.vue +176 -0
  93. package/src/components/meeting/components/OMeetingPlaybackSubtitles.vue +611 -0
  94. package/src/components/meeting/components/OMeetingPlaybackVideo.vue +741 -0
  95. package/src/components/meeting/components/OSigMeetingAside.vue +197 -0
  96. package/src/components/meeting/config.ts +110 -0
  97. package/src/components/meeting/index.ts +45 -0
  98. package/src/components/meeting/types.ts +167 -0
  99. package/src/components/meeting/utils.ts +106 -0
  100. package/src/draft/Footer.vue +4 -4
  101. package/src/env.d.ts +15 -0
  102. package/src/i18n/en.ts +140 -0
  103. package/src/i18n/index.ts +18 -4
  104. package/src/i18n/zh.ts +140 -0
  105. package/src/index.ts +2 -0
  106. package/tsconfig.json +6 -2
  107. package/vite.config.ts +25 -9
  108. package/npmcachae/_cacache/content-v2/sha512/05/f7/dd881de8b21208ea65cfce17c65f29964c3897505819f81151b9798a3a6ab1a1114324192354ead15cd2c8d93f76cc9929af168066ec9cc7878d0fd87578 +0 -1
  109. package/npmcachae/_cacache/content-v2/sha512/08/b7/879230f8c2f3765920a6fd6113f4687141f1f645f96af7d95a0dee9113d1095d000fb78a5dd55c1860bbfb9b698ef6281b3874b03b2384222f61fe055fc4 +0 -1
  110. package/npmcachae/_cacache/content-v2/sha512/10/a0/a6626613c03ee052925a762e8675878efdf83dac64fafea43beb2a875f7d7c3907bb0ee30761253cd16021fd58911449594e1d3358675cbb7c48e62f220a +0 -1
  111. package/npmcachae/_cacache/content-v2/sha512/2e/a6/7cbcf55a98bbe2ca881d10e982ebf59211a0ec051eaf46eb1914df66cc35ae502ed6888850e51d8f45cd92695bac16961a642bc41508f8d5160a9ab617ab +0 -1
  112. package/npmcachae/_cacache/content-v2/sha512/92/8d/e5259c5d5cc2a625247f3c4d809192ca9482467e23683d74924a11e91a7997ad890b3d26adaf34df66d5329cc7a5fbde6713110cad05107a0b504e4fd4e8 +0 -1
  113. package/npmcachae/_cacache/content-v2/sha512/e9/45/9597d870127c35681155cec5fe52fde4e1aa0f778b996ee371e856aca850ee4c13aba74b0c3d3a89ff0ea4c9e1d33e64e53c31dc9cede0b31012695ee659 +0 -1
  114. package/npmcachae/_cacache/index-v5/16/4a/7195fcc6857299c4ab7e26014a8ae6e3c396507a2c8db3da1b74b005d574 +0 -3
  115. package/npmcachae/_cacache/index-v5/58/f0/4fe556f104b09be642895a82afa463fe560d9a0dc8f507efeef825a6905e +0 -3
  116. package/npmcachae/_cacache/index-v5/67/7d/0b50dc4c09555fc922ccf43c46994f1a0a5ff47dc0a5d5cf41437ac2d3e6 +0 -3
  117. package/npmcachae/_cacache/index-v5/8f/28/353f8839e030ab11aab3e7d9f1b8c053403e9f593cf6d4aa6ec8fdd7610d +0 -3
  118. package/npmcachae/_cacache/index-v5/97/10/0fcf20eb29d0726bd820822f6729718464b591b0e6901217c956740e943c +0 -3
  119. package/npmcachae/_cacache/index-v5/db/89/a0a4f35f593105624ab39339962d9e9b5cc65ed0c346b0732fb8dd73721d +0 -3
  120. package/npmcachae/_logs/2026-03-26T14_10_35_885Z-debug-0.log +0 -171
  121. package/npmcachae/_logs/2026-03-26T14_10_38_617Z-debug-0.log +0 -4227
  122. package/npmcachae/_logs/2026-03-26T14_10_45_316Z-debug-0.log +0 -4228
  123. package/npmcachae/_logs/2026-03-26T14_10_48_169Z-debug-0.log +0 -4228
  124. package/npmcachae/_logs/2026-03-26T14_10_51_306Z-debug-0.log +0 -464
  125. package/npmcachae/_logs/2026-03-26T14_10_53_911Z-debug-0.log +0 -464
  126. package/npmcachae/_logs/2026-03-26T14_10_56_398Z-debug-0.log +0 -464
  127. package/npmcachae/_logs/2026-03-26T14_10_58_861Z-debug-0.log +0 -464
  128. package/npmcachae/_logs/2026-03-26T14_11_01_337Z-debug-0.log +0 -464
  129. package/npmcachae/_logs/2026-03-26T14_11_03_851Z-debug-0.log +0 -464
  130. package/npmcachae/_logs/2026-03-26T14_11_08_024Z-debug-0.log +0 -464
  131. package/npmcachae/_update-notifier-last-checked +0 -0
  132. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/3e/17/1865217b9acb9f4921c53a09b5c76587cd2ab748beb2699ff6cfb1341d73b1aa56ed91ffc5ab2c9c9b3fbe626103b35d9a79ff29ff6b8cbb8d89755fe1a2 +0 -1
  133. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/a6/15/47bb7552ec9248079e839a5feecc1742d4de19524fdf041cf581701cf4760a5025106036145e279ba193b07c8fa5b07ae3d75f1b6032f0cb2219115b6167 +0 -1
  134. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/d1/4c/133b32e09c97101a27a07cc4432f94e470cff02d120d21babcea77c3f5cd436793516dc1a8e282ee1a568f923c148b1a48f4a43233462a530d35e8b41c67 +0 -1
  135. package/src/components/meeting/npmcachae/_cacache/index-v5/54/0d/a4909047714a0a7198bb9bd37020992464e47c79a791889919b84d90aab0 +0 -3
  136. package/src/components/meeting/npmcachae/_cacache/index-v5/8e/2b/21a79778e2ac08cf5663baf83cb35f951995a496007eb2e2f7fba54021a4 +0 -3
  137. package/src/components/meeting/npmcachae/_cacache/index-v5/eb/a0/b70c8132e5b57a0f1e129b8cc941796420a9c147c0baa680710083740898 +0 -2
  138. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_03_54_955Z-debug-0.log +0 -277
  139. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_03_57_842Z-debug-0.log +0 -277
  140. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_00_016Z-debug-0.log +0 -277
  141. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_02_191Z-debug-0.log +0 -277
  142. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_04_425Z-debug-0.log +0 -277
  143. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_06_642Z-debug-0.log +0 -277
  144. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_08_826Z-debug-0.log +0 -277
  145. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_36_140Z-debug-0.log +0 -433
  146. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_39_573Z-debug-0.log +0 -433
  147. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_42_134Z-debug-0.log +0 -212
  148. package/src/components/meeting/npmcachae/_update-notifier-last-checked +0 -0
@@ -0,0 +1,775 @@
1
+ <script setup lang="ts">
2
+ import { ElTable, ElTableColumn, dayjs } from 'element-plus';
3
+ import {
4
+ OButton,
5
+ OCollapse,
6
+ ODialog,
7
+ ODivider,
8
+ OForm,
9
+ OFormItem, OLink,
10
+ OPagination,
11
+ OTag,
12
+ OTextarea,
13
+ useMessage,
14
+ } from '@opensig/opendesign';
15
+ import { useScreen } from '@opendesign-plus/composables';
16
+ import { onMounted, watch, ref, reactive } from 'vue';
17
+ import { ActivityItemT, ActivityTablePropsT, ReviewParamsT, TypeOptionT } from './types';
18
+ import { approvalStatusMap, statusMap } from './config';
19
+ import ThFilter from '../common/ThFilter.vue';
20
+
21
+
22
+ const message = useMessage(null);
23
+ const { isPhone, lePadV } = useScreen();
24
+ const props = defineProps<ActivityTablePropsT>();
25
+ const params = reactive<ReviewParamsT>({
26
+ page: 1,
27
+ size: 10,
28
+ status: '',
29
+ is_delete: 0,
30
+ search: '',
31
+ sponsor: '',
32
+ order_by: '',
33
+ });
34
+
35
+ // -------------------- 申请人 --------------------
36
+ const applicantValue = ref('');
37
+ const applicantList = ref<string[]>([]);
38
+
39
+ const filterApplicantList = () => {
40
+ params.sponsor = applicantValue.value.join(',');
41
+ };
42
+
43
+ // -------------------- 时间排序 --------------------
44
+ const order_by = ref('desc');
45
+ const sortTime = () => {
46
+ order_by.value = order_by.value === 'asc' ? 'desc' : 'asc';
47
+ params.order_by = order_by.value;
48
+ };
49
+
50
+ // -------------------- 状态 --------------------
51
+ const statusValue = ref();
52
+ const statusOptions = ref<TypeOptionT[]>([]);
53
+ approvalStatusMap.forEach((item) => {
54
+ statusOptions.value.push(item);
55
+ });
56
+ const filterStatusList = () => {
57
+ params.status = statusValue.value;
58
+ if (statusValue.value === 'cancel') {
59
+ params.is_delete = 1;
60
+ } else {
61
+ params.is_delete = 0;
62
+ }
63
+ };
64
+
65
+ const tableData = ref([]);
66
+ const total = ref(0);
67
+
68
+ const COUNT_PER_PAGE = [10, 20, 30, 40];
69
+
70
+ const getData = async () => {
71
+ const { page, size, status, sponsor, order_by, search, is_delete } = params;
72
+ let paramsData = { page, size, sponsor, order_by, search } as ReviewParamsT;
73
+ if (status === 'cancel') {
74
+ paramsData.is_delete = is_delete;
75
+ paramsData.status = '';
76
+ } else {
77
+ paramsData.status = status;
78
+ }
79
+ if (!props.getTableDataRequest) {
80
+ return;
81
+ }
82
+ const res = await props.getTableDataRequest(paramsData);
83
+ tableData.value = (res.data || [])
84
+ .map((item) => {
85
+ const { start_date, end_date, start, end } = item;
86
+ return [
87
+ {
88
+ ...item,
89
+ time: `${ start_date }-${ end }`,
90
+ start_date_time: `${ start_date } ${ start }`,
91
+ end_date_time: `${ end_date } ${ end }`,
92
+ type: 'activity',
93
+ dateRange: `${ start_date } ${ start }-${ end_date } ${ end }`,
94
+ },
95
+ ];
96
+ })
97
+ .flat();
98
+ total.value = res.total;
99
+ };
100
+
101
+ const onPaginationChange = (val: { page: number; pageSize: number }) => {
102
+ if (val.pageSize !== params.size) {
103
+ params.page = 1;
104
+ } else {
105
+ params.page = val.page;
106
+ }
107
+ params.size = val.pageSize;
108
+ getData();
109
+ };
110
+
111
+ // -------------------- 活动审核弹窗 --------------------
112
+ const form = ref({
113
+ reason: '',
114
+ });
115
+ const formRef = ref(); // 表单实例
116
+ const loading = ref(false); // 提交状态
117
+ const currentRow = ref<ActivityItemT | null>(null); // 当前活动详情
118
+ const digTitle = ref('');
119
+ const reviewStatus = ref(0);
120
+ const reviewVisible = ref(false);
121
+
122
+ // 表单校验规则
123
+ const rules = ref({
124
+ reason: [{ required: true, message: '请输入审核的备注信息' }],
125
+ });
126
+
127
+ const confirm = async () => {
128
+ if (!props.approveActivityRequest || !props.rejectActivityRequest) {
129
+ return;
130
+ }
131
+ const msg = reviewStatus.value === 1 ? '审核通过' : '审核驳回';
132
+ try {
133
+ loading.value = true;
134
+ const valid = await formRef.value?.validate();
135
+ if (valid.some((v) => !!v)) {
136
+ loading.value = false;
137
+ return;
138
+ }
139
+ if (reviewStatus.value === 1) {
140
+ await props.approveActivityRequest(currentRow.value.id, form.value);
141
+ } else {
142
+ await props.rejectActivityRequest(currentRow.value.id, form.value);
143
+ }
144
+ getData();
145
+ cancel();
146
+ message.success({
147
+ content: `“${ currentRow.value?.title }”活动${ msg }成功`,
148
+ });
149
+ } catch {
150
+ reviewVisible.value = false;
151
+ loading.value = false;
152
+ message.danger({
153
+ content: `“${ currentRow.value?.title }”活动${ msg }失败`,
154
+ });
155
+ }
156
+ };
157
+ const cancel = () => {
158
+ reviewVisible.value = false;
159
+ cancelVisible.value = false;
160
+ loading.value = false;
161
+ form.value.reason = '';
162
+ };
163
+
164
+ const confirmCancel = async () => {
165
+ if (!props.deleteActivityRequest || !props.cancelActivityRequest)
166
+ try {
167
+ loading.value = true;
168
+ if (cancelStatus.value === 1) {
169
+ await props.cancelActivityRequest(currentRow.value.id, form.value);
170
+ } else {
171
+ await props.deleteActivityRequest(currentRow.value.id, form.value);
172
+ }
173
+ getData();
174
+ cancel();
175
+ message.success({
176
+ content: `“${ currentRow.value?.title }”活动${ cancelText.value }成功`,
177
+ });
178
+ } catch {
179
+ loading.value = false;
180
+ cancelVisible.value = false;
181
+ message.danger({
182
+ content: `“${ currentRow.value?.title }”活动${ cancelText.value }失败`,
183
+ });
184
+ }
185
+ };
186
+
187
+ // -------------------- 审核操作 --------------------
188
+ const cancelVisible = ref(false);
189
+ const cancelTitle = ref('');
190
+ const cancelText = ref('');
191
+ const cancelStatus = ref(0);
192
+
193
+ const deleteItem = (row: ActivityItemT) => {
194
+ cancelTitle.value = '删除活动';
195
+ cancelText.value = '删除';
196
+ currentRow.value = row;
197
+ cancelStatus.value = 0;
198
+ cancelVisible.value = true;
199
+ };
200
+ const cancelItem = (row: ActivityItemT) => {
201
+ cancelTitle.value = '取消活动';
202
+ cancelText.value = '取消';
203
+ currentRow.value = row;
204
+ cancelStatus.value = 1;
205
+ cancelVisible.value = true;
206
+ };
207
+ const passItem = (row: ActivityItemT) => {
208
+ currentRow.value = row;
209
+ digTitle.value = '审核通过';
210
+ reviewStatus.value = 1;
211
+ reviewVisible.value = true;
212
+ };
213
+ const rejectItem = (row: ActivityItemT) => {
214
+ currentRow.value = row;
215
+ digTitle.value = '审核驳回';
216
+ reviewStatus.value = 0;
217
+ reviewVisible.value = true;
218
+ };
219
+
220
+ const expandList = ref([]);
221
+ const expandedRows = ref([]);
222
+
223
+ const getActivityDetail = (val: number) => {
224
+ if (!props.getActivityDetailRequest) {
225
+ return;
226
+ }
227
+ if (!expandList.value.includes(val)) {
228
+ expandList.value.push(val);
229
+ props.getActivityDetailRequest(val).then((res) => {
230
+ tableData.value?.forEach((item) => {
231
+ if (item.id === res.id) {
232
+ item.approve_record = res.approve_record;
233
+ item.approver = res.approver;
234
+ }
235
+ });
236
+ });
237
+ }
238
+ const index = expandedRows.value.indexOf(val);
239
+ if (!expandedRows.value.includes(val)) {
240
+ expandedRows.value.push(val);
241
+ } else {
242
+ expandedRows.value.splice(index, 1); // 收起
243
+ }
244
+ };
245
+
246
+ const expandChange = (val) => {
247
+ getActivityDetail(val.id);
248
+ };
249
+
250
+ const getRowKey = (row) => {
251
+ return row.id;
252
+ };
253
+
254
+ // -------------------- 移动端 ---------------------
255
+ const expanded = ref([]); // 展开的数据,id
256
+ const change = (val: number[]) => {
257
+ if (val.length) {
258
+ val.forEach((item: number) => {
259
+ getActivityDetail(item);
260
+ });
261
+ }
262
+ };
263
+
264
+ const detailRefs = ref({});
265
+ const getDetailRefs = (insRef, id) => {
266
+ if (insRef && id) {
267
+ detailRefs.value[id] = insRef;
268
+ }
269
+ };
270
+
271
+ onMounted(() => {
272
+ getData();
273
+ });
274
+
275
+ // -------------------- 监听查询参数变化,更新数据 ---------------------
276
+ watch(
277
+ () => [params.status, params.sponsor, params.order_by, params.search, params.is_delete],
278
+ () => {
279
+ getData();
280
+ },
281
+ { deep: true },
282
+ );
283
+ </script>
284
+
285
+ <template>
286
+ <div class="o-activity-table">
287
+ <div class="table-wrapper" v-if="!isPhone">
288
+ <ElTable :data="tableData" @expand-change="expandChange" :row-key="getRowKey" :expand-row-keys="expandedRows">
289
+ <ElTableColumn type="expand">
290
+ <template #default="props">
291
+ <div class="expand-detail">
292
+ <MeetingDetail :data="props.row" page="approval" />
293
+ </div>
294
+ </template>
295
+ </ElTableColumn>
296
+ <ElTableColumn label="活动名称" prop="title" />
297
+ <ElTableColumn prop="sponsor">
298
+ <template #header>
299
+ <ThFilter
300
+ v-model="applicantValue"
301
+ @confirm="filterApplicantList"
302
+ :list="applicantList"
303
+ :multiple="true"
304
+ >
305
+
306
+ <template #empty>
307
+ <slot name="filter-empty"></slot>
308
+ </template>
309
+ 申请人
310
+ </ThFilter>
311
+ </template>
312
+ </ElTableColumn>
313
+ <ElTableColumn prop="create_time">
314
+ <template #header>
315
+ <div class="sort-time" @click="sortTime">
316
+ <span>申请时间</span>
317
+ <div class="sort-btn">
318
+ <div class="sort-asc sort-item" :class="{ active: order_by === 'asc' }"></div>
319
+ <div class="sort-desc sort-item" :class="{ active: order_by === 'desc' }"></div>
320
+ </div>
321
+ </div>
322
+ </template>
323
+ <template #default="scope">
324
+ {{ dayjs(scope.row.create_time).format('YYYY/MM/DD HH:mm:ss') }}
325
+ </template>
326
+ </ElTableColumn>
327
+ <ElTableColumn prop="status" width="90px">
328
+ <template #header>
329
+ <ThFilter
330
+ v-model="statusValue"
331
+ @confirm="filterStatusList"
332
+ :list="statusOptions"
333
+ >
334
+ <template #empty>
335
+ <slot name="filter-empty"></slot>
336
+ </template>
337
+ 状态
338
+ </ThFilter>
339
+ </template>
340
+ <template #default="scope">
341
+ <OTag v-if="scope.row.is_delete !== 1" color="primary" variant="outline"
342
+ :class="[`tag-${statusMap.get(scope.row.status)?.id}`]">
343
+ {{
344
+ statusMap.get(scope.row.status)?.text
345
+ }}
346
+ </OTag>
347
+ <OTag v-else color="primary" variant="outline" class="tag-calcel">已取消</OTag>
348
+ </template>
349
+ </ElTableColumn>
350
+ <ElTableColumn label="操作">
351
+ <template #default="scope">
352
+ <div class="activity-btn">
353
+ <OLink
354
+ v-if="scope.row.status === 7 || scope.row.is_delete"
355
+ color="danger"
356
+ @click="deleteItem(scope.row)">
357
+ 删除
358
+ </OLink>
359
+ <OLink
360
+ v-if="(scope.row.status === 3 || scope.row.status === 4) && scope.row.is_delete !== 1"
361
+ color="danger"
362
+ @click="cancelItem(scope.row)"
363
+ >
364
+ 取消活动
365
+ </OLink>
366
+ <OLink v-if="scope.row.status === 2" color="primary" @click="passItem(scope.row)">
367
+ 通过
368
+ </OLink>
369
+ <OLink v-if="scope.row.status === 2" color="primary" @click="rejectItem(scope.row)">
370
+ 驳回
371
+ </OLink>
372
+ </div>
373
+ </template>
374
+ </ElTableColumn>
375
+ </ElTable>
376
+ <div v-if="total > COUNT_PER_PAGE[0]" class="pagination-wrapper">
377
+ <OPagination
378
+ :total="total"
379
+ :page="params.page"
380
+ :page-size="params.size"
381
+ :page-sizes="COUNT_PER_PAGE"
382
+ :layout="['total', 'jumper', 'pager', 'pagesize']"
383
+ :show-more="false"
384
+ @change="onPaginationChange"
385
+ />
386
+ </div>
387
+ </div>
388
+ <div v-else class="collapse-wrapper">
389
+ <OCollapse v-model="expanded" :accordion="isPhone" @change="change">
390
+ <template v-for="(act, idx) in tableData" :key="act.id">
391
+ <div class="title-top">
392
+ <p class="act-title">{{ act.title }}</p>
393
+ <OTag v-if="act.is_delete !== 1" color="primary" variant="outline"
394
+ :class="[`tag-${statusMap.get(act.status)?.id}`]">
395
+ {{
396
+ statusMap.get(act.status)?.text
397
+ }}
398
+ </OTag>
399
+ <OTag v-else color="primary" variant="outline" class="tag-calcel">已取消</OTag>
400
+ </div>
401
+ <OCollapseItem :value="act.id">
402
+ <template #title>
403
+ <div class="act-sponsor">
404
+ <p class="sponsor">{{ act.sponsor }}</p>
405
+ <p>{{ dayjs(act.create_time).format('YYYY/MM/DD HH:mm:ss') }}</p>
406
+ </div>
407
+ <div class="activity-btn">
408
+ <OLink v-if="act.status === 7 || act.is_delete" color="danger" variant="text"
409
+ @click.stop="deleteItem(act)">
410
+ 删除
411
+ </OLink>
412
+ <OLink v-if="(act.status === 3 || act.status === 4) && act.is_delete !== 1" color="danger"
413
+ variant="text" @click.stop="cancelItem(act)"
414
+ >
415
+ 取消活动
416
+ </OLink
417
+ >
418
+ <OLink v-if="act.status === 2" color="primary" variant="text" @click.stop="passItem(act)">
419
+ 通过
420
+ </OLink>
421
+ <OLink v-if="act.status === 2" color="primary" variant="text" @click.stop="rejectItem(act)">
422
+ 驳回
423
+ </OLink>
424
+ </div>
425
+ </template>
426
+ <div class="activity-detail">
427
+ <MeetingDetail :show="expanded.includes(act.id)" :data="act"
428
+ :ref="(insRef) => getDetailRefs(insRef, act.id)" page="approval" />
429
+ </div>
430
+ </OCollapseItem>
431
+ </template>
432
+ </OCollapse>
433
+ <!-- 分页 -->
434
+ <div v-if="total > COUNT_PER_PAGE[0]" class="pagination">
435
+ <OPagination
436
+ :total="total"
437
+ :page="params.page"
438
+ :page-size="params.size"
439
+ :page-sizes="COUNT_PER_PAGE"
440
+ :layout="['total', 'jumper', 'pager', 'pagesize']"
441
+ :show-more="false"
442
+ :simple="true"
443
+ @change="onPaginationChange"
444
+ />
445
+ </div>
446
+ </div>
447
+ <ODialog v-model:visible="reviewVisible" :phone-half-full="lePadV"
448
+ main-class="handle-dialog-approval review-dialog">
449
+ <template #header>{{ digTitle }}</template>
450
+ <div class="dialog-content">
451
+ <OForm :model="form" ref="formRef" has-required layout="v" class="form-wrapper">
452
+ <OFormItem :rules="rules.reason" label="审核备注:" field="reason">
453
+ <OTextarea
454
+ size="large"
455
+ placeholder="请输入审核的备注信息"
456
+ style="width: 100%"
457
+ :rows="4"
458
+ resize="none"
459
+ :max-length="1000"
460
+ :input-on-outlimit="false"
461
+ v-model="form.reason"
462
+ />
463
+ </OFormItem>
464
+ </OForm>
465
+ </div>
466
+ <template #footer>
467
+ <div class="dialog-footer">
468
+ <OButton color="primary" :variant="lePadV ? 'text' : 'solid'" size="large" @click="confirm"
469
+ :loading="loading">确定
470
+ </OButton>
471
+ <ODivider v-if="lePadV" direction="v" />
472
+ <OButton color="primary" :variant="lePadV ? 'text' : 'outline'" size="large" @click="cancel">取消</OButton>
473
+ </div>
474
+ </template>
475
+ </ODialog>
476
+ <!-- 取消活动弹窗 -->
477
+ <ODialog v-model:visible="cancelVisible" :phone-half-full="lePadV" main-class="handle-dialog-approval">
478
+ <template #header>{{ cancelTitle }}</template>
479
+ <div class="dialog-content">是否确认{{ cancelText }}“{{ currentRow.title
480
+ }}”活动?取消后将不在会议首页呈现,且已报名的数据也会被清空,请谨慎操作。
481
+ </div>
482
+ <template #footer>
483
+ <div class="dialog-footer">
484
+ <OButton color="primary" :variant="lePadV ? 'text' : 'outline'" size="large" @click="confirmCancel"
485
+ :loading="loading">确定
486
+ </OButton>
487
+ <ODivider v-if="lePadV" direction="v" />
488
+ <OButton color="primary" :variant="lePadV ? 'text' : 'solid'" size="large" @click="cancel">取消</OButton>
489
+ </div>
490
+ </template>
491
+ </ODialog>
492
+ </div>
493
+ </template>
494
+
495
+ <style lang="scss" scoped>
496
+ .my-approval {
497
+ height: 100%;
498
+ }
499
+
500
+ .title {
501
+ color: var(--o-color-info1);
502
+ font-weight: 500;
503
+ @include h2;
504
+ }
505
+
506
+ .desc {
507
+ color: var(--o-color-info2);
508
+ margin-top: 12px;
509
+ @include tip1;
510
+ }
511
+
512
+ .o-divider {
513
+ --o-divider-gap: 24px;
514
+ }
515
+
516
+ .expand-detail {
517
+ padding: 16px 60px;
518
+ background-color: rgba(243, 246, 250, 1);
519
+ }
520
+
521
+ .o-form {
522
+ &.o-form-layout-v {
523
+ .o-form-item-label {
524
+ margin-bottom: var(--o-gap-2);
525
+ }
526
+ }
527
+ }
528
+
529
+ .activity-btn {
530
+ .o-btn + .o-btn {
531
+ margin-left: 24px;
532
+ }
533
+
534
+ @include respond-to('<=pad_v') {
535
+ .o-btn + .o-btn {
536
+ margin-left: 16px;
537
+ }
538
+ }
539
+ @include respond-to('phone') {
540
+ margin-top: 8px;
541
+ .o-btn + .o-btn {
542
+ margin-left: 12px;
543
+ }
544
+ }
545
+ }
546
+
547
+ .o-btn-text {
548
+ @include hover {
549
+ background-color: transparent;
550
+ color: var(--o-color-primary1);
551
+ }
552
+ }
553
+
554
+ .o-btn.o-btn-text {
555
+ padding-left: 0 !important;
556
+ padding-right: 0 !important;
557
+ min-width: auto;
558
+ }
559
+
560
+ .o-tag {
561
+ --tag-radius: 100px;
562
+ --tag-bg-color: rgba(0, 113, 243, 0.1);
563
+ --tag-bd-color: transparent;
564
+ }
565
+
566
+ .tag-draft,
567
+ .tag-calcel {
568
+ --tag-color: var(--o-color-info3);
569
+ --tag-bg-color: rgba(222, 222, 227, 1);
570
+ }
571
+
572
+ .tag-registration,
573
+ .tag-in-progress,
574
+ .tag-ended {
575
+ --tag-color: rgba(36, 171, 54, 1);
576
+ --tag-bg-color: rgba(36, 171, 54, 0.1);
577
+ }
578
+
579
+ .tag-reject {
580
+ --tag-color: rgba(294, 118, 17, 1);
581
+ --tag-bg-color: rgba(294, 118, 17, 0.1);
582
+ }
583
+
584
+ .sort-time {
585
+ display: flex;
586
+ align-items: center;
587
+ cursor: pointer;
588
+ }
589
+
590
+ .sort-btn {
591
+ margin-left: 4px;
592
+ }
593
+
594
+ .sort-item {
595
+ width: 0;
596
+ height: 0;
597
+ border: 5px solid transparent;
598
+ }
599
+
600
+ .sort-asc {
601
+ border-bottom-color: var(--o-color-info2);
602
+ margin-bottom: 2px;
603
+
604
+ &.active {
605
+ border-bottom-color: var(--o-color-primary1);
606
+ }
607
+ }
608
+
609
+ .sort-desc {
610
+ border-top-color: var(--o-color-info2);
611
+ margin-top: 2px;
612
+
613
+ &.active {
614
+ border-top-color: var(--o-color-primary1);
615
+ }
616
+ }
617
+
618
+ .el-table {
619
+ --el-table-header-bg-color: rgba(235, 241, 250, 1);
620
+ color: var(--o-color-info1);
621
+ @include text1;
622
+
623
+ .el-table__header-wrapper {
624
+ border-radius: 12px 12px 0 0;
625
+
626
+ .el-table__cell {
627
+ padding: 12px 0 11px;
628
+ }
629
+
630
+ .cell {
631
+ color: var(--o-color-info2);
632
+ font-weight: 600;
633
+ @include text1;
634
+ }
635
+ }
636
+
637
+ .el-table__expanded-cell {
638
+ padding: 0;
639
+ }
640
+
641
+ .cell {
642
+ white-space: nowrap;
643
+ }
644
+ }
645
+
646
+ .pagination {
647
+ margin-top: 32px;
648
+ display: flex;
649
+ align-items: center;
650
+ justify-content: flex-end;
651
+ }
652
+
653
+ .review-dialog {
654
+ .review-content {
655
+ width: 100%;
656
+ }
657
+ }
658
+
659
+ .o-textarea {
660
+ --_box-radius: 16px;
661
+ }
662
+
663
+ .dialog-footer {
664
+ display: flex;
665
+ justify-content: center;
666
+ align-items: center;
667
+
668
+ .o-btn + .o-btn {
669
+ margin-left: 16px;
670
+ }
671
+
672
+ @include respond-to('<=pad_v') {
673
+ .o-btn {
674
+ width: 140px;
675
+ color: var(--o-color-info1);
676
+ padding: 6px 24px !important;
677
+ }
678
+ .o-btn + .o-btn {
679
+ margin-left: 0;
680
+ }
681
+ }
682
+ }
683
+
684
+ .collapse-wrapper {
685
+ .o-tag {
686
+ height: 24px;
687
+ }
688
+
689
+ .o-collapse {
690
+ padding: 0;
691
+ border-radius: 12px;
692
+
693
+ .o-collapse-item {
694
+ --collapse-item-header-padding: 8px 0 12px;
695
+
696
+ &:last-child {
697
+ padding-bottom: 16px;
698
+ }
699
+ }
700
+
701
+ .act-sponsor {
702
+ display: flex;
703
+ align-items: center;
704
+ color: var(--o-color-info3);
705
+ margin-right: 16px;
706
+ @include text1;
707
+ }
708
+
709
+ .sponsor {
710
+ margin-right: 12px;
711
+ @include text-truncate(1);
712
+ }
713
+
714
+ .o-collapse-item-icon {
715
+ transform: rotate(0deg);
716
+ width: 24px;
717
+ height: 24px;
718
+ }
719
+
720
+ .o-collapse-item-expanded .o-collapse-item-icon {
721
+ transform: rotate(90deg);
722
+ }
723
+
724
+ .o-collapse-item-header {
725
+ border-bottom: 1px solid var(--o-color-control4);
726
+ margin: 0 16px;
727
+ }
728
+ }
729
+
730
+ .activity-detail {
731
+ padding: 12px 16px;
732
+ background-color: rgba(243, 246, 250, 1);
733
+ }
734
+
735
+ .pagination {
736
+ justify-content: center;
737
+ margin-top: 24px;
738
+ }
739
+ }
740
+
741
+ .title-top {
742
+ display: flex;
743
+ align-items: center;
744
+ justify-content: space-between;
745
+ padding: 12px 16px 0;
746
+
747
+ .act-title {
748
+ color: var(--o-color-info1);
749
+ margin-right: 12px;
750
+ font-weight: 600;
751
+ @include text1;
752
+ @include text-truncate(1);
753
+ }
754
+ }
755
+ </style>
756
+
757
+ <style lang="scss">
758
+ .review-dialog {
759
+ width: 690px;
760
+ --dlg-radius: 16px;
761
+ @include respond-to('<=pad_v') {
762
+ width: 100%;
763
+ --dlg-radius: 16px 16px 0 0;
764
+ }
765
+ }
766
+
767
+ .handle-dialog-approval {
768
+ width: 450px;
769
+ --dlg-radius: 16px;
770
+ @include respond-to('<=pad_v') {
771
+ width: 100%;
772
+ --dlg-radius: 16px 16px 0 0;
773
+ }
774
+ }
775
+ </style>