uniapp 小程序 图片上传 实时拍照(仅拍照)限制上传5张 可预览 可删除

news2024/12/23 17:15:56

效果图:
在这里插入图片描述

common.js

/**
 * 预览图片
 */
const previewImage = (current,list)=>{
	// 预览图片
	uni.previewImage({
		current: current,
		urls: list
	});
}
/**
 * 删除图片
 */
const removeImage = (current,list)=>{
	var photoFilesList = list;
	photoFilesList.splice(current, 1);
	list = photoFilesList
}
	
module.exports = {
	previewImage,
	removeImage
};		

页面内使用:
$common.previewImage(idx,shipmentPhotos)
$common.removeImage(idx,shipmentPhotos)

template

<template>
	<view class="other-item">
		<view>装货照片</view>
		<view class="right-text" v-if="orderStatus == 1">
			//未拍照上传时显示拍照按钮
			<view class="take-picture" @click="getUploadImg">
				<image src="../../static/img/take-picture.png"></image>
			</view>
		</view>
		//从接口返回的已上传照片的回显
		<view class="right-info" v-if="orderStatus == 2 || orderStatus == 3">
			<view class="img-list">
				<block v-for="(imgItem, idx) in shipmentPhotos" :key="idx">
					<view class="img-item">
						<image :src="imgItem" @click="$common.previewImage(idx,shipmentPhotos)">
						</image>
					</view>
				</block>
			</view>
		</view>
	</view>
	//已拍照上传时显示拍照上传后的图片,可预览可删除
	<view class="other-item" v-if="orderStatus == 1">
		<view></view>
		<view class="right-info">
			<view class="img-list">
				<block v-for="(imgItem, idx) in shipmentPhotos" :key="idx">
					<view class="img-item upload-item">
						<image :src="imgItem" @click="$common.previewImage(idx,shipmentPhotos)">
						</image>
						<!-- 移除图片的按钮  -->
						<view class="q-image-remover" :data-idx="idx"
							@click="$common.removeImage(idx,shipmentPhotos)">
							<image src="../../static/img/close.png"></image>
						</view>
					</view>
				</block>
			</view>
		</view>
	</view>
</template>

data:

