diff --git a/fake/upload.fake.ts b/fake/upload.fake.ts new file mode 100644 index 0000000..aa8b755 --- /dev/null +++ b/fake/upload.fake.ts @@ -0,0 +1,24 @@ +// fake/user.fake.ts +import { defineFakeRoute } from 'vite-plugin-fake-server/client'; + +let fail = !false; +export default defineFakeRoute([ + { + timeout: 2000, + method: 'POST', + url: '/fake/upload', + response: (_, __, res) => { + fail = !fail; + if (fail) { + res.statusCode = 500; + return { + error: 'Upload failed', + }; + } + + return { + url: 'https://picsum.photos/200/300', + }; + }, + }, +]); diff --git a/src/assets/main.css b/src/assets/main.css index 0429e75..42b50e1 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -3,7 +3,7 @@ #app { max-width: 1280px; margin: 0 auto; - padding: 2rem; + padding: 1rem; font-weight: normal; } diff --git a/src/assets/reset-primevue.css b/src/assets/reset-primevue.css index c46e388..9489dbe 100644 --- a/src/assets/reset-primevue.css +++ b/src/assets/reset-primevue.css @@ -12,3 +12,15 @@ font-size: var(--p-floatlabel-active-font-size); font-weight: var(--p-floatlabel-label-active-font-weight); } + +.p-fileupload-header { + flex-wrap: wrap; +} + +.p-fileupload-file-name { + word-break: break-all; +} + +.p-fileupload-content .p-progressbar { + --p-fileupload-progressbar-height: 1rem; +} diff --git a/src/components/primevue/dialog-content.vue b/src/components/primevue/__dialog-content.vue similarity index 100% rename from src/components/primevue/dialog-content.vue rename to src/components/primevue/__dialog-content.vue diff --git a/src/components/primevue/fns.tsx b/src/components/primevue/fns.tsx new file mode 100644 index 0000000..3198388 --- /dev/null +++ b/src/components/primevue/fns.tsx @@ -0,0 +1,79 @@ +import { ConfirmationService, DialogService, ToastService, useDialogRef } from '@/plugins/primevue'; +import dialogContent from './__dialog-content.vue'; + +const dynamicComponent = defineComponent({ + props: { + 'defining-props': { + type: Object as PropType>, + default: () => ({}), + }, + }, + setup(props, ctx) { + const dialogRef = useDialogRef(); + return () => ( +
+
+
{JSON.stringify({ 'dialogRef?.data': dialogRef!.value.data }, null, 2)}

+
PrimeVue DynamicDialog

+
{`${JSON.stringify({ 'ctx.attrs': ctx, props }, null, 2)}`}

+
{JSON.stringify({ "inject('dialogRef')": dialogRef!.value }, null, 2)}

+
+ ); + }, +}); + +// https://primevue.org/dynamicdialog/ +export const openDialog = async () => { + const dialog1 = DialogService.open(dynamicComponent, { + props: { + header: '对话框1 可以拖动', + position: 'bottomleft', + draggable: true, + pt: { mask: { class: 'backdrop-blur-sm' } }, // 相当于: pt:mask:class="backdrop-blur-sm" + }, + data: { + 用inject接收: '通过 DynamicDialogOptions.data 传递的数据', + }, + emits: { + // https://github.com/primefaces/primevue/blob/bd7161298a472c8cd954e35e6a538a8bd1b1b386/packages/primevue/src/dynamicdialog/DynamicDialog.vue#L5 + // ↑v-bind="instance.options.emits", 所以 props 也可以通过 emits 传递给 content 的组件 + 'defining-props': { + '用-props-接收': '定义在-DynamicDialogOptions.emits-的数据', + }, + 绑定给组件的attrs: '定义在-DynamicDialogOptions.emits-的数据,', + onClose: () => dialog1.close(), + }, + }); + + await nextTick(); + // if ($__DEV__) return; + + await new Promise((resolve) => setTimeout(resolve, 300)); + DialogService.open(dialogContent, { + props: { + header: '对话框2', + // draggable: false, // Header1的 draggable: true 会影响 Header2,如果指定 draggable: false,则不会受到影响。 + }, + }); +}; + +export const openToast = () => { + ToastService.add({ severity: 'info', summary: '提示', detail: '消息内容', life: 3000 }); + ToastService.add({ severity: 'info', summary: '提示', detail: '消息内容', life: 0 }); +}; + +export const openConfirm = async () => { + ConfirmationService.require({ + message: '确定要继续吗?', + header: '确认', + icon: 'pi pi-exclamation-triangle', + rejectProps: { label: '取消', severity: 'secondary', outlined: true }, + acceptProps: { label: '确定' }, + accept: () => { + ToastService.add({ severity: 'info', summary: '已确认', detail: '您已同意操作', life: 3000 }); + }, + reject: () => { + ToastService.add({ severity: 'error', summary: '已取消', detail: '您已取消操作', life: 3000 }); + }, + }); +}; diff --git a/src/components/primevue/primevue.vue b/src/components/primevue/primevue.vue index e85504d..2eda578 100644 --- a/src/components/primevue/primevue.vue +++ b/src/components/primevue/primevue.vue @@ -1,91 +1,11 @@