plain-design 1.0.0-beta.103 → 1.0.0-beta.104
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/plain-design.commonjs.min.js +2 -2
- package/dist/plain-design.min.js +2 -2
- package/dist/report.html +2 -2
- package/package.json +1 -1
- package/src/packages/components/$upload/upload.utils.ts +6 -5
- package/src/packages/components/Image/index.tsx +1 -0
- package/src/packages/components/ImageUploader/index.tsx +23 -7
package/package.json
CHANGED
@@ -2,11 +2,12 @@ import {iHttp} from "../createHttp";
|
|
2
2
|
import {PlainObject} from "plain-utils/utils/event";
|
3
3
|
|
4
4
|
export interface iUploadServiceConfig {
|
5
|
-
http: iHttp,
|
6
|
-
action: string,
|
7
|
-
filename: string,
|
8
|
-
|
9
|
-
|
5
|
+
http: iHttp, // 上传的http请求服务对象
|
6
|
+
action: string, // 默认上传路径
|
7
|
+
filename: string, // 上传文件名
|
8
|
+
getFilePathFromResponse: (resp: any) => string, // 从返回值中获取上传返回的图片路径
|
9
|
+
prefix?: string, // 默认图片路径前缀
|
10
|
+
process?: (uploadData: iUploadData) => void | iUploadData | Promise<iUploadData | void> // 处理请求参数uploadData拦截器
|
10
11
|
}
|
11
12
|
|
12
13
|
export interface iUploadData {
|
@@ -12,6 +12,7 @@ import {$file, FileServiceDefaultAccept, FileServiceUploadConfig} from "../$file
|
|
12
12
|
import $configuration from "../$configuration";
|
13
13
|
import {iUploadService} from "../$upload/createUploadService";
|
14
14
|
import i18n from "../i18n";
|
15
|
+
import {iUploadServiceConfig} from "../$upload/upload.utils";
|
15
16
|
|
16
17
|
/**
|
17
18
|
* ImageUploader的状态
|
@@ -40,17 +41,21 @@ export const ImageUploader = designComponent({
|
|
40
41
|
handleDelete: { type: Function as PropType<() => void | Promise<void>> }, // 自定义删除图片逻辑
|
41
42
|
handleUpload: { type: Function as PropType<(file: File) => void | Promise<void>> }, // 自定义上传图片逻辑
|
42
43
|
handlePreview: { type: Function as PropType<(url?: string) => void> }, // 自定义预览逻辑
|
43
|
-
urlPrefix: { type: String },
|
44
|
-
service: { type: Object as PropType<iUploadService> },
|
44
|
+
urlPrefix: { type: String }, // 图片路径前缀
|
45
|
+
service: { type: Object as PropType<iUploadService> }, // 文件上传服务
|
46
|
+
emitBase64: { type: Boolean }, // 当选择文件之后,是否将 base64 值更新到绑定值
|
47
|
+
getFilePathFromResponse: { type: Function as PropType<iUploadServiceConfig['getFilePathFromResponse']> },// 从上传结果中获取图片访问地址
|
45
48
|
},
|
46
49
|
inheritPropsType: HTMLDivElement,
|
47
50
|
emits: {
|
48
51
|
onUpdateModelValue: (val?: string) => true,
|
49
52
|
onLoadSuccess: (url: string) => true,
|
50
53
|
onLoadError: (e: string | Event) => true,
|
54
|
+
onLoadComplete: () => true,
|
51
55
|
onUploadSuccess: (resp: PlainObject | string) => true,
|
52
56
|
onUploadProgress: (percent: number, e: ProgressEvent) => true,
|
53
57
|
onUploadFail: (e: any) => true,
|
58
|
+
onUploadComplete: () => true,
|
54
59
|
},
|
55
60
|
setup({ props, event: { emit } }) {
|
56
61
|
|
@@ -59,7 +64,8 @@ export const ImageUploader = designComponent({
|
|
59
64
|
const urlPrefix = computed(() => props.urlPrefix || upload?.config.prefix);
|
60
65
|
|
61
66
|
const { refs, onRef } = useRefs({ el: HTMLDivElement });
|
62
|
-
|
67
|
+
|
68
|
+
const model = useModel(() => props.modelValue, emit.onUpdateModelValue);
|
63
69
|
|
64
70
|
const { editComputed } = useEdit();
|
65
71
|
|
@@ -70,7 +76,6 @@ export const ImageUploader = designComponent({
|
|
70
76
|
});
|
71
77
|
|
72
78
|
watch(() => props.modelValue, val => {
|
73
|
-
model.value = Image.formatImagePath(val, urlPrefix.value);
|
74
79
|
state.chooseBase64 = undefined;
|
75
80
|
if (!model.value) {
|
76
81
|
return state.status = eImageUploaderStatus.empty;
|
@@ -80,12 +85,14 @@ export const ImageUploader = designComponent({
|
|
80
85
|
image.onload = () => {
|
81
86
|
state.status = eImageUploaderStatus.success;
|
82
87
|
emit.onLoadSuccess(model.value!);
|
88
|
+
emit.onLoadComplete();
|
83
89
|
};
|
84
90
|
image.onerror = (e) => {
|
85
91
|
state.status = eImageUploaderStatus.error;
|
86
92
|
emit.onLoadError(e);
|
93
|
+
emit.onLoadComplete();
|
87
94
|
};
|
88
|
-
image.src =
|
95
|
+
image.src = Image.formatImagePath(val, urlPrefix.value);
|
89
96
|
}, { immediate: true });
|
90
97
|
|
91
98
|
const classes = useClasses(() => [
|
@@ -125,10 +132,16 @@ export const ImageUploader = designComponent({
|
|
125
132
|
onSuccess: (resp) => {
|
126
133
|
if (!!config?.onSuccess) config.onSuccess(resp);
|
127
134
|
console.log('upload success, resp:', resp);
|
128
|
-
model.value = String(state.chooseBase64);
|
135
|
+
// model.value = String(state.chooseBase64);
|
136
|
+
const getFilePathFromResponse: iUploadServiceConfig['getFilePathFromResponse'] | undefined =
|
137
|
+
props.getFilePathFromResponse ||
|
138
|
+
upload?.config.getFilePathFromResponse;
|
139
|
+
|
140
|
+
model.value = getFilePathFromResponse?.(resp);
|
129
141
|
state.chooseBase64 = undefined;
|
130
142
|
state.status = eImageUploaderStatus.success;
|
131
143
|
emit.onUploadSuccess(resp);
|
144
|
+
emit.onUploadComplete();
|
132
145
|
dfd.resolve(resp);
|
133
146
|
},
|
134
147
|
onError: (e) => {
|
@@ -136,6 +149,7 @@ export const ImageUploader = designComponent({
|
|
136
149
|
console.log('upload fail, e:', e);
|
137
150
|
state.status = eImageUploaderStatus.fail;
|
138
151
|
emit.onUploadFail(e);
|
152
|
+
emit.onUploadComplete();
|
139
153
|
dfd.reject(e);
|
140
154
|
},
|
141
155
|
};
|
@@ -181,10 +195,12 @@ export const ImageUploader = designComponent({
|
|
181
195
|
};
|
182
196
|
|
183
197
|
const imageAttrs = computed(() => {
|
184
|
-
|
198
|
+
const ret = Object.keys(ImagePropsOptions).reduce((prev, key) => {
|
185
199
|
prev[key] = (props as any)[key];
|
186
200
|
return prev;
|
187
201
|
}, {} as any);
|
202
|
+
ret.urlPrefix = urlPrefix.value;
|
203
|
+
return ret;
|
188
204
|
});
|
189
205
|
|
190
206
|
return {
|