qidian-vue-ui 1.1.59 → 1.1.60
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/config-provider/index.d.ts +24 -0
- package/dist/components/config-provider/types.d.ts +8 -0
- package/dist/components/config-provider/useConfig.d.ts +32 -0
- package/dist/components/dialog/form.vue.mjs +11 -13
- package/dist/components/dialog/form.vue.mjs.map +1 -1
- package/dist/components/dialog/props.d.ts +16 -0
- package/dist/components/dialog/props.mjs +2 -1
- package/dist/components/dialog/props.mjs.map +1 -1
- package/dist/components/form/config.d.ts +1 -0
- package/dist/components/form/config.mjs +3 -1
- package/dist/components/form/config.mjs.map +1 -1
- package/dist/components/form/index.css +5 -5
- package/dist/components/form/index.d.ts +1 -1
- package/dist/components/form/index.vue.mjs +1 -1
- package/dist/components/form/index.vue2.mjs +18 -2
- package/dist/components/form/index.vue2.mjs.map +1 -1
- package/dist/components/import-dialog/index.d.ts +2 -0
- package/dist/components/import-dialog/index.vue.d.ts +14 -0
- package/dist/components/import-dialog/index.vue.mjs +180 -0
- package/dist/components/import-dialog/index.vue.mjs.map +1 -0
- package/dist/components/import-dialog/index.vue2.mjs +5 -0
- package/dist/components/import-dialog/index.vue2.mjs.map +1 -0
- package/dist/components/import-dialog/props.d.ts +5 -0
- package/dist/components/import-dialog/props.mjs +9 -0
- package/dist/components/import-dialog/props.mjs.map +1 -0
- package/dist/components/import-dialog/types.d.ts +9 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/upload/index.css +26 -26
- package/dist/components/upload/index.vue.mjs +2 -2
- package/dist/components/upload/index.vue2.mjs +10 -4
- package/dist/components/upload/index.vue2.mjs.map +1 -1
- package/dist/components/upload/types.d.ts +1 -0
- package/dist/index.mjs +48 -45
- package/dist/index.mjs.map +1 -1
- package/dist/locales/en-US.d.ts +8 -0
- package/dist/locales/en-US.mjs +8 -0
- package/dist/locales/en-US.mjs.map +1 -1
- package/dist/locales/zh-CN.d.ts +8 -0
- package/dist/locales/zh-CN.mjs +8 -0
- package/dist/locales/zh-CN.mjs.map +1 -1
- package/dist/locales/zh-TW.d.ts +8 -0
- package/dist/locales/zh-TW.mjs +8 -0
- package/dist/locales/zh-TW.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { defineComponent, mergeDefaults, computed, ref, createVNode, createBlock, openBlock, unref, isRef, isVNode } from "vue";
|
|
2
|
+
import { Alert, Space, Button } from "tdesign-vue-next";
|
|
3
|
+
import { qdImportDialogProps } from "./props.mjs";
|
|
4
|
+
import { useVModels } from "../../node_modules/.pnpm/@vueuse_core@14.0.0_vue@3.5.26_typescript@5.9.3_/node_modules/@vueuse/core/dist/index.mjs";
|
|
5
|
+
import { isEmpty, easyDownload, suspectedWrapperPromise } from "qidian-shared";
|
|
6
|
+
import { useConfig } from "../config-provider/useConfig.mjs";
|
|
7
|
+
import QdUpload from "../upload/index.vue.mjs";
|
|
8
|
+
import _sfc_main$1 from "../dialog/form.vue.mjs";
|
|
9
|
+
import { useModal } from "../../hooks/useModal.mjs";
|
|
10
|
+
function _isSlot(s) {
|
|
11
|
+
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
|
|
12
|
+
}
|
|
13
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
14
|
+
__name: "index",
|
|
15
|
+
props: /* @__PURE__ */ mergeDefaults({
|
|
16
|
+
name: {},
|
|
17
|
+
downloadTpl: {
|
|
18
|
+
type: [String, Function]
|
|
19
|
+
},
|
|
20
|
+
downloadTplName: {},
|
|
21
|
+
onSuccess: {
|
|
22
|
+
type: Function
|
|
23
|
+
},
|
|
24
|
+
wrapper: {},
|
|
25
|
+
visible: {
|
|
26
|
+
type: Boolean
|
|
27
|
+
},
|
|
28
|
+
action: {
|
|
29
|
+
type: [String, Function]
|
|
30
|
+
},
|
|
31
|
+
method: {},
|
|
32
|
+
accept: {},
|
|
33
|
+
tips: {}
|
|
34
|
+
}, qdImportDialogProps),
|
|
35
|
+
emits: ["update:visible"],
|
|
36
|
+
setup(__props, {
|
|
37
|
+
expose: __expose,
|
|
38
|
+
emit: __emit
|
|
39
|
+
}) {
|
|
40
|
+
const props = __props;
|
|
41
|
+
const emit = __emit;
|
|
42
|
+
const {
|
|
43
|
+
visible
|
|
44
|
+
} = useVModels(props, emit, {
|
|
45
|
+
passive: true
|
|
46
|
+
});
|
|
47
|
+
const {
|
|
48
|
+
t: crudT
|
|
49
|
+
} = useConfig("crud");
|
|
50
|
+
const {
|
|
51
|
+
t
|
|
52
|
+
} = useConfig("importDialog");
|
|
53
|
+
const {
|
|
54
|
+
msgSuccess,
|
|
55
|
+
alertError
|
|
56
|
+
} = useModal();
|
|
57
|
+
const reProps = computed(() => {
|
|
58
|
+
const {
|
|
59
|
+
visible: visible2,
|
|
60
|
+
name,
|
|
61
|
+
downloadTpl,
|
|
62
|
+
downloadTplName,
|
|
63
|
+
onSuccess,
|
|
64
|
+
tips,
|
|
65
|
+
accept,
|
|
66
|
+
wrapper,
|
|
67
|
+
...uploadOptions
|
|
68
|
+
} = props;
|
|
69
|
+
const reUploadOptions = {
|
|
70
|
+
...uploadOptions,
|
|
71
|
+
accept,
|
|
72
|
+
tips: tips || isEmpty(accept) ? tips : `${t("fileSupport")[0]} ${accept.join(",")} ${t("fileSupport")[1]}`
|
|
73
|
+
};
|
|
74
|
+
const qdDialogOptions = {
|
|
75
|
+
width: "min(600px, 100%)",
|
|
76
|
+
...wrapper,
|
|
77
|
+
header: wrapper?.header || `${crudT("importText")}${name ? ` ${name}` : ""}`,
|
|
78
|
+
footer: false
|
|
79
|
+
};
|
|
80
|
+
return {
|
|
81
|
+
name,
|
|
82
|
+
downloadTpl,
|
|
83
|
+
downloadTplName,
|
|
84
|
+
onSuccess,
|
|
85
|
+
qdUploadOptions: reUploadOptions,
|
|
86
|
+
qdDialogOptions,
|
|
87
|
+
models: visible2
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
const downloadTplLoad = ref(false);
|
|
91
|
+
const items = computed(() => [{
|
|
92
|
+
ifRender: !!reProps.value.downloadTpl,
|
|
93
|
+
col: 12,
|
|
94
|
+
component: {
|
|
95
|
+
is: () => {
|
|
96
|
+
let _slot;
|
|
97
|
+
return createVNode(Alert, {
|
|
98
|
+
"class": "w-full"
|
|
99
|
+
}, {
|
|
100
|
+
default: () => [createVNode(Space, {
|
|
101
|
+
"align": "center",
|
|
102
|
+
"size": "small"
|
|
103
|
+
}, {
|
|
104
|
+
default: () => [t("clickDownloadTplText"), createVNode(Button, {
|
|
105
|
+
"theme": "primary",
|
|
106
|
+
"variant": "text",
|
|
107
|
+
"size": "small",
|
|
108
|
+
"loading": downloadTplLoad.value,
|
|
109
|
+
"onClick": () => handleDownloadTpl()
|
|
110
|
+
}, _isSlot(_slot = t("downloadTplText")) ? _slot : {
|
|
111
|
+
default: () => [_slot]
|
|
112
|
+
})]
|
|
113
|
+
})]
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}, {
|
|
118
|
+
col: 12,
|
|
119
|
+
name: "file",
|
|
120
|
+
component: {
|
|
121
|
+
is: QdUpload,
|
|
122
|
+
vModel: "file",
|
|
123
|
+
draggable: true,
|
|
124
|
+
onSuccess: () => {
|
|
125
|
+
msgSuccess(t("successText"));
|
|
126
|
+
hide();
|
|
127
|
+
reProps.value.onSuccess?.();
|
|
128
|
+
},
|
|
129
|
+
onFail: ({
|
|
130
|
+
file
|
|
131
|
+
}) => {
|
|
132
|
+
alertError({
|
|
133
|
+
header: t("failText"),
|
|
134
|
+
body: file.response?.error ? (h) => h("div", {
|
|
135
|
+
innerHTML: file.response?.error
|
|
136
|
+
}) : void 0
|
|
137
|
+
});
|
|
138
|
+
},
|
|
139
|
+
...reProps.value.qdUploadOptions
|
|
140
|
+
}
|
|
141
|
+
}]);
|
|
142
|
+
async function handleDownloadTpl() {
|
|
143
|
+
const {
|
|
144
|
+
downloadTpl,
|
|
145
|
+
downloadTplName
|
|
146
|
+
} = reProps.value;
|
|
147
|
+
if (!downloadTpl) return;
|
|
148
|
+
if (typeof downloadTpl === "string") {
|
|
149
|
+
easyDownload(downloadTpl, downloadTplName || "unnamed");
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
downloadTplLoad.value = true;
|
|
153
|
+
await suspectedWrapperPromise(downloadTpl());
|
|
154
|
+
downloadTplLoad.value = false;
|
|
155
|
+
}
|
|
156
|
+
function show() {
|
|
157
|
+
visible.value = true;
|
|
158
|
+
}
|
|
159
|
+
function hide() {
|
|
160
|
+
visible.value = false;
|
|
161
|
+
}
|
|
162
|
+
const expose = {
|
|
163
|
+
show,
|
|
164
|
+
hide
|
|
165
|
+
};
|
|
166
|
+
__expose(expose);
|
|
167
|
+
return (_ctx, _cache) => {
|
|
168
|
+
return openBlock(), createBlock(unref(_sfc_main$1), {
|
|
169
|
+
visible: unref(visible),
|
|
170
|
+
"onUpdate:visible": _cache[0] || (_cache[0] = ($event) => isRef(visible) ? visible.value = $event : null),
|
|
171
|
+
wrapper: reProps.value.qdDialogOptions,
|
|
172
|
+
items: items.value
|
|
173
|
+
}, null, 8, ["visible", "wrapper", "items"]);
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
export {
|
|
178
|
+
_sfc_main as default
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=index.vue.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.vue.mjs","sources":["../../../src/components/import-dialog/index.vue"],"sourcesContent":["<template>\n <qd-dialog-form v-model:visible=\"visible\" :wrapper=\"reProps.qdDialogOptions\" :items=\"items\" />\n</template>\n\n<script setup lang=\"tsx\">\n import type { QdImportDialogProps } from './types'\n import type { QdDialogInstanceFunctions } from '../dialog'\n import type { QdFormItemProps } from '../form'\n import type { UploadFailContext } from 'tdesign-vue-next'\n import { Alert as TAlert, Space as TSpace, Button as TButton } from 'tdesign-vue-next'\n import { QdDialogForm } from '../dialog'\n import { QdUpload } from '../upload'\n import { qdImportDialogProps } from './props'\n import { useVModels } from '@vueuse/core'\n import { computed, ref } from 'vue'\n import { easyDownload, isEmpty, suspectedWrapperPromise } from 'qidian-shared'\n import { useModal } from '../../hooks'\n import { useConfig } from '../config-provider/useConfig'\n\n const props = withDefaults(defineProps<QdImportDialogProps>(), qdImportDialogProps)\n const emit = defineEmits<{ 'update:visible': [QdImportDialogProps['visible']] }>()\n const { visible } = useVModels<typeof props, keyof typeof emit>(props, emit, {\n passive: true\n })\n\n const { t: crudT } = useConfig('crud')\n const { t } = useConfig('importDialog')\n const { msgSuccess, alertError } = useModal()\n\n const reProps = computed(() => {\n const {\n visible,\n name,\n downloadTpl,\n downloadTplName,\n onSuccess,\n tips,\n accept,\n wrapper,\n ...uploadOptions\n } = props\n\n const reUploadOptions = {\n ...uploadOptions,\n accept,\n tips:\n tips || isEmpty(accept)\n ? tips\n : `${t('fileSupport')[0]} ${accept.join(',')} ${t('fileSupport')[1]}`\n }\n\n const qdDialogOptions = {\n width: 'min(600px, 100%)',\n ...wrapper,\n\n header: wrapper?.header || `${crudT('importText')}${name ? ` ${name}` : ''}`,\n footer: false\n }\n\n return {\n name,\n downloadTpl,\n downloadTplName,\n onSuccess,\n qdUploadOptions: reUploadOptions,\n qdDialogOptions: qdDialogOptions,\n models: visible\n }\n })\n const downloadTplLoad = ref(false)\n\n const items = computed<QdFormItemProps[]>(() => [\n {\n ifRender: !!reProps.value.downloadTpl,\n col: 12,\n component: {\n is: () => (\n <TAlert class=\"w-full\">\n <TSpace align=\"center\" size=\"small\">\n {t('clickDownloadTplText')}\n <TButton\n theme=\"primary\"\n variant=\"text\"\n size=\"small\"\n loading={downloadTplLoad.value}\n onClick={() => handleDownloadTpl()}\n >\n {t('downloadTplText')}\n </TButton>\n </TSpace>\n </TAlert>\n )\n }\n },\n {\n col: 12,\n name: 'file',\n component: {\n is: QdUpload,\n vModel: 'file',\n draggable: true,\n onSuccess: () => {\n msgSuccess(t('successText'))\n hide()\n reProps.value.onSuccess?.()\n },\n onFail: ({ file }: UploadFailContext) => {\n alertError({\n header: t('failText'),\n body: file.response?.error\n ? (h) => h('div', { innerHTML: file.response?.error })\n : undefined\n })\n },\n ...reProps.value.qdUploadOptions\n }\n }\n ])\n\n async function handleDownloadTpl() {\n const { downloadTpl, downloadTplName } = reProps.value\n if (!downloadTpl) return\n\n if (typeof downloadTpl === 'string') {\n easyDownload(downloadTpl, downloadTplName || 'unnamed')\n return\n }\n\n downloadTplLoad.value = true\n await suspectedWrapperPromise(downloadTpl())\n downloadTplLoad.value = false\n }\n\n function show() {\n visible.value = true\n }\n\n function hide() {\n visible.value = false\n }\n\n const expose: QdDialogInstanceFunctions = {\n show,\n hide\n }\n\n defineExpose(expose)\n</script>\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","props","__props","emit","__emit","visible","useVModels","passive","t","crudT","useConfig","msgSuccess","alertError","useModal","reProps","computed","name","downloadTpl","downloadTplName","onSuccess","tips","accept","wrapper","uploadOptions","reUploadOptions","isEmpty","join","qdDialogOptions","width","header","footer","qdUploadOptions","models","downloadTplLoad","ref","items","ifRender","value","col","component","is","_slot","_createVNode","TAlert","default","TSpace","TButton","onClick","handleDownloadTpl","QdUpload","vModel","draggable","hide","onFail","file","body","response","error","h","innerHTML","undefined","easyDownload","suspectedWrapperPromise","show","expose","__expose","_createBlock","_unref","QdDialogForm","$event"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.vue2.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"props.mjs","sources":["../../../src/components/import-dialog/props.ts"],"sourcesContent":["export const qdImportDialogProps = {\n method: 'POST',\n name: 'file',\n accept: () => ['.xlsx', '.xls']\n} as const\n"],"names":[],"mappings":"AAAO,MAAM,sBAAsB;AAAA,EACjC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ,MAAM,CAAC,SAAS,MAAM;AAChC;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { QdDialogProps } from '../dialog';
|
|
2
|
+
import type { QdUploadProps } from '../upload';
|
|
3
|
+
export interface QdImportDialogProps extends Pick<QdDialogProps, 'visible'>, Pick<QdUploadProps, 'action' | 'method' | 'name' | 'accept' | 'tips'> {
|
|
4
|
+
name?: string;
|
|
5
|
+
downloadTpl?: string | (() => void) | (() => Promise<void>);
|
|
6
|
+
downloadTplName?: string;
|
|
7
|
+
onSuccess?: () => void;
|
|
8
|
+
wrapper?: Pick<QdDialogProps, 'header' | 'width'>;
|
|
9
|
+
}
|
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
.qd-upload[data-v-
|
|
1
|
+
.qd-upload[data-v-3b76e6d5] {
|
|
2
2
|
width: 100%;
|
|
3
3
|
outline: none;
|
|
4
4
|
}
|
|
5
|
-
.qd-upload[data-v-
|
|
5
|
+
.qd-upload[data-v-3b76e6d5] .t-image-viewer__trigger {
|
|
6
6
|
display: none;
|
|
7
7
|
}
|
|
8
|
-
.qd-upload[data-v-
|
|
8
|
+
.qd-upload[data-v-3b76e6d5] .t-upload__dragger {
|
|
9
9
|
min-width: auto;
|
|
10
10
|
min-height: 144px;
|
|
11
11
|
width: 100%;
|
|
12
12
|
height: 100%;
|
|
13
13
|
}
|
|
14
|
-
.qd-upload[data-v-
|
|
14
|
+
.qd-upload[data-v-3b76e6d5] .t-upload__flow {
|
|
15
15
|
width: 100%;
|
|
16
16
|
min-width: auto;
|
|
17
17
|
max-width: 100%;
|
|
18
18
|
}
|
|
19
|
-
.qd-upload[data-v-
|
|
19
|
+
.qd-upload[data-v-3b76e6d5] .t-upload__flow-empty {
|
|
20
20
|
height: auto;
|
|
21
21
|
min-height: 144px;
|
|
22
22
|
}
|
|
23
|
-
.qd-upload[data-v-
|
|
24
|
-
.qd-upload[data-v-
|
|
23
|
+
.qd-upload[data-v-3b76e6d5] .t-upload__flow-card-area,
|
|
24
|
+
.qd-upload[data-v-3b76e6d5] .t-upload__flow-table {
|
|
25
25
|
margin-top: var(--td-comp-margin-s);
|
|
26
26
|
}
|
|
27
|
-
.qd-upload__popup-upload[data-v-
|
|
27
|
+
.qd-upload__popup-upload[data-v-3b76e6d5] .t-image-viewer__trigger {
|
|
28
28
|
display: none;
|
|
29
29
|
}
|
|
30
|
-
.qd-upload__popup-upload[data-v-
|
|
30
|
+
.qd-upload__popup-upload[data-v-3b76e6d5] .t-upload__flow-table {
|
|
31
31
|
margin-top: 0;
|
|
32
32
|
}
|
|
33
|
-
.qd-upload__popup-upload--disabled[data-v-
|
|
34
|
-
.qd-upload__popup-upload--disabled[data-v-
|
|
33
|
+
.qd-upload__popup-upload--disabled[data-v-3b76e6d5] .t-upload__flow-table th:last-child,
|
|
34
|
+
.qd-upload__popup-upload--disabled[data-v-3b76e6d5] .t-upload__flow-table td:last-child {
|
|
35
35
|
display: none;
|
|
36
36
|
}
|
|
37
|
-
.qd-upload[data-v-
|
|
38
|
-
.qd-upload[data-v-
|
|
37
|
+
.qd-upload[data-v-3b76e6d5]:focus .t-upload__flow-card-area,
|
|
38
|
+
.qd-upload[data-v-3b76e6d5]:focus .t-upload__flow-table {
|
|
39
39
|
border-color: var(--td-brand-color);
|
|
40
40
|
}
|
|
41
|
-
.qd-upload--only-view[data-v-
|
|
42
|
-
.qd-upload--only-view[data-v-
|
|
41
|
+
.qd-upload--only-view[data-v-3b76e6d5] .t-upload__flow-empty,
|
|
42
|
+
.qd-upload--only-view[data-v-3b76e6d5] .t-upload__card-mask-item-divider {
|
|
43
43
|
display: none;
|
|
44
44
|
}
|
|
45
|
-
.qd-upload--only-view[data-v-
|
|
45
|
+
.qd-upload--only-view[data-v-3b76e6d5] .t-upload__flow-card-area {
|
|
46
46
|
border-color: var(--td-component-border);
|
|
47
47
|
}
|
|
48
|
-
.qd-upload--only-view[data-v-
|
|
49
|
-
.qd-upload--only-view[data-v-
|
|
50
|
-
.qd-upload--only-view[data-v-
|
|
48
|
+
.qd-upload--only-view[data-v-3b76e6d5]:not(.qd-upload--btn-image-popup):not(.qd-upload--btn-file-popup) .t-upload__flow-op,
|
|
49
|
+
.qd-upload--only-view[data-v-3b76e6d5]:not(.qd-upload--btn-image-popup):not(.qd-upload--btn-file-popup) .t-upload__trigger,
|
|
50
|
+
.qd-upload--only-view[data-v-3b76e6d5]:not(.qd-upload--btn-image-popup):not(.qd-upload--btn-file-popup) .t-upload__flow-bottom {
|
|
51
51
|
display: none;
|
|
52
52
|
}
|
|
53
|
-
.qd-upload--only-view[data-v-
|
|
54
|
-
.qd-upload--only-view[data-v-
|
|
53
|
+
.qd-upload--only-view[data-v-3b76e6d5]:not(.qd-upload--btn-image-popup):not(.qd-upload--btn-file-popup) .t-upload__flow-table,
|
|
54
|
+
.qd-upload--only-view[data-v-3b76e6d5]:not(.qd-upload--btn-image-popup):not(.qd-upload--btn-file-popup) .t-upload__flow-card-area {
|
|
55
55
|
margin-top: 0;
|
|
56
56
|
}
|
|
57
|
-
.qd-upload--only-view[data-v-
|
|
57
|
+
.qd-upload--only-view[data-v-3b76e6d5]:not(.qd-upload--btn-image-popup):not(.qd-upload--btn-file-popup) .t-upload__card .t-upload__card-item.t-is-background:last-child {
|
|
58
58
|
display: none;
|
|
59
59
|
}
|
|
60
|
-
.qd-upload--hide-manual-upload[data-v-
|
|
60
|
+
.qd-upload--hide-manual-upload[data-v-3b76e6d5] .t-upload__flow-bottom {
|
|
61
61
|
display: none;
|
|
62
62
|
margin-top: 0;
|
|
63
63
|
}
|
|
64
|
-
.qd-upload--hide-progress[data-v-
|
|
65
|
-
.qd-upload--hide-progress[data-v-
|
|
64
|
+
.qd-upload--hide-progress[data-v-3b76e6d5] .t-upload__flow-table th:last-child,
|
|
65
|
+
.qd-upload--hide-progress[data-v-3b76e6d5] .t-upload__flow-table td:last-child {
|
|
66
66
|
display: none;
|
|
67
67
|
}
|
|
68
|
-
.qd-upload--disabled[data-v-
|
|
68
|
+
.qd-upload--disabled[data-v-3b76e6d5] .t-upload__flow-card-area {
|
|
69
69
|
border-color: var(--td-component-border);
|
|
70
70
|
}
|
|
@@ -2,8 +2,8 @@ import './index.css'
|
|
|
2
2
|
import _sfc_main from "./index.vue2.mjs";
|
|
3
3
|
/* empty css */
|
|
4
4
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.mjs";
|
|
5
|
-
const
|
|
5
|
+
const QdUpload = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-3b76e6d5"]]);
|
|
6
6
|
export {
|
|
7
|
-
|
|
7
|
+
QdUpload as default
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=index.vue.mjs.map
|
|
@@ -10,7 +10,7 @@ import { PROVIDE_UPLOAD } from "../config-provider/config.mjs";
|
|
|
10
10
|
import { useConfig } from "../config-provider/useConfig.mjs";
|
|
11
11
|
import { qdUploadAcceptMap } from "./config.mjs";
|
|
12
12
|
import { qdDictConvStrSeparator } from "../dict/tag/props.mjs";
|
|
13
|
-
import { PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE } from "../form/config.mjs";
|
|
13
|
+
import { PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE, PROVIDE_FORM_RESET_QUEUE } from "../form/config.mjs";
|
|
14
14
|
import { useReadonly } from "../../hooks/useReadonly.mjs";
|
|
15
15
|
import { useDisabled } from "../../hooks/useDisabled.mjs";
|
|
16
16
|
import { useModal } from "../../hooks/useModal.mjs";
|
|
@@ -118,6 +118,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
118
118
|
}
|
|
119
119
|
});
|
|
120
120
|
const formAddBeforeSubmitQueue = inject(PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE, void 0);
|
|
121
|
+
const formResetQueue = inject(PROVIDE_FORM_RESET_QUEUE, void 0);
|
|
121
122
|
const { t } = useConfig("upload");
|
|
122
123
|
const tdReadonly = useReadonly();
|
|
123
124
|
const tdDisabled = useDisabled();
|
|
@@ -233,6 +234,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
233
234
|
fileList.value.splice(context.index, 1);
|
|
234
235
|
};
|
|
235
236
|
const reUploadOptions = {
|
|
237
|
+
...uploadOptions,
|
|
236
238
|
action: actionUrl,
|
|
237
239
|
theme: ["custom", "file", "file-input", "file-flow", "image", "image-flow"].includes(theme) ? theme : "custom",
|
|
238
240
|
sizeLimit: reSizeLimit,
|
|
@@ -247,8 +249,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
247
249
|
showImageFileName: onlyView ? false : showImageFileName,
|
|
248
250
|
showUploadProgress: onlyView ? false : showUploadProgress,
|
|
249
251
|
showThumbnail: onlyView ? true : showThumbnail,
|
|
250
|
-
draggable: onlyView ? false : draggable
|
|
251
|
-
...uploadOptions
|
|
252
|
+
draggable: onlyView ? false : draggable
|
|
252
253
|
};
|
|
253
254
|
if (globalUploadPropsV) {
|
|
254
255
|
Object.entries(globalUploadPropsV).forEach(([key, value]) => {
|
|
@@ -411,8 +412,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
411
412
|
if (err) return true;
|
|
412
413
|
return true;
|
|
413
414
|
}
|
|
415
|
+
function clear() {
|
|
416
|
+
reModelValue.value = [];
|
|
417
|
+
fileList.value = [];
|
|
418
|
+
}
|
|
414
419
|
formAddBeforeSubmitQueue?.(uploadBeforeFormSubmit);
|
|
415
420
|
formAddBeforeSubmitQueue?.(delBeforeFormSubmit);
|
|
421
|
+
formResetQueue?.(clear);
|
|
416
422
|
watch(
|
|
417
423
|
reModelValue,
|
|
418
424
|
async (newVal, oldVal) => {
|
|
@@ -443,7 +449,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
443
449
|
{ deep: true, immediate: true }
|
|
444
450
|
);
|
|
445
451
|
onMounted(() => {
|
|
446
|
-
Object.assign(expose, uploadRef.value, { uploadFiles });
|
|
452
|
+
Object.assign(expose, uploadRef.value, { uploadFiles, clear });
|
|
447
453
|
});
|
|
448
454
|
__expose(expose);
|
|
449
455
|
return (_ctx, _cache) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue2.mjs","sources":["../../../src/components/upload/index.vue"],"sourcesContent":["<template>\n <t-upload\n ref=\"upload\"\n :class=\"[\n 'qd-upload',\n `qd-upload--${reProps.theme}`,\n reProps.onlyView ? 'qd-upload--only-view' : '',\n !reProps.uploadOptions.showUploadProgress && reProps.onlyView\n ? 'qd-upload--hide-progress'\n : '',\n !reProps.uploadOptions.autoUpload && reProps.showManualButton\n ? ''\n : 'qd-upload--hide-manual-upload',\n reProps.uploadOptions.disabled ? 'qd-upload--disabled' : ''\n ]\"\n v-model:files=\"fileList\"\n :tabindex=\"reProps.onlyView || reProps.uploadOptions.disabled ? '' : '0'\"\n v-bind=\"reProps.uploadOptions\"\n >\n <template v-if=\"['btn-file-popup', 'btn-image-popup'].includes(theme)\">\n <t-space align=\"center\" size=\"small\">\n <t-button\n v-if=\"!reProps.onlyView\"\n variant=\"outline\"\n :disabled=\"reProps.uploadOptions.disabled\"\n >\n <template #icon><upload-icon /></template>\n {{\n !fileList.length\n ? t('triggerUploadText').fileInput\n : reProps.uploadOptions.max === 1 || !reProps.uploadOptions.multiple\n ? t('triggerUploadText').reupload\n : t('triggerUploadText').continueUpload\n }}\n </t-button>\n\n <t-popup v-if=\"fileList.length\" show-arrow trigger=\"click\">\n <t-badge :count=\"fileList.length\" size=\"small\" :offset=\"[2, 2]\" @click.stop>\n <t-button variant=\"outline\">\n <template #icon><browse-icon /></template>\n {{ t('viewFileText') }}\n </t-button>\n </t-badge>\n\n <template #content>\n <t-upload\n :class=\"[\n 'qd-upload__popup-upload',\n reProps.uploadOptions.disabled ? 'qd-upload__popup-upload--disabled' : ''\n ]\"\n v-model:files=\"popupFileList\"\n :theme=\"popupUploadTheme\"\n :disabled=\"reProps.uploadOptions.disabled\"\n :on-remove=\"reProps.handlePopupRemove\"\n :show-thumbnail=\"reProps.uploadOptions.showThumbnail\"\n :show-image-file-name=\"reProps.uploadOptions.showImageFileName\"\n :show-upload-progress=\"reProps.uploadOptions.showUploadProgress\"\n >\n <template #trigger><span style=\"display: none\"></span></template>\n </t-upload>\n </template>\n </t-popup>\n </t-space>\n </template>\n\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps\" />\n </template>\n </t-upload>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n F extends UploadFile = UploadFile,\n OR = unknown,\n OP extends string | number | (string | number)[] = string | number | (string | number)[],\n TOP = OP,\n UR = unknown,\n UP extends string | string[] = string | string[],\n TUP = UP,\n DR = unknown,\n DP extends string | number | (string | number)[] = string | number | (string | number)[],\n TDP = DP\n \"\n>\n import type {\n SizeLimitObj,\n TdUploadProps,\n UploadFile,\n UploadInstanceFunctions\n } from 'tdesign-vue-next'\n import type {\n QdUploadDeleteResult,\n QdUploadInstanceFunctions,\n QdUploadListOssByIdsResult,\n QdUploadProps\n } from './types'\n import { qdUploadProps, qdUploadSizeLimit } from './props'\n import { useVModels } from '@vueuse/core'\n import { computed, inject, onMounted, useTemplateRef, ref, watch } from 'vue'\n import {\n Upload as TUpload,\n Button as TButton,\n Popup as TPopup,\n Space as TSpace,\n Badge as TBadge\n } from 'tdesign-vue-next'\n import { UploadIcon, BrowseIcon } from 'tdesign-icons-vue-next'\n import {\n checkSameObject,\n easyCopy,\n isEmpty,\n isTypeByName,\n suspectedWrapperPromise,\n to,\n useTimer\n } from 'qidian-shared'\n import dayjs from 'dayjs'\n import { PROVIDE_UPLOAD } from '../config-provider/config'\n import { useConfig } from '../config-provider/useConfig'\n import { useModal, useDisabled, useReadonly } from '../../hooks'\n import { PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE } from '../form'\n import { qdUploadAcceptMap } from './config'\n import { qdDictConvStrSeparator } from '../dict/tag/props'\n\n defineOptions({\n name: 'QdUpload'\n })\n\n type Props = QdUploadProps<F, OR, OP, TOP, UR, UP, TUP, DR, DP, TDP>\n\n const props = withDefaults(defineProps<Props>(), qdUploadProps)\n const emit = defineEmits<{\n 'update:modelValue': [Props['modelValue']]\n 'update:files': [Props['files']]\n }>()\n const { modelValue, files: fileList } = useVModels<typeof props, keyof typeof emit>(props, emit, {\n passive: true\n })\n\n const reModelValue = computed({\n get: () => {\n const { convStr } = reProps.value\n const value = modelValue.value\n if (isEmpty(value)) return []\n if (typeof value === 'string') {\n return value.split((typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator)\n }\n\n return value\n },\n set: (val) => {\n const { convStr } = reProps.value\n if (convStr) {\n modelValue.value = val.join(\n (typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator\n )\n return\n }\n\n modelValue.value = val\n }\n })\n\n const formAddBeforeSubmitQueue = inject(PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE, undefined)\n const { t } = useConfig('upload')\n const tdReadonly = useReadonly()\n const tdDisabled = useDisabled()\n const { msgError, msgWarning } = useModal()\n const uploadRef = useTemplateRef<UploadInstanceFunctions>('upload')\n const { timer: uploadTimer, clearTimer: clearUploadTimer } = useTimer('interval')\n\n const delList = ref<(string | number)[]>([])\n\n const popupFileList = computed(() => [...fileList.value])\n\n const globalUploadProps = inject(\n PROVIDE_UPLOAD,\n computed(() => undefined)\n )\n const reProps = computed(() => {\n const {\n modelValue,\n files,\n convStr,\n valueMode,\n theme,\n sizeLimit,\n accept,\n multiple,\n disabled,\n beforeUpload,\n onValidate,\n formatResponse,\n onSuccess,\n onRemove,\n\n onlyView,\n listOssByIds,\n listOssByUrls,\n del,\n\n action,\n bucketConfigKey,\n showImageFileName,\n showUploadProgress,\n showThumbnail,\n draggable,\n\n showManualButton,\n ...uploadOptions\n } = props\n const globalUploadPropsV = globalUploadProps.value\n\n const reAction = action || globalUploadPropsV?.action\n const actionUrl = typeof reAction === 'string' ? reAction : reAction?.(bucketConfigKey)\n\n const reSizeLimit = easyCopy(qdUploadSizeLimit) as SizeLimitObj | undefined\n if (reSizeLimit) {\n if (typeof sizeLimit === 'number') {\n reSizeLimit.size = sizeLimit\n reSizeLimit.message = t('sizeLimitMessage')\n } else {\n Object.assign(reSizeLimit, { message: t('sizeLimitMessage') }, sizeLimit)\n }\n }\n\n const reAccept = accept\n ? accept\n : theme.includes('image')\n ? qdUploadAcceptMap.image\n : qdUploadAcceptMap.default\n const acceptStr = reAccept.join(',')\n\n const reBeforeUpload: typeof beforeUpload = (file) => {\n if (beforeUpload) return beforeUpload(file)\n\n if (reAccept && !isTypeByName(file.name, reAccept)) {\n msgError(\n `${t('fileFormatNotSupportedMessage')[0]} ${reAccept} ${t('fileFormatNotSupportedMessage')[1]}`\n )\n return false\n }\n\n return true\n }\n\n const reOnValidate: typeof onValidate = (context) => {\n if (onValidate) {\n onValidate(context)\n return\n }\n\n switch (context.type) {\n case 'FILES_OVER_LENGTH_LIMIT':\n msgWarning(`${t('maxUploadMessage')[0]}${props.max}${t('maxUploadMessage')[1]}`)\n break\n case 'FILTER_FILE_SAME_NAME':\n msgWarning(t('sameNameMessage'))\n break\n case 'FILE_OVER_SIZE_LIMIT':\n msgWarning(`${context.files.map((t) => t.name).join(',')} ${t('fileSizeExceedsLimit')}`)\n break\n }\n }\n\n const reFormatResponse: typeof formatResponse = (res, context) => {\n if (formatResponse) return formatResponse(res, context)\n\n if (res.code === 200) {\n const { url, ossId, fileName, uploadTime } = res.data || {}\n return {\n success: true,\n url,\n name: fileName,\n ossId,\n uploadTime: uploadTime || dayjs().format('YYYY-MM-DD HH:mm:ss')\n }\n }\n\n return { status: 'fail', error: res.message || res.msg || t('fileUploadFailed') }\n }\n\n const reOnSuccess: typeof onSuccess = (context) => {\n onSuccess?.(context)\n updateModelValue(fileList.value)\n }\n\n const reOnRemove: typeof onRemove = (context) => {\n onRemove?.(context)\n const { ossId } = context.file?.response || {}\n\n if (ossId) {\n if (props.autoUpload) to(handleDel(ossId))\n else addDel(ossId)\n }\n\n updateModelValue(fileList.value)\n }\n\n const handlePopupRemove: typeof onRemove = (context) => {\n reOnRemove(context)\n if (isEmpty(context.index)) return\n\n fileList.value.splice(context.index, 1)\n }\n\n const reUploadOptions = {\n action: actionUrl,\n theme: ['custom', 'file', 'file-input', 'file-flow', 'image', 'image-flow'].includes(theme)\n ? theme\n : 'custom',\n sizeLimit: reSizeLimit,\n accept: acceptStr,\n multiple: multiple ?? props.max !== 1,\n disabled: onlyView ? true : (disabled ?? (tdDisabled.value || tdReadonly.value)),\n beforeUpload: reBeforeUpload,\n onValidate: reOnValidate,\n formatResponse: reFormatResponse,\n onSuccess: reOnSuccess,\n onRemove: reOnRemove,\n showImageFileName: onlyView ? false : showImageFileName,\n showUploadProgress: onlyView ? false : showUploadProgress,\n showThumbnail: onlyView ? true : showThumbnail,\n draggable: onlyView ? false : draggable,\n ...uploadOptions\n } as TdUploadProps\n\n if (globalUploadPropsV) {\n Object.entries(globalUploadPropsV).forEach(([key, value]) => {\n if (['action'].includes(key) || isEmpty(value)) return\n ;(reUploadOptions as Record<string, unknown>)[key] = value\n })\n }\n\n return {\n theme,\n convStr,\n valueMode,\n accept,\n handlePopupRemove,\n onlyView,\n listOssByIds: {\n ...globalUploadPropsV?.listOssByIds,\n ...listOssByIds\n } as Props['listOssByIds'],\n listOssByUrls: {\n ...globalUploadPropsV?.listOssByUrls,\n ...listOssByUrls\n } as Props['listOssByUrls'],\n del: { ...globalUploadPropsV?.del, ...del } as Props['del'],\n showManualButton,\n uploadOptions: reUploadOptions,\n models: {\n modelValue,\n files\n }\n }\n })\n\n const popupUploadTheme = computed(() => {\n switch (props.theme) {\n case 'btn-image-popup':\n return 'image'\n default:\n return 'file-flow'\n }\n })\n\n const expose = {} as QdUploadInstanceFunctions\n\n const uploadFiles: QdUploadInstanceFunctions['uploadFiles'] = (options) => {\n uploadRef.value?.uploadFiles(options?.files)\n\n return new Promise((resolve, reject) => {\n uploadTimer.value = setInterval(() => {\n const isFinished = fileList.value.every((item) => item.status !== 'progress')\n if (!isFinished) return\n\n clearUploadTimer()\n updateModelValue(fileList.value)\n\n const errorList = fileList.value.filter((item) => item.status === 'fail')\n if (errorList.length) {\n const msg = `${errorList.map((item) => item.name).join(',')} ${t('fileUploadFailed')}`\n if (options?.showErrorMessage !== false) {\n msgError(msg)\n }\n reject(new Error(msg))\n return\n }\n\n resolve(fileList.value)\n }, 100)\n })\n }\n\n function updateModelValue(files: UploadFile[]) {\n const tempModelValue: typeof reModelValue.value = []\n files.forEach((item) => {\n if (item.status !== 'success') return\n tempModelValue.push(item.response![reProps.value.valueMode])\n })\n reModelValue.value = tempModelValue\n }\n\n async function handleDel(\n ossId: string | number | (string | number)[],\n showErrorMessage?: boolean\n ) {\n const { del } = reProps.value\n if (!del) return\n\n const { service, transformParams, transformRes } = del\n\n const currentParams = ossId\n let tParams: TDP | undefined\n\n if (transformParams) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformParams(currentParams as DP))\n if (trErr) throw trErr\n\n tParams = trRes\n }\n\n const [serviceErr, serviceRes] = await to(service(tParams || (currentParams as unknown as TDP)))\n if (serviceErr) throw serviceErr\n\n let res: QdUploadDeleteResult | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n res = trRes\n } else {\n res = serviceRes as QdUploadDeleteResult\n }\n\n if (typeof res === 'boolean') {\n res = { success: res, message: '' }\n }\n\n if (!res) {\n res = { success: true, message: '' }\n }\n\n const message = res.message\n if (res.success === false) {\n if (message && showErrorMessage !== false) msgError(message)\n throw new Error(message)\n }\n }\n\n async function addDel(ossId: string | number) {\n delList.value.push(ossId)\n }\n\n async function getOssByIds(ossId: string | number | (string | number)[]) {\n const { listOssByIds } = reProps.value\n if (!listOssByIds) return []\n\n const { service, transformParams, transformRes } = listOssByIds\n\n const currentParams = ossId\n let tParams: TOP | undefined\n\n if (transformParams) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformParams(currentParams as OP))\n if (trErr) throw trErr\n\n tParams = trRes\n }\n\n const [serviceErr, serviceRes] = await to(service(tParams || (currentParams as unknown as TOP)))\n if (serviceErr) throw serviceErr\n\n let res: QdUploadListOssByIdsResult | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n res = trRes\n } else {\n res = serviceRes as QdUploadListOssByIdsResult\n }\n\n return res\n }\n\n async function getOssByUrls(ossId: string | string[]) {\n const { listOssByUrls } = reProps.value\n if (!listOssByUrls) return []\n\n const { service, transformParams, transformRes } = listOssByUrls\n\n const currentParams = ossId\n let tParams: TUP | undefined\n\n if (transformParams) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformParams(currentParams as UP))\n if (trErr) throw trErr\n\n tParams = trRes\n }\n\n const [serviceErr, serviceRes] = await to(service(tParams || (currentParams as unknown as TUP)))\n if (serviceErr) throw serviceErr\n\n let res: QdUploadListOssByIdsResult | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n res = trRes\n } else {\n res = serviceRes as QdUploadListOssByIdsResult\n }\n\n return res\n }\n\n async function uploadBeforeFormSubmit() {\n const [err] = await to(uploadFiles({ showErrorMessage: false }))\n if (err) return { success: false, message: err.message }\n return true\n }\n\n async function delBeforeFormSubmit() {\n if (!delList.value.length) return true\n\n const [err] = await to(handleDel(delList.value, false))\n if (err) return true\n return true\n }\n\n formAddBeforeSubmitQueue?.(uploadBeforeFormSubmit)\n formAddBeforeSubmitQueue?.(delBeforeFormSubmit)\n\n watch(\n reModelValue,\n async (newVal, oldVal) => {\n if (checkSameObject(newVal, oldVal)) return\n if (!newVal.length) {\n fileList.value = []\n return\n }\n if (fileList.value.length === newVal.length) return\n\n const { valueMode } = reProps.value\n const apiFn = valueMode === 'url' ? getOssByUrls : getOssByIds\n const [err, res] = await to(apiFn(newVal))\n if (err) return\n\n fileList.value = res.map((item) => {\n const { url, ossId, originalName, fileSize, contentType, createTime } = item\n\n return {\n url,\n uid: ossId,\n name: originalName,\n size: fileSize,\n type: contentType,\n uploadTime: createTime,\n response: { status: 'success', url, ossId, name: originalName, uploadTime: createTime },\n status: 'success'\n }\n }) as unknown as F[]\n },\n { deep: true, immediate: true }\n )\n\n onMounted(() => {\n Object.assign(expose, uploadRef.value, { uploadFiles })\n })\n\n defineExpose(expose)\n</script>\n\n<style lang=\"less\" scoped>\n .qd-upload {\n width: 100%;\n outline: none;\n\n :deep(.t-image-viewer__trigger) {\n display: none;\n }\n\n :deep(.t-upload) {\n &__dragger {\n min-width: auto;\n min-height: 144px;\n width: 100%;\n height: 100%;\n }\n\n &__flow {\n width: 100%;\n min-width: auto;\n max-width: 100%;\n\n &-empty {\n height: auto;\n min-height: 144px;\n }\n\n &-card-area,\n &-table {\n margin-top: var(--td-comp-margin-s);\n }\n }\n }\n\n &__popup-upload {\n :deep(.t-image-viewer__trigger) {\n display: none;\n }\n\n :deep(.t-upload) {\n &__flow-table {\n margin-top: 0;\n }\n }\n\n &--disabled {\n :deep(.t-upload) {\n &__flow-table {\n th:last-child,\n td:last-child {\n display: none;\n }\n }\n }\n }\n }\n\n &:focus {\n :deep(.t-upload__flow-card-area),\n :deep(.t-upload__flow-table) {\n border-color: var(--td-brand-color);\n }\n }\n\n &--only-view {\n :deep(.t-upload) {\n &__flow-empty,\n &__card-mask-item-divider {\n display: none;\n }\n\n &__flow-card-area {\n border-color: var(--td-component-border);\n }\n }\n\n &:not(.qd-upload--btn-image-popup):not(.qd-upload--btn-file-popup) {\n :deep(.t-upload) {\n &__flow-op,\n &__trigger,\n &__flow-bottom {\n display: none;\n }\n\n &__flow-table,\n &__flow-card-area {\n margin-top: 0;\n }\n\n &__card {\n .t-upload__card-item.t-is-background:last-child {\n display: none;\n }\n }\n }\n }\n }\n\n &--hide-manual-upload {\n :deep(.t-upload) {\n &__flow-bottom {\n display: none;\n margin-top: 0;\n }\n }\n }\n\n &--hide-progress {\n :deep(.t-upload) {\n &__flow-table {\n th:last-child,\n td:last-child {\n display: none;\n }\n }\n }\n }\n\n &--disabled {\n :deep(.t-upload__flow-card-area) {\n border-color: var(--td-component-border);\n }\n }\n }\n</style>\n"],"names":["modelValue","t","dayjs","_openBlock","_createBlock","_unref","_mergeProps","_createSlots","TSpace","TButton","_createVNode","_toDisplayString","TPopup","TUpload","_normalizeClass","_createElementVNode","TBadge","_createTextVNode","$slots","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.vue2.mjs","sources":["../../../src/components/upload/index.vue"],"sourcesContent":["<template>\n <t-upload\n ref=\"upload\"\n :class=\"[\n 'qd-upload',\n `qd-upload--${reProps.theme}`,\n reProps.onlyView ? 'qd-upload--only-view' : '',\n !reProps.uploadOptions.showUploadProgress && reProps.onlyView\n ? 'qd-upload--hide-progress'\n : '',\n !reProps.uploadOptions.autoUpload && reProps.showManualButton\n ? ''\n : 'qd-upload--hide-manual-upload',\n reProps.uploadOptions.disabled ? 'qd-upload--disabled' : ''\n ]\"\n v-model:files=\"fileList\"\n :tabindex=\"reProps.onlyView || reProps.uploadOptions.disabled ? '' : '0'\"\n v-bind=\"reProps.uploadOptions\"\n >\n <template v-if=\"['btn-file-popup', 'btn-image-popup'].includes(theme)\">\n <t-space align=\"center\" size=\"small\">\n <t-button\n v-if=\"!reProps.onlyView\"\n variant=\"outline\"\n :disabled=\"reProps.uploadOptions.disabled\"\n >\n <template #icon><upload-icon /></template>\n {{\n !fileList.length\n ? t('triggerUploadText').fileInput\n : reProps.uploadOptions.max === 1 || !reProps.uploadOptions.multiple\n ? t('triggerUploadText').reupload\n : t('triggerUploadText').continueUpload\n }}\n </t-button>\n\n <t-popup v-if=\"fileList.length\" show-arrow trigger=\"click\">\n <t-badge :count=\"fileList.length\" size=\"small\" :offset=\"[2, 2]\" @click.stop>\n <t-button variant=\"outline\">\n <template #icon><browse-icon /></template>\n {{ t('viewFileText') }}\n </t-button>\n </t-badge>\n\n <template #content>\n <t-upload\n :class=\"[\n 'qd-upload__popup-upload',\n reProps.uploadOptions.disabled ? 'qd-upload__popup-upload--disabled' : ''\n ]\"\n v-model:files=\"popupFileList\"\n :theme=\"popupUploadTheme\"\n :disabled=\"reProps.uploadOptions.disabled\"\n :on-remove=\"reProps.handlePopupRemove\"\n :show-thumbnail=\"reProps.uploadOptions.showThumbnail\"\n :show-image-file-name=\"reProps.uploadOptions.showImageFileName\"\n :show-upload-progress=\"reProps.uploadOptions.showUploadProgress\"\n >\n <template #trigger><span style=\"display: none\"></span></template>\n </t-upload>\n </template>\n </t-popup>\n </t-space>\n </template>\n\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps\" />\n </template>\n </t-upload>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n F extends UploadFile = UploadFile,\n OR = unknown,\n OP extends string | number | (string | number)[] = string | number | (string | number)[],\n TOP = OP,\n UR = unknown,\n UP extends string | string[] = string | string[],\n TUP = UP,\n DR = unknown,\n DP extends string | number | (string | number)[] = string | number | (string | number)[],\n TDP = DP\n \"\n>\n import type {\n SizeLimitObj,\n TdUploadProps,\n UploadFile,\n UploadInstanceFunctions\n } from 'tdesign-vue-next'\n import type {\n QdUploadDeleteResult,\n QdUploadInstanceFunctions,\n QdUploadListOssByIdsResult,\n QdUploadProps\n } from './types'\n import { qdUploadProps, qdUploadSizeLimit } from './props'\n import { useVModels } from '@vueuse/core'\n import { computed, inject, onMounted, useTemplateRef, ref, watch } from 'vue'\n import {\n Upload as TUpload,\n Button as TButton,\n Popup as TPopup,\n Space as TSpace,\n Badge as TBadge\n } from 'tdesign-vue-next'\n import { UploadIcon, BrowseIcon } from 'tdesign-icons-vue-next'\n import {\n checkSameObject,\n easyCopy,\n isEmpty,\n isTypeByName,\n suspectedWrapperPromise,\n to,\n useTimer\n } from 'qidian-shared'\n import dayjs from 'dayjs'\n import { PROVIDE_UPLOAD } from '../config-provider/config'\n import { useConfig } from '../config-provider/useConfig'\n import { useModal, useDisabled, useReadonly } from '../../hooks'\n import { PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE, PROVIDE_FORM_RESET_QUEUE } from '../form'\n import { qdUploadAcceptMap } from './config'\n import { qdDictConvStrSeparator } from '../dict/tag/props'\n\n defineOptions({\n name: 'QdUpload'\n })\n\n type Props = QdUploadProps<F, OR, OP, TOP, UR, UP, TUP, DR, DP, TDP>\n\n const props = withDefaults(defineProps<Props>(), qdUploadProps)\n const emit = defineEmits<{\n 'update:modelValue': [Props['modelValue']]\n 'update:files': [Props['files']]\n }>()\n const { modelValue, files: fileList } = useVModels<typeof props, keyof typeof emit>(props, emit, {\n passive: true\n })\n\n const reModelValue = computed({\n get: () => {\n const { convStr } = reProps.value\n const value = modelValue.value\n if (isEmpty(value)) return []\n if (typeof value === 'string') {\n return value.split((typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator)\n }\n\n return value\n },\n set: (val) => {\n const { convStr } = reProps.value\n if (convStr) {\n modelValue.value = val.join(\n (typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator\n )\n return\n }\n\n modelValue.value = val\n }\n })\n\n const formAddBeforeSubmitQueue = inject(PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE, undefined)\n const formResetQueue = inject(PROVIDE_FORM_RESET_QUEUE, undefined)\n const { t } = useConfig('upload')\n const tdReadonly = useReadonly()\n const tdDisabled = useDisabled()\n const { msgError, msgWarning } = useModal()\n const uploadRef = useTemplateRef<UploadInstanceFunctions>('upload')\n const { timer: uploadTimer, clearTimer: clearUploadTimer } = useTimer('interval')\n\n const delList = ref<(string | number)[]>([])\n\n const popupFileList = computed(() => [...fileList.value])\n\n const globalUploadProps = inject(\n PROVIDE_UPLOAD,\n computed(() => undefined)\n )\n const reProps = computed(() => {\n const {\n modelValue,\n files,\n convStr,\n valueMode,\n theme,\n sizeLimit,\n accept,\n multiple,\n disabled,\n beforeUpload,\n onValidate,\n formatResponse,\n onSuccess,\n onRemove,\n\n onlyView,\n listOssByIds,\n listOssByUrls,\n del,\n\n action,\n bucketConfigKey,\n showImageFileName,\n showUploadProgress,\n showThumbnail,\n draggable,\n\n showManualButton,\n ...uploadOptions\n } = props\n const globalUploadPropsV = globalUploadProps.value\n\n const reAction = action || globalUploadPropsV?.action\n const actionUrl = typeof reAction === 'string' ? reAction : reAction?.(bucketConfigKey)\n\n const reSizeLimit = easyCopy(qdUploadSizeLimit) as SizeLimitObj | undefined\n if (reSizeLimit) {\n if (typeof sizeLimit === 'number') {\n reSizeLimit.size = sizeLimit\n reSizeLimit.message = t('sizeLimitMessage')\n } else {\n Object.assign(reSizeLimit, { message: t('sizeLimitMessage') }, sizeLimit)\n }\n }\n\n const reAccept = accept\n ? accept\n : theme.includes('image')\n ? qdUploadAcceptMap.image\n : qdUploadAcceptMap.default\n const acceptStr = reAccept.join(',')\n\n const reBeforeUpload: typeof beforeUpload = (file) => {\n if (beforeUpload) return beforeUpload(file)\n\n if (reAccept && !isTypeByName(file.name, reAccept)) {\n msgError(\n `${t('fileFormatNotSupportedMessage')[0]} ${reAccept} ${t('fileFormatNotSupportedMessage')[1]}`\n )\n return false\n }\n\n return true\n }\n\n const reOnValidate: typeof onValidate = (context) => {\n if (onValidate) {\n onValidate(context)\n return\n }\n\n switch (context.type) {\n case 'FILES_OVER_LENGTH_LIMIT':\n msgWarning(`${t('maxUploadMessage')[0]}${props.max}${t('maxUploadMessage')[1]}`)\n break\n case 'FILTER_FILE_SAME_NAME':\n msgWarning(t('sameNameMessage'))\n break\n case 'FILE_OVER_SIZE_LIMIT':\n msgWarning(`${context.files.map((t) => t.name).join(',')} ${t('fileSizeExceedsLimit')}`)\n break\n }\n }\n\n const reFormatResponse: typeof formatResponse = (res, context) => {\n if (formatResponse) return formatResponse(res, context)\n\n if (res.code === 200) {\n const { url, ossId, fileName, uploadTime } = res.data || {}\n return {\n success: true,\n url,\n name: fileName,\n ossId,\n uploadTime: uploadTime || dayjs().format('YYYY-MM-DD HH:mm:ss')\n }\n }\n\n return { status: 'fail', error: res.message || res.msg || t('fileUploadFailed') }\n }\n\n const reOnSuccess: typeof onSuccess = (context) => {\n onSuccess?.(context)\n updateModelValue(fileList.value)\n }\n\n const reOnRemove: typeof onRemove = (context) => {\n onRemove?.(context)\n const { ossId } = context.file?.response || {}\n\n if (ossId) {\n if (props.autoUpload) to(handleDel(ossId))\n else addDel(ossId)\n }\n\n updateModelValue(fileList.value)\n }\n\n const handlePopupRemove: typeof onRemove = (context) => {\n reOnRemove(context)\n if (isEmpty(context.index)) return\n\n fileList.value.splice(context.index, 1)\n }\n\n const reUploadOptions = {\n ...uploadOptions,\n action: actionUrl,\n theme: ['custom', 'file', 'file-input', 'file-flow', 'image', 'image-flow'].includes(theme)\n ? theme\n : 'custom',\n sizeLimit: reSizeLimit,\n accept: acceptStr,\n multiple: multiple ?? props.max !== 1,\n disabled: onlyView ? true : (disabled ?? (tdDisabled.value || tdReadonly.value)),\n beforeUpload: reBeforeUpload,\n onValidate: reOnValidate,\n formatResponse: reFormatResponse,\n onSuccess: reOnSuccess,\n onRemove: reOnRemove,\n showImageFileName: onlyView ? false : showImageFileName,\n showUploadProgress: onlyView ? false : showUploadProgress,\n showThumbnail: onlyView ? true : showThumbnail,\n draggable: onlyView ? false : draggable\n } as TdUploadProps\n\n if (globalUploadPropsV) {\n Object.entries(globalUploadPropsV).forEach(([key, value]) => {\n if (['action'].includes(key) || isEmpty(value)) return\n ;(reUploadOptions as Record<string, unknown>)[key] = value\n })\n }\n\n return {\n theme,\n convStr,\n valueMode,\n accept,\n handlePopupRemove,\n onlyView,\n listOssByIds: {\n ...globalUploadPropsV?.listOssByIds,\n ...listOssByIds\n } as Props['listOssByIds'],\n listOssByUrls: {\n ...globalUploadPropsV?.listOssByUrls,\n ...listOssByUrls\n } as Props['listOssByUrls'],\n del: { ...globalUploadPropsV?.del, ...del } as Props['del'],\n showManualButton,\n uploadOptions: reUploadOptions,\n models: {\n modelValue,\n files\n }\n }\n })\n\n const popupUploadTheme = computed(() => {\n switch (props.theme) {\n case 'btn-image-popup':\n return 'image'\n default:\n return 'file-flow'\n }\n })\n\n const expose = {} as QdUploadInstanceFunctions\n\n const uploadFiles: QdUploadInstanceFunctions['uploadFiles'] = (options) => {\n uploadRef.value?.uploadFiles(options?.files)\n\n return new Promise((resolve, reject) => {\n uploadTimer.value = setInterval(() => {\n const isFinished = fileList.value.every((item) => item.status !== 'progress')\n if (!isFinished) return\n\n clearUploadTimer()\n updateModelValue(fileList.value)\n\n const errorList = fileList.value.filter((item) => item.status === 'fail')\n if (errorList.length) {\n const msg = `${errorList.map((item) => item.name).join(',')} ${t('fileUploadFailed')}`\n if (options?.showErrorMessage !== false) {\n msgError(msg)\n }\n reject(new Error(msg))\n return\n }\n\n resolve(fileList.value)\n }, 100)\n })\n }\n\n function updateModelValue(files: UploadFile[]) {\n const tempModelValue: typeof reModelValue.value = []\n files.forEach((item) => {\n if (item.status !== 'success') return\n tempModelValue.push(item.response![reProps.value.valueMode])\n })\n reModelValue.value = tempModelValue\n }\n\n async function handleDel(\n ossId: string | number | (string | number)[],\n showErrorMessage?: boolean\n ) {\n const { del } = reProps.value\n if (!del) return\n\n const { service, transformParams, transformRes } = del\n\n const currentParams = ossId\n let tParams: TDP | undefined\n\n if (transformParams) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformParams(currentParams as DP))\n if (trErr) throw trErr\n\n tParams = trRes\n }\n\n const [serviceErr, serviceRes] = await to(service(tParams || (currentParams as unknown as TDP)))\n if (serviceErr) throw serviceErr\n\n let res: QdUploadDeleteResult | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n res = trRes\n } else {\n res = serviceRes as QdUploadDeleteResult\n }\n\n if (typeof res === 'boolean') {\n res = { success: res, message: '' }\n }\n\n if (!res) {\n res = { success: true, message: '' }\n }\n\n const message = res.message\n if (res.success === false) {\n if (message && showErrorMessage !== false) msgError(message)\n throw new Error(message)\n }\n }\n\n async function addDel(ossId: string | number) {\n delList.value.push(ossId)\n }\n\n async function getOssByIds(ossId: string | number | (string | number)[]) {\n const { listOssByIds } = reProps.value\n if (!listOssByIds) return []\n\n const { service, transformParams, transformRes } = listOssByIds\n\n const currentParams = ossId\n let tParams: TOP | undefined\n\n if (transformParams) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformParams(currentParams as OP))\n if (trErr) throw trErr\n\n tParams = trRes\n }\n\n const [serviceErr, serviceRes] = await to(service(tParams || (currentParams as unknown as TOP)))\n if (serviceErr) throw serviceErr\n\n let res: QdUploadListOssByIdsResult | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n res = trRes\n } else {\n res = serviceRes as QdUploadListOssByIdsResult\n }\n\n return res\n }\n\n async function getOssByUrls(ossId: string | string[]) {\n const { listOssByUrls } = reProps.value\n if (!listOssByUrls) return []\n\n const { service, transformParams, transformRes } = listOssByUrls\n\n const currentParams = ossId\n let tParams: TUP | undefined\n\n if (transformParams) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformParams(currentParams as UP))\n if (trErr) throw trErr\n\n tParams = trRes\n }\n\n const [serviceErr, serviceRes] = await to(service(tParams || (currentParams as unknown as TUP)))\n if (serviceErr) throw serviceErr\n\n let res: QdUploadListOssByIdsResult | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n res = trRes\n } else {\n res = serviceRes as QdUploadListOssByIdsResult\n }\n\n return res\n }\n\n async function uploadBeforeFormSubmit() {\n const [err] = await to(uploadFiles({ showErrorMessage: false }))\n if (err) return { success: false, message: err.message }\n return true\n }\n\n async function delBeforeFormSubmit() {\n if (!delList.value.length) return true\n\n const [err] = await to(handleDel(delList.value, false))\n if (err) return true\n return true\n }\n\n function clear() {\n reModelValue.value = []\n fileList.value = []\n }\n\n formAddBeforeSubmitQueue?.(uploadBeforeFormSubmit)\n formAddBeforeSubmitQueue?.(delBeforeFormSubmit)\n formResetQueue?.(clear)\n\n watch(\n reModelValue,\n async (newVal, oldVal) => {\n if (checkSameObject(newVal, oldVal)) return\n if (!newVal.length) {\n fileList.value = []\n return\n }\n if (fileList.value.length === newVal.length) return\n\n const { valueMode } = reProps.value\n const apiFn = valueMode === 'url' ? getOssByUrls : getOssByIds\n const [err, res] = await to(apiFn(newVal))\n if (err) return\n\n fileList.value = res.map((item) => {\n const { url, ossId, originalName, fileSize, contentType, createTime } = item\n\n return {\n url,\n uid: ossId,\n name: originalName,\n size: fileSize,\n type: contentType,\n uploadTime: createTime,\n response: { status: 'success', url, ossId, name: originalName, uploadTime: createTime },\n status: 'success'\n }\n }) as unknown as F[]\n },\n { deep: true, immediate: true }\n )\n\n onMounted(() => {\n Object.assign(expose, uploadRef.value, { uploadFiles, clear })\n })\n\n defineExpose(expose)\n</script>\n\n<style lang=\"less\" scoped>\n .qd-upload {\n width: 100%;\n outline: none;\n\n :deep(.t-image-viewer__trigger) {\n display: none;\n }\n\n :deep(.t-upload) {\n &__dragger {\n min-width: auto;\n min-height: 144px;\n width: 100%;\n height: 100%;\n }\n\n &__flow {\n width: 100%;\n min-width: auto;\n max-width: 100%;\n\n &-empty {\n height: auto;\n min-height: 144px;\n }\n\n &-card-area,\n &-table {\n margin-top: var(--td-comp-margin-s);\n }\n }\n }\n\n &__popup-upload {\n :deep(.t-image-viewer__trigger) {\n display: none;\n }\n\n :deep(.t-upload) {\n &__flow-table {\n margin-top: 0;\n }\n }\n\n &--disabled {\n :deep(.t-upload) {\n &__flow-table {\n th:last-child,\n td:last-child {\n display: none;\n }\n }\n }\n }\n }\n\n &:focus {\n :deep(.t-upload__flow-card-area),\n :deep(.t-upload__flow-table) {\n border-color: var(--td-brand-color);\n }\n }\n\n &--only-view {\n :deep(.t-upload) {\n &__flow-empty,\n &__card-mask-item-divider {\n display: none;\n }\n\n &__flow-card-area {\n border-color: var(--td-component-border);\n }\n }\n\n &:not(.qd-upload--btn-image-popup):not(.qd-upload--btn-file-popup) {\n :deep(.t-upload) {\n &__flow-op,\n &__trigger,\n &__flow-bottom {\n display: none;\n }\n\n &__flow-table,\n &__flow-card-area {\n margin-top: 0;\n }\n\n &__card {\n .t-upload__card-item.t-is-background:last-child {\n display: none;\n }\n }\n }\n }\n }\n\n &--hide-manual-upload {\n :deep(.t-upload) {\n &__flow-bottom {\n display: none;\n margin-top: 0;\n }\n }\n }\n\n &--hide-progress {\n :deep(.t-upload) {\n &__flow-table {\n th:last-child,\n td:last-child {\n display: none;\n }\n }\n }\n }\n\n &--disabled {\n :deep(.t-upload__flow-card-area) {\n border-color: var(--td-component-border);\n }\n }\n }\n</style>\n"],"names":["modelValue","t","dayjs","_openBlock","_createBlock","_unref","_mergeProps","_createSlots","TSpace","TButton","_createVNode","_toDisplayString","TPopup","TUpload","_normalizeClass","_createElementVNode","TBadge","_createTextVNode","$slots","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
|