uni-app的Vue.js实现微信小程序的紧急事件登记页面功能

2023-11-04

主要功能实现 

  1. 完成发生时间选择功能,用户可以通过日期选择器选择事件发生的时间。
  2. 实现事件类型选择功能,用户可以通过下拉选择框选择事件的类型。
  3. 添加子养殖场编号输入框,用户可以输入与事件相关的子养殖场编号。
  4. 完成事件描述输入功能,用户可以通过文本输入框描述事件的详细情况。
  5. 增加上传图片功能,用户可以选择并上传相关图片。
  6. 增加上传视频功能,用户可以选择并上传相关视频。
  7. 实现处理结果输入功能,用户可以通过文本输入框记录事件的处理结果。
  8. 添加是否已解决选择功能,用户可以通过单选按钮选择事件是否已经解决。

大概有两个样子的版本,一个是用内置组件完成的,另一个是用uni-ui扩展组件完成的,都在下面

未加样式版本

稍微加了点样式的样子

这是简陋的代码

<template>
	<view class="mainCSS">
		<view class="column">1. 发生时间</view>
		<picker class="input" mode="date" :end="endDate" @change="bindDateChange">
			<view>{{date}}</view>
		</picker>

		<view class="column">2. 事件类型</view>
		<picker class="input" :range="kind" :value="kindIndex" @change="bingKindChange">
			<view>{{kind[kindIndex]}}</view>
		</picker>

		<view class="column">3. 子养殖场编号</view>
		<input class="input" placeholder="二号区③" @confirm="bindFarmCode"/>

		<view class="column">4. 事件描述</view>
		<textarea class="input" @confirm="bindTextDetail" placeholder="请输入"></textarea>

		<view class="column">5. 上传图片</view>
		<view v-for="(imageName, index) in imageNames" :key="index">
			<text>{{imageName}}</text>
		</view>
		<button type="primary" size="mini" @click="loadImage">选择图片</button>

		<view class="column">6. 上传视频</view>
		<view v-for="(videoName, index) in videoNames" :key="index">
			<text>{{videoName}}</text>
		</view>
		<button type="primary" size="mini" @click="loadVideo">选择视频</button>

		<view class="column">7. 处理结果</view>
		<textarea class="input" placeholder="是如何处理的?" @confirm="bindResult"></textarea>

		<view class="column">8. 是否已经解决了</view>
		<radio-group @change="bindDoneChange">
			<label>
				<radio value="false" checked="checked">未解决</radio>
				<radio value="true">已解决</radio>
			</label>
		</radio-group>

		<button class="column" type="primary">提交</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				date: this.getDate(),
				kind: ['养殖物异常', '设备异常', '偷盗', '野生动物', '灾害', '其他异常'],
				kindIndex: 0,
				farmCode:"",
				detail: {},
				imageNames: [],
				videoNames: [],
				result:"",
				done:false
			}
		},
		computed: {
			endDate() {
				return this.getDate();
			}
		},
		methods: {
			getDate() {
				const date = new Date();
				let year = date.getFullYear();
				let month = date.getMonth() + 1;
				let day = date.getDate();
				month = month > 9 ? month : '0' + month;
				day = day > 9 ? day : '0' + day;
				return `${year}-${month}-${day}`;
			},
			bindDateChange: function(e) {
				this.date = e.detail.value;
			},
			bingKindChange: function(e) {
				this.kindIndex = e.detail.value;
			},
			bindFarmCode:function(e){
				this.farmCode=e.detail.value;
			},
			bindTextDetail: function(e) {
				this.detail = e.detail.value;
			},
			bindResult:function(e){
				this.result=e.detail.value;
			},
			bindDoneChange: function(e) {
				this.done = e.detail.value;
			},
			loadImage() {
				uni.chooseImage({
					success: (response) => {
						for (let file of response.tempFiles) {
							let imageName = file.name.substring(file.name.lastIndexOf('/') + 1);
							this.imageNames.push(imageName);
						}
					}
				})
			},
			loadVideo() {
				uni.chooseVideo({
					success: (response) => {
						let videoName = response.tempFile.name;
						videoName = videoName.substring(videoName.lastIndexOf('/') + 1);
						this.videoNames.push(videoName);
					}
				})
			}
		}
	}
