@opendesign-plus-test/components 0.0.1-rc.23 → 0.0.1-rc.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/activity/types.d.ts +6 -0
- package/dist/components.cjs.js +39 -39
- package/dist/components.css +1 -1
- package/dist/components.es.js +9176 -9116
- package/package.json +3 -3
- package/src/components/activity/OActivityApproval.vue +96 -38
- package/src/components/activity/OActivityForm.vue +101 -15
- package/src/components/activity/OMyActivityCalendar.vue +49 -26
- package/src/components/activity/config.ts +2 -2
- package/src/components/activity/types.ts +6 -0
- package/src/components/common/MoreText.vue +4 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opendesign-plus-test/components",
|
|
3
|
-
"version": "0.0.1-rc.
|
|
3
|
+
"version": "0.0.1-rc.25",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"dayjs": "^1.11.13",
|
|
33
33
|
"video.js": "^8.23.7",
|
|
34
34
|
"vue-dompurify-html": "^3.1.2",
|
|
35
|
-
"@opendesign-plus/
|
|
36
|
-
"@opendesign-plus/
|
|
35
|
+
"@opendesign-plus/composables": "0.0.1-rc.6",
|
|
36
|
+
"@opendesign-plus/styles": "0.0.1-rc.2"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@vitejs/plugin-vue": "^5.1.0",
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { ElTable, ElTableColumn, dayjs } from 'element-plus';
|
|
3
3
|
import {
|
|
4
|
+
DialogActionT,
|
|
4
5
|
OButton,
|
|
5
|
-
OCollapse,
|
|
6
|
+
OCollapse, OCollapseItem,
|
|
6
7
|
ODialog,
|
|
7
8
|
ODivider,
|
|
8
9
|
OForm,
|
|
@@ -13,10 +14,11 @@ import {
|
|
|
13
14
|
useMessage,
|
|
14
15
|
} from '@opensig/opendesign';
|
|
15
16
|
import { useScreen } from '@opendesign-plus/composables';
|
|
16
|
-
import { onMounted, watch, ref, reactive } from 'vue';
|
|
17
|
+
import { onMounted, watch, ref, reactive, computed } from 'vue';
|
|
17
18
|
import { ActivityItemT, ActivityTablePropsT, ReviewParamsT, TypeOptionT } from './types';
|
|
18
19
|
import { approvalStatusMap, statusMap } from './config';
|
|
19
20
|
import ThFilter from '../common/ThFilter.vue';
|
|
21
|
+
import OMeetingDetail from '@/components/meeting/components/OMeetingDetail.vue';
|
|
20
22
|
|
|
21
23
|
|
|
22
24
|
const message = useMessage(null);
|
|
@@ -280,6 +282,51 @@ watch(
|
|
|
280
282
|
},
|
|
281
283
|
{ deep: true },
|
|
282
284
|
);
|
|
285
|
+
|
|
286
|
+
const cancelActions = computed<DialogActionT[]>(() => {
|
|
287
|
+
return [{
|
|
288
|
+
id: 'confirm',
|
|
289
|
+
loading: loading.value,
|
|
290
|
+
color: 'primary',
|
|
291
|
+
variant: lePadV.value ? 'text' : 'outline',
|
|
292
|
+
round: 'pill',
|
|
293
|
+
label: '确定',
|
|
294
|
+
onClick: () => {
|
|
295
|
+
confirmCancel();
|
|
296
|
+
},
|
|
297
|
+
}, {
|
|
298
|
+
id: 'cancel',
|
|
299
|
+
color: 'primary',
|
|
300
|
+
variant: lePadV.value ? 'text' : 'solid',
|
|
301
|
+
round: 'pill',
|
|
302
|
+
label: '取消',
|
|
303
|
+
onClick: () => {
|
|
304
|
+
cancel();
|
|
305
|
+
},
|
|
306
|
+
}];
|
|
307
|
+
});
|
|
308
|
+
const reviewActions = computed<DialogActionT[]>(() => {
|
|
309
|
+
return [{
|
|
310
|
+
id: 'confirm',
|
|
311
|
+
loading: loading.value,
|
|
312
|
+
color: 'primary',
|
|
313
|
+
variant: lePadV.value ? 'text' : 'solid',
|
|
314
|
+
round: 'pill',
|
|
315
|
+
label: '确定',
|
|
316
|
+
onClick: () => {
|
|
317
|
+
confirm();
|
|
318
|
+
},
|
|
319
|
+
}, {
|
|
320
|
+
id: 'cancel',
|
|
321
|
+
color: 'primary',
|
|
322
|
+
variant: lePadV.value ? 'text' : 'outline',
|
|
323
|
+
round: 'pill',
|
|
324
|
+
label: '取消',
|
|
325
|
+
onClick: () => {
|
|
326
|
+
cancel();
|
|
327
|
+
},
|
|
328
|
+
}];
|
|
329
|
+
});
|
|
283
330
|
</script>
|
|
284
331
|
|
|
285
332
|
<template>
|
|
@@ -289,7 +336,7 @@ watch(
|
|
|
289
336
|
<ElTableColumn type="expand">
|
|
290
337
|
<template #default="props">
|
|
291
338
|
<div class="expand-detail">
|
|
292
|
-
<
|
|
339
|
+
<OMeetingDetail :data="props.row" page="approval" show />
|
|
293
340
|
</div>
|
|
294
341
|
</template>
|
|
295
342
|
</ElTableColumn>
|
|
@@ -344,7 +391,7 @@ watch(
|
|
|
344
391
|
statusMap.get(scope.row.status)?.text
|
|
345
392
|
}}
|
|
346
393
|
</OTag>
|
|
347
|
-
<OTag v-else color="primary" variant="outline" class="tag-
|
|
394
|
+
<OTag v-else color="primary" variant="outline" class="tag-cancel">已取消</OTag>
|
|
348
395
|
</template>
|
|
349
396
|
</ElTableColumn>
|
|
350
397
|
<ElTableColumn label="操作">
|
|
@@ -396,7 +443,7 @@ watch(
|
|
|
396
443
|
statusMap.get(act.status)?.text
|
|
397
444
|
}}
|
|
398
445
|
</OTag>
|
|
399
|
-
<OTag v-else color="primary" variant="outline" class="tag-
|
|
446
|
+
<OTag v-else color="primary" variant="outline" class="tag-cancel">已取消</OTag>
|
|
400
447
|
</div>
|
|
401
448
|
<OCollapseItem :value="act.id">
|
|
402
449
|
<template #title>
|
|
@@ -405,27 +452,47 @@ watch(
|
|
|
405
452
|
<p>{{ dayjs(act.create_time).format('YYYY/MM/DD HH:mm:ss') }}</p>
|
|
406
453
|
</div>
|
|
407
454
|
<div class="activity-btn">
|
|
408
|
-
<OLink
|
|
409
|
-
|
|
455
|
+
<OLink
|
|
456
|
+
v-if="act.status === 7 || act.is_delete"
|
|
457
|
+
color="danger"
|
|
458
|
+
variant="text"
|
|
459
|
+
@click.stop="deleteItem(act)"
|
|
460
|
+
>
|
|
410
461
|
删除
|
|
411
462
|
</OLink>
|
|
412
|
-
<OLink
|
|
413
|
-
|
|
463
|
+
<OLink
|
|
464
|
+
v-if="(act.status === 3 || act.status === 4) && act.is_delete !== 1"
|
|
465
|
+
color="danger"
|
|
466
|
+
variant="text"
|
|
467
|
+
@click.stop="cancelItem(act)"
|
|
414
468
|
>
|
|
415
469
|
取消活动
|
|
416
|
-
</OLink
|
|
470
|
+
</OLink>
|
|
471
|
+
<OLink
|
|
472
|
+
v-if="act.status === 2"
|
|
473
|
+
color="primary"
|
|
474
|
+
variant="text"
|
|
475
|
+
@click.stop="passItem(act)"
|
|
417
476
|
>
|
|
418
|
-
<OLink v-if="act.status === 2" color="primary" variant="text" @click.stop="passItem(act)">
|
|
419
477
|
通过
|
|
420
478
|
</OLink>
|
|
421
|
-
<OLink
|
|
479
|
+
<OLink
|
|
480
|
+
v-if="act.status === 2"
|
|
481
|
+
color="primary"
|
|
482
|
+
variant="text"
|
|
483
|
+
@click.stop="rejectItem(act)"
|
|
484
|
+
>
|
|
422
485
|
驳回
|
|
423
486
|
</OLink>
|
|
424
487
|
</div>
|
|
425
488
|
</template>
|
|
426
489
|
<div class="activity-detail">
|
|
427
|
-
<
|
|
428
|
-
|
|
490
|
+
<OMeetingDetail
|
|
491
|
+
:show="expanded.includes(act.id)"
|
|
492
|
+
:data="act"
|
|
493
|
+
:ref="(insRef) => getDetailRefs(insRef, act.id)"
|
|
494
|
+
page="approval"
|
|
495
|
+
/>
|
|
429
496
|
</div>
|
|
430
497
|
</OCollapseItem>
|
|
431
498
|
</template>
|
|
@@ -444,8 +511,12 @@ watch(
|
|
|
444
511
|
/>
|
|
445
512
|
</div>
|
|
446
513
|
</div>
|
|
447
|
-
<ODialog
|
|
448
|
-
|
|
514
|
+
<ODialog
|
|
515
|
+
v-model:visible="reviewVisible"
|
|
516
|
+
:phone-half-full="lePadV"
|
|
517
|
+
main-class="handle-dialog-approval review-dialog"
|
|
518
|
+
:actions="reviewActions"
|
|
519
|
+
>
|
|
449
520
|
<template #header>{{ digTitle }}</template>
|
|
450
521
|
<div class="dialog-content">
|
|
451
522
|
<OForm :model="form" ref="formRef" has-required layout="v" class="form-wrapper">
|
|
@@ -463,31 +534,18 @@ watch(
|
|
|
463
534
|
</OFormItem>
|
|
464
535
|
</OForm>
|
|
465
536
|
</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
537
|
</ODialog>
|
|
476
538
|
<!-- 取消活动弹窗 -->
|
|
477
|
-
<ODialog
|
|
539
|
+
<ODialog
|
|
540
|
+
v-model:visible="cancelVisible"
|
|
541
|
+
:phone-half-full="lePadV"
|
|
542
|
+
main-class="handle-dialog-approval"
|
|
543
|
+
:actions="cancelActions"
|
|
544
|
+
>
|
|
478
545
|
<template #header>{{ cancelTitle }}</template>
|
|
479
|
-
<div class="dialog-content"
|
|
480
|
-
}}
|
|
546
|
+
<div class="dialog-content">
|
|
547
|
+
是否确认{{ cancelText }}“{{ currentRow?.title }}”活动?{{ cancelText }}后将不在会议首页呈现,且已报名的数据也会被清空,请谨慎操作。
|
|
481
548
|
</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
549
|
</ODialog>
|
|
492
550
|
</div>
|
|
493
551
|
</template>
|
|
@@ -564,7 +622,7 @@ watch(
|
|
|
564
622
|
}
|
|
565
623
|
|
|
566
624
|
.tag-draft,
|
|
567
|
-
.tag-
|
|
625
|
+
.tag-cancel {
|
|
568
626
|
--tag-color: var(--o-color-info3);
|
|
569
627
|
--tag-bg-color: rgba(222, 222, 227, 1);
|
|
570
628
|
}
|
|
@@ -1,16 +1,30 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
OButton,
|
|
5
|
+
OForm,
|
|
6
|
+
OFormItem,
|
|
7
|
+
OInput,
|
|
8
|
+
OOption,
|
|
9
|
+
OSelect,
|
|
10
|
+
OTextarea,
|
|
11
|
+
RulesT, SelectValueT,
|
|
12
|
+
useMessage,
|
|
13
|
+
} from '@opensig/opendesign';
|
|
4
14
|
import { computed, ref, watch } from 'vue';
|
|
5
15
|
import { ActivityFormPropsT, ParamsItemT } from './types';
|
|
6
16
|
import { useScreen } from '@opendesign-plus/composables';
|
|
7
17
|
import { dayjs, ElDatePicker } from 'element-plus';
|
|
8
18
|
import { acticityTypeMap, WEBSITE_REGEXP } from './config';
|
|
19
|
+
import { EMAIL_REGEX } from '@/components/meeting/config.ts';
|
|
20
|
+
import { useI18n } from '@/i18n';
|
|
9
21
|
|
|
10
22
|
const emits = defineEmits(['confirm', 'close']);
|
|
11
23
|
|
|
12
24
|
const message = useMessage(null);
|
|
13
25
|
const { lePadV } = useScreen();
|
|
26
|
+
const { t } = useI18n();
|
|
27
|
+
const $t = t;
|
|
14
28
|
|
|
15
29
|
interface TypeOptionT {
|
|
16
30
|
label: string;
|
|
@@ -21,6 +35,7 @@ const props = withDefaults(defineProps<ActivityFormPropsT>(), {});
|
|
|
21
35
|
const isEdit = computed(() => !!props.data);
|
|
22
36
|
const form = ref<ParamsItemT>({
|
|
23
37
|
title: '',
|
|
38
|
+
organizer: '',
|
|
24
39
|
start_date: '',
|
|
25
40
|
end_date: '',
|
|
26
41
|
register_end_date: '',
|
|
@@ -32,6 +47,7 @@ const form = ref<ParamsItemT>({
|
|
|
32
47
|
start: '',
|
|
33
48
|
end: '',
|
|
34
49
|
is_publish: 'true',
|
|
50
|
+
email_list: '',
|
|
35
51
|
approver: '',
|
|
36
52
|
});
|
|
37
53
|
|
|
@@ -55,10 +71,11 @@ const rules = ref<Record<string, RulesT[]>>({
|
|
|
55
71
|
},
|
|
56
72
|
],
|
|
57
73
|
activity_type: [{ required: true, message: '请选择活动类型' }],
|
|
74
|
+
organizer: [{ required: true, message: '请选择活动类型' }],
|
|
58
75
|
start_date: [
|
|
59
76
|
{ required: true, message: '请选择活动时间' },
|
|
60
77
|
{
|
|
61
|
-
validator: (
|
|
78
|
+
validator: () => {
|
|
62
79
|
const { start_date, end_date } = form.value;
|
|
63
80
|
const startDate = start_date.split(' ');
|
|
64
81
|
const endDate = end_date.split(' ');
|
|
@@ -109,7 +126,7 @@ const rules = ref<Record<string, RulesT[]>>({
|
|
|
109
126
|
},
|
|
110
127
|
],
|
|
111
128
|
address: [
|
|
112
|
-
{ required: true, message: '
|
|
129
|
+
{ required: true, message: '请输入活动地点' },
|
|
113
130
|
{
|
|
114
131
|
validator: (value: string) => {
|
|
115
132
|
if (value.length > 255) {
|
|
@@ -122,7 +139,7 @@ const rules = ref<Record<string, RulesT[]>>({
|
|
|
122
139
|
},
|
|
123
140
|
],
|
|
124
141
|
register_url: [
|
|
125
|
-
{ required: true, message: '
|
|
142
|
+
{ required: true, message: '请输入活动报名网址' },
|
|
126
143
|
{
|
|
127
144
|
validator: (value: string) => {
|
|
128
145
|
const str = value.replaceAll(' ', '') || '';
|
|
@@ -140,7 +157,7 @@ const rules = ref<Record<string, RulesT[]>>({
|
|
|
140
157
|
},
|
|
141
158
|
],
|
|
142
159
|
content_url: [
|
|
143
|
-
{ required: true, message: '
|
|
160
|
+
{ required: true, message: '请输入活动详情介绍网址' },
|
|
144
161
|
{
|
|
145
162
|
validator: (value: string) => {
|
|
146
163
|
const str = value.replaceAll(' ', '') || '';
|
|
@@ -157,26 +174,69 @@ const rules = ref<Record<string, RulesT[]>>({
|
|
|
157
174
|
triggers: ['blur', 'change'],
|
|
158
175
|
},
|
|
159
176
|
],
|
|
177
|
+
synopsis: [{
|
|
178
|
+
validator: (value: string) => {
|
|
179
|
+
if (value.length > 1000) {
|
|
180
|
+
return {
|
|
181
|
+
type: 'danger',
|
|
182
|
+
message: '活动内容不能超过1000个字符',
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
}],
|
|
187
|
+
email_list: [{
|
|
188
|
+
validator: (value: string) => {
|
|
189
|
+
const str = value.replaceAll(' ', '') || '';
|
|
190
|
+
if (str.length) {
|
|
191
|
+
if (str.length > 1020) {
|
|
192
|
+
return {
|
|
193
|
+
type: 'danger',
|
|
194
|
+
message: t('meeting.emailTooLong'),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
const list = str.split(';') || [];
|
|
198
|
+
if (list.some((v) => !EMAIL_REGEX.test(v))) {
|
|
199
|
+
return {
|
|
200
|
+
type: 'danger',
|
|
201
|
+
message: t('meeting.emailInvalid'),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
if (list.some((v) => v.length > 50)) {
|
|
205
|
+
return {
|
|
206
|
+
type: 'danger',
|
|
207
|
+
message: t('meeting.singleEmailTooLong'),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
if (list.length > 20) {
|
|
211
|
+
return {
|
|
212
|
+
type: 'danger',
|
|
213
|
+
message: t('meeting.emailCountTooLong'),
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
triggers: ['blur', 'change'],
|
|
219
|
+
}],
|
|
160
220
|
approver: [{ required: true, message: '请选择活动审批人' }],
|
|
161
221
|
});
|
|
162
222
|
|
|
163
223
|
|
|
164
224
|
// -------------------- 活动管理员 ---------------------
|
|
165
225
|
const approverList = computed(() => {
|
|
166
|
-
return props.
|
|
226
|
+
return props.admins || [];
|
|
167
227
|
});
|
|
168
228
|
|
|
169
|
-
const typeValue = ref('');
|
|
229
|
+
const typeValue = ref<string>('');
|
|
170
230
|
const typeOptions = ref<TypeOptionT[]>([]); // 活动类型
|
|
171
231
|
acticityTypeMap.forEach((item) => {
|
|
172
232
|
typeOptions.value.push(item);
|
|
173
233
|
});
|
|
174
|
-
const changeType = (val:
|
|
234
|
+
const changeType = (val: SelectValueT) => {
|
|
175
235
|
const item = typeOptions.value.find((v) => v.label === val);
|
|
176
236
|
form.value.activity_type = item?.value as number;
|
|
177
237
|
};
|
|
178
238
|
|
|
179
|
-
const disabledDate = (date) => {
|
|
239
|
+
const disabledDate = (date: Date) => {
|
|
180
240
|
return date.getTime() < Date.now() - 24 * 60 * 60 * 1000;
|
|
181
241
|
};
|
|
182
242
|
|
|
@@ -198,6 +258,9 @@ watch(
|
|
|
198
258
|
is_publish,
|
|
199
259
|
approver,
|
|
200
260
|
update_activity_id,
|
|
261
|
+
synopsis,
|
|
262
|
+
email_list,
|
|
263
|
+
organizer,
|
|
201
264
|
} = val;
|
|
202
265
|
let params = {
|
|
203
266
|
title,
|
|
@@ -213,6 +276,9 @@ watch(
|
|
|
213
276
|
is_publish,
|
|
214
277
|
approver,
|
|
215
278
|
update_activity_id,
|
|
279
|
+
synopsis,
|
|
280
|
+
email_list,
|
|
281
|
+
organizer,
|
|
216
282
|
} as ParamsItemT;
|
|
217
283
|
form.value = { ...params };
|
|
218
284
|
typeValue.value = acticityTypeMap.get(val.activity_type)?.label;
|
|
@@ -254,6 +320,8 @@ const confirm = async (val: boolean) => {
|
|
|
254
320
|
message.danger({
|
|
255
321
|
content: msg,
|
|
256
322
|
});
|
|
323
|
+
} finally {
|
|
324
|
+
loading.value = false;
|
|
257
325
|
}
|
|
258
326
|
};
|
|
259
327
|
const close = () => {
|
|
@@ -280,8 +348,10 @@ defineExpose({
|
|
|
280
348
|
<OFormItem :rules="rules.title" label="活动名称" field="title">
|
|
281
349
|
<OInput size="large" placeholder="请输入活动名称" v-model="form.title" />
|
|
282
350
|
</OFormItem>
|
|
283
|
-
<OFormItem :rules="rules.
|
|
284
|
-
<
|
|
351
|
+
<OFormItem :rules="rules.organizer" label="活动主办方" field="organizer">
|
|
352
|
+
<OSelect placeholder="请选择活动主办方" size="large" v-model="form.organizer">
|
|
353
|
+
<OOption v-for="t in organizers" :key="t.name" :value="t.name">{{ t.name }}</OOption>
|
|
354
|
+
</OSelect>
|
|
285
355
|
</OFormItem>
|
|
286
356
|
<OFormItem :rules="rules.activity_type" label="活动类型" field="activity_type">
|
|
287
357
|
<OSelect placeholder="请选择活动类型" size="large" v-model="typeValue" @change="changeType">
|
|
@@ -291,10 +361,10 @@ defineExpose({
|
|
|
291
361
|
<OFormItem
|
|
292
362
|
v-if="form.activity_type === 1 || form.activity_type === 3"
|
|
293
363
|
:rules="rules.address"
|
|
294
|
-
label="
|
|
364
|
+
label="活动地点"
|
|
295
365
|
field="address"
|
|
296
366
|
>
|
|
297
|
-
<OInput size="large" placeholder="
|
|
367
|
+
<OInput size="large" placeholder="请输入活动地点" v-model="form.address" />
|
|
298
368
|
</OFormItem>
|
|
299
369
|
<OFormItem :rules="rules.start_date" label="活动时间" field="start_date" required>
|
|
300
370
|
<div class="time-config">
|
|
@@ -339,10 +409,21 @@ defineExpose({
|
|
|
339
409
|
/>
|
|
340
410
|
</OFormItem>
|
|
341
411
|
<OFormItem :rules="rules.register_url" label="报名网址" field="register_url">
|
|
342
|
-
<OInput size="large" placeholder="
|
|
412
|
+
<OInput size="large" placeholder="请输入活动报名网址" v-model="form.register_url" />
|
|
343
413
|
</OFormItem>
|
|
344
414
|
<OFormItem :rules="rules.content_url" label="活动详情网址" field="content_url">
|
|
345
|
-
<OInput size="large" placeholder="
|
|
415
|
+
<OInput size="large" placeholder="请输入活动详情介绍网址" v-model="form.content_url" />
|
|
416
|
+
</OFormItem>
|
|
417
|
+
<OFormItem :rules="rules.synopsis" label="活动内容" field="synopsis">
|
|
418
|
+
<OTextarea size="large" placeholder="请输入活动内容" v-model="form.synopsis" />
|
|
419
|
+
</OFormItem>
|
|
420
|
+
<OFormItem field="email_list" :rules="rules.email_list" label="邮件地址">
|
|
421
|
+
<OTextarea
|
|
422
|
+
:disabled="isEdit"
|
|
423
|
+
size="large"
|
|
424
|
+
:placeholder="$t('meeting.enterEmail')"
|
|
425
|
+
:rows="4"
|
|
426
|
+
v-model="form.email_list" />
|
|
346
427
|
</OFormItem>
|
|
347
428
|
<OFormItem :rules="rules.approver" label="活动审批人" field="approver">
|
|
348
429
|
<OSelect placeholder="请选择活动审批人" size="large" v-model="form.approver">
|
|
@@ -407,6 +488,11 @@ defineExpose({
|
|
|
407
488
|
width: 100%;
|
|
408
489
|
}
|
|
409
490
|
|
|
491
|
+
.o-textarea {
|
|
492
|
+
--_box-radius: var(--o-radius-xs);
|
|
493
|
+
width: 100%;
|
|
494
|
+
}
|
|
495
|
+
|
|
410
496
|
.el-input {
|
|
411
497
|
width: 100%;
|
|
412
498
|
}
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
OIconArrowRight,
|
|
15
15
|
OIconChevronLeft,
|
|
16
16
|
OIconChevronRight,
|
|
17
|
+
DialogActionT,
|
|
17
18
|
} from '@opensig/opendesign';
|
|
18
19
|
import { ElCalendar } from 'element-plus';
|
|
19
20
|
import dayjs from 'dayjs';
|
|
@@ -450,6 +451,52 @@ onUnmounted(() => {
|
|
|
450
451
|
const scrollerContainerEl = scrollerRef.value?.getContainerEl();
|
|
451
452
|
scrollerContainerEl?.removeEventListener('scroll', scrollerScroll);
|
|
452
453
|
});
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
const revokeActions = computed<DialogActionT[]>(() => {
|
|
457
|
+
return [{
|
|
458
|
+
id: 'confirm',
|
|
459
|
+
loading: dialogLoading.value,
|
|
460
|
+
color: 'primary',
|
|
461
|
+
variant: 'outline',
|
|
462
|
+
round: 'pill',
|
|
463
|
+
label: '确定',
|
|
464
|
+
onClick: () => {
|
|
465
|
+
confirm();
|
|
466
|
+
},
|
|
467
|
+
}, {
|
|
468
|
+
id: 'cancel',
|
|
469
|
+
color: 'primary',
|
|
470
|
+
variant: 'solid',
|
|
471
|
+
round: 'pill',
|
|
472
|
+
label: '取消',
|
|
473
|
+
onClick: () => {
|
|
474
|
+
cancel();
|
|
475
|
+
},
|
|
476
|
+
}];
|
|
477
|
+
});
|
|
478
|
+
const deleteActions = computed<DialogActionT[]>(() => {
|
|
479
|
+
return [{
|
|
480
|
+
id: 'confirm',
|
|
481
|
+
loading: dialogLoading.value,
|
|
482
|
+
color: 'primary',
|
|
483
|
+
variant: 'outline',
|
|
484
|
+
round: 'pill',
|
|
485
|
+
label: '确定',
|
|
486
|
+
onClick: () => {
|
|
487
|
+
confirmDelete();
|
|
488
|
+
},
|
|
489
|
+
}, {
|
|
490
|
+
id: 'cancel',
|
|
491
|
+
color: 'primary',
|
|
492
|
+
variant: 'solid',
|
|
493
|
+
round: 'pill',
|
|
494
|
+
label: '取消',
|
|
495
|
+
onClick: () => {
|
|
496
|
+
cancelDelete();
|
|
497
|
+
},
|
|
498
|
+
}];
|
|
499
|
+
});
|
|
453
500
|
</script>
|
|
454
501
|
|
|
455
502
|
<template>
|
|
@@ -633,30 +680,14 @@ onUnmounted(() => {
|
|
|
633
680
|
</div>
|
|
634
681
|
</div>
|
|
635
682
|
<!-- 撤销审核弹窗 -->
|
|
636
|
-
<ODialog v-model:visible="revokeVisible" main-class="handle-dialog-active">
|
|
683
|
+
<ODialog v-model:visible="revokeVisible" main-class="handle-dialog-active" :actions="revokeActions">
|
|
637
684
|
<template #header>撤销审核</template>
|
|
638
685
|
<div class="dialog-content">是否确认要撤销“{{ currentRow.title }}”活动?撤销审核后活动将变成草稿状态。</div>
|
|
639
|
-
<template #footer>
|
|
640
|
-
<div class="dialog-footer">
|
|
641
|
-
<OButton color="primary" variant="outline" size="large" round="pill" @click="confirm" :loading="dialogLoading">
|
|
642
|
-
确定
|
|
643
|
-
</OButton>
|
|
644
|
-
<OButton color="primary" variant="solid" size="large" round="pill" @click="cancel">取消</OButton>
|
|
645
|
-
</div>
|
|
646
|
-
</template>
|
|
647
686
|
</ODialog>
|
|
648
687
|
<!-- 删除活动弹窗 -->
|
|
649
|
-
<ODialog v-model:visible="deleteVisible" main-class="handle-dialog-active">
|
|
688
|
+
<ODialog v-model:visible="deleteVisible" main-class="handle-dialog-active" :actions="deleteActions">
|
|
650
689
|
<template #header>删除活动</template>
|
|
651
690
|
<div class="dialog-content">是否确认删除“{{ currentRow.title }}”活动?删除后记录将不再我的个人中心呈现。</div>
|
|
652
|
-
<template #footer>
|
|
653
|
-
<div class="dialog-footer">
|
|
654
|
-
<OButton color="primary" variant="outline" size="large" round="pill" @click="confirmDelete"
|
|
655
|
-
:loading="dialogLoading">确定
|
|
656
|
-
</OButton>
|
|
657
|
-
<OButton color="primary" variant="solid" size="large" round="pill" @click="cancelDelete">取消</OButton>
|
|
658
|
-
</div>
|
|
659
|
-
</template>
|
|
660
691
|
</ODialog>
|
|
661
692
|
</template>
|
|
662
693
|
|
|
@@ -1321,7 +1352,6 @@ onUnmounted(() => {
|
|
|
1321
1352
|
<style lang="scss">
|
|
1322
1353
|
.handle-dialog-active {
|
|
1323
1354
|
width: 450px;
|
|
1324
|
-
--dlg-radius: 16px;
|
|
1325
1355
|
|
|
1326
1356
|
.o-dlg-header {
|
|
1327
1357
|
margin-bottom: var(--o-gap-5);
|
|
@@ -1331,12 +1361,5 @@ onUnmounted(() => {
|
|
|
1331
1361
|
display: flex;
|
|
1332
1362
|
justify-content: center;
|
|
1333
1363
|
}
|
|
1334
|
-
|
|
1335
|
-
.dialog-footer {
|
|
1336
|
-
display: flex;
|
|
1337
|
-
justify-content: center;
|
|
1338
|
-
margin-top: var(--o-gap-4);
|
|
1339
|
-
column-gap: var(--o-gap-4);
|
|
1340
|
-
}
|
|
1341
1364
|
}
|
|
1342
1365
|
</style>
|
|
@@ -15,6 +15,8 @@ export interface ParamsItemT {
|
|
|
15
15
|
schedules?: string;
|
|
16
16
|
is_publish: string; // 是否发布 true-发布审核 false-发布为草稿
|
|
17
17
|
update_activity_id?: string;
|
|
18
|
+
email_list?: string; // 邮件列表
|
|
19
|
+
organizer?: string; // 主办方
|
|
18
20
|
approver: string; // 审批人
|
|
19
21
|
}
|
|
20
22
|
|
|
@@ -23,6 +25,10 @@ export interface ActivityFormPropsT {
|
|
|
23
25
|
creatActivity: any;
|
|
24
26
|
editActivity: any;
|
|
25
27
|
admins: string[];
|
|
28
|
+
organizers: {
|
|
29
|
+
id: number;
|
|
30
|
+
name: string;
|
|
31
|
+
}[];
|
|
26
32
|
status?: string | null;
|
|
27
33
|
}
|
|
28
34
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { OIcon, OIconChevronDown, OIconChevronUp } from '@opensig/opendesign';
|
|
3
3
|
import { nextTick, onMounted, ref, watch } from 'vue';
|
|
4
|
+
import { useI18n } from '@/i18n';
|
|
4
5
|
|
|
5
6
|
const props = withDefaults(
|
|
6
7
|
defineProps<{
|
|
@@ -16,6 +17,9 @@ const props = withDefaults(
|
|
|
16
17
|
show: false,
|
|
17
18
|
},
|
|
18
19
|
);
|
|
20
|
+
|
|
21
|
+
const { t } = useI18n();
|
|
22
|
+
|
|
19
23
|
const expanded = ref(false); // 是否展开
|
|
20
24
|
const showBtn = ref(false); // 受否显示展开按钮
|
|
21
25
|
const offsetHeight = ref(0); // 内容高度
|