♻️: 修正review项,提供withForm属性,修正相应文档部分

This commit is contained in:
LockingReal 2022-11-13 23:04:28 +08:00
parent 238ff5fc11
commit 0692717841
3 changed files with 31 additions and 67 deletions

View File

@ -72,6 +72,7 @@ export interface UploadProps {
text?: string; text?: string;
dragText?: string; dragText?: string;
modelValue?: any; modelValue?: any;
withForm?: boolean;
} }
const getCutDownResult = () => { const getCutDownResult = () => {
@ -85,7 +86,7 @@ const getCutDownResult = () => {
Object.assign({ currentTimeStamp, cutResult: imgData, orginal: orgInfo }) Object.assign({ currentTimeStamp, cutResult: imgData, orginal: orgInfo })
); );
let newFile = dataURLtoFile(imgData); let newFile = dataURLtoFile(imgData);
if (isInFormItem.value) { if (isInFormItem.value && props.withForm) {
emit("update:modelValue", [newFile]); emit("update:modelValue", [newFile]);
clearLightCutEffect(); clearLightCutEffect();
return; return;
@ -163,6 +164,7 @@ const props = withDefaults(defineProps<UploadProps>(), {
cut: false, cut: false,
cutOptions: void 0, cutOptions: void 0,
modelValue: null, modelValue: null,
withForm: false,
}); });
const slot = useSlots(); const slot = useSlots();
@ -178,7 +180,9 @@ const emit = defineEmits([
"update:modelValue", "update:modelValue",
]); ]);
const isInFormItem = computed(() => context?.parent?.type.name === 'LayFormItem'); const isInFormItem = computed(
() => context?.parent?.type.name === "LayFormItem"
);
watch( watch(
() => props.modelValue, () => props.modelValue,
@ -189,7 +193,6 @@ watch(
} }
); );
const isDragEnter = ref(false); const isDragEnter = ref(false);
const activeUploadFiles = ref<any[]>([]); const activeUploadFiles = ref<any[]>([]);
const activeUploadFilesImgs = ref<any[]>([]); const activeUploadFilesImgs = ref<any[]>([]);
@ -265,7 +268,7 @@ const errorF = (errorText: string) => {
let errorMsg = errorText ? errorText : defaultErrorMsg; let errorMsg = errorText ? errorText : defaultErrorMsg;
errorMsg = `layui-vue:${errorMsg}`; errorMsg = `layui-vue:${errorMsg}`;
console.warn(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 })); emit("error", Object.assign({ currentTimeStamp, msg: errorMsg }));
}; };
@ -351,13 +354,13 @@ const uploadChange = (e: any) => {
} }
let arm1 = let arm1 =
props.cut && props.cut &&
(props.acceptMime.indexOf("image") != -1 || isInFormItem.value) && props.acceptMime.indexOf("image") != -1 &&
props.multiple == false; props.multiple == false;
let arm2 = let arm2 =
props.cut && props.cut &&
(props.acceptMime.indexOf("image") != -1 || isInFormItem.value) && props.acceptMime.indexOf("image") != -1 &&
props.multiple == true; props.multiple == true;
if (arm1) { if (arm1) {
innerCutVisible.value = true; innerCutVisible.value = true;
setTimeout(() => { setTimeout(() => {
@ -376,7 +379,7 @@ const uploadChange = (e: any) => {
if (arm2) { if (arm2) {
console.warn(cannotSupportCutMsg.value); console.warn(cannotSupportCutMsg.value);
} }
if (isInFormItem.value) { if (isInFormItem.value && props.withForm) {
emit("update:modelValue", _files); emit("update:modelValue", _files);
return; return;
} }
@ -442,22 +445,9 @@ onUnmounted(() => {
</script> </script>
<template> <template>
<div <div class="layui-upload layui-upload-wrap" :class="disabledPreview ? 'layui-upload-file-disabled' : ''">
class="layui-upload layui-upload-wrap" <input type="file" class="layui-upload-file" ref="orgFileInput" :name="field" :field="field" :multiple="multiple"
:class="disabledPreview ? 'layui-upload-file-disabled' : ''" :accept="acceptMime" :disabled="disabled" @click="clickOrgInput" @change="uploadChange" />
>
<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 v-if="!drag">
<div class="layui-upload-btn-box" @click.stop="chooseFile"> <div class="layui-upload-btn-box" @click.stop="chooseFile">
<template v-if="slot.default"> <template v-if="slot.default">
@ -465,24 +455,18 @@ onUnmounted(() => {
</template> </template>
<template v-else> <template v-else>
<lay-button type="primary" :disabled="disabled">{{ <lay-button type="primary" :disabled="disabled">{{
text text
}}</lay-button> }}</lay-button>
</template> </template>
</div> </div>
</div> </div>
<div <div v-else ref="dragRef" class="layui-upload-drag" :class="
v-else disabled
ref="dragRef" ? 'layui-upload-drag-disable'
class="layui-upload-drag" : isDragEnter
:class="
disabled
? 'layui-upload-drag-disable'
: isDragEnter
? 'layui-upload-drag-draging' ? 'layui-upload-drag-draging'
: '' : ''
" " @click.stop="chooseFile">
@click.stop="chooseFile"
>
<i class="layui-icon"></i> <i class="layui-icon"></i>
<p>{{ dragText }}</p> <p>{{ dragText }}</p>
<div class="layui-hide" id="uploadDemoView"> <div class="layui-hide" id="uploadDemoView">
@ -490,38 +474,17 @@ onUnmounted(() => {
<img src="" alt="上传成功后渲染" style="max-width: 196px" /> <img src="" alt="上传成功后渲染" style="max-width: 196px" />
</div> </div>
</div> </div>
<lay-layer <lay-layer v-model="innerCutVisible" :title="computedCutLayerOption.title" :move="computedCutLayerOption.move"
v-model="innerCutVisible" :resize="computedCutLayerOption.resize" :shade="computedCutLayerOption.shade"
:title="computedCutLayerOption.title" :shadeClose="computedCutLayerOption.shadeClose" :shadeOpacity="computedCutLayerOption.shadeOpacity"
:move="computedCutLayerOption.move" :zIndex="computedCutLayerOption.zIndex" :btnAlign="computedCutLayerOption.btnAlign"
:resize="computedCutLayerOption.resize" :area="computedCutLayerOption.area" :anim="computedCutLayerOption.anim"
:shade="computedCutLayerOption.shade" :isOutAnim="computedCutLayerOption.isOutAnim" :btn="computedCutLayerOption.btn" @close="clearAllCutEffect">
:shadeClose="computedCutLayerOption.shadeClose" <div class="copper-container" v-for="(base64str, index) in activeUploadFilesImgs" :key="`file${index}`">
:shadeOpacity="computedCutLayerOption.shadeOpacity" <img :src="base64str" :id="`_lay_upload_img${index}`" class="_lay_upload_img" />
: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> </div>
</lay-layer> </lay-layer>
<div <div class="layui-upload-list" :class="disabledPreview ? 'layui-upload-list-disabled' : ''">
class="layui-upload-list"
:class="disabledPreview ? 'layui-upload-list-disabled' : ''"
>
<slot name="preview"></slot> <slot name="preview"></slot>
</div> </div>
</div> </div>

View File

@ -174,7 +174,7 @@ export default {
<lay-textarea placeholder="请输入描述" v-model="validateModel.desc"></lay-textarea> <lay-textarea placeholder="请输入描述" v-model="validateModel.desc"></lay-textarea>
</lay-form-item> </lay-form-item>
<lay-form-item label="文件" prop="file"> <lay-form-item label="文件" prop="file">
<lay-upload v-model="validateModel.file" :cut="true"/> <lay-upload v-model="validateModel.file" :cut="true" acceptMime="images" :withForm="true"/>
</lay-form-item> </lay-form-item>
<lay-form-item> <lay-form-item>
<lay-button @click="validate">提交</lay-button> <lay-button @click="validate">提交</lay-button>

View File

@ -262,6 +262,7 @@ export default {
| cutOptions | 开启剪裁的模态弹窗与剪裁框的配置 | object | { layerOption,copperOption } | -- | | cutOptions | 开启剪裁的模态弹窗与剪裁框的配置 | object | { layerOption,copperOption } | -- |
| text | 普通上传描述 | string | -- | -- | | text | 普通上传描述 | string | -- | -- |
| dragText | 拖拽上传描述 | string | -- | -- | | dragText | 拖拽上传描述 | string | -- | -- |
| withForm | 是否跟随表单提交 | boolean | false | -- |
::: :::