上传列表 
上传列表布局组件。
提示
此组件只用于布局,不包含上传功能,请自行实现上传功能。
基础使用 
通过 list 属性设置上传文件列表。
vue
<template>
	<pure-upload-list :list="list"></pure-upload-list>
</template>
<script setup>
	import { ref } from "vue";
	// 文件列表
	const list = ref([
		{
			status: "waiting",
			path: "/static/images/w_1.jpeg",
			progress: 0
		}
		// ...
	]);
</script>数据格式 
list 是一个数组,每个元素是一个对象,对象属性如下:
status:上传状态waiting:等待上传uploading:上传中success:上传成功error:上传失败
path:文件路径,或通过pathKey自定义文件路径键值。progress:文件上传进度。icon:文件图标,或通过iconKey自定义图标键值。
完整示例 
vue
<template>
	<pure-upload-list
		:list="list"
		@onDelete="handleDelete"
	></pure-upload-list>
	<!-- 选择文件 -->
	<pure-button
		text="选择文件"
		block
		theme="danger"
		@onClick="handleChoose"
	></pure-button>
	<pure-gap></pure-gap>
	<!-- 上传 -->
	<pure-button
		text="模拟上传"
		block
		theme="primary"
		@onClick="handleUpload"
	></pure-button>
</template>
<script setup>
	import { ref } from "vue";
	// 文件列表
	const list = ref([
		{
			status: "waiting",
			path: "/static/images/w_1.jpeg",
			progress: 0,
			icon: "/static/images/i_001.png"
		}
	]);
	// 选择文件
	function handleChoose() {
		uni.chooseImage({
			count: 9,
			success: (res) => {
				const files = res.tempFiles;
				// 循环处理文件数据
				files.forEach((item, index) => {
					// 构建列表数据结构
					// 重要提示:不要直接在 item 上操作
					// 因为 item 是个文件对象
					// 在实际测试中发现,如果直接给 item 添加 status、progress 等数据,数据会失去响应性
					// 所以这里要单独构建一个对象,避免直接操作 item
					list.value.push({
						status: "waiting",
						path: item.path,
						progress: 0,
						icon: "/static/images/i_001.png",
						file: item
					});
				});
			}
		});
	}
	// 上传文件
	function handleUpload() {
		// 遍历文件列表,模拟上传
		list.value.forEach((item, index) => {
			onUpload(item, index);
		});
	}
	// 模拟上传
	function onUpload(item, index) {
		// 首先将状态更新为上传中
		item.status = "uploading";
		// 模拟上传进度
		let interval = setInterval(() => {
			// 随机 0-1 的数字
			const random = Math.random();
			// 判断是否上传完成
			if (item.progress >= 100) {
				// 上传完成
				// 清除定时器
				clearInterval(interval);
				// 模拟上传成功或失败
				// 更新上传状态
				item.status = index % 2 === 0 ? "success" : "fail";
			} else {
				// 上传中
				// 更新上传进度
				item.progress = item.progress + random;
			}
		}, 50);
	}
	// 删除文件
	// index: 删除的索引
	// item: 删除的项
	function handleDelete(index, item) {
		list.value.splice(index, 1);
	}
</script>属性 
| 名称 | 类型 | 默认值 | 说明 | 
|---|---|---|---|
hoverClass | String | pure-hover | 按下去的样式类 | 
gap | String | 10px | 列表项间隔 | 
list | Array | [] | 文件列表 | 
pathKey | String | path | 文件路径键 | 
nameKey | String | 文件名称键 | |
iconKey | String | icon | 文件图标键 | 
deleteIconName | String | __close | 删除图标名称 | 
uploadingIconName | String | 上传中图标名称 | |
failIconName | String | __tips | 上传失败图标名称 | 
successIconName | String | __checked | 上传成功图标名称 | 
showProgressText | Boolean | true | 是否显示上传进度文字 | 
progressOpts | Object | {} | 进度条配置 参考 | 
事件 
| 名称 | 参数 | 说明 | 
|---|---|---|
onChoose | count: 剩余可选数量 | 点击上传按钮进行选择文件事件 | 
onDelete | index: 下标, item: 数据项 | 删除事件 | 
插槽 
| 名称 | 参数 | 说明 | 
|---|---|---|
#waiting | 等待上传状态 | |
#uploading | 上传中状态 | |
#fail | 上传失败状态 | |
#success | 上传成功状态 | 
样式变量 
| 名称 | 说明 | 
|---|---|
--pure-upload-list-gap | 列表项间隔 | 
--pure-upload-list-item-gap | 列表项内容间距 | 
--pure-upload-list-item-background | 项目背景 | 
--pure-upload-list-item-padding | 项目内边距 | 
--pure-upload-list-item-border-radius | 项目圆角 | 
--pure-upload-list-item-icon-font-size | 图标字体大小 | 
--pure-upload-list-item-icon-font-weight | 图标字体粗细 | 
--pure-upload-list-item-icon-color | 图标颜色 | 
--pure-upload-list-item-icon-width | 图标宽度 | 
--pure-upload-list-item-icon-height | 图标高度 | 
--pure-upload-list-item-body-gap | 主内容间距 | 
--pure-upload-list-item-name-font-size | 文件名称字体大小 | 
--pure-upload-list-item-name-font-weight | 文件名称字体粗细 | 
--pure-upload-list-item-name-color | 文件名称颜色 | 
--pure-upload-list-item-name-text-align | 文件名称文本对齐 | 
--pure-upload-list-item-progress-gap | 进度条内容间距 | 
--pure-upload-list-item-progress-text-font-size | 进度条文本字体大小 | 
--pure-upload-list-item-progress-text-font-weight | 进度条文本字体粗细 | 
--pure-upload-list-item-progress-text-color | 进度条文本颜色 | 
--pure-upload-list-item-status-direction | 进度条内容布局方向 | 
--pure-upload-list-item-status-icon-font-size | 状态图标字体大小 | 
--pure-upload-list-status-uploading-icon-font-size | 上传中图标字体大小 | 
--pure-upload-list-status-uploading-icon-color | 上传中图标颜色 | 
--pure-upload-list-status-uploading-icon-margin | 上传中图外边距 | 
--pure-upload-list-status-uploading-icon-padding | 上传中图标内边距 | 
--pure-upload-list-status-fail-icon-font-size | 上传失败图标字体大小 | 
--pure-upload-list-status-fail-icon-color | 上传失败图标颜色 | 
--pure-upload-list-status-fail-icon-margin | 上传失败图外边距 | 
--pure-upload-list-status-fail-icon-padding | 上传失败图标内边距 | 
--pure-upload-list-status-success-icon-font-size | 上传成功图标字体大小 | 
--pure-upload-list-status-success-icon-color | 上传成功图标颜色 | 
--pure-upload-list-status-success-icon-margin | 上传成功图外边距 | 
--pure-upload-list-status-success-icon-padding | 上传成功图标内边距 | 
--pure-upload-list-status-delete-icon-font-size | 删除图标字体大小 | 
--pure-upload-list-status-delete-icon-color | 删除图标颜色 | 
--pure-upload-list-status-delete-icon-margin | 删除图外边距 | 
--pure-upload-list-status-delete-icon-padding | 删除图标内边距 |