小程序订餐后台管理系统(一)

市面常见的后台管理系统,一般都是网页端的,移动端的很少见,但在实际应用中,一款能随时随地对后台管理的应用显得很方便,由此萌生开发小程序端的后台管理应用,本程序由uniapp编写,运用了云数据库和云存储,将后端的功能集成到了前端,完全可以用前端知识进行开发。

一.登录页面

本页面主要负责用户登录,如果没有注册,可跳转到注册页面,使用了uview的组件开发,用户数据保存在小程序的云数据库里,这里的数据调取直接采用小程序端调取,不通过服务端,因此不用编写后端接口,操作更简单

<template>
	<view ><u--form
				labelPosition="left"
				:model="model1"
				:rules="rules"
				ref="form1"
		>
		<!-- model绑定表单数据,表单验证规则 -->
			<u-form-item
					label="账号"
					prop="userInfo.phone"
					borderBottom
					ref="item1"
			>
			<!-- prop提交到数据库的属性名 -->
				<u--input
						v-model="model1.userInfo.phone"
						border="none"
				></u--input>
			</u-form-item>
			<u-form-item
					label="密码"
					prop="userInfo.passd"
					borderBottom
					ref="item2"
			>
				<u--input
						v-model="model1.userInfo.passd"
						border="none"
						type="password"
				></u--input>
			</u-form-item>
			</u--form>
		<button type="default" @tap="denlu()">登录</button>
		<button type="default" @tap="zuce()">注册</button>
		
	</view>
</template>

<script>
	export default {
		data() {
			return {
				msg:null,
				passd1:"",
				phone1:"",
				model1:{
					userInfo:{
						phone:"",
						passd:""
					}
				},
				rules:{
					"userInfo.phone":[{
						required: true,
						message: '请填写账号',
						trigger: ['blur', 'change']				
					},
					{
						pattern:/^1[0-9]{10}$/,
                       
						message: '账号不正确',
						trigger: ['change', 'blur'],
					},
					// trigger表单验证时机
					// {
						// 自定义验证
					// 	validator: (rule, value, callback) => {
					// 					// 上面有说,返回true表示校验通过,返回false表示不通过
					// 					// uni.$u.test.mobile()就是返回true或者false的
					// 					return uni.$u.test.contains(value);
					// 				},
					// 				message: '账号不正确',
					// 							// 触发器可以同时用blur和change
					// 							trigger: ['change','blur'],}
					],
					'userInfo.passd':[{
						required: true,
						message: '请填写密码',
						trigger: ['blur', 'change']				
					},{
						pattern:/^[a-zA-Z]\w{5}$/,
						
						message: '密码不正确',
						trigger: ['change', 'blur'],
					},
					
					]
				}
			}
		},
		onReady() {
				// 需要在onReady中设置规则
				this.$refs.form1.setRules(this.rules)
				},
		methods: {
         zuce(){
			 uni.navigateTo({
			 	url:"./zuce"
			 })
		 },
		 denlu(){
			 // 表单验证
			 this.$refs.form1.validate().then(res=>{
				 if(res==true){
					 // 小程序调用数据库,先初始化,填入开发环境
					wx.cloud.init()
					 const testDB = wx.cloud.database({
					   env: 
					 })
					testDB.collection('shitang').where({
					  phone:this.model1.userInfo.phone,
					  passd:this.model1.userInfo.passd
					})
					.get({
					  success: function(res) {
					    // res.data 是包含以上定义的两条记录的数组
						
						this.msg=JSON.stringify(res.data)
						// uni.setStorageSync接受原始类型,不接受对象,所以转成字符串
						console.log(this.msg)
						uni.setStorageSync('wode',this.msg)
						if(res.data.length!=0){
					    uni.navigateTo({
					    	url:'./dianchan'
					    })
						}
						else{
							uni.showToast({
							title: `账号或密码错误`
							})
						}
					  }
					})  
				 }
			
			 })
			 
		 }
		},
		
	}
</script>

<style>
	
</style>

 二.注册页面

 

 此页面使用了uniapp组件库,uni表单验证成功返回的表单数据,Uview表单验证成功返回的是布尔值,图片上传到云存储后返回一个fileID,把这个加入到表单数据中在上传到数据库

