This commit is contained in:
2024-10-16 15:13:17 +08:00
parent 0c04f452ee
commit c7f2091874
8 changed files with 1223 additions and 1509 deletions

View File

@@ -74,6 +74,26 @@ export interface UploadProps {
modelValue?: any;
auto?: boolean;
sizeOutMsg?: string;
quality?: number;
}
function imgcomp(file: File) {
return new Promise((resolve, reject) => {
var options = {
file: file,
quality: 0.6,
mimeType: "image/jpeg",
maxWidth: 2000,
maxHeight: 2000,
convertSize: Infinity,
loose: true,
redressOrientation: true,
success: function (result) {
resolve(result);
},
};
new ImageCompressor(options);
});
}
const getCutDownResult = () => {
@@ -165,7 +185,7 @@ const props = withDefaults(defineProps<UploadProps>(), {
cut: false,
cutOptions: void 0,
modelValue: null,
auto: true,
auto: true
});
const slot = useSlots();
@@ -220,7 +240,7 @@ interface localUploadOption {
const innerCutVisible = ref<boolean>(false);
const localUploadTransaction = (option: localUploadTransaction) => {
const localUploadTransaction = async (option: localUploadTransaction) => {
const { url, files } = option;
let formData = new FormData();
if (url.length <= 5) {
@@ -230,7 +250,8 @@ const localUploadTransaction = (option: localUploadTransaction) => {
if (Array.isArray(files) && files.length > 0) {
for (let i = 0; i < files.length; i++) {
let _file = files[i];
formData.append(props.field + "[" + i + "]", _file);
let f = await imgcomp(_file);
formData.append(props.field + "[" + i + "]", f);
}
}
if (props.data && props.data instanceof Object) {
@@ -266,7 +287,7 @@ const errorF = (errorText: string) => {
let errorMsg = errorText ? errorText : defaultErrorMsg;
errorMsg = `${errorMsg}`;
console.warn(errorMsg);
layer.msg(errorMsg, { icon: 2, time: 1000 }, function (res: unknown) {});
layer.msg(errorMsg, { icon: 2, time: 1000 }, function (res: unknown) { });
emit("error", Object.assign({ currentTimeStamp, msg: errorMsg }));
};
@@ -443,22 +464,9 @@ onUnmounted(() => {
</script>
<template>
<div
class="layui-upload layui-upload-wrap"
:class="disabledPreview ? 'layui-upload-file-disabled' : ''"
>
<input
type="file"
class="layui-upload-file"
ref="orgFileInput"
:name="field"
:field="field"
:multiple="multiple"
:accept="acceptMime"
:disabled="disabled"
@click="clickOrgInput"
@change="uploadChange"
/>
<div class="layui-upload layui-upload-wrap" :class="disabledPreview ? 'layui-upload-file-disabled' : ''">
<input type="file" class="layui-upload-file" ref="orgFileInput" :name="field" :field="field" :multiple="multiple"
:accept="acceptMime" :disabled="disabled" @click="clickOrgInput" @change="uploadChange" />
<div v-if="!drag">
<div class="layui-upload-btn-box" @click.stop="chooseFile">
<template v-if="slot.default">
@@ -471,19 +479,12 @@ onUnmounted(() => {
</template>
</div>
</div>
<div
v-else
ref="dragRef"
class="layui-upload-drag"
:class="
disabled
? 'layui-upload-drag-disable'
: isDragEnter
<div v-else ref="dragRef" class="layui-upload-drag" :class="disabled
? 'layui-upload-drag-disable'
: isDragEnter
? 'layui-upload-drag-draging'
: ''
"
@click.stop="chooseFile"
>
" @click.stop="chooseFile">
<i class="layui-icon"></i>
<p>{{ dragText }}</p>
<div class="layui-hide" id="uploadDemoView">
@@ -491,38 +492,17 @@ onUnmounted(() => {
<img src="" alt="上传成功后渲染" style="max-width: 196px" />
</div>
</div>
<lay-layer
v-model="innerCutVisible"
:title="computedCutLayerOption.title"
:move="computedCutLayerOption.move"
:resize="computedCutLayerOption.resize"
:shade="computedCutLayerOption.shade"
:shadeClose="computedCutLayerOption.shadeClose"
:shadeOpacity="computedCutLayerOption.shadeOpacity"
:zIndex="computedCutLayerOption.zIndex"
:btnAlign="computedCutLayerOption.btnAlign"
:area="computedCutLayerOption.area"
:anim="computedCutLayerOption.anim"
:isOutAnim="computedCutLayerOption.isOutAnim"
:btn="computedCutLayerOption.btn"
@close="clearAllCutEffect"
>
<div
class="copper-container"
v-for="(base64str, index) in activeUploadFilesImgs"
:key="`file${index}`"
>
<img
:src="base64str"
:id="`_lay_upload_img${index}`"
class="_lay_upload_img"
/>
<lay-layer v-model="innerCutVisible" :title="computedCutLayerOption.title" :move="computedCutLayerOption.move"
:resize="computedCutLayerOption.resize" :shade="computedCutLayerOption.shade"
:shadeClose="computedCutLayerOption.shadeClose" :shadeOpacity="computedCutLayerOption.shadeOpacity"
:zIndex="computedCutLayerOption.zIndex" :btnAlign="computedCutLayerOption.btnAlign"
:area="computedCutLayerOption.area" :anim="computedCutLayerOption.anim"
:isOutAnim="computedCutLayerOption.isOutAnim" :btn="computedCutLayerOption.btn" @close="clearAllCutEffect">
<div class="copper-container" v-for="(base64str, index) in activeUploadFilesImgs" :key="`file${index}`">
<img :src="base64str" :id="`_lay_upload_img${index}`" class="_lay_upload_img" />
</div>
</lay-layer>
<div
class="layui-upload-list"
:class="disabledPreview ? 'layui-upload-list-disabled' : ''"
>
<div class="layui-upload-list" :class="disabledPreview ? 'layui-upload-list-disabled' : ''">
<slot name="preview"></slot>
</div>
</div>