2023年09月18日 20:43
原创作品,转载时请务必以超链接形式标明文章原始出处,否则将追究法律责任。

好久没有写文章了,说实话这两年技术上也没有什么进展,毕竟已经是35以上的老家伙了,即将面临公司的无情裁员。今年暑假回老家把房子装修了一下,实在不行回老家种地。老家的环境实在是治愈,比西安好多了。

image.png

有位哥们想做一个app,比较简单,之前我也没做过什么app,于是乎就瞎折腾了一下,现学现做,最后做出来这个一个效果

image.png

这个东西直接我们参考uni-app官网,就做出来了,无非就是布局么。开发工具选择hbuilder,整个页面的导航以及底部栏都定义在pages.json中
image.png

参考官网uni-app官网 (dcloud.net.cn),首页代码很简单

<template>
	<view>
		<uni-section title="设备状态日报" type="line">
			<uni-row>
				<uni-col :span="8">
					<view class="row-content-c">
						<uni-tag text="正常:2" type="success" />
					</view>
					<view class="row-content-b">
						<uni-tag text="警告:0" type="primary" />
					</view>
				</uni-col>
				<uni-col :span="8">
					<view class="number-circle">
						<view class="number-circle-inner">
							<view class="inner-text">
								<view class="inner-text-header">2</view>
								<text>总设备</text>
							</view>
						</view>
					</view>
				</uni-col>
				<uni-col :span="8">
					<view class="row-content-c">
						<uni-tag text="报警:0" type="warning" />
					</view>
					<view class="row-content-b">
						<uni-tag text="危险:0" type="error" />
					</view>
				</uni-col>
			</uni-row>
		</uni-section>
		<uni-section title="待处理报警(2)" v-if="displayType==0" type="line">
			<view>
				<uni-list>
					<uni-list-item clickable link @click="goEquipmentDetail('8#')" :show-arrow="false">
						<template v-slot:header>
							<view class="list-header-circle-2"><text>四级</text></view>
						</template>
						<template v-slot:body>
							<view>
								<text class="list-header">8#皮带机</text>
								<view><text class="list-content">2023/06/10 16:00:00</text></view>
								<view><text class="list-foot">门限</text></view>
							</view>
						</template>
						<template v-slot:footer>
							<view class="chat-custom-right">
								<uni-tag text="59天24小时" type="default" class="tag-text" />
								<view style="margin-top: 10px;"><uni-tag text="待处理" type="primary" :circle="true" />
								</view>
							</view>
						</template>
					</uni-list-item>
					<uni-list-item clickable link @click="goEquipmentDetail('4#')" :show-arrow="false">
						<template v-slot:header>
							<view class="list-header-circle-2"><text>四级</text></view>
						</template>
						<template v-slot:body>
							<view>
								<text class="list-header">4#皮带机</text>
								<view><text class="list-content">2023/06/10 16:00:00</text></view>
								<view><text class="list-foot">门限</text></view>
							</view>
						</template>
						<template v-slot:footer>
							<view class="chat-custom-right">
								<view><uni-tag text="59天17小时" type="default" class="tag-text" /></view>
								<view style="margin-top: 10px;"><uni-tag text="待处理" type="primary" :circle="true" />
								</view>
							</view>
						</template>
					</uni-list-item>
				</uni-list>
			</view>
		</uni-section>
		<uni-section title="待评价案例(0)" v-else type="line">
			<view style="text-align: center;">
				<image src="../../static/home/no-content.png"></image>
			</view>
		</uni-section>
		<view class="segment-bar-container">
			<uni-segmented-control class="segment-bar" :current="current" :values="items" style-type="button"
				active-color="#2979ff" @clickItem="onClickItem" />
		</view>
		<uni-section title="我的应用" type="line">
			<uni-row>
				<uni-col :span="8" v-for="(item ,index) in list" :index="index" :key="index">
					<view class="grid-item-box" @click="goApp(index)">
						<image class="image" :src="item.url" mode="aspectFill" />
						<text class="list-img-text">{{item.text}}</text>
					</view>
				</uni-col>
			</uni-row>
		</uni-section>
	</view>
</template>

