p-pc-ui 1.3.1 → 1.3.4
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.
|
@@ -14,7 +14,8 @@ interface Base<K extends string = string> {
|
|
|
14
14
|
colon?: boolean,
|
|
15
15
|
labelSpan?: number,
|
|
16
16
|
valueSpan?: number,
|
|
17
|
-
labelAlign?: 'left' | 'right'
|
|
17
|
+
labelAlign?: 'left' | 'right',
|
|
18
|
+
disabled: ?boolean
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
|
|
@@ -75,13 +76,13 @@ interface UploadBase<K extends string = string> extends Base<K> {
|
|
|
75
76
|
|
|
76
77
|
export interface UploadOss<K extends string = string> extends UploadBase<K> {
|
|
77
78
|
type: 'uploadOss',
|
|
78
|
-
getOssToken: ({file_name}) => Promise<any>,
|
|
79
|
+
getOssToken: ({ file_name }) => Promise<any>,
|
|
79
80
|
baseOssUrl: string,
|
|
80
81
|
}
|
|
81
82
|
|
|
82
83
|
export interface UploadTos<K extends string = string> extends UploadBase<K> {
|
|
83
84
|
type: 'uploadTos',
|
|
84
|
-
getTosToken: ({file_name}) => Promise<any>,
|
|
85
|
+
getTosToken: ({ file_name }) => Promise<any>,
|
|
85
86
|
baseTosUrl: string,
|
|
86
87
|
}
|
|
87
88
|
|
|
@@ -105,12 +106,6 @@ export interface Component<K extends string = string> extends Base<K> {
|
|
|
105
106
|
component: any
|
|
106
107
|
}
|
|
107
108
|
|
|
108
|
-
export interface Editor<K extends string = string> extends Base<K> {
|
|
109
|
-
type: 'editor',
|
|
110
|
-
getOssToken: ({ file_name: string }) => Promise<any>,
|
|
111
|
-
baseOssUrl?: string,
|
|
112
|
-
}
|
|
113
|
-
|
|
114
109
|
|
|
115
110
|
export type FormDataItem<K extends string = string> =
|
|
116
111
|
| Input<K>
|
|
@@ -124,4 +119,3 @@ export type FormDataItem<K extends string = string> =
|
|
|
124
119
|
| Textarea<K>
|
|
125
120
|
| DatePicker<K>
|
|
126
121
|
| Component<K>
|
|
127
|
-
| Editor<K>
|
|
@@ -23,8 +23,6 @@ import * as _ from "../../utils/dataUtils";
|
|
|
23
23
|
import { api as viewerApi } from "v-viewer";
|
|
24
24
|
import dayjs from "dayjs";
|
|
25
25
|
import { UploadOutlined, PlusOutlined } from "@ant-design/icons-vue";
|
|
26
|
-
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
|
|
27
|
-
import "@wangeditor/editor/dist/css/style.css"; // 引入 css
|
|
28
26
|
|
|
29
27
|
const uSlots = useSlots();
|
|
30
28
|
|
|
@@ -63,8 +61,6 @@ const emits = defineEmits(["confirm"]);
|
|
|
63
61
|
/**
|
|
64
62
|
* 富文本相关配置
|
|
65
63
|
*/
|
|
66
|
-
const editorRef = shallowRef();
|
|
67
|
-
|
|
68
64
|
onBeforeMount(async () => {
|
|
69
65
|
renderData.value = await disposeRenderData(props.renderData);
|
|
70
66
|
const _formState = initFormState(renderData.value, props.initForm);
|
|
@@ -245,8 +241,6 @@ const initFormState = (renderData: FormDataItem[], initFromData = {}) => {
|
|
|
245
241
|
url: renderItem.baseTosUrl + val,
|
|
246
242
|
};
|
|
247
243
|
});
|
|
248
|
-
} else if (renderItem.type == "editor") {
|
|
249
|
-
initValue = initValue.replace(/\<\<图片替换地址\>\>/g, renderItem.baseOssUrl);
|
|
250
244
|
}
|
|
251
245
|
|
|
252
246
|
_formState[renderItem["key"]] = initValue;
|
|
@@ -257,8 +251,8 @@ const initFormState = (renderData: FormDataItem[], initFromData = {}) => {
|
|
|
257
251
|
|
|
258
252
|
const handlePicPreview = (file: any) => {
|
|
259
253
|
const url = URL.createObjectURL(file.originFileObj);
|
|
260
|
-
|
|
261
|
-
viewerApi({ images: [url ||file.url || file.key || file.thumbUrl] });
|
|
254
|
+
|
|
255
|
+
viewerApi({ images: [url || file.url || file.key || file.thumbUrl] });
|
|
262
256
|
};
|
|
263
257
|
|
|
264
258
|
const replaceUrl = (str, urlToReplace, replacement) => {
|
|
@@ -304,20 +298,6 @@ const getFormData = async (options: { no_check?: Boolean } = {}) => {
|
|
|
304
298
|
returnFormData[key] = formatData;
|
|
305
299
|
}
|
|
306
300
|
|
|
307
|
-
// 处理富文本字段
|
|
308
|
-
else if (renderItem.type == "editor") {
|
|
309
|
-
const richText = formData[key];
|
|
310
|
-
const dom = new DOMParser().parseFromString(richText, "text/html");
|
|
311
|
-
// 将视频居中展示
|
|
312
|
-
const videos = dom.querySelectorAll('[data-w-e-type="video"]') || [];
|
|
313
|
-
//@ts-ignore
|
|
314
|
-
for (const video of videos) {
|
|
315
|
-
//@ts-ignore
|
|
316
|
-
video.style.textAlign = "center";
|
|
317
|
-
}
|
|
318
|
-
returnFormData[key] = replaceUrl(dom.body.innerHTML, renderItem.baseOssUrl, "<<图片替换地址>>");
|
|
319
|
-
}
|
|
320
|
-
|
|
321
301
|
// 转换成上传对象
|
|
322
302
|
else if (key.includes("__")) {
|
|
323
303
|
_.set(returnFormData, key.split("__"), formData[key]);
|
|
@@ -421,15 +401,6 @@ const uploadRequest = async (options, renderItem: FormDataItem) => {
|
|
|
421
401
|
}
|
|
422
402
|
};
|
|
423
403
|
|
|
424
|
-
/**
|
|
425
|
-
* 富文本上传
|
|
426
|
-
*/
|
|
427
|
-
const editorUpload = async (renderItem, file, insertFn) => {
|
|
428
|
-
const config: any = await renderItem.getOssToken({ type: renderItem.ossKey, file_name: file.name });
|
|
429
|
-
const key = await uploadOss(file, config);
|
|
430
|
-
insertFn(renderItem.baseOssUrl + key);
|
|
431
|
-
};
|
|
432
|
-
|
|
433
404
|
/**
|
|
434
405
|
* 发送验证码
|
|
435
406
|
*/
|
|
@@ -455,10 +426,6 @@ const sendNoticeClick = async (renderItem) => {
|
|
|
455
426
|
renderItem.interval = copyInterval;
|
|
456
427
|
};
|
|
457
428
|
|
|
458
|
-
const handleRichEditorCreated = (editor) => {
|
|
459
|
-
editorRef.value = editor;
|
|
460
|
-
};
|
|
461
|
-
|
|
462
429
|
defineExpose({
|
|
463
430
|
getFormData,
|
|
464
431
|
resetForm,
|
|
@@ -494,180 +461,156 @@ defineExpose({
|
|
|
494
461
|
:tooltip="renderItem.tooltip"
|
|
495
462
|
:label-align="renderItem.labelAlign || 'right'"
|
|
496
463
|
>
|
|
497
|
-
<
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
>
|
|
503
|
-
<template v-if="renderItem.prefix" v-slot:prefix>
|
|
504
|
-
<component :is="renderItem.prefix" />
|
|
505
|
-
</template>
|
|
506
|
-
<template v-if="renderItem.suffix" v-slot:suffix>
|
|
507
|
-
<component :is="renderItem.suffix" />
|
|
508
|
-
</template>
|
|
509
|
-
</a-input>
|
|
510
|
-
|
|
511
|
-
<a-input
|
|
512
|
-
v-model:value.number="formState[renderItem.key]"
|
|
513
|
-
v-if="renderItem.type == 'input' && renderItem.fieldType == 'number'"
|
|
514
|
-
type="number"
|
|
515
|
-
:placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
|
|
516
|
-
>
|
|
517
|
-
<template v-if="renderItem.prefix" v-slot:prefix>
|
|
518
|
-
<component :is="renderItem.prefix" />
|
|
519
|
-
</template>
|
|
520
|
-
<template v-if="renderItem.suffix" v-slot:suffix>
|
|
521
|
-
<component :is="renderItem.suffix" />
|
|
522
|
-
</template>
|
|
523
|
-
</a-input>
|
|
524
|
-
|
|
525
|
-
<a-input-password
|
|
526
|
-
v-model:value="formState[renderItem.key]"
|
|
527
|
-
v-if="renderItem.type == 'password'"
|
|
528
|
-
type="password"
|
|
529
|
-
:placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
|
|
530
|
-
>
|
|
531
|
-
<template v-if="renderItem.prefix" v-slot:prefix>
|
|
532
|
-
<component :is="renderItem.prefix" />
|
|
533
|
-
</template>
|
|
534
|
-
</a-input-password>
|
|
535
|
-
|
|
536
|
-
<a-input
|
|
537
|
-
v-model:value="formState[renderItem.key]"
|
|
538
|
-
v-if="renderItem.type == 'code' && [undefined, 'string'].includes(renderItem.fieldType)"
|
|
539
|
-
type="text"
|
|
540
|
-
:placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
|
|
541
|
-
>
|
|
542
|
-
<template v-if="renderItem.prefix" v-slot:prefix>
|
|
543
|
-
<component :is="renderItem.prefix" />
|
|
544
|
-
</template>
|
|
545
|
-
<template v-slot:suffix>
|
|
546
|
-
<span
|
|
547
|
-
v-if="
|
|
548
|
-
(!renderItem.activityFunc || (renderItem.activityFunc && renderItem.activityFunc(formState))) &&
|
|
549
|
-
renderItem.sendStatus != 'sending'
|
|
550
|
-
"
|
|
551
|
-
class="send-notice send-notice-activity"
|
|
552
|
-
@click="sendNoticeClick(renderItem)"
|
|
553
|
-
>
|
|
554
|
-
{{ renderItem.codeName }}
|
|
555
|
-
</span>
|
|
556
|
-
<span v-else class="send-notice">
|
|
557
|
-
{{ renderItem.codeName }}
|
|
558
|
-
</span>
|
|
559
|
-
</template>
|
|
560
|
-
</a-input>
|
|
561
|
-
|
|
562
|
-
<a-textarea
|
|
563
|
-
v-model:value="formState[renderItem.key]"
|
|
564
|
-
v-if="renderItem.type == 'textarea'"
|
|
565
|
-
:placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
|
|
566
|
-
:auto-size="{ minRows: 2, maxRows: 10 }"
|
|
567
|
-
/>
|
|
568
|
-
|
|
569
|
-
<a-select
|
|
570
|
-
style="min-width: 170px; margin-right: 15px"
|
|
571
|
-
v-model:value="formState[renderItem.key]"
|
|
572
|
-
:placeholder="renderItem.placeholder || `请选择`"
|
|
573
|
-
v-if="renderItem.type == 'select'"
|
|
574
|
-
:fieldNames="renderItem.fieldNames || { label: 'label', value: 'value' }"
|
|
575
|
-
:options="renderItem.optionList"
|
|
576
|
-
:mode="renderItem.isMultiple ? 'multiple' : undefined"
|
|
577
|
-
></a-select>
|
|
578
|
-
|
|
579
|
-
<a-radio-group v-if="renderItem.type == 'radio'" v-model:value="formState[renderItem.key]">
|
|
580
|
-
<a-radio v-for="item in renderItem.optionList" :value="item[renderItem.fieldNames?.value || 'value']">
|
|
581
|
-
{{ item[renderItem.fieldNames?.label || "label"] }}
|
|
582
|
-
</a-radio>
|
|
583
|
-
</a-radio-group>
|
|
584
|
-
|
|
585
|
-
<a-date-picker
|
|
586
|
-
v-model:value="formState[renderItem.key]"
|
|
587
|
-
v-if="renderItem.type === 'datePicker'"
|
|
588
|
-
show-time
|
|
589
|
-
:placeholder="`请选择${renderItem.label}`"
|
|
590
|
-
class="ant-input"
|
|
591
|
-
format="YYYY-MM-DD HH:mm:ss"
|
|
592
|
-
value-format="YYYY-MM-DD HH:mm:ss"
|
|
593
|
-
/>
|
|
594
|
-
|
|
595
|
-
<a-tree-select
|
|
596
|
-
style="min-width: 170px; margin-right: 15px"
|
|
597
|
-
v-model:value="formState[renderItem.key]"
|
|
598
|
-
:tree-data="renderItem.optionList"
|
|
599
|
-
v-if="renderItem.type == 'treeSelect'"
|
|
600
|
-
:fieldNames="renderItem.fieldNames || { children: 'children', label: 'name', value: 'id' }"
|
|
601
|
-
:placeholder="renderItem.placeholder || `请选择`"
|
|
602
|
-
></a-tree-select>
|
|
603
|
-
|
|
604
|
-
<a-upload
|
|
605
|
-
v-if="renderItem.type == 'uploadOss' || renderItem.type == 'uploadTos' || renderItem.type == 'upload'"
|
|
606
|
-
:file-list="formState[renderItem.key]"
|
|
607
|
-
:multiple="true"
|
|
608
|
-
:max-count="renderItem?.maxCount || 1"
|
|
609
|
-
@preview="handlePicPreview"
|
|
610
|
-
:customRequest="
|
|
611
|
-
(e) => {
|
|
612
|
-
uploadRequest(e, renderItem);
|
|
613
|
-
}
|
|
614
|
-
"
|
|
615
|
-
@change="
|
|
616
|
-
(e) => {
|
|
617
|
-
uploadChange(e, renderItem);
|
|
618
|
-
}
|
|
619
|
-
"
|
|
620
|
-
:headers="{
|
|
621
|
-
'Cache-Control': 'max-age=15552000',
|
|
464
|
+
<div
|
|
465
|
+
:style="{
|
|
466
|
+
pointerEvents: renderItem.disabled ? 'none' : 'auto',
|
|
467
|
+
opacity: renderItem.disabled ? 0.6 : 1,
|
|
468
|
+
cursor: renderItem.disabled ? 'not-allowed' : 'auto',
|
|
622
469
|
}"
|
|
623
|
-
:list-type="renderItem.uploadType == 'pic' ? 'picture-card' : undefined"
|
|
624
470
|
>
|
|
625
|
-
<
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
<
|
|
632
|
-
<
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
<
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
471
|
+
<a-input
|
|
472
|
+
v-model:value="formState[renderItem.key]"
|
|
473
|
+
v-if="renderItem.type == 'input' && [undefined, 'string'].includes(renderItem.fieldType)"
|
|
474
|
+
type="text"
|
|
475
|
+
:placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
|
|
476
|
+
>
|
|
477
|
+
<template v-if="renderItem.prefix" v-slot:prefix>
|
|
478
|
+
<component :is="renderItem.prefix" />
|
|
479
|
+
</template>
|
|
480
|
+
<template v-if="renderItem.suffix" v-slot:suffix>
|
|
481
|
+
<component :is="renderItem.suffix" />
|
|
482
|
+
</template>
|
|
483
|
+
</a-input>
|
|
484
|
+
|
|
485
|
+
<a-input
|
|
486
|
+
v-model:value.number="formState[renderItem.key]"
|
|
487
|
+
v-if="renderItem.type == 'input' && renderItem.fieldType == 'number'"
|
|
488
|
+
type="number"
|
|
489
|
+
:placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
|
|
490
|
+
>
|
|
491
|
+
<template v-if="renderItem.prefix" v-slot:prefix>
|
|
492
|
+
<component :is="renderItem.prefix" />
|
|
493
|
+
</template>
|
|
494
|
+
<template v-if="renderItem.suffix" v-slot:suffix>
|
|
495
|
+
<component :is="renderItem.suffix" />
|
|
496
|
+
</template>
|
|
497
|
+
</a-input>
|
|
498
|
+
|
|
499
|
+
<a-input-password
|
|
500
|
+
v-model:value="formState[renderItem.key]"
|
|
501
|
+
v-if="renderItem.type == 'password'"
|
|
502
|
+
type="password"
|
|
503
|
+
:placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
|
|
504
|
+
>
|
|
505
|
+
<template v-if="renderItem.prefix" v-slot:prefix>
|
|
506
|
+
<component :is="renderItem.prefix" />
|
|
507
|
+
</template>
|
|
508
|
+
</a-input-password>
|
|
509
|
+
|
|
510
|
+
<a-input
|
|
511
|
+
v-model:value="formState[renderItem.key]"
|
|
512
|
+
v-if="renderItem.type == 'code' && [undefined, 'string'].includes(renderItem.fieldType)"
|
|
513
|
+
type="text"
|
|
514
|
+
:placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
|
|
515
|
+
>
|
|
516
|
+
<template v-if="renderItem.prefix" v-slot:prefix>
|
|
517
|
+
<component :is="renderItem.prefix" />
|
|
518
|
+
</template>
|
|
519
|
+
<template v-slot:suffix>
|
|
520
|
+
<span
|
|
521
|
+
v-if="
|
|
522
|
+
(!renderItem.activityFunc || (renderItem.activityFunc && renderItem.activityFunc(formState))) &&
|
|
523
|
+
renderItem.sendStatus != 'sending'
|
|
524
|
+
"
|
|
525
|
+
class="send-notice send-notice-activity"
|
|
526
|
+
@click="sendNoticeClick(renderItem)"
|
|
527
|
+
>
|
|
528
|
+
{{ renderItem.codeName }}
|
|
529
|
+
</span>
|
|
530
|
+
<span v-else class="send-notice">
|
|
531
|
+
{{ renderItem.codeName }}
|
|
532
|
+
</span>
|
|
533
|
+
</template>
|
|
534
|
+
</a-input>
|
|
535
|
+
|
|
536
|
+
<a-textarea
|
|
537
|
+
v-model:value="formState[renderItem.key]"
|
|
538
|
+
v-if="renderItem.type == 'textarea'"
|
|
539
|
+
:placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
|
|
540
|
+
:auto-size="{ minRows: 2, maxRows: 10 }"
|
|
646
541
|
/>
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
:
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
542
|
+
|
|
543
|
+
<a-select
|
|
544
|
+
style="min-width: 170px; margin-right: 15px"
|
|
545
|
+
v-model:value="formState[renderItem.key]"
|
|
546
|
+
:placeholder="renderItem.placeholder || `请选择`"
|
|
547
|
+
v-if="renderItem.type == 'select'"
|
|
548
|
+
:fieldNames="renderItem.fieldNames || { label: 'label', value: 'value' }"
|
|
549
|
+
:options="renderItem.optionList"
|
|
550
|
+
:mode="renderItem.isMultiple ? 'multiple' : undefined"
|
|
551
|
+
></a-select>
|
|
552
|
+
|
|
553
|
+
<a-radio-group v-if="renderItem.type == 'radio'" v-model:value="formState[renderItem.key]">
|
|
554
|
+
<a-radio v-for="item in renderItem.optionList" :value="item[renderItem.fieldNames?.value || 'value']">
|
|
555
|
+
{{ item[renderItem.fieldNames?.label || "label"] }}
|
|
556
|
+
</a-radio>
|
|
557
|
+
</a-radio-group>
|
|
558
|
+
|
|
559
|
+
<a-date-picker
|
|
560
|
+
v-model:value="formState[renderItem.key]"
|
|
561
|
+
v-if="renderItem.type === 'datePicker'"
|
|
562
|
+
show-time
|
|
563
|
+
:placeholder="`请选择${renderItem.label}`"
|
|
564
|
+
class="ant-input"
|
|
565
|
+
format="YYYY-MM-DD HH:mm:ss"
|
|
566
|
+
value-format="YYYY-MM-DD HH:mm:ss"
|
|
667
567
|
/>
|
|
668
|
-
</div>
|
|
669
568
|
|
|
670
|
-
|
|
569
|
+
<a-tree-select
|
|
570
|
+
style="min-width: 170px; margin-right: 15px"
|
|
571
|
+
v-model:value="formState[renderItem.key]"
|
|
572
|
+
:tree-data="renderItem.optionList"
|
|
573
|
+
v-if="renderItem.type == 'treeSelect'"
|
|
574
|
+
:fieldNames="renderItem.fieldNames || { children: 'children', label: 'name', value: 'id' }"
|
|
575
|
+
:placeholder="renderItem.placeholder || `请选择`"
|
|
576
|
+
></a-tree-select>
|
|
577
|
+
|
|
578
|
+
<a-upload
|
|
579
|
+
v-if="renderItem.type == 'uploadOss' || renderItem.type == 'uploadTos' || renderItem.type == 'upload'"
|
|
580
|
+
:file-list="formState[renderItem.key]"
|
|
581
|
+
:multiple="true"
|
|
582
|
+
:max-count="renderItem?.maxCount || 1"
|
|
583
|
+
@preview="handlePicPreview"
|
|
584
|
+
:customRequest="
|
|
585
|
+
(e) => {
|
|
586
|
+
uploadRequest(e, renderItem);
|
|
587
|
+
}
|
|
588
|
+
"
|
|
589
|
+
@change="
|
|
590
|
+
(e) => {
|
|
591
|
+
uploadChange(e, renderItem);
|
|
592
|
+
}
|
|
593
|
+
"
|
|
594
|
+
:headers="{
|
|
595
|
+
'Cache-Control': 'max-age=15552000',
|
|
596
|
+
}"
|
|
597
|
+
:list-type="renderItem.uploadType == 'pic' ? 'picture-card' : undefined"
|
|
598
|
+
>
|
|
599
|
+
<div v-if="renderItem.uploadType == 'pic'">
|
|
600
|
+
<plus-outlined />
|
|
601
|
+
<div style="margin-top: 8px">{{ renderItem.label }}</div>
|
|
602
|
+
</div>
|
|
603
|
+
|
|
604
|
+
<div v-else>
|
|
605
|
+
<a-button style="display: flex; align-items: center">
|
|
606
|
+
<upload-outlined></upload-outlined>
|
|
607
|
+
上传
|
|
608
|
+
</a-button>
|
|
609
|
+
</div>
|
|
610
|
+
</a-upload>
|
|
611
|
+
|
|
612
|
+
<component v-if="renderItem.type == 'component'" :is="renderItem.component"></component>
|
|
613
|
+
</div>
|
|
671
614
|
</a-form-item>
|
|
672
615
|
</div>
|
|
673
616
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import { ref, reactive, onMounted, computed,
|
|
2
|
+
import { ref, reactive, onMounted, computed, useSlots } from 'vue'
|
|
3
3
|
import PButtonRounded from '../p-button-rounded/p-button-rounded.vue'
|
|
4
4
|
import { Modal as AModal } from 'ant-design-vue'
|
|
5
5
|
const {
|
|
@@ -69,7 +69,7 @@ const confirmClick = async () => {
|
|
|
69
69
|
:closable="closable"
|
|
70
70
|
>
|
|
71
71
|
<template #title v-if="title">
|
|
72
|
-
<div
|
|
72
|
+
<div style="padding: 20px; font-size: 18px; font-weight: bold; line-height: 27px; color: #272727;">
|
|
73
73
|
{{ title }}
|
|
74
74
|
</div>
|
|
75
75
|
</template>
|
|
@@ -81,8 +81,8 @@ const confirmClick = async () => {
|
|
|
81
81
|
<slot name="footer"></slot>
|
|
82
82
|
</div>
|
|
83
83
|
|
|
84
|
-
<div v-else
|
|
85
|
-
<div
|
|
84
|
+
<div v-else style="display: flex; padding: 24px;" v-if="showFooter">
|
|
85
|
+
<div style="display: flex; align-items: center; justify-content: flex-start; gap: 4px;" v-if="footerTip">
|
|
86
86
|
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
87
87
|
<path
|
|
88
88
|
fill-rule="evenodd"
|
|
@@ -91,12 +91,12 @@ const confirmClick = async () => {
|
|
|
91
91
|
fill="#5A5A5A"
|
|
92
92
|
/>
|
|
93
93
|
</svg>
|
|
94
|
-
<div
|
|
94
|
+
<div style="font-size: 12px; color: #5A5A5A;">
|
|
95
95
|
{{ footerTip }}
|
|
96
96
|
</div>
|
|
97
97
|
</div>
|
|
98
98
|
|
|
99
|
-
<div
|
|
99
|
+
<div style="margin-left: auto;">
|
|
100
100
|
<p-button-rounded
|
|
101
101
|
:width="btnWidth"
|
|
102
102
|
:height="btnHeight"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import { ref,
|
|
2
|
+
import { ref, computed } from 'vue'
|
|
3
3
|
import { Modal as AModal, Button as AButton } from 'ant-design-vue'
|
|
4
4
|
|
|
5
5
|
const {
|
|
@@ -34,7 +34,6 @@ const confirmClick = async () => {
|
|
|
34
34
|
loading.value = true
|
|
35
35
|
try {
|
|
36
36
|
confirm && (await confirm())
|
|
37
|
-
// 同时兼容多种回调方式
|
|
38
37
|
emits('confirm')
|
|
39
38
|
} catch (err) {
|
|
40
39
|
} finally {
|
|
@@ -47,48 +46,85 @@ const confirmClick = async () => {
|
|
|
47
46
|
<template>
|
|
48
47
|
<a-modal v-model:visible="show" :width="width" centered wrapClassName="p-modal">
|
|
49
48
|
<template #title v-if="title">
|
|
50
|
-
<div class="
|
|
49
|
+
<div class="modal-title">
|
|
51
50
|
{{ title }}
|
|
52
51
|
</div>
|
|
53
52
|
</template>
|
|
54
|
-
<div class="border-t border-[#cecece] p-[20px] pb-[0px] text-[16px] text-[#272727]">
|
|
55
|
-
<div v-html="content"></div>
|
|
56
53
|
|
|
54
|
+
<div class="modal-content">
|
|
55
|
+
<div v-html="content"></div>
|
|
57
56
|
</div>
|
|
58
57
|
|
|
59
58
|
<template #footer>
|
|
60
|
-
<div class="
|
|
59
|
+
<div class="modal-footer">
|
|
61
60
|
<a-button
|
|
62
|
-
class="
|
|
63
|
-
style="border: 1px solid #272727"
|
|
61
|
+
class="modal-btn modal-cancel-btn"
|
|
64
62
|
@click="show = false"
|
|
65
|
-
>取消</a-button
|
|
66
63
|
>
|
|
64
|
+
取消
|
|
65
|
+
</a-button>
|
|
67
66
|
|
|
68
67
|
<a-button
|
|
69
|
-
class="
|
|
68
|
+
class="modal-btn modal-confirm-btn"
|
|
70
69
|
:style="{
|
|
71
70
|
border: 'none',
|
|
72
71
|
backgroundColor: confrimBtnBgColor,
|
|
73
72
|
}"
|
|
74
73
|
@click="confirmClick"
|
|
75
74
|
:loading="loading"
|
|
76
|
-
>确定</a-button
|
|
77
75
|
>
|
|
76
|
+
确定
|
|
77
|
+
</a-button>
|
|
78
78
|
</div>
|
|
79
79
|
</template>
|
|
80
80
|
</a-modal>
|
|
81
81
|
</template>
|
|
82
82
|
|
|
83
|
-
<style
|
|
84
|
-
.p-modal {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
83
|
+
<style>
|
|
84
|
+
.p-modal .ant-modal {
|
|
85
|
+
border-radius: 16px !important;
|
|
86
|
+
overflow: hidden;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.p-modal .ant-modal-content {
|
|
90
|
+
padding: 0 !important;
|
|
91
|
+
border-radius: 16px !important;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.modal-title {
|
|
95
|
+
padding: 20px;
|
|
96
|
+
font-size: 18px;
|
|
97
|
+
font-weight: 700;
|
|
98
|
+
line-height: 27px;
|
|
99
|
+
color: #272727;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.modal-content {
|
|
103
|
+
border-top: 1px solid #cecece;
|
|
104
|
+
padding: 20px;
|
|
105
|
+
padding-bottom: 0;
|
|
106
|
+
font-size: 16px;
|
|
107
|
+
color: #272727;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.modal-footer {
|
|
111
|
+
display: flex;
|
|
112
|
+
justify-content: flex-end;
|
|
113
|
+
padding: 20px;
|
|
114
|
+
gap: 8px;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.modal-btn {
|
|
118
|
+
width: 76px;
|
|
119
|
+
height: 38px;
|
|
120
|
+
border-radius: 100px;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.modal-cancel-btn {
|
|
124
|
+
border: 1px solid #272727;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.modal-confirm-btn {
|
|
128
|
+
color: #fff !important;
|
|
93
129
|
}
|
|
94
130
|
</style>
|
|
@@ -83,8 +83,9 @@ const renderTableColumns = (tableColumns: TableColumn[]) => {
|
|
|
83
83
|
// return h("div", { style: { display: "flex", justifyContent: "space-around" } }, buttons);
|
|
84
84
|
// };
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
if(!renderItem.width){
|
|
87
|
+
renderItem.width = renderItem.operateButtons.length * 60;
|
|
88
|
+
}
|
|
88
89
|
|
|
89
90
|
if(editColumns.length > 0){
|
|
90
91
|
renderItem.width +=110
|
|
@@ -299,11 +300,8 @@ defineExpose({
|
|
|
299
300
|
rowKey="id"
|
|
300
301
|
:row-selection="rowSelection"
|
|
301
302
|
:columns="columns"
|
|
302
|
-
:data-source="tableData
|
|
303
|
+
:data-source="data && data.length >0 ? data : (tableData.data || [])"
|
|
303
304
|
:loading="loading"
|
|
304
|
-
:scroll="{
|
|
305
|
-
y: height,
|
|
306
|
-
}"
|
|
307
305
|
:pagination="data.length >0? false :{
|
|
308
306
|
current: pageQuery.p,
|
|
309
307
|
defaultPageSize: pageQuery.pc,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "p-pc-ui",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"module": "dist/index.ts",
|
|
6
6
|
"main": "dist/index.ts",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"vue": "3.5.13"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"
|
|
25
|
-
"
|
|
24
|
+
"ts-node": "^10.9.2",
|
|
25
|
+
"typescript": "5.8.3"
|
|
26
26
|
}
|
|
27
|
-
}
|
|
27
|
+
}
|