data() {
	return {
		shipmentPhotos: [], //装货照片列表
		//订单状态(0 待接单,1待装货,2待送达,3已完成,4已关闭)
		orderStatus: 0
	}

methods:

methods: {
	//拍摄装货照片
	getUploadImg: function(e) {
		if(this.shipmentPhotos.length > 4){
			uni.showModal({
				title: "至多上传5张",
				content: "",
				confirmText: "确定",
				showCancel: false,
				success: (res) => {
					
				}
			})
			return
		}
		
		var idx = e.target.dataset.idx;
		var ths = this;
		wx.chooseImage({
			count: 5,
			// 默认9
			sizeType: ['compressed'],
			sourceType: ['camera'], //指定拍照
			success: function(res) {
				// 图片的本地临时文件路径列表
				var tempFilePaths = res.tempFilePaths;
				uni.showLoading({
					mask: true
				});
				tempFilePaths.forEach(item => {
					var params = {
						url: "/*****/***",//图片上传接口
						filePath: item,
						name: 'file',
						callBack: function(res2) {
							var data = JSON.parse(res2);
							var path = config.picDomain + data.fileName
							var photoFiles = ths.shipmentPhotos;
							photoFiles.push(path);
							ths.shipmentPhotos = photoFiles
							uni.hideLoading()
						}
					};
					http.upload(params);
				})
			}
		});
	}
	
}

style

<style>
	.other-item {
		font-size: 30rpx;
		color: #666666;
		padding-top: 12rpx;
		display: flex;
		justify-content: space-between;
		align-items: center;
		margin-bottom: 17rpx;
	}
	.right-text {
	color: #222;
}
.take-picture {
	width: 253rpx;
	height: 66rpx;
	border-radius: 60rpx;
	/* background: linear-gradient(270deg, #96C776 0%, #62B56B 97%);
	box-shadow: 0px 4rpx 4rpx 0px rgba(141, 214, 135, 0.2); */
}

.take-picture image {
	width: 100%;
	height: 100%;
}
.right-info {
	font-size: 30rpx;
	color: #222;
	text-align: right;
}

.right-info.red {
	color: #F44848;
}

.right-info.time-text {
	font-size: 24rpx;
}
.img-list {
	display: flex;
}

.img-item {
	width: 90rpx;
	height: 89rpx;
	overflow: hidden;
	margin-left: 10rpx;
}

.img-item image {
	width: 100%;
	height: 100%;
}
.upload-item {
	position: relative;
	overflow: inherit;
}
/* 删除图片按钮 */
.q-image-remover {
	position: absolute;
	right: -6rpx;
	top: -6rpx;
	width: 30rpx;
	height: 30rpx;
	text-align: center;
	font-size: 23rpx;
	background-color: #ff0000;
	color: #fff;
	border-radius: 30rpx;
	overflow: hidden;
}

.q-image-remover image {
	width: 100%;
	height: 100%;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/773440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【IM群发苹果日历】获取推送通知的设备标识符(Device Token)

苹果日历群发部署设置推送服务器推送服务器&#xff0c;用于向苹果日历应用的设备发送推送通知。推送服务器需要能够与Apple Push Notification Service (APNs) 进行通信。怎样来做&#xff1f; 部署设置推送服务器并与APNs进行通信需要以下步骤&#xff1a; 获取APNs证书&am…

高薪Offer收割机之redis集群

单节点的redis并发能力是有限的&#xff0c;如果需要进一步提高redis的并发能力&#xff0c;就需要搭建集群。 Redis中的集群分为三种&#xff1a; 主从复制&#xff0c;哨兵模式&#xff0c;分片集群 先来看一下主从复制&#xff1a; 在主从集群中一个主节点可以有多个从节…

Qt应用开发——QLabel的使用

目录 一、构造函数 二、属性和方法 三、实例一 显示内容和设置样式 四、实例二 使用html处理超链接 五、实例三 显示图像 六、实例四 显示GIF 七、实例五 伙伴机制 QLabel继承于QFrame&#xff0c;作为Qt Wdiget最基础也是最常用的控件&#xff0c;在实际开发中&#xf…

【C++】STL优先级队列(priority_queue)功能介绍以及模拟实现

优先级队列 前言正式开始priority_queue 基本介绍优先级队列的适配器第三个模板参数compare模拟实现priority_queue仿函数 前言 点进来的小伙伴不知道学过数据结构里的堆没有&#xff0c;如果学过的话&#xff0c;那就好说了&#xff0c;优先级队列就是堆&#xff0c;如果没学…

ViewModel实例什么时候被回收

作者&#xff1a;TechMix 一、ViewModel存在的意义&#xff1f; ViewModel做为JetPack中重要的组件&#xff0c;翻译成中文就是“视图模型”&#xff0c;根据分离关注点原则&#xff0c;ViewModel的出现&#xff0c;主要是为了分担Activity中的职责&#xff0c;专门用于存放和…

谷歌云 | Document AI 引入了强大的新自定义文档拆分器来自动化文档处理

【本文由Cloud Ace整理发布。Cloud Ace是谷歌云全球战略合作伙伴&#xff0c;拥有 300 多名工程师&#xff0c;也是谷歌最高级别合作伙伴&#xff0c;多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商&#xff0c;我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培训…

Orange:一个基于 Python 的数据挖掘可视化平台

本篇介绍一个适合初学者入门的机器学习工具。 Orange 简介 Orange 是一个开源的数据挖掘和机器学习软件。Orange 基于 Python 和 C/C 开发&#xff0c;提供了一系列的数据探索、可视化、预处理以及建模组件。 Orange 拥有漂亮直观的交互式用户界面&#xff0c;非常适合新手进…

测试用例(3)

功能测试用例方法&#xff1a; 等价类 边界值 因果图 正交实验分解法 判定表驱动分析方法 非功能性的测试用例方法&#xff1a; 错误推测法 功能图分析方法 场景&#xff1a; 场景设计方法 1) 在任何情况下都必须使⽤边界值分析⽅法&#xff0c;经验表明⽤这种⽅法设…

CGT Asia嘉年华|3D细胞培养与类器官研发峰会10月广州召开

类器官指利用成体干细胞或多能干细胞进行体外三维&#xff08;3D&#xff09;培养而形成的具有一定空间结构的组织类似物&#xff0c;是近10年来干细胞领域发展最快的研究热点之一。2022年&#xff0c;FDA 通过现代化法案 2.0&#xff0c;批准全球首个完全基于“类器官芯片”研…

pandas 笔记:pivot_table 数据透视表\pivot

1 基本使用方法 pandas.pivot_table(data, valuesNone, indexNone, columnsNone, aggfuncmean, fill_valueNone, marginsFalse, dropnaTrue, margins_nameAll, observedFalse, sortTrue)2 主要参数 dataDataFramevalues要进行聚合的列index在数据透视表索引&#xff08;index…

# Linux下替换删除文件中的颜色等控制字符的方法

Linux下替换删除文件中的颜色等控制字符的方法 文章目录 Linux下替换删除文件中的颜色等控制字符的方法1 Linux下的控制字符&#xff08;显示的文字并不是他本身&#xff09;&#xff1a;2 颜色字符范例&#xff1a;3 替换4 最后 我们在shell编程显示输出时&#xff0c;会定义文…

【Java】一个简单的接口例子(帮助理解接口+多态)

要求&#xff1a; 请实现笔记本电脑使用USB鼠标、USB键盘的例子 1. USB 接口&#xff1a;包含打开设备、关闭设备功能 2. 笔记本类&#xff1a;包含开机功能、关机功能、使用 USB 设备功能 3. 鼠标类&#xff1a;实现 USB 接口&#xff0c;并具备点击功能 4. 键盘类&am…

人才输送|我的“捷码低代码工程师”转型之路!

最新职位 招聘岗位&#xff1a;低代码工程师 需求公司&#xff1a;上海北斗西虹桥基地 应聘条件&#xff1a;1、本科以上&#xff0c;最好硕士&#xff1b;2、有三年以上开发经验&#xff1b; 工作内容&#xff1a;带领团队用捷码低代码平台进行项目开发。 工作地点&#xff1a…

长城汽车Hi4技术品牌成果初现,大象转身必将势不可挡

今年1-6月&#xff0c;长城汽车销售52万辆&#xff0c;新能源车型销售9.3万辆&#xff0c;同比增长47%&#xff1b;智能新能源新产品密集上市&#xff0c;新能源销量与占比逐月攀升&#xff0c;6月销售超2.6万辆&#xff0c;占比突破25%&#xff0c;皆创历史新高&#xff1b; 全…

文档翻译成中文怎么弄?今天分享文档翻译免费要怎么弄

有一天&#xff0c;小华来到了一个外国小镇。然而&#xff0c;他发现镇上的路牌、菜单和旅游手册都是用外语写的&#xff0c;让他感到非常困扰。他不知道该去哪里游玩&#xff0c;也无法理解当地的文化和历史。他非常喜欢这个小镇的风景&#xff0c;但是他无法读懂他们这里的一…

【Linux -- 查看进程--ps,top,pstree】

Linux – 查看进程 文章目录 Linux -- 查看进程一、查看进程 -- ps二、动态查看进程的变化 -- top三、pstree -- 可以找进程之间的相关性总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、查看进程 – ps 更详细的可以通过man ps查看 ps aux …

深入理解Java虚拟机(三)垃圾收集器与内存分配策略

Java与C之间有一堵由内存动态分配和垃圾收集技术所围成的高墙&#xff0c;墙外面的人想进去&#xff0c;墙里面的人却想出来。 Java内存运行时区域的各个部分&#xff0c;其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生&#xff0c;随线程而灭&#xff0c;栈中的栈帧随…

echarts图例对齐

富文本不生效&#xff0c;是没有设置lineHeight

【运维】shell监控脚本结合钉钉机器人实现服务及服务器监控告警

文章目录 前言一、监控shell脚本和钉钉机器人二、创建钉钉机器人&#xff1a;1.在钉钉群聊里点击设置2.在设置里点击机器人选项3.再点击添加机器人4.再点击选择自定义机器人5.设置机器人名称、是否加密、是否限制ip、以及触发关键字6.获取机器人的Webhook地址 三、编写监控脚本…

MySQL表关联更新

背景&#xff1a; 有两张表&#xff0c;一张class信息表&#xff0c;一张student信息表&#xff0c;但student表里的信息存在错误&#xff0c;需要用class表中的信息去更新student表数据。 方法一&#xff1a; update student_info s set class_name (select class_name fr…