浏览代码

报修样式修改

zouling 2 月之前
父节点
当前提交
e2a9cecdd1
共有 32 个文件被更改,包括 851 次插入281 次删除
  1. 8 1
      property_ui/api/work/manage.js
  2. 8 0
      property_ui/api/work/work.js
  3. 2 2
      property_ui/health/pages/health/add.vue
  4. 64 52
      property_ui/manage/components/car/list.vue
  5. 2 0
      property_ui/manage/pages/community/djdetail.vue
  6. 14 9
      property_ui/manage/pages/community/newsdj.vue
  7. 17 5
      property_ui/manage/pages/community/newssq.vue
  8. 83 41
      property_ui/manage/pages/community/newssqdetail.vue
  9. 二进制
      property_ui/manage/static/news/share.png
  10. 1 1
      property_ui/mine/components/box/list.vue
  11. 1 0
      property_ui/mine/pages/avatar/index.vue
  12. 4 1
      property_ui/mine/pages/info.vue
  13. 1 1
      property_ui/mine/pages/info/authen.vue
  14. 二进制
      property_ui/mine/static/house/sha.png
  15. 二进制
      property_ui/mine/static/house/shb.png
  16. 29 13
      property_ui/people/components/car/list.vue
  17. 1 1
      property_ui/people/components/w-select/w-select.vue
  18. 2 2
      property_ui/people/pages/people/comeadd.vue
  19. 11 28
      property_ui/people/pages/people/staff.vue
  20. 25 31
      property_ui/people/pages/people/staffadd.vue
  21. 358 39
      property_ui/service/components/car/list.vue
  22. 49 7
      property_ui/service/pages/service/complaint.vue
  23. 123 8
      property_ui/service/pages/service/warranty.vue
  24. 二进制
      property_ui/service/static/service/cira.png
  25. 二进制
      property_ui/service/static/service/cirb.png
  26. 3 1
      property_ui/static/style.css
  27. 2 2
      property_ui/work/components/car/list.vue
  28. 2 2
      property_ui/work/pages/manage/addcar.vue
  29. 5 5
      property_ui/work/pages/manage/addhouse.vue
  30. 2 2
      property_ui/work/pages/manage/house.vue
  31. 13 13
      property_ui/work/pages/manage/houseadd.vue
  32. 21 14
      property_ui/work/pages/manage/housedetail.vue

+ 8 - 1
property_ui/api/work/manage.js

@@ -195,7 +195,14 @@ export function getStars(data) {
     'data': data
   })
 }
-
+// 进行分享操作
+export function setShare(data) {
+  return request({
+    url: '/wuYe/news/setShare',
+    method: 'post',
+    'data': data
+  })
+}
 //评论-列表父集
 //根据查询所有一级评论组带子集总数组装成前端所需要的数据结构 带分页
 export function getRootComment(data) {

+ 8 - 0
property_ui/api/work/work.js

@@ -31,6 +31,14 @@ export function houseInfoList(data) {
     'data': data
   })
 }
