Bladeren bron

个人中心的社区管理、物业服务、系统设置

slowslo 5 jaren geleden
bovenliggende
commit
68bff12464
8 gewijzigde bestanden met toevoegingen van 590 en 39 verwijderingen
  1. 1 1
      manifest.json
  2. 38 2
      pages.json
  3. 22 36
      pages/mine/mine.vue
  4. 148 0
      pages/repair/detail.vue
  5. 118 0
      pages/repair/item.vue
  6. 115 0
      pages/repair/list.vue
  7. 80 0
      pages/service-list/community-list.vue
  8. 68 0
      pages/service-list/property-list.vue

+ 1 - 1
manifest.json

@@ -57,7 +57,7 @@
     "quickapp" : {},
     /* 小程序特有相关 */
     "mp-weixin" : {
-        "appid" : "wxa05f3aff24dba698",
+        "appid" : "wxe1ed7016c72509a7",
         "setting" : {
             "urlCheck" : false
         },

+ 38 - 2
pages.json

@@ -36,11 +36,29 @@
 		    }
 		    
 		}
+		,{
+		    "path" : "pages/service-list/community-list",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "社区管理",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/service-list/property-list",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "物业服务",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
         ,{
             "path" : "pages/residential/residential",
             "style" :                                                                                    
             {
-                "navigationBarTitleText": "",
+                "navigationBarTitleText": "小区管理",
                 "enablePullDownRefresh": false
             }
             
@@ -58,7 +76,7 @@
             "path" : "pages/unit/unit",
             "style" :                                                                                    
             {
-                "navigationBarTitleText": "",
+                "navigationBarTitleText": "单元管理",
                 "enablePullDownRefresh": false
             }
             
@@ -136,6 +154,24 @@
             }
             
         }
