zouling 4 mesiacov pred
rodič
commit
500bcc0c3c
90 zmenil súbory, kde vykonal 5386 pridanie a 58 odobranie
  1. 235 0
      property_ui/components/loading/loading.vue
  2. 39 0
      property_ui/components/nodata/nodata.vue
  3. 18 0
      property_ui/main.js
  4. 9 8
      property_ui/manifest.json
  5. 217 23
      property_ui/pages.json
  6. 51 15
      property_ui/pages/index.vue
  7. 88 0
      property_ui/pages/indexs.vue
  8. 2 2
      property_ui/pages/register.vue
  9. 5 5
      property_ui/pages/tlogin.vue
  10. 34 3
      property_ui/static/style.css
  11. 1 0
      property_ui/store/getters.js
  12. 10 0
      property_ui/store/modules/user.js
  13. 142 0
      property_ui/utils/common.js
  14. 10 1
      property_ui/utils/request.js
  15. 1 1
      property_ui/utils/upload.js
  16. 529 0
      property_ui/work/components/car/list.vue
  17. 223 0
      property_ui/work/components/popup/popup.vue
  18. 153 0
      property_ui/work/pages/car/carcheck.vue
  19. 138 0
      property_ui/work/pages/car/carku.vue
  20. 173 0
      property_ui/work/pages/car/illegalParking.vue
  21. 195 0
      property_ui/work/pages/car/illegalcheck.vue
  22. 172 0
      property_ui/work/pages/car/illegalrecord.vue
  23. 171 0
      property_ui/work/pages/car/index.vue
  24. 202 0
      property_ui/work/pages/manage/money.vue
  25. 160 0
      property_ui/work/pages/manage/moneybill.vue
  26. 93 0
      property_ui/work/pages/manage/moneydetail.vue
  27. 239 0
      property_ui/work/pages/people/comeadd.vue
  28. 158 0
      property_ui/work/pages/people/comegl.vue
  29. 151 0
      property_ui/work/pages/people/index.vue
  30. 152 0
      property_ui/work/pages/people/staff.vue
  31. 205 0
      property_ui/work/pages/people/staffadd.vue
  32. 161 0
      property_ui/work/pages/service/complaint.vue
  33. 187 0
      property_ui/work/pages/service/patrol.vue
  34. 235 0
      property_ui/work/pages/service/patroladd.vue
  35. 158 0
      property_ui/work/pages/service/patroldetail.vue
  36. 136 0
      property_ui/work/pages/service/patrolrecord.vue
  37. 169 0
      property_ui/work/pages/service/patrolset.vue
  38. 156 0
      property_ui/work/pages/service/warranty.vue
  39. 208 0
      property_ui/work/pages/service/warrantydetail.vue
  40. BIN
      property_ui/work/static/car/car.png
  41. BIN
      property_ui/work/static/car/cara.png
  42. BIN
      property_ui/work/static/car/carb.png
  43. BIN
      property_ui/work/static/car/carbg.png
  44. BIN
      property_ui/work/static/car/carc.png
  45. BIN
      property_ui/work/static/car/card.png
  46. BIN
      property_ui/work/static/car/carico.png
  47. BIN
      property_ui/work/static/car/del.png
  48. BIN
      property_ui/work/static/car/icoa.png
  49. BIN
      property_ui/work/static/car/icob.png
  50. BIN
      property_ui/work/static/car/line.png
  51. BIN
      property_ui/work/static/car/reset.png
  52. BIN
      property_ui/work/static/car/search.png
  53. BIN
      property_ui/work/static/car/up.png
  54. BIN
      property_ui/work/static/close.png
  55. BIN
      property_ui/work/static/manage/contbg.png
  56. BIN
      property_ui/work/static/manage/mbg.png
  57. BIN
      property_ui/work/static/manage/time.png
  58. BIN
      property_ui/work/static/nodata.png
  59. BIN
      property_ui/work/static/noiconp.png
  60. BIN
      property_ui/work/static/people/aphoto.png
  61. BIN
      property_ui/work/static/people/check.png
  62. BIN
      property_ui/work/static/people/gzlx.png
  63. BIN
      property_ui/work/static/people/hicoa.png
  64. BIN
      property_ui/work/static/people/hicob.png
  65. BIN
      property_ui/work/static/people/icon_tjfk_xbxz_normal.png
  66. BIN
      property_ui/work/static/people/icon_tjfk_xbxz_selected.png
  67. BIN
      property_ui/work/static/people/man.png
  68. BIN
      property_ui/work/static/people/mphone.png
  69. BIN
      property_ui/work/static/people/ncheck.png
  70. BIN
      property_ui/work/static/people/pdel.png
  71. BIN
      property_ui/work/static/people/rimg.png
  72. BIN
      property_ui/work/static/people/woman.png
  73. BIN
      property_ui/work/static/service/add.png
  74. BIN
      property_ui/work/static/service/addpho.png
  75. BIN
      property_ui/work/static/service/bxbg.png
  76. BIN
      property_ui/work/static/service/day.png
  77. BIN
      property_ui/work/static/service/del.png
  78. BIN
      property_ui/work/static/service/head.png
  79. BIN
      property_ui/work/static/service/headbg.png
  80. BIN
      property_ui/work/static/service/home.png
  81. BIN
      property_ui/work/static/service/linea.png
  82. BIN
      property_ui/work/static/service/lineb.png
  83. BIN
      property_ui/work/static/service/linec.png
  84. BIN
      property_ui/work/static/service/pbg.png
  85. BIN
      property_ui/work/static/service/phone.png
  86. BIN
      property_ui/work/static/service/photo.png
  87. BIN
      property_ui/work/static/service/plbg.png
  88. BIN
      property_ui/work/static/service/rdel.png
  89. BIN
      property_ui/work/static/service/type.png
  90. BIN
      property_ui/work/static/service/voice.png

+ 235 - 0
property_ui/components/loading/loading.vue

@@ -0,0 +1,235 @@
+<!-- <template>
+	<view>
+		
+		<view class="loading" v-if="is_loading">
+			
+			<image class="load_img" :src="waimai ? '../../../static/loading/loading2.gif' : '../../static/loading/loading2.gif'" mode=""></image>
+			
+		</view>
+		
+	</view>
+</template> -->
+
+<template>
+	<view class="" v-if="is_loading">
+		<view class="loader">
+				
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: ["waimai"],
+		data() {
+			return {
+				
+			}
+		},
+		methods:{
+			switch_loading(){
+				this.$store.commit("switch_loading")
+			}
+		},
+		//实测直接在标签属性里写  $store.state.XX  拿不到数据  所以这里通过 计算属性去监听一下
+		computed:{
+			is_loading(){
+				return this.$store.state.user.loading
+			}
+		}
+	}
+</script>
+
+<style scoped>
+	.loading{position: fixed;top: 0;left: 0;bottom: 0;right: 0;display: flex;align-items: center;justify-content: space-around;z-index: 1001;background: transparent;}
+	.load_img{width: 640rpx;height: 490rpx;}
+	
+	.loader,
+	.loader:before,
+	.loader:after {
+	  -webkit-animation: load1 1s infinite ease-in-out;
+	  animation: load1 1s infinite ease-in-out;
+	  width: 1em;
+	  height: 3em;
+	}
+	.loader {
+	  color: #FF8080;
+	  background: #FF8080;
+	  text-indent: -9999em;
+	  margin: 88px auto;
+	  position: fixed;
+	  font-size: 16upx;
+	  -webkit-transform: translateZ(0);
+	  -ms-transform: translateZ(0);
+	  transform: translateZ(0);
+	  -webkit-animation-delay: -0.16s;
+	  animation-delay: -0.16s;
+	  top: 30%;left: 0;bottom: 0;right: 0;
+	}
+	.loader:before,
+	.loader:after {
+	  position: absolute;
+	  top: 0;
+	  content: '';
+	}
+	.loader:before {
+	  left: -1.5em;
+	  -webkit-animation-delay: -0.32s;
+	  animation-delay: -0.32s;
+	  background: #FF9999;
+	  color: #FF9999;
+	}
+	.loader:after {
+	  left: 1.5em;
+	  background: #FE6666;
+	  color: #FE6666;
+	}
+	@-webkit-keyframes load1 {
+	  0%,
+	  80%,
+	  100% {
+		box-shadow: 0 0;
+		height: 2em;
+	  }
+	  40% {
+		box-shadow: 0 -2em;
+		height: 3em;
+	  }
+	}
+	@keyframes load1 {
+	  0%,
+	  80%,
+	  100% {
+		box-shadow: 0 0;
+		height: 2em;
+	  }
+	  40% {
+		box-shadow: 0 -2em;
+		height: 3em;
+	  }
+	}
+	
+	/* .loader,
+	.loader:before,
+	.loader:after {
+	  border-radius: 50%;
+	  width: 2.5em;
+	  height: 2.5em;
+	  -webkit-animation-fill-mode: both;
+	  animation-fill-mode: both;
+	  -webkit-animation: load7 1.8s infinite ease-in-out;
+	  animation: load7 1.8s infinite ease-in-out;
+	}
+	.loader {
+	  color: #000;
+	  font-size: 10px;
+	  margin: 80px auto;
+	  position: fixed;
+	  text-indent: -9999em;
+	  -webkit-transform: translateZ(0);
+	  -ms-transform: translateZ(0);
+	  transform: translateZ(0);
+	  -webkit-animation-delay: -0.16s;
+	  animation-delay: -0.16s;
+	  top: 30%;left: 0;bottom: 0;right: 0;
+	}
+	.loader:before,
+	.loader:after {
+	  content: '';
+	  position: absolute;
+	  top: 0;
+	}
+	.loader:before {
+	  left: -3.5em;
+	  -webkit-animation-delay: -0.32s;
+	  animation-delay: -0.32s;
+	}
+	.loader:after {
+	  left: 3.5em;
+	}
+	@-webkit-keyframes load7 {
+	  0%,
+	  80%,
+	  100% {
+		box-shadow: 0 2.5em 0 -1.3em;
+	  }
+	  40% {
+		box-shadow: 0 2.5em 0 0;
+	  }
+	}
+	@keyframes load7 {
+	  0%,
+	  80%,
+	  100% {
+		box-shadow: 0 2.5em 0 -1.3em;
+	  }
+	  40% {
+		box-shadow: 0 2.5em 0 0;
+	  }
+	} */
+	
+	/* .loader {
+	  font-size: 10px;
+	  margin: 50px auto;
+	  text-indent: -9999em;
+	  width: 8em;
+	  height: 8em;
+	  border-radius: 50%;
+	  background: transparent ;
+	  background: -moz-linear-gradient(left, #CCCCCC 10%, rgba(255, 255, 255, 0) 42%);
+	  background: -webkit-linear-gradient(left, #CCCCCC 10%, rgba(255, 255, 255, 0) 42%);
+	  background: -o-linear-gradient(left, #CCCCCC 10%, rgba(255, 255, 255, 0) 42%);
+	  background: -ms-linear-gradient(left, #CCCCCC 10%, rgba(255, 255, 255, 0) 42%);
+	  background: linear-gradient(to right, #CCCCCC 10%, rgba(255, 255, 255, 0) 42%);
+	  position: fixed;
+	  top: 30%;left: 0;bottom: 0;right: 0;
+	  -webkit-animation: load3 1.4s infinite linear;
+	  animation: load3 1.4s infinite linear;
+	  -webkit-transform: translateZ(0);
+	  -ms-transform: translateZ(0);
+	  transform: translateZ(0);
+	}
+	.loader:before {
+	  width: 50%;
+	  height: 50%;
+	  background: transparent ;
+	  border-radius: 100% 0 0 0;
+	  position: absolute;
+	  top: 0;
+	  left: 0;
+	  content: '';
+	}
+	.loader:after {
+	  background: #FFFFFF ;
+	  width: 75%;
+	  height: 75%;
+	  border-radius: 50%;
+	  content: '';
+	  margin: auto;
+	  position: absolute;
+	  top: 0;
+	  left: 0;
+	  bottom: 0;
+	  right: 0;
+	}
+	@-webkit-keyframes load3 {
+	  0% {
+		-webkit-transform: rotate(0deg);
+		transform: rotate(0deg);
+	  }
+	  100% {
+		-webkit-transform: rotate(360deg);
+		transform: rotate(360deg);
+	  }
+	}
+	@keyframes load3 {
+	  0% {
+		-webkit-transform: rotate(0deg);
+		transform: rotate(0deg);
+	  }
+	  100% {
+		-webkit-transform: rotate(360deg);
+		transform: rotate(360deg);
+	  }
+	} */
+</style>

+ 39 - 0
property_ui/components/nodata/nodata.vue