</script>

<style>
	.mainCSS {
		margin: 30rpx;
	}
	.input{
		margin: 15rpx;
		border: 1rpx solid #cbd5de;
		width: 100%;
	}
	.column{
		margin: 30rpx;
		font-weight: bold;
	}
</style>

然后是用了uni-ui扩展组件大改了一下样式

 

 主要就是样式通过uni-ui组件完成

<template>
	<view class="mainCSS">
		<view class="column">1. 发生时间</view>
		<uni-datetime-picker type="date" :end="endDate" @change="bindDateChange"></uni-datetime-picker>

		<view class="column">2. 事件类型</view>
		<uni-data-select placeholder="请选择事件类型" :localdata="kind" :value="kindValue" @change="bindKindChange"></uni-data-select>

		<view class="column">3. 子养殖场编号</view>
		<uni-easyinput placeholder="二号区③" @confirm="bindFarmCode"></uni-easyinput>

		<view class="column">4. 事件描述</view>
		<uni-easyinput type="textarea" autoHeight placeholder="请描述紧急事件的具体情况" @confirm="bindTextDetail"></uni-easyinput>

		<view class="column">5. 上传图片</view>
		<uni-file-picker title="最多选择九张图片"></uni-file-picker>

		<view class="column">6. 上传视频</view>
		<uni-file-picker file-mediatype="video"></uni-file-picker>

		<view class="column">7. 处理结果</view>
		<uni-easyinput type="textarea" autoHeight placeholder="请描述事件是如何处理的" @confirm="bindResult"></uni-easyinput>

		<view class="column">8. 是否已经解决了</view>
		<radio-group @change="bindDoneChange">
			<label>
				<radio value="false" checked="checked">未解决</radio>
				<radio value="true">已解决</radio>
			</label>
		</radio-group>

		<button class="column" type="primary" @click="submit">提交</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				date: this.getDate(),
				kindValue: 0,
				kind: [{
						value: 0,
						text: '养殖物异常'
					},
					{
						value: 1,
						text: '设备异常'
					},
					{
						value: 2,
						text: '偷盗'
					},
					{
						value: 3,
						text: '野生动物'
					},
					{
						value: 4,
						text: '灾害'
					},
					{
						value: 5,
						text: '其他异常'
					}
				],
				farmCode: "",
				detail: {},
				result: "",
				done: false
			}
		},
		computed: {
			endDate() {
				return this.getDate();
			}
		},
		methods: {
			getDate() {
				const date = new Date();
				let year = date.getFullYear();
				let month = date.getMonth() + 1;
				let day = date.getDate();
				month = month > 9 ? month : '0' + month;
				day = day > 9 ? day : '0' + day;
				return `${year}-${month}-${day}`;
			},
			bindDateChange: function(e) {
				this.date = e.detail.value;
			},
			bindKindChange: function(e) {
				this.kindValue = e;
			},
			bindFarmCode: function(e) {
				this.farmCode = e.detail.value;
			},
			bindTextDetail: function(e) {
				this.detail = e.detail.value;
			},
			bindResult: function(e) {
				this.result = e.detail.value;
			},
			bindDoneChange: function(e) {
				this.done = e.detail.value;
			},
			submit(){
				uni.showModal({
					content:"紧急事件登记提交成功",
					title:"提示",
					showCancel:false,
					success: (response) => {
						if(response.confirm){
							uni.switchTab({
								url:'/pages/WorkOrder/WorkOrder'
							})
						}
					}
				})
			}
		}
	}
</script>

<style lang="scss">
	.mainCSS {
		padding: 25rpx;
		background-color: white;
	}

	.column {
		margin-top: 30rpx;
		margin-bottom: 15rpx;
		font-weight: bold;
		font-size: 30rpx;
	}

	button {
		border-radius: 30rpx;
	}
</style>