<template>
	<view class="">
		
		<view class="">
				<uni-forms ref="form" :modelValue="formData" > 
				<!-- 使用validateFunction,不能添加:rules属性 -->
					<uni-forms-item required   label="姓名" name="name">
						<uni-easyinput  type="text" v-model="formData.name" placeholder="请输入姓名"  :inputBorder="false"/>
					</uni-forms-item>
					<uni-forms-item required   label="密码" name="passd">
						<uni-easyinput  type="password" v-model="formData.passd" placeholder="请输字母加数字6位密码"  :inputBorder="false"/>
					</uni-forms-item>
					<uni-forms-item required name="sex" label="性别">
						<uni-data-checkbox  v-model="formData.sex" :localdata="sexs" :multiple="false" />
					</uni-forms-item>
					<uni-forms-item required   label="电话" name="phone">
						<uni-easyinput  type="text" v-model="formData.phone" placeholder="请输入电话"  :inputBorder="false"/>
					</uni-forms-item>
						<uni-forms-item required   label="部门" name="jop">
							<uni-data-select  v-model="formData.jop" :localdata="jops" placeholder="请选择部门" />
					</uni-forms-item>
					
				
			
				<uni-forms-item required   label="头像" name="img">
						<u-upload
						       :fileList="fileList1"
								v-model="formData.img"
								@afterRead="afterRead"
								@delete="deletePic"
								name="1"
								multiple
								:maxCount="1"
								accept="image"
								
								
							></u-upload>
			</uni-forms-item>
				</uni-forms>
				<button @click="submitForm(form)">提交</button>
			</view>
		
		
		
		
		
		
		
		
	</view>
	
</template>

<script>
	export default{
		data(){
			return{
				formData:{
					name:"",
					sex:"男",
					phone:"",
					passd:"",
					jop:"办公室",
					img:"",
				},
				sexs:[{value:"男",text: "男"	},{value:"女",text: "女"}],
				jops:[{value:"办公室",text: "办公室"	},{value:"物业部",text:"物业部"},{value:"内保部",text:"内保部"}],
				fileList1:[],
				rules:{
					name:{
						rules:[{
							required:true,
							errorMessage:"请输入姓名"
						}]
						},
						sex:{
							rules:[{
								required:true,
							}]
							},
							passd:{
								rules:[{
									required:true,
									errorMessage:"请输入密码"
								},
								{
									validateFunction:function(rule,value,data,callback){
									let	passdReg=/^[a-zA-Z]\w{5}$/
									if(!passdReg.test(value)){
										callback("密码格式不正确")
									}
									return true
									}
									
								
								
								}]
							},
						phone:{
								rules:[{
									required:true,
									errorMessage:"请输入电话"
								},
								{
									validateFunction:function(rule,value,data,callback){
										                        let phoneReg=/^1[0-9]{10}$/
																if (!phoneReg.test(value)) {
																	callback('手机格式不正确')
																}
																else{
																	callback()
																}
																return true}
								}],
							},
						img:{
							rules:[{
								required:true,
								errorMessage:"请选择头像"
							}]
							},
						}
					
				
				
		}	
		},
		onReady() {
				// 需要在onReady中设置规则
				this.$refs.form.setRules(this.rules)
				},
		methods:{
	 afterRead(event){
			// 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
							let lists = [].concat(event.file)
							
							lists.map((item) => {
								this[`fileList${event.name}`].push({
									...item,
									status: 'uploading',
									message: '上传中'
								})
							})
							
							
								
								     wx.cloud.init({env: })
								    // 将图片上传至云存储空间
								    wx.cloud.uploadFile({
								      // 指定上传到的云路径
								      cloudPath: Date.now()+'.png',
								      // 指定要上传的文件的小程序临时文件路径
								      filePath:lists[0].url,
								      // 成功回调
								      success: res => {
								        console.log('上传成功', res)
										this[`fileList${event.name}`].splice(0,1,Object.assign(lists[0], {
																status: 'success',
																message: '',
																url:res.fileID
															}))
										console.log(lists[0])
										this.formData.img=res.fileID
										console.log(this.formData)
										
								      }
								    })
									
								  },
			deletePic(event) {
							this[`fileList${event.name}`].splice(0, 1)
							wx.cloud.deleteFile({
							  fileList: [this.formData.img]
							}).then(res => {
							  // handle success
							  console.log(res.fileList)
							}).catch(error => {
							  // handle error
							})
								},
								
							
		submitForm(form){
			this.$refs.form.validate().then((res)=>{
				
			       
				uni.showToast({
				title: `校验通过`
				})
				wx.cloud.init()
				const testDB = wx.cloud.database({
				  env: 
				})
				const todos = testDB.collection('shitang')
				todos.add({
					 data:res
						
					 
			})
			console.log(res)
			
			setTimeout(()=>{
				uni.navigateTo({
					url:"./index"
				})
			},2000)
			
			
			}).catch(err=>{
				uni.showToast({
				title:"请重新填写"
				})
			})
			}
				
			}
			
			
			}
			
			
			    
			
		
			
				
</script>

<style>
</style>

 

 

 未完待续

小程序舒尔特方格源代码_我爱的昵称为什么都存在的博客-CSDN博客_vue 舒尔特

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值