<script>
	export default {
		onLoad() {
			uni.setTabBarBadge({
				index: 2,
				text: '2'
			});
		},
		data() {
			return {
				items: ['', ''],
				current: 0, //1-待处理报警 2-待评价案例1
				displayType: '0',
				list: [{
						url: '/static/home/6.png',
						text: '诊断'
					},
					{
						url: '/static/home/5.png',
						text: '停机报告'
					},
					{
						url: '/static/home/3.png',
						text: '数据质量'
					},
					{
						url: '/static/home/4.png',
						text: '案例'
					},
					{
						url: '/static/home/1.png',
						text: '体检'
					},
					{
						url: '/static/home/2.png',
						text: '启机加采'
					}
				]
			}
		},
		methods: {
			goApp(index) {
				if (index == 0) {
					uni.navigateTo({
						url: '/pages/diagnostic/index'
					})
				} else if (index == 1) {
					uni.navigateTo({
						url: '/pages/diagnostic/stopreport'
					})
				} else if (index == 4) {
					uni.navigateTo({
						url: '/pages/diagnostic/exam'
					})
				} else if (index == 2) {
					uni.navigateTo({
						url: '/pages/data/index'
					})
				} else if (index == 3) {
					uni.navigateTo({
						url: '/pages/data/example'
					})
				} else if (index == 5) {
					uni.navigateTo({
						url: '/pages/data/collect_add'
					})
				}
			},
			goEquipmentDetail(item) {
				uni.navigateTo({
					url: '/pages/alarm/detail?equipmentId=' + item
				});
			},
			onClickItem(e) {
				this.displayType = e.currentIndex;
			}
		}
	}
</script>

<style>
	.image {
		width: 45px;
		height: 45px;
	}

	.grid-item-box {
		flex: 1;
		// position: relative;
		/* #ifndef APP-NVUE */
		display: flex;
		/* #endif */
		flex-direction: column;
		align-items: center;
		justify-content: center;
		padding: 15px 0;
	}

	.grid-item-box-row {
		flex: 1;
		// position: relative;
		/* #ifndef APP-NVUE */
		display: flex;
		/* #endif */
		flex-direction: row;
		align-items: center;
		justify-content: center;
		padding: 15px 0;
	}

	.row-content-c {
		text-align: center;
		margin-top: 10px;
	}

	.row-content-b {
		text-align: center;
		margin-top: 60px;
	}

	.number-circle {
		border-radius: 50%;
		background-color: #18bc37;
		height: 130px;
		width: 130px;
		margin: auto;
	}

	.number-circle-inner {
		width: 110px;
		height: 110px;
		border-radius: 50%;
		background-color: whitesmoke;
		position: relative;
		top: 10px;
		left: 10px;
	}

	.inner-text {
		padding-top: 30px;
		text-align: center;
	}

	.inner-text-header {
		font-weight: bold;
		font-size: 18px;
	}

	.list-img-text {
		margin-top: 5px;
	}

	.list-header-circle {
		border-radius: 50%;
		margin-right: 10px;
		text-align: center;
		padding-top: 10px;
		color: #f8f8f8;
		justify-content: center;
		background-color: #f3a73f;
		height: 30px;
		width: 40px;
	}
	
	.list-header-circle-2 {
		border-radius: 50%;
		margin-right: 10px;
		text-align: center;
		padding-top: 10px;
		color: #f8f8f8;
		justify-content: center;
		background-color: red;
		height: 30px;
		width: 40px;
	}

	.list-header-circle-3 {
		border-radius: 50%;
		margin-right: 10px;
		text-align: center;
		padding-top: 10px;
		color: #f8f8f8;
		justify-content: center;
		background-color: #CC3399;
		height: 30px;
		width: 40px;
	}

	.list-header {
		font-weight: bold;
	}

	.list-content {
		font-size: 12px;
		color: #8f939c;
	}

	.list-content-right {
		font-size: 12px;
		color: #8f939c;
		background-color: #8f939c;
	}

	.list-foot {
		font-size: 14px;
		color: #8f939c;
	}

	.chat-custom-right {
		flex: 1;
		/* #ifndef APP-NVUE */
		display: flex;
		/* #endif */
		flex-direction: column;
		justify-content: space-between;
		align-items: flex-end;
	}

	.segment-bar-container {
		padding: 20px;
		text-align: center;
	}

	.segment-bar {
		height: 10px;
		width: 50%;
		margin: auto;
	}

	.tag-text {
		background-color: #e6e6e6;
		color: #2c2c2c;
	}