后面加上了和后端对接的请求发送,以及修复了一些bug的改版代码,后端也是我写的对接起来十分轻松 

<template>
	<view class="mainCSS">
		<view class="column">1. 发生时间</view>
		<uni-datetime-picker type="date" :end="endDate" @change="bindDateChange"></uni-datetime-picker>

		<view class="column">2. 事件类型</view>
		<uni-data-select placeholder="请选择事件类型" :localdata="kind" :value="kindValue"
			@change="bindKindChange"></uni-data-select>

		<view class="column">3. 子养殖场编号</view>
		<uni-easyinput placeholder="二号区③" @input="bindFarmCode"></uni-easyinput>

		<view class="column">4. 事件描述</view>
		<uni-easyinput type="textarea" autoHeight placeholder="请描述紧急事件的具体情况" @input="bindTextDetail"></uni-easyinput>

		<view class="column">5. 上传图片</view>
		<uni-file-picker title="最多选择九张图片" ref="files" @select="bindSelect" @delete="bindDelete"></uni-file-picker>

		<view class="column">6. 上传视频</view>
		<uni-file-picker file-mediatype="video" @select="bindVideoSelect" @delete="bindVideoDelete"
			limit="1"></uni-file-picker>

		<view class="column">7. 处理结果</view>
		<uni-easyinput type="textarea" autoHeight placeholder="请描述事件是如何处理的" @input="bindResult"></uni-easyinput>

		<view class="column">8. 是否已经解决了</view>
		<uni-data-checkbox :value="doneValue" :localdata="done" @change="bindDoneChange"></uni-data-checkbox>

		<button class="column" type="primary" @click="submit">提交</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				date: '',
				kindValue: 0,
				kind: [{
						value: 0,
						text: '养殖物异常'
					},
					{
						value: 1,
						text: '设备异常'
					},
					{
						value: 2,
						text: '偷盗'
					},
					{
						value: 3,
						text: '野生动物'
					},
					{
						value: 4,
						text: '灾害'
					},
					{
						value: 5,
						text: '其他异常'
					}
				],
				farmCode: "未填写",
				detail: '未填写',
				images: '',
				imagesPaths: [],
				video: '',
				videoPath: '',
				result: "未填写",
				doneValue: 0,
				done: [{
					text: '未解决',
					value: 0
				}, {
					text: '已解决',
					value: 1
				}]
			}
		},
		computed: {
			endDate() {
				const date = new Date();
				let year = date.getFullYear();
				let month = date.getMonth() + 1;
				let day = date.getDate();
				month = month > 9 ? month : '0' + month;
				day = day > 9 ? day : '0' + day;
				return `${year}-${month}-${day}`;
			}
		},
		methods: {
			bindDateChange: function(e) {
				this.date = e;
			},
			bindKindChange: function(e) {
				this.kindValue = e;
			},
			bindFarmCode: function(e) {
				this.farmCode = e;
			},
			bindTextDetail: function(e) {
				this.detail = e;
			},
			bindResult: function(e) {
				this.result = e;
			},
			bindDoneChange: function(e) {
				this.doneValue = e.detail.value;
			},
			submit() {
				if (this.imagesPaths.length != 0) {
					var uploadTask = uni.uploadFile({
						url: 'http://192.168.6.128:8080', // 上传图片的接口地址
						files: this.imagesPaths,
						success: (response) => {
							this.images = response.data;
						},
						fail: (response) => {
							console.log(response)
						}
					})
					uploadTask.onProgressUpdate((response) => {
						// console.log(response.progress)
					})
				}
				if (this.videoPath != '') {
					var uploadTask = uni.uploadFile({
						url: 'http://192.168.6.128:8080', // 上传视频的接口地址
						filePath: this.videoPath,
						name: 'file',
						success: (response) => {
							this.video = response.data;
						},
						fail: (response) => {
							console.log(response)
						}
					})
					uploadTask.onProgressUpdate((response) => {
						// console.log(response.progress)
					})
				}
				this.sendRequstToServer();
			},
			bindSelect(e) {
				for (let file of e.tempFiles) {
					this.imagesPaths.push({
						uri: file.path
					})
				}
			},
			bindDelete(e) {
				this.imagesPaths.splice(this.imagesPaths.indexOf({
					uri: e.tempFilePath
				}), 1)
			},
			bindVideoSelect(e) {
				this.videoPath = e.tempFilePaths[0] // 限制一个视频
			},
			bindVideoDelete(e) {
				this.videoPath = ''
			},
			sendRequstToServer() {
				uni.request({
					url: 'http://192.168.6.128:8080', // 紧急事件登记的接口地址
					method: 'POST',
					data: {
						date: this.date,
						kind: this.kind[this.kindValue].text,
						farmCode: this.farmCode,
						detail: this.detail,
						images: this.images,
						video: this.video,
						result: this.result,
						done: this.doneValue==1
					},
					header: {
						'content-type': 'application/json' // 自定义请求头信息
					},
					success: (response) => {
						if (response.statusCode == 200) {
							uni.showToast({
								title: '提交成功'
							});
							setTimeout(() => {
								uni.switchTab({
									url: '/pages/WorkOrder/WorkOrder',
								})
							}, 2000)
						} else {
							console.log('提交失败:', response);
							uni.showToast({
								title: '提交失败',
								icon: 'error'
							})
						}
					},
					fail: (response) => {
						console.log('请求后端失败:', response);
						uni.showToast({
							title: '提交失败',
							icon: 'error'
						})
					}
				})
			}
		}
	}