@@ -0,0 +1,39 @@
+<template>
+	<view class="nodata" :style="'padding-top:'+padtop+'rpx'">
+		<image :src="noiconpimg"></image>
+		<view>{{notxt}}</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		props:{
+			notxt:{
+				type: String,
+				default () {
+					return '暂无数据'
+				}
+			},
+			padtop:{
+				type: Number,
+				default () {
+					return 100
+				}
+			}
+		},
+		data(){
+			return{
+				noiconpimg:require("@/static/images/noiconp.png"),
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+// 无数据
+.nodata{
+	display: flex;flex-direction: column;align-items: center;box-sizing: border-box;padding-bottom: 100rpx;
+	image{width: 456rpx;height: 178rpx;margin-bottom: 28rpx;}
+	view{font-size: 30rpx;color: #AAAAAA;font-weight: bold;}
+}	
+</style>

+ 18 - 0
property_ui/main.js

@@ -5,6 +5,23 @@ import plugins from './plugins' // plugins
 import './permission' // permission
 Vue.use(plugins)
 import {toast} from "@/utils/common.js"
+/** 
+ * 引用全局加载 loading
+ * */
+import loading from "./components/loading/loading.vue"
+Vue.component('loading',loading);
+//是否显示加载中 的方法 调用store中的mutations方法
+function loadings(tf){
+    /* if(tf){
+        store.commit("switch_loading",tf)
+    }else{
+        store.commit("switch_loading")
+    } */
+	store.commit("switch_loading",tf);
+}
+//也挂在到原型链上 方便在每个页面中  使用 this.$loading()  去显示加载中
+Vue.prototype.$loading = loadings;
+
 
 Vue.config.productionTip = false
 Vue.prototype.$store = store
@@ -16,3 +33,4 @@ const app = new Vue({
 })
 
 app.$mount()
+export default app

+ 9 - 8
property_ui/manifest.json

@@ -18,20 +18,21 @@
         "distribute" : {
             "android" : {
                 "permissions" : [
-                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
-                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
                     "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
                     "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
                     "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
                     "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
                     "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
                     "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera\"/>",
                     "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
                 ]
             },

+ 217 - 23
property_ui/pages.json

@@ -91,29 +91,223 @@
       "navigationBarTitleText": "浏览文本"
     }
   }],
-  // "tabBar": {
-  //   "color": "#000000",
-  //   "selectedColor": "#000000",
-  //   "borderStyle": "white",
-  //   "backgroundColor": "#ffffff",
-  //   "list": [{
-  //       "pagePath": "pages/index",
-  //       "iconPath": "static/images/tabbar/home.png",
-  //       "selectedIconPath": "static/images/tabbar/home_.png",
-  //       "text": "首页"
-  //     }, {
-  //       "pagePath": "pages/work/index",
-  //       "iconPath": "static/images/tabbar/work.png",
-  //       "selectedIconPath": "static/images/tabbar/work_.png",
-  //       "text": "工作台"
-  //     }, {
-  //       "pagePath": "pages/mine/index",
-  //       "iconPath": "static/images/tabbar/mine.png",
-  //       "selectedIconPath": "static/images/tabbar/mine_.png",
-  //       "text": "我的"
-  //     }
-  //   ]
-  // },
+  "subPackages": [
+  	{
+  		"root": "work",
+		"pages": [
+			{
+				"path": "pages/car/index",
+				"style": {
+					"navigationBarTitleText": "车辆管控",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/car/carku",
+				"style": {
+					"navigationBarTitleText": "车库管理",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/car/carcheck",
+				"style": {
+					"navigationBarTitleText": "外来车辆登记",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/car/illegalParking",
+				"style": {
+					"navigationBarTitleText": "违停管理",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/car/illegalcheck",
+				"style": {
+					"navigationBarTitleText": "违停登记",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/car/illegalrecord",
+				"style": {
+					"navigationBarTitleText": "违停记录",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/people/index",
+				"style": {
+					"navigationBarTitleText": "人员管理",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/people/comegl",
+				"style": {
+					"navigationBarTitleText": "来访管理",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/people/comeadd",
+				"style": {
+					"navigationBarTitleText": "添加访客",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/people/staff",
+				"style": {
+					"navigationBarTitleText": "维修人员管理",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/people/staffadd",
+				"style": {
+					"navigationBarTitleText": "添加维修人员",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/manage/money",
+				"style": {
+					"navigationBarTitleText": "物业费管理",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/manage/moneydetail",
+				"style": {
+					"navigationBarTitleText": "物业费管理",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/manage/moneybill",
+				"style": {
+					"navigationBarTitleText": "历史账单",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/service/patrol",
+				"style": {
+					"navigationBarTitleText": "今日巡更",
+					"navigationStyle": "custom",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/service/patroldetail",
+				"style": {
+					"navigationBarTitleText": "巡更详情",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/service/patroladd",
+				"style": {
+					"navigationBarTitleText": "巡更信息",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/service/patrolrecord",
+				"style": {
+					"navigationBarTitleText": "巡更记录",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/service/patrolset",
+				"style": {
+					"navigationBarTitleText": "巡更点设置",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/service/warranty",
+				"style": {
+					"navigationBarTitleText": "报修管理",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			},
+			{
+				"path": "pages/service/warrantydetail",
+				"style": {
+					"navigationBarTitleText": "报修详情",
+					"navigationStyle": "custom"
+					// "h5":{
+					// 	"titleNView":false
+					// }
+				}
+			},
+			{
+				"path": "pages/service/complaint",
+				"style": {
+					"navigationBarTitleText": "投诉建议",
+					"h5":{
+						"titleNView":false
+					}
+				}
+			}
+		]
+  	}
+  ],
+  "preloadRule":{
+	"pages/index": {
+		"network": "all",
+		"packages": ["work"]
+	}, 
+	"pages/login": {
+	 	"network": "all",
+	 	"packages": ["work"]
+	}
+  },
   "globalStyle": {
     "navigationBarTextStyle": "black",
     "navigationBarTitleText": "RuoYi",

+ 51 - 15
property_ui/pages/index.vue

@@ -102,7 +102,7 @@
 					</block>
 				</view>
 				<view class="upbox" @click="getZhanFn">
-					<image :src="upimg"></image>
+					<image :src="upimg" :class="zhanflag?'':'zhe'"></image>
 					<view>{{zhanflag?'收起':'展开'}}</view>
 				</view>
 			</view>
@@ -112,31 +112,31 @@
 					<view>物业管理</view>
 				</view>
 				<view class="lists">
-					<view class="list bimga">
+					<view class="list bimga" @click="getCarFn">
 						<view class="imgs"><image :src="htaba" class="imga"></image></view>
 						<view class="txt">车辆管控</view>
 					</view>
-					<view class="list bimga">
+					<view class="list bimga" @click="getCarKuFn">
 						<view class="imgs"><image :src="htabb" class="imgb"></image></view>
 						<view class="txt">车库管理</view>
 					</view>
-					<view class="list bimga">
+					<view class="list bimga" @click="getCarCheckFn">
 						<view class="imgs"><image :src="htabc" class="imgc"></image></view>
 						<view class="txt">外来车辆登记</view>
 					</view>
-					<view class="list bimga">
+					<view class="list bimga" @click="getillegalParkFn">
 						<view class="imgs"><image :src="htabd" class="imgd"></image></view>
-						<view class="txt">违停登记</view>
+						<view class="txt">违停管理</view>
 					</view>
-					<view class="list bimga">
+					<view class="list bimga" @click="getPeopleFn">
 						<view class="imgs"><image :src="htabe" class="imge"></image></view>
 						<view class="txt">人员管理</view>
 					</view>
-					<view class="list bimga">
+					<view class="list bimga" @click="getComeglFn">
 						<view class="imgs"><image :src="htabf" class="imgf"></image></view>
 						<view class="txt">来访管理</view>
 					</view>
-					<view class="list bimga">
+					<view class="list bimga" @click="getMoneyFn">
 						<view class="imgs"><image :src="htabg" class="imgd"></image></view>
 						<view class="txt">物业费管理</view>
 					</view>
@@ -152,20 +152,20 @@
 					<view>物业服务</view>
 				</view>
 				<view class="lists">
-					<view class="list bimga">
+					<view class="list bimga" @click="getPatrolFn">
 						<view class="imgs"><image :src="htabi" class="imgg"></image></view>
 						<view class="txt">今日巡更</view>
 					</view>
-					<view class="list bimga">
+					<view class="list bimga" @click="getWarrantyFn">
 						<view class="imgs"><image :src="htabj" class="imgb"></image><view class="tips">3</view>
 						</view>
 						<view class="txt">物业报修</view>
 					</view>
-					<view class="list bimga">
+					<view class="list bimga" @click="getStaffFn">
 						<view class="imgs"><image :src="htabk" class="imgb"></image></view>
 						<view class="txt">维修人员管理</view>
 					</view>
-					<view class="list bimga">
+					<view class="list bimga" @click="getComplaintFn">
 						<view class="imgs"><image :src="htabl" class="imga"></image><view class="tips">1</view></view>
 						<view class="txt">投诉建议</view>
 					</view>
@@ -196,6 +196,7 @@
 				</view>
 			</view>
 		</view>
+	<loading></loading>
 	 <footers v-if="isfootflag"  :footerindex="footerindex"></footers>
   </view>
 </template>
@@ -265,7 +266,40 @@ import notice from '@/components/swiper/notice.vue'
 		},
 		getZhanFn(){
 			this.zhanflag=!this.zhanflag
-		}
+		},
+		getCarFn(){//车辆管控
+			this.$tab.navigateTo(`/work/pages/car/index`) 
+		},
+		getCarKuFn(){//车库管理
+			this.$tab.navigateTo(`/work/pages/car/carku`) 
+		},
+		getCarCheckFn(){//外来车辆登记
+			this.$tab.navigateTo(`/work/pages/car/carcheck`) 
+		},
+		getillegalParkFn(){//违停管理
+			this.$tab.navigateTo(`/work/pages/car/illegalParking`) 
+		},
+		getPeopleFn(){//人员管理
+			this.$tab.navigateTo(`/work/pages/people/index`) 
+		},
+		getComeglFn(){//来访管理
+			this.$tab.navigateTo(`/work/pages/people/comegl`) 
+		},
+		getMoneyFn(){//物业费管理
+			this.$tab.navigateTo(`/work/pages/manage/money`) 
+		},
+		getPatrolFn(){//今日巡更
+			this.$tab.navigateTo(`/work/pages/service/patrol`) 
+		},
+		getWarrantyFn(){//报修管理
+			this.$tab.navigateTo(`/work/pages/service/warranty`) 
+		},
+		getStaffFn(){//维修人员管理
+			this.$tab.navigateTo(`/work/pages/people/staff`)
+		},
+		getComplaintFn(){//投诉建议
+			this.$tab.navigateTo(`/work/pages/service/complaint`)
+		},
 	}
   }
 </script>
@@ -322,7 +356,9 @@ height: 20rpx;padding: 0 4rpx;display: flex;align-items: center;justify-content:
 		}
 	}
 	.upbox{display: flex;align-items: center;justify-content: center;flex-direction: column;margin-top: 8rpx;padding-top: 8rpx;margin-bottom: 6rpx;
-		image{width: 24rpx;height: 20rpx;margin-bottom: 8rpx;}
+		image{width: 24rpx;height: 20rpx;margin-bottom: 8rpx;transition: all 0.3s;
+			&.zhe{transform: rotate(-180deg);}
+		}
 		view{font-weight: 500;font-size: 22rpx;color: #AAAAAA;}
 	}
 }

+ 88 - 0
property_ui/pages/indexs.vue

@@ -0,0 +1,88 @@
+<template>
+	<view>
+		
+	<loading></loading>	
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{},
+		data(){
+			return{
+				hrimg:require('@/static/logo.png'),
+				list:[],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+			}
+		},
+		onLoad: function() {
+		
+		},
+		onPageScroll(e) {
+			var scrollTop = Number(e.scrollTop);
+			// var listTop=Number(this.listTop)-Number(this.nvaHeight)
+			if(scrollTop>2){
+				this.scroflag=true
+			}else{
+				this.scroflag=false
+			}
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			// getNextFn(){
+			// 	this.$tab.navigateTo("/work/pages/business/add")
+			// },
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+
+</style>

+ 2 - 2
property_ui/pages/register.vue

@@ -56,8 +56,8 @@
 		  		 <!-- <view class="bbcode">版本号:ZXY_YY_1.3</view> -->
 		    </view>
 	  </view>
-	  
-	  <!-- <view class="rtxt mt26" @click="getregister">还没账号?去申请注册</view> -->
+	  <loading></loading>
+	  <!-- <view class="rtxt" @click="getregister">还没账号?去申请注册</view> -->
   </view>
 </template>
 

+ 5 - 5
property_ui/pages/tlogin.vue

@@ -63,12 +63,12 @@
 		  	  			 <view v-else class="codess" @click="getsendCode">发送验证码</view>
 		  	  		 </view>
 		  	  	</view> -->
-		  	    <button v-if="captchaEnabled"  type="primary" class=" rbtn mb24 mt50" :class="tucode&&loginForm.username&&loginForm.password?'btn2':'btn'"  @click="getLogin">登录</button>
-		  	    <button v-else type="primary" class=" rbtn mb24 mt50" :class="loginForm.username&&loginForm.password?'btn2':'btn'"   @click="getLogin">登录</button>
+		  	    <button v-if="captchaEnabled"  type="primary" class=" rbtn" :class="tucode&&loginForm.username&&loginForm.password?'btn2':'btn'"  @click="getLogin">登录</button>
+		  	    <button v-else type="primary" class=" rbtn " :class="loginForm.username&&loginForm.password?'btn2':'btn'"   @click="getLogin">登录</button>
 		  	  </view>
 		  	  <!-- 微信登录 -->
 		  	  <block v-if="tabidx==1">
-		  		  <button  type="primary" class="rbtn mb24 mt50" open-type="getUserInfo" @getuserinfo="getuserinfo" >
+		  		  <button  type="primary" class="rbtn" open-type="getUserInfo" @getuserinfo="getuserinfo" >
 		  		  	<text class="btn-txt">快捷登录</text>
 		  		  </button>
 		  	  </block>
@@ -85,8 +85,8 @@
 		  		 <!-- <view class="bbcode">版本号:ZXY_YY_1.3</view> -->
 		    </view>
 	  </view>
-	  
-	  <!-- <view class="rtxt mt26" @click="getregister">还没账号?去申请注册</view> -->
+	  <loading></loading>
+	  <!-- <view class="rtxt " @click="getregister">还没账号?去申请注册</view> -->
 	  <phone-btn :type="typeflag" @getPhoneNumber='getPhoneNumber' @getClose="getClose"></phone-btn>
   </view>
 </template>

+ 34 - 3
property_ui/static/style.css

@@ -5,8 +5,9 @@
 .flex0{flex: 0 0 auto;}
 .flex01{flex: 0 1 auto;}
 .flexcj{display: flex;align-items: center;justify-content: space-between;}
-
-
+.flexdc{display: flex;flex-direction: column;}
+.flecw{display: flex;flex-wrap: wrap;}
+.bgbox{background-color: rgba(0, 0, 0, 0.5);position: fixed;left: 0;right: 0;top: 0;bottom: 0;z-index: 5;}
 .clearf::after {
   content: "";
   display: block;
@@ -17,10 +18,40 @@
 .over{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
 .overtwo{word-break: break-all;text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;white-space: normal;}
 .navbg{width: 100%;position: absolute;left: 0;right: 0;top: 0;z-index: -1;}
+.shax {font-size: 30rpx;color: #666;text-align: center;padding: 20rpx 0;}
+.rhbtn{width: 100%;height: 88rpx;display: flex;align-items: center;justify-content: center;
+font-weight: bold;font-size: 26rpx;color: #FFFFFF;background: #0256FD;border-radius: 20rpx;}
+.rfbtn{height: 98rpx;display: flex;align-items: center;justify-content: center;font-weight: bold;position: fixed;left: 0;right: 0;bottom: 0;z-index: 2;font-size: 26rpx;color: #FFFFFF;background: #0156FE;}
+.txr{text-align: right;}
+
+.f12{font-size: 24rpx;}
+.f13{font-size: 26rpx;}
+.coa{color: #aaaaaa;}
+.co27{color: #272727;}
+.co01{color: #0156FE;}
+.cofe{color: #FE5A0E;}
+.co28{color: #28C529;}
+.coff{color: #FF6969 !important;}
+.cof7{color: #FF7E00;}
+.co02{color: #0256FD;}
+.cof6{color: #FF6161;}
+.co06{color: #06C770;}
+
+
+.pdlr12{padding: 0 24rpx;}
 
+.ml10{margin-left: 20rpx;}
+.mr6{margin-right: 12rpx;}
 
 .mb4{margin-bottom: 8rpx;}
+.mb6{margin-bottom: 12rpx;}
 .mb9{margin-bottom: 18rpx !important;}
+.mb10{margin-bottom: 20rpx;}
 .mb14{margin-bottom: 28rpx;}
 .mb16{margin-bottom: 32rpx;}
-.mb22{margin-bottom: 44rpx;}
+.mb20{margin-bottom: 40rpx;}
+.mb22{margin-bottom: 44rpx;}
+.mt6{margin-top: 12rpx;}
+.mt12{margin-top: 24rpx;}
+.mt55{margin-top: 110rpx;}
+.mt63{margin-top: 126rpx;}

+ 1 - 0
property_ui/store/getters.js

@@ -8,5 +8,6 @@ const getters = {
   autologin:state => state.user.autologin,
   userId:state=>state.user.userId,
   phonenumber: state => state.user.phonenumber,
+  loading: state => state.user.loading,
 }
 export default getters

+ 10 - 0
property_ui/store/modules/user.js

@@ -17,9 +17,19 @@ const user = {
 	autologin:storage.get(constant.autologin),
 	userId: storage.get(constant.userId),
 	phonenumber: storage.get(constant.phonenumber),
+	loading: false,
   },
 
   mutations: {
+	//tf作为主动控制的参数
+	switch_loading(state,tf){
+		/* if(tf){
+			state.loading = tf;
+		}else{
+			state.loading = !state.loading
+		} */
+		state.loading = tf;
+	},
     SET_TOKEN: (state, token) => {
       state.token = token
     },

+ 142 - 0
property_ui/utils/common.js

@@ -51,4 +51,146 @@ export function tansParams(params) {
     }
   }
   return result
+}
+//上传图片(本地地址识别一张)
+export function uploadIdentify(api, filePaths, successUp, failUp, i, length, files, callback) {
+	const isToken = (config.headers || {}).isToken === false
+	config.header = config.header || {}
+	if (getToken() && !isToken) {
+	  config.header['Authorization'] = 'Bearer ' + getToken()
+	}
+	// get请求映射params参数
+	if (config.params) {
+	  let url = config.url + '?' + tansParams(config.params)
+	  url = url.slice(0, -1)
+	  config.url = url
+	}
+	
+	uni.showLoading({
+		title: '上传中'
+	})
+	var failfile = [];
+	uni.uploadFile({
+		timeout: config.timeout || timeout,
+		url: baseUrl + api, //仅为示例,非真实的接口地址
+		filePath: filePaths[i],
+		name: 'file',
+		header: config.header,
+		formData: config.formData,
+		success: function(resp) {
+			uni.hideLoading();
+			let result = JSON.parse(resp.data)
+			const code = result.code || 200
+			const msg = errorCode[code] || result.msg || errorCode['default']
+			// console.log(result.fileName,8)
+			if (result.code == 200) {
+				successUp++;
+				files[i] = result;
+			} else if(result.code==401) {
+				showConfirm("登录状态已过期,您可以继续留在该页面,或者重新登录?").then(res => {
+				  if (res.confirm) {
+				    store.dispatch('LogOut').then(res => {
+				      uni.reLaunch({ url: '/pages/login/login' })
+				    })
+				  }
+				})
+				callback('无效的会话,或者会话已过期,请重新登录。');
+			}else{
+				failfile = failfile.concat(filePaths[i])
+				failUp++;
+			}
+		},
+		fail: function(res) {
+			uni.hideLoading();
+			failfile = failfile.concat(filePaths[i])
+			failUp++;
+		},
+		complete: function(rsp) {
+			// console.log(rsp, filePaths[i])
+			uni.hideLoading();
+			i++;
+			if (i == length) {
+				uni.showToast({
+					title: '上传成功',
+					icon: 'none',
+					duration: 2000
+				});
+				callback(files);
+			} else { //递归调用upload函数
+				uploadIdentify(api, filePaths, successUp, failUp, i, length, files, callback);
+			}
+		}
+	});
+
+}
+//上传图片
+export function uploadmore(api, filePaths, successUp, failUp, i, length, files, callback) {
+	const isToken = (config.headers || {}).isToken === false
+	config.header = config.header || {}
+	if (getToken() && !isToken) {
+	  config.header['Authorization'] = 'Bearer ' + getToken()
+	}
+	// get请求映射params参数
+	if (config.params) {
+	  let url = config.url + '?' + tansParams(config.params)
+	  url = url.slice(0, -1)
+	  config.url = url
+	}
+	
+	uni.showLoading({
+		title: '上传中'
+	})
+	var failfile = [];
+	uni.uploadFile({
+		timeout: config.timeout || timeout,
+		url: baseUrl + api, //仅为示例,非真实的接口地址
+		filePath: filePaths[i],
+		name: 'file',
+		header: config.header,
+		formData: config.formData,
+		success: function(resp) {
+			uni.hideLoading();
+			let result = JSON.parse(resp.data)
+			const code = result.code || 200
+			const msg = errorCode[code] || result.msg || errorCode['default']
+			// console.log(result.fileName,8)
+			if (result.code == 200) {
+				successUp++;
+				files[i] = result.fileName;
+			} else if(result.code==401) {
+				showConfirm("登录状态已过期,您可以继续留在该页面,或者重新登录?").then(res => {
+				  if (res.confirm) {
+				    store.dispatch('LogOut').then(res => {
+				      uni.reLaunch({ url: '/pages/login/login' })
+				    })
+				  }
+				})
+				callback('无效的会话,或者会话已过期,请重新登录。');
+			}else{
+				failfile = failfile.concat(filePaths[i])
+				failUp++;
+			}
+		},
+		fail: function(res) {
+			uni.hideLoading();
+			failfile = failfile.concat(filePaths[i])
+			failUp++;
+		},
+		complete: function(rsp) {
+			console.log(rsp, filePaths[i])
+			uni.hideLoading();
+			i++;
+			if (i == length) {
+				uni.showToast({
+					title: '上传成功',
+					icon: 'none',
+					duration: 2000
+				});
+				callback(files);
+			} else { //递归调用upload函数
+				uploadmore(api, filePaths, successUp, failUp, i, length, files, callback);
+			}
+		}
+	});
+
 }

+ 10 - 1
property_ui/utils/request.js

@@ -4,7 +4,7 @@ import config from '@/config'
 import { getToken } from '@/utils/auth'
 import errorCode from '@/utils/errorCode'
 import { toast, showConfirm, tansParams } from '@/utils/common'
-
+import vues from '@/main.js'
 let timeout = 60000
 const baseUrl = config.baseUrl
 var confirmflag = config.confirmflag
@@ -29,6 +29,10 @@ const request = config => {
     url = url.slice(0, -1)
     config.url = url
   }
+  // uni.showLoading({
+  // 	title:"加载中"
+  // })
+  // vues.$loading(true)
   return new Promise((resolve, reject) => {
     uni.request({
         method: config.method || 'get',
@@ -38,6 +42,8 @@ const request = config => {
         header: config.header,
         dataType: 'json'
       }).then(response => {
+		uni.hideLoading()
+		vues.$loading(false)
         let [error, res] = response
         if (error) {
           toast('后端接口连接异常')
@@ -126,6 +132,8 @@ const request = config => {
         resolve(res.data)
       })
       .catch(error => {
+		vues.$loading(false)
+		uni.hideLoading()
         let { message } = error
         if (message === 'Network Error') {
           message = '后端接口连接异常'
@@ -137,6 +145,7 @@ const request = config => {
         toast(message)
         reject(error)
       })
+	  
   })
 }
 

+ 1 - 1
property_ui/utils/upload.js

@@ -38,7 +38,7 @@ const upload = config => {
             showConfirm("登录状态已过期,您可以继续留在该页面,或者重新登录?").then(res => {
               if (res.confirm) {
                 store.dispatch('LogOut').then(res => {
-                  uni.reLaunch({ url: '/pages/login/login' })
+                  uni.reLaunch({ url: '/pages/login' })
                 })
               }
             })

+ 529 - 0
property_ui/work/components/car/list.vue

@@ -0,0 +1,529 @@
+<template>
+<view>
+	<!-- 第一种样式  人员管理-->
+	<block v-if="datainfo.length>0">
+		<!-- 车辆管控 -->
+		<block v-if="type=='car'">
+			<view class="carlist" v-for="(ite,idx) in datainfo" :key="idx">
+				<view class="ctop flexc">
+					<image :src="cara" class="imgs" v-if="ite.type==1"></image>
+					<image :src="carb" class="imgs" v-if="ite.type==2"></image>
+					<view class="tit">皖A IC520</view>
+					<view class="btn btna">新能源</view>
+					<view class="btn btnb">小型车</view>
+					<view class="flex1"></view>
+					<view class="txt ca" v-if="ite.type==1">小区车辆</view>
+					<view class="txt cb" v-if="ite.type==2">外来车辆</view>
+				</view>
+				<view class="clists">
+					<view class="clist"><view class="tit">车库名称</view>地下停车场</view>
+					<view class="clist"><view class="tit">进入时间</view>2024-11-27 16:27:48</view>
+					<block v-if="topval=='sl'">
+						<view class="clist"><view class="tit">驶离时间</view>2024-11-27 16:27:48</view>
+						<view class="clist"><view class="tit">停车时长</view>3小时19分钟</view>
+					</block>
+					<view class="clist"><view class="tit">{{ite.type==1?'门户号 ':'来访门户'}}</view>8#303</view>
+					<view class="clist"><view class="tit">手机号码</view>13656788668</view>
+				</view>
+			</view>
+		</block>
+		<!-- 车辆违规 -->
+		<block v-if="type=='carpark'">
+			<view class="carlist" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail">
+				<view class="ctop flexc">
+					<image :src="cara" class="imgs" v-if="ite.type==1"></image>
+					<image :src="carb" class="imgs" v-if="ite.type==2"></image>
+					<view class="tit">皖A IC520</view>
+					<view class="num" :class="ite.heiflag?'coff':''">(本年度2次)</view>
+					<view class="flex1"></view>
+					<view class="txt ca" v-if="ite.type==1">小区车辆</view>
+					<view class="txt cb" v-if="ite.type==2">外来车辆</view>
+				</view>
+				<view class="clists">
+					<view class="clist"><view class="tit">关联房号</view>12#1403</view>
+					<view class="clist"><view class="tit">手机号码</view>13656788668</view>
+					<view class="clist"><view class="tit">登记时间</view>2024-11-27 17:30:55</view>
+					<view class="clist"><view class="tit">违停拍照</view>
+						<view class="imgas">
+							<image :src="cara" @click="getPreview(idx,cara)"></image>
+							<image :src="cara"></image>
+							<image :src="cara"></image>
+							<image :src="cara"></image>
+						</view>
+					</view>
+				</view>
+			</view>
+		</block>
+		<!-- 人员管理 -->
+		<block v-if="type=='people'">
+			<view class="carlist peolist" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail">
+				<view class="ctop flexc">
+					<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">一号楼3单元1101</view>
+					<view class="flex1"></view>
+					<view class="txt ca" v-if="ite.type==1">业主</view>
+					<view class="txt cb" v-if="ite.type==2">租户</view>
+				</view>
+				<view class="plists">
+					<view class="plist flexc">
+						<image :src="man" class="head" v-if="ite.sex==0"></image>
+						<image :src="woman" class="head" v-else></image>
+						<view class="flex1">
+							<view class="ptit">张伟<view class="btn btnc ml10" v-if="ite.hzflag">户主</view></view>
+							<view class="ptxt">身份证号 | 41072719880603022X</view>
+							<view class="flexc">
+								<view class="ptxt">性别 | {{ite.sex==0?'男':'女'}}</view>
+								<view class="ptxt">年龄 | 36岁</view>
+							</view>
+						</view>
+					</view>
+					<view class="plist flexc" v-if="ite.zhanflag">
+						<image :src="man" class="head" v-if="ite.sex==0"></image>
+						<image :src="woman" class="head" v-else></image>
+						<view class="flex1">
+							<view class="ptit">张伟<view class="btn btnc ml10" v-if="ite.hzflag">户主</view></view>
+							<view class="ptxt">身份证号 | 41072719880603022X</view>
+							<view class="flexc">
+								<view class="ptxt">性别 | {{ite.sex==0?'男':'女'}}</view>
+								<view class="ptxt">年龄 | 36岁</view>
+							</view>
+						</view>
+					</view>
+					<image :src="upimg" :class="ite.zhanflag?'act':''" class="upimg" @click="getZhan(idx)"></image>
+				</view>
+			</view>
+		</block>
+		<!-- 维修人员管理 -->
+		<view v-if="type=='staff'" class="flecw">
+			<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==0"></image>
+					<image class="head" :src="woman" v-else></image>
+					<view class="flex1">
+						<view class="statit">张伟</view>
+						<view class="statxt flexc co06" v-if="ite.hzflag"><text class="cir bga"></text>空闲中</view>
+						<view class="statxt flexc cof6" v-else><text class="cir bgb"></text>指派中</view>
+					</view>
+					<image :src="pdel" class="stadel"></image>
+				</view>
+				<view class="stalist">
+					<view class="imgs"><image :src="gzlx" class="gzlximg"></image></view>电梯维修
+				</view>
+				<view class="stalist">
+					<view class="imgs"><image :src="mphone" class="mphone"></image></view>158****0088
+				</view>
+			</view>
+		</view>
+		<!-- 来访管理 -->
+		<block v-if="type=='comepeo'">
+			<view class="carlist peolist" v-for="(ite,idx) in datainfo" :key="idx">
+				<view class="ctop flexc">
+					<image :src="hicoa" class="imgs"></image>
+					<!-- <image :src="hicob" class="imgs" v-if="ite.type==2"></image> -->
+					<view class="tit">幸福小区12#301</view>
+					<view class="btn btnbga">预约</view>
+					<view class="btn btnbgb">已来访</view>
+					<view class="btn btnbgc">待来访</view>
+					<view class="flex1"></view>
+					<view class="txt cc" v-if="ite.type==1">驾车</view>
+				</view>
+				<view class="clists">
+					<view class="clist"><view class="tit">预约时间</view>2024-11-25  10:00:00</view>
+					<view class="clist"><view class="tit">来访时间</view>2024-11-27 16:27:48</view>
+					<view class="w50 flexc">
+						<view class="clist"><view class="tit">访客姓名</view>刘女士</view>
+						<view class="clist"><view class="tit">来访人数</view>1人</view>
+					</view>
+					<view class="w50 flexc">
+						<view class="clist"><view class="tit">来访事由</view>亲友</view>
+						<view class="clist"><view class="tit">车牌号码</view>皖A 86KY2</view>
+					</view>
+					<view class="clist"><view class="tit">手机号码</view>13656788668</view>
+				</view>
+			</view>
+		</block>
+		<!-- 物业费管理 -->
+		<block v-if="type=='money'">
+			<view class="carlist peolist" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail">
+				<view class="ctop flexc" style="padding: 26rpx 24rpx 24rpx;">
+					<image :src="hicoa" class="imgs"></image>
+					<view class="tit">幸福小区12#301</view>
+					<view class="flex1"></view>
+					<view class="txta">2024/01 -2024/12</view>
+				</view>
+				<view class="clists flexc">
+					<view class="mlistl">
+						<view class="mltit">应缴总额 /元</view>
+						<view class="mltxt">4307.20</view>
+					</view>
+					<view class="mlistr">
+						<view class="clist"><view class="tit">物业费用:</view>3247.20元</view>
+						<view class="clist"><view class="tit">车位费用:</view>960.00元</view>
+						<view class="clist"><view class="tit">能耗费用:</view>100.00元</view>
+					</view>
+				</view>
+			</view>
+		</block>
+		<!-- 历史账单 -->
+		<block v-if="type=='moneybill'">
+			<view class="carlist peolist" v-for="(ite,idx) in datainfo" :key="idx">
+				<view class="ctop flexc" style="padding: 26rpx 24rpx 24rpx;">
+					<image :src="time" class="imgs"></image>
+					<view class="tit">2024/01 -2024/12</view>
+					<view class="btn btnbgb" v-if="ite.type==1">已缴费</view>
+					<view class="btn btnbgc" v-else>未缴费</view>
+					<view class="flex1"></view>
+					<view class="txta">1号楼3单元1102</view>
+				</view>
+				<view class="clists flexc">
+					<view class="mlistl">
+						<view class="mltit">应缴总额 /元</view>
+						<view class="mltxt">4307.20</view>
+					</view>
+					<view class="mlistr">
+						<view class="clist"><view class="tit">物业费用:</view>3247.20元</view>
+						<view class="clist"><view class="tit">车位费用:</view>960.00元</view>
+						<view class="clist"><view class="tit">能耗费用:</view>100.00元</view>
+					</view>
+				</view>
+			</view>
+		</block>
+		<!-- 巡更地点patrol -->
+		<block v-if="type=='patrol'">
+			<view class="patlist" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail">
+				<view class="pattop flexc">
+					<image :src="home" class="imgs"></image>
+					<view class="tit">幸福小区1栋2单元电梯间</view>
+					<view class="flex1"></view>
+					<view class="txt cd" v-if="ite.type==1">未巡更</view>
+					<view class="txt cc" v-if="ite.type==2">已巡更</view>
+				</view>
+				<view class="patlistr">
+					<view class="clist"><view class="tit">巡检类型</view>:设备维修</view>
+					<view class="clist"><view class="tit">巡检时间</view>:2024-11-27 10:00</view>
+					<view class="clist"><view class="tit">巡检人</view>:刘兵琦</view>
+				</view>
+				<view class="patbtns">
+					<view class="btna" @click.stop="getDetail">查看</view>
+					<view  class="btnb" @click.stop="getAddFn">去巡更</view>
+				</view>
+			</view>
+		</block>
+		<!-- 报修管理 -->
+		<block v-if="type=='warranty'">
+			<view class="walists" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail">
+				<view class="watop ">
+					<view class="watit">
+						<view class="tit">一号楼3单元12楼楼梯间灯不亮</view>
+						<view class="txt co01" v-if="ite.type==1">待分派</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>:幸福小区</view>
+					<view class="walist"><view class="tit">报修门户</view>:3号楼1单元406</view>
+					<view class="walist"><view class="tit">报修时间</view>:2024-11-14 17:16:31</view>
+					<view class="walist" v-if="ite.type==3"><view class="tit" >完成时间</view>:2024-11-14 18:16:31</view>
+				</view>
+				<view class="wabtn">
+					<view>查看详情</view>
+					<image :src="rimg"></image>
+				</view>
+			</view>
+		</block>
+		<!-- 投诉建议 -->
+		<block v-if="type=='complaint'">
+			<view class="walists" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail"
+				:data-idx="idx"
+				@touchstart="drawStart" @touchmove="drawMove" @touchend="drawEnd" :style="'right:'+ite.right+'px'"
+			>
+				<view class="watop watopcom">
+					<view class="watit">
+						<view class="tit">小区电梯老化</view>
+						<view class="txt co01" v-if="ite.type==1">待回复</view>
+						<view class="txt coa" v-if="ite.type==2">已回复</view>
+					</view>
+					<view class="watopcoma">小区电梯时常发生问题,请物业派维修人员进行安全检 查,若无法排除问题,建议更换小区的电梯设备,避…</view>
+					<view class="watopcomb">2024-11-18 08:16:54</view>
+				</view>
+				<!--  -->
+				<view class="spdel" v-if="ite.right>0" @click.stop="getDelFn()">删除</view>
+			</view>
+			<!-- checkPermi(['system:menuFood:remove'])&& -->
+			
+		</block>
+		<view class="shax">{{wtdt}}</view>
+	</block>
+	<!-- 无数据 -->
+	<view class="nodata" v-else>
+		<image :src="noiconpimg"></image>
+		<view>
+			暂无数据
+		</view>
+	</view>
+</view>
+</template>
+
+<script>
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import config from '@/config'
+	export default{
+		props:{
+			datainfo: {
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			wtdt:{
+				type:String,
+				default () {
+					return ''
+				}
+			},
+			type:{
+				type:String,
+				default () {
+					return 0
+				}
+			},
+			topval:{
+				type:String,
+				default () {
+					return ''
+				}
+			}
+		},
+		data(){
+			return{
+				noiconpimg:require("@/work/static/nodata.png"),
+				car:require("@/work/static/car/car.png"),
+				cara:require("@/work/static/car/cara.png"),
+				carb:require("@/work/static/car/carb.png"),
+				hicoa:require("@/work/static/people/hicoa.png"),
+				hicob:require("@/work/static/people/hicob.png"),
+				man:require("@/work/static/people/man.png"),
+				woman:require("@/work/static/people/woman.png"),
+				rimg:require("@/work/static/people/rimg.png"),
+				pdel:require("@/work/static/people/pdel.png"),
+				gzlx:require("@/work/static/people/gzlx.png"),
+				mphone:require("@/work/static/people/mphone.png"),
+				time:require("@/work/static/manage/time.png"),
+				home:require("@/work/static/service/home.png"),
+				upimg:require("@/static/images/home/up.png"),
+				baseUrl:config.baseUrl,
+				delBtnWidth:66,//左滑默认宽度
+			}
+		},
+		mounted() {
+			
+		},
+		methods:{
+			checkPermi, checkRole,
+			getDetail(e){
+				this.$emit('getDetail',e)
+			},
+			getAddFn(e){
+				this.$emit('getAddFn',e)
+			},
+			getZhan(idx){
+				// var obj=JSON.parse(JSON.stringify(this.datainfo))[idx]
+				// obj.zhanflag=!obj.zhanflag;
+				// this.datainfo.splice(idx,1,obj);
+				this.datainfo[idx].zhanflag=!this.datainfo[idx].zhanflag
+			},
+			getPreview(idx,arr) {
+				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) {}
+				});
+			},
+			//开始触摸滑动
+			drawStart(e) {
+				// console.log("开始触发");
+				var touch = e.touches[0];
+				this.startX = touch.clientX;
+			},
+			//触摸滑动
+			drawMove(e) {
+				// console.log("滑动");
+				for (var index in this.datainfo) {
+					// this.csListArrl[index].right=0
+					this.$set(this.datainfo[index],'right',0);
+				}
+				var idx=e.currentTarget.dataset.idx
+				var touch = e.touches[0];
+				var item = this.datainfo[idx];
+				var disX = this.startX - touch.clientX;
+				if (disX >= 20) {
+				        if (disX > this.delBtnWidth) {
+					    disX = this.delBtnWidth;
+				        }
+						// this.csListArrl[idx].right=disX
+				        this.$set(this.datainfo[idx],'right',disX);
+				} else {
+					// this.csListArrl[idx].right=0
+					this.$set(this.datainfo[idx],'right',0);
+				}
+			},
+			//触摸滑动结束
+			drawEnd(e) {
+				// console.log("滑动结束");
+				var idx=e.currentTarget.dataset.idx
+				var item = this.datainfo[idx];
+				if (item.right >= this.delBtnWidth / 2) {
+					// this.datainfo[idx].right=this.delBtnWidth
+					this.$set(this.datainfo[idx],'right',this.delBtnWidth);
+				} else {
+					this.datainfo[idx].right=0
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.flex{display: flex;}
+.flexc{display: flex;align-items: center;}
+.mb10{margin-bottom: 20rpx;}
+.carlist{background: #FFFFFF;border-radius: 20rpx;margin-bottom: 24rpx;
+	.ctop{border-bottom: 2rpx solid #E5E5E5;padding:26rpx 24rpx;
+		.imgs{width: 40rpx;height: 42rpx;margin-right: 30rpx;}
+		.tit{font-size: 32rpx;color: #272727;font-weight: bold;margin-right: 14rpx;}
+		.txt{font-weight: 500;font-size: 26rpx;
+			&.ca{color: #3565ED;}
+			&.cb{color: #FE5A0E;}	
+			&.cc{color: #28C529;}	
+		}
+		.txta{font-weight: 500;font-size: 24rpx;color: #AAAAAA;}
+		.num{font-size: 24rpx;color: #AAAAAA;}
+	}
+	.btn{height: 34rpx;border-radius: 18rpx;display: flex;align-items: center;justify-content: center;padding: 0 10rpx;font-size: 22rpx;margin-right: 24rpx;
+		&.btna{border: 2rpx solid #06C770;color: #06C770;}
+		&.btnb{border: 2rpx solid #3565ED;color: #3565ED;}
+		&.btnc{border: 2rpx solid #FE5A0E;color: #FE5A0E;}
+		&.btnbga{border: 1px solid #0156FE;color: #3565ED;background: #DFEAFF;height: 36rpx;}
+		&.btnbgb{border: 1px solid #C1C1C1;color: #666666;background: #F1F1F1;height: 36rpx;}
+		&.btnbgc{border: 1px solid #FE5A0E;color:#FE5A0E;background:#FFEEE6;height: 36rpx;}
+	}
+	.clists{padding: 24rpx 24rpx 8rpx;
+		.clist{font-weight: 500;margin-bottom: 16rpx;
+font-size: 26rpx;color: #272727;display: flex;line-height: 34rpx;
+			.tit{font-size: 26rpx;color: #AAAAAA;flex: 0 0 auto;margin-right: 16rpx;min-width: 108rpx;text-align-last: justify;}
+			.imgas{display: flex;align-items: center;flex-wrap: wrap;
+				image{width: 142rpx;height: 142rpx;margin-right: 30rpx;margin-top: 8rpx;}
+			}	
+		}
+		.w50{
+			.clist{width: 50%;}
+		}
+	}
+}
+// 人员
+.peolist{
+	.ctop{padding: 24rpx 24rpx 22rpx;}
+	.imgs{margin-right: 16rpx !important;}
+	.tit{font-size: 28rpx !important;}
+	.plists{padding: 30rpx 24rpx 6rpx;
+		.plist{background: linear-gradient(-90deg, #F2F5FF 0%, #FBFDFF 100%);border-radius: 20rpx;border: 2rpx solid #E6E6E6;margin-bottom: 24rpx;padding: 18rpx 26rpx 4rpx;
+		.head{width: 96rpx;height: 98rpx;margin-right: 32rpx;flex: 0 0 auto;}
+		.ptit{font-weight: bold;font-size: 30rpx;color: #272727;display: flex;align-items: center;margin-bottom: 14rpx;}	
+		.ptxt{font-weight: 500;font-size: 26rpx;color: #666666;line-height: 36rpx;margin-bottom: 14rpx;min-width: 176rpx;}
+		}
+	}
+	.upimg{width: 26rpx;height: 22rpx;display: block;transform: rotate(180deg);transition: all 0.3s;margin: 0 auto 18rpx;
+		&.act{transform: rotate(0deg);}
+	}
+}
+// 物业费
+.mlistl{width: 40%;display: flex;flex-direction: column;align-items: center;flex: 0 0 auto;
+	.mltit{font-weight: 500;font-size: 26rpx;color: #666666;margin-bottom: 18rpx;}
+	.mltxt{font-weight: bold;font-size: 32rpx;color: #0156FE;}
+}
+
+// 巡更地点
+.patlist{background: #FFFFFF;border-radius: 20rpx;margin-bottom: 24rpx;padding: 0 24rpx 30rpx;
+	.pattop{padding:22rpx 30rpx;margin-bottom: 2rpx;
+		.imgs{width: 28rpx;height: 28rpx;margin-right: 12rpx;}
+		.tit{font-size: 30rpx;color: #272727;font-weight: bold;margin-right: 14rpx;}
+		.txt{font-weight: 500;font-size:24rpx;
+			&.ca{color: #3565ED;}
+			&.cb{color: #FE5A0E;}	
+			&.cc{color: #28C529;}	
+			&.cd{color: #FF6969;}	
+		}
+	}
+	.patlistr{background: #EFF4FF;border-radius: 20rpx;padding: 20rpx 32rpx;
+		.clist{font-weight: 500;font-size: 26rpx;color: #272727;display: flex;line-height: 50rpx;
+			.tit{font-size: 26rpx;flex: 0 0 auto;min-width: 108rpx;text-align-last: justify;font-weight: bold;}
+		}
+	}
+	.patbtns{display: flex;justify-content: flex-end;align-items: center;flex-wrap: wrap;
+		view{min-width: 156rpx;height: 52rpx;font-weight: 500;font-size: 26rpx;background: #FFFFFF;border-radius: 20rpx;box-sizing: border-box;display: flex;align-items: center;justify-content: center;padding: 0 10rpx;margin-left: 24rpx;margin-top: 24rpx;
+		&.btna{border: 2rpx solid #0256FD;color: #0256FD;}
+		&.btnb{background: #0256FD;color: #ffffff;}
+		
+}
+	}
+}
+// 报修
+.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;}
+			.txt{font-weight: bold;font-size: 26rpx;flex: 0 0 auto;
+			}
+		}
+	}
+	.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;}
+	}
+}
+// 维修人员
+.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;}
+	.statop{border-bottom: 2rpx solid #E5E5E5;display: flex;padding: 24rpx 24rpx 22rpx;
+		.head{width: 80rpx;height: 82rpx;margin-right: 24rpx;flex: 0 0 auto;}
+		.stadel{width: 30rpx;height: 30rpx;flex: 0 0 auto;margin-left: 12rpx;}
+		.statit{font-weight: bold;font-size: 30rpx;color: #272727;margin-bottom: 4rpx;}
+		.statxt{font-weight: 500;font-size: 26rpx;
+			.cir{width: 10rpx;height: 10rpx;border-radius: 50%;margin-right: 14rpx;display: inline-block;
+				&.bga{background: #06C770;}
+				&.bgb{background: #FF6969;}
+			}
+		}
+	}
+	.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;}
+			.mphone{width: 18rpx;height: 30rpx;}
+		}
+		
+	}
+}
+.watopcom{background-color: #ffffff;border-radius: 20rpx;position: relative;z-index: 1;padding-bottom: 30rpx !important;
+	.watopcoma{font-weight: 500;font-size: 26rpx;color: #666666;line-height: 36rpx;margin-bottom: 24rpx;}
+	.watopcomb{font-weight: 500;
+font-size: 24rpx;
+color: #AAAAAA;}
+}
+.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;}
+
+// 无数据
+.nodata{display: flex;flex-direction: column;align-items: center;
+	image{width: 440rpx;height: 440rpx;}
+	view{font-size: 30rpx;color: #666666;font-weight: bold;}
+}
+</style>

+ 223 - 0
property_ui/work/components/popup/popup.vue

@@ -0,0 +1,223 @@
+<template>
+	<view>
+		<!-- 弹窗 -->
+		<view class="bgbox" @click="getClose" v-if="type"></view>
+		<!-- 指派 -->
+		<view v-if="type=='assign'" class="assignbox">
+			<view class="asstit">报修指派</view>
+			<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+				<view class="flexc asline">
+					<view class="flex1  f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择是类型'}}</view>
+					<view class="rimg"><image :src="rimg"></image></view>
+				</view>
+			</picker>
+			<view class="tabtit">选择维修师傅</view>
+			<view class="asslists">
+				<view class="asslist" :class="peoval==ite.val?'act':''" v-for="(ite,idx) in peolist" :key="idx" @click="getChose(ite.val)">
+					<image :src="headbg" v-if="peoval==ite.val"></image>
+					<view class="altit">{{ite.name}}</view>
+					<view class="altxt cof6" v-if="ite.type==0">指派中</view>
+					<view class="altxt co28" v-if="ite.type==1">空闲中</view>
+				</view>
+			</view>
+			<view class="rhbtn"  @click="getSure">确定</view>
+			<image :src="closeimg" class="closeimg"  @click="getClose"></image>
+		</view>
+		<!-- 上门打卡 -->
+		<view v-if="type=='assigncheck'" class="assignbox pra">
+			<view class="asstit">{{finshtype==2?'完成打卡':'上门打卡'}}</view>
+			<view class="assadd">
+				<image :src="addpho"></image>
+				<view>去拍照</view>
+			</view>
+			<view class="assimgs">
+				<view class="assimg">
+					<image :src="headbg" class="img"></image>
+					<image :src="rdelimg" class="delimg" @click="getDelFn"></image>
+				</view>
+				<view class="assimg">
+					<image :src="headbg" class="img"></image>
+					<image :src="rdelimg" class="delimg" @click="getDelFn"></image>
+				</view>
+				<view class="assimg">
+					<image :src="headbg" class="img"></image>
+					<image :src="rdelimg" class="delimg" @click="getDelFn"></image>
+				</view>
+			</view>
+			<view class="rhbtn"  @click="getSure">确定</view>
+			<image :src="closeimg" class="closeimg"  @click="getClose"></image>
+		</view>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import { getToken } from '@/utils/auth'
+	import {uploadmore} from '@/utils/common.js'
+	export default{
+		components:{},
+		props:{
+			type: {
+				type: String,
+				default () {
+					return ''
+				}
+			},
+			finshtype:{
+				type: [String,Number],
+				default () {
+					return ''
+				}
+			}
+		},
+		data(){
+			return{
+				baseUrl:config.baseUrl,
+				closeimg:require("@/work/static/close.png"),
+				rimg: require('@/work/static/people/rimg.png'),
+				headbg: require('@/work/static/service/headbg.png'),
+				addpho: require('@/work/static/service/addpho.png'),
+				rdelimg: require('@/work/static/service/rdel.png'),
+				syqxidx:'',
+				datainfo:{
+					iszc:""
+				},
+				sexs: [{
+					text: '男',
+					value: 0
+				}, {
+					text: '女',
+					value: 1
+				}],
+				peoval:0,
+				peolist:[{name:'王安安',val:"0",type:0},{name:'刘柠溪',val:"1",type:1},{name:'王合一',val:"2",type:0},]
+			}
+		},
+		mounted() {
+			this.baseUrl=baseUrl
+		},
+		watch:{
+			
+			type(val){
+				// this.filelist=[];
+				// this.shtext='';
+				// this.isty='2';
+				// this.phofile=[];
+			}
+		},
+		methods:{
+			bindDateChange(){
+				var val=e.detail.value;
+			},
+			getClose(){
+				this.$emit('getClose')
+			},
+			getSure(){
+				this.$emit('getSure')
+			},
+			getChose(val){
+				this.peoval=val
+			},
+			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) {
+						
+					}
+				});
+			},
+			getDelFn(){
+				var that=this;
+				uni.showModal({
+					title: '确认删除',
+					content: "是否确认删除",
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							// that.filelist.splice(idx,1)
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			getaddImage(e){
+				let that = this;
+				let file =[],count=9
+				uni.chooseImage({
+					count: 1,
+					success:function(res){
+						let img= res.tempFilePaths;
+						if(img.length + file.length > count){
+							uni.showToast({
+								title: '最多上传'+count+'张图片',
+								icon: 'none',
+								duration: 2000
+							})
+						}else{
+							let imglen = res.tempFilePaths.length;
+							var fuwufile = [];
+							uploadmore('/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;
+								// }
+							})	
+						}
+					}
+				});
+			},
+			
+		}
+	}
+</script>
+
+<style lang="scss" scoped>	
+// 指派
+.assignbox{background: #FFFFFF;border-radius: 20rpx;position: fixed;left:56rpx;right:54rpx;z-index: 10;top: 50%;transform: translateY(-50%);padding: 32rpx 38rpx 36rpx;
+	.asstit{font-weight: bold;font-size: 30rpx;color: #272727;text-align: center;padding-left: 16rpx;margin-bottom: 28rpx;}
+	.rimg{width: 16rpx;height: 28rpx;flex: 0 0 auto;margin-left: 20rpx;
+		image{width: 100%;height: 100%;}
+	}
+	.asline{border-bottom: 2rpx solid #E5E5E5;padding: 30rpx 0;margin-bottom: 40rpx;}
+	.tabtit{font-weight: bold;font-size: 26rpx;color: #272727;line-height: 36rpx;margin-bottom: 24rpx;padding-left: 14rpx;}
+	.asslists{display: flex;flex-wrap: wrap;
+		.asslist{width: 252rpx;height: 76rpx;border-radius: 20rpx;border: 2rpx solid #DADADA;position: relative;display: flex;align-items: center;box-sizing: border-box;padding: 0 22rpx;margin: 0 14rpx 24rpx 14rpx;overflow: hidden;
+			&.act{border-color: #0256FD;
+				.altit{color: #0256FD;}
+			}
+			image{position: absolute;right: -2rpx;bottom: -2rpx;width: 34rpx;height: 32rpx;}
+			.altit{font-weight: bold;font-size: 26rpx;color: #666666;flex: 1;}
+			.altxt{font-weight: bold;font-size: 22rpx;flex: 0 0 auto;}
+		}
+	}
+	
+	// 上传图片
+	&.pra{left: 100rpx;right: 100rpx;}
+	.assadd{display: flex;flex-direction: column;align-items: center;justify-content: center;border-radius: 10rpx;height: 192rpx;
+border: 2rpx dashed #A7A7A7;box-sizing: border-box;margin-bottom: 32rpx;
+		image{width:48rpx;height: 40rpx;margin-bottom: 16rpx;}
+		view{font-weight: bold;font-size: 26rpx;color: #272727;}
+	}
+	.assimgs{display: flex;align-items: center;flex-wrap: wrap;margin-bottom: 8rpx;
+		.assimg{width: 140rpx;height: 140rpx;position: relative;overflow: hidden;margin: 0 24rpx 24rpx 0;
+			&:nth-of-type(3n){margin-right: 0;}
+			.img{width: 100%;height: 100%;}
+			.delimg{width: 24rpx;height: 24rpx;position: absolute;right: 0;top: 0;}
+		}
+	}
+}
+.closeimg{width: 32rpx;height: 32rpx;position: absolute;bottom: -62rpx;left: 50%;margin-left: -16rpx;}
+</style>

+ 153 - 0
property_ui/work/pages/car/carcheck.vue

@@ -0,0 +1,153 @@
+<template>
+	<view class="check">
+		<view class="cbox">
+			<view class="chtop flexc">
+				<image :src="line"></image>
+				<view>车辆信息</view>
+			</view>
+			<view class="chmain">
+				<view class="upbox" @click="getaddImage">
+					<image :src="baseUrl+datainfo.front" class="img" v-if="datainfo.front"></image>
+					<image :src="car" class="addimg"></image>
+					<view>拍摄车辆照片自动识别</view>
+				</view>
+				<uni-forms ref="form" :model="datainfo">
+				  <uni-forms-item label="车牌号码" name="realName">
+					  <uni-easyinput v-model="datainfo.realName" disabled :inputBorder='false' placeholder="自动识别" />
+				  </uni-forms-item>
+					<uni-forms-item label="来访门户" name="phonenumber">
+					  <uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入门户号" />
+					</uni-forms-item>
+					<uni-forms-item label="手机号码" name="phonenumber">
+					  <uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入手机号码" />
+					</uni-forms-item>
+				</uni-forms>
+				<view class="rhbtn mt63" @click="getNext">确定添加</view>
+			</view>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {uploadIdentify} from '@/utils/common.js'
+	export default{
+		components:{},
+		data(){
+			return{
+				line:require('@/work/static/car/line.png'),
+				car:require('@/work/static/car/carico.png'),
+				baseUrl:config.baseUrl,
+				datainfo:{
+					realName:'',
+					idCard:'',
+					address:'',
+					expirationDate:'',
+					phonenumber:this.$store.state.datainfo.phonenumber,
+					front:'',
+					back:'',
+				},
+			}
+		},
+		onLoad: function() {
+		
+		},
+		methods:{
+			checkPermi, checkRole,
+			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,
+					success:function(res){
+						let img= res.tempFilePaths;
+						if(img.length + file.length > count){
+							uni.showToast({
+								title: '最多上传'+count+'张图片',
+								icon: 'none',
+								duration: 2000
+							})
+						}else{
+							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)
+								}
+							})	
+						}
+					}
+				});
+			},
+			getOcrIdCard(obj){
+				var params={
+					image:obj.url,
+					idCardSide:obj.type
+				}
+				getOcrIdCard(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
+						}
+					}
+				})
+			}
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.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 /deep/ .uni-forms-item__label{font-weight: bold;font-size: 26rpx;color: #222327;flex: 0 0 auto;width: auto !important;}
+.check /deep/ .uni-easyinput{flex: 1;text-align: right;font-size: 26rpx;color: #222327;}
+.check /deep/ .uni-easyinput__content-textarea{min-height: 40rpx;font-size: 26rpx;}
+.check /deep/ .uni-easyinput__placeholder-class{font-size: 26rpx;color: #AAAAAA;}
+.check /deep/ .uni-input-input{font-size: 26rpx;}
+.check /deep/ .uni-textarea-textarea{font-size: 26rpx;}
+.check /deep/ .is-disabled{color: #222327;background-color: #ffffff !important;}
+.check{min-height: 100vh;padding: 20rpx 24rpx 24rpx;box-sizing: border-box;display: flex;box-sizing: border-box;}
+.cbox{background: #FFFFFF;border-radius: 20rpx;flex: 1;padding-bottom: 32rpx;
+	.chtop{padding-top: 32rpx;margin-bottom: 32rpx;
+		image{width: 14rpx;height: 48rpx;margin-right: 20rpx;}
+		view{font-weight: bold;font-size: 32rpx;color: #272727;}
+	}
+	.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: 8rpx;overflow: auto;
+			.img{width: 100%;height: 100%;}
+			.addimg{width: 70rpx;height: 70rpx;margin-bottom: 16rpx;}
+			view{font-weight: bold;font-size: 26rpx;color: #4C6686;}
+		}
+	}
+	
+}
+</style>

+ 138 - 0
property_ui/work/pages/car/carku.vue

@@ -0,0 +1,138 @@
+<template>
+	<view class="car" :style="'padding-top:'+patop+'px;'">
+		<view class="cartop">
+			<view class="tabtop flexc">
+				<view class="tabt" :class="ttopval==ite.val?'act':''" v-for="(ite,idx) in ttoplist" :key="idx" @click="getTabtop(ite.val)">{{ite.tit}}</view>
+			</view>
+			<view class="tips">车位总计<text class="co01">365个</text>,当前空闲地下车位<text class="cofe">27个</text>,地面车位<text class="co28">18个</text></view>
+			<view class="tablst flexc">
+				<view class="tabs" :class="tabval==ite.val?'act':''" v-for="(ite,idx) in tablist" :key="idx" @click="getTabFn(ite.val)">{{ite.tit}}</view>
+			</view>
+		</view>
+		<!-- 列表 -->
+		<view class="carlists">
+			<car-list :datainfo="list" :topval="ttopval" :wtdt="wtdt" type='carku'></car-list>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				reset:require('@/work/static/car/reset.png'),
+				up:require('@/work/static/car/up.png'),
+				car:require('@/work/static/car/car.png'),
+				cara:require('@/work/static/car/cara.png'),
+				carb:require('@/work/static/car/carb.png'),
+				search:require('@/work/static/car/search.png'),
+				list:[{tit:'皖A IC520',type:1}],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+				ttopval:'tcw',
+				tabval:'0',
+				patop:'144',
+				ttoplist:[{tit:'停车位',val:'tcw'},{tit:'充电桩位',val:'cdz'}],
+				tablist:[{tit:'地下车位',val:0},{tit:'地面车位',val:1}]
+			}
+		},
+		onLoad: function() {
+		},
+		mounted() {
+			var that=this;
+			setTimeout(function(){
+				that.getHeightFn()
+			},200)
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getHeightFn(){
+				let query = uni.createSelectorQuery().in(this);
+				var that=this;
+				//需要给黄色区域设置一个id标识,在这里是demo
+				query.select('.cartop').boundingClientRect(data => {
+					var height=data.height;
+					that.patop=Number(height)
+				}).exec();
+			},
+			getTabtop(val){
+				this.ttopval=val
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.car{}
+.cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
+	.tabtop{padding-bottom: 44rpx;padding-top: 40rpx;
+		.tabt{font-weight: 500;font-size: 32rpx;color: #666666;position: relative;line-height: 60rpx;padding: 0 40rpx;margin-right: 6rpx;
+			&.act{font-weight: bold;font-size: 32rpx;color: #272727;
+			&::after{content: '';width: 40rpx;height: 10rpx;background: #0156FE;border-radius: 6rpx;position: absolute;left: 50%;margin-left: -20rpx;bottom: -10rpx;}
+			}
+		}
+	}
+	.tips{font-weight: 500;font-size: 24rpx;color: #666666;
+		padding: 0 36rpx 16rpx;
+	}
+	.tablst{background: #F3F3F0;padding:24rpx 14rpx 24rpx 46rpx;overflow: auto;
+		.tabs{height: 48rpx;background: #DADADA;border-radius: 24rpx;margin-right: 34rpx;font-weight: 500;display: flex;align-items: center;justify-content: center;padding: 0 24rpx;
+font-size: 26rpx;box-sizing: border-box;flex: 0 0 auto;color: #666666;
+			&.act{border: 2rpx solid #0256FD;background: #FFFFFF;color: #0256FD;}
+		}
+	}
+}
+.carlists{padding: 0 18rpx;}
+</style>

+ 173 - 0
property_ui/work/pages/car/illegalParking.vue

@@ -0,0 +1,173 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+			<view class="topa flexc">
+				<image :src="reset" class="resetimg" @click="getReset"></image>
+				<picker mode="date"   @change='bindDateChangea'>
+					<view class="chekt flexc">
+						<view>{{cxrq|| "选择日期"}}</view>
+						<image :src="up"></image>
+					</view>
+				</picker>
+				<view class="search flexc">
+					<image :src="search"></image>
+					<!-- confirm-type="search" @confirm="getConfirm" -->
+					<input placeholder="请输入车牌号进行搜索"  v-model="text"/>
+					<view class="btn" @click="getConfirm">搜索</view>
+				</view>
+			</view>
+			<view class="tabtop flexc">
+				<view class="tabt" :class="ttopval==ite.val?'act':''" v-for="(ite,idx) in ttoplist" :key="idx" @click="getTabtop(ite.val)">{{ite.tit}}</view>
+			</view>
+			<!-- <view class="tablst flexc">
+				<view class="tabs" :class="tabval==ite.val?'act':''" v-for="(ite,idx) in tablist" :key="idx" @click="getTabFn(ite.val)">{{ite.tit}}</view>
+			</view> -->
+		</view>
+		<!-- 列表 -->
+		<view class="carlists mt12">
+			<car-list :datainfo="list" :topval="ttopval" :wtdt="wtdt" type='carpark' @getDetail="getDetail"></car-list>
+		</view>
+		<view class="rfbtn" @click="getCheck">违停登记</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				reset:require('@/work/static/car/reset.png'),
+				up:require('@/work/static/car/up.png'),
+				car:require('@/work/static/car/car.png'),
+				cara:require('@/work/static/car/cara.png'),
+				carb:require('@/work/static/car/carb.png'),
+				search:require('@/work/static/car/search.png'),
+				cxrq:"",
+				text:'',
+				list:[{tit:'皖A IC520',type:1,heiflag:false},{tit:'晋E KD783',type:2,heiflag:true},],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'暂无数据',
+				ttopval:'0',
+				ttoplist:[{tit:'全部',val:0},{tit:'外来车辆',val:1},{tit:'小区车辆',val:2},],
+			}
+		},
+		onLoad: function() {
+		
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getCheck(){
+				this.$tab.navigateTo("/work/pages/car/illegalcheck")
+			},
+			getDetail(){
+				this.$tab.navigateTo("/work/pages/car/illegalrecord")
+			},
+			getTabtop(val){
+				this.ttopval=val
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.cxrq='';
+				this.text='';
+				this.getrefreshData()
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.cxrq=val;
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.car{padding: 206rpx 0 110rpx;}
+.cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
+	.topa{padding: 20rpx ;
+		.resetimg{width: 36rpx;height: 36rpx;margin-right: 24rpx;flex: 0 0 auto;}
+		.chekt{min-width: 180rpx;
+			view{font-weight: 500;font-size: 26rpx;color: #272727;flex: 1;}
+			image{width: 24rpx;height: 16rpx;margin-left: 18rpx;flex: 0 0 auto;}
+		}
+		.search{flex: 1;margin-left: 16rpx;height: 64rpx;background: #EEEEEE;border-radius: 32rpx;border: 2rpx solid #E6E6E6;padding-left: 24rpx;box-sizing: border-box;
+		image{width: 32rpx;height: 34rpx;margin-right: 22rpx;flex: 0 0 auto;}
+		input{flex: 1;font-size: 26rpx;color: #272727;}
+		.btn{width: 100rpx;height: 64rpx;background: #3565ED;border-radius: 32rpx;flex: 0 0 auto;font-weight: bold;text-align: center;line-height: 64rpx;
+font-size: 26rpx;
+color: #FFFFFF;}
+		}
+	}
+	.tabtop{padding-bottom: 46rpx;
+		.tabt{font-weight: 500;font-size: 32rpx;color: #666666;position: relative;line-height: 56rpx;padding: 0 40rpx;margin-right: 6rpx;
+			&.act{font-weight: bold;font-size: 32rpx;color: #272727;
+			&::after{content: '';width: 40rpx;height: 10rpx;background: #0156FE;border-radius: 6rpx;position: absolute;left: 50%;margin-left: -20rpx;bottom: -10rpx;}
+			}
+		}
+	}
+	.tablst{background: #F3F3F0;padding:30rpx 16rpx 30rpx 46rpx;overflow: auto;
+		.tabs{height: 48rpx;background: #DADADA;border-radius: 24rpx;margin-right: 30rpx;font-weight: 500;display: flex;align-items: center;justify-content: center;padding: 0 24rpx;
+font-size: 26rpx;box-sizing: border-box;flex: 0 0 auto;color: #666666;
+			&.act{border: 2rpx solid #0256FD;background: #FFFFFF;color: #0256FD;}
+		}
+	}
+}
+.carlists{padding: 0 18rpx;}
+</style>

+ 195 - 0
property_ui/work/pages/car/illegalcheck.vue

@@ -0,0 +1,195 @@
+<template>
+	<view class="check">
+		<view class="cbox">
+			<view class="chtop flexc">
+				<image :src="line"></image>
+				<view>车辆信息</view>
+			</view>
+			<view class="chmain">
+				<view class="upbox" @click="getaddImage">
+					<image :src="baseUrl+datainfo.front" class="img" v-if="datainfo.front"></image>
+					<image :src="car" class="addimg"></image>
+					<view>拍摄车辆照片自动识别</view>
+				</view>
+				<uni-forms ref="form" :model="datainfo">
+				  <uni-forms-item label="车牌号码" name="realName">
+					  <uni-easyinput v-model="datainfo.realName" disabled :inputBorder='false' placeholder="自动识别" />
+				  </uni-forms-item>
+					<uni-forms-item label="手机号码" name="phonenumber">
+					  <uni-easyinput v-model="datainfo.phonenumber" disabled :inputBorder='false' placeholder="自动识别" />
+					</uni-forms-item>
+					<uni-forms-item label="关联房号" name="phonenumber">
+					  <uni-easyinput v-model="datainfo.phonenumber" disabled :inputBorder='false' placeholder="自动识别" />
+					</uni-forms-item>
+					<view class="imgs">
+						<view class="img" @click="getPreview">
+							<image :src="car" class="pico"></image>
+							<image :src="del" class="del" @click="getDelFn"></image>
+						</view>
+					</view>
+				</uni-forms>
+				<view class="rhbtn mt63" @click="getNext">确定</view>
+			</view>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {uploadIdentify} from '@/utils/common.js'
+	export default{
+		components:{},
+		data(){
+			return{
+				line:require('@/work/static/car/line.png'),
+				car:require('@/work/static/car/carico.png'),
+				del:require('@/work/static/car/del.png'),
+				baseUrl:config.baseUrl,
+				datainfo:{
+					realName:'',
+					idCard:'',
+					address:'',
+					expirationDate:'',
+					phonenumber:'',
+					front:'',
+					back:'',
+				},
+			}
+		},
+		onLoad: function() {
+		
+		},
+		methods:{
+			checkPermi, checkRole,
+			getPreview(idx,arr) {
+				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) {}
+				});
+			},
+			getDelFn(){
+				var that=this;
+				uni.showModal({
+					title: '确认删除',
+					content: "是否确认删除",
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							// that.filelist.splice(idx,1)
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			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,
+					success:function(res){
+						let img= res.tempFilePaths;
+						if(img.length + file.length > count){
+							uni.showToast({
+								title: '最多上传'+count+'张图片',
+								icon: 'none',
+								duration: 2000
+							})
+						}else{
+							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)
+								}
+							})	
+						}
+					}
+				});
+			},
+			getOcrIdCard(obj){
+				var params={
+					image:obj.url,
+					idCardSide:obj.type
+				}
+				getOcrIdCard(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
+						}
+					}
+				})
+			}
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.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 /deep/ .uni-forms-item__label{font-weight: bold;font-size: 26rpx;color: #222327;flex: 0 0 auto;width: auto !important;}
+.check /deep/ .uni-easyinput{flex: 1;text-align: right;font-size: 26rpx;color: #222327;}
+.check /deep/ .uni-easyinput__content-textarea{min-height: 40rpx;font-size: 26rpx;}
+.check /deep/ .uni-easyinput__placeholder-class{font-size: 26rpx;color: #AAAAAA;}
+.check /deep/ .uni-input-input{font-size: 26rpx;}
+.check /deep/ .uni-textarea-textarea{font-size: 26rpx;}
+.check /deep/ .is-disabled{color: #222327;background-color: #ffffff !important;}
+.check{min-height: 100vh;padding: 20rpx 24rpx 24rpx;box-sizing: border-box;display: flex;box-sizing: border-box;}
+.cbox{background: #FFFFFF;border-radius: 20rpx;flex: 1;padding-bottom: 32rpx;
+	.chtop{padding-top: 32rpx;margin-bottom: 32rpx;
+		image{width: 14rpx;height: 48rpx;margin-right: 20rpx;}
+		view{font-weight: bold;font-size: 32rpx;color: #272727;}
+	}
+	.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: 8rpx;overflow: auto;
+			.img{width: 100%;height: 100%;}
+			.addimg{width: 70rpx;height: 70rpx;margin-bottom: 16rpx;}
+			view{font-weight: bold;font-size: 26rpx;color: #4C6686;}
+		}
+		.imgs{display: flex;align-items: center;flex-wrap: wrap;margin-top: 40rpx;
+			.img{width: 142rpx;height:142rpx;border-radius: 20rpx;margin: 0 28rpx 20rpx 0;position: relative;
+			&:nth-of-type(4n){margin-right: 0;}
+			}
+			.pico{width: 100%;height: 100%;border-radius: 20rpx;}
+			.del{width: 24rpx;height: 24rpx;position: absolute;right: 0;top: 0;}
+		}
+	}
+	
+}
+</style>

+ 172 - 0
property_ui/work/pages/car/illegalrecord.vue

@@ -0,0 +1,172 @@
+<template>
+	<view class="irecord">
+		<view class="ctop flexc">
+			<image :src="carc" class="imgs" v-if="datainfo.type==1"></image>
+			<image :src="card" class="imgs" v-if="datainfo.type==2"></image>
+			<view class="tit">皖A IC520</view>
+			<view class="flex1"></view>
+			<view class="txt ca" v-if="datainfo.type==1">小区车辆</view>
+			<view class="txt cb" v-if="datainfo.type==2">外来车辆</view>
+		</view>
+		<view class="pdlr12">
+			<view class="clists bgef">
+				<view class="clist"><view class="tit">关联房号:</view>12#1403</view>
+				<view class="clist"><view class="tit">手机号码:</view>13656788668</view>
+			</view>
+		</view>
+		
+		<view class="chtop flexc">
+			<image :src="line"></image>
+			<view>违停记录</view>
+			<view class="flex1"></view>
+			<view class="num coff">本年度已违停3次</view>
+		</view>
+		<!-- 步骤条 -->
+		<view class="steps">
+			<image :src="icoa" class="circle"></image>
+			<view class="step">
+				<view class="slist">
+					<view class="tit">登记时间:</view>2024-11-27 10:03:27
+				</view>
+				<view class="slist">
+					<view class="tit">违停拍照:</view>
+					<view class="imgas">
+						<image :src="carc" @click="getPreview(idx,carc)"></image>
+						<image :src="carc"></image>
+						<image :src="carc"></image>
+						<image :src="carc"></image>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="steps">
+			<!-- <image :src="icoa" class="circle"></image> -->
+			<image :src="icob" class="circle"></image>
+			<view class="step">
+				<view class="slist">
+					<view class="tit">登记时间:</view>2024-11-27 10:03:27
+				</view>
+				<view class="slist">
+					<view class="tit">违停拍照:</view>
+					<view class="imgas">
+						<image :src="carc" @click="getPreview(idx,carc)"></image>
+						<image :src="carc"></image>
+						<image :src="carc"></image>
+						<image :src="carc"></image>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="rfbtn" @click="getNext">解除黑名单</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{},
+		data(){
+			return{
+				line:require('@/work/static/car/line.png'),
+				carc:require('@/work/static/car/carc.png'),
+				card:require('@/work/static/car/card.png'),
+				icoa:require('@/work/static/car/icoa.png'),
+				icob:require('@/work/static/car/icob.png'),
+				baseUrl:config.baseUrl,
+				datainfo:{
+					type:1,heiflag:true
+				},
+			}
+		},
+		onLoad: function() {
+		
+		},
+		methods:{
+			checkPermi, checkRole,
+			getPreview(idx,arr) {
+				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) {}
+				});
+			},
+			getDelFn(){
+				var that=this;
+				uni.showModal({
+					title: '解除黑名单',
+					content: "是否确认解除",
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							// that.filelist.splice(idx,1)
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			getOcrIdCard(obj){
+				var params={
+					image:obj.url,
+					idCardSide:obj.type
+				}
+				getOcrIdCard(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
+						}
+					}
+				})
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+.bgef{background: #EFF4FF;}
+.irecord{background: #FFFFFF;border-radius: 20rpx;flex: 1;padding-bottom: 110rpx;
+	.ctop{padding:20rpx 48rpx;margin-bottom:14rpx;
+		.imgs{width: 30rpx;height: 24rpx;margin-right: 12rpx;}
+		.tit{font-size: 32rpx;color: #272727;font-weight: bold;margin-right: 14rpx;}
+		.txt{font-weight: 500;font-size: 24rpx;
+			&.ca{color: #0256FD;}
+			&.cb{color: #FE5A0E;}	
+		}
+	}
+	.clists{padding: 22rpx 40rpx 22rpx;border-radius: 20rpx;box-sizing: border-box;
+			.clist{font-size: 26rpx;color: #272727;display: flex;line-height: 52rpx;
+				.tit{font-size: 26rpx;color: #272727;flex: 0 0 auto;min-width: 108rpx;text-align-last: justify;font-weight: bold;}		
+			}
+		}
+	.chtop{padding-top: 36rpx;margin-bottom: 32rpx;padding-right: 48rpx;
+		image{width: 14rpx;height: 48rpx;margin-right: 20rpx;}
+		view{font-weight: bold;font-size: 32rpx;color: #272727;}
+		.num{font-weight: 500;font-size: 24rpx;color: #AAAAAA;}
+	}
+	.steps{display: flex;padding: 0 32rpx 12rpx;position: relative;
+		&::after{content: '';background: #E6E6E6;width: 2rpx;position: absolute;top: 38rpx;bottom: -14rpx;left: 44rpx;}
+		.circle{width: 24rpx;height: 24rpx;margin-right: 24rpx;flex: 0 0 auto;margin-top: 14rpx;}
+		.step{
+			.slist{font-size: 26rpx;color: #272727;display: flex;line-height: 52rpx;margin-bottom: 6rpx;
+				.tit{font-weight: bold;text-align-last: justify;flex: 0 0 auto;min-width: 108rpx;}
+				.imgas{display: flex;align-items: center;flex-wrap: wrap;
+					image{width: 160rpx;height: 160rpx;margin-right: 30rpx;margin-bottom: 14rpx;}
+				}
+			}
+		}
+	}
+	
+}
+</style>

+ 171 - 0
property_ui/work/pages/car/index.vue

@@ -0,0 +1,171 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+			<view class="topa flexc">
+				<image :src="reset" class="resetimg" @click="getReset"></image>
+				<picker mode="date"   @change='bindDateChangea'>
+					<view class="chekt flexc">
+						<view>{{cxrq|| "选择日期"}}</view>
+						<image :src="up"></image>
+					</view>
+				</picker>
+				<view class="search flexc">
+					<image :src="search"></image>
+					<!-- confirm-type="search" @confirm="getConfirm" -->
+					<input placeholder="请输入车牌号进行搜索"  v-model="text"/>
+					<view class="btn" @click="getConfirm">搜索</view>
+				</view>
+			</view>
+			<view class="tabtop flexc">
+				<view class="tabt" :class="ttopval==ite.val?'act':''" v-for="(ite,idx) in ttoplist" :key="idx" @click="getTabtop(ite.val)">{{ite.tit}}</view>
+			</view>
+			<view class="tablst flexc">
+				<view class="tabs" :class="tabval==ite.val?'act':''" v-for="(ite,idx) in tablist" :key="idx" @click="getTabFn(ite.val)">{{ite.tit}}</view>
+			</view>
+		</view>
+		<!-- 列表 -->
+		<view class="carlists">
+			<car-list :datainfo="list" :topval="ttopval" :wtdt="wtdt" type='car'></car-list>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				reset:require('@/work/static/car/reset.png'),
+				up:require('@/work/static/car/up.png'),
+				car:require('@/work/static/car/car.png'),
+				cara:require('@/work/static/car/cara.png'),
+				carb:require('@/work/static/car/carb.png'),
+				search:require('@/work/static/car/search.png'),
+				cxrq:"",
+				text:'',
+				list:[{tit:'皖A IC520',type:1},{tit:'晋E KD783',type:2},],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+				ttopval:'jr',
+				tabval:'0',
+				ttoplist:[{tit:'进入车辆',val:'jr'},{tit:'驶离车辆',val:'sl'}],
+				tablist:[{tit:'全部',val:0},{tit:'小区车辆',val:1},{tit:'外来车辆',val:2}]
+			}
+		},
+		onLoad: function() {
+		
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			// getNextFn(){
+			// 	this.$tab.navigateTo("/work/pages/business/add")
+			// },
+			getTabtop(val){
+				this.ttopval=val
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.cxrq='';
+				this.text='';
+				this.getrefreshData()
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.cxrq=val;
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.car{padding-top: 314rpx;}
+.cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
+	.topa{padding: 20rpx ;
+		.resetimg{width: 36rpx;height: 36rpx;margin-right: 24rpx;flex: 0 0 auto;}
+		.chekt{min-width: 180rpx;
+			view{font-weight: 500;font-size: 26rpx;color: #272727;flex: 1;}
+			image{width: 24rpx;height: 16rpx;margin-left: 18rpx;flex: 0 0 auto;}
+		}
+		.search{flex: 1;margin-left: 16rpx;height: 64rpx;background: #EEEEEE;border-radius: 32rpx;border: 2rpx solid #E6E6E6;padding-left: 24rpx;box-sizing: border-box;
+		image{width: 32rpx;height: 34rpx;margin-right: 22rpx;flex: 0 0 auto;}
+		input{flex: 1;font-size: 26rpx;color: #272727;}
+		.btn{width: 100rpx;height: 64rpx;background: #3565ED;border-radius: 32rpx;flex: 0 0 auto;font-weight: bold;text-align: center;line-height: 64rpx;
+font-size: 26rpx;
+color: #FFFFFF;}
+		}
+	}
+	.tabtop{padding-bottom: 46rpx;
+		.tabt{font-weight: 500;font-size: 32rpx;color: #666666;position: relative;line-height: 56rpx;padding: 0 40rpx;margin-right: 6rpx;
+			&.act{font-weight: bold;font-size: 32rpx;color: #272727;
+			&::after{content: '';width: 40rpx;height: 10rpx;background: #0156FE;border-radius: 6rpx;position: absolute;left: 50%;margin-left: -20rpx;bottom: -10rpx;}
+			}
+		}
+	}
+	.tablst{background: #F3F3F0;padding:30rpx 16rpx 30rpx 46rpx;overflow: auto;
+		.tabs{height: 48rpx;background: #DADADA;border-radius: 24rpx;margin-right: 30rpx;font-weight: 500;display: flex;align-items: center;justify-content: center;padding: 0 24rpx;
+font-size: 26rpx;box-sizing: border-box;flex: 0 0 auto;color: #666666;
+			&.act{border: 2rpx solid #0256FD;background: #FFFFFF;color: #0256FD;}
+		}
+	}
+}
+.carlists{padding: 0 18rpx;}
+</style>

+ 202 - 0
property_ui/work/pages/manage/money.vue

@@ -0,0 +1,202 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+			<view class="topa flexc">
+				<image :src="reset" class="resetimg" @click="getReset"></image>
+				<picker mode="date"  fields="year"  @change='bindDateChangea'>
+					<view class="chekt flexc">
+						<view>{{cxrq|| "选择日期"}}</view>
+						<image :src="up"></image>
+					</view>
+				</picker>
+				<view class="search flexc">
+					<image :src="search"></image>
+					<!-- confirm-type="search" @confirm="getConfirm" -->
+					<input placeholder="请输入房号进行搜索"  v-model="text"/>
+					<view class="btn" @click="getConfirm">搜索</view>
+				</view>
+			</view>
+			<view class="mcont">
+				<image :src="contbg" class="contbg"></image>
+				<view class="mconta">
+					<view class="mcontb">
+						<view class="w50">
+							<view class="mctit">已缴物业费 /元</view>
+							<view class="mctxt over">1,482,800</view>
+						</view>
+						<view class="w50">
+							<view class="mctit">未缴物业费 /元</view>
+							<view class="mctxt over">281,600</view>
+						</view>
+					</view>
+					<view class="mcontc">
+						<view class="w50">
+							<view class="mctit mb10">车位费 /元</view>
+							<view class="mctxta">已缴费:<text>626,400</text></view>
+							<view class="mctxta">未缴费:<text>626,400</text></view>
+						</view>
+						<view class="w50">
+							<view class="mctit mb10">能耗费 /元</view>
+							<view class="mctxta">已缴费:<text>626,400</text></view>
+							<view class="mctxta">未缴费:<text>626,400</text></view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="tabtop flexc">
+				<view class="tabt" :class="ttopval==ite.val?'act':''" v-for="(ite,idx) in ttoplist" :key="idx" @click="getTabtop(ite.val)">{{ite.tit}}</view>
+			</view>
+		</view>
+		<!-- 列表 -->
+		<view class="carlists">
+			<car-list :datainfo="list" :topval="ttopval" :wtdt="wtdt" type='money' @getDetail="getDetail"></car-list>
+		</view>
+		<view class="rfbtn" @click="getAddFn">一键催缴</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				reset:require('@/work/static/car/reset.png'),
+				contbg:require('@/work/static/manage/contbg.png'),
+				search:require('@/work/static/car/search.png'),
+				up:require('@/work/static/car/up.png'),
+				cxrq:"",
+				text:'',
+				list:[{tit:'皖A IC520',type:1},{tit:'晋E KD783',type:2},],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+				ttopval:'0',
+				ttoplist:[{tit:'未缴费',val:0},{tit:'已缴费',val:1},]
+			}
+		},
+		onLoad: function() {
+		
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getDetail(){
+				this.$tab.navigateTo("/work/pages/manage/moneydetail")
+			},
+			getAddFn(){
+				
+			},
+			getTabtop(val){
+				this.ttopval=val
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.cxrq='';
+				this.text='';
+				this.getrefreshData()
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.cxrq=val;
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.car{padding: 630rpx 0 110rpx;}
+.cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
+	.topa{padding: 20rpx ;
+		.resetimg{width: 36rpx;height: 36rpx;margin-right: 24rpx;flex: 0 0 auto;}
+		.chekt{min-width: 180rpx;
+			view{font-weight: 500;font-size: 26rpx;color: #272727;flex: 1;}
+			image{width: 24rpx;height: 16rpx;margin-left: 18rpx;flex: 0 0 auto;}
+		}
+		.search{flex: 1;margin-left: 16rpx;height: 64rpx;background: #EEEEEE;border-radius: 32rpx;border: 2rpx solid #E6E6E6;padding-left: 24rpx;box-sizing: border-box;
+		image{width: 32rpx;height: 34rpx;margin-right: 22rpx;flex: 0 0 auto;}
+		input{flex: 1;font-size: 26rpx;color: #272727;}
+		.btn{width: 100rpx;height: 64rpx;background: #3565ED;border-radius: 32rpx;flex: 0 0 auto;font-weight: bold;text-align: center;line-height: 64rpx;
+font-size: 26rpx;
+color: #FFFFFF;}
+		}
+	}
+	.tabtop{padding-bottom: 46rpx;
+		.tabt{font-weight: 500;font-size: 32rpx;color: #666666;position: relative;line-height: 56rpx;padding: 0 40rpx;margin-right: 6rpx;
+			&.act{font-weight: bold;font-size: 32rpx;color: #272727;
+			&::after{content: '';width: 40rpx;height: 10rpx;background: #0156FE;border-radius: 6rpx;position: absolute;left: 50%;margin-left: -20rpx;bottom: -10rpx;}
+			}
+		}
+	}
+	.mcont{position: relative;margin-top: 12rpx;
+		.contbg{width: 100%;height: 382rpx;}
+		.mconta{position: absolute;left: 0;top: 0;width: 100%;height: 382rpx;box-sizing: border-box;padding: 28rpx 56rpx;
+			.w50{width: 50%;}
+			.mctit{font-weight: 500;font-size: 24rpx;color: #CFE1FF;}
+			.mctxt{font-size: 46rpx;color: #FFFFFF;font-weight: bold;margin-top: 26rpx;}
+			.mctxta{font-weight: bold;font-size: 26rpx;color: #FFFFFF;margin-bottom: 14rpx;
+				text{font-size: 30rpx;}
+			}
+			.mcontb{height: 124rpx;display: flex;}
+			.mcontc{display: flex;padding-top: 28rpx;}
+		}
+	}
+}
+.carlists{padding: 0 18rpx;}
+</style>

+ 160 - 0
property_ui/work/pages/manage/moneybill.vue

@@ -0,0 +1,160 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+			<!-- <view class="topa flexc">
+				<image :src="reset" class="resetimg" @click="getReset"></image>
+				<picker mode="date"  fields="year"  @change='bindDateChangea'>
+					<view class="chekt flexc">
+						<view>{{cxrq|| "选择日期"}}</view>
+						<image :src="up"></image>
+					</view>
+				</picker>
+				<view class="search flexc">
+					<image :src="search"></image>
+					<input placeholder="请输入房号进行搜索"  v-model="text"/>
+					<view class="btn" @click="getConfirm">搜索</view>
+				</view>
+			</view> -->
+			<view class="tabtop flexc">
+				<view class="tabt" :class="ttopval==ite.val?'act':''" v-for="(ite,idx) in ttoplist" :key="idx" @click="getTabtop(ite.val)">{{ite.tit}}</view>
+			</view>
+		</view>
+		<!-- 列表 -->
+		<view class="carlists">
+			<car-list :datainfo="list" :topval="ttopval" :wtdt="wtdt" type='moneybill' @getDetail="getDetail"></car-list>
+		</view>
+		<view class="rfbtn" @click="getAddFn">催缴</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				// reset:require('@/work/static/car/reset.png'),
+				// search:require('@/work/static/car/search.png'),
+				// up:require('@/work/static/car/up.png'),
+				cxrq:"",
+				text:'',
+				list:[{tit:'皖A IC520',type:1},{tit:'晋E KD783',type:2},],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+				ttopval:'0',
+				ttoplist:[{tit:'全部',val:0},{tit:'未缴费',val:1},{tit:'已缴费',val:2},]
+			}
+		},
+		onLoad: function() {
+		
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getDetail(){
+				this.$tab.navigateTo("/work/pages/manage/moneydetail")
+			},
+			getAddFn(){
+				
+			},
+			getTabtop(val){
+				this.ttopval=val
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.cxrq='';
+				this.text='';
+				this.getrefreshData()
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.cxrq=val;
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.car{padding: 154rpx 0 110rpx;}
+.cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
+	.topa{padding: 20rpx ;
+		.resetimg{width: 36rpx;height: 36rpx;margin-right: 24rpx;flex: 0 0 auto;}
+		.chekt{min-width: 180rpx;
+			view{font-weight: 500;font-size: 26rpx;color: #272727;flex: 1;}
+			image{width: 24rpx;height: 16rpx;margin-left: 18rpx;flex: 0 0 auto;}
+		}
+		.search{flex: 1;margin-left: 16rpx;height: 64rpx;background: #EEEEEE;border-radius: 32rpx;border: 2rpx solid #E6E6E6;padding-left: 24rpx;box-sizing: border-box;
+		image{width: 32rpx;height: 34rpx;margin-right: 22rpx;flex: 0 0 auto;}
+		input{flex: 1;font-size: 26rpx;color: #272727;}
+		.btn{width: 100rpx;height: 64rpx;background: #3565ED;border-radius: 32rpx;flex: 0 0 auto;font-weight: bold;text-align: center;line-height: 64rpx;
+font-size: 26rpx;
+color: #FFFFFF;}
+		}
+	}
+	.tabtop{padding-bottom: 46rpx;padding-top: 28rpx;
+		.tabt{font-weight: 500;font-size: 32rpx;color: #666666;position: relative;line-height: 56rpx;padding: 0 40rpx;margin-right: 6rpx;
+			&.act{font-weight: bold;font-size: 32rpx;color: #272727;
+			&::after{content: '';width: 40rpx;height: 10rpx;background: #0156FE;border-radius: 6rpx;position: absolute;left: 50%;margin-left: -20rpx;bottom: -10rpx;}
+			}
+		}
+	}
+}
+.carlists{padding: 0 18rpx;}
+</style>

+ 93 - 0
property_ui/work/pages/manage/moneydetail.vue

@@ -0,0 +1,93 @@
+<template>
+	<view class="mdetail">
+		<image :src="mbg" class="mbg"></image>
+		<view class="mdbox">
+			<view class="mdtop">
+				<view class="mdttit">2024/01 - 2024/12  应缴总额/元</view>
+				<view class="mdttxt">4307.20</view>
+			</view>
+			<view class="mdmain">
+				<view class="mdmit">业主信息</view>
+				<view class="mdlist">
+					<view class="mdltit">户主姓名</view>
+					<view>王宇宁</view>
+				</view>
+				<view class="mdlist">
+					<view class="mdltit">房号</view>
+					<view>1号楼3单元1204</view>
+				</view>
+				
+				<view class="mdmit">缴费详情</view>
+				<view class="mdlist">
+					<view class="mdltit">物业费用(元)</view>
+					<view>3247.20</view>
+				</view>
+				<view class="mdlist">
+					<view class="mdltit">车位费用(元)</view>
+					<view>960.00</view>
+				</view>
+				<view class="mdlist">
+					<view class="mdltit">能耗费用(元)</view>
+					<view>100.00</view>
+				</view>
+			</view>
+		</view>
+		<view class="pdlr12">
+			<view class="mdfbox" @click="getBillFn">
+				<view>历史账单</view>
+				<image :src="rimg"></image>
+			</view>
+		</view>
+		
+	<loading></loading>	
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{},
+		data(){
+			return{
+				mbg:require('@/work/static/manage/mbg.png'),
+				rimg:require('@/static/images/home/rimg.png'),
+			}
+		},
+		onLoad: function() {
+		
+		},
+		methods:{
+			checkPermi, checkRole,
+			getBillFn(){
+				this.$tab.navigateTo("/work/pages/manage/moneybill")
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.mdetail{background: linear-gradient(180deg, #4882EC 0%, #F3F3F0 100%) no-repeat;min-height: 100vh;background-position: top;background-size: 100% 548rpx;padding: 32rpx 18rpx;position: relative;}
+.mbg{width: 100%;height: 702rpx;margin-bottom: 20rpx;}
+.mdbox{position: absolute;left: 18rpx;height:702rpx;right: 18rpx;top: 32rpx;box-sizing: border-box;display: flex;flex-direction: column;
+	.mdtop{padding: 76rpx 52rpx 0;height: 208rpx;flex: 0 0 auto;position: relative;box-sizing: border-box;
+	&::after{content: '';position: absolute;left: 96rpx;right: 78rpx;height: 2rpx;border-bottom: 2rpx dashed #A7A7A7;bottom: 0;}
+		.mdttit{font-weight: 500;font-size: 24rpx;color: #666666;margin-bottom: 26rpx;}
+		.mdttxt{font-weight: bold;font-size: 40rpx;color: #272727;}
+	}
+	.mdmain{flex: 1;overflow: auto;padding: 24rpx 50rpx 0 52rpx;
+		.mdmit{font-weight: bold;font-size: 26rpx;color: #272727;margin-bottom: 26rpx;padding-top: 10rpx;}
+		.mdlist{display: flex;justify-content: space-between;margin-bottom: 24rpx;
+			.mdltit{min-width: 100rpx;flex: 0 0 auto;text-align-last: justify;margin-right: 12rpx;}
+			view{font-weight: 500;font-size: 26rpx;color: #666666;}
+		}
+	}
+}
+.mdfbox{height: 96rpx;background: #FFFFFF;border-radius: 20rpx;padding: 0 26rpx;box-sizing: border-box;display: flex;align-items: center;
+	image{width: 13rpx;height: 24rpx;}
+	view{font-weight: 500;font-size: 26rpx;color: #272727;flex: 1;margin-right: 4rpx;}
+}
+</style>

+ 239 - 0
property_ui/work/pages/people/comeadd.vue

@@ -0,0 +1,239 @@
+<template>
+	<view class="check">
+		<uni-forms ref="form" :model="datainfo">
+			<view class="cbox">
+				<view class="chtop flexc">
+					<image :src="line"></image>
+					<view>访客信息</view>
+				</view>
+				<view class="chmain">
+					<uni-forms-item label="访客姓名" name="realName">
+						<view class="flexc">
+							<uni-easyinput v-model="datainfo.realName"  :inputBorder='false' placeholder="请输入访客姓名" />
+							<uni-data-checkbox selectedColor="#0156FE" selectedTextColor="#272727" v-model="datainfo.sex" :localdata="sexs" />
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="来访人数" name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入来访人数" />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="来访事由" name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请选择或输入来访事由" />
+							<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</picker>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="来访门户" name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入门户号" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+				</view>
+			</view>
+			<view class="cbox">
+				<view class="chtop flexc">
+					<image :src="line"></image>
+					<view>驾车信息</view>
+				</view>
+				<view class="chmain">
+					<!-- <view class="upbox" @click="getaddImage">
+					<image :src="baseUrl+datainfo.front" class="img" v-if="datainfo.front"></image>
+					<image :src="car" class="addimg"></image>
+					<view>拍摄车辆照片自动识别</view>
+				</view> -->
+					<uni-forms-item label="是否驾车" name="realName">
+						<view class="flexc" @click="checkflag=!checkflag">
+							<view class="flex1"></view>
+							<image :src="check" v-if="checkflag" class="checkimg"></image>
+							<image :src="ncheck" v-else class="checkimg"></image>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="车牌号码" name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput v-model="datainfo.phonenumber" disabled :inputBorder='false' placeholder="拍照自动识别" />
+							<view class="aphoto" @click="getaddImage">
+								<image :src="aphoto"></image>
+							</view>
+							
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="手机号码" name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入手机号码" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+				</view>
+			</view>
+		</uni-forms>
+		<view class="pdlr12 mt63">
+			<view class="rhbtn" @click="getNext">确定添加</view>
+		</view>
+
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import {
+		checkPermi,
+		checkRole
+	} from "@/utils/permission"; // 权限判断函数
+	import {
+		uploadIdentify
+	} from '@/utils/common.js'
+	export default {
+		components: {},
+		data() {
+			return {
+				line: require('@/work/static/car/line.png'),
+				car: require('@/work/static/car/carico.png'),
+				rimg: require('@/work/static/people/rimg.png'),
+				aphoto: require('@/work/static/people/aphoto.png'),
+				check: require('@/work/static/people/check.png'),
+				ncheck: require('@/work/static/people/ncheck.png'),
+				baseUrl: config.baseUrl,
+				checkflag:true,
+				datainfo: {
+					sex:0,
+					realName: '',
+					idCard: '',
+					address: '',
+					expirationDate: '',
+					phonenumber: '',
+					front: '',
+					back: '',
+				},
+				syqxidx:'',
+				sexs: [{
+					text: '男',
+					value: 0
+				}, {
+					text: '女',
+					value: 1
+				}],
+			}
+		},
+		onLoad: function() {
+
+		},
+		methods: {
+			checkPermi,
+			checkRole,
+			bindDateChange(e){
+				var val=e.detail.value;
+				// this.datainfo.applicationBank=this.sdyhlist[val].value;
+				// this.applicationBank=this.sdyhlist[val].label;
+			},
+			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,
+					success: function(res) {
+						let img = res.tempFilePaths;
+						if (img.length + file.length > count) {
+							uni.showToast({
+								title: '最多上传' + count + '张图片',
+								icon: 'none',
+								duration: 2000
+							})
+						} else {
+							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)
+								}
+							})
+						}
+					}
+				});
+			},
+			getOcrIdCard(obj) {
+				var params = {
+					image: obj.url,
+					idCardSide: obj.type
+				}
+				getOcrIdCard(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
+						}
+					}
+				})
+			}
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.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 /deep/ .uni-forms-item:last-child{border: none;}
+.check /deep/ .uni-forms-item__label{font-weight: bold;font-size: 26rpx;color: #222327;flex: 0 0 auto;width: auto !important;}
+.check /deep/ .uni-easyinput{flex: 1;text-align: right;font-size: 26rpx;color: #222327;}
+.check /deep/ .uni-easyinput__content-textarea{min-height: 40rpx;font-size: 26rpx;}
+.check /deep/ .uni-easyinput__placeholder-class{font-size: 26rpx;color: #AAAAAA;}
+.check /deep/ .uni-input-input{font-size: 26rpx;}
+.check /deep/ .uni-textarea-textarea{font-size: 26rpx;}
+.check /deep/ .is-disabled{color: #222327;background-color: #ffffff !important;}
+.check /deep/ .uni-data-checklist .checklist-group .checklist-box{margin:10rpx 8rpx 10rpx 16rpx;}
+.check /deep/ .uni-data-checklist{flex: 0 0 auto;}
+.check{min-height: 100vh;padding: 20rpx 18rpx 24rpx;box-sizing: border-box;}
+.cbox{background: #FFFFFF;border-radius: 20rpx;flex: 1;margin-bottom: 24rpx;
+	.chtop{padding-top: 32rpx;margin-bottom: 8rpx;
+		image{width: 14rpx;height: 48rpx;margin-right: 20rpx;}
+		view{font-weight: bold;font-size: 32rpx;color: #272727;}
+	}
+	.chmain{
+		padding: 0 32rpx;
+		.upbox{height: 224rpx;background: #EFF4FF;border-radius: 20rpx;display: flex;align-items: center;justify-content: center;flex-direction: column;margin-bottom: 8rpx;overflow: auto;
+			.img{width: 100%;height: 100%;}
+			.addimg{width: 70rpx;height: 70rpx;margin-bottom: 16rpx;}
+			view{font-weight: bold;font-size: 26rpx;color: #4C6686;}
+		}
+		.rimg{width: 16rpx;height: 28rpx;flex: 0 0 auto;margin-left: 20rpx;
+			image{width: 100%;height: 100%;}
+		}
+		.checkimg{width: 80rpx;height: 40rpx;margin-right: 8rpx;}
+		.aphoto{padding: 0 24rpx;border-left: 2rpx solid #e6e6e6;margin-left: 26rpx;
+			image{width: 40rpx;height: 38rpx;}
+		}
+	}
+	
+}
+</style>

+ 158 - 0
property_ui/work/pages/people/comegl.vue

@@ -0,0 +1,158 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+			<view class="topa flexc">
+				<image :src="reset" class="resetimg" @click="getReset"></image>
+				<picker mode="date"   @change='bindDateChangea'>
+					<view class="chekt flexc">
+						<view>{{cxrq|| "选择日期"}}</view>
+						<image :src="up"></image>
+					</view>
+				</picker>
+				<view class="search flexc">
+					<image :src="search"></image>
+					<!-- confirm-type="search" @confirm="getConfirm" -->
+					<input placeholder="请输入房号进行搜索"  v-model="text"/>
+					<view class="btn" @click="getConfirm">搜索</view>
+				</view>
+			</view>
+			<view class="tabtop flexc">
+				<view class="tabt" :class="ttopval==ite.val?'act':''" v-for="(ite,idx) in ttoplist" :key="idx" @click="getTabtop(ite.val)">{{ite.tit}}</view>
+			</view>
+		</view>
+		<!-- 列表 -->
+		<view class="carlists">
+			<car-list :datainfo="list" :topval="ttopval" :wtdt="wtdt" type='comepeo'></car-list>
+		</view>
+		<view class="rfbtn" @click="getAddFn">添加访客</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				reset:require('@/work/static/car/reset.png'),
+				search:require('@/work/static/car/search.png'),
+				up:require('@/work/static/car/up.png'),
+				cxrq:"",
+				text:'',
+				list:[{tit:'皖A IC520',type:1},{tit:'晋E KD783',type:2},],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+				ttopval:'0',
+				ttoplist:[{tit:'全部',val:0},{tit:'预约来访',val:1},{tit:'已来访',val:2}]
+			}
+		},
+		onLoad: function() {
+		
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getAddFn(){
+				this.$tab.navigateTo("/work/pages/people/comeadd")
+			},
+			getTabtop(val){
+				this.ttopval=val
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.cxrq='';
+				this.text='';
+				this.getrefreshData()
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.cxrq=val;
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.car{padding: 230rpx 0 110rpx;}
+.cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
+	.topa{padding: 20rpx ;
+		.resetimg{width: 36rpx;height: 36rpx;margin-right: 24rpx;flex: 0 0 auto;}
+		.chekt{min-width: 180rpx;
+			view{font-weight: 500;font-size: 26rpx;color: #272727;flex: 1;}
+			image{width: 24rpx;height: 16rpx;margin-left: 18rpx;flex: 0 0 auto;}
+		}
+		.search{flex: 1;margin-left: 16rpx;height: 64rpx;background: #EEEEEE;border-radius: 32rpx;border: 2rpx solid #E6E6E6;padding-left: 24rpx;box-sizing: border-box;
+		image{width: 32rpx;height: 34rpx;margin-right: 22rpx;flex: 0 0 auto;}
+		input{flex: 1;font-size: 26rpx;color: #272727;}
+		.btn{width: 100rpx;height: 64rpx;background: #3565ED;border-radius: 32rpx;flex: 0 0 auto;font-weight: bold;text-align: center;line-height: 64rpx;
+font-size: 26rpx;
+color: #FFFFFF;}
+		}
+	}
+	.tabtop{padding-bottom: 46rpx;
+		.tabt{font-weight: 500;font-size: 32rpx;color: #666666;position: relative;line-height: 56rpx;padding: 0 40rpx;margin-right: 6rpx;
+			&.act{font-weight: bold;font-size: 32rpx;color: #272727;
+			&::after{content: '';width: 40rpx;height: 10rpx;background: #0156FE;border-radius: 6rpx;position: absolute;left: 50%;margin-left: -20rpx;bottom: -10rpx;}
+			}
+		}
+	}
+}
+.carlists{padding: 0 18rpx;}
+</style>

+ 151 - 0
property_ui/work/pages/people/index.vue

@@ -0,0 +1,151 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+			<view class="topa flexc">
+				<image :src="reset" class="resetimg" @click="getReset"></image>
+				<picker range-key='dictLabel' 	:range="jclxlist"    @change='bindDateChangea'>
+					<view class="chekt flexc">
+						<view class="over">{{sfxx|| "选择身份"}}</view>
+						<image :src="up"></image>
+					</view>
+				</picker>
+				<view class="search flexc">
+					<image :src="search"></image>
+					<!-- confirm-type="search" @confirm="getConfirm" -->
+					<input placeholder="请输入人员姓名进行搜索"  v-model="text"/>
+					<view class="btn" @click="getConfirm">搜索</view>
+				</view>
+			</view>
+		</view>
+		<!-- 列表 -->
+		<view class="carlists">
+			<car-list :datainfo="list" :wtdt="wtdt" type='people'></car-list>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				reset:require('@/work/static/car/reset.png'),
+				up:require('@/work/static/car/up.png'),
+				car:require('@/work/static/car/car.png'),
+				cara:require('@/work/static/car/cara.png'),
+				carb:require('@/work/static/car/carb.png'),
+				search:require('@/work/static/car/search.png'),
+				sfxx:"",
+				text:'',
+				jclxlist:[{dictLabel:'党员',dictValue:'0'}],
+				list:[{tit:'皖A IC520',type:1,hzflag:true,sex:1,zhanflag:false},{tit:'晋E KD783',type:2,hzflag:false,sex:0,zhanflag:false},],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+			}
+		},
+		onLoad: function() {
+		
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			// getNextFn(){
+			// 	this.$tab.navigateTo("/work/pages/business/add")
+			// },
+			getTabtop(val){
+				this.ttopval=val
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.sfxx='';
+				this.text='';
+				this.getrefreshData()
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.sfxx=this.jclxlist[val].dictLabel;
+				// this.orderFoodType=this.jclxlist[val].dictValue;
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.car{padding-top: 140rpx;}
+.cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
+	.topa{padding: 20rpx 20rpx 32rpx;
+		.resetimg{width: 36rpx;height: 36rpx;margin-right: 24rpx;flex: 0 0 auto;}
+		.chekt{width: 150rpx;overflow: hidden;
+			view{font-weight: 500;font-size: 26rpx;color: #272727;flex: 1;}
+			image{width: 24rpx;height: 16rpx;margin-left: 18rpx;flex: 0 0 auto;}
+		}
+		.search{flex: 1;margin-left: 16rpx;height: 64rpx;background: #EEEEEE;border-radius: 32rpx;border: 2rpx solid #E6E6E6;padding-left: 24rpx;box-sizing: border-box;
+		image{width: 32rpx;height: 34rpx;margin-right: 22rpx;flex: 0 0 auto;}
+		input{flex: 1;font-size: 26rpx;color: #272727;}
+		.btn{width: 100rpx;height: 64rpx;background: #3565ED;border-radius: 32rpx;flex: 0 0 auto;font-weight: bold;text-align: center;line-height: 64rpx;
+font-size: 26rpx;
+color: #FFFFFF;}
+		}
+	}
+
+}
+.carlists{padding: 0 18rpx;}
+</style>

+ 152 - 0
property_ui/work/pages/people/staff.vue

@@ -0,0 +1,152 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+			<view class="topa flexc">
+				<image :src="reset" class="resetimg" @click="getReset"></image>
+				<picker range-key='dictLabel' 	:range="jclxlist"    @change='bindDateChangea'>
+					<view class="chekt flexc">
+						<view class="over">{{sfxx|| "选择身份"}}</view>
+						<image :src="up"></image>
+					</view>
+				</picker>
+				<view class="search flexc">
+					<image :src="search"></image>
+					<!-- confirm-type="search" @confirm="getConfirm" -->
+					<input placeholder="请输入人员姓名进行搜索"  v-model="text"/>
+					<view class="btn" @click="getConfirm">搜索</view>
+				</view>
+			</view>
+		</view>
+		<!-- 列表 -->
+		<view class="carlists">
+			<car-list :datainfo="list" :wtdt="wtdt" type='staff'></car-list>
+		</view>
+		<view class="rfbtn" @click="getAddFn">添加维修人员</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				reset:require('@/work/static/car/reset.png'),
+				up:require('@/work/static/car/up.png'),
+				car:require('@/work/static/car/car.png'),
+				cara:require('@/work/static/car/cara.png'),
+				carb:require('@/work/static/car/carb.png'),
+				search:require('@/work/static/car/search.png'),
+				sfxx:"",
+				text:'',
+				jclxlist:[{dictLabel:'党员',dictValue:'0'}],
+				list:[{tit:'皖A IC520',type:1,hzflag:true,sex:1},{tit:'晋E KD783',type:2,hzflag:false,sex:0,},],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+			}
+		},
+		onLoad: function() {
+		
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getAddFn(){
+				this.$tab.navigateTo("/work/pages/people/staffadd")
+			},
+			getTabtop(val){
+				this.ttopval=val
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.sfxx='';
+				this.text='';
+				this.getrefreshData()
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.sfxx=this.jclxlist[val].dictLabel;
+				// this.orderFoodType=this.jclxlist[val].dictValue;
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.car{padding: 140rpx 0 110rpx;}
+.cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
+	.topa{padding: 20rpx 20rpx 32rpx;
+		.resetimg{width: 36rpx;height: 36rpx;margin-right: 24rpx;flex: 0 0 auto;}
+		.chekt{width: 150rpx;overflow: hidden;
+			view{font-weight: 500;font-size: 26rpx;color: #272727;flex: 1;}
+			image{width: 24rpx;height: 16rpx;margin-left: 18rpx;flex: 0 0 auto;}
+		}
+		.search{flex: 1;margin-left: 16rpx;height: 64rpx;background: #EEEEEE;border-radius: 32rpx;border: 2rpx solid #E6E6E6;padding-left: 24rpx;box-sizing: border-box;
+		image{width: 32rpx;height: 34rpx;margin-right: 22rpx;flex: 0 0 auto;}
+		input{flex: 1;font-size: 26rpx;color: #272727;}
+		.btn{width: 100rpx;height: 64rpx;background: #3565ED;border-radius: 32rpx;flex: 0 0 auto;font-weight: bold;text-align: center;line-height: 64rpx;
+font-size: 26rpx;
+color: #FFFFFF;}
+		}
+	}
+
+}
+.carlists{padding: 0 6rpx;}
+</style>

+ 205 - 0
property_ui/work/pages/people/staffadd.vue

@@ -0,0 +1,205 @@
+<template>
+	<view class="check">
+		<uni-forms ref="form" :model="datainfo">
+			<view class="cbox">
+				<view class="chtop flexc">
+					<image :src="line"></image>
+					<view>维修人员信息</view>
+				</view>
+				<view class="chmain">
+					<uni-forms-item label="人员姓名" name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入人员姓名" />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="人员性别" name="realName">
+						<view class="flexc">
+							<view class="flex1"></view>
+							<uni-data-checkbox selectedColor="#0156FE" selectedTextColor="#272727" v-model="datainfo.sex" :localdata="sexs" />
+						</view>
+					</uni-forms-item>
+					
+					<uni-forms-item label="维修类别" name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请选择或输入维修类别" />
+							<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</picker>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="手机号码" name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入手机号码" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+				</view>
+			</view>
+		</uni-forms>
+		<view class="pdlr12 mt55">
+			<view class="rhbtn" @click="getNext">确定</view>
+		</view>
+
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import {
+		checkPermi,
+		checkRole
+	} from "@/utils/permission"; // 权限判断函数
+	import {
+		uploadIdentify
+	} from '@/utils/common.js'
+	export default {
+		components: {},
+		data() {
+			return {
+				line: require('@/work/static/car/line.png'),
+				car: require('@/work/static/car/carico.png'),
+				rimg: require('@/work/static/people/rimg.png'),
+				aphoto: require('@/work/static/people/aphoto.png'),
+				check: require('@/work/static/people/check.png'),
+				ncheck: require('@/work/static/people/ncheck.png'),
+				baseUrl: config.baseUrl,
+				checkflag:true,
+				datainfo: {
+					sex:0,
+					realName: '',
+					idCard: '',
+					address: '',
+					expirationDate: '',
+					phonenumber: '',
+					front: '',
+					back: '',
+				},
+				syqxidx:'',
+				sexs: [{
+					text: '男',
+					value: 0
+				}, {
+					text: '女',
+					value: 1
+				}],
+			}
+		},
+		onLoad: function() {
+
+		},
+		methods: {
+			checkPermi,
+			checkRole,
+			bindDateChange(e){
+				var val=e.detail.value;
+				// this.datainfo.applicationBank=this.sdyhlist[val].value;
+				// this.applicationBank=this.sdyhlist[val].label;
+			},
+			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,
+					success: function(res) {
+						let img = res.tempFilePaths;
+						if (img.length + file.length > count) {
+							uni.showToast({
+								title: '最多上传' + count + '张图片',
+								icon: 'none',
+								duration: 2000
+							})
+						} else {
+							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)
+								}
+							})
+						}
+					}
+				});
+			},
+			getOcrIdCard(obj) {
+				var params = {
+					image: obj.url,
+					idCardSide: obj.type
+				}
+				getOcrIdCard(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
+						}
+					}
+				})
+			}
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.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 /deep/ .uni-forms-item:last-child{border: none;}
+.check /deep/ .uni-forms-item__label{font-weight: bold;font-size: 26rpx;color: #222327;flex: 0 0 auto;width: auto !important;}
+.check /deep/ .uni-easyinput{flex: 1;text-align: right;font-size: 26rpx;color: #222327;}
+.check /deep/ .uni-easyinput__content-textarea{min-height: 40rpx;font-size: 26rpx;}
+.check /deep/ .uni-easyinput__placeholder-class{font-size: 26rpx;color: #AAAAAA;}
+.check /deep/ .uni-input-input{font-size: 26rpx;}
+.check /deep/ .uni-textarea-textarea{font-size: 26rpx;}
+.check /deep/ .is-disabled{color: #222327;background-color: #ffffff !important;}
+.check /deep/ .uni-data-checklist .checklist-group .checklist-box{margin:10rpx 8rpx 10rpx 16rpx;}
+.check /deep/ .uni-data-checklist{flex: 0 0 auto;}
+.check{min-height: 100vh;padding: 20rpx 18rpx 24rpx;box-sizing: border-box;}
+.cbox{background: #FFFFFF;border-radius: 20rpx;flex: 1;margin-bottom: 24rpx;
+	.chtop{padding-top: 32rpx;margin-bottom: 8rpx;
+		image{width: 14rpx;height: 48rpx;margin-right: 20rpx;}
+		view{font-weight: bold;font-size: 32rpx;color: #272727;}
+	}
+	.chmain{
+		padding: 0 32rpx;
+		.upbox{height: 224rpx;background: #EFF4FF;border-radius: 20rpx;display: flex;align-items: center;justify-content: center;flex-direction: column;margin-bottom: 8rpx;overflow: auto;
+			.img{width: 100%;height: 100%;}
+			.addimg{width: 70rpx;height: 70rpx;margin-bottom: 16rpx;}
+			view{font-weight: bold;font-size: 26rpx;color: #4C6686;}
+		}
+		.rimg{width: 16rpx;height: 28rpx;flex: 0 0 auto;margin-left: 20rpx;
+			image{width: 100%;height: 100%;}
+		}
+		.checkimg{width: 80rpx;height: 40rpx;margin-right: 8rpx;}
+		.aphoto{padding: 0 24rpx;border-left: 2rpx solid #e6e6e6;margin-left: 26rpx;
+			image{width: 40rpx;height: 38rpx;}
+		}
+	}
+	
+}
+</style>

+ 161 - 0
property_ui/work/pages/service/complaint.vue

@@ -0,0 +1,161 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+<!-- 			<view class="topa flexc">
+				<image :src="reset" class="resetimg" @click="getReset"></image>
+				<picker mode="date"   @change='bindDateChangea'>
+					<view class="chekt flexc">
+						<view>{{cxrq|| "选择日期"}}</view>
+						<image :src="up"></image>
+					</view>
+				</picker>
+				<view class="search flexc">
+					<image :src="search"></image>
+					<input placeholder="请输入房号进行搜索"  v-model="text"/>
+					<view class="btn" @click="getConfirm">搜索</view>
+				</view>
+			</view> -->
+			<view class="tabtop flexc">
+				<view class="tabt" :class="ttopval==ite.val?'act':''" v-for="(ite,idx) in ttoplist" :key="idx" @click="getTabtop(ite.val)">{{ite.tit}}</view>
+			</view>
+		</view>
+		<!-- 列表 -->
+		<view class="carlists">
+			<car-list :datainfo="list" :topval="ttopval" :wtdt="wtdt" type='complaint' @getDetail="getDetail"></car-list>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				reset:require('@/work/static/car/reset.png'),
+				search:require('@/work/static/car/search.png'),
+				up:require('@/work/static/car/up.png'),
+				cxrq:"",
+				text:'',
+				list:[{tit:'皖A IC520',type:1,right:0},{tit:'晋E KD783',type:2,right:0},],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+				ttopval:'0',
+				ttoplist:[{tit:'全部',val:0},{tit:'待回复',val:1},{tit:'已回复',val:2},{tit:'已完成',val:2}]
+			}
+		},
+		onLoad: function() {
+		
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getDetail(){
+				this.$tab.navigateTo("/work/pages/service/warrantydetail")
+			},
+			getTabtop(val){
+				this.ttopval=val
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.cxrq='';
+				this.text='';
+				this.getrefreshData()
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.cxrq=val;
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						var newArr=JSON.parse(JSON.stringify(res.rows))
+						newArr.forEach(ite=>{
+							ite.right=0;
+						})
+						// console.log(newArr,555)
+						if (this.pageNum == 1) {
+							this.list = newArr;
+						} else {
+							this.list = this.list.concat(newArr)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.car{padding: 152rpx 0 0rpx;}
+.cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
+	.topa{padding: 20rpx ;
+		.resetimg{width: 36rpx;height: 36rpx;margin-right: 24rpx;flex: 0 0 auto;}
+		.chekt{min-width: 180rpx;
+			view{font-weight: 500;font-size: 26rpx;color: #272727;flex: 1;}
+			image{width: 24rpx;height: 16rpx;margin-left: 18rpx;flex: 0 0 auto;}
+		}
+		.search{flex: 1;margin-left: 16rpx;height: 64rpx;background: #EEEEEE;border-radius: 32rpx;border: 2rpx solid #E6E6E6;padding-left: 24rpx;box-sizing: border-box;
+		image{width: 32rpx;height: 34rpx;margin-right: 22rpx;flex: 0 0 auto;}
+		input{flex: 1;font-size: 26rpx;color: #272727;}
+		.btn{width: 100rpx;height: 64rpx;background: #3565ED;border-radius: 32rpx;flex: 0 0 auto;font-weight: bold;text-align: center;line-height: 64rpx;
+font-size: 26rpx;
+color: #FFFFFF;}
+		}
+	}
+	.tabtop{padding-bottom: 46rpx;padding-top: 26rpx;
+		.tabt{font-weight: 500;font-size: 32rpx;color: #666666;position: relative;line-height: 56rpx;padding: 0 40rpx;
+			&.act{font-weight: bold;font-size: 32rpx;color: #272727;
+			&::after{content: '';width: 40rpx;height: 10rpx;background: #0156FE;border-radius: 6rpx;position: absolute;left: 50%;margin-left: -20rpx;bottom: -10rpx;}
+			}
+		}
+	}
+}
+.carlists{padding: 0 18rpx;}
+</style>

+ 187 - 0
property_ui/work/pages/service/patrol.vue

@@ -0,0 +1,187 @@
+<template>
+	<view :style="'padding-top:'+nvaHeight+'px;'">
+		<view class="navbox">
+			<uni-nav-bar title="今日巡更" left-icon="left" @clickLeft="getBackFn"  color="#161616" :background-color="backgroundColor" :border="false" statusBar='true' fixed="true">	
+			</uni-nav-bar>
+			<view class="pfbox" :style="'background-color:'+backgroundColor">
+				<view class="patop">
+					<view class="tit" @click="getRecordFn">巡更记录</view>
+					<view class="txt" @click="getSetFn">巡更点设置</view>
+				</view>
+				<view class="patabs flexc">
+					<view class="patab cof7" @click="tabval=0">
+						<view class="pattit">25</view>
+						<view class="pattxt">巡更点</view>
+						<image :src="linea" class="line" v-if="tabval==0"></image>
+					</view>
+					<view class="patab co02" @click="tabval=1">
+						<view class="pattit">25</view>
+						<view class="pattxt">已巡更</view>
+						<image :src="lineb" class="line" v-if="tabval==1"></image>
+					</view>
+					<view class="patab cof6" @click="tabval=2">
+						<view class="pattit">25</view>
+						<view class="pattxt">未巡更</view>
+						<image :src="linec" class="line" v-if="tabval==2"></image>
+					</view>
+				</view>
+			</view>
+		</view>
+		<image :src="pbg" class="navbg"></image>
+		<view class="wymain">
+			<view class="pfbox" style="opacity: 0;">
+				<view class="patop">
+					<view class="tit">巡更记录</view>
+					<view class="txt">巡更点设置</view>
+				</view>
+				<view class="patabs flexc">
+					<view class="patab cof7" @click="tabval=0">
+						<view class="pattit">25</view>
+						<view class="pattxt">巡更点</view>
+						<image :src="linea" class="line" v-if="tabval==0"></image>
+					</view>
+					<view class="patab co02" @click="tabval=1">
+						<view class="pattit">25</view>
+						<view class="pattxt">已巡更</view>
+						<image :src="lineb" class="line" v-if="tabval==1"></image>
+					</view>
+					<view class="patab cof6" @click="tabval=2">
+						<view class="pattit">25</view>
+						<view class="pattxt">未巡更</view>
+						<image :src="linec" class="line" v-if="tabval==2"></image>
+					</view>
+				</view>
+			</view>
+			<!-- 列表 -->
+			<view class="carlists">
+				<car-list :datainfo="list" :wtdt="wtdt" type='patrol' @getDetail="getDetail" @getAddFn="getAddFn"></car-list>
+			</view>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				backgroundColor: "transparent",
+				pbg:require("@/work/static/service/pbg.png"),
+				plbg:require("@/work/static/service/plbg.png"),
+				linea:require("@/work/static/service/linea.png"),
+				lineb:require("@/work/static/service/lineb.png"),
+				linec:require("@/work/static/service/linec.png"),
+				list:[{tit:'皖A IC520',type:1},{tit:'晋E KD783',type:2},],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+				nvaHeight:44,
+				tabval:0,
+			}
+		},
+		onPageScroll(e) {
+			var scrollTop = Number(e.scrollTop);
+			if (scrollTop > 0) {
+				this.backgroundColor = '#CDDEFF'
+			} else {
+				this.backgroundColor = 'transparent'
+			}
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		onLoad: function() {
+			uni.getSystemInfo({
+				success: (e) => {
+					this.nvaHeight = Number(e.statusBarHeight)+44;
+				}
+			})
+		},
+		methods:{
+			checkPermi, checkRole,
+			getDetail(){
+				this.$tab.navigateTo("/work/pages/service/patroldetail")
+			},
+			getRecordFn(){
+				this.$tab.navigateTo("/work/pages/service/patrolrecord")
+			},
+			getSetFn(){
+				this.$tab.navigateTo("/work/pages/service/patrolset")
+			},
+			getAddFn(){
+				this.$tab.navigateTo("/work/pages/service/patroladd")
+			},
+			getBackFn(){
+				uni.navigateBack({
+					delta:1
+				})
+			},
+			getDataFn(){
+				return
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.navbox{position: fixed;left: 0;right: 0;top: 0;z-index: 4;	}
+.navbg{width: 100%;height: 578rpx;z-index: 0;}
+.wymain{z-index: 2;position: relative;}
+.carlists{padding: 0 18rpx;}
+.patop{display: flex;justify-content: space-between;padding-top: 20rpx;margin-bottom: 28rpx;
+	.tit{font-weight: 500;font-size: 26rpx;color: #304367;width: 152rpx;height: 58rpx;border-radius: 0 29rpx 29rpx 0;background-color: #AEC3EB;line-height: 58rpx;padding-left: 22rpx;
+	}
+	.txt{font-weight: 500;font-size: 26rpx;color: #304367;padding-right: 20rpx;}	
+}
+.patabs{
+	padding: 0 26rpx;margin-bottom:40rpx;
+	.patab{margin: 0 16rpx;width: 200rpx;height: 124rpx;background: #FFFFFF;border-radius: 20rpx;padding-top: 16rpx;text-align: center;position: relative;
+		.pattit{font-size: 40rpx;font-weight: bold;margin-bottom: 6rpx;}
+		.line{position: absolute;bottom: -12rpx;left: 4rpx;width: 192rpx;height: 20rpx;}
+		
+		.pattxt{font-weight: 500;font-size: 22rpx;}
+	}
+}
+</style>

+ 235 - 0
property_ui/work/pages/service/patroladd.vue

@@ -0,0 +1,235 @@
+<template>
+	<view class="check">
+		<uni-forms ref="form" :model="datainfo">
+			<view class="cbox">
+				<view class="patlist">
+					<view class="pattop flexc">
+						<image :src="home" class="imgs"></image>
+						<view class="tit">幸福小区1栋2单元电梯间</view>
+						<view class="flex1"></view>
+					</view>
+					<view class="patlistr">
+						<view class="clist"><view class="tit">巡检类型</view>:设备维修</view>
+						<view class="clist"><view class="tit">巡检时间</view>:2024-11-27 10:00</view>
+						<view class="clist"><view class="tit">巡检路线</view>:幸福小区1号楼1-2单元</view>
+						<view class="clist"><view class="tit">巡检人</view>:刘兵琦</view>
+					</view>
+				</view>
+			</view>
+			<view class="cbox" style="padding-bottom: 98rpx;">
+				<view class="chmain">
+					<uni-forms-item label="巡检结果" name="phonenumber">
+						<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+							<view class="flexc">
+								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择是否正常'}}</view>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</view>
+						</picker>
+					</uni-forms-item>
+					<uni-easyinput maxlength='-1' type="textarea" autoHeight v-model="datainfo.companyIntroduction" :inputBorder='false' placeholder="可详细描述巡检结果…" />
+					<view class="voice mb20">
+						<view class="flexc">
+							<image :src="voice"></image>
+							语音输入
+						</view>
+					</view>
+					<!-- 图片 -->
+					<view class="imgs">
+						<view class="img" @click="getPreview">
+							<image :src="photo" class="pico"></image>
+							<image :src="del" class="del" @click="getDelFn"></image>
+						</view>
+						<view class="img" @click="getPreview">
+							<image :src="photo" class="pico"></image>
+							<image :src="del" class="del" @click="getDelFn"></image>
+						</view>
+						<view class="img" @click="getPreview">
+							<image :src="photo" class="pico"></image>
+							<image :src="del" class="del" @click="getDelFn"></image>
+						</view>
+						<view class="img" @click="getPreview">
+							<image :src="photo" class="pico"></image>
+							<image :src="del" class="del" @click="getDelFn"></image>
+						</view>
+						<view class="addbox" @click="getaddImage">
+							<image :src="photo" class="pico"></image>
+							<view>添加图片</view>
+						</view>
+					</view>
+				</view>
+				<view class="pdlr12 mt63">
+					<view class="rhbtn" @click="getNext">提交信息</view>
+				</view>
+			</view>
+		</uni-forms>
+		
+
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import {checkPermi,checkRole} from "@/utils/permission"; // 权限判断函数
+	import {uploadmore} from '@/utils/common.js'
+	export default {
+		components: {},
+		data() {
+			return {
+				voice: require('@/work/static/service/voice.png'),
+				home:require("@/work/static/service/home.png"),
+				photo:require("@/work/static/service/photo.png"),
+				del:require('@/work/static/car/del.png'),
+				rimg: require('@/work/static/people/rimg.png'),
+				baseUrl: config.baseUrl,
+				checkflag:true,
+				datainfo: {
+					sex:0,
+				},
+				syqxidx:'',
+				sexs: [{
+					text: '男',
+					value: 0
+				}, {
+					text: '女',
+					value: 1
+				}],
+			}
+		},
+		onLoad: function() {
+
+		},
+		methods: {
+			checkPermi,
+			checkRole,
+			bindDateChange(e){
+				var val=e.detail.value;
+				// this.datainfo.applicationBank=this.sdyhlist[val].value;
+				// this.applicationBank=this.sdyhlist[val].label;
+			},
+			getPreview(idx,arr) {
+				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) {}
+				});
+			},
+			getDelFn(){
+				var that=this;
+				uni.showModal({
+					title: '确认删除',
+					content: "是否确认删除",
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							// that.filelist.splice(idx,1)
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			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,
+					success:function(res){
+						let img= res.tempFilePaths;
+						if(img.length + file.length > count){
+							uni.showToast({
+								title: '最多上传'+count+'张图片',
+								icon: 'none',
+								duration: 2000
+							})
+						}else{
+							let imglen = res.tempFilePaths.length;
+							var fuwufile = [];
+							uploadmore('/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;
+								// }
+							})	
+						}
+					}
+				});
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.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 /deep/ .uni-forms-item:last-child{border: none;}
+.check /deep/ .uni-forms-item__label{font-weight: bold;font-size: 26rpx;color: #222327;flex: 0 0 auto;width: auto !important;}
+.check /deep/ .uni-easyinput{flex: 1;text-align: left;font-size: 26rpx;color: #222327;padding-left: 12rpx;min-height: 200rpx;}
+.check /deep/ .uni-easyinput__content-textarea{min-height: 40rpx;font-size: 26rpx;}
+.check /deep/ .uni-easyinput__placeholder-class{font-size: 26rpx;color: #AAAAAA;}
+.check /deep/ .uni-input-input{font-size: 26rpx;}
+.check /deep/ .uni-textarea-textarea{font-size: 26rpx;}
+.check /deep/ .is-disabled{color: #222327;background-color: #ffffff !important;}
+.check /deep/ .uni-data-checklist .checklist-group .checklist-box{margin:10rpx 8rpx 10rpx 16rpx;}
+.check /deep/ .uni-data-checklist{flex: 0 0 auto;}
+.check{min-height: 100vh;padding: 20rpx 18rpx 24rpx;box-sizing: border-box;}
+.cbox{background: #FFFFFF;border-radius: 20rpx;flex: 1;margin-bottom: 24rpx;
+	.chmain{padding: 0 32rpx;
+		.rimg{width: 16rpx;height: 28rpx;flex: 0 0 auto;margin-left: 20rpx;
+			image{width: 100%;height: 100%;}
+		}
+	}
+	.voice{font-weight: 500;display: flex;justify-content:flex-end;align-items: center;margin-top: 40rpx;
+font-size: 24rpx;
+color: #45CB99;
+		image{width: 24rpx;height: 24rpx;margin-right: 8rpx;}
+	}
+	.imgs{display: flex;align-items: center;flex-wrap: wrap;
+		.img{width: 142rpx;height:142rpx;border-radius: 20rpx;margin: 0 26rpx 20rpx 0;position: relative;
+		&:nth-of-type(4n){margin-right: 0;}
+		}
+		.pico{width: 100%;height: 100%;border-radius: 20rpx;}
+		.del{width: 24rpx;height: 24rpx;position: absolute;right: 0;top: 0;}
+		.addbox{background: #F0F0F0;border-radius: 20rpx;display: flex;align-items: center;flex-direction: column;width: 142rpx;height:142rpx;justify-content: center;margin-bottom: 20rpx;
+			image{width: 48rpx;height: 42rpx;margin-bottom: 12rpx;}
+			view{font-weight: 500;font-size: 24rpx;color: #666666;}
+		}
+	}
+}
+.patlist{background: #FFFFFF;border-radius: 20rpx;margin-bottom: 24rpx;padding: 0 24rpx 30rpx;
+	.pattop{padding:22rpx 30rpx;margin-bottom: 2rpx;
+		.imgs{width: 28rpx;height: 28rpx;margin-right: 12rpx;}
+		.tit{font-size: 30rpx;color: #272727;font-weight: bold;margin-right: 14rpx;}
+		.txt{font-weight: 500;font-size:24rpx;
+			&.ca{color: #3565ED;}
+			&.cb{color: #FE5A0E;}	
+			&.cc{color: #28C529;}	
+			&.cd{color: #FF6969;}	
+		}
+	}
+	.patlistr{background: #EFF4FF;border-radius: 20rpx;padding: 20rpx 32rpx;
+		.clist{font-weight: 500;font-size: 26rpx;color: #272727;display: flex;line-height: 50rpx;
+			.tit{font-size: 26rpx;flex: 0 0 auto;min-width: 108rpx;text-align-last: justify;font-weight: bold;}
+		}
+	}
+}
+</style>

+ 158 - 0
property_ui/work/pages/service/patroldetail.vue

@@ -0,0 +1,158 @@
+<template>
+	<view class="irecord">
+		<view class="patlist">
+			<view class="pattop flexc">
+				<image :src="home" class="imgs"></image>
+				<view class="tit">幸福小区1栋2单元电梯间</view>
+				<view class="flex1"></view>
+				<view class="txt cd" v-if="datainfo.type==1">未巡更</view>
+				<view class="txt cc" v-if="datainfo.type==2">已巡更</view>
+			</view>
+			<view class="patlistr">
+				<view class="clist"><view class="tit">巡检类型</view>:设备维修</view>
+				<view class="clist"><view class="tit">巡检时间</view>:2024-11-27 10:00</view>
+				<view class="clist"><view class="tit">巡检路线</view>:幸福小区1号楼1-2单元</view>
+				<view class="clist"><view class="tit">巡检人</view>:刘兵琦</view>
+			</view>
+		</view>
+		
+		<view class="chtop flexc">
+			<image :src="line"></image>
+			<view>巡更详情</view>
+			<view class="flex1"></view>
+		</view>
+		<view class="patlist">
+			<view class="patlistr" style="padding-bottom: 14rpx;">
+				<view class="clist"><view class="tit">巡检人</view>:设备维修</view>
+				<view class="clist"><view class="tit">手机号码</view>:2024-11-27 10:00</view>
+				<view class="clist"><view class="tit">巡检时间</view>:幸福小区1号楼1-2单元</view>
+				<view class="clist"><view class="tit">巡检结果</view>:刘兵琦</view>
+				<view class="clist"><view class="tit">巡检详情</view>:
+					<view class="flexdc">
+						<view>1.设备正常,无任何异动和意向;</view>
+						<view>2.电力系统正常,无故障提示;</view>
+						<view>3.设备使用正常,无异常提示;</view>
+					</view>
+					
+				</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>
+				
+				</view>
+			</view>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{},
+		data(){
+			return{
+				line:require('@/work/static/car/line.png'),
+				home:require("@/work/static/service/home.png"),
+				baseUrl:config.baseUrl,
+				datainfo:{
+					type:1,heiflag:true
+				},
+			}
+		},
+		onLoad: function() {
+		
+		},
+		methods:{
+			checkPermi, checkRole,
+			getPreview(idx,arr) {
+				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) {}
+				});
+			},
+			getDelFn(){
+				var that=this;
+				uni.showModal({
+					title: '解除黑名单',
+					content: "是否确认解除",
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							// that.filelist.splice(idx,1)
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			getOcrIdCard(obj){
+				var params={
+					image:obj.url,
+					idCardSide:obj.type
+				}
+				getOcrIdCard(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
+						}
+					}
+				})
+			}
+		}
+	}
+</script>
+<style>
+	page{
+		background:#F3F3F0;padding-top:24rpx;
+	}
+</style>
+<style lang="scss" scoped>
+.bgef{background: #EFF4FF;}
+.irecord{flex: 1;background: #ffffff;min-height: calc(100vh - 24rpx);padding-bottom: 24rpx;box-sizing: border-box;
+	.patlist{border-radius: 20rpx;padding: 0 18rpx 4rpx;
+		.pattop{padding:32rpx 30rpx;margin-bottom: 2rpx;
+			.imgs{width: 28rpx;height: 28rpx;margin-right: 12rpx;}
+			.tit{font-size: 30rpx;color: #272727;font-weight: bold;margin-right: 14rpx;}
+			.txt{font-weight: 500;font-size:24rpx;
+				&.ca{color: #3565ED;}
+				&.cb{color: #FE5A0E;}	
+				&.cc{color: #28C529;}	
+				&.cd{color: #FF6969;}	
+			}
+		}
+		.patlistr{background: #EFF4FF;border-radius: 20rpx;padding: 24rpx 0 24rpx 40rpx;
+			.clist{font-weight: 500;font-size: 26rpx;color: #272727;display: flex;line-height: 52rpx;
+				.tit{font-size: 26rpx;flex: 0 0 auto;min-width: 108rpx;text-align-last: justify;font-weight: bold;}
+			}
+		}
+	}
+	.chtop{padding-top: 36rpx;margin-bottom: 32rpx;padding-right: 48rpx;
+		image{width: 14rpx;height: 48rpx;margin-right: 20rpx;}
+		view{font-weight: bold;font-size: 32rpx;color: #272727;}
+		.num{font-weight: 500;font-size: 24rpx;color: #AAAAAA;}
+	}	
+}
+.imgs{display: flex;align-items: center;flex-wrap: wrap;
+	.img{width: 160rpx;height:160rpx;border-radius: 20rpx;margin: 0 26rpx 26rpx 0;position: relative;
+		&:nth-of-type(3n){margin-right: 0;}
+		}
+}
+</style>

+ 136 - 0
property_ui/work/pages/service/patrolrecord.vue

@@ -0,0 +1,136 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+			<view class="topa flexc">
+				<image :src="day" class="resetimg" @click="getReset"></image>
+				<picker mode="date"   @change='bindDateChangea'>
+					<view class="chekt flexc">
+						<view>{{cxrq|| "选择日期"}}</view>
+						<image :src="up"></image>
+					</view>
+				</picker>
+			</view>
+
+		</view>
+		<!-- 列表 -->
+		<view class="carlists">
+			<car-list :datainfo="list" :topval="ttopval" :wtdt="wtdt" type='patrol' @getDetail="getDetail" @getAddFn="getAddFn"></car-list>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				reset:require('@/work/static/car/reset.png'),
+				up:require('@/work/static/car/up.png'),
+				day:require('@/work/static/service/day.png'),
+				cxrq:"",
+				text:'',
+				list:[{tit:'皖A IC520',type:1},{tit:'晋E KD783',type:2},],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+			}
+		},
+		onLoad: function() {
+		
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getDetail(){
+				this.$tab.navigateTo("/work/pages/service/patroldetail")
+			},
+			getAddFn(){
+				this.$tab.navigateTo("/work/pages/service/patroladd")
+			},
+			getTabtop(val){
+				this.ttopval=val
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.cxrq='';
+				this.text='';
+				this.getrefreshData()
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.cxrq=val;
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.car{padding-top: 106rpx;}
+.cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #F3F3F0;z-index: 2;
+	.topa{padding: 30rpx 74rpx;
+		.resetimg{width: 28rpx;height: 30rpx;margin-right: 30rpx;flex: 0 0 auto;}
+		.chekt{min-width: 180rpx;
+			view{font-weight: 500;font-size: 26rpx;color: #272727;flex: 1;}
+			image{width: 24rpx;height: 16rpx;margin-left: 18rpx;flex: 0 0 auto;}
+		}
+	}
+}
+.carlists{padding: 0 18rpx;}
+</style>

+ 169 - 0
property_ui/work/pages/service/patrolset.vue

@@ -0,0 +1,169 @@
+<template>
+	<view class="check">
+		<uni-forms ref="form" :model="datainfo">
+			<view class="tabs">
+				<view class="tab" :class="tabval==ite.val?'act':''" v-for="(ite,idx) in weekList" :key="idx">{{ite.tit}}</view>
+			</view>
+			<view class="cbox" v-for="(ite,idx) in list" :key=''>
+				<view class="chmain">
+					<uni-forms-item label="巡检类型" name="phonenumber">
+						<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+							<view class="flexc">
+								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择巡检类型'}}</view>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</view>
+						</picker>
+					</uni-forms-item>
+					<uni-forms-item label="巡检时间" name="phonenumber">
+						<picker mode="date" range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+							<view class="flexc">
+								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择时间'}}</view>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</view>
+						</picker>
+					</uni-forms-item>
+					<uni-forms-item label="巡检路线" name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请选择或输入巡检路线" />
+							<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</picker>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="巡检人" name="phonenumber">
+						<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+							<view class="flexc">
+								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择巡检人'}}</view>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</view>
+						</picker>
+					</uni-forms-item>
+					<view class="addbox ">
+						<view class="btna flexc" @click="getAddFn">
+							<image :src="addimg"></image>
+							<view>新增</view>
+						</view>
+						<view  class="btnb flexc" @click="getDelFn(idx)">
+							<image :src="delimg"></image><view>删除</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</uni-forms>
+		<view class="rfbtn" @click="getNext">确定</view>
+
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import {checkPermi,checkRole} from "@/utils/permission"; // 权限判断函数
+	export default {
+		components: {},
+		data() {
+			return {
+				car: require('@/work/static/car/carico.png'),
+				rimg: require('@/work/static/people/rimg.png'),
+				addimg: require('@/work/static/service/add.png'),
+				delimg: require('@/work/static/service/del.png'),
+				baseUrl: config.baseUrl,
+				checkflag:true,
+				tabval:0,
+				weekList:[{tit:"星期一",val:0,},{tit:"星期一",val:1,},{tit:"星期一",val:2,},{tit:"星期一",val:3,},{tit:"星期一",val:0,},{tit:"星期一",val:1,},{tit:"星期一",val:2,},{tit:"星期一",val:3,}],
+				list:[{tit:''}],
+				datainfo: {
+					sex:0,
+					realName: '',
+					idCard: '',
+					address: '',
+					expirationDate: '',
+					phonenumber: '',
+					front: '',
+					back: '',
+				},
+				syqxidx:'',
+				sexs: [{
+					text: '男',
+					value: 0
+				}, {
+					text: '女',
+					value: 1
+				}],
+			}
+		},
+		onLoad: function() {
+
+		},
+		methods: {
+			checkPermi,
+			checkRole,
+			bindDateChange(e){
+				var val=e.detail.value;
+				// this.datainfo.applicationBank=this.sdyhlist[val].value;
+				// this.applicationBank=this.sdyhlist[val].label;
+			},
+			getAddFn(){
+				var obj={tit:''}
+				this.list.push(obj)
+			},
+			getDelFn(idx){
+				var that=this;
+				uni.showModal({
+					title: '确认删除',
+					content: "是否确认删除",
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							that.list.splice(idx,1)
+						} else if (res.cancel) {
+						}
+					}
+				});
+				
+			}
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.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 /deep/ .uni-forms-item:last-child{border: none;}
+.check /deep/ .uni-forms-item__label{font-weight: bold;font-size: 26rpx;color: #222327;flex: 0 0 auto;width: auto !important;}
+.check /deep/ .uni-easyinput{flex: 1;text-align: right;font-size: 26rpx;color: #222327;}
+.check /deep/ .uni-easyinput__content-textarea{min-height: 40rpx;font-size: 26rpx;}
+.check /deep/ .uni-easyinput__placeholder-class{font-size: 26rpx;color: #AAAAAA;}
+.check /deep/ .uni-input-input{font-size: 26rpx;}
+.check /deep/ .uni-textarea-textarea{font-size: 26rpx;}
+.check /deep/ .is-disabled{color: #222327;background-color: #ffffff !important;}
+.check /deep/ .uni-data-checklist .checklist-group .checklist-box{margin:10rpx 8rpx 10rpx 16rpx;}
+.check /deep/ .uni-data-checklist{flex: 0 0 auto;}
+.check{min-height: 100vh;padding: 148rpx 24rpx 110rpx;box-sizing: border-box;}
+.cbox{background: #FFFFFF;border-radius: 20rpx;flex: 1;margin-bottom: 24rpx;
+	.chmain{
+		padding: 0 32rpx;
+		.rimg{width: 16rpx;height: 28rpx;flex: 0 0 auto;margin-left: 20rpx;
+			image{width: 100%;height: 100%;}
+		}
+		.addbox{display: flex;align-items: center;justify-content: space-between;padding:14rpx 0 24rpx;
+			.btna{padding: 20rpx 0;
+				view{font-weight: 500;font-size: 26rpx;color: #0256FD;}
+				image{width: 24rpx;height: 24rpx;margin-right: 12rpx;}
+			}
+			.btnb{padding: 20rpx 0;
+				view{font-weight: 500;font-size: 26rpx;color: #FF6969;}
+				image{width: 22rpx;height: 24rpx;margin-right: 14rpx;}
+			}
+		}
+	}
+	
+}
+.tabs{display: flex;align-items: center;flex-wrap: nowrap;overflow: auto;padding: 58rpx 6rpx 40rpx 26rpx;position: fixed;left: 0;right: 0;top: 0;background-color: #F3F3F0;z-index: 2;
+	.tab{min-width: 120rpx;height: 50rpx;background: #D9D9D9;border-radius: 26rpx;font-weight: 500;padding: 0 12rpx;box-sizing: border-box;margin-right:20rpx;font-size: 26rpx;color: #666666;display: flex;align-items: center;justify-content: center;
+		&.act{border: 2rpx solid #0556F6;background: #FFFFFF;color: #0556F6;}
+	}
+}
+</style>

+ 156 - 0
property_ui/work/pages/service/warranty.vue

@@ -0,0 +1,156 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+<!-- 			<view class="topa flexc">
+				<image :src="reset" class="resetimg" @click="getReset"></image>
+				<picker mode="date"   @change='bindDateChangea'>
+					<view class="chekt flexc">
+						<view>{{cxrq|| "选择日期"}}</view>
+						<image :src="up"></image>
+					</view>
+				</picker>
+				<view class="search flexc">
+					<image :src="search"></image>
+					<input placeholder="请输入房号进行搜索"  v-model="text"/>
+					<view class="btn" @click="getConfirm">搜索</view>
+				</view>
+			</view> -->
+			<view class="tabtop flexc">
+				<view class="tabt" :class="ttopval==ite.val?'act':''" v-for="(ite,idx) in ttoplist" :key="idx" @click="getTabtop(ite.val)">{{ite.tit}}</view>
+			</view>
+		</view>
+		<!-- 列表 -->
+		<view class="carlists">
+			<car-list :datainfo="list" :topval="ttopval" :wtdt="wtdt" type='warranty' @getDetail="getDetail"></car-list>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import carList from "@/work/components/car/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{carList},
+		data(){
+			return{
+				reset:require('@/work/static/car/reset.png'),
+				search:require('@/work/static/car/search.png'),
+				up:require('@/work/static/car/up.png'),
+				cxrq:"",
+				text:'',
+				list:[{tit:'皖A IC520',type:1},{tit:'晋E KD783',type:2},],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+				ttopval:'0',
+				ttoplist:[{tit:'全部报修',val:0},{tit:'待分派',val:1},{tit:'处理中',val:2},{tit:'已完成',val:2}]
+			}
+		},
+		onLoad: function() {
+		
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getDetail(){
+				this.$tab.navigateTo("/work/pages/service/warrantydetail")
+			},
+			getTabtop(val){
+				this.ttopval=val
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.cxrq='';
+				this.text='';
+				this.getrefreshData()
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.cxrq=val;
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						if (res.rows.length < this.pageSize) {
+							this.reachflag = false
+							this.wtdt = '到底了~';
+						} else {
+							var num = parseInt(res.rows.length) + parseInt(this.pageSize) * parseInt(this.pageNum -	1)
+							if (num < res.total) {
+								this.reachflag = true
+								this.wtdt = ''
+							} else {
+								this.reachflag = false
+								this.wtdt = '到底了~';
+							}
+						}
+						if (this.pageNum == 1) {
+							this.list = res.rows;
+						} else {
+							this.list = this.list.concat(res.rows)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.car{padding: 152rpx 0 0rpx;}
+.cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
+	.topa{padding: 20rpx ;
+		.resetimg{width: 36rpx;height: 36rpx;margin-right: 24rpx;flex: 0 0 auto;}
+		.chekt{min-width: 180rpx;
+			view{font-weight: 500;font-size: 26rpx;color: #272727;flex: 1;}
+			image{width: 24rpx;height: 16rpx;margin-left: 18rpx;flex: 0 0 auto;}
+		}
+		.search{flex: 1;margin-left: 16rpx;height: 64rpx;background: #EEEEEE;border-radius: 32rpx;border: 2rpx solid #E6E6E6;padding-left: 24rpx;box-sizing: border-box;
+		image{width: 32rpx;height: 34rpx;margin-right: 22rpx;flex: 0 0 auto;}
+		input{flex: 1;font-size: 26rpx;color: #272727;}
+		.btn{width: 100rpx;height: 64rpx;background: #3565ED;border-radius: 32rpx;flex: 0 0 auto;font-weight: bold;text-align: center;line-height: 64rpx;
+font-size: 26rpx;
+color: #FFFFFF;}
+		}
+	}
+	.tabtop{padding-bottom: 46rpx;padding-top: 26rpx;
+		.tabt{font-weight: 500;font-size: 32rpx;color: #666666;position: relative;line-height: 56rpx;padding: 0 40rpx;
+			&.act{font-weight: bold;font-size: 32rpx;color: #272727;
+			&::after{content: '';width: 40rpx;height: 10rpx;background: #0156FE;border-radius: 6rpx;position: absolute;left: 50%;margin-left: -20rpx;bottom: -10rpx;}
+			}
+		}
+	}
+}
+.carlists{padding: 0 18rpx;}
+</style>

+ 208 - 0
property_ui/work/pages/service/warrantydetail.vue

@@ -0,0 +1,208 @@
+<template>
+	<view :style="'padding-top:'+nvaHeight+'px;'">
+		<view class="navbox">
+			<uni-nav-bar title="报修详情" left-icon="left" @clickLeft="getBackFn"  color="#FFFFFF" :background-color="backgroundColor" :border="false" statusBar='true' fixed="true">	
+			</uni-nav-bar>
+		</view>
+		<image :src="mbg" class="navbg"></image>
+		<view class="wymain">
+			<view class="wytop flexc">
+				<image :src="typeimg" class="flex0"></image>
+				<view class="flex1" v-if="finshtype==0">
+					<view class="tit">未派工</view>
+					<view class="txt">请尽快指派人员进行处理</view>
+				</view>
+				<view class="flex1" v-if="finshtype>0&&finshtype<3">
+					<view class="tit">已派工</view>
+					<view class="txt">已指派人员进行处理</view>
+				</view>
+				<view class="flex1" v-if="finshtype==3">
+					<view class="tit">已完成</view>
+					<view class="txt">报修订单已完成</view>
+				</view>
+			</view>
+			<view class="wabox peobox">
+				<image :src="head" class="head"></image>
+				<view class="flex1">
+					<view class="peotit mb6">王师傅</view>
+					<view class="peotxt">15802340788</view>
+				</view>
+				<image :src="phone" class="phone" @click="getPhoneFn"></image>
+			</view>
+			<view class="wabox">
+				<view class="chtop flexc">
+					<image :src="line"></image>
+					<view>巡更详情</view>
+					<view class="flex1"></view>
+				</view>
+				<view class="walist">
+					<view class="tit">二号楼1单元904厨房油烟机损坏</view>
+					<view class="txt">二号楼1单元904厨房油烟机无法吸烟,请尽快派人上门 维修,谢谢!</view>
+					<view class="imgs">
+						<image :src="line" class="img"></image>
+					</view>
+				</view>
+			</view>
+			<view class="wabox">
+				<view class="chtop flexc">
+					<image :src="line"></image>
+					<view>基础信息</view>
+					<view class="flex1"></view>
+				</view>
+				<view class="walist watxt"><view class="wtit">小区名称</view><view class="wtxt">幸福小区</view></view>
+				<view class="walist watxt"><view class="wtit">报修门户</view><view class="wtxt">二号楼1单元904</view></view>
+				<view class="walist watxt"><view class="wtit">报修时间</view><view class="wtxt">2024-11-12 13:27:36</view></view>
+				<view class="walist watxt"><view class="wtit">联系方式</view><view class="wtxt">13805680028</view></view>
+			</view>
+			<view class="wabox" v-if="finshtype>1">
+				<view class="chtop flexc">
+					<image :src="line"></image>
+					<view>上门信息</view>
+					<view class="flex1"></view>
+				</view>
+				<view class="walist watxt"><view class="wtit">上门时间</view><view class="wtxt">2024-11-12 14:54:21</view></view>
+				<view class="walist watxt flexc"><view class="wtit">上门拍照</view>
+					<view class="waimgs"><image :src="head" @click="getPreviewImage"></image></view>
+				</view>
+				<block v-if="finshtype>2">
+					<view class="walist watxt"><view class="wtit">结束时间</view><view class="wtxt">2024-11-12 13:27:36</view></view>
+					<view class="walist watxt"><view class="wtit">结束拍照</view><view class="waimgs"><image :src="head" @click="getPreviewImage"></image></view></view>
+				</block>
+				
+			</view>
+		</view>	
+		<view class="rfbtn" @click="getAssignFn" v-if="finshtype==0">去指派</view>
+		<view class="rfbtn rfbga" @click="getCheckFn(1)" v-if="finshtype==1">我已上门</view>
+		<view class="rfbtn rfbga" @click="getCheckFn(2)" v-if="finshtype==2">我已完成</view>
+	<pop-up :type="type" @getClose='getClose' :finshtype='finshtype' @getSure="getSure"></pop-up>
+	<loading></loading>	
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import popUp from "@/work/components/popup/popup.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{popUp},
+		data(){
+			return{
+				line:require('@/work/static/car/line.png'),
+				mbg:require('@/work/static/service/bxbg.png'),
+				typeimg:require('@/work/static/service/type.png'),
+				head:require('@/work/static/service/head.png'),
+				phone:require('@/work/static/service/phone.png'),
+				nvaHeight:44,
+				backgroundColor: "transparent",
+				baseUrl:config.baseUrl,
+				type:'',
+				finshtype:3,
+			}
+		},
+		onLoad: function() {
+			uni.getSystemInfo({
+				success: (e) => {
+					this.nvaHeight = Number(e.statusBarHeight)+44;
+				}
+			})
+		},
+		onPageScroll(e) {
+			var scrollTop = Number(e.scrollTop);
+			if (scrollTop > 0) {
+				this.backgroundColor = '#0256FD'
+			} else {
+				this.backgroundColor = 'transparent'
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getAssignFn(){
+				this.type='assign'
+			},
+			getCheckFn(){
+				this.type='assigncheck'
+			},
+			getOpenFn(){
+				
+			},
+			getBackFn(){
+				uni.navigateBack({
+					delta:1
+				})
+			},
+			getClose(){
+				this.type='';
+			},
+			getSure(){
+				this.type='';
+			},
+			getPhoneFn(){
+				uni.makePhoneCall({
+					phoneNumber: '114' //仅为示例
+				});
+			},
+			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) {
+						
+					}
+				});
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.rfbga{background: #2ACA8E !important;}
+.navbg{width: 100%;height: 722rpx;z-index: 0;}
+.wymain{z-index: 2;position: relative;padding: 28rpx 18rpx 110rpx;}
+.navbox{position: fixed;left: 0;right: 0;top: 0;z-index: 4;	}
+.wytop{padding: 0 38rpx;margin-bottom: 40rpx;
+	image{width: 88rpx;height: 88rpx;margin-right: 22rpx;}
+	.tit{font-size: 28rpx;color: #FFFFFF;font-weight: bold;margin-bottom: 10rpx;}
+	.txt{font-size: 24rpx;color: #FFFFFF;font-weight: 500;}
+}
+.wabox{background: #FFFFFF;border-radius: 20rpx;margin-bottom: 24rpx;padding-top:32rpx;padding-bottom: 4rpx;
+	.walist{padding: 0 36rpx;
+		.tit{font-weight: bold;font-size: 30rpx;color: #272727;margin-bottom: 18rpx;}
+		.txt{font-weight: 500;font-size: 26rpx;line-height: 36rpx;color: #666666;margin-bottom: 28rpx;}
+		.waimgs{display: flex;flex-wrap: wrap;justify-content: flex-end;flex: 1;
+			image{width: 142rpx;height: 142rpx;border-radius: 20rpx;margin-left: 20rpx;margin-bottom: 10rpx;}
+		}
+	}
+	.watxt{display: flex;margin-bottom: 22rpx;
+		.wtit{font-weight: 500;font-size: 26rpx;color: #272727;flex: 0 0 auto;margin-right: 12rpx;}
+		.wtxt{font-weight: 500;font-size: 26rpx;color: #666666;flex: 1;text-align: right;}
+	}
+	.imgs{display: flex;flex-wrap: wrap;
+		.img{width: 142rpx;height: 142rpx;margin: 0 24rpx 24rpx 0;display: block;
+			&:nth-of-type(4n){margin-right: 0;}
+		}
+	}
+}
+
+.peobox{padding: 30rpx 36rpx 24rpx;display: flex;align-items: center;
+		.head{width: 88rpx;height: 88rpx;margin-right: 24rpx;flex: 0 0 auto;}
+		.peotit{font-weight: bold;font-size: 26rpx;color: #272727;}
+		.peotxt{font-weight: 500;font-size: 26rpx;color: #AAAAAA;}
+		.phone{width: 60rpx;height: 60rpx;flex: 0 0 auto;margin-left: 12rpx;}
+	}
+.chtop{margin-bottom: 24rpx;padding-right: 48rpx;
+		image{width: 14rpx;height: 48rpx;margin-right: 20rpx;}
+		view{font-weight: bold;font-size: 28rpx;color: #272727;}
+		.num{font-weight: 500;font-size: 24rpx;color: #AAAAAA;}
+}
+</style>

BIN
property_ui/work/static/car/car.png


BIN
property_ui/work/static/car/cara.png


BIN
property_ui/work/static/car/carb.png


BIN
property_ui/work/static/car/carbg.png


BIN
property_ui/work/static/car/carc.png


BIN
property_ui/work/static/car/card.png


BIN
property_ui/work/static/car/carico.png


BIN
property_ui/work/static/car/del.png


BIN
property_ui/work/static/car/icoa.png


BIN
property_ui/work/static/car/icob.png


BIN
property_ui/work/static/car/line.png


BIN
property_ui/work/static/car/reset.png


BIN
property_ui/work/static/car/search.png


BIN
property_ui/work/static/car/up.png


BIN
property_ui/work/static/close.png


BIN
property_ui/work/static/manage/contbg.png


BIN
property_ui/work/static/manage/mbg.png


BIN
property_ui/work/static/manage/time.png


BIN
property_ui/work/static/nodata.png


BIN
property_ui/work/static/noiconp.png


BIN
property_ui/work/static/people/aphoto.png


BIN
property_ui/work/static/people/check.png


BIN
property_ui/work/static/people/gzlx.png


BIN
property_ui/work/static/people/hicoa.png


BIN
property_ui/work/static/people/hicob.png


BIN
property_ui/work/static/people/icon_tjfk_xbxz_normal.png


BIN
property_ui/work/static/people/icon_tjfk_xbxz_selected.png


BIN
property_ui/work/static/people/man.png


BIN
property_ui/work/static/people/mphone.png


BIN
property_ui/work/static/people/ncheck.png


BIN
property_ui/work/static/people/pdel.png


BIN
property_ui/work/static/people/rimg.png


BIN
property_ui/work/static/people/woman.png


BIN
property_ui/work/static/service/add.png


BIN
property_ui/work/static/service/addpho.png


BIN
property_ui/work/static/service/bxbg.png


BIN
property_ui/work/static/service/day.png


BIN
property_ui/work/static/service/del.png


BIN
property_ui/work/static/service/head.png


BIN
property_ui/work/static/service/headbg.png


BIN
property_ui/work/static/service/home.png


BIN
property_ui/work/static/service/linea.png


BIN
property_ui/work/static/service/lineb.png


BIN
property_ui/work/static/service/linec.png


BIN
property_ui/work/static/service/pbg.png


BIN
property_ui/work/static/service/phone.png


BIN
property_ui/work/static/service/photo.png


BIN
property_ui/work/static/service/plbg.png


BIN
property_ui/work/static/service/rdel.png


BIN
property_ui/work/static/service/type.png


BIN
property_ui/work/static/service/voice.png