Newer
Older
XiaoGanWXMini / pages / components / imageUpload.vue
@zhangdeliang zhangdeliang on 29 Jul 2 KB 迁移
<template>
	<!-- 公共图片上传 h5+微信小程序(无压缩版)-->
	<view class="uploadImage">
		<uni-file-picker v-model="fileList" fileMediatype="image" mode="grid" :limit="limit" @select="uploadStart" @delete="deleteImg" :sizeType="['compressed']" />
	</view>
</template>

<script setup>
import { onMounted, ref } from 'vue';
import { sysUpload } from '@/utils/homeApi.js';

// baseUrl设置
let baseUrl = '';
/* #ifdef MP-WEIXIN */
// baseUrl = 'http://192.168.20.162:7200'; //谢斌斌
baseUrl = 'https://server1.wh-nf.cn:8131/prod-api'; //公司环境
/* #endif */
/* #ifdef H5 */
baseUrl = '';
/* #endif */

const fileList = ref([]);
const props = defineProps({
	// 图片数组值
	saveFileArr: {
		type: Array,
		default: () => []
	},
	// 图片数量限制
	limit: {
		type: Number,
		default: 3
	},
	// 关联类型和字段
	refField: {
		type: String,
		default: 'picXG'
	},
	refType: {
		type: String,
		default: 'picXG'
	}
});

// 文件上传
async function uploadStart(e) {
	console.log(e.tempFiles[0]);
	uni.showLoading({
		title: '正在上传',
		mask: true
	});
	uni.uploadFile({
		url: baseUrl + '/system/upload',
		filePath: e.tempFiles[0].path,
		name: 'file',
		success(res) {
			let dataRes = JSON.parse(res.data);
			if (dataRes.code == 200) {
				uni.hideLoading();
				let datas = dataRes.data;
				datas.refField = props.refField; //关联字段
				datas.refType = props.refType; //关联类型
				fileList.value.push(datas);
				props.saveFileArr.push(datas);
			} else {
				uni.showToast({
					icon: 'none',
					title: '上传失败,请重新上传'
				});
			}
		}
	});
}

// 文件删除
function deleteImg(e) {
	console.log(e.tempFile.name);
	let fileIndex = null;
	fileList.value.map((item, index) => {
		if (e.tempFile.name == item.originalName) {
			fileIndex = index;
		}
	});
	fileList.value.splice(fileIndex, 1);
	props.saveFileArr.splice(fileIndex, 1);
}

// 清空图片
function clearImages() {
	fileList.value = [];
	props.saveFileArr = [];
}
defineExpose({
	clearImages
});
</script>

<style lang="scss">
.uploadImage {
	height: 250rpx;
}
</style>