</script>

<style lang="scss">
	.mainCSS {
		padding: 25rpx;
		background-color: white;
	}

	.column {
		margin-top: 30rpx;
		margin-bottom: 15rpx;
		font-weight: bold;
		font-size: 30rpx;
	}

	button {
		border-radius: 30rpx;
	}
</style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uni-app的Vue.js实现微信小程序的紧急事件登记页面功能 的相关文章

随机推荐

  • Sqli-labs less 29

    Less 29 首先先看下tomcat中的index jsp文件 在apache的index php中 sql语句为 sql SELECT FROM users WHERE id id LIMIT 0 1 因此我们根据HPP的原理 我们直接
  • 算法第一章作业

    1 请上网了解编码规范 说明你本学期的编码遵循哪个规范及该规范的链接 本学期我会遵循Google的编码规范 参考链接 https blog csdn net freeking101 article details 78930381 2 请阅
  • 大数据学习 第一篇——基础知识

    前言 在学习大数据之前 先要了解他解决了什么问题 能给我们带来什么价值 一方面 以前IT行业发展没有那么快 系统的应用也不完善 数据库足够支撑业务系统 但是随着行业的发展 系统运行的时间越来越长 搜集到的数据也越来越多 传统的数据库已经不能
  • ftp 530 login incorrect

    今天在新建虚拟账号过程中遇到的一点小问题 记录一下 新建的流程如下 vim etc vsftpd virtusers 在最底下加入账号名 ftpuser 和密码 db load T t hash f etc vsftpd virtusers
  • java多线程内存同步问题

    多线程内存可见性 1 volatile保证内存可见 2 sleep同步内存数据 3 System out print 方法同步线程数据 4 异常打印也会同步线程数据 1 volatile保证内存可见 volatile保证java多线程内存
  • 字符串流stringstream--<sstream>

    字符串流stringstream流详解 一 stringstream是C 提供的一个字符串流 与iostream和fstream的操作方法类似 只是功能不同 要使用字符串流必须包含其头文件
  • 小程序开发之搜索框

    日常学习之小程序开发 搜索框 为了完成搜索框 我们先在 pages 文件夹中创建 search 文件并创建相应的 page 搜索框 可以用 vant 组件中的 van search 标签来实现 需要在 miniprogram 文件夹的内建终
  • error: ‘QObject::QObject(const QObject&)’ is private within this context

    error QObject QObject const QObject is private within this context 这个错误是由于QObject类的拷贝构造函数被声明为私有 导致在某些情况下无法进行对象的拷贝操作而产生的
  • 最小费用最大流详解与模板

    最小费用最大流 在最大流有多组解时 给每条边在附上一个单位费用的量 问在满足最大流时的最小费用是多少 思想 给出一个容量网络 那他的最大流一定是一个定值 即使是有多个一样的最大值 所以我们从开始的可行流开始增广时 最终的增广量是一定的 所以
  • 你知道“$set”是什么吗?

    set 的原理是基于Vue的响应式系统和Vue的观察者机制 当使用 set 方法时 它会执行以下步骤来实现动态添加或修改响应式对象的属性 1 首先 set 会检查对象是否已经是响应式的 如果对象未被代理为响应式对象 它会将对象转换为响应式对
  • 机器学习之朴素贝叶斯算法的详解(包含高斯朴素贝特斯、多项式朴素贝叶斯、伯努利朴素贝叶斯,以及相应算法的简单实现)

    机器学习18 贝叶斯算法详解 2021 06 02 2021 06 05 一 朴素贝叶斯算法 为什么需要朴素贝叶斯算法 比如说 我们想预测一个人究竟是否能够侥幸在空难中生还 那么我们就需要建立一个分类模型来学习我们的训练集 在训练集中 其中
  • 学习cocos2d-x 之路 (1)--了解cocos2d-x

    学前感言 很久以前就听说过cocos2d的大名 知道它在手机游戏开发中处于主导地位 但是今天是真正意义上第一次接触 当前手机游戏市场十分火爆 我想对于任何一个对游戏感兴趣并且准备投身手机游戏开发的人学习这款引擎都是必要的 从百度百科上阅读了
  • Linux学习之安装vim软件

    Linux学习之安装vim软件欢迎来到陈冬冬的个人经验分享平台https www chendd cn blog article 1477573897833009153 html 在前一篇文章中初步使用到了 vi 命令去更改网络连接的参数文件
  • 【git系列】从远端仓库获取最新代码合并到本地分支里

    在日常开发中 很有可能几个开发人员都在开发同一个代码仓分支 导致本地分支里的代码 落后于 远端分支里的 我们需要做的就是从远端仓库获取最新代码合并到本地分支里 1 git pull 有风险 获取最新代码到本地 并自动合并到当前分支 首先我们
  • ORB_SLAM2 with XTION的编译问题(1)

    ORB SLAM2 with XTION的编译问题及解决 1 源链接为https github com chaizheng2157 RGBD ORB SLAM2 RT 其中里面有两个包要编译 分别是g2o with orbslam2和ORB
  • matlab做多元门限回归模型,门限自回归模型

    2014年第6期 郑晓亚 我国股权风险溢价的长期趋势与短期特征 我国股权风险溢价的长期趋势与短期特征 结合门限自回归模型与B P多重结构型断点检验的经验研究郑 Hansen 于 1996 年在 Econometrica 上发表文章 Infe
  • Vercel国内无法访问解决方案

    域名解析使用 cname vercel dns com 或 将 A 记录从 76 76 21 21 改成 76 223 126 88 官方建议将 cname 从 cname vercel dns com 修改为 cname china ve
  • python web页面增删改查_python web 增删改查教你快速入门

    1 导入需要的扩展和包from sqlalchemy import create engine Column Integer String from sqlalchemy ext declarative import declarative
  • 数据源 JNDI 作用

    数据源在JDBC中的应用简介众所周知 JDBC Java数据库连接 是Java 2企业版的重要组成部分 它是基于SQL层的API 通过把SQL语句嵌入JDBC接口的方法中 用户可以通过Java程序执行几乎所有的数据库操作 JDBC只提供了接
  • uni-app的Vue.js实现微信小程序的紧急事件登记页面功能

    主要功能实现 完成发生时间选择功能 用户可以通过日期选择器选择事件发生的时间 实现事件类型选择功能 用户可以通过下拉选择框选择事件的类型 添加子养殖场编号输入框 用户可以输入与事件相关的子养殖场编号 完成事件描述输入功能 用户可以通过文本输