瀏覽代碼

测试修改

zouling 3 月之前
父節點
當前提交
a83f0bd9dc

+ 17 - 0
property_ui/api/system/card.js

@@ -15,3 +15,20 @@ export function getlicensePlate(data) {
 	'data':data
   })
 }
+//房产证识别wuYe:ocr:realEstateCertificate
+export function getrealEstateCertificatee(data) {
+  return request({
+    'url': '/ocr/realEstateCertificate',
+    'method': 'post',
+	'data':data
+  })
+}
+//行驶证识别wuYe:ocr:vehicleLicense
+export function getvehicleLicense(data) {
+  return request({
+    'url': '/ocr/vehicleLicense',
+    'method': 'post',
+	'data':data
+  })
+}
+

+ 10 - 0
property_ui/api/work/index.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+//身份证识别
+export function getCount(data) {
+  return request({
+    'url': '/wuYe/statistics/num/app',
+    'method': 'get',
+	'data':data
+  })
+}
+

+ 7 - 6
property_ui/health/pages/health/add.vue

@@ -11,12 +11,12 @@
 						<view class="rztit">请上传身份证照片</view>
 						<view class="flexcj mb10">
 							<view class="carbox" @click="getaddImagea('front')">
-								<image :src="baseUrl+datainfo.idCardFront" class="img" v-if="datainfo.idCardFront"></image>
+								<image :src="baseUrl+datainfo.idCardBack" class="img" v-if="datainfo.idCardBack"></image>
 								<image :src="cardz" class="img" v-else></image>
 								<view class="tit">拍摄人像面</view>
 							</view>
 							<view class="carbox" @click="getaddImagea('back')">
-								<image :src="baseUrl+datainfo.idCardBack" class="img" v-if="datainfo.idCardBack"></image>
+								<image :src="baseUrl+datainfo.idCardFront" class="img" v-if="datainfo.idCardFront"></image>
 								<image :src="cardf" class="img" v-else></image>
 								<view class="tit">拍摄国徽面</view>
 							</view>
@@ -39,7 +39,7 @@
 					<uni-forms-item label="性别" required name="residentGender">
 						<view class="flexc">
 							<view class="flex1"></view>
-							<uni-data-checkbox  :map="map" :disabled="isdisabled" selectedColor="#0156FE" selectedTextColor="#272727" :value="datainfo.residentGender" :localdata="xbList" />
+							<uni-data-checkbox  :map="map" :disabled="isdisabled" selectedColor="#0156FE" selectedTextColor="#272727" v-model="datainfo.residentGender" :localdata="xbList" />
 						</view>
 					</uni-forms-item>
 					<uni-forms-item label="家庭地址" required name="idCardAddress">
@@ -155,6 +155,7 @@
 	import {residentInfoAdd,residentInfoPut,residentInfoDet} from "@/api/work/people.js"
 	import {getDictionaryFn} from "@/api/system/user.js"
 	import {selectValueKey} from "@/utils/common.js"
+	import {getOcrIdCard} from "@/api/system/card.js"
 	import wSelect from "@/people/components/w-select/w-select.vue"
 	export default {
 		components: {wSelect},
@@ -178,7 +179,7 @@
 					"residentBirthday":"",//居住人员出生日期
 					// "yearsOld":"",//年龄
 					"residentPhone":"",//居住人员手机号
-					"residentGender":1,//居住人员性别:1-男,2-女
+					"residentGender":'',//居住人员性别:1-男,2-女
 					"residentRelationship":"",//居住人员与户主的关系,如父子、夫妻等
 					"isHouseholder":"",//是否是户主 N不是 Y是
 					"isTenant":"",//是否是租户:Y-是,N-否
@@ -501,7 +502,7 @@
 						uploadIdentify('/common/upload', img, 0, 0, 0, imglen, fuwufile, function(rs) {
 							var resurl = rs[0];
 							if (e == 'front') {
-								that.datainfo.idCardFront = resurl.fileName;
+								that.datainfo.idCardBack = resurl.fileName;
 								if (rs && rs.length > 0) {
 									var obj = {
 										type: e,
@@ -510,7 +511,7 @@
 									that.getOcrIdCard(obj)
 								}
 							} else {
-								that.datainfo.idCardBack = resurl.fileName;
+								that.datainfo.idCardFront = resurl.fileName;
 							}
 						})
 					}

+ 28 - 16
property_ui/pages/index/index.vue

@@ -35,68 +35,68 @@
 				</view>
 				<view class="lists">
 					<view class="list">
-						<view class="tit">21</view>
+						<view class="tit">{{count.kxcw}}</view>
 						<view class="txt">空闲车位</view>
 					</view>
 					<view class="list">
-						<view class="tit">21</view>
+						<view class="tit">{{count.kxcdz}}</view>
 						<view class="txt">空闲充电桩</view>
 					</view>
 					<view class="list">
-						<view class="tit">21</view>
+						<view class="tit">{{count.jrcl}}</view>
 						<view class="txt">进入车辆</view>
 					</view>
 					<view class="list">
-						<view class="tit">21</view>
+						<view class="tit">{{count.lkcl}}</view>
 						<view class="txt">离开车辆</view>
 					</view>
 					<view class="list">
-						<view class="tit">21</view>
+						<view class="tit">{{count.wlcl}}</view>
 						<view class="txt">外来车辆</view>
 					</view>
 					<view class="list">
-						<view class="tit">21</view>
+						<view class="tit">{{count.wtdj}}</view>
 						<view class="txt">违停登记</view>
 					</view>
 					<view class="list">
-						<view class="tit">21</view>
+						<view class="tit">{{count.wlry}}</view>
 						<view class="txt">外来人员</view>
 					</view>
 					<view class="list">
-						<view class="tit">21</view>
+						<view class="tit">{{count.jrry}}</view>
 						<view class="txt">进入人员</view>
 					</view>
 					<block v-if="zhanflag">
 						<view class="list">
-							<view class="tit ca">21</view>
+							<view class="tit ca">{{count.yxg}}</view>
 							<view class="txt">已巡更</view>
 						</view>
 						<view class="list">
-							<view class="tit ca">21</view>
+							<view class="tit ca">{{count.wxg}}</view>
 							<view class="txt">未巡更</view>
 						</view>
 						<view class="list">
-							<view class="tit cb">21</view>
+							<view class="tit cb">{{count.jzdd}}</view>
 							<view class="txt">家政订单</view>
 						</view>
 						<view class="list">
-							<view class="tit cb">21</view>
+							<view class="tit cb">{{count.wcdd}}</view>
 							<view class="txt">完成订单</view>
 						</view>
 						<view class="list">
-							<view class="tit cc">21</view>
+							<view class="tit cc">{{count.jrbx}}</view>
 							<view class="txt">今日报修</view>
 						</view>
 						<view class="list">
-							<view class="tit cc">21</view>
+							<view class="tit cc">{{count.ypbx}}</view>
 							<view class="txt">已派报修</view>
 						</view>
 						<view class="list">
-							<view class="tit cc">21</view>
+							<view class="tit cc">{{count.tsjy}}</view>
 							<view class="txt">投诉建议</view>
 						</view>
 						<view class="list">
-							<view class="tit cc">21</view>
+							<view class="tit cc">{{count.yhjy}}</view>
 							<view class="txt">已回投诉</view>
 						</view>
 					</block>
@@ -206,6 +206,7 @@ import footers from '@/components/footer/footer.vue'
 import notice from '@/components/swiper/notice.vue'
 import {getUserProfile} from "@/api/system/user.js"
 import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+import {getCount} from "@/api/work/index.js"
   export default {
 	components:{footers,notice},
 	data(){
@@ -247,6 +248,7 @@ import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函
 			postGroup:'',//岗位
 			autoplay:false,
 			zhanflag:true,
+			count:"",//统计
 			noticelist:[{noticeTitle:"您有1条报修信息,请及时查看处理!",num:'4'},{noticeTitle:"您有1条报修信息,请及时查看处理!",num:'12'}]
 		}
 	},
@@ -264,11 +266,21 @@ import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函
 				this.nvaHeight = Number(e.statusBarHeight)+44;
 			}
 		})
