首页 > 其他分享 >Vue3 + ant-design-vue@3.2.15 + UploadPictureCard

Vue3 + ant-design-vue@3.2.15 + UploadPictureCard

时间:2023-11-28 10:58:26浏览次数:43  
标签:vue 15 list value ant file props const data

<template>
    <a-upload
        name="file"
        v-model:file-list="showFileList"
        list-type="picture-card"
        :multiple="multiple"
        :max-count="maxCount"
        :before-upload="beforeUpload"
        :accept="accept"
        @remove="handleRemove"
    >
        <div v-if="maxCount === null || showFileList.length < maxCount">
            <plus-outlined />
            <div style="margin-top: 8px">{{ text }}</div>
        </div>
    </a-upload>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { UploadProps } from 'ant-design-vue';
import { apiUploadFiles } from '@/request/api/common';
const props = defineProps({
    text: {
        type: String,
        default: '上传图片',
    },
    multiple: {
        type: Boolean,
        default: false,
    },
    maxCount: {
        type: Number,
        default: null,
    },
    file_key: {
        type: String,
        default: 'img',
    },
    data_list: {
        type: Array,
        default: () => [],
    },
    accept: {
        type: String,
        default: 'image/*',
    },
});
// 保留当前的文件列表
const file_list = ref([]);
// 上传
const beforeUpload = async (file: File) => {
    const _data: API.IUploadParams = {
        files: file,
        type: 'image',
    };
    const _res = await apiUploadFiles(_data);
    if (_res.code == 200) {
        file_list.value.push(_res.data[0]);
        emit('UpdateUploadFile', props.file_key, file_list.value);
    }
    return false;
};
// 移除
const handleRemove: UploadProps['onRemove'] = (file) => {
    const index = file_list.value.indexOf(file);
    const newFileList = file_list.value.slice();
    newFileList.splice(index, 1);
    file_list.value = newFileList;
    emit('UpdateUploadFile', props.file_key, file_list.value);
};

const emit = defineEmits(['UpdateUploadFile']);
// 定义文件上传列表
let showFileList = ref([]);
// 设置默认值
const setDefaultData = () => {
    if (props.data_list && props.data_list.length) {
        showFileList.value = props.data_list.map((item) => {
            return { url: item };
        });
        file_list.value = props.data_list;
    } else {
        showFileList.value = [];
        file_list.value = [];
    }
};
onMounted(() => {
    setDefaultData();
});
</script>

<style lang="scss" scoped></style>

 

标签:vue,15,list,value,ant,file,props,const,data
From: https://www.cnblogs.com/CaktyRiven/p/17861353.html

相关文章

  • docker部署HomeAssistant
    一、docker部署sudodockerrun-d--name="homeassistant-v1"-v/docker/home-assistant/config:/config-p8123:8123homeassistant/home-assistant:latest二、docker-compose部署version:'3'services:homeassistant:hostname:homeassistant......
  • vue引入外部样式只在当前文件生效
    引入外部文件时,想要只在当前组件使用,但是我们使用如下方式时,会在全局使用。因为在scoped起作用的时候,import还没有引入这个文件<stylescoped>@import"../../xx.css"</style>使用以下方式即可<stylescopedsrc="../../xx.css"></style> ......
  • 【源码系列#02】Vue3响应式原理(Effect)
    专栏分享:vue2源码专栏,vue3源码专栏,vuerouter源码专栏,玩具项目专栏,硬核......
  • Vue-mixin 混入处理
    概述再日常开发中,对于组件内部的方法多处存在相同的特点,往往会抽离出一个公共的方法方便调用,但是由于多个组件可能都需要用到这个方法,所以通过mixin混入的方式,将该方法独立抽离出来,方便多个组件的使用。步骤再src目录下创建一个mixins再该目录下创建一个xxxx.js文件编写对应......
  • Vue3中 使用v-for嵌套 获取其他数组中的值作为key值 渲染数据
    <tbody><trv-for="(row,idx)inrows":key="idx"><tdv-for="(item,key)intitle":key="key">{{row[key]}}</td></tr>......
  • 【题解】CF1550E Stringforces
    标签:DP\(B^+\)阅读须知:本题解较为详细地讲述的该题解法的思路和来龙去脉,但篇幅较长,请耐心阅读。Step1从题面获取信息我们考虑,因为最大值最小,所以我们首先想到二分答案。然后我们又看到\(k\leq17\)这个限制,所以会想到可能是关于一个\(2^k\)之类的复杂度。以上就是我......
  • CF1599H Hidden Fortress
    看到很多是用二分的解法,这题其实可以这用**$4$**次查询得到结果。我们只需要用两次查询就可以找到地方基地矩阵的一条边的中点。先询问$d1=query(1,1)$和$d2=query(1,10^9)$。就可以求出$y_m=\frac{1+10^9+d1-d2}{2}$。之后再询问$d3=query(10^9,1)$和$d4=query(1,y_......
  • SP1557 GSS2 - Can you answer these queries II 题解
    SP1557GSS2-CanyouanswerthesequeriesII更好的阅读体验扫描线。把询问挂在右端点上,扫描右端点,纵轴仍为序列维。对于这种出现多次的数只算一次的,记\(pre_i\)表示\(i\)这个值上一次的出现位置,套路化的可以强制让出现多次的在\(pre_i<l\wedgei\)统计,用二维线段树状......
  • vue3 jsPlumb学习
    <template><divclass="box"><div@click="clearLine">clear</div><div@click="initConponents">line</div><div@click="getData">get</div></div>......
  • [ABC315Ex] Typical Convolution Problem
    题目链接首先观察到这个形式,容易发现它和常规的卷积不同点就在于:题目给出的求和定义中,\(\sum\)符号下面的式子是\(i+j<N\)求和而不是\(i+j=N\)。为了方便计算,我们引入:\[G_n=\sum_{i+j<N}F_iF_j\]我们发现,假设所有\(F_{1\sim{i-1}}\)已经求解完毕了,那么我们就可以通过之......