+// 房屋信息-列表物业查询 不带人员返回wuYe:houseInfo:listManage
+export function houseInfowyList(data) {
+  return request({
+    url: '/wuYe/houseInfo/listManage',
+    method: 'get',
+    'data': data
+  })
+}
 // 房屋信息-详情wuYe:houseInfo:query
 export function houseInfoDet(data) {
   return request({

+ 2 - 2
property_ui/health/pages/health/add.vue

@@ -174,7 +174,7 @@
 					// "residentId":"",//居住人员主键
 					"houseId":"",//关联房屋信息表的house_id
 					// "userId":"",//关联sys_user表中user_id
-					"detailedAddress":"",//居住人员的详细门牌号
+					"detailedAddress":"",//居住人员的门牌号
 					"residentName":"",//居住人员姓名
 					"residentIdCard":"",//居住人员身份证号码,18位
 					"residentBirthday":"",//居住人员出生日期
@@ -307,7 +307,7 @@
 				}else{
 					houseInfolistNoPage().then(res=>{
 						if(res.code==200){
-							this.fwlist= res.rows.map(v => {
+							this.fwlist= res.data.map(v => {
 								return {
 									dictLabel: v.detailedAddress,
 									dictValue: v.houseId,

+ 64 - 52
property_ui/manage/components/car/list.vue

@@ -95,7 +95,7 @@
 			</view>
 		</block>
 		<!-- 维修人员管理 -->
-		<view v-if="type=='staff'" class="flecw">
+		<view v-if="type=='staff'" class="flexcw">
 			<view class="stafflist" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail">
 				<view class="statop">
 					<image class="head" :src="man" v-if="ite.sex==1"></image>
@@ -315,19 +315,18 @@
 		<!-- 评论信息 -->
 		<block v-if="type=='comment'">
 			<view class="pllist flex" v-for="(ite,idx) in datainfo" :key="`yj${idx}`">
-				<image :src="ite.commentUser.avatar?baseUrl+ite.commentUser.avatar:head" class="head"></image>
+				<image :src="ite.commentUser.avatar&&ite.commentUser.avatar.indexOf('/static/img/profile')==-1?baseUrl+ite.commentUser.avatar:head" class="head"></image>
 				<view class="flex1 overh">
-					<view class="flexat mb14 ">
+					<view class="flexat mb9 ">
 						<view class="plname flex1 over">{{ite.commentUser.nickName}}</view>
 						<view class="plrbtn flexc flex0" @click="getDzFn(ite.id,'2',ite.content,idx)">
 							<image :src="nicond" v-if="ite.isLike=='Y'"></image>
-							<image :src="niconb" class="imga" v-else></image>
-							<view>点赞</view>
-						</view>
-						<view class="plrbtn flexc flex0" @touchend.prevent="getHfFn('yjhf',ite,ite.id)">
-							<image :src="nicone" class="imgb"></image>
-							<view>回复</view>
+							<image :src="niconb" class="imga" v-else></image>{{ite.likeCount}}
 						</view>
+						<!-- <view class="plrbtn flexc flex0" @touchend.prevent="getHfFn('yjhf',ite,ite.id)">
+							<image :src="niconf" class="imgd"></image>
+							<image :src="niconb" class="imge"></image>2
+						</view> -->
 						<view class="plrbtn flexc flex0" @click="getDelFn(ite.id)" v-if="checkPermi(['wuYe:commentIndex:remove'])&&ite.isMyself=='Y'">
 							<image :src="del" class="imgc"></image>
 							<view class="cof4">删除</view>
@@ -335,50 +334,35 @@
 					</view>
 					<view class="infotxt">
 						<rich-text v-if="ite.content" :nodes="analyzeEmoji(ite.content)"></rich-text>
-					<view class="infotime">{{ite.createDate}}</view></view>
-				
-					<!-- 二级回复 -->
-					<view class="pllist flex" v-for="(aite,aidx) in ite.childrenList" :key="`ej${aidx}`">
-						<image :src="aite.commentUser.avatar?baseUrl+aite.commentUser.avatar:head" class="head"></image>
-						<view class="flex1 overh">
-							<view class="flexat mb14 ">
-								<view class="plname flex1 over flexc">
-									<view class="over">{{aite.commentUser.nickName}}</view>
-									<block v-if="aite.toRoot=='Y'">
-										<image :src="rimg" class="rimg"></image>
-										<view class="over">{{aite.targetUser.nickName}}</view>
-									</block>
-									<!-- 判断是不是二级回复的回复 加字段-->
-									<!-- <block v-if="ite."></block> -->
-								</view>
-								<view class="plrbtn flexc flex0" @click="getDzFn(aite.id,'2',aite.content,idx,aidx,'ejdz')">
-									<image :src="nicond" v-if="aite.isLike=='Y'"></image>
-									<image :src="niconb" class="imga" v-else></image>
-									<view>点赞</view>
-								</view>
-								<view class="plrbtn flexc flex0" @touchend.prevent="getHfFn('ejhf',aite,ite.id)">
-									<image :src="nicone" class="imgb"></image>
-									<view>回复</view>
-								</view>
-								<view class="plrbtn flexc flex0" @click="getDelFn(aite.id)" v-if="checkPermi(['wuYe:commentIndex:remove'])&&aite.isMyself=='Y'">
-									<image :src="del" class="imgc"></image>
-									<view class="cof4">删除</view>
-								</view>
-							</view>
-							<view class="infotxt">
+						<view class="flexc mt10">
+							<view class="inforeply"  @touchend.prevent="getHfFn('yjhf',ite,ite.id)">回复</view>
+							<view class="infotime">{{formatTimeDiff(ite.createTime)}}</view></view>
+						</view>
+					<!-- 新二级回复 -->
+					<view class="pllista" v-if="ite.childrenList&&ite.childrenList.length">
+						<view class="flexat ptb3" v-for="(aite,aidx) in ite.childrenList" :key="`ej${aidx}`">
+							<view class="plnamea flexcw flex1" @touchend.prevent="getHfFn('ejhf',aite,ite.id)">
+								<view class="over namea">{{aite.commentUser.nickName}}</view>
+								<block v-if="aite.toRoot=='Y'">
+									<view class="plrep">回复</view>
+									<view class="over namea">{{aite.targetUser.nickName}}</view>
+								</block>:
 								<rich-text v-if="aite.content" :nodes="analyzeEmoji(aite.content)"></rich-text>
-								<view class="infotime">{{aite.createDate}}</view></view>
+							</view>
+							<view class="plrbtn flexc flex0" @click="getDelFn(aite.id)" v-if="checkPermi(['wuYe:commentIndex:remove'])&&aite.isMyself=='Y'">
+								<image :src="del" class="imgc"></image>
+								<view class="cof4">删除</view>
+							</view>
 						</view>
 					</view>
 					<view class="flexc" v-if="ite.childrenListCount>0">
-						<view class="zhanbox flexc" v-if="ite.reachflag" @click="getZhanFn(ite,idx)">
+						<view class="zhanbox flexc" v-if="ite.reachflag" @click.stop="getZhanFn(ite,idx)">
 							<block v-if="ite.childrenList&&ite.childrenList.length">展开更多</block>
 							<block v-else>展开{{ite.childrenListCount}}条回复</block>
 							<image :src="upimg" class="zhan"></image>
 						</view>
-						<view v-if="ite.childrenList&&ite.childrenList.length" class="zhanbox flexc ml10" @click="getShouFn(idx)">收起<image :src="upimg"></view>
+						<view v-if="ite.childrenList&&ite.childrenList.length" class="zhanbox flexc ml10" @click.stop="getShouFn(idx)">收起<image :src="upimg"></view>
 					</view>
-					<!-- <view style="height: 16rpx;" v-else></view>	 -->
 				</view>
 			</view>
 		</block>
@@ -622,6 +606,24 @@
 			getDetail(e){
 				this.$emit('getDetail',e)
 			},
+			// 格式时间
+			formatTimeDiff(targetStr) {
+			    const targetDate = new Date(targetStr);
+			    const now = new Date();
+			    const diffInSeconds = Math.floor((now - targetDate) / 1000);
+			    
+			    if (diffInSeconds < 60) {
+			        return "刚刚";
+			    } else if (diffInSeconds < 3600) {
+			        const minutes = Math.floor(diffInSeconds / 60);
+			        return `${minutes}分钟前`;
+			    } else if (diffInSeconds < 86400) {
+			        const hours = Math.floor(diffInSeconds / 3600);
+			        return `${hours}小时前`;
+			    } else {
+			        return targetDate.toISOString().slice(0, 16).replace("T", " ");
+			    }
+			},
 			getPut(e){
 				this.$emit('getPut',e)
 			},
@@ -987,27 +989,37 @@ font-size: 26rpx;color: #272727;display: flex;line-height: 34rpx;
 	}
 }
 //评论
-.pllist{padding-top: 20rpx;margin-bottom: 16rpx;border-bottom: 2rpx solid #DADADA;
+.pllist{margin-bottom: 40rpx;
+	&:last-child{margin-bottom: 0;}
 	.head{width: 40rpx;height: 40rpx;margin-right: 18rpx;flex: 0 0 auto;border-radius: 50%;}
-	.plname{font-weight: bold;font-size: 30rpx;color: #161616;
-		view{max-width: 50%;}
+	.plname{font-size: 30rpx;color: #161616;font-weight: bold;
 	}
 	.plrbtn{margin-left: 36rpx;
 		image{width: 26rpx;height: 24rpx;margin-right: 16rpx;
 			&.imga{width: 26rpx;height: 26rpx;}
 			&.imgb{width: 26rpx;height: 22rpx;}
+			&.imgd{width: 26rpx;height: 24rpx;margin-right: 10rpx;}
+			&.imge{width: 26rpx;height: 26rpx;transform: rotate(180deg);}
 		}
 		view{font-weight: bold;font-size: 24rpx;color: #314081;}
 	}
-	.infotxt{font-weight: 500;font-size: 26rpx;color: #161616;line-height: 40rpx;margin-bottom: 30rpx;
+	// margin-bottom: 30rpx;
+	.infotxt{font-weight: 500;font-size: 26rpx;color: #161616;line-height: 40rpx;
 		&:before {content: "";float: right;width: 0;height: calc(100% - 16px);background: red;}
-		.infotime{font-weight: 500;font-size: 24rpx;color: #666666; float: right;clear: both;}	
+		.inforeply{min-width: 86rpx;height: 42rpx;background: #F8F8F8;border-radius: 20rpx; margin-right: 22rpx;font-weight: 500;
+font-size: 24rpx;text-align: center;padding: 0 8rpx;box-sizing: border-box;line-height: 42rpx;display: inline-block;
+color: #161616;}
+		.infotime{font-weight: 500;font-size: 24rpx;color: #AAAAAA;}
+		// .infotime{font-weight: 500;font-size: 24rpx;color: #666666; float: right;clear: both;}	
 		image{width: 44rpx;height: 44rpx;}
 	}
-	.pllist{
-		padding-top: 0;border-bottom: none;margin-bottom: 0;
+	.pllista{background: #F8F8F8;padding:12rpx 24rpx;border-radius: 10rpx;margin-top: 40rpx;
+		.plnamea{font-size: 26rpx;color: #161616;line-height: 40rpx;
+			.namea{font-weight: bold;max-width: 160rpx;}
+			.plrep{color: #AAAAAA;margin: 0 10rpx;}
+		}
 	}
-	.zhanbox{font-weight: 500;font-size: 24rpx;color: #AAAAAA;padding: 16rpx 0;
+	.zhanbox{font-weight: 500;font-size: 24rpx;color: #AAAAAA;padding-bottom: 16rpx;margin-top: 16rpx;
 		image{width: 20rpx;height: 12rpx;margin-left: 18rpx;transition: all 0.3s;
 			&.zhan{transform: rotate(-180deg);}
 		}

+ 2 - 0
property_ui/manage/pages/community/djdetail.vue

@@ -57,6 +57,7 @@
 				userId:this.$store.state.user.userId,
 				nickName:this.$store.state.user.nickName,
 				avatar:this.$store.state.user.avatar,
+				tenantId:this.$store.state.user.tenantId
 			}
 		},
 		onLoad: function(e) {
@@ -91,6 +92,7 @@
 					targetType:'2',//目标类型(1:社区 2:党建 )
 					targetId:this.id,
 					targetTitle:this.datainfo.partyTitle,
+					tenantId:this.tenantId
 				}
 				getStarsDj(params).then(res=>{
 					if(res.code==200){

+ 14 - 9
property_ui/manage/pages/community/newsdj.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="car">
 		<view class="cartop">
-			<view class="toptit">
+			<view class="toptit" v-if="checkPermi(['wuYe:residentInfo:count'])">
 				<image :src="djtop"></image>本社区党员共<text>{{count}}</text>人
 			</view>
 			<view class="tabtop flexc">
@@ -10,6 +10,7 @@
 		</view>
 		<!-- 列表 -->
 		<view class="carlists">
+			<view v-if="checkPermi(['wuYe:residentInfo:count'])" style="height: 70rpx;"></view>
 			<car-list :datainfo="list" :wzlxList="wzlxList" :wtdt="wtdt" type='newsdj' @getDetail="getDetail"  @getScFn="getScFn" @getDelFn="getDelFn"></car-list>
 		</view>
 		<block v-if="checkPermi(['wuYe:partyNews:add'])">
@@ -48,6 +49,7 @@
 				userId:this.$store.state.user.userId,
 				nickName:this.$store.state.user.nickName,
 				avatar:this.$store.state.user.avatar,
+				tenantId:this.$store.state.user.tenantId
 			}
 		},
 		onUnload() {
@@ -87,14 +89,16 @@
 						}
 					}
 				})
-				var params={
-					residentAppearance:"2"
-				}
-				partyNewsCount(params).then(res=>{
-					if(res.code==200){
-						this.count=res.data;
+				if(checkPermi(['wuYe:residentInfo:count'])){
+					var params={
+						residentAppearance:"2"
 					}
-				})
+					partyNewsCount(params).then(res=>{
+						if(res.code==200){
+							this.count=res.data;
+						}
+					})
+				}
 			},
 			getAddFn(){
 				this.$tab.navigateTo("/manage/pages/community/newsadddj?tabval="+this.tabval)
@@ -151,6 +155,7 @@
 					targetTitle:info.partyTitle,
 					targetId:info.partyId,
 					targetType:'2',//目标类型(1:社区 2:党建 )
+					tenantId:this.tenantId
 				}
 				getStarsDj(params).then(res=>{
 					if(res.code==200){
@@ -220,7 +225,7 @@
 	page{background: #F3F3F0;}
 </style>
 <style lang="scss" scoped>
-.car{padding: 200rpx 0 10rpx;}
+.car{padding: 130rpx 0 10rpx;}
 .cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
 	.toptit{display: flex;justify-content: center;font-weight: 500;font-size: 26rpx;color: #8592AA;height: 70rpx;align-items: center;
 background: #E4EDFF;

+ 17 - 5
property_ui/manage/pages/community/newssq.vue

@@ -12,7 +12,11 @@
 		<view class="carlists">
 			<car-list :datainfo="list" :wzlxList="wzlxList"  :wtdt="wtdt" type='newssq' @getDetail="getDetail" @getDelFn="getDelFn" @getPut="getPut"></car-list>
 		</view>
-		<view class="rfbtn" @click="getAddFn">发布</view>
+		<block v-if="checkPermi(['wuYe:news:add'])">
+			<view style="height: 88rpx;"></view>
+			<view class="rfbtn" @click="getAddFn" >发布</view>
+		</block>
+		
 		<loading></loading>
 	</view>
 </template>
@@ -36,7 +40,7 @@
 				reachflag: true,
 				wtdt:'',
 				tabval:'',
-				tablist:[{dictLabel:"已停用",dictValue:'yty'}],
+				tablist:[],
 				wzlxList:[],
 				hdcount:0,
 			}
@@ -80,8 +84,16 @@
 									dictValue: v.dictValue
 								}
 							})
-							var newArr=JSON.parse(JSON.stringify(this.tablist))
-							this.tablist=this.wzlxList.concat(newArr)
+							// var newArr=JSON.parse(JSON.stringify(this.tablist))
+							// this.tablist=this.wzlxList.concat(newArr)
+							// 判断有没有新增的权限
+							
+							if(checkPermi(['wuYe:news:add'])){
+								var newArr=[{dictLabel:"已停用",dictValue:'yty'}];
+								this.tablist=this.wzlxList.concat(newArr)
+							}else{
+								this.tablist=JSON.parse(JSON.stringify(this.wzlxList))
+							}
 							this.getDataFn()
 						}
 					}
@@ -196,7 +208,7 @@
 	page{background: #F3F3F0;}
 </style>
 <style lang="scss" scoped>
-.car{padding: 148rpx 0 110rpx;}
+.car{padding: 148rpx 0 100rpx;}
 .cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
 	.tabtop{padding:28rpx 200rpx 40rpx 0;position: relative;overflow: auto;
 		.tabt{font-weight: 500;font-size: 32rpx;color: #666666;position: relative;line-height: 56rpx;flex: 0 0 auto;text-align: center;margin: 0 10rpx;padding: 0 20rpx;

+ 83 - 41
property_ui/manage/pages/community/newssqdetail.vue

@@ -11,35 +11,48 @@
 						<rich-text :nodes="communityContent" style="word-break: break-all;"></rich-text>
 					</view>
 				</view>
-				<view class="ndbfox flexc">
-					<view class="flexcc ndbflist" @touchend.prevent="getHfFna">
-						<image :src="nicona"></image>
-						<view>{{datainfo.userComment}}</view>
-					</view>
-					<view class="flexcc ndbflist" @click.stop="getDzFn('1')">
-						<image :src="nicond" v-if="datainfo.isLike=='Y'"></image>
-						<image :src="niconb" v-else></image>
-						<view>{{datainfo.userLikes}}</view>
-					</view>
-					<view class="flexcc ndbflist" @click.stop="getScFn('1')">
-						<image :src="starb" v-if="datainfo.isStar=='Y'"></image>
-						<image :src="niconc" v-else></image>
-						<view>{{datainfo.userStars}}</view>
-					</view>
-				</view>
 			</view>
 			<view class="ndbox mb12 plr15">
-				<view class="pltit">评论<text>({{commenttotal}})</text></view>
+				<view class="flext mb15">
+					<view class="pltit flex0">评论<text>({{datainfo.userComment}})</text></view>
+					<view class="flex1"></view>
+					<view class="pltitnum"><text>{{datainfo.userLikes}}</text>赞<text class="line">|</text><text>{{datainfo.userShare}}</text> 分享</view>
+
+				</view>
+				
 				<!-- 评论列表 -->
 				<box-list :datainfo="commentlist" type="comment" @getZhanFn="getZhanFn" @getShouFn="getShouFn" @getDzFn="getplDzFn" @getHfFn="getplHfFn" @getDelFn="getDelFn"></box-list>
 			</view>
 			<!-- 评论 -->
-			<view class="pjfbtn" @click.stop="btns" :style="{bottom: `${bottom}px`}">
-				<view class="flexc pjfbox">
-					<textarea :placeholder="placeholder"  :adjust-position="adjustpos" :focus="isfocus" v-model="text" :auto-height="autoHeight" :cursor-spacing='curspac' fixed="true" :show-confirm-bar="confirmBar" ></textarea>
-					<view class="btns" @click.stop="getPinLunFn">发送</view>
+				<view class="pjfbtn" @click.stop="btns" :style="{bottom: `${bottom}px`}">
+					<view class="mb10 plr20">
+						<view class="flexc pjfbox ">
+							<textarea :placeholder="placeholder"  :adjust-position="adjustpos" :focus="isfocus" v-model="text" :auto-height="autoHeight" :cursor-spacing='curspac' fixed="true" :show-confirm-bar="confirmBar" ></textarea>
+							<view class="btns" @click.stop="getPinLunFn">发送</view>
+						</view>
+					</view>
+					
+					<view class="ndbfox flexc">
+						<view class="flexcc ndbflist" @click.stop="getshareFn">
+							<image :src="share"></image>
+							<view>{{datainfo.userShare}}</view>
+						</view>
+						<view class="flexcc ndbflist" @click.stop="getHfFna">
+							<image :src="nicona"></image>
+							<view>{{datainfo.userComment}}</view>
+						</view>
+						<view class="flexcc ndbflist" @click.stop="getDzFn('1')">
+							<image :src="nicond" v-if="datainfo.isLike=='Y'"></image>
+							<image :src="niconb" v-else></image>
+							<view>{{datainfo.userLikes}}</view>
+						</view>
+						<view class="flexcc ndbflist" @click.stop="getScFn('1')">
+							<image :src="starb" v-if="datainfo.isStar=='Y'"></image>
+							<image :src="niconc" v-else></image>
+							<view>{{datainfo.userStars}}</view>
+						</view>
+					</view>
 				</view>
-			</view>
 		</block>	
 		<loading></loading>	
 	</view>
@@ -50,7 +63,7 @@
 	const baseUrl = config.baseUrl
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
 	import boxList from "@/manage/components/car/list.vue"
-	import {getRootComment,getParentComment,commentIndex,giveTheThumbs,getStars,commentContentPut,deletepl,newsDet} from "@/api/work/manage.js"
+	import {getRootComment,getParentComment,commentIndex,giveTheThumbs,getStars,commentContentPut,deletepl,newsDet,setShare} from "@/api/work/manage.js"
 	export default{
 		components:{boxList},
 		data(){
@@ -63,6 +76,7 @@
 				head:require('@/manage/static/news/head.png'),
 				starb:require('@/manage/static/news/starb.png'),
 				nonews:require('@/manage/static/news/nonews.png'),
+				share:require('@/manage/static/news/share.png'),
 				baseUrl:config.baseUrl,
 				autoHeight:true,
 				confirmBar:false,
@@ -87,6 +101,7 @@
 				isfocus:false,
 				plinfo:'',//二级评论信息
 				bottom:0,
+				tenantId:this.$store.state.user.tenantId,
 			}
 		},
 		onLoad: function(e) {
@@ -124,6 +139,19 @@
 					 this.isRoot='1'
 				 }
 			 },
+			 // 分享
+			 getshareFn(){
+				 var params={
+					 communityId:this.id,
+					 tenantId:this.tenantId
+				 }
+				 setShare(params).then(res=>{
+					 if(res.code==200){
+						 this.$toast("分享成功")
+						 this.datainfo.userShare++
+					 }
+				 })
+			 },
 			 btns(){
 				 
 			 },
@@ -164,21 +192,22 @@
 					parentId:list.id,
 					pageSize:list.pageSize,
 					pageNum: list.pageNum,
+					tenantId:this.tenantId
 				}
 				getParentComment(params).then(res=>{
 					if(res.code==200){
 						var reachflag=true;
-						if (res.data.length < obj.pageSize) {
+						if (res.rows.length < obj.pageSize) {
 							list.reachflag = false
 						} else {
-							var num = parseInt(res.data.length) + parseInt(obj.pageSize) * parseInt(obj.pageNum -	1)
+							var num = parseInt(res.rows.length) + parseInt(obj.pageSize) * parseInt(obj.pageNum -	1)
 							if (num < obj.childrenListCount) {
 								list.reachflag = true
 							} else {
 								list.reachflag = false
 							}
 						}
-						list.childrenList=list.childrenList.concat(res.data)
+						list.childrenList=list.childrenList.concat(res.rows)
 						list.pageNum=obj.pageNum++
 						this.commentlist.splice(idx,1,list)
 					}
@@ -193,6 +222,7 @@
 					avatar:this.avatar,
 					targetType:type,
 					communityId:this.id,
+					tenantId:this.tenantId
 				}
 				if(type==1){
 					params.targetId=this.id;
@@ -224,9 +254,11 @@
 								if(erobj.isLike=='Y'){
 									this.$toast("取消点赞成功");
 									erobj.isLike='N';
+									erobj.likeCount--;
 								}else{
 									this.$toast("点赞成功");
 									erobj.isLike='Y';
+									erobj.likeCount++;
 								}
 								obj.childrenList[aidx]=JSON.parse(JSON.stringify(erobj))
 								this.commentlist.splice(idx,1,obj)
@@ -234,9 +266,11 @@
 								if(obj.isLike=='Y'){
 									this.$toast("取消点赞成功");
 									obj.isLike='N';
+									obj.likeCount--;
 								}else{
 									this.$toast("点赞成功");
 									obj.isLike='Y';
+									obj.likeCount++;
 								}
 								this.commentlist.splice(idx,1,obj)
 							}
@@ -255,6 +289,7 @@
 					nickName:this.nickName,
 					avatar:this.avatar,
 					targetType:'1',//目标类型(1:社区 2:党建 )
+					tenantId:this.tenantId
 				}
 				params.targetId=this.id;
 				params.targetTitle=this.datainfo.communityTitle;
@@ -297,7 +332,8 @@
 					communityId:this.id,
 					communityType:this.datainfo.communityType,
 					communityTitle:this.datainfo.communityTitle,
-					commentContent:this.text,	
+					commentContent:this.text,
+					tenantId:this.tenantId
 				}
 				
 				if(this.isRoot==2){
@@ -331,6 +367,7 @@
 					communityId:this.id,
 					pageSize:this.pageSize,
 					pageNum: this.pageNum,
+					tenantId:this.tenantId
 				}
 				// userid,头像,nickname,标题(或者评论对象的内容)  点赞收藏评论,   
 				getRootComment(params).then(res=>{
@@ -388,34 +425,39 @@
 </style>
 <style lang="scss" scoped>
 .ndetail{
-	min-height: 100vh;padding: 20rpx 18rpx 100rpx;
-	.ndbox{background: #FFFFFF;border-radius: 20rpx;padding-top: 30rpx;
+	min-height: 100vh;padding: 20rpx 18rpx 260rpx;
+	.ndbox{background: #FFFFFF;border-radius: 20rpx;padding-top: 30rpx;padding-bottom: 20rpx;
 		.tit{font-weight: bold;font-size: 32rpx;color: #272727;margin-bottom: 14rpx;text-align: center;padding-top: 4rpx;}
 		.time{font-weight: 500;font-size: 24rpx;color: #AAAAAA;text-align: center;}
-		.rich{border-top: 2rpx solid #E5E5E5;padding: 28rpx 0;}	
-		.ndbfox{
-			border-top: 2rpx solid #E5E5E5;
-			.ndbflist{width: 33.3%;min-height: 78rpx;padding: 16rpx 0;box-sizing: border-box;
-				image{width: 26rpx;height: 26rpx;margin-right: 26rpx;}
-				view{font-weight: 500;font-size: 26rpx;color: #666666;}
-			}
-		}
+		.rich{padding: 28rpx 0;}	
+		//border-top: 2rpx solid #E5E5E5;
+	}
+}
+.pltitnum{font-weight: 500;font-size: 26rpx;color: #AAAAAA;
+	text{display: inline-block;margin-right:10rpx;
+		&.line{margin: 0 12rpx;}
 	}
 }
 .pltit{font-weight: bold;font-size: 30rpx;color: #272727;
 	text{margin-left: 24rpx;font-size: 24rpx;color: #666666;}
 }
-
-.pjfbtn{background: #FFFFFF;position: fixed;bottom: 0;left: 0;right: 0;padding:20rpx 48rpx;box-shadow: 0px 0px 18rpx 0px rgba(159,159,159,0.47);
+.plr20{padding: 0 40rpx;}
+.pjfbtn{background: #FFFFFF;position: fixed;bottom: 0;left: 0;right: 0;padding:26rpx 0rpx 20rpx;box-shadow: 0px 0px 18rpx 0px rgba(159,159,159,0.47);
 	.pjfbox{background: #E6E6E6;border-radius: 10rpx;
-		textarea{flex: 1;font-size: 26rpx;color: #222327;min-height: 40rpx;font-size: 26rpx;margin: 0;background: #E6E6E6;box-sizing: border-box;padding: 10rpx 0 10rpx 36rpx;border-radius:10rpx 0 0 10rpx;}
+		textarea{flex: 1;font-size: 26rpx;color: #222327;min-height: 100rpx;font-size: 26rpx;margin: 0;background: #E6E6E6;box-sizing: border-box;padding: 10rpx 0 10rpx 36rpx;border-radius:10rpx 0 0 10rpx;}
 		.btns{nt-weight: bold;padding: 0 34rpx;height: 60rpx;line-height: 60rpx;flex: 0 0 auto;
 		font-size: 26rpx;
 	}
 	
 color: #314081;}
 }
-
+.ndbfox{
+	// border-top: 2rpx solid #E5E5E5;
+		.ndbflist{width: 33.3%;padding: 20rpx 0;box-sizing: border-box;
+		image{width: 26rpx;height: 26rpx;margin-right: 26rpx;}
+		view{font-weight: 500;font-size: 26rpx;color: #666666;}
+	}
+}
 // .pjfbtn /deep/ .uni-easyinput{flex: 1;font-size: 26rpx;color: #222327;}
 // .pjfbtn /deep/ .uni-textarea-textarea{min-height: 40rpx;font-size: 26rpx;margin: 0;background: #E6E6E6;box-sizing: border-box;padding: 10rpx 0 10rpx 36rpx;border-radius:10rpx 0 0 10rpx;}
 </style>

二进制
property_ui/manage/static/news/share.png


+ 1 - 1
property_ui/mine/components/box/list.vue

@@ -32,7 +32,7 @@
 				<view class="mb12 pr"  v-for="(ite,idx) in datainfo" :key="idx">
 					<view class="hdlist ">
 						<view class="pd12 flex">
-							<image :src="ite.avatar?baseUrl+ite.avatar:man" class="mhead flex0"></image>
+							<image :src="ite.avatar&&ite.avatar.indexOf('/static/img/profile')==-1?baseUrl+ite.avatar:man" class="mhead flex0"></image>
 							<view class="flex1 overh">
 								<view class="flexc mb6">
 									<view class="name flex1 over">{{ite.nickName}}</view>

+ 1 - 0
property_ui/mine/pages/avatar/index.vue

@@ -255,6 +255,7 @@
 						canvasId: 'myCanvas',
 						success: function (res) {
 							uni.hideLoading()
+							console.log(res)
 							let data = {name: 'avatarfile', filePath: res.tempFilePath}
 							uploadAvatar(data).then(response => {
 								// store.commit('SET_AVATAR', baseUrl + response.imgUrl)

+ 4 - 1
property_ui/mine/pages/info.vue

@@ -128,7 +128,10 @@
 			},
 			getUser() {
 			  getUserProfile().then(response => {
-			    this.datainfo = response.data
+			    var data=response.data;
+			    if(data.user){
+			    	this.datainfo = JSON.parse(JSON.stringify(data.user))
+			    }
 			    this.roleGroup = response.roleGroup
 			    this.postGroup = response.postGroup
 			  })

+ 1 - 1
property_ui/mine/pages/info/authen.vue

@@ -2,7 +2,7 @@
 	<view class="car">
 		<!-- 列表 -->
 		<view class="carlists">
-			<car-list :datainfo="list" :ygztList="ygztList" :yglbList="yglbList" :wtdt="wtdt" type='rzstaff' @getDetail="getDetail" @getDelFn="getDelFn" @getShFn="getShFn"></car-list>
+			<car-list ftype="authen" :datainfo="list" :ygztList="ygztList" :yglbList="yglbList" :wtdt="wtdt" type='rzstaff' @getDetail="getDetail" @getDelFn="getDelFn" @getShFn="getShFn"></car-list>
 		</view>
 		<block>
 			<view style="height: 100rpx;"></view>

二进制
property_ui/mine/static/house/sha.png


二进制
property_ui/mine/static/house/shb.png


+ 29 - 13
property_ui/people/components/car/list.vue

@@ -108,7 +108,7 @@
 			</view>
 		</block>
 		<!-- 维修人员管理 -->
-		<view v-if="type=='staff'||type=='rzstaff'" class="flecw">
+		<view v-if="type=='staff'||type=='rzstaff'" class="flexcw">
 			<view class="stafflist" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail(ite.staffId)">
 				<view class="statop">
 					<image class="head" :src="baseUrl+ite.avatarPhoto" v-if="ite.avatarPhoto"></image>
@@ -123,20 +123,27 @@
 					</view>
 					<image :src="pdel" class="stadel" v-if="type=='rzstaff'&&ite.examine!=2&&checkPermi(['wuYe:staffManage:remove'])" @click.stop="getDelFn(ite)"></image>
 					<image :src="pdel" class="stadel" v-if="type=='staff'&&checkPermi(['wuYe:staffManage:deleteStaffManage'])" @click.stop="getDelFn(ite)"></image>
+					
 				</view>
-				<view class="stalist">
-					<view class="imgs"><image :src="gzlx" class="gzlximg"></image></view>{{kaType(ite.staffCategory,yglbList)}}
-					<view class="flex1"></view>
-					<view class="flexcc eyes" @click.stop="getHideFn(idx)">
-						<image :src="neye" class="neye" v-if="ite.hideflag"></image>
-						<image :src="eye" class="eye" v-else></image>
+				<view class="pr">
+					<view class="stalist">
+						<view class="imgs"><image :src="gzlx" class="gzlximg"></image></view>{{kaType(ite.staffCategory,yglbList)}}
+						<view class="flex1"></view>
+						<view class="flexcc eyes" @click.stop="getHideFn(idx)">
+							<image :src="neye" class="neye" v-if="ite.hideflag"></image>
+							<image :src="eye" class="eye" v-else></image>
+						</view>
 					</view>
-				</view>
-				<view class="stalist">
-					<view class="imgs"><image :src="mphone" class="mphone"></image></view>{{ite.hideflag?ite.phoneNumbera:ite.phoneNumber}}
-				</view>
-				<view class="stalist">
-					<view class="imgs"><image :src="sfz" class="sfz"></image></view>{{ite.hideflag?ite.idCarda:ite.idCard}}
+					<view class="stalist">
+						<view class="imgs"><image :src="mphone" class="mphone"></image></view>{{ite.hideflag?ite.phoneNumbera:ite.phoneNumber}}
+					</view>
+					<view class="stalist">
+						<view class="imgs"><image :src="sfz" class="sfz"></image></view>{{ite.hideflag?ite.idCarda:ite.idCard}}
+					</view>
+					<block v-if="ftype=='authen'">
+						<image :src="sha" class="shimg" v-if="ite.examine==1"></image>
+						<image :src="shb" class="shimg" v-if="ite.examine==3"></image>
+					</block>
 				</view>
 				<view style="height: 20rpx;"></view>
 				<view class="pshbox flexc" v-if="ite.examine==1&&checkPermi(['wuYe:residentInfo:examineStaff'])">
@@ -209,6 +216,12 @@
 					return ''
 				}
 			},
+			ftype:{
+				type:String,
+				default () {
+					return ''
+				}
+			},
 			type:{
 				type:String,
 				default () {
@@ -279,6 +292,8 @@
 				upimg:require("@/static/images/home/up.png"),
 				star:require('@/manage/static/community/star.png'),
 				stara:require('@/manage/static/community/stara.png'),
+				sha:require('@/mine/static/house/sha.png'),
+				shb:require('@/mine/static/house/shb.png'),
 				baseUrl:config.baseUrl,
 				delBtnWidth:66,//左滑默认宽度
 			}
@@ -540,6 +555,7 @@ font-size: 26rpx;color: #272727;display: flex;line-height: 34rpx;
 			}
 		}
 	}
+	.shimg{width: 117rpx;height: 78rpx;position: absolute;right: 26rpx;bottom: 20rpx;}
 	.stalist{font-weight: 500;font-size: 26rpx;color: #272727;display: flex;align-items: center;padding: 20rpx 24rpx 0;
 		.imgs{width: 24rpx;height: 30rpx;margin-right: 22rpx;flex: 0 0 auto;display: flex;align-items: center;justify-content: center;
 			.gzlximg{width: 24rpx;height: 28rpx;}

+ 1 - 1
property_ui/people/components/w-select/w-select.vue

@@ -34,7 +34,7 @@
 		<view
 		  @click.stop="refreshValue"
 		  class="close-icon"
-		  v-if="showClose && (multiple ? value.length > 0 : value)"
+		  v-if="showClose && (multiple ? valuea.length > 0 : valuea)"
 		>
 		  <image :src="refreshUrl" mode="" />
 		</view>

+ 2 - 2
property_ui/people/pages/people/comeadd.vue

@@ -133,7 +133,7 @@
 				datainfo: {
 					// "visitorManageId":"",//来访主键
 					 "houseId":"",//门户id
-					 "houseAddress":"",//详细门牌号
+					 "houseAddress":"",//门牌号
 					 "name":"",//访客姓名
 					 "num":"",//来访人数
 					 "reason":"",//来访事由
@@ -195,7 +195,7 @@
 			init(){
 				houseInfolistNoPage().then(res=>{
 					if(res.code==200){
-						this.fwlist= res.rows.map(v => {
+						this.fwlist= res.data.map(v => {
 							return {
 								label: v.detailedAddress,
 								value: v.houseId,

+ 11 - 28
property_ui/people/pages/people/staff.vue

@@ -39,7 +39,6 @@
 	import carList from "@/people/components/car/list.vue"
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
 	import {staffList,staffDel,examineStaff,staffglyDel} from "@/api/work/people.js"
-	import {getRoleNopage} from "@/api/login.js"
 	import {getDictionaryFn} from "@/api/system/user.js"
 	export default{
 		components:{carList},
@@ -72,9 +71,6 @@
 			uni.$on('refStaffList',(res)=>{
 				this.getrefreshData()
 			})
-			var tenantId=this.$store.state.user.tenantId;
-			console.log(tenantId)
-			this.getRoleNopagea(tenantId);
 			this.init();
 			this.getDataFn();
 			
@@ -93,17 +89,17 @@
 				this.getrefreshData()
 			},
 			init(){
-				// 员工类别
-				// getDictionaryFn('yaungong').then(res=>{
-				// 	if(res.code==200){
-				// 		this.yglbList = res.data.map(v => {
-				// 			return {
-				// 				dictLabel: v.dictLabel,
-				// 				dictValue: v.dictValue
-				// 			}
-				// 		})
-				// 	}
-				// })
+				// 员工类别
+				getDictionaryFn('yaungong').then(res=>{
+					if(res.code==200){
+						this.yglbList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
 				//状态
 				getDictionaryFn('technician_status').then(res=>{
 					if(res.code==200){
@@ -116,19 +112,6 @@
 					}
 				})
 			},
-			getRoleNopagea(id){
-				var params={
-					tenantId:id
-				}
-				getRoleNopage(params).then(res=>{
-					this.yglbList = res.rows.map(v => {
-						return {
-							dictLabel: v.roleName,
-							dictValue: v.roleKey
-						}
-					})
-				})
-			},
 			getShFn(data){
 				var that=this;
 				var info=JSON.parse(JSON.stringify(data))

+ 25 - 31
property_ui/people/pages/people/staffadd.vue

@@ -36,6 +36,7 @@
 							  :valuea="datainfo.tenantId"
 							  :chosevalue="tenantName?tenantName:statusFormats(datainfo.tenantId,voList,'tenant')"
 							  :filterable='filterable'
+							  :isdisabled="(ptype=='edit'&&datainfo.examine!='3')?true:false"
 						      @change='getchange'
 						    >
 						    </w-select>
@@ -81,7 +82,7 @@
 							</view>
 						</picker>
 					</uni-forms-item>
-					<uni-forms-item label="维修类别" name="maintenanceCategory">
+					<uni-forms-item label="维修类别" name="maintenanceCategory" v-if="datainfo.staffCategory=='repair'">
 						<picker range-key='dictLabel' :disabled="isdisabled" :value="vxlbidx" :range="vxlbList"   @change='bindDateChangea'>
 							<view class="flexc">
 								<view class="flex1 txr f13 co27" v-if="datainfo.maintenanceCategory&&!vxlb">{{statusFormats(datainfo.maintenanceCategory,vxlbList,'vxlb')}}</view>
@@ -106,7 +107,7 @@
 			</view>
 		</uni-forms>
 		<!-- &&checkPermi(['wuYe:staffManage:add']) -->
-		<view class="pdlr12 mt55" v-if="rzflag">
+		<view class="pdlr12 mt55" v-if="rzflag&&datainfo.examine!=2">
 			<!-- <view class="rhbtn" @click="getEditFn" v-if="isdisabled">修改</view> -->
 			<view class="rhbtn" @click="getSubmit">确定</view>
 		</view>
@@ -126,7 +127,7 @@
 	import {getDictionaryFn} from "@/api/system/user.js"
 	import {selectValueKey,uploadIdentify} from "@/utils/common.js"
 	import wSelect from "@/people/components/w-select/w-select.vue"
-	import {gettenantList,getRoleNopage} from "@/api/login.js"
+	import {gettenantList} from "@/api/login.js"
 	import {getOcrIdCard} from "@/api/system/card.js"
 	export default {
 		components: {wSelect},
@@ -149,7 +150,7 @@
 					// "userId":"",//员工账号id
 					"staffName":"",//员工姓名
 					"gender":"",//员工性别(1男 2女)
-					"staffCategory":"",//员工类别,1:保安 2:维修人员 3:物业管理
+					"staffCategory":"",//员工类别,security:保安 repair:维修人员 property_management:物业管理
 					"maintenanceCategory":"",//维修分类
 					"phoneNumber":"",//手机号码
 					"tenantId":"",//租户id
@@ -198,7 +199,6 @@
 			}else{
 				var tenantId=this.$store.state.user.tenantId;
 				this.datainfo.tenantId=tenantId;
-				this.getRoleNopage(tenantId)
 			}
 			this.gettenantList();
 			if(e.id){
@@ -245,18 +245,18 @@
 			},
 			init(){
 				// 员工类别
-				// getDictionaryFn('yaungong').then(res=>{
-				// 	if(res.code==200){
-				// 		this.yglbList = res.data.map(v => {
-				// 			return {
-				// 				dictLabel: v.dictLabel,
-				// 				dictValue: v.dictValue
-				// 			}
-				// 		})
-				// 	}
-				// })
+				getDictionaryFn('yaungong').then(res=>{
+					if(res.code==200){
+						this.yglbList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
 				// 维修类别
-				getDictionaryFn('weixiutype').then(res=>{
+				getDictionaryFn('baoxiutype').then(res=>{
 					if(res.code==200){
 						this.vxlbList = res.data.map(v => {
 							return {
@@ -280,25 +280,11 @@
 			},
 			getchange(e){
 				this.datainfo.tenantId=e.dictValue;
-				this.getRoleNopage(e.dictValue)
 				// this.datainfo.houseAddress=e.dictLabel;
 				// if(this.tabval=='1'){
 				// 	this.datainfo.detailAddress=e.location;
 				// }
 			},
-			getRoleNopage(id){
-				var params={
-					tenantId:id
-				}
-				getRoleNopage(params).then(res=>{
-					this.yglbList = res.rows.map(v => {
-						return {
-							dictLabel: v.roleName,
-							dictValue: v.roleKey
-						}
-					})
-				})
-			},
 			bindDateChange(e){
 				var val=e.detail.value;
 				var vala=this.yglbList[val].dictValue;
@@ -413,12 +399,14 @@
 					staffglrzDet(this.id).then(res=>{
 						if(res.code==200){
 							var tenantId=res.data.tenantId
-							this.getRoleNopage(tenantId)
 							if(this.rztype=='rzadd'){
 								this.datainfo=this.filterObjectByChar(res.data,'staffId');
 							}else{
 								this.datainfo=res.data;
 							}
+							if(res.data.examine=='2'){
+								this.isdisabled=true;
+							}
 						}
 					})
 				}else{
@@ -442,6 +430,9 @@
 				});
 			},
 			getDelFn(){
+				if(this.isdisabled){
+					return
+				}
 				var that=this;
 				uni.showModal({
 					title: '确认删除',
@@ -457,6 +448,9 @@
 				});
 			},
 			getaddImagea(e) {
+				if(this.isdisabled){
+					return
+				}
 				let that = this;
 				let file = []
 				uni.chooseImage({

+ 358 - 39
property_ui/service/components/car/list.vue

@@ -49,35 +49,165 @@
 		</block>
 		<!-- 报修管理 -->
 		<block v-if="type=='warranty'">
-			<view class="walists" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail(ite.repairId)"
-				:data-idx="idx"
-				@touchstart="drawStart" @touchmove="drawMove" @touchend="drawEnd" :style="'right:'+ite.right+'px'"
-			>
-				<view class="delleft">
-					<view class="watop ">
-						<view class="watit">
-							<view class="tit">{{ite.repairTitle}}</view>
-							<view class="txt co01":class="{'co01':ite.repairStatus=='1','coa':ite.repairStatus=='3','co28':ite.repairStatus=='3'}">{{kaType(ite.repairStatus,bxztList)}}</view>
-							<!-- <view class="txt coa" v-if="ite.type==3">已完成</view>
-							<view class="txt co28" v-if="ite.type==2">处理中</view> -->
-						</view>
-						<!-- <view class="walist"><view class="tit">小区名称</view>:{{ite.communityName}}</view> -->
-						<view class="walist"><view class="tit">项目</view>:{{kaType(ite.maintenanceCategory,bxlbList)}}</view>
-						<view class="walist"><view class="tit">报修门户</view>:{{ite.houseAddress}}</view>
+			<view class="bxlists" v-for="(ite,idx) in datainfo" :key="ite.repairId" >
+				<view class="bxtop">
+					<swiper v-if="ite.repairImages"  class="swiper" circular :indicator-color="incolorh" :indicator-active-color="activecolorh" :indicator-dots="indicatorDotsh" :autoplay="autoplay">
+						<swiper-item v-for="(aite,aidx) in ite.repairImages" :key="aidx">
+							<image :src="baseUrl+aite" @click="getPreviewImage(ite.repairImages,aidx)"></image>
+						</swiper-item>
+					</swiper>
+					<view class="toptit mb10">{{ite.repairDetails}}</view>
+					<view class="walist"><view class="tit">项目</view>:{{kaType(ite.maintenanceCategory,bxlbList)}}</view>
+					<view class="walist"><view class="tit">报修门户</view>:{{ite.houseAddress}}</view>
+					<view class="flexcw">
 						<view class="walist"><view class="tit">报修时间</view>:{{ite.repairTime}}</view>
-						<view class="walist" v-if="ite.type==3"><view class="tit" >完成时间</view>:{{ite.completionTime}}</view>
-					</view>
-					<view class="wabtn">
-						<view>查看详情</view>
-						<image :src="rimg"></image>
+						<!-- <view class="walist" v-if="ite.type==3"><view class="tit" >完成时间</view>:{{ite.completionTime}}</view> -->
+						<view class="btns">
+							<view class="btn btna" v-if="checkPermi(['wuYe:repair:remove'])&&ite.repairStatus<2" @click.stop="getDelFn(ite.repairId)">删除</view>
+							<view class="btn btnb" v-if="checkPermi(['wuYe:repair:assign'])&&ite.repairStatus==1" @click.stop="getAssignFn(ite)">指派</view>
+							<block v-if="checkPermi(['wuYe:repair:edit'])">
+								<view class="btn btnc" v-if="ite.repairStatus==2" @click.stop="getCheckFn(ite)">我已上门</view>
+								<view class="btn btnc" v-if="ite.repairStatus==3" @click.stop="getCheckFn(ite)">我已完成</view>
+							</block>
+							
+						</view>
 					</view>
 				</view>
-				<view class="spdel" v-if="ite.right>0&&checkPermi(['wuYe:repair:remove'])" @click.stop="getDelFn(ite.repairId)">删除</view>
+				<view class="bxsteps">
+					<uni-collapse ref="collapse" v-model="value">
+						<uni-collapse-item title-border="none">
+								<template v-slot:title>
+									<view class="chtop flexc" >
+										<view class="line"></view>
+										<view>流程记录</view>
+										<view class="flex1"></view>
+										<!-- <image :src="upimg" class="upimg"></image> -->
+									</view>
+								</template>
+								<view class="hfstep">
+									<view class="hfslist flex" v-if="ite.repairStatus>3">
+										<view class="limg flexccc">
+											<image :src="cira" class="imga"></image>
+										</view>
+										<view class="flex1">
+											<view class="hfstit co01">已完成 <text>{{ite.completionTime}}</text></view>
+											<view class="hfstxt">【{{ite.staffName}} {{ite.staffPhone}}】已完成报修业务</view>
+											<view class="hfimgs flexcw" v-if="ite.completionPhoto&&ite.completionPhoto.length">
+												<image :src="baseUrl+aite" @click="getPreviewImage(ite.completionPhoto,aidx)" v-for="(aite,aidx) in ite.completionPhoto" :key="aidx"></image>
+											</view>
+										</view>
+									</view>
+									<view class="hfslist flex" v-if="ite.repairStatus>2">
+										<view class="limg flexccc">
+											<image :src="cira" class="imga" v-if="ite.repairStatus==3"></image>
+											<image :src="cirb" class="imgb" v-else></image>
+										</view>
+										<view class="flex1">
+											<view class="hfstit">处理中 <text>{{ite.visitTime}}</text></view>
+											<view class="hfstxt">【{{ite.staffName}} {{ite.staffPhone}}】已上门处理中</view>
+											<view class="hfimgs flexcw" v-if="ite.visitPhoto&&ite.visitPhoto.length">
+												<image :src="baseUrl+aite" @click="getPreviewImage(ite.visitPhoto,aidx)" v-for="(aite,aidx) in ite.visitPhoto" :key="aidx"></image>
+											</view>
+										</view>
+									</view>
+									<view class="hfslist flex" v-if="ite.repairStatus>1">
+										<view class="limg flexccc">
+											<image :src="cira" class="imga" v-if="ite.repairStatus==2"></image>
+											<image :src="cirb" class="imgb" v-else></image>
+										</view>
+										<view class="flex1">
+											<view class="hfstit">待上门 <text>{{ite.assignTime}}</text></view>
+											<view class="hfstxt">您的报修申请已派于<text @click.stop="getPhoneFn(ite.staffPhone)">【{{ite.staffName}} {{ite.staffPhone}}】</text>处理</view>
+										</view>
+									</view>
+									<view class="hfslist flex" >
+										<view class="limg flexccc">
+											<image :src="cira" class="imga" v-if="ite.repairStatus==1"></image>
+											<image :src="cirb" class="imgb" v-else></image>
+										</view>
+										<view class="flex1">
+											<view class="hfstit">待指派 <text>{{ite.repairTime}}</text></view>
+											<view class="hfstxt">您的报修申请已提交,请耐心等待</view>
+										</view>
+									</view>
+								</view>
+							</uni-collapse-item>
+						</uni-collapse>
+				</view>
 			</view>
 		</block>
 		<!-- 投诉建议 -->
 		<block v-if="type=='complaint'">
-			<view class="walists" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail(ite.suggestionId)"
+			<view class="bxlists" v-for="(ite,idx) in datainfo" :key="ite.suggestionId">
+				<view class="bxtop">
+					<swiper v-if="ite.images"  class="swiper" circular :indicator-color="incolorh" :indicator-active-color="activecolorh" :indicator-dots="indicatorDotsh" :autoplay="autoplay">
+						<!-- datainfo.images -->
+						<swiper-item v-for="(aite,aidx) in ite.images" :key="aidx">
+							<image :src="baseUrl+aite" @click="getPreviewImage(ite.images,aidx)"></image>
+						</swiper-item>
+					</swiper>
+					<view class="toptit mb10">{{ite.content}}</view>
+					<view class="fleccw">
+						<view class="walist flex0"><view class="tit">提交时间</view>:{{ite.pushTime}}</view>
+						<view class="btns">
+							<view class="btn btna" v-if="checkPermi(['wuYe:suggestion:remove'])"  @click.stop="getDelFn(ite.suggestionId)">删除</view>
+							<block v-if="checkPermi(['wuYe:suggestion:edit'])">
+								<view class="btn btnd" v-if="ite.isPublic=='Y'"  @click.stop="getCloseFn(ite.suggestionId,'N')">不予公开</view>
+								<view class="btn btnc" v-else  @click.stop="getCloseFn(ite.suggestionId,'Y')">公开</view>
+								<view class="btn btnb" v-if="checkPermi(['wuYe:suggestion:edit'])&&ite.status==1" @click="getReplyFn(ite.suggestionId)">回复</view>
+							</block>
+							
+						</view>
+					</view>
+				</view>
+				<view class="bxsteps">
+					<uni-collapse ref="collapse" v-model="value">
+						<uni-collapse-item title-border="none">
+								<template v-slot:title>
+									<view class="chtop flexc" >
+										<view class="line"></view>
+										<view>交流记录</view>
+										<view class="flex1"></view>
+									</view>
+								</template>
+								<view class="hfstep">
+									<view class="hfslist flex" v-if="ite.status==2">
+										<view class="limg flexccc">
+											<image :src="cira" class="imga"></image>
+										</view>
+										<view class="flex1">
+											<view class="hfstit co01">已回复 <text>{{ite.replyTime}}</text></view>
+											<view class="hfstxt">{{ite.replyContent}}</view>
+											<!-- 附件 -->
+											<block v-if="ite.suggestionFjList">
+												<view class="fjlists"  v-for="(fite,fidx) in ite.suggestionFjList" :key='fidx'>
+													<view class="flext" @click="getDownloader(fite.url)">
+														<view class="imgl"><image :src="filico" ></image></view>
+														<view class="tit">{{fite.name}}</view>
+													</view>
+												</view>
+											</block>
+											<!-- <view class="hfimgs flexcw">
+												<image :src="cira"></image>
+											</view> -->
+										</view>
+									</view>
+									<view class="hfslist flex" >
+										<view class="limg flexccc">
+											<image :src="cira" class="imga" v-if="ite.status==1"></image>
+											<image :src="cirb" class="imgb" v-else></image>
+										</view>
+										<view class="flex1">
+											<view class="hfstit">已提交 <text>{{ite.pushTime}}</text></view>
+											<view class="hfstxt">您的投诉建议已提交,请耐心等待</view>
+										</view>
+									</view>
+								</view>
+							</uni-collapse-item>
+						</uni-collapse>
+				</view>
+			</view>
+			<!-- <view class="walists" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail(ite.suggestionId)"
 				:data-idx="idx"
 				@touchstart="drawStart" @touchmove="drawMove" @touchend="drawEnd" :style="'right:'+ite.right+'px'"
 			>
@@ -85,14 +215,12 @@
 					<view class="watit">
 						<view class="tit">{{ite.title}}</view>
 						<view class="txt" :class="ite.status==1?'co01':'coa'">{{kaType(ite.status,tsjyList)}}</view>
-						<!-- <view class="txt coa">已回复</view> -->
 					</view>
 					<view class="watopcoma overtwo">{{ite.content}}</view>
 					<view class="watopcomb">{{ite.createTime}}</view>
 				</view>
-				<!--  -->
 				<view class="spdel" v-if="ite.right>0&&checkPermi(['wuYe:suggestion:remove'])" @click.stop="getDelFn(ite.suggestionId)">删除</view>
-			</view>
+			</view> -->
 			<!-- checkPermi(['system:menuFood:remove'])&& -->
 			
 		</block>
@@ -182,6 +310,14 @@
 				upimg:require("@/static/images/home/up.png"),
 				star:require('@/manage/static/community/star.png'),
 				stara:require('@/manage/static/community/stara.png'),
+				cira:require('@/service/static/service/cira.png'),
+				cirb:require('@/service/static/service/cirb.png'),
+				filico:require('@/work/static/filico.png'),
+				value:[],
+				autoplay:false,
+				incolorh:'#C0C3C3',
+				activecolorh:'#FFFFFF',
+				indicatorDotsh: true,
 				baseUrl:config.baseUrl,
 				delBtnWidth:66,//左滑默认宽度
 			}
@@ -240,6 +376,101 @@
 					}
 				});
 			},
+			getAssignFn(ite){
+				this.$emit('getAssignFn',ite)
+			},
+			getCheckFn(ite){
+				this.$emit('getCheckFn',ite)
+			},
+			getReplyFn(id){
+				this.$emit('getReplyFn',id)
+			},
+			getPhoneFn(phone){
+				uni.makePhoneCall({
+					phoneNumber: phone //仅为示例
+				});
+			},
+			getPreviewImage(arr,idx){
+				var newArr=[];
+				arr.forEach(ite=>{
+					var ds=this.baseUrl+ite
+					newArr.push(ds)
+				})
+				uni.previewImage({
+					urls: newArr,
+					current:idx,
+					success: function(data) {
+						
+					},
+					fail: function(err) {
+						
+					}
+				});
+			},
+			getCloseFn(id,type){
+				var that=this;
+				var str="不予公开"
+				if(type=='Y'){
+					str='公开'
+				}
+				uni.showModal({
+					title: str,
+					content: "是否确认"+str,
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							var param={}
+							param.isPublic=type;
+							param.suggestionId=id;
+							that.$emit('getCloseFn',param)
+							// suggestionlPut(param).then(res=>{
+							// 	if(res.code==200){
+							// 		uni.$emit("refSuggestion")
+							// 		that.$toast(str+'成功')
+							// 		setTimeout(function(){
+							// 			that.getDetail()
+							// 		},1200)
+							// 	}
+							// })
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			getDownloader(e){
+				uni.showLoading({
+					title: '加载中'
+				});
+				var url=this.baseUrl+e;
+				let index1 = e.lastIndexOf("."); // 得到一个索引值
+				let index2 = e.length;
+				let type = e.substring(index1, index2);
+				if ((type.indexOf('jpg') > -1 || type.indexOf('jpeg') > -1 || type.indexOf('png') > -1)) {
+					uni.previewImage({
+						current: 0,
+						urls: [url],
+						// background: '#ffffff'
+					});
+					uni.hideLoading();
+				} else {
+				uni.downloadFile({
+					url: url,//文件的下载路径
+					success(result) {
+							uni.hideLoading()
+						var filePath = result.tempFilePath;
+						   uni.openDocument({
+						     filePath: filePath,
+						     showMenu: true,
+						     success: function (res) {
+						       // console.log('打开文档成功');
+						     }
+						   });
+					},
+					fail(res) {uni.hideLoading()}
+				})
+				}
+			},
 			//开始触摸滑动
 			drawStart(e) {
 				// console.log("开始触发");
@@ -373,25 +604,58 @@ font-size: 26rpx;color: #272727;display: flex;line-height: 34rpx;
 	}
 }
 // 报修
-.walists{background: #FFFFFF;border-radius: 20rpx;margin-bottom: 24rpx;    position: relative;
-	.watop{
-		padding: 0 36rpx 8rpx 38rpx;
-		.watit{padding: 24rpx 0;margin-bottom: 4rpx;display: flex;
-			.tit{font-weight: bold;font-size: 28rpx;color: #272727;flex: 1;
-				.cir{width: 14rpx;margin-left: 8rpx;margin-bottom: 10rpx;height: 14rpx;display: inline-block;background: #FF6969;border-radius: 8rpx;}
+.bxlists{background: #FFFFFF;border-radius: 20rpx;margin-bottom: 24rpx;position: relative;
+	.bxtop{padding: 30rpx 24rpx;position: relative;
+		.swiper{width: 100%;height: 280rpx;border-radius: 20rpx;box-sizing: border-box;margin-bottom: 28rpx;overflow: hidden;
+			image{width: 100%;height: 100%;}
+		}
+		.toptit{font-weight: bold;font-size: 28rpx;color: #161616;}
+		.walist{display: flex;font-weight: 500;font-size: 26rpx;color: #666666;margin-bottom: 16rpx;
+			.tit{min-width: 100rpx;text-align-last: justify}
+		}
+		.btns{display: flex;flex-wrap: wrap;justify-content: flex-end;flex: 1 0 auto;}
+		.btn{min-width: 120rpx;height: 54rpx;border-radius: 26rpx;font-weight: 500;font-size: 26rpx;text-align: center;line-height: 54rpx;padding: 0 10rpx;box-sizing: border-box; margin-bottom: 14rpx;margin-left: 12rpx;
+			&.btna{border: 2rpx solid #FF6969;background: #FFF8F8;color: #FF6969;}
+			&.btnb{background: #0256FD;color: #FFFFFF;}
+		}
+	}
+	.bxsteps{border-top: 2rpx solid #E6E6E6;padding: 30rpx 0;
+		.chtop{padding-right: 48rpx;
+				.line{width: 14rpx;height: 48rpx;background: #0256FD;border-radius:0 12rpx 12rpx 0;margin-right: 18rpx;}
+				view{font-weight: bold;font-size: 28rpx;color: #272727;}
+				.upimg{width: 22rpx;height: 14rpx;flex: 0 0 auto;margin-left: 12rpx;transform: rotate(180deg);transition: all 0.3s;}
+		}
+		.fjlists {display: flex;align-items: flex-start;justify-content: space-between;margin-bottom: 20rpx;
+				&:last-child{margin-bottom: 0;}
+				.imgl{width: 40rpx;height: 40rpx;display: flex;align-items: center;flex: 0 0 auto;
+					image{width: 26rpx;height: 24rpx;}
+				}
+				.tit{font-size: 26rpx;color: #222327;font-weight: 500;margin-top: 4rpx;word-break: break-all;}
 			}
-			.txt{font-weight: bold;font-size: 26rpx;flex: 0 0 auto;
+		.hfstep{padding: 0 32rpx 30rpx 36rpx;margin-top: 24rpx;
+			.hfslist{padding-bottom: 20rpx;position: relative;
+				&:first-child{
+					.hfstit{color: #0156FE;}
+				}
+				&::before{content: '';position: absolute;left: 14rpx;top:14rpx;height: 100%;width: 2rpx;background: #E6E6E6;}
+				.limg{width: 30rpx;height: 30rpx;margin-right: 22rpx;flex: 0 0 auto;margin-top:3rpx;
+					.imga{width: 30rpx;height: 30rpx;}
+					.imgb{width: 18rpx;height: 18rpx;}
+				}
+				.hfstit{font-weight: bold;font-size: 30rpx;color: #666666;line-height: 36rpx;margin-bottom: 20rpx;
+					text{font-size: 26rpx;margin-left: 12rpx;}
+				}
+				.hfstxt{font-weight: 500;font-size: 26rpx;color: #666666;line-height: 36rpx;margin-bottom: 20rpx;}
+				.hfimgs{padding-top: 2rpx;
+					image{width: 84rpx;height: 84rpx;border-radius: 20rpx;margin-right: 40rpx;margin-bottom: 10rpx;}
+				}
 			}
 		}
 	}
-	.walist{display: flex;font-weight: 500;font-size: 24rpx;color: #666666;margin-bottom: 16rpx;
-		.tit{min-width: 100rpx;text-align-last: justify}
-	}
-	.wabtn{display: flex;align-items: center;justify-content: space-between;border-top: 2rpx solid #E5E5E5;height: 80rpx;padding: 0 38rpx;
-		view{font-weight: 500;font-size: 24rpx;color: #666666;}
-		image{width: 16rpx;height: 28rpx;}
-	}
 }
+.bxlists /deep/ .uni-swiper-dots-horizontal{left: 26rpx;transform: translate(0);}
+.bxlists /deep/ .uni-swiper-dot{width: 10rpx;height: 10rpx;}
+.bxlists /deep/ .uni-swiper-dot-active{width: 24rpx;height: 10rpx;}
 // 维修人员
 .stafflist{width: 344rpx;min-height: 256rpx;background: #FFFFFF;border-radius: 20rpx;margin:0 12rpx 24rpx 12rpx;padding-bottom: 20rpx;box-sizing: border-box;
 	// &:nth-of-type(2n){margin-right: 0;}
@@ -460,6 +724,61 @@ height: 28rpx;background: #E6E6E6;border-radius: 14rpx;line-height: 28rpx;text-a
 }
 .spdel{width: 164rpx;background: #EA2D2D;font-weight: bold;font-size: 26rpx;color: #FFFFFF;display: flex;align-items: center;justify-content: center;position: absolute;right: -146rpx;top: 0;bottom: 0;padding-left: 14rpx;}
 
+//投诉建议
+.bxlists{background: #FFFFFF;border-radius: 20rpx;margin-bottom: 24rpx;position: relative;
+	.bxtop{padding: 30rpx 24rpx;position: relative;
+		.swiper{width: 100%;height: 280rpx;border-radius: 20rpx;box-sizing: border-box;margin-bottom: 28rpx;overflow: hidden;
+			image{width: 100%;height: 100%;}
+		}
+		.toptit{font-weight: bold;font-size: 28rpx;color: #161616;}
+		.walist{display: flex;font-weight: 500;font-size: 26rpx;color: #666666;margin-bottom: 16rpx;
+			.tit{min-width: 100rpx;text-align-last: justify}
+		}
+		.btns{display: flex;flex-wrap: wrap;justify-content: flex-end;flex: 1 0 auto;}
+		.btn{min-width: 120rpx;height: 54rpx;border-radius: 26rpx;font-weight: 500;font-size: 26rpx;text-align: center;line-height: 54rpx;padding: 0 10rpx;box-sizing: border-box; margin-bottom: 14rpx;margin-left: 12rpx;
+			&.btna{border: 2rpx solid #FF6969;background: #FFF8F8;color: #FF6969;}
+			&.btnb{background: #0256FD;color: #FFFFFF;}
+			&.btnc{border: 2rpx solid #0156FE;background: #DFEAFF;color: #0156FE;}
+			&.btnd{border: 2rpx solid #C1C1C1;background: #F1F1F1;color: #C1C1C1;}
+		}
+	}
+	.bxsteps{border-top: 2rpx solid #E6E6E6;padding: 30rpx 0;
+		.chtop{padding-right: 48rpx;
+				.line{width: 14rpx;height: 48rpx;background: #0256FD;border-radius:0 12rpx 12rpx 0;margin-right: 18rpx;}
+				view{font-weight: bold;font-size: 28rpx;color: #272727;}
+				.upimg{width: 22rpx;height: 14rpx;flex: 0 0 auto;margin-left: 12rpx;transform: rotate(180deg);transition: all 0.3s;}
+		}
+		.fjlists {display: flex;align-items: flex-start;justify-content: space-between;margin-bottom: 20rpx;
+				&:last-child{margin-bottom: 0;}
+				.imgl{width: 40rpx;height: 40rpx;display: flex;align-items: center;flex: 0 0 auto;
+					image{width: 26rpx;height: 24rpx;}
+				}
+				.tit{font-size: 26rpx;color: #222327;font-weight: 500;margin-top: 4rpx;word-break: break-all;}
+			}
+		.hfstep{padding: 0 32rpx 30rpx 36rpx;margin-top: 24rpx;
+			.hfslist{padding-bottom: 20rpx;position: relative;
+				&:first-child{
+					.hfstit{color: #0156FE;}
+				}
+				&::before{content: '';position: absolute;left: 14rpx;top:14rpx;height: 100%;width: 2rpx;background: #E6E6E6;}
+				.limg{width: 30rpx;height: 30rpx;margin-right: 22rpx;flex: 0 0 auto;margin-top:3rpx;
+					.imga{width: 30rpx;height: 30rpx;}
+					.imgb{width: 18rpx;height: 18rpx;}
+				}
+				.hfstit{font-weight: bold;font-size: 30rpx;color: #666666;line-height: 36rpx;margin-bottom: 20rpx;
+					text{font-size: 26rpx;margin-left: 12rpx;}
+				}
+				.hfstxt{font-weight: 500;font-size: 26rpx;color: #666666;line-height: 36rpx;margin-bottom: 20rpx;}
+				.hfimgs{padding-top: 2rpx;
+					image{width: 84rpx;height: 84rpx;border-radius: 20rpx;margin-right: 40rpx;margin-bottom: 10rpx;}
+				}
+			}
+		}
+	}
+}
+.bxlists /deep/ .uni-swiper-dots-horizontal{left: 26rpx;transform: translate(0);}
+.bxlists /deep/ .uni-swiper-dot{width: 10rpx;height: 10rpx;}
+.bxlists /deep/ .uni-swiper-dot-active{width: 24rpx;height: 10rpx;}
 // 无数据
 .nodata{display: flex;flex-direction: column;align-items: center;
 	image{width: 440rpx;height: 440rpx;}

+ 49 - 7
property_ui/service/pages/service/complaint.vue

@@ -21,9 +21,10 @@
 		</view>
 		<!-- 列表 -->
 		<view class="carlists">
-			<car-list :datainfo="list" :tsjyList="tsjyList"  :wtdt="wtdt" type='complaint' @getDetail="getDetail" @getDelFn="getDelFn"></car-list>
+			<car-list :datainfo="list" :tsjyList="tsjyList"  :wtdt="wtdt" type='complaint' @getDetail="getDetail" @getDelFn="getDelFn" @getReplyFn="getReplyFn" @getCloseFn="getCloseFn"></car-list>
 		</view>
 		<loading></loading>
+		<pop-up :type="type" @getClose='getClose' :suggestionId="suggestionId"  @getSure="getSure"></pop-up>
 	</view>
 </template>
 
@@ -33,9 +34,10 @@
 	import carList from "@/service/components/car/list.vue"
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
 	import {getDictionaryFn} from "@/api/system/user.js"
-	import {suggestionlList,suggestionlDel} from "@/api/work/service.js"
+	import popUp from "@/service/components/popup/popup.vue"
+	import {suggestionlList,suggestionlDel,suggestionlPut} from "@/api/work/service.js"
 	export default{
-		components:{carList},
+		components:{carList,popUp},
 		data(){
 			return{
 				reset:require('@/car/static/car/reset.png'),
@@ -51,6 +53,8 @@
 				tabval:'-1',
 				tablist:[{tit:'全部',val:'-1'},{tit:'不予公开',val:'N'}],
 				tsjyList:[],
+				type:'',
+				suggestionId:"",
 			}
 		},
 		onUnload() {
@@ -72,6 +76,41 @@
 		},
 		methods:{
 			checkPermi, checkRole,
+			getReplyFn(id){
+				this.type='reply';
+				this.suggestionId=id;
+			},
+			getClose(){
+				this.type='';
+				this.suggestionId='';
+			},
+			getSure(data){
+				var that=this;
+				var params=JSON.parse(JSON.stringify(data))
+				params.suggestionId=this.suggestionId;
+				params.status='2';
+				suggestionlPut(params).then(res=>{
+					if(res.code==200){
+						this.$toast('回复成功')
+						setTimeout(function(){
+							that.getrefreshData()
+						},1200)
+					}
+				})
+				this.type='';
+			},
+			getCloseFn(data){
+				var that=this;
+				var param=JSON.parse(JSON.stringify(data))
+				suggestionlPut(param).then(res=>{
+					if(res.code==200){
+						that.$toast('操作成功')
+						setTimeout(function(){
+							that.getrefreshData()
+						},1200)
+					}
+				})
+			},
 			init(){
 				// 投诉建议类型
 				getDictionaryFn('complaint_types').then(res=>{
@@ -157,10 +196,13 @@
 							}
 						}
 						var newArr=JSON.parse(JSON.stringify(res.rows))
-						newArr.forEach(ite=>{
-							ite.right=0;
-						})
-						// console.log(newArr,555)
+						if(newArr&&newArr.length){
+							newArr.forEach(ite=>{
+								if(ite.images){
+									ite.images=ite.images.split(',')
+								}
+							})
+						}
 						if (this.pageNum == 1) {
 							this.list = newArr;
 						} else {

+ 123 - 8
property_ui/service/pages/service/warranty.vue

@@ -21,8 +21,9 @@
 		</view>
 		<!-- 列表 -->
 		<view class="carlists">
-			<car-list :datainfo="list" :bxlbList="bxlbList" :bxztList="bxztList"  :wtdt="wtdt" type='warranty' @getDetail="getDetail" @getDelFn="getDelFn"></car-list>
+			<car-list :datainfo="list" :bxlbList="bxlbList" :bxztList="bxztList"  :wtdt="wtdt" type='warranty' @getDetail="getDetail" @getDelFn="getDelFn" @getAssignFn="getAssignFn" @getCheckFn="getCheckFn"></car-list>
 		</view>
+		<pop-up :type="type" @getClose='getClose' :bxlbList="bxlbList" :bxlb="maintenanceCategory" :vxsztList="vxsztList" :peolist="peolist" :finshtype='repairStatus' @getSure="getSure"></pop-up>
 		<loading></loading>
 	</view>
 </template>
@@ -30,12 +31,14 @@
 <script>
 	import config from '@/config'
 	const baseUrl = config.baseUrl
+	import popUp from "@/service/components/popup/popup.vue"
 	import carList from "@/service/components/car/list.vue"
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
-	import {repairList,repairDel} from "@/api/work/service.js"
+	import {repairList,repairDel,repairPut,repairAssign} from "@/api/work/service.js"
+	import {stafflistNoPage} from "@/api/work/people.js"
 	import {getDictionaryFn} from "@/api/system/user.js"
 	export default{
-		components:{carList},
+		components:{carList,popUp},
 		data(){
 			return{
 				reset:require('@/car/static/car/reset.png'),
@@ -52,6 +55,13 @@
 				tablist:[{tit:'全部报修',val:-1}],
 				bxztList:[],
 				bxlbList:[],
+				vxsztList:[],
+				peolist:[],
+				maintenanceCategory:'',
+				type:'',
+				repairId:'',
+				staffId:'',
+				repairStatus:'',//维修状态
 			}
 		},
 		onUnload() {
@@ -62,7 +72,8 @@
 				this.getrefreshData()
 			})
 			this.init()
-			this.getDataFn()
+			this.getDataFn();
+			this.getstafflistNoPage()
 		},
 		// 上拉触底加载更多触发事件
 		onReachBottom() {
@@ -73,6 +84,24 @@
 		},
 		methods:{
 			checkPermi, checkRole,
+			getAssignFn(data){
+				this.type='assign';
+				var info=JSON.parse(JSON.stringify(data))
+				this.repairId=info.repairId;
+				this.maintenanceCategory=info.maintenanceCategory;
+			},
+			getCheckFn(data){
+				this.type='assigncheck';
+				var info=JSON.parse(JSON.stringify(data))
+				this.repairId=info.repairId;
+				this.staffId=info.staffId;
+				this.repairStatus=info.repairStatus;
+			},
+			getClose(){
+				this.type='';
+				this.repairId='';
+				this.maintenanceCategory='';
+			},
 			init(){
 				// 报修状态
 				getDictionaryFn('repair_status').then(res=>{
@@ -90,7 +119,7 @@
 						})
 					}
 				})
-				// 报修状态
+				// 报修类别
 				getDictionaryFn('baoxiutype').then(res=>{
 					if(res.code==200){
 						this.bxlbList = res.data.map(v => {
@@ -101,6 +130,81 @@
 						})
 					}
 				})
+				// 维修师状态
+				getDictionaryFn('technician_status').then(res=>{
+					if(res.code==200){
+						this.vxsztList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+			},
+			getstafflistNoPage(){
+				var patams={
+					staffCategory:'repair'
+				}
+				stafflistNoPage(patams).then(res=>{
+					if(res.code==200){
+						this.peolist=res.rows;
+					}
+				})
+			},
+			time() {
+				var date = new Date();
+				var y = date.getFullYear();
+				var m = date.getMonth() + 1;
+				var d = date.getDate();
+				var h = date.getHours();
+				var min = date.getMinutes();
+				var s = date.getSeconds();
+				var yearStr = y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d)
+				var timeStr = (h < 10 ? ('0' + h) : h) + ':' + (min < 10 ? ('0' + min) : min) + ':' + (s < 10 ? (
+					'0' + s) : s);
+				var kaTime = yearStr + ' ' + timeStr;
+				return kaTime
+			},
+			getSure(data){
+				var type=this.type;
+				var that=this;
+				var ite=JSON.parse(JSON.stringify(data))
+				if(type=='assign'){
+					ite.repairId=this.repairId;
+					repairAssign(ite).then(res=>{
+						if(res.code==200){
+							that.$toast("指派成功")
+							setTimeout(function(){
+								that.type='';
+								that.getrefreshData()
+							},1500)
+						}
+					})
+				}else if(type=='assigncheck'){
+					var params={};
+					params.repairId=this.repairId;
+					params.staffId=this.staffId;
+					if(this.repairStatus==2){//上门拍照
+						params.repairStatus=3;
+						params.visitPhoto=ite.imgurl;
+						params.visitTime=this.time();
+						
+					}else{//结束拍照
+						params.repairStatus=4;
+						params.completionTime=this.time();
+						params.completionPhoto=ite.imgurl;
+					}
+					repairPut(params).then(res=>{
+						if(res.code==200){
+							that.$toast("操作成功")
+							setTimeout(function(){
+								that.type='';
+								that.getrefreshData()
+							},1500)
+						}
+					})
+				}
 			},
 			getDelFn(data){
 				var that=this;
@@ -162,9 +266,20 @@
 							}
 						}
 						var newArr=JSON.parse(JSON.stringify(res.rows))
-						newArr.forEach(ite=>{
-							ite.right=0;
-						})
+						if(newArr&&newArr.length){
+							newArr.forEach(ite=>{
+								if(ite.repairImages){
+									ite.repairImages=ite.repairImages.split(',')
+								}
+								if(ite.visitPhoto){
+									ite.visitPhoto=ite.visitPhoto.split(',')
+								}
+								if(ite.completionPhoto){
+									ite.completionPhoto=ite.completionPhoto.split(',')
+								}
+							})
+						}
+						console.log(newArr)
 						if (this.pageNum == 1) {
 							this.list = newArr;
 						} else {

二进制
property_ui/service/static/service/cira.png


二进制
property_ui/service/static/service/cirb.png


+ 3 - 1
property_ui/static/style.css

@@ -9,7 +9,8 @@
 .flexdcc{display: flex;align-items: center;justify-content: center;flex-direction: column;}
 .flexccc{display: flex;flex-direction: column;align-items: center;justify-content: center;}
 .flexdc{display: flex;flex-direction: column;}
-.flecw{display: flex;flex-wrap: wrap;}
+.flexcw{display: flex;flex-wrap: wrap;}
+.fleccw{display: flex;align-items: center;flex-wrap: wrap;}
 .flext{display: flex;align-items: flex-start;}
 .flexjd{display: flex;justify-content: flex-end;}
 .bgbox{background-color: rgba(0, 0, 0, 0.5);position: fixed;left: 0;right: 0;top: 0;bottom: 0;z-index: 5;}
@@ -79,6 +80,7 @@ font-weight: bold;font-size: 26rpx;color: #FFFFFF;background: #0256FD;border-rad
 .mb24{margin-bottom: 48rpx;}
 .mt5{margin-top: 10rpx;}
 .mt6{margin-top: 12rpx;}
+.mt10{margin-top: 20rpx;}
 .mt12{margin-top: 24rpx;}
 .mt30{margin-top: 60rpx;}
 .mt40{margin-top: 80rpx;}

+ 2 - 2
property_ui/work/components/car/list.vue

@@ -27,10 +27,10 @@
 				</view>
 				<view class="clists pr" v-if="tabval=='-1'||tabval=='wtg'">
 					<!-- 房本信息 -->
-					<view class="chtit">
+					<!-- <view class="chtit" v-if="ite.residentType==2&&ite.isHouseholder=='Y'">
 						<image :src="chtitbg" class="chtitbg"></image>
 						<view class="chtxt">房本信息</view>
-					</view>
+					</view> -->
 					<view class="clist"><view class="tit">姓名</view>{{ite.residentName}}</view>
 					<view class="clist"><view class="tit">手机号</view>{{ite.residentPhone}}</view>
 					<view class="clist"><view class="tit">人员类型</view>

+ 2 - 2
property_ui/work/pages/manage/addcar.vue

@@ -156,7 +156,7 @@
 				datainfo:{
 					// "carId":"",//业主车辆主键
 					"houseId":"",//房屋信息id
-					"detailedAddress":"",//房屋的详细门牌号
+					"detailedAddress":"",//房屋的门牌号
 					// "userId":"",//用户id
 					"residentId":"",//居住人员表id
 					// "userName":"",//业主姓名
@@ -248,7 +248,7 @@
 				}else{
 					houseInfolistNoPage().then(res=>{
 						if(res.code==200){
-							this.fwlist= res.rows.map(v => {
+							this.fwlist= res.data.map(v => {
 								return {
 									dictLabel: v.detailedAddress,
 									dictValue: v.houseId,

+ 5 - 5
property_ui/work/pages/manage/addhouse.vue

@@ -78,9 +78,9 @@
 							<view class="rimg"></view>
 						</view>
 					</uni-forms-item>
-					<uni-forms-item label="详细门牌号" required name="xxaddress">
+					<uni-forms-item label="门牌号" required name="xxaddress">
 						<view class="flexc">
-							<uni-easyinput :disabled="isdisabled" v-model="datainfo.xxaddress" :inputBorder='false' placeholder="请输入详细门牌号" />
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.xxaddress" :inputBorder='false' placeholder="请输入门牌号" />
 							<view class="rimg"></view>
 						</view>
 					</uni-forms-item>
@@ -233,7 +233,7 @@
 					 "usagePeriod":"",//房屋使用期限
 					 "registrationDate":"",//房屋登记日期
 					 "coOwner":"",//共有人姓名,多个共有人可以用逗号分隔
-					 "detailedAddress":"",//房屋的详细门牌号
+					 "detailedAddress":"",//房屋的门牌号
 					 "hasParkingSpace":"",//是否有车位,Y表示有,N表示无
 					 "communityName":this.$store.state.user.companyName,//房屋所在小区名称
 					 "houseStatus":"",//房屋状态:1-自住,2-出租,3-空闲,4-待售
@@ -242,7 +242,7 @@
 				},
 				rules: {
 				  location: {rules: [{required: true,errorMessage: '请输入房屋坐落位置' }]},
-				  // detailedAddress: {rules: [{required: true,errorMessage: '请输入详细门牌号' }]},
+				  // detailedAddress: {rules: [{required: true,errorMessage: '请输入门牌号' }]},
 				  area: {rules: [{required: true,errorMessage: '请输入面积' }]},
 				},
 				id:'',
@@ -400,7 +400,7 @@
 						return
 					}
 					if(!params.xxaddress){
-						this.$toast("请输入详细门牌号")
+						this.$toast("请输入门牌号")
 						return
 					}
 					params.detailedAddress=`${params.loudong?params.loudong+'栋':''}` + `${params.danyuan?params.danyuan+'单元':''}` + params.xxaddress;

+ 2 - 2
property_ui/work/pages/manage/house.vue

@@ -43,7 +43,7 @@
 	import config from '@/config'
 	const baseUrl = config.baseUrl
 	import carList from "@/work/components/car/list.vue"
-	import {houseInfoList,examineResident,deleteResident} from "@/api/work/work.js"
+	import {houseInfoList,examineResident,deleteResident,houseInfowyList} from "@/api/work/work.js"
 	import {residentInfoList} from "@/api/work/people.js"
 	import {getDictionaryFn} from "@/api/system/user.js"
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
@@ -239,7 +239,7 @@
 						}
 					})
 				}else{
-					houseInfoList(params).then(res=>{
+					houseInfowyList(params).then(res=>{
 						if(res.code==200){
 							if (res.rows.length < this.pageSize) {
 								this.reachflag = false

+ 13 - 13
property_ui/work/pages/manage/houseadd.vue

@@ -46,9 +46,9 @@
 							<view class="rimg"></view>
 						</view>
 					</uni-forms-item>
-					<uni-forms-item label="详细门牌号" required name="xxaddress">
+					<uni-forms-item label="门牌号" required name="xxaddress">
 						<view class="flexc">
-							<uni-easyinput :disabled="isdisabled" v-model="datainfo.xxaddress" :inputBorder='false' placeholder="请输入详细门牌号" />
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.xxaddress" :inputBorder='false' placeholder="请输入门牌号" />
 							<view class="rimg"></view>
 						</view>
 					</uni-forms-item>
@@ -90,13 +90,13 @@
 				baseUrl:config.baseUrl,
 				datainfo:{
 					 // "houseId":"",//房屋信息主键
-					 "ownerName":"",//权利人姓名
-					 "location":"",//房屋坐落位置
-					 "rightType":"",//权利类型,如所有权、使用权等
-					 "area":"",//房屋面积,单位为平方米
-					 "loudong":"",//楼栋
-					 "danyuan":"",//单元
-					 "xxaddress":"",//详细
+					 "ownerName":null,//权利人姓名
+					 "location":null,//房屋坐落位置
+					 "rightType":null,//权利类型,如所有权、使用权等
+					 "area":null,//房屋面积,单位为平方米
+					 "loudong":null,//楼栋
+					 "danyuan":null,//单元
+					 "xxaddress":null,//详细
 					 
 					 // "documentNumber":"",//房屋相关的字第号
 					 // "propertyUnitNumber":"",//不动产单元号
@@ -105,14 +105,14 @@
 					 // "usagePeriod":"",//房屋使用期限
 					 // "registrationDate":"",//房屋登记日期
 					 // "coOwner":"",//共有人姓名,多个共有人可以用逗号分隔
-					 "detailedAddress":"",//房屋的详细门牌号
-					 "hasParkingSpace":"",//是否有车位,Y表示有,N表示无
+					 "detailedAddress":null,//房屋的门牌号
+					 "hasParkingSpace":null,//是否有车位,Y表示有,N表示无
 					 "communityName":this.$store.state.user.companyName,//房屋所在小区名称
 					 // "houseStatus":""//房屋状态:1-自住,2-出租,3-空闲,4-待售
 				},
 				rules: {
 				  location: {rules: [{required: true,errorMessage: '请输入房屋坐落位置' }]},
-				  // detailedAddress: {rules: [{required: true,errorMessage: '请输入详细门牌号' }]},
+				  // detailedAddress: {rules: [{required: true,errorMessage: '请输入门牌号' }]},
 				  area: {rules: [{required: true,errorMessage: '请输入面积' }]},
 				},
 				id:'',
@@ -159,7 +159,7 @@
 						return
 					}
 					if(!params.xxaddress){
-						this.$toast("请输入详细门牌号")
+						this.$toast("请输入门牌号")
 						return
 					}
 					params.detailedAddress=`${params.loudong?params.loudong+'栋':''}` + `${params.danyuan?params.danyuan+'单元':''}` + params.xxaddress;

+ 21 - 14
property_ui/work/pages/manage/housedetail.vue

@@ -136,7 +136,7 @@
 													<block v-if="phofile&&phofile.length">
 														<view class="assimg" v-for="(ite,idx) in phofile" :key="idx" @click="getPreviewa(idx,phofile)">
 															<image :src="baseUrl+ite" class="img"></image>
-															<image :src="rdelimg" class="delimg" @click.stop="getDelFn(idx,'fm')"></image>
+															<image :src="rdelimg" class="delimg" @click.stop="getDelFn(idx,'fm')" v-if="!isdisabled"></image>
 														</view>
 													</block>
 													<view class="addbox" @click="getaddImageava">
@@ -283,9 +283,9 @@
 					<view class="btn btn1" @click.stop="getShFn('3')">拒绝</view>
 					<view class="btn btn2" @click.stop="getShFn('2')">通过</view>
 				</view>
-				<!-- <view class="hfbtns flexcj" v-if="datainfo.examine==3&&checkPermi(['wuYe:residentInfo:editAuthentication'])">
-					<view class="btn btn2" @click.stop="getSubmit">修改提交</view>
-				</view> -->
+				<view class="hfbtns flexcj" v-if="datainfo.examine==3&&checkPermi(['wuYe:residentInfo:editAuthentication'])">
+					<view class="btn btn2 flex1" @click.stop="getSubmit">修改提交</view>
+				</view>
 			</view>
 		</uni-forms>
 		
@@ -300,7 +300,7 @@
 	import {uploadIdentify,uploadmore} from '@/utils/common.js'
 	import {listNoPageTenant,houseInfoDet,examineResident} from "@/api/work/work.js"
 	import {gettenantList} from "@/api/login.js"
-	import {residentInfoDet,authenticationPut} from "@/api/work/people.js"
+	import {residentInfoDet,authenticationPut,addResidentInfo} from "@/api/work/people.js"
 	import {getDictionaryFn} from "@/api/system/user.js"
 	import {selectValueKey} from "@/utils/common.js"
 	import {getOcrIdCard,getrealEstateCertificatee} from "@/api/system/card.js"
@@ -312,6 +312,7 @@
 				rimg: require('@/mine/static/house/rimg.png'),
 				cmico: require('@/mine/static/house/cmico.png'),
 				aphoto: require('@/service/static/service/photo.png'),
+				rdelimg:require('@/service/static/service/rdel.png'),
 				baseUrl: config.baseUrl,
 				checkflag:true,
 				backgroundColor: "transparent",
@@ -418,7 +419,7 @@
 					"usagePeriod":null,//房屋使用期限
 					"registrationDate":null,//房屋登记日期
 					"coOwner":null,//共有人姓名,多个共有人可以用逗号分隔
-					"detailedAddress":null,//房屋的详细门牌号
+					"detailedAddress":null,//房屋的门牌号
 					"hasParkingSpace":null,//是否有车位,Y表示有,N表示无
 					"communityName":null,//房屋所在小区名称
 					"houseStatus":null,//房屋状态:1-自住,2-出租,3-空闲,4-待售
@@ -435,7 +436,6 @@
 			}else{
 				// var tenantId=this.$store.state.user.tenantId;
 				// this.datainfo.tenantId=tenantId;
-				// this.getRoleNopage(tenantId)
 			}
 			this.gettenantList();
 			if(e.id){
@@ -461,6 +461,9 @@
 				this.isdisabled=false;
 			},
 			getSyFn(e){
+				if(this.isdisabled){
+					return
+				}
 				this.datainfo.isHouseholder=e
 				console.log(this.datainfo.isHouseholder)
 			},
@@ -496,7 +499,7 @@
 					"usagePeriod":"",//房屋使用期限
 					"registrationDate":"",//房屋登记日期
 					"coOwner":"",//共有人姓名,多个共有人可以用逗号分隔
-					"detailedAddress":"",//房屋的详细门牌号
+					"detailedAddress":"",//房屋的门牌号
 					"hasParkingSpace":"",//是否有车位,Y表示有,N表示无
 					"communityName":"",//房屋所在小区名称
 					"houseStatus":"",//房屋状态:1-自住,2-出租,3-空闲,4-待售
@@ -747,6 +750,9 @@
 							var houseinfo=res.data.houseInfoRedidentList[0]
 							this.houserinfo=JSON.parse(JSON.stringify(houseinfo))
 						}
+						if(res.data.examine&&res.data.examine==1){
+							this.isdisabled=true;
+						}
 						
 					}
 				})
@@ -775,7 +781,7 @@
 							return
 						}
 						if(!houserinfo.detailedAddress){
-							this.$toast('请输入详细门牌号')
+							this.$toast('请输入门牌号')
 							return
 						}
 						houserinfo.tenantId=params.tenantId;
@@ -802,12 +808,12 @@
 					// }
 					if(this.ptype=='add'){
 						if(this.rzflag){
-							residentInfoAdd(params).then(res=>{
+							addResidentInfo(params).then(res=>{
 								if(res.code==200){
 									this.$toast("新增成功")
 
 									setTimeout(function(){
-										uni.$emit("residentInfoList")
+										uni.$emit("refHouseList")
 										var initFace='';
 										that.$store.dispatch('checkInitFace', initFace).then(() => {
 											
@@ -824,11 +830,11 @@
 					}else{
 						if(this.rzflag){
 							params.isFilter=true;
-							residentInfoPut(params).then(res=>{
+							authenticationPut(params).then(res=>{
 								if(res.code==200){
 									this.$toast("修改成功")
 									setTimeout(function(){
-										uni.$emit("residentInfoList")
+										uni.$emit("refHouseList")
 										var initFace='';
 										that.$store.dispatch('checkInitFace', initFace).then(() => {
 											
@@ -844,7 +850,7 @@
 								if(res.code==200){
 									this.$toast("修改成功")
 									setTimeout(function(){
-										uni.$emit("residentInfoList")
+										uni.$emit("refHouseList")
 										uni.navigateBack({
 											delta:1
 										})
@@ -1015,6 +1021,7 @@
 <style lang="scss" scoped>
 .coa /deep/ .uni-date__x-input{text-align: right;color: #AAAAAA;}
 .check /deep/ .select-wrap{border: none;width: 100%;}
+.check /deep/ .uni-date-editor--x__disabled{opacity: 1;}
 .mh35{min-height: 70rpx;display: flex;align-items: center;}
 .check /deep/ .uni-forms-item{min-height: 106rpx;box-sizing: border-box;display: flex;align-items: center;margin-bottom: 0;border-bottom: 2rpx solid #E6E6E6;padding:10rpx 0;}
 .check .cbox .chmain /deep/ .isnobor{border: none;}