+		this.getCount()
     },
 	methods:{
 		checkPermi, checkRole,
 		getNoticeDet(){
 			
+		},
+		getCount(){
+			getCount().then(res => {
+				if(res.code==200){
+					this.count=res.data;
+				}
+			  // this.roleGroup = response.roleGroup
+			  // this.postGroup = response.postGroup
+			})
 		},
 		getUser() {
 		  getUserProfile().then(response => {

+ 12 - 7
property_ui/people/components/car/list.vue

@@ -7,9 +7,9 @@
 			<view class="carlist peolist" v-for="(ite,idx) in datainfo" :key="idx">
 				<view class="ctop flexc">
 					<image :src="house" class="imgs" v-if="ite.houseStatus==1"></image>
-					<image :src="housea" class="imgs" v-if="ite.houseStatus==2"></image>
-					<image :src="houseb" class="imgs" v-if="ite.houseStatus==3"></image>
-					<image :src="housec" class="imgs" v-if="ite.houseStatus==4"></image>
+					<image :src="housea" class="imgs" v-if="ite.houseStatus==4"></image>
+					<image :src="houseb" class="imgs" v-if="ite.houseStatus==2"></image>
+					<image :src="housec" class="imgs" v-if="ite.houseStatus==3"></image>
 					<!-- <image :src="hicoa" class="imgs" v-if="ite.type==1"></image>
 					<image :src="hicob" class="imgs" v-if="ite.type==2"></image> -->
 					<view class="tit">{{ite.detailedAddress}}</view>
@@ -17,11 +17,11 @@
 					<!-- <view class="txt ca" v-if="ite.type==1">业主</view>
 					<view class="txt cb" v-if="ite.type==2">租户</view> -->
 					<view class="txt ca" v-if="ite.houseStatus==1">自住</view>
-					<view class="txt cb" v-if="ite.houseStatus==2">出租</view>
-					<view class="txt cc" v-if="ite.houseStatus==3">空闲</view>
-					<view class="txt co6" v-if="ite.houseStatus==4">代售</view>
+					<view class="txt cb" v-if="ite.houseStatus==4">出租</view>
+					<view class="txt cc" v-if="ite.houseStatus==2">空闲</view>
+					<view class="txt co6" v-if="ite.houseStatus==3">代售</view>
 				</view>
-				<view class="plists">
+				<view class="plists" v-if="ite.residentInfoList&&ite.residentInfoList.length">
 					<block v-for="(aite,aidx) in ite.residentInfoList">
 						<view class="flexc pr mb12"   :key="`peo${aidx}`" v-if="aidx==0" @click="getDetail(aite.residentId)"
 							:data-idx="idx" :data-aidx="aidx" data-type="peo"
@@ -72,6 +72,11 @@
 					</block>
 					<image :src="upimg" v-if="ite.residentInfoList.length>1" :class="ite.zhanflag?'act':''" class="upimg" @click="getZhan(idx)"></image>
 				</view>
+				<!-- 无数据 -->
+				<view class="nodata" v-else>
+					<image :src="noiconpimg" style="width: 200rpx;height: 200rpx;"></image>
+					<view style="font-size: 26rpx;margin-bottom: 20rpx;">暂无人员</view>
+				</view>
 			</view>
 		</block>
 		<!-- 维修人员管理 -->

+ 6 - 3
property_ui/people/pages/people/index.vue

@@ -58,6 +58,7 @@
 				reachflag: true,
 				wtdt:'',
 				houseId:'',
+				ftype:'',
 			}
 		},
 		onUnload() {
@@ -67,8 +68,10 @@
 			uni.$on('residentInfoList',(res)=>{
 				this.getrefreshData()
 			})
-			if(e.id){
-				this.houseId=e.id;
+			if(e.data){
+				var newobj=JSON.parse(decodeURIComponent(e.data));
+				this.houseId=newobj.id;
+				this.ftype=newobj.type
 			}
 			this.init()
 			this.getDataFn()
@@ -141,7 +144,7 @@
 					pageSize:this.pageSize,
 					pageNum: this.pageNum,
 				}
-				if(this.houseId){
+				if(this.ftype=='house'){
 					params.houseId=this.houseId
 				}
 				if(this.text){

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

@@ -38,8 +38,8 @@
 				<view class="patbtns">
 					<!-- v-if="ite.checkStatus==2" -->
 					<!-- v-else -->
-					<view class="btna" @click.stop="getDetail(ite.checkPointRecordId)" >查看</view>
-					<view  class="btnb" @click.stop="getAddFn(ite.checkPointRecordId)" >去巡更</view>
+					<view class="btna" @click.stop="getDetail(ite.checkPointRecordId)" v-if="ite.checkStatus==2">查看</view>
+					<view  class="btnb" @click.stop="getAddFn(ite.checkPointRecordId)" v-else>去巡更</view>
 				</view>
 			</view>
 		</block>

+ 18 - 1
property_ui/service/pages/service/patrol.vue

@@ -158,7 +158,9 @@
 				})
 			},
 			getCount(){
-				xgdjlCount().then(res=>{
+				var params={};
+				params.checkTime=this.time()
+				xgdjlCount(params).then(res=>{
 					if(res.code==200){
 						var data=res.data;
 						this.countinfo=data.data;
@@ -166,11 +168,26 @@
 					}
 				})
 			},
+			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;
+				return kaTime
+			},
 			getDataFn(){
 				var params={
 					pageSize:this.pageSize,
 					pageNum: this.pageNum,
 				}
+				params.checkTime=this.time()
 				if(this.tabval!=0){
 					params.checkStatus=this.tabval;
 					// if(this.tabval==2){

+ 4 - 7
property_ui/service/pages/service/patroldetail.vue

@@ -10,7 +10,7 @@
 			</view>
 			<view class="patlistr">
 				<view class="clist"><view class="tit">巡检类型</view>:{{kaType(datainfo.checkType)}}</view>
-				<view class="clist"><view class="tit">巡检时间</view>:{{datainfo.checkResultTime}}</view>
+				<view class="clist"><view class="tit">巡检时间</view>:{{datainfo.checkTime}}</view>
 				<view class="clist"><view class="tit">巡检路线</view>:{{datainfo.checkAddress}}</view>
 			</view>
 		</view>
@@ -23,7 +23,7 @@
 		<view class="patlist">
 			<view class="patlistr" style="padding-bottom: 14rpx;">
 				<view class="clist"><view class="tit">巡检人</view>:{{datainfo.checkUserName}}</view>
-				<view class="clist"><view class="tit">手机号码</view>:</view>
+				<view class="clist"><view class="tit">手机号码</view>:{{datainfo.checkUsePhone}}</view>
 				<view class="clist"><view class="tit">巡检时间</view>:{{datainfo.checkResultTime}}</view>
 				<view class="clist"><view class="tit">巡检结果</view>:{{datainfo.checkResult}}</view>
 				<view class="clist"><view class="tit">巡检详情</view>:
@@ -34,12 +34,9 @@
 				</view>
 				<view class="clist mt6"><view class="tit">照片</view>:
 					<!-- 图片 -->
-					<view class="imgs">
-						<image :src="home" class="img" @click="getPreview"></image>
-						<image :src="home" class="img" @click="getPreview"></image>
-						<image :src="home" class="img" @click="getPreview"></image>
+					<view class="imgs" v-if="phofile&&phofile.length">
+						<image :src="baseUrl+ite" class="img" v-for="(ite,idx) in phofile" :key="idx" @click="getPreview(idx,phofile)"></image>
 					</view>
-				
 				</view>
 			</view>
 		</view>

+ 5 - 1
property_ui/service/pages/service/patrolrecord.vue

@@ -77,7 +77,7 @@
 				})
 			},
 			getDetail(id){
-				this.$tab.navigateTo("/service/pages/service/patroladd?id="+id)
+				this.$tab.navigateTo("/service/pages/service/patroldetail?id="+id)
 			},
 			getAddFn(){
 				this.$tab.navigateTo("/service/pages/service/patroladd?")
@@ -102,6 +102,7 @@
 			bindDateChangea(e){
 				var val=e.detail.value;
 				this.cxrq=val;
+				this.getrefreshData()
 			},
 			getDelFn(id){
 				var that=this;
@@ -119,6 +120,9 @@
 					pageSize:this.pageSize,
 					pageNum: this.pageNum,
 				}
+				if(this.cxrq){
+					params.checkTime=this.cxrq
+				}
 				xgdjlList(params).then(res=>{
 					if(res.code==200){
 						if (res.rows.length < this.pageSize) {

+ 2 - 0
property_ui/static/style.css

@@ -6,6 +6,7 @@
 .flex01{flex: 0 1 auto;}
 .flexcj{display: flex;align-items: center;justify-content: space-between;}
 .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;}
 .flext{display: flex;align-items: flex-start;}
@@ -73,6 +74,7 @@ font-weight: bold;font-size: 26rpx;color: #FFFFFF;background: #0256FD;border-rad
 .mb20{margin-bottom: 40rpx;}
 .mb22{margin-bottom: 44rpx;}
 .mb24{margin-bottom: 48rpx;}
+.mt5{margin-top: 10rpx;}
 .mt6{margin-top: 12rpx;}
 .mt12{margin-top: 24rpx;}
 .mt30{margin-top: 60rpx;}

+ 20 - 10
property_ui/work/components/car/list.vue

@@ -7,18 +7,18 @@
 			<view class="carlist houselist" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail(ite.houseId)">
 				<view class="ctop flexc">
 					<image :src="house" class="imgs" v-if="ite.houseStatus==1"></image>
-					<image :src="housea" class="imgs" v-if="ite.houseStatus==2"></image>
-					<image :src="houseb" class="imgs" v-if="ite.houseStatus==3"></image>
-					<image :src="housec" class="imgs" v-if="ite.houseStatus==4"></image>
+					<image :src="housea" class="imgs" v-if="ite.houseStatus==4"></image>
+					<image :src="houseb" class="imgs" v-if="ite.houseStatus==2"></image>
+					<image :src="housec" class="imgs" v-if="ite.houseStatus==3"></image>
 					<view class="tit">{{ite.communityName}}{{ite.detailedAddress}}</view>
 					<!-- view class="btn btnbga">预约</view>
 					<view class="btn btnbgb">已来访</view>
 					<view class="btn btnbgc">待来访</view> -->
 					<view class="flex1"></view>
 					<view class="txt ca" v-if="ite.houseStatus==1">自住</view>
-					<view class="txt cb" v-if="ite.houseStatus==2">出租</view>
-					<view class="txt cc" v-if="ite.houseStatus==3">空闲</view>
-					<view class="txt co6" v-if="ite.houseStatus==4">代售</view>
+					<view class="txt cb" v-if="ite.houseStatus==4">出租</view>
+					<view class="txt cc" v-if="ite.houseStatus==2">空闲</view>
+					<view class="txt co6" v-if="ite.houseStatus==3">代售</view>
 				</view>
 				<view class="clists">
 					<view class="clist"><view class="tit">房屋坐落</view>{{ite.location}}</view>
@@ -51,14 +51,17 @@
 				<view class="delleft" style="padding: 0 24rpx;">
 					<view class="carltop flexc">
 						<view class="flex1">
-							<view class="tit mb6" :class="ite.vehicleType=='新能源'?'co16':'co01'">{{ite.plateNumber}}</view>
+							<view class="tit mb6 flexc" :class="ite.vehicleEnergy=='新能源'?'co16':'co01'">{{ite.plateNumber}}
+								<text class="cir"></text>
+								<text v-if="ite.vehicleColour">{{ite.vehicleColour}}</text>
+							</view>
 							<view class="txt flexc">
-								{{kaType(ite.vehicleBrand,clcxList)}}
-								<view class="txtbtn flexcc">{{ite.vehicleType}}</view>
+								{{ite.vehicleBrand}}
+								<view class="txtbtn flexcc" v-if="ite.vehicleEnergy=='新能源'">{{ite.vehicleEnergy}}</view>
 								<!-- <view class="txtbtn flexcc" v-if="ite.vehicleType==2">新能源</view> -->
 							</view>
 						</view>
-						<image :src="carb" class="carb" v-if="ite.vehicleType=='新能源'"></image>
+						<image :src="carb" class="carb" v-if="ite.vehicleEnergy=='新能源'"></image>
 						<image :src="cara" class="cara" v-else></image>
 					</view>
 					<view class="carlf">
@@ -401,6 +404,13 @@
 .mb10{margin-bottom: 20rpx;}
 .carlist{background: #FFFFFF;border-radius: 20rpx;margin-bottom: 24rpx;
 	.carltop{min-height: 154rpx;border-bottom: 2rpx solid #E5E5E5;
+		.cir{width: 8rpx;height: 8rpx;border-radius: 50%;margin: 0 8rpx;display: inline-block;}
+		.co16{
+			.cir{background: #16BE7F;}
+		}
+		.co01{
+			.cir{background: #0156FE;}
+		}
 			.tit{font-weight: bold;font-size: 32rpx;}
 			.txt{font-weight: 500;font-size: 26rpx;color: #272727;}
 			.txtbtn{min-width: 82rpx;

文件差異過大導致無法顯示
+ 0 - 0
property_ui/work/components/tki-float-keyboard/style.css


+ 459 - 0
property_ui/work/components/tki-float-keyboard/tki-float-keyboard.vue

@@ -0,0 +1,459 @@
+<template xlang="wxml" minapp="mpvue">
+	<view class="_flkey-body" :class="[keyShowAni?'_floatAniIn':'_floatAniOut']" v-if='keyShow'>
+		<view class="_flkey-bar">
+			<view class="_flkey-bar-l" @tap="_keySwUp" hover-class="_float-hover-c">
+				<view class="_flkey-bar-btn" v-show="mode == 'keyboard' && keyInputSkin">{{isUp?'小写':'大写'}}</view>
+			</view>
+			<view class="_flkey-bar-c">
+				<view class="_flkey-bar-title">{{title}}</view>
+			</view>
+			<view class="_flkey-bar-r" @tap="_keyHide" hover-class="_float-hover-c">
+				<view class="_flkey-bar-btn">完成</view>
+			</view>
+		</view>
+		<view class="_flkey" v-show="mode != 'number'">
+			<view class="_flkey-h" v-show="!keyInputSkin && mode == 'car'">
+				<view class="_flkey-row">
+					<view class="_flkey-i" :class="{'_flkey-noac':!provinceCP_}" :data-ac="provinceCP_" v-for="v in province.row_1" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+				</view>
+				<view class="_flkey-row">
+					<view class="_flkey-i" :class="{'_flkey-noac':!provinceCP_}" :data-ac="provinceCP_" v-for="v in province.row_2" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+				</view>
+				<view class="_flkey-row">
+					<view class="_flkey-i" :class="{'_flkey-noac':!provinceCP_}" :data-ac="provinceCP_" v-for="v in province.row_3" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+				</view>
+				<view class="_flkey-row">
+					<view class="_flkey-i" :class="{'_flkey-noac':!provinceCP_}" :data-ac="provinceCP_" v-for="v in province.row_4" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+					<view class="_flkey-i" :class="{'_flkey-noac':!specialCP_}" :data-ac="specialCP_" v-for="v in province.row_5" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="_flkey-h" v-show="!keyInputSkin && mode == 'keyboard'">
+				<view class="_flkey-row">
+					<view class="_flkey-i" :class="{'_flkey-noac':!symbolCP_}" :data-ac="symbolCP_" v-for="v in symbol.row_1" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+				</view>
+				<view class="_flkey-row">
+					<view class="_flkey-i" :class="{'_flkey-noac':!symbolCP_}" :data-ac="symbolCP_" v-for="v in symbol.row_2" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+				</view>
+				<view class="_flkey-row">
+					<view class="_flkey-i" :class="{'_flkey-noac':!symbolCP_}" :data-ac="symbolCP_" v-for="v in symbol.row_3" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="_flkey-n" v-show="keyInputSkin">
+				<view class="_flkey-row">
+					<view class="_flkey-i" :class="{'_flkey-noac':!numCp_}" :data-ac="numCp_" v-for="v in number" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+				</view>
+				<view class="_flkey-row">
+					<view class="_flkey-i" :class="{'_flkey-noac':!letterCp_}" :data-ac="letterCp_" v-for="v in letter.row_1" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+				</view>
+				<view class="_flkey-row">
+					<view class="_flkey-i" :class="{'_flkey-noac':!letterCp_}" :data-ac="letterCp_" v-for="v in letter.row_2" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+				</view>
+				<view class="_flkey-row">
+					<view class="_flkey-i" :class="{'_flkey-noac':!letterCp_}" :data-ac="letterCp_" v-for="v in letter.row_3" :key="v" :data-v="v" @tap="_keyInput" hover-class="_float-hover-c">
+						<view class="_flkey-i-b">
+							{{v}}
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="_flkey-tool">
+				<view class="_flkey-tool-i tool-i-a" :class="{'_flkey-noac':!swCp_}" @tap="_keyInputSw" hover-class="_float-hover-c">
+					<view class="_flkey-tool-i-b">{{keyInputSkin?swTxtCp_[0]:swTxtCp_[1]}}</view>
+				</view>
+				<view class="_flkey-tool-i tool-i-del" @tap="_keyInputDel" hover-class="_float-hover-c">
+					<view class="_flkey-tool-i-b">删除</view>
+				</view>
+			</view>
+		</view>
+		<view class="_flkey-number" v-show="mode == 'number'">
+			<view class="_flkey-number-row">
+				<view class="_flkey-number-row-i" data-v="1" :class="{'_flkey-noac':!digitCp_}" :data-ac="digitCp_" @tap="_keyInput" hover-class="_float-hover-c">1</view>
+				<view class="_flkey-number-row-i" data-v="2" :class="{'_flkey-noac':!digitCp_}" :data-ac="digitCp_" @tap="_keyInput" hover-class="_float-hover-c">2</view>
+				<view class="_flkey-number-row-i" data-v="3" :class="{'_flkey-noac':!digitCp_}" :data-ac="digitCp_" @tap="_keyInput" hover-class="_float-hover-c">3</view>
+			</view>
+			<view class="_flkey-number-row">
+				<view class="_flkey-number-row-i" data-v="4" :class="{'_flkey-noac':!digitCp_}" :data-ac="digitCp_" @tap="_keyInput" hover-class="_float-hover-c">4</view>
+				<view class="_flkey-number-row-i" data-v="5" :class="{'_flkey-noac':!digitCp_}" :data-ac="digitCp_" @tap="_keyInput" hover-class="_float-hover-c">5</view>
+				<view class="_flkey-number-row-i" data-v="6" :class="{'_flkey-noac':!digitCp_}" :data-ac="digitCp_" @tap="_keyInput" hover-class="_float-hover-c">6</view>
+			</view>
+			<view class="_flkey-number-row">
+				<view class="_flkey-number-row-i" data-v="7" :class="{'_flkey-noac':!digitCp_}" :data-ac="digitCp_" @tap="_keyInput" hover-class="_float-hover-c">7</view>
+				<view class="_flkey-number-row-i" data-v="8" :class="{'_flkey-noac':!digitCp_}" :data-ac="digitCp_" @tap="_keyInput" hover-class="_float-hover-c">8</view>
+				<view class="_flkey-number-row-i" data-v="9" :class="{'_flkey-noac':!digitCp_}" :data-ac="digitCp_" @tap="_keyInput" hover-class="_float-hover-c">9</view>
+			</view>
+			<view class="_flkey-number-row">
+				<view class="_flkey-number-row-i _number-tool" data-v="." :class="{'_flkey-noac':!dotCp_}" :data-ac="dotCp_" @tap="_keyInput" hover-class="_float-hover-c">.</view>
+				<view class="_flkey-number-row-i" data-v="0" :class="{'_flkey-noac':!digitCp_}" :data-ac="digitCp_" @tap="_keyInput" hover-class="_float-hover-c">0</view>
+				<view class="_flkey-number-row-i _number-tool" hover-class="_float-hover-c" @tap="_keyInputDel">删除</view>
+			</view>
+		</view>
+		<view class="_flkey-bot">
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	name: "tki-float-keyboard",
+	props: {
+		'title': {
+			type: [String],
+			default: '',
+		},
+		'type': {
+			type: [Number, String],
+			default: 0,
+		},
+		'mode': {
+			type: [String],
+			default: 'keyboard', // keyboard 普通键盘 car 汽车键盘 number 数字键盘
+		}
+	},
+	data() {
+		return {
+			isUp: false, // 是否是大写
+			swTxt: true, // 键盘切换按钮是否可用
+			keyShow: false,
+			keyShowAni: true, // true 进入 false 隐藏
+			keyInputSkin: true, // true 显示 字母和数字  false 显示汉子
+			symbol: {
+				row_1: ['+', '-', '*', '/', '=', '^', '<', '>', '(', ')'],
+				row_2: ['?', '!', '@', '#', '$', '&', ',', '.', '[', ']'],
+				row_3: [':', ';', '\'', '"', '_', '~', '…'],
+			},
+			province: {
+				row_1: ["京", "津", "沪", "渝", "蒙", "新", "藏", "宁", "桂", "黑"],
+				row_2: ["吉", "辽", "晋", "冀", "青", "鲁", "豫", "苏", "皖", "浙"],
+				row_3: ["闽", "赣", "湘", "鄂", "粤", "琼", "甘", "陕", "云", "贵"],
+				row_4: ["川"],
+				row_5: ["港", "澳", "学", "警", "领", "使"],
+			},
+			number: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
+			letter: {
+				row_1: ["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P"],
+				row_2: ["A", "S", "D", "F", "G", "H", "J", "K", "L"],
+				row_3: ["Z", "X", "C", "V", "B", "N", "M"],
+			},
+			symbolCP_: true,
+			provinceCP_: true,
+			specialCP_: true,
+			numCp_: true,
+			letterCp_: true,
+			digitCp_: true,
+			dotCp_: true,
+			swCp_: true,
+			swTxtCp_: ['省', 'ABC'],
+		}
+	},
+	methods: {
+		_keyInit() {
+			if (this.mode == 'keyboard') {
+				this.isUp = true
+				this._keyTypeWacth(this.keyType)
+				this._keySwUp()
+			}
+			if (this.mode == 'car') {
+				this.isUp = false
+				this._carTypeWacth(this.carType)
+				this._keySwUp()
+			}
+			if (this.mode == 'number') {
+				this._numberTypeWacth(this.numberType)
+			}
+		},
+		_keySwUp(t) {
+			if (this.mode != 'number' && this.keyInputSkin) {
+				// 大小写切换
+				for (const key in this.letter) {
+					if (this.letter.hasOwnProperty(key)) {
+						for (let index = 0; index < this.letter[key].length; index++) {
+							if (!this.isUp) {
+								let tp = this.letter[key][index].toUpperCase()
+								this.letter[key][index] = tp
+							} else {
+								let tp = this.letter[key][index].toLowerCase()
+								this.letter[key][index] = tp
+							}
+						}
+					}
+				}
+				this.isUp = !this.isUp
+			}
+		},
+		_keyInput(e) {
+			let d = e.currentTarget.dataset
+			if (d.ac) {
+				this.$emit('val', String(d.v))
+			}
+		},
+		_keyInputDel() {
+			this.$emit('del', true)
+		},
+		_keyInputSw() {
+			let that = this;
+			if (that.swCp_) {
+				that.keyInputSkin = !that.keyInputSkin
+			}
+		},
+		_keyShow() {
+			let that = this
+			uni.hideKeyboard()
+			that.keyShow = true
+			that.keyShowAni = true
+			setTimeout(() => {
+				uni.createSelectorQuery().in(that).select('._flkey-body').boundingClientRect(function (rect) {
+					that.$emit('show', rect)
+				}).exec()
+			}, 150);
+		},
+		_keyHide() {
+			let that = this
+			that.keyShowAni = false
+			setTimeout(() => {
+				that.$emit('hide', true)
+				that.keyShow = false
+			}, 166);
+		},
+		_carTypeWacth(n) {
+			let v = Number(n)
+			// 0 全部
+			// 1 字母加数字
+			// 2 省
+			// 3 字母加数字加特
+			// 4 字母
+			// 5 数字
+			switch (v) {
+				case 0:
+					this.provinceCP_ = true
+					this.specialCP_ = true
+					this.numCp_ = true
+					this.letterCp_ = true
+					this.swCp_ = true
+					this.swTxtCp_ = ['省', 'ABC']
+					this.keyInputSkin = true
+					break;
+				case 1:
+					this.provinceCP_ = false
+					this.specialCP_ = false
+					this.numCp_ = true
+					this.letterCp_ = true
+					this.swCp_ = false
+					this.swTxtCp_ = ['省', 'ABC']
+					this.keyInputSkin = true
+					break;
+				case 2:
+					this.provinceCP_ = true
+					this.specialCP_ = false
+					this.numCp_ = false
+					this.letterCp_ = false
+					this.swCp_ = false
+					this.swTxtCp_ = ['省', 'ABC']
+					this.keyInputSkin = false
+					break;
+				case 3:
+					this.provinceCP_ = false
+					this.specialCP_ = true
+					this.numCp_ = true
+					this.letterCp_ = true
+					this.swCp_ = true
+					this.swTxtCp_ = ['特', 'ABC']
+					this.keyInputSkin = true
+					break;
+				case 4:
+					this.provinceCP_ = false
+					this.specialCP_ = false
+					this.numCp_ = false
+					this.letterCp_ = true
+					this.swCp_ = false
+					this.swTxtCp_ = ['省', 'ABC']
+					this.keyInputSkin = true
+					break;
+				case 5:
+					this.provinceCP_ = false
+					this.specialCP_ = false
+					this.numCp_ = true
+					this.letterCp_ = false
+					this.swCp_ = false
+					this.swTxtCp_ = ['省', 'ABC']
+					this.keyInputSkin = true
+					break;
+				default:
+					this.provinceCP_ = true
+					this.specialCP_ = true
+					this.numCp_ = true
+					this.letterCp_ = true
+					this.swCp_ = true
+					this.swTxtCp_ = ['省', 'ABC']
+					this.keyInputSkin = true
+					break;
+			}
+		},
+		_keyTypeWacth(n) {
+			let v = Number(n)
+			// 0 全部
+			// 1 字母加数字
+			// 2 符号
+			// 3 字母
+			// 4 数字
+			// 5 字母加符号
+			// 6 数字加符号
+			switch (v) {
+				case 0:
+					this.symbolCP_ = true
+					this.numCp_ = true
+					this.letterCp_ = true
+					this.swCp_ = true
+					this.swTxtCp_ = ['符', 'ABC']
+					this.keyInputSkin = true
+					break;
+				case 1:
+					this.symbolCP_ = false
+					this.numCp_ = true
+					this.letterCp_ = true
+					this.swCp_ = false
+					this.swTxtCp_ = ['符', 'ABC']
+					this.keyInputSkin = true
+					break;
+				case 2:
+					this.symbolCP_ = true
+					this.numCp_ = false
+					this.letterCp_ = false
+					this.swCp_ = false
+					this.swTxtCp_ = ['符', 'ABC']
+					this.keyInputSkin = false
+					break;
+				case 3:
+					this.symbolCP_ = false
+					this.numCp_ = false
+					this.letterCp_ = true
+					this.swCp_ = false
+					this.swTxtCp_ = ['符', 'ABC']
+					this.keyInputSkin = true
+					break;
+				case 4:
+					this.symbolCP_ = false
+					this.numCp_ = true
+					this.letterCp_ = false
+					this.swCp_ = false
+					this.swTxtCp_ = ['符', 'ABC']
+					this.keyInputSkin = true
+					break;
+				case 5:
+					this.symbolCP_ = true
+					this.numCp_ = false
+					this.letterCp_ = true
+					this.swCp_ = true
+					this.swTxtCp_ = ['符', 'ABC']
+					this.keyInputSkin = true
+					break;
+				case 6:
+					this.symbolCP_ = true
+					this.numCp_ = true
+					this.letterCp_ = false
+					this.swCp_ = true
+					this.swTxtCp_ = ['符', 'ABC']
+					this.keyInputSkin = true
+					break;
+				default:
+					this.symbolCP_ = true
+					this.numCp_ = true
+					this.letterCp_ = true
+					this.swCp_ = true
+					this.swTxtCp_ = ['符', 'ABC']
+					this.keyInputSkin = true
+					break;
+			}
+		},
+		_numberTypeWacth(n) {
+			let v = Number(n)
+			// 0 全部
+			// 1 禁用.
+			switch (v) {
+				case 0:
+					this.digitCp_ = true
+					this.dotCp_ = true
+					break;
+				case 1:
+					this.digitCp_ = true
+					this.dotCp_ = false
+					break;
+				default:
+					this.digitCp_ = true
+					this.dotCp_ = true
+					break;
+			}
+		}
+	},
+	computed: {
+	},
+	watch: {
+		type(n, o) {
+			if (this.mode == 'car') {
+				this._carTypeWacth(n)
+			}
+			if (this.mode == 'keyboard') {
+				this._keyTypeWacth(n)
+			}
+			if (this.mode == 'number') {
+				this._numberTypeWacth(n)
+			}
+		},
+		mode(n, o) {
+			if (n != o) {
+				this._keyInit()
+			}
+		}
+	},
+	created() {
+		this._keyInit()
+	},
+}
+</script>
+
+<style>
+@import "style.css";
+</style>

+ 301 - 83
property_ui/work/pages/manage/addcar.vue

@@ -1,6 +1,6 @@
 <template>
 	<view class="check">
-		<view class="cbox">
+		<view class="cbox" @click="keyHide">
 			<view class="chtop flexc">
 				<view class="line"></view>
 				<view>车辆信息</view>
@@ -12,24 +12,36 @@
 						<image :src="cmico" class="addimg"></image>
 						<view>扫描行驶证自动填写</view>
 					</view>
+					<view class="tips mb22 mt5 cof4">请上传行驶证正面</view>
 					<view class="carcode">
 						<view class="tit mb16 lh18"><text class="cof4">*</text>车牌号码</view>
-						<view>需车牌插件</view>
+						<view class="carinput-input">
+							<view class="carinput-input-i" :class="{'input-active':carIndex == i}" @tap.stop="inputKey" :data-index="i" v-for="(v,i) in carInput" :key="i" v-if="i < 2">
+								{{carInput[i].val}}
+							</view>
+							<!-- 塞个点 -->
+							<view class="cir"></view>
+							<view class="carinput-input-i" :class="{'input-active':carIndex == i}" @tap.stop="inputKey" :data-index="i" v-for="(v,i) in carInput" :key="i" v-if="i < 7&&i>1">
+								{{carInput[i].val}}
+							</view>
+							<view class="carinput-input-i " :class="{'input-active':carIndex == 7}" @tap.stop="inputKey" data-index="7">
+								<block v-if="carInput[7].val">{{carInput[7].val}}</block>
+								<view v-else class="newtit flexccc">
+									<image :src="addnew"></image>
+									新能源
+								</view>
+								<!-- {{carInput[7].val?carInput[7].val:'+新能源'}} -->
+							</view>
+						</view>
 					</view>
-					<uni-forms-item label="车牌号" name="plateNumber">
-						<view class="flexc" @click.stop="">
+					<!-- <uni-forms-item label="车牌号" name="plateNumber">
+						<view class="flexc">
 							<uni-easyinput :disabled="isdisabled" v-model="datainfo.plateNumber" :inputBorder='false' placeholder="请输入车牌号" />
 							<view class="rimg"><image :src="rimg"></image></view>
 						</view>
-					</uni-forms-item>
-					<uni-forms-item label="姓名" name="userName">
-						<view class="flexc" @click.stop="">
-							<uni-easyinput :disabled="isdisabled" v-model="datainfo.userName" :inputBorder='false' placeholder="请输入姓名" />
-							<view class="rimg"><image :src="rimg"></image></view>
-						</view>
-					</uni-forms-item>
-					<uni-forms-item label="手机号" name="residentPhone">
-						<view class="flexc" @click.stop="">
+					</uni-forms-item> -->
+					<uni-forms-item label="手机号码" required name="residentPhone">
+						<view class="flexc" >
 							<uni-easyinput :disabled="isdisabled" v-model="datainfo.residentPhone" :inputBorder='false' placeholder="请输入手机号" />
 							<view class="rimg"><image :src="rimg"></image></view>
 						</view>
@@ -48,35 +60,32 @@
 							    >
 							    </w-select>
 						</uni-forms-item>
-					<uni-forms-item label="品牌车型" name="vehicleBrand">
-						<picker range-key='dictLabel' :disabled="isdisabled" :value="cllxidx" :range="cllxList"   @change='bindDateChange'>
-							<view class="flexc mh35">
-								<view class="flex1 txr f13 co27" v-if="datainfo.vehicleBrand&&!cllx">{{statusFormats(datainfo.vehicleBrand,cllxList,'cllx')}}</view>
-								<view class="flex1 txr f13" v-else :class="cllx?'co27':'coa'">{{cllx||"请选择品牌车型"}}</view>
+						<uni-forms-item label="品牌车型" name="vehicleBrand">
+							<view class="flexc">
+								<uni-easyinput :disabled="isdisabled" v-model="datainfo.vehicleBrand" :inputBorder='false' placeholder="请输入品牌车型" />
 								<view class="rimg"><image :src="rimg"></image></view>
 							</view>
-						</picker>
-					</uni-forms-item>
-					<!-- <uni-forms-item label="车辆类型" name="vehicleType">
+						</uni-forms-item>
+					<uni-forms-item label="车辆类型" name="vehicleType">
 						<view class="flexc" @click.stop="">
 							<uni-easyinput :disabled="isdisabled" v-model="datainfo.vehicleType" :inputBorder='false' placeholder="请输入车辆类型" />
 							<view class="rimg"><image :src="rimg"></image></view>
 						</view>
-					</uni-forms-item> -->
+					</uni-forms-item>
 					<uni-forms-item label="车辆颜色" name="vehicleColour">
-						<view class="flexc" @click.stop="">
+						<view class="flexc">
 							<uni-easyinput :disabled="isdisabled" v-model="datainfo.vehicleColour" :inputBorder='false' placeholder="请输入车辆颜色" />
 							<view class="rimg"><image :src="rimg"></image></view>
 						</view>
 					</uni-forms-item>
 					<uni-forms-item label="发动机编号" name="engineNumber">
-						<view class="flexc" @click.stop="">
+						<view class="flexc">
 							<uni-easyinput :disabled="isdisabled" v-model="datainfo.engineNumber" :inputBorder='false' placeholder="请输入发动机编号" />
 							<view class="rimg"><image :src="rimg"></image></view>
 						</view>
 					</uni-forms-item>
 					<uni-forms-item label="车辆识别代号" name="identificationNumber">
-						<view class="flexc" @click.stop="">
+						<view class="flexc">
 							<uni-easyinput :disabled="isdisabled" v-model="datainfo.identificationNumber" :inputBorder='false' placeholder="请输入车辆识别代号" />
 							<view class="rimg"><image :src="rimg"></image></view>
 						</view>
@@ -103,6 +112,7 @@
 				<!-- <view class="rhbtn mt30" @click="getNext">确定添加</view> -->
 			</view>
 		</view>
+		<tki-float-keyboard ref="keybd" :mode="'car'" :type="keyType" :title="'车牌键盘'" @del="keyCbDel" @val="keyCbVal" @hide="keyCbHide"></tki-float-keyboard>
 		<loading></loading>
 	</view>
 </template>
@@ -115,26 +125,51 @@
 	import {houseInfolistNoPage} from "@/api/work/work.js"
 	import {carPut,carAdd,carDet} from "@/api/work/car.js"
 	import {getDictionaryFn} from "@/api/system/user.js"
+	import {getvehicleLicense} from "@/api/system/card.js"
+	import tkiFloatKeyboard from "@/work/components/tki-float-keyboard/tki-float-keyboard.vue";
 	export default{
-		components:{wSelect},
+		components:{wSelect,tkiFloatKeyboard},
 		data(){
 			return{
 				rimg: require('@/work/static/house/rimg.png'),
 				cmico:require('@/work/static/house/cmico.png'),
 				upimg:require('@/work/static/house/up.png'),
+				addnew:require('@/work/static/house/add.png'),
+				carIndex: -1,
+				carInput: [
+					{ type: 2, val: "皖" },
+					{ type: 4, val: "A" },
+					{ type: 1, val: "" },
+					{ type: 1, val: "" },
+					{ type: 1, val: "" },
+					{ type: 1, val: "" },
+					{ type: 3, val: "" },
+					{ type: 1, val: "" }
+				],
+				keyType: 0,
+				isPower: false, // 新能源
+				rimg: require('@/mine/static/house/rimg.png'),
+				cmico:require('@/mine/static/house/cmico.png'),
+				upimg:require('@/mine/static/house/up.png'),
+				addnew:require('@/mine/static/house/add.png'),
 				baseUrl:config.baseUrl,
 				datainfo:{
 					// "carId":"",//业主车辆主键
 					"houseId":"",//房屋信息id
 					"detailedAddress":"",//房屋的详细门牌号
-					"userId":"",//用户id
+					// "userId":"",//用户id
 					"residentId":"",//居住人员表id
-					"userName":"",//业主姓名
+					// "userName":"",//业主姓名
 					"residentPhone":"",//业主手机号
 					"plateNumber":"",//车牌号码
 					"vehicleBrand":"",//车辆车型
-					// "vehicleType":"",//车辆类型
+					"vehicleType":"",//车辆类型
+					"engineNumber":"",//发动机编号
+					"identificationNumber":"",//车辆识别代号
+					"registrationDate":"",//注册日期
+					"issueDate":"",//发证日期
 				},
+				// vehicleEnergy 	车辆能源类型 燃油 新能源
 				zhanfalg:true,
 				syqxidx:'',
 				filterable:true,
@@ -144,9 +179,7 @@
 				rules:{
 					houseId: {rules: [{required: true,errorMessage: '请选择居住门户' }]},
 					detailedAddress: {rules: [{required: true,errorMessage: '请输入居住地址' }]},
-					// name: {rules: [{required: true,errorMessage: '请输入访客姓名' }]},
-				 //  portalId: {rules: [{required: true,errorMessage: '请选择来访门户' }]},
-				  residentPhone: {rules: [{required: true,errorMessage: '请输入手机号'}, {pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,errorMessage:'请输入正确的手机号码'}]},
+					residentPhone: {rules: [{required: true,errorMessage: '请输入手机号'}, {pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,errorMessage:'请输入正确的手机号码'}]},
 				  },
 				cllx:"",
 				cllxidx:0,
@@ -154,6 +187,8 @@
 				id:'',
 				isdisabled:false,
 				ptype:'add',
+				userId:this.$store.state.user.userId,
+				phonenumber:this.$store.state.user.phonenumber,
 			}
 		},
 		onLoad: function(e) {
@@ -164,6 +199,7 @@
 				this.getDetail()
 			}
 			this.init()
+			
 		},
 		methods:{
 			checkPermi, checkRole,
@@ -183,7 +219,10 @@
 			},
 			init(){
 				// 自己的房屋
-				houseInfolistNoPage().then(res=>{
+				var params={
+					userId:this.userId
+				}
+				houseInfolistNoPage(params).then(res=>{
 					if(res.code==200){
 						this.fwlist= res.rows.map(v => {
 							return {
@@ -194,17 +233,17 @@
 						})
 					}
 				})
-				// 车辆类型
-				getDictionaryFn('cartype').then(res=>{
-					if(res.code==200){
-						this.cllxList = res.data.map(v => {
-							return {
-								dictLabel: v.dictLabel,
-								dictValue: v.dictValue
-							}
-						})
-					}
-				})
+				// // 车辆类型
+				// getDictionaryFn('cartype').then(res=>{
+				// 	if(res.code==200){
+				// 		this.cllxList = res.data.map(v => {
+				// 			return {
+				// 				dictLabel: v.dictLabel,
+				// 				dictValue: v.dictValue
+				// 			}
+				// 		})
+				// 	}
+				// })
 			},
 			bindDateChange(e){
 				var val=e.detail.value;
@@ -214,25 +253,24 @@
 			getDetail(){
 				carDet(this.id).then(res=>{
 					if(res.code==200){
-						this.datainfo=res.data
+						this.datainfo=res.data;
+						if(res.data.plateNumber){
+							this.toCarCode(res.data.plateNumber)
+							if(res.data.vehicleEnergy=='新能源'){
+								this.isPower=true;
+							}
+						}
 					}
 				})
 			},
 			getSubmit(){
+				var num=this.toBind()
+				if(num=='-1'){
+					this.$toast('请输入完整的车牌号')
+					return
+				}
 				this.$refs.form.validate().then(res => {
 					var params=JSON.parse(JSON.stringify(this.datainfo))
-					// if(!params.portalId){
-					// 	this.$toast("请选择来访门户")
-					// 	return
-					// }
-					// if(params.isCar=='Y'&&!params.plateNumber){
-					// 	this.$toast("请输入车牌号")
-					// 	return
-					// }
-					// if(!params.visitorTime){
-					// 	this.$toast("请选择来访时间")
-					// 	return
-					// }
 					if(this.ptype=='add'){
 						carAdd(params).then(res=>{
 							if(res.code==200){
@@ -262,16 +300,6 @@
 			},
 			getaddImage(e){
 				let that = this;
-				// var rs=['D:\\idcard.png']
-				// if(rs&&rs.length>0){
-				// 	var obj={
-				// 		type:e,
-				// 		// url:baseUrl+rs.join(',')
-				// 		url:rs.join(',')
-				// 	}
-				// 	that.getOcrIdCard(obj)
-				// }
-				// return
 				let file =[],count=9
 				uni.chooseImage({
 					count: 1,
@@ -288,14 +316,13 @@
 							var fuwufile = [];
 							uploadIdentify('/common/upload',img,0,0,0,imglen,fuwufile,function(rs){
 								var resurl=rs[0];
-								if(e=='front'){
-									that.datainfo.front=resurl.fileName;
-								}else{
-									that.datainfo.back=resurl.fileName;
-								}
+								// if(e=='front'){
+								// 	that.datainfo.front=resurl.fileName;
+								// }else{
+								// 	that.datainfo.back=resurl.fileName;
+								// }
 								if(rs&&rs.length>0){
 									var obj={
-										type:e,
 										url:resurl.urlOnline
 									}
 									that.getOcrIdCard(obj)
@@ -308,20 +335,195 @@
 			getOcrIdCard(obj){
 				var params={
 					image:obj.url,
-					idCardSide:obj.type
 				}
-				getOcrIdCard(params).then(res=>{
+				getvehicleLicense(params).then(res=>{
 					if(res.code==200){
 						var datainfo=res.data;
-						if(obj.type=='front'){
-							this.datainfo.realName=datainfo.realName;
-							this.datainfo.idCard=datainfo.idCard;
-							this.datainfo.address=datainfo.address;
-						}else{
-							this.datainfo.expirationDate=datainfo.expirationDate
-						}
+						this.datainfo.vehicleBrand=datainfo.vehicleBrand;
+						this.datainfo.vehicleType=datainfo.vehicleType;
+						this.datainfo.engineNumber=datainfo.engineNumber;
+						this.datainfo.identificationNumber=datainfo.identificationNumber;
+						var zcrq=datainfo.registrationDate;
+						var fzrq=datainfo.issueDate;
+						this.datainfo.registrationDate=`${zcrq.slice(0, 4)}-${zcrq.slice(4, 6)}-${zcrq.slice(6, 8)}`;
+						this.datainfo.issueDate=`${fzrq.slice(0, 4)}-${fzrq.slice(4, 6)}-${fzrq.slice(6, 8)}`;
+						this.datainfo.plateNumber=datainfo.plateNumber;
+						this.toCarCode(datainfo.plateNumber)
 					}
 				})
+			},
+			// 车牌
+			// 判定是否为空
+			empty(v) {
+				let tp = typeof v,
+					rt = false;
+				if (tp == "number" && String(v) == "") {
+					rt = true
+				} else if (tp == "undefined") {
+					rt = true
+				} else if (tp == "object") {
+					if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true
+				} else if (tp == "string") {
+					if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true
+				} else if (tp == "function") {
+					rt = false
+				}
+				return rt
+			},
+			inputKey(e) {
+				let that = this;
+				let data = e.currentTarget.dataset;
+				that.carIndex = data.index;
+				if (data.index >= 7) {
+					that.isPower=true;
+					that.carIndex = 7;
+					// if (!that.isPower) {
+					// 	return false;
+					// } else {
+					// 	that.carIndex = 7;
+					// }
+				} else {
+					that.carIndex = data.index;
+				}
+				that.upKeyType();
+				that.keyShow();
+			},
+			keyCbVal(e) {
+				let that = this;
+				let index = Number(that.carIndex);
+				if (index >= 0 && index < 6) {
+					that.carInput[index].val = e;
+					that.carIndex = index + 1;
+				} else if (index == 6) {
+					that.carInput[index].val = e;
+					if (that.isPower) {
+						// 新能源
+						that.carIndex = 7;
+					} else {
+						// 不是新能源出输入结束
+						that.keyHide();
+						that.carIndex = -2;
+						console.log('非新能源车输入完毕')
+					}
+				} else if (index == 7) {
+					// 新能源车输入完毕
+					that.carInput[index].val = e;
+					that.keyHide();
+					that.carIndex = -3;
+					console.log('新能源车输入完毕')
+				}
+				that.upKeyType();
+			},
+			keyCbDel(e) {
+				let index = this.carIndex;
+				console.log(index,1)
+				if (index > 0) {
+					if (!this.empty(this.carInput[index].val)) {
+						this.carInput[index].val = "";
+						this.carIndex = index;
+					} else {
+						this.carInput[index - 1].val = "";
+						this.carIndex = index - 1;
+					}
+					if(index==7){
+						var obj={ type: 1, val: "" }
+						this.carInput.splice(index,1,obj)
+						this.isPower=false;
+					}
+					console.log(this.carInput)
+				}
+				this.upKeyType();
+			},
+			upKeyType() {
+				if (!this.empty(this.carInput[this.carIndex])) {
+					this.keyType = this.carInput[this.carIndex].type;
+				}
+			},
+			keyShow() {
+				this.$refs.keybd._keyShow();
+			},
+			keyHide() {
+				this.$refs.keybd._keyHide();
+			},
+			keyCbHide() {
+				if (this.carIndex != -3 || this.carIndex != -2) {
+					this.carIndex = -1;
+				}
+			},
+			powerChange(e) {
+				let that = this
+				let i = that.checkCar().i
+				if (e.detail.value.length > 0) {
+					that.isPower = true;
+					if (i == -1) {
+						that.carIndex = 7;
+					} else {
+						that.carIndex = i;
+					}
+					that.keyShow();
+				} else {
+					that.isPower = false;
+					that.carInput[7].val = "";
+					if (that.carIndex == 7) {
+						that.keyHide();
+						that.carIndex = -2;
+					}
+				}
+				that.upKeyType();
+			},
+			checkCar() {
+				// 检查车牌是否输入完成
+				let that = this;
+				let i = 7;
+				let rt = { i: -1, isempty: false, val: "" };
+				if (that.isPower) {
+					i = 8;
+				}
+				for (let index = 0; index < i; index++) {
+					const obj = that.carInput[index];
+					if (this.empty(String(obj.val))) {
+						rt.i = index;
+						rt.isempty = true;
+						rt.val = "";
+						break;
+					}
+					rt.val += that.carInput[index].val;
+				}
+				return rt;
+			},
+			toBind() {
+				let that = this
+				let ck = that.checkCar();
+				if (ck.i == -1 && !ck.isempty) {
+					this.datainfo.plateNumber=ck.val;
+					if(this.isPower){
+						this.datainfo.vehicleEnergy='新能源'
+					}else{
+						this.datainfo.vehicleEnergy='燃油车'
+					}
+					return ck.val
+				} else {
+					// 显示键盘输入
+					// that.keyShow();
+					// that.carIndex = ck.i;
+					// that.keyType = that.carInput[ck.i].type;
+					return '-1'
+				}
+			},
+			//分解车牌
+			toCarCode(code){
+				var list=JSON.parse(JSON.stringify(this.carInput))
+				var newArr=[]
+				if(code){
+					newArr=code.split('')
+				}
+				list.forEach((ite,idx)=>{
+					ite.val=newArr[idx]
+				})
+				if(newArr.length==8){
+					this.isPower=true;
+				}
+				this.carInput=JSON.parse(JSON.stringify(list))
 			}
 		}
 	}
@@ -330,6 +532,22 @@
 	page{background: #F3F3F0;}
 </style>
 <style lang="scss" scoped>
+// 车牌
+.carinput {margin-top: 74rpx;display: flex;flex-direction: column;padding-left: 40rpx;padding-right: 40rpx}
+.carinput-input{display: flex;justify-content: center;padding-bottom: 40rpx;border-bottom: 2rpx solid #CDCDCD;align-items: center;
+	.input-active {color: #0256FD;border: 2rpx solid #0256FD;}
+	.cir{width: 14rpx;height: 14rpx;background: #8D8D8D;border-radius: 50%;margin-right: 18rpx;}
+}
+	
+.carinput-input-i{width: 62rpx;height: 88rpx;background: #F5F4F7;border-radius: 10rpx;font-weight: bold;font-size: 30rpx;color: #272727;margin-right: 18rpx;text-align: center;box-sizing: border-box;display: flex;flex-direction: column;align-items: center;justify-content: center;
+	.newtit{
+		font-weight: bold;font-size: 16rpx;color: #0256FD;
+		image{width: 28rpx;height: 28rpx;margin-bottom: 4rpx;}
+	}
+}
+.check /deep/ .uni-date-editor--x__disabled{opacity: 1;}
+.carinput-input-i:nth-last-child(1) {margin-right: 0}
+.check /deep/ .uni-forms-item__label .is-required{width: auto;}
 .coa /deep/ .uni-date__x-input{text-align: right;color: #AAAAAA;}
 .check /deep/ .select-wrap{border: none;width: 100%;}
 .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;}
@@ -349,7 +567,7 @@
 	}
 	.chmain{
 		padding: 0 24rpx;
-		.upbox{height: 224rpx;background: #EFF4FF;border-radius: 20rpx;display: flex;align-items: center;justify-content: center;flex-direction: column;margin-bottom: 44rpx;overflow: auto;
+		.upbox{height: 224rpx;background: #EFF4FF;border-radius: 20rpx;display: flex;align-items: center;justify-content: center;flex-direction: column;overflow: auto;
 			.img{width: 100%;height: 100%;}
 			.addimg{width: 90rpx;height: 90rpx;margin-bottom: 8rpx;}
 			view{font-weight: bold;font-size: 26rpx;color: #4C6686;}

+ 30 - 42
property_ui/work/pages/manage/addhouse.vue

@@ -192,6 +192,7 @@
 	import {uploadIdentify,selectValueKey,geocodeAddress} from '@/utils/common.js'
 	import {getDictionaryFn} from "@/api/system/user.js"
 	import {houseInfoAdd,houseInfoPut,houseInfoDet} from "@/api/work/work.js"
+	import {getrealEstateCertificatee} from "@/api/system/card.js"
 	var key='';
 	// #ifdef H5
 	key='8de52b560193f01932ad997dba3e76c0'
@@ -261,6 +262,14 @@
 			}
 			this.init()
 		},
+		onPageScroll(e) {
+			var scrollTop = Number(e.scrollTop);
+			if (scrollTop > 0) {
+				this.backgroundColor = '#45CB99'
+			} else {
+				this.backgroundColor = 'transparent'
+			}
+		},
 		methods:{
 			checkPermi, checkRole,
 			getEditFn(){
@@ -363,25 +372,6 @@
 			getSubmit(){
 				this.$refs.form.validate().then(res => {
 					var params=JSON.parse(JSON.stringify(this.datainfo))
-					// if(!params.portalId){
-					// 	this.$toast("请选择来访门户")
-					// 	return
-					// }
-					// if(params.isCar=='Y'&&!params.plateNumber){
-					// 	this.$toast("请输入车牌号")
-					// 	return
-					// }
-					// if(!params.visitorTime){
-					// 	this.$toast("请选择来访时间")
-					// 	return
-					// }
-					// if(params.location){
-					// 	var pobj=this.getLocation(params.location)
-					// 	console.log(pobj)
-					// 	params.lgt=longitude;
-					// 	params.lat=latitude;
-
-					// }
 					if(this.ptype=='add'){
 						houseInfoAdd(params).then(res=>{
 							if(res.code==200){
@@ -426,19 +416,14 @@
 							let imglen = res.tempFilePaths.length;
 							var fuwufile = [];
 							uploadIdentify('/common/upload',img,0,0,0,imglen,fuwufile,function(rs){
-								// var resurl=rs[0];
-								// if(e=='front'){
-								// 	that.datainfo.front=resurl.fileName;
-								// }else{
-								// 	that.datainfo.back=resurl.fileName;
-								// }
-								// if(rs&&rs.length>0){
-								// 	var obj={
-								// 		type:e,
-								// 		url:resurl.urlOnline
-								// 	}
-								// 	that.getOcrIdCard(obj)
-								// }
+								var resurl=rs[0];
+								if(rs&&rs.length>0){
+									var obj={
+										type:e,
+										url:resurl.urlOnline
+									}
+									that.getOcrIdCard(obj)
+								}
 							})	
 						}
 					}
@@ -446,19 +431,22 @@
 			},
 			getOcrIdCard(obj){
 				var params={
-					image:obj.url,
-					idCardSide:obj.type
+					image:obj.url
 				}
-				getOcrIdCard(params).then(res=>{
+				getrealEstateCertificatee(params).then(res=>{
 					if(res.code==200){
 						var datainfo=res.data;
-						if(obj.type=='front'){
-							this.datainfo.realName=datainfo.realName;
-							this.datainfo.idCard=datainfo.idCard;
-							this.datainfo.address=datainfo.address;
-						}else{
-							this.datainfo.expirationDate=datainfo.expirationDate
-						}
+						this.datainfo.ownerName=datainfo.ownerName;
+						this.datainfo.location=datainfo.location;
+						this.datainfo.rightType=datainfo.rightType;
+						this.datainfo.area=datainfo.area;
+						this.datainfo.documentNumber=datainfo.documentNumber;
+						this.datainfo.propertyUnitNumber=datainfo.propertyUnitNumber;
+						this.datainfo.coOwnership=datainfo.coOwnership;
+						this.datainfo.usageType=datainfo.usageType;
+						this.datainfo.usagePeriod=datainfo.usagePeriod;
+						this.datainfo.registrationDate=datainfo.registrationDate;
+						this.datainfo.coOwner=datainfo.coOwner;
 					}
 				})
 			},

+ 5 - 2
property_ui/work/pages/manage/car.vue

@@ -27,16 +27,18 @@
 				pageNum: 1,
 				reachflag: true,
 				wtdt:'',
-				clcxList:[]
+				clcxList:[],
+				houseId:'',
 			}
 		},
 		onUnload() {
 			uni.$off('carlist')
 		},
-		onLoad: function() {
+		onLoad: function(e) {
 			uni.$on('carlist',(res)=>{
 				this.getDataFn()
 			})
+			this.houseId=e.id
 			this.init()
 			this.getDataFn()
 		},
@@ -86,6 +88,7 @@
 				var params={
 					pageSize:this.pageSize,
 					pageNum: this.pageNum,
+					houseId:this.houseId,
 				}
 				carList(params).then(res=>{
 					if(res.code==200){

+ 7 - 3
property_ui/work/pages/manage/house.vue

@@ -61,7 +61,7 @@
 		onUnload() {
 			uni.$off('refHouseList')
 		},
-		onLoad: function() {
+		onLoad: function(e) {
 			uni.$on('refHouseList',(res)=>{
 				this.getrefreshData()
 			})
@@ -108,7 +108,11 @@
 				this.$tab.navigateTo("/work/pages/manage/car?id="+e)
 			},
 			getJuzhu(e){
-				this.$tab.navigateTo("/people/pages/people/index?id="+e)
+				var data={
+					id:e,
+					type:"house"
+				}
+				this.$tab.navigateTo("/people/pages/people/index?data="+encodeURIComponent(JSON.stringify(data)))
 			},
 			getTabFn(val){
 				this.tabval=val;
@@ -141,7 +145,7 @@
 					params.houseStatus=this.tabval
 				}
 				if(this.text){
-					params.propertyUnitNumber=this.text
+					params.detailedAddress=this.text
 				}
 				houseInfoList(params).then(res=>{
 					if(res.code==200){

+ 0 - 0
property_ui/work/static/house/icon_tjcl_tjxny.png → property_ui/work/static/house/add.png


部分文件因文件數量過多而無法顯示