<!-- 照片采集 -->
<template>
	<view class="Photo">

		<view class="Picture_box" @tap="choosePic">
			<text v-if="!photo" class="Picture_text">图片上传</text>
			<image v-if="photo" :src="photo" mode=""></image>
		</view>

		<button class="Picture_button" @tap="submitOwnPhoto">上传图片</button>
		
		<!-- 报错显示 -->
		<u-toast ref="uToast"></u-toast>
		<!-- 上传后加一段动画 -->
		<zero-loading v-if="loading"></zero-loading>
		<FloatBall />
	</view>
</template>

<script>
	//接口：
	//本地存储接口
	//获取个人信息接口

	//图片上传接口
	import {
		getOwnPhoto, //获取新生照片
		submitOwnPhoto //上传新生照片
	} from "@/api/photo.js";

	import {
		isEmpty
	} from '../../api/helpFunc';
	//自定义组件
	import FloatBall from "@/pages/compoents/FloatBall.vue";
	//
	export default {
		components: {
			FloatBall
		},
		data() {
			return {
				photo: null, //图片文件(base64编码)
				loading: false //上传动画
			}
		},
		async onLoad() {
			this.loading = true
			await this.getOwnPhoto();
			this.loading = false
		},
		methods: {
			//用户选择图片
			choosePic: async function() {
				//获取本地图片并且展示
				let that = this;
				uni.chooseImage({
					count: 1, //图片选择一张
					sizeType: ['compressed'],
					sourceType: ['album', 'camera'],
					success: (res) => {
						// 保存图片路径
						//this.photo=res.tempFilePaths[0];
						
						let tempImgPath = res.tempFilePaths[0];
						
						//修改图片编码
						//将图片路径转换为 Blob 对象
						fetch(tempImgPath)
							.then(response => response.blob())
							.then(blob => {
								// 修改图片编码
								let reader = new FileReader();
								reader.onload = function(event) {
									that.photo = event.target.result;
									//console.log(that.photo);
								};
								// 读取文件并将其转换为 Base64 编码
								reader.readAsDataURL(blob);
								// 读取文件并将其转换为 UTF-8 编码的文本格式
								//reader.readAsText(blob, 'UTF-8');
							})
							.catch(err => {
								this.$refs.uToast.show({
									type: 'error',
									message: '获取文件失败:' + err.message,
									duration: 1500
								});
							});
					},
					fail: (err) => {
						this.$refs.uToast.show({
							type: 'error',
							message: '选择图片失败:' + err.message,
							duration: 1500
						});
					}
				});
			},
			//新增图片到服务器
			async submitOwnPhoto() {
				let sdata = {
					//表单数据
					// 照片(base64编码)：photo
					photo: this.photo,
				}
				//表单数据判定
				if (isEmpty(sdata.photo)) {
					this.$refs.uToast.show({
						type: 'error',
						message: '请选择图片',
						duration: 1500
					});
					return;
				}
				//动画显示
				this.loading = true;
				let res = await submitOwnPhoto(sdata);
				this.loading = false;
				if (res.code == 200) {
					this.$refs.uToast.show({
						type: "success",
						message: res.msg,
						duration: 1500,
					});
				} else {
					console.log(res.msg);
					this.$refs.uToast.show({
						type: "error",
						message: res.msg,
						duration: 1500,
					});
				}
			},
			//从服务器获得新生照片照片
			async getOwnPhoto() {
				let that = this;
				let res = await getOwnPhoto(); //连接服务器传入照片id
				if (res.code == 200) {
					if (!isEmpty(res.data)) {
						let data = {
							...res.data
						};
						that.photo = data.photo;
					}
				}
			},
		},
	}
</script>

<style lang="less" scoped>
	.Photo {
		flex: 1;

		.Picture_box {
			height: 60vh;
			margin: 10%;
			border: 2px dashed gray;
			display: flex;
			justify-content: center;
			align-items: center;
			flex-wrap: wrap;

			.Picture_text {
				font-size: 45rpx;
				writing-mode: vertical-rl;
				text-orientation: upright;
				color: #c5c5c5;
			}

			image {
				height: 100%;
			}
		}

		.Picture_button {
			margin: 10%;
		}
	}
</style>