@arco.design upload 已上传文件,点击删除 popconfirm 询问删除

在这里插入图片描述

实现

借助 upload 的 两个属性 on-before-removecustom-icon

custom-icon

官方给的例子是更换图标,这里借助 h 函数返回的 vnode

const getCustomIcon = () => {
  return {
    retryIcon: () => h(IconUpload),
    cancelIcon: () => h(IconClose),
    fileIcon: () => h(IconFileAudio),
    removeIcon: () => h(IconClose),
    errorIcon: () => h(IconFaceFrownFill),
    fileName: (file) => {
      return `文件名: ${file.name}`
    },
  };
};

在这里插入图片描述
既然是 vnode,那就好办了

<a-upload
  v-model:file-list="uploadValue"
  ...
  :custom-icon="getCustomIcon()"
>
  <template #upload-button>
      <a-button type="primary"><icon-upload />点击上传</a-button>
  </template>
</a-upload>
import { h } from 'vue'
import { Popconfirm } from '@arco-design/web-vue'
import { IconDelete } from '@arco-design/web-vue/es/icon'

const getCustomIcon = () => {
  return {
    removeIcon: () =>
     h(
       Popconfirm,
       {
         content: '是否要删除附件?',
         type: 'warning',
         onOk: () => {
         	console.log('确认删除')
         },
       },
       {
         default: () => h(IconDelete),
       }
     ),
  }
}

h 函数参数

function h(
  type: string | Component,
  props?: object | null,
  children?: Children | Slot | Slots
): VNode

试验下,发现此时我们点击删除按钮的时候还是会直接删除文件

原因是由于另一个属性 on-before-remove,需要我们做如下处理
<a-upload
  v-model:file-list="uploadValue"
  ...
  :custom-icon="getCustomIcon()"
  @before-remove="beforeRemove"
>
  <template #upload-button>
      <a-button type="primary"><icon-upload />点击上传</a-button>
  </template>
</a-upload>
// 缓存要删除的文件
const cacheRemoveFile = ref()
const beforeRemove = (file) => {
  cacheRemoveFile.value = file
  return false
}

这里要缓存一下要删除的文件, Popconfirm onOk 的时候需要

完整代码:

<a-upload
  v-model:file-list="uploadValue"
  ...
  :custom-icon="getCustomIcon()"
  @before-remove="beforeRemove"
>
  ...
</a-upload>
 
<script setup>
import { ref } from 'vue'
import { Popconfirm } from '@arco-design/web-vue'
import { IconDelete } from '@arco-design/web-vue/es/icon'
const getCustomIcon = () => {
  return {
    removeIcon: () =>
      h(
        Popconfirm,
        {
          content: '是否要删除附件?',
          type: 'warning',
          onOk: () => {
            let delFile = cacheRemoveFile.value
            let delIndex = uploadValue.value.findIndex((item) => item.uid == delFile.uid)
            if (delIndex >= 0) {
               // 真正删除文件
			   uploadValue.value.splice(index, 1)
            }
          },
        },
        {
          default: () => h(IconDelete),
        }
      ),
  }
}
// 缓存的待删除文件
const cacheRemoveFile = ref()
const beforeRemove = (file) => {
  cacheRemoveFile.value = file
  return false
}
</script>

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值