+		,{
+		    "path" : "pages/repair/detail",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "报修详情",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/repair/list",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "物业报修",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
         ,{
             "path" : "pages/user-auth/detail",
             "style" :                                                                                    

+ 22 - 36
pages/mine/mine.vue

@@ -8,8 +8,7 @@
 		</view>
 		<view style="margin: 10rpx;" >
 			<u-cell-group :border="false">
-				<u-cell-item :border-top="false" @click="toService(item)" v-for="(item,index) in menuList1" :key="index"  :title="item.name"></u-cell-item>
-				<u-cell-item  :border-bottom="false" @click="toSetting" v-for="(item,index) of menuList2" :key="index" :title="item"></u-cell-item>
+				<u-cell-item :border-top="false" @click="toServiceList(item)" v-for="(item,index) in menuList" :key="index"  :title="item"></u-cell-item>
 			</u-cell-group>
 		</view>
 	</view>
@@ -19,34 +18,25 @@
 	export default {
 		data() {
 			return {
-				menuList1:	[],
-				menuList2: ["系统设置"]
+				menuList:["社区管理","门禁管理","物业服务","服务人员管理","车辆管理","系统设置"],
 			}
 		},
-		onLoad() {
-			this.getMenu();
-		},
-		onPullDownRefresh(){
-			this.getMenu();
-		},
 		methods: {
-			toSetting(){
-				uni.navigateTo({
-					url: "../setting/setting"
-				})
-			},
-			getMenu(){
-				this.$api.permissions.menuList().then(res=>{
-					console.log(res);
-					for(let item of res.list){
-						if(item.name=="物业管理"){
-							this.menuList1= item.subList;
-						}
-					}
-				});
-			},
-			toService(item){
-				switch(item.name){
+			toServiceList(item){
+				switch(item){
+					case "社区管理":
+						uni.navigateTo({
+							url: "../service-list/community-list"
+						})
+						break;
+					case "门禁管理":
+						this.$u.toast('即将开放');
+						break;
+					case "物业服务":
+						uni.navigateTo({
+							url:"../service-list/property-list"
+						})
+						break;
 					case "服务人员管理": 
 						// uni.navigateTo({
 						// 	url: "../fwry/fwry"
@@ -58,17 +48,13 @@
 							url: "../car-manage/car-manage"
 						})
 						break;
-					case "门禁管理":
-						this.$u.toast('即将开放');
-						break;
-					default :
-						let list= [];
-						for(let element of item.subList){
-							list.splice(list.length,0,element.name);
-						}
+					case "系统设置":
 						uni.navigateTo({
-							url: "../service/service?list="+JSON.stringify(list)
+							url:"../setting/setting"
 						})
+						break;
+					default :
+						break;
 				}
 			}
 		}

+ 148 - 0
pages/repair/detail.vue

@@ -0,0 +1,148 @@
+<template>
+	<view>
+		<view class="bg-base padding" >
+			<view class="text-xxl ">
+				<text v-if="dataDetail.handleStatus==-1">已撤销</text>
+				<text v-else-if="dataDetail.handleStatus==0">待处理</text>
+				<text v-else-if="dataDetail.handleStatus==1">已处理</text>
+			</view>
+			<view class="text-df padding-top-xs">
+				<text v-if="dataDetail.handleStatus==-1">当前工单已取消</text>
+				<text v-else-if="dataDetail.handleStatus==0">当前工单待处理</text>
+				<text v-else-if="dataDetail.handleStatus==1">当前工单已完成</text>
+			</view>
+		</view>
+		
+		<view class="margin-top bg-white padding solid-bottom">
+			<view class="flex justify-between">
+				<view class="text-black">
+					<text>工单编号:{{dataDetail.repairNo}}</text>
+					<text class="text-blue padding-left-sm" @click="copy(dataDetail.repairNo)">复制</text>
+				</view>
+				<view class="text-red">
+					<text v-if="dataDetail.handleStatus==-1">已撤销</text>
+					<text v-else-if="dataDetail.handleStatus==0">待处理</text>
+					<text v-else-if="dataDetail.handleStatus==1">已处理</text>
+				</view>
+			</view>
+		</view>
+		<u-cell-group>
+			<u-cell-item :arrow="false" icon="home" title="所在小区" :value="dataDetail.residentialName"></u-cell-item>
+			<u-cell-item :arrow="false" icon="map" title="维修位置" :value="dataDetail.reportPosition"></u-cell-item>
+			<u-cell-item :arrow="false" icon="clock" title="创建时间" :value="dataDetail.createTime"></u-cell-item>
+			<u-cell-item v-if="dataDetail.handleStatus==1" :arrow="false" icon="clock" title="完成时间" :value="dataDetail.handleTime"></u-cell-item>
+		</u-cell-group>
+		<view class="cu-card dynamic no-card bg-white" style="padding: 30rpx;">
+			<view class="cu-item shadow">
+				<view class=" grid flex-sub  col-4 grid-square" >
+					<view @click="previewPic(index,picArr)" v-for="(item,index) in picArr" :key="index" class="bg-img" :style="{backgroundImage: 'url(' + item + ')'}">
+					</view>
+				</view>
+			</view>
+			<view class="padding-top-20">
+				<text>故障描述:</text>
+				<text class="content">
+					{{dataDetail.reportDetail}}
+				</text>
+			</view>
+		</view>
+		<view v-if="dataDetail.handleStatus==1&&dataDetail.estimateStatus==1" class="margin-top-sm margin-bottom-sm padding bg-white flex" style="box-sizing: border-box;">
+			<view class="">
+				<text class="">工单评价:</text>
+			</view>
+			<view class="flex-sub" >
+				<text class="">{{dataDetail.comment}}</text>
+			</view>
+		</view>
+		<view v-if="dataDetail.handleStatus==0" class="footer-fixed  padding-sm bg-white flex justify-end margin-right-30" style="box-sizing: border-box;z-index: 999;">
+			<!-- 待处理,取消工单 -->
+			<view  class="cu-btn line-red round "  @click="cancel()">
+				取消工单
+			</view>
+			<!-- 已撤销工单,删除工单 -->
+			<view style="margin: 0 10rpx;"  @click="handleRepair()" class="cu-btn line-base round "   >
+				处理工单
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	var app=getApp()
+	var that=this
+	export default {
+		data() {
+			return {
+				//报修编号
+				id:'',
+				content:'',
+				dataDetail:{},
+				picArr:[]
+			}
+		},
+		onLoad(options) {
+			that=this
+			this.id=options.id
+			this.fetchDataDetail()
+		},
+		methods: {
+			fetchDataDetail(){
+				this.$api.residential.findEstateRepairById(this.id).then(res=>{
+					this.dataDetail=res.data
+					this.picArr=this.dataDetail.pic.split(',')
+				})
+			},
+			previewPic(index,picArr){
+				console.log(index);
+				uni.previewImage({
+					urls:picArr,
+					current:index
+				})
+			},
+			copy(data){
+				uni.setClipboardData({
+					data:data
+				})
+			},
+			handleRepair(){
+				this.$showModel('确定把该工单置为已处理状态?').then(res=>{
+					let params=this.dataDetail
+					params.handleStatus=1
+					params.estimateStatus=0
+					this.$api.residential.addOrEditEstateRepair(params).then(res=>{
+						this.$showModel('操作成功',false).then(res=>{
+							uni.navigateBack({
+								delta:1
+							})
+						})
+					})
+				})
+			},
+			cancel(){
+				let that=this
+				uni.showModal({
+					title:"提示",
+					showCancel:true,
+					content:'确定要取消该工单吗?',
+					success: (res) => {
+						console.log(res.confirm);
+						if (res.confirm) {
+							that.dataDetail.handleStatus=-1
+							that.$api.residential.addOrEditEstateRepair(that.dataDetail).then(res=>{
+								that.$showModel('操作成功',false).then(res=>{
+									uni.navigateBack({
+										delta:1
+									})
+								})
+							})
+							
+						}
+					}
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 118 - 0
pages/repair/item.vue

@@ -0,0 +1,118 @@
+<template>
+	<MeScroll  :up="up" :down="down" @up="upFn" :fixed="false" @down="downFn" @init="initMeScroll">
+		<card @handelRepair="handelRepair" :list="list" @></card>
+	</MeScroll>
+</template>
+<script>
+	import MeScroll from '@/components/mescroll-body/mescroll-uni.vue'
+	import card from '@/components/repair/repair'
+	var app=getApp()
+	export default {
+		components:{
+			MeScroll,card
+		},
+		props: {
+			refresh:Boolean,
+			type: Number,
+			i: Number,
+			item:Object
+		},
+		data() {
+			return {
+				isInit: false, // 是否初始化
+				list: [], // 列表数据
+				mescroll: null, // mescroll 对象
+				// 上拉配置参数
+				up: {
+					noMoreSize: 5, 
+					auto: true,
+					page: {
+						page: 0,
+						size: 10
+					}
+				},
+				// 下拉配置参数
+				down: {
+					use: true, 
+					auto: false
+				}
+			}
+		},
+		watch:{
+			refresh() {
+				console.log("我要刷新了");
+				this.mescroll.resetUpScroll()
+			},
+			type(val) {
+				if(!this.isInit && val === this.i) {
+					this.mescroll.resetUpScroll()
+				}
+			}
+		},
+		mounted() {
+			if(!this.isInit && this.i === 0) {
+				this.mescroll.resetUpScroll()
+			}
+		},
+		methods: {
+			handelRepair(item){
+				item.handleStatus=1
+				item.estimateStatus=0
+				this.$showModel('确定把该工单置为已处理状态?').then(res=>{
+					this.$api.residential.addOrEditEstateRepair(item).then(res=>{
+						this.$u.toast('操作成功')
+						this.mescroll.resetUpScroll()
+					})
+				})
+			},
+			/**
+			 * @param {Object} mescroll 初始化组件
+			 */
+			initMeScroll(mescroll) {
+				this.mescroll = mescroll
+			},
+			/**
+			 * @param {Object} mescroll 上拉回调
+			 */
+			upFn(mescroll) {
+				let that=this
+				let data={
+					current:mescroll.num,
+					size:mescroll.size,
+					handleStatus:this.item.value
+				}
+				// if (this.item.value==2) {
+				// 	data.handleStatus=1
+				// 	data.estimateStatus=0
+				// }
+				try{
+					this.$api.residential.showRepairList(data).then(res=>{
+						let data=res.data.records
+						console.log(data);
+						let length=data.length
+						mescroll.endBySize(length, res.data.total);
+						if(mescroll.num == 1) that.list = []; 
+						that.list=that.list.concat(data); 
+					})
+				}catch(e){
+					mescroll.endErr();
+				}
+			},
+			/**
+			 * 下拉回调
+			 * */
+			downFn(mescroll) {
+				setTimeout(()=>{
+					this.list=[]
+					this.mescroll.resetUpScroll()
+				},1500)
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	view{
+		box-sizing: border-box;
+	}
+</style>

+ 115 - 0
pages/repair/list.vue

@@ -0,0 +1,115 @@
+<template>
+	<view class="container">
+		<view class="tabs">
+			<scroll-view scroll-x class="bg-white nav">
+				<view class="flex text-center">
+					<view class="cu-item flex-sub" :class="index==current?'text-base text-xl text-bold':'text-lg'" v-for="(item,index) in tabs" :key="index" @tap="tabChange(index)" >
+						{{item.name}}
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+		<view style="height: 100%;">
+			<swiper style="height: 100%;" :current="current"  @change="swiperChange"
+				@animationfinish="animationfinish">
+				<swiper-item  v-for="(item, index) in tabs" :key="index">
+					<scroll-view scroll-y style="height: 100%;">
+						<item :refresh="refresh" :i="index" :item="item" :type="current"></item>
+					</scroll-view>
+				</swiper-item>
+			</swiper>
+		</view>
+	</view>
+</template>
+<script>
+	import item from "./item.vue"
+	export default {
+		components: {
+			item
+		},
+		data() {
+			return {
+				//是否第一次进入页面
+				isfirst:false,
+				//动态让item主动刷新
+				refresh:false,
+				scrollLeft:0,
+				current: 0,
+				swiperCurrent:0,
+				tabs: [
+					//数据库数据状态- 
+					//工单状态 -1 已取消  0:待处理  1:已处理
+					//评价 estimateStatus 待评价0  已评价 1
+					{
+						name: '全部',
+						value:''
+					},
+					{
+						name: '待处理',
+						value:0
+					},
+					{
+						name: '已取消',
+						value:-1
+					},
+					{
+						name:'已处理',
+						value:1
+					}
+				],
+			}
+		},
+		onShow(){
+			if (this.isfirst) {
+				this.isfirst=false
+			}else{
+				//刷新列表
+				this.refresh=!this.refresh
+			}
+		},
+		onLoad() {
+			this.isfirst=true
+		},
+		methods:{
+			tabChange(index) {
+				this.current = index
+				// this.scrollLeft = (index - 1) * 60
+			},
+			swiperChange(e) {
+			  uni.pageScrollTo({
+			      scrollTop: 0,
+			      duration: 0
+			  });
+			  this.current = e.detail.current
+			  // this.scrollLeft = (this.current - 1) * 60
+			},
+			animationfinish({detail: { current }}) {
+				this.swiperCurrent = current;
+				this.current = current;
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.text-xl{
+		font-size: 34rpx;
+	}
+	
+	.container {
+	  height: calc(100vh);
+	  background-color: #F6F6F6;
+	  padding: 78rpx 0rpx 0rpx;
+	 .tabs {
+	    position: fixed;
+	    top: -10rpx;
+		left: 0;
+		display: flex;
+		align-items: center;
+		width: 100%;
+		background-color: #FFFFFF;
+		box-sizing: border-box;
+		z-index: 3;
+	  }
+}
+</style>

+ 80 - 0
pages/service-list/community-list.vue

@@ -0,0 +1,80 @@
+<template>
+	<view class="center">
+		<view style="margin: 10rpx;" >
+			<u-cell-group :border="false">
+				<u-cell-item :border-top="false" @click="toCommunityService(item)" v-for="(item,index) in CommunityMenuList" :key="index"  :title="item"></u-cell-item>
+			</u-cell-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				CommunityMenuList:["小区管理","楼栋管理","单元管理","房间管理","系统设置"],
+			}
+		},
+		methods: {
+			toCommunityService(item){
+				switch(item){
+					case "小区管理":
+						uni.navigateTo({
+							url: "../residential/residential"
+						})
+						break;
+					case "楼栋管理":
+						uni.navigateTo({
+							url: "../building/building"
+						})
+						break;
+					case "单元管理":
+						uni.navigateTo({
+							url: "../unit/unit"
+						})
+						break;
+					case "房间管理": 
+						uni.navigateTo({
+							url: "../room/room"
+						})
+						break;
+					case "系统设置":
+						uni.navigateTo({
+							url:"../setting/setting"
+						})
+						break;
+					default :
+						break;
+				}
+			}
+		}
+	}
+</script>
+
+<style>
+	page{
+		background-color: #FFFFFF;
+	}
+	
+	.cu-btn.sm {
+		padding: 0 20upx;
+		font-size: 20upx;
+		height: 42upx;
+	}
+	
+	.logo {
+		display: flex;
+		padding:0 20rpx 40rpx;
+		background-color: #7dc7ae;
+		
+	}
+	.logo-img {
+		width: 120upx;
+		height: 120upx;
+		border-radius: 150upx;
+	}
+	.user-name {
+		font-size: 38upx;
+		color: #FFFFFF;
+	}
+</style>

+ 68 - 0
pages/service-list/property-list.vue

@@ -0,0 +1,68 @@
+<template>
+	<view class="center">
+		<view style="margin: 10rpx;" >
+			<u-cell-group :border="false">
+				<u-cell-item :border-top="false" @click="toPropertyService(item)" v-for="(item,index) in PropertyMenuList" :key="index"  :title="item"></u-cell-item>
+			</u-cell-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				PropertyMenuList:["物业报修","公告管理","用户反馈"],
+			}
+		},
+		methods: {
+			toPropertyService(item){
+				switch(item){
+					case "物业报修":
+						uni.navigateTo({
+							url: "../repair/list"
+						})
+						break;
+					case "公告管理":
+						this.$u.toast('即将开放');
+						break;
+					case "用户反馈":
+						uni.navigateTo({
+							url: "../../components/feedback/feedback"
+						})
+						break;
+					default :
+						break;
+				}
+			}
+		}
+	}
+</script>
+
+<style>
+	page{
+		background-color: #FFFFFF;
+	}
+	
+	.cu-btn.sm {
+		padding: 0 20upx;
+		font-size: 20upx;
+		height: 42upx;
+	}
+	
+	.logo {
+		display: flex;
+		padding:0 20rpx 40rpx;
+		background-color: #7dc7ae;
+		
+	}
+	.logo-img {
+		width: 120upx;
+		height: 120upx;
+		border-radius: 150upx;
+	}
+	.user-name {
+		font-size: 38upx;
+		color: #FFFFFF;
+	}
+</style>