You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
8.0 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div style="margin: 1rem;">
<el-tabs type="border-card">
<el-tab-pane label="图片上传组件">
<div style="padding: 1rem;">
<div>
图片上传组件说明
<ol style="font-size: .8rem; line-height: 1.8;">
<li>基础用法 &lt;w-image-uploader v-model="value" :getUploadKey="getUploadKey" max="1"
v-model:uploading="uploading" /&gt;</li>
<li>属性getUploadKey获取上传凭证的方法需要使用者提供开发模式下提供:<br />
前端示例<br />
<pre class="code">
const getUploadKey =async () => {
let r = await request.get("/file/upload/getUploadKey")
return r.data
} </pre>
后端示例<br />
<pre class="code"> @GetMapping("getUploadKey")
public R getUploadKey() {
return R.ok().setData(FileUtils.getUploadKey());
}</pre>
</li>
<li>属性v-model双向绑定上传的文件URL,max=1是类型为String,否则为Array</li>
<li>属性v-model:uploading双向绑定是否上传中,PS: 上传完成后才允许业务表单提交</li>
<li>属性max允许上传的文件数量0表示没有限制,默认0</li>
<li>属性prefix上传路径前缀默认default</li>
<li>属性disabled禁止上传图片预览模式 默认false</li>
<li>属性text按钮文字默认上传图片</li>
<li>属性maxSize允许上传的文件最大大小,0表示不限制默认0</li>
<li>属性threadNum并行上传数量默认2</li>
<li>属性retry重试次数默认3 </li>
<li>属性saveSrc是否保存图片原文件如果true则下载时下载原图zip文件否则下载大图片默认false </li>
<li>属性saveMin是否保存缩略图如果true则列表时显示缩略图否则显示大图默认true </li>
<li>属性watermark是否添加水印默认true </li>
<li>属性noEffect是否无效果本质设置css属性默认false </li>
<li>css属性--image-size图片显示大小默认 10em </li>
<li>css属性--image-border-radius图片显示圆角默认 .4em</li>
<li>css属性--image-margin图片外边距默认 .5em .5em 0 0</li>
<li>css属性--image-border图片边框默认 #FFF solid 2px </li>
<li>css属性--image-box-shadow图片阴影默认 0 0 .2em #0005</li>
<li>插槽button上传按钮插槽</li>
<li>插槽default图片列表插槽作用域list不建议定义</li>
<li>事件changemodelValue发送了变化</li>
</ol>
</div>
<el-divider>单图片上传</el-divider>
<w-image-uploader v-model="imgs[0]" saveSrc max="1" v-model:uploading="imging" />
<pre>绑定值:{{ imgs[0] }}</pre>
<div>{{ imging ? '上传中' : '没有上传' }}
<w-image-view ref="imgView" />
<el-button @click="proxy.$refs.imgView.open(imgs[0])">重写的图片预览组件测试</el-button>
</div>
<el-divider>9张图片上传</el-divider>
<div style="width: 50em;"><w-image-uploader v-model="imgs[1]" saveSrc max="9" text="9张图片上传"
style="--image-size:15em;" /></div>
<pre>绑定值:{{ imgs[1] }}</pre>
<el-divider>预览模式</el-divider>
<w-image-uploader style="width: 35em;" disabled :modelValue="[
'/files/default/2024/10/24/d0wt3m3j4tud.webp',
'/files/default/2024/10/24/4x53htt9v8j1.webp',
'/files/default/2024/10/24/1trnacdjxeoju.webp',
'/files/default/2024/10/24/742tvr5pq526.webp',
'/files/default/2024/10/24/1dg74ibgi0xbj.webp',
'/files/default/2024/10/24/1bgesfnixpfvt.webp',
'/files/default/2024/10/24/h1legy4o8tko.webp',
'/files/default/2024/10/24/9xe6yyoed9dj.webp'
]" />
</div>
</el-tab-pane>
<el-tab-pane label="文件上传组件">
<div style="padding: 1rem;">
<div>
文件上传组件说明:
<ol style="font-size: .8rem; line-height: 1.8;">
<li>基础用法: &lt;w-file-uploader v-model="value" :getUploadKey="getUploadKey" max="1"
v-model:uploading="uploading" /&gt;</li>
<li>大小大于chunksize的大文件上传会自动分片上传</li>
<li>属性getUploadKey获取上传凭证的方法需要使用者提供开发模式下提供:<br />
前端示例<br />
<pre class="code">
const getUploadKey =async () => {
let r = await request.get("/file/upload/getUploadKey")
return r.data
} </pre>
后端示例<br />
<pre class="code"> @GetMapping("getUploadKey")
public R getUploadKey() {
return R.ok().setData(FileUtils.getUploadKey());
}</pre>
</li>
<li>属性v-model双向绑定上传的文件URL,max=1是类型为String,否则为Array</li>
<li>属性v-model:uploading双向绑定是否上传中,PS: 上传完成后才允许业务表单提交</li>
<li>属性max允许上传的文件数量0表示没有限制,默认0</li>
<li>属性prefix上传路径前缀默认default</li>
<li>属性keepFilename是否保留文件名, 默认true</li>
<li>属性disabled禁止上传文件预览模式 默认false</li>
<li>属性text按钮文字默认上传文件</li>
<li>属性accept允许上传的文件扩展名列表默认'' ,office:'.doc,.docx,.ppt,.pptx,.xls,.xlsx'</li>
<li>属性maxSize允许上传的文件最大大小,0表示不限制默认0</li>
<li>属性threadNum并行上传数量默认2</li>
<li>属性retry重试次数默认3 </li>
<li>属性chunksize分片大小默认5Mb不建议修改</li>
<li>属性border文件项是否显示边框默认true</li>
<li>插槽button上传按钮插槽</li>
<li>插槽default文件列表作用域list不建议定义</li>
<li>事件changemodelValue发送了变化</li>
</ol>
</div>
<el-divider>单文件上传</el-divider>
<w-file-uploader v-model="data[0]" max="1" v-model:uploading="uploading" />
<pre>绑定值{{ data[0] }}</pre>
<div>{{ uploading ? '上传中' : '没有上传' }}</div>
<el-divider>预览模式</el-divider>
<w-file-uploader v-model="data[0]" max="1" :border="false" disabled />
<el-divider>单word文件小于10kb上传</el-divider>
<w-file-uploader v-model="data[1]" max="1" accept=".docx,.doc" text="单word文件小于10kb上传" :max-size="10240" />
<pre>绑定值{{ data[1] }}</pre>
<el-divider>多文件上传</el-divider>
<w-file-uploader v-model="data[2]" max="2" />
<pre>绑定值{{ data[2] }}</pre>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script setup>
import { ref, getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance()
const data = ref(['/files/default/2024/10/24/2nhdirb2ujey/5mb.txt'])
const uploading = ref(false)
const imgs = ref(['/files/default/2024/10/24/d0wt3m3j4tud.webp'])
const imging = ref(false)
</script>
<style lang="scss" scoped>
.code {
border: solid 1px #0001;
margin: .5rem;
padding: .5rem;
border-radius: .3rem;
}
</style>