</style>

报警详情页面
image.png

控件直接去参考官网,代码如下,这玩意真没什么可讲的,照猫画虎

<template>
	<view>
		<uni-section title="报警信息" type="line" titleFontSize="16px">
			<template v-slot:right>
				<text class="right-text">待处理</text>
			</template>
			<view>
				<uni-list>
					<uni-list-item>
						<template v-slot:body>
							<view>
								<text class="list-header">{{equipmentName}}皮带机</text>
								<view class="list-content"><text>山东潍焦集团皮带机在线监测项目
										\皮带机</text></view>
							</view>
						</template>
						<template v-slot:footer>
							<view class="chat-custom-right">
								<uni-tag text="四级报警" type="error" circle="true" style="font-size: 14px;" />
								<view style="margin-top: 10px;"><text>2023-06-14 14:00:00</text></view>
							</view>
						</template>
					</uni-list-item>
				</uni-list>
			</view>
		</uni-section>
		<uni-section title="报警明细" type="line" titleFontSize="16px">
			<uni-grid :column="2" :showBorder="false" :square="false">
				<uni-grid-item>
					<view class="grid-item-box">
						<view class="grid-item-title">3、4轴输出端6H</view>
						<view class="grid-item-detail">8k 速度波形(10~1000)</view>
						<view class="grid-item-foot">数字积分;</view>
						<view class="grid-item-detail">2023-06-13 18:00:00</view>
						<uni-tag class="grid-item-tag" text="1.613 mm/s" type="primary" circle="true" />
					</view>
				</uni-grid-item>
				<uni-grid-item>
					<view class="grid-item-box">
						<view class="grid-item-title">2、3轴输出端4H</view>
						<view class="grid-item-detail">8k 速度波形(10~1000)</view>
						<view class="grid-item-foot">数字积分;</view>
						<view class="grid-item-detail">2023-06-19 08:00:00</view>
						<uni-tag class="grid-item-tag" text="1.32 mm/s" type="primary" circle="true" />
					</view>
				</uni-grid-item>
				<uni-grid-item>
					<view class="grid-item-box">
						<view class="grid-item-title">3、4轴输出端6V</view>
						<view class="grid-item-detail">8k 加速度波形(0.1~1000)</view>
						<view class="grid-item-foot">水平超限</view>
						<view class="grid-item-detail">2023-06-22 16:00:00</view>
						<uni-tag class="grid-item-tag" text="4.43 m/s^2" type="primary" circle="true" />
					</view>
				</uni-grid-item>
				<uni-grid-item>
					<view class="grid-item-box">
						<view class="grid-item-title">4轴输入端7H</view>
						<view class="grid-item-foot">温度报警</view>
						<view class="grid-item-detail">2023-06-22 18:20:34</view>
						<uni-tag class="grid-item-tag" text="65°C" type="primary" circle="true" />
					</view>
				</uni-grid-item>
			</uni-grid>
		</uni-section>
		<uni-section title="诊断结论" type="line" titleFontSize="16px">
			<view class="row-column">
				<uni-row>
					<uni-col :span="12">
						<view class="row-title"><text>诊断结论</text></view>
						<view class="row-content"><text>暂无</text></view>
					</uni-col>
					<uni-col :span="12">
						<view class="row-title"><text>维修建议</text></view>
						<view class="row-content"><text>暂无</text></view>
					</uni-col>
				</uni-row>
				<uni-fab ref="fab" :pattern="pattern" :content="content" :horizontal="horizontal" :vertical="vertical"
					:direction="direction" @trigger="trigger" @fabClick="fabClick" />
			</view>
		</uni-section>
		<view style="clear: both;">
			<uni-section title="报警反馈处理" type="line" titleFontSize="16px">
				<view style="text-align: center;">
					<text>暂无数据</text>
				</view>
			</uni-section>
		</view>
		<uni-popup ref="popup">
			<view class="pop">
				<view class="popup-title">
					<view style="padding:10px"><text>添加诊断结论</text></view>
				</view>
				<view class="popup-use">
					<uni-forms ref="addDiagnosticForm" label-position="top" label-width="100px">
						<uni-forms-item label="部件:" required>
							<button type="default" size="mini" style="width: 230px;" @click="showPart">选择...</button>
						</uni-forms-item>
						<uni-forms-item label="诊断结论" required>
							<uni-easyinput type="textarea" placeholder="请输入诊断结论" />
						</uni-forms-item>
						<uni-forms-item label="维修建议" required>
							<uni-easyinput type="textarea" placeholder="请输入维修建议" />
						</uni-forms-item>
						<uni-row>
							<uni-col :span="11">
								<button type="default" size="mini" style="width: 100%;" @click="closeDialog">取消</button>
							</uni-col>
							<uni-col :span="11" :offset="2">
								<button type="primary" size="mini" style="width: 100%;" @click="saveDialog">确认</button>
							</uni-col>
						</uni-row>
					</uni-forms>
				</view>
			</view>
		</uni-popup>

		<uni-popup ref="popup_part">
			<view class="pop-select">
				<view class="popup-title">
					<view style="padding:10px"><text>选择故障部件</text></view>
				</view>
				<view class="popup-use">
					<uni-section title="轴承" type="line">
						<uni-group style="width:300px;">
							<uni-row>
								<uni-col :span="12">
									<button type="primary" size="mini" plain="true">发电机轴承</button>
								</uni-col>
								<uni-col :span="12">
									<button type="primary" size="mini" plain="true">齿轮箱轴承</button>
								</uni-col>
								<uni-col :span="12">
									<button type="primary" size="mini" plain="true">主轴轴承</button>
								</uni-col>
								<uni-col :span="12">
									<button type="primary" size="mini" plain="true">电机轴承</button>
								</uni-col>
								<uni-col :span="12">
									<button type="primary" size="mini" plain="true">泵轴承</button>
								</uni-col>
								<uni-col :span="12">
									<button type="primary" size="mini" plain="true">风机轴承</button>
								</uni-col>
								<uni-col :span="12">
									<button type="primary" size="mini" plain="true">激振器轴承</button>
								</uni-col>
							</uni-row></uni-group>
						<uni-section title="挤压棍" type="line">
							<uni-group mode="card" style="width:300px;">
							</uni-group>
						</uni-section>
						<uni-section title="联轴器" type="line">
							<uni-group mode="card" style="width:300px;">
								<uni-row>
									<uni-col :span="12">
										<button type="primary" size="mini" plain="true">液力耦合器</button>
									</uni-col>
								</uni-row></uni-group>
						</uni-section>
						<uni-row>
							<uni-col :span="11">
								<button type="default" size="mini" style="width: 100%;" @click="cancel">取消</button>
							</uni-col>
							<uni-col :span="11" :offset="2">
								<button type="primary" size="mini" style="width: 100%;" @click="save">确认</button>
							</uni-col>
						</uni-row>
					</uni-section>

				</view>
			</view>
		</uni-popup>
	</view>
</template>

<script>
	export default {
		onLoad: function(option) {
			this.equipmentName = option.equipmentId;
		},
		components: {},
		data() {
			return {
				equipmentName: '',
				horizontal: 'right',
				vertical: 'bottom',
				direction: 'horizontal',
				pattern: {
					color: '#333333',
					backgroundColor: '#FFFFCC',
					selectedColor: '#007AFF',
					buttonColor: '#007AFF',
					iconColor: '#fff'
				},
				content: [{
						iconPath: '/static/home/feed.png',
						selectedIconPath: '/static/home/feed.png',
						text: '现场反馈',
						active: false
					},
					{
						iconPath: '/static/home/alarm.png',
						selectedIconPath: '/static/home/alarm.png',
						text: '关闭报警',
						active: false
					},
					{
						iconPath: '/static/home/add.png',
						selectedIconPath: '/static/home/add.png',
						text: '添加诊断',
						active: false
					}
				]
			}
		},
		onBackPress() {
			if (this.$refs.fab.isShow) {
				this.$refs.fab.close()
				return true
			}
			return false
		},
		methods: {
			closeDialog() {
				this.$refs.popup.close();
			},
			saveDialog() {
				uni.showToast({
					title: '保存成功!',
					duration: 2000
				})

				this.$refs.popup.close();
			},
			trigger(e) {
				this.content[e.index].active = !e.item.active
				if (e.item.text == '关闭报警') {
					uni.showModal({
						title: '提示',
						color: 'red',
						content: `确认关闭报警吗?`,
						confirmColor: '#CC3333',
						cancelColor: '#009966',
						success: function(res) {
							if (res.confirm) {
								console.log('用户点击确定')
							} else if (res.cancel) {
								console.log('用户点击取消')
							}
						}
					})
				} else if (e.item.text == '添加诊断') {
					this.$refs['popup'].open();
				} else if (e.item.text == '现场反馈') {
					uni.navigateTo({
						url: '/pages/alarm/feedback'
					})
				}

			},
			fabClick() {

			},
			switchBtn(hor, ver) {
				if (hor === 0) {
					this.direction = this.direction === 'horizontal' ? 'vertical' : 'horizontal'
					this.directionStr = this.direction === 'horizontal' ? '垂直' : '水平'
				} else {
					this.horizontal = hor
					this.vertical = ver
				}
				this.$forceUpdate()
			},
			showPart() {
				this.$refs.popup_part.open();
			},
			cancel() {
				this.$refs.popup_part.close();
			},
			save() {
				this.$refs.popup_part.close();
			}
		}
	}
</script>

<style>
	.right-text {
		color: #2979ff;
	}

	.list-header {
		font-weight: bold;
	}

	.list-content {
		font-size: 14px;
		word-wrap: break-word;
	}

	.list-content-right {
		font-size: 12px;
		color: #8f939c;
		background-color: #8f939c;
	}

	.chat-custom-right {
		font-size: 12px;
		flex: 1;
		/* #ifndef APP-NVUE */
		display: flex;
		/* #endif */
		flex-direction: column;
		justify-content: space-between;
		align-items: flex-end;
	}

	.grid-item-box {
		flex: 1;
		/* #ifndef APP-NVUE */
		display: flex;
		/* #endif */
		flex-direction: column;
		align-items: left;
		justify-content: center;
		padding: 15px 0;
		background-color: #e9e9eb;
		margin: 10px 10px 5px 10px;
		border-radius: 10px;
		border: 1px;
		border-color: #2979ff;
	}

	.grid-item-title {
		padding-left: 10px;
		font-size: 16px;
		font-weight: bold;
		text-align: left;
	}

	.grid-item-detail {
		padding-left: 10px;
		padding-top: 2px;
		font-size: 14px;
		text-align: left;
	}

	.grid-item-foot {
		padding-left: 10px;
		padding-top: 2px;
		font-size: 14px;
		text-align: left;
		color: #2979ff;
	}

	.grid-item-tag {
		margin-left: 10px;
		margin-top: 5px;
		font-size: 14px;
		text-align: left;
		width: 80px;
	}

	.row-column {
		padding-top: 10px;
		margin-left: 10px;
		background-color: #e9e9eb;
		width: 90%;
		height: 30px;
		text-align: center;
	}

	.row-title {
		font-size: 15px;
		font-weight: bold;
	}

	.row-content {
		font-size: 14px;
		color: #8f939c;
		margin-top: 20px;
	}

	.pop {
		width: 350px;
		background-color: #FFFFFF;
		display: flex;
		flex-direction: column;
		align-items: center;
		border-radius: 10px;
	}

	.pop-select {
		width: 350px;
		background-color: #FFFFFF;
		display: flex;
		flex-direction: column;
		align-items: center;
		border-radius: 10px;
	}

	.popup-use {
		padding: 24px 30px;
		display: flex;
		justify-content: left;
		letter-spacing: 2px;
	}

	.popup-title {
		background-color: #2979ff;
		height: 40px;
		width: 100%;
		border-radius: 10px 10px 0 0;
		color: #FFFFFF;
	}
</style>

开发完成后,打包apk,安装到手机可以查看实际效果,ok,今天就到这里。

image.png

发表评论
匿名  
用户评论
暂无评论