Browse Source

用户端微信分包暂放

zouling 2 tháng trước cách đây
mục cha
commit
464f9f8d98
100 tập tin đã thay đổi với 7537 bổ sung0 xóa
  1. 23 0
      user_wxui/.hbuilderx/launch.json
  2. 17 0
      user_wxui/1.txt
  3. BIN
      user_wxui/765a696dc3f2e3e010b1228f7bf957cd.keystore
  4. 188 0
      user_wxui/App.vue
  5. 21 0
      user_wxui/LICENSE
  6. 51 0
      user_wxui/README.md
  7. 73 0
      user_wxui/api/login.js
  8. 33 0
      user_wxui/api/system/card.js
  9. 59 0
      user_wxui/api/system/user.js
  10. 63 0
      user_wxui/api/work/car.js
  11. 17 0
      user_wxui/api/work/index.js
  12. 86 0
      user_wxui/api/work/manage.js
  13. 153 0
      user_wxui/api/work/news.js
  14. 118 0
      user_wxui/api/work/people.js
  15. 40 0
      user_wxui/api/work/service.js
  16. 56 0
      user_wxui/api/work/work.js
  17. 265 0
      user_wxui/components/box/list.vue
  18. 109 0
      user_wxui/components/box/popup.vue
  19. 82 0
      user_wxui/components/footer/footer.vue
  20. 96 0
      user_wxui/components/loading/loading.vue
  21. 39 0
      user_wxui/components/nodata/nodata.vue
  22. 90 0
      user_wxui/components/swiper/notice.vue
  23. 176 0
      user_wxui/components/toptab/phonebtn.vue
  24. 31 0
      user_wxui/config.js
  25. 175 0
      user_wxui/goods/components/box/list.vue
  26. 85 0
      user_wxui/goods/components/popup/popup.vue
  27. 124 0
      user_wxui/goods/pages/points/index.vue
  28. BIN
      user_wxui/goods/static/goods/icon_gmdd_sjtx.png
  29. BIN
      user_wxui/goods/static/goods/icon_ljgm_dz.png
  30. BIN
      user_wxui/goods/static/goods/icon_ljgm_dz_jr.png
  31. BIN
      user_wxui/goods/static/goods/icon_mrqd_jbng.png
  32. BIN
      user_wxui/goods/static/goods/icon_mrqd_qdtx_big.png
  33. BIN
      user_wxui/goods/static/goods/icon_mrqd_qdtx_normal.png
  34. BIN
      user_wxui/goods/static/goods/icon_mrqd_qdtx_selected.png
  35. BIN
      user_wxui/goods/static/goods/icon_spxq_fx.png
  36. BIN
      user_wxui/goods/static/goods/icon_tjjl_ss.png
  37. BIN
      user_wxui/goods/static/goods/pic_jfsc_tx.png
  38. BIN
      user_wxui/goods/static/goods/pic_lqzx_qmc.png
  39. BIN
      user_wxui/goods/static/goods/pic_lqzx_yhqbg.png
  40. BIN
      user_wxui/goods/static/goods/pic_mrqd_bt.png
  41. 175 0
      user_wxui/health/components/box/list.vue
  42. 104 0
      user_wxui/health/components/popup/popup.vue
  43. 295 0
      user_wxui/health/pages/health/add - 副本.vue
  44. 615 0
      user_wxui/health/pages/health/add.vue
  45. 358 0
      user_wxui/health/pages/health/detail.vue
  46. BIN
      user_wxui/health/static/health/add.png
  47. BIN
      user_wxui/health/static/health/adr.png
  48. BIN
      user_wxui/health/static/health/car.png
  49. BIN
      user_wxui/health/static/health/cardf.png
  50. BIN
      user_wxui/health/static/health/cardz.png
  51. BIN
      user_wxui/health/static/health/down.png
  52. BIN
      user_wxui/health/static/health/heada.png
  53. BIN
      user_wxui/health/static/health/headb.png
  54. BIN
      user_wxui/health/static/health/headc.png
  55. BIN
      user_wxui/health/static/health/headd.png
  56. BIN
      user_wxui/health/static/health/heade.png
  57. BIN
      user_wxui/health/static/health/headf.png
  58. BIN
      user_wxui/health/static/health/hicoa.png
  59. BIN
      user_wxui/health/static/health/hicob.png
  60. BIN
      user_wxui/health/static/health/icon.png
  61. BIN
      user_wxui/health/static/health/search.png
  62. BIN
      user_wxui/health/static/house.png
  63. BIN
      user_wxui/health/static/housea.png
  64. BIN
      user_wxui/health/static/houseb.png
  65. BIN
      user_wxui/health/static/housec.png
  66. BIN
      user_wxui/health/static/man.png
  67. BIN
      user_wxui/health/static/woman.png
  68. 36 0
      user_wxui/main.js
  69. 117 0
      user_wxui/manifest.json
  70. 510 0
      user_wxui/mine/components/box/list.vue
  71. 0 0
      user_wxui/mine/components/tki-float-keyboard/style.css
  72. 459 0
      user_wxui/mine/components/tki-float-keyboard/tki-float-keyboard.vue
  73. 594 0
      user_wxui/mine/pages/car/addcar.vue
  74. 136 0
      user_wxui/mine/pages/car/charge.vue
  75. 206 0
      user_wxui/mine/pages/car/illegalParking.vue
  76. 188 0
      user_wxui/mine/pages/car/illegalrecord.vue
  77. 147 0
      user_wxui/mine/pages/car/index.vue
  78. 89 0
      user_wxui/mine/pages/car/style.css
  79. 145 0
      user_wxui/mine/pages/house/addaddress.vue
  80. 489 0
      user_wxui/mine/pages/house/addhouse.vue
  81. 88 0
      user_wxui/mine/pages/house/address.vue
  82. 301 0
      user_wxui/mine/pages/house/index.vue
  83. 215 0
      user_wxui/mine/pages/house/people.vue
  84. BIN
      user_wxui/mine/static/check.png
  85. BIN
      user_wxui/mine/static/edit.png
  86. BIN
      user_wxui/mine/static/house/add.png
  87. BIN
      user_wxui/mine/static/house/adrs.png
  88. BIN
      user_wxui/mine/static/house/cara.png
  89. BIN
      user_wxui/mine/static/house/caraa.png
  90. BIN
      user_wxui/mine/static/house/carb.png
  91. BIN
      user_wxui/mine/static/house/carbb.png
  92. BIN
      user_wxui/mine/static/house/carc.png
  93. BIN
      user_wxui/mine/static/house/carcc.png
  94. BIN
      user_wxui/mine/static/house/card.png
  95. BIN
      user_wxui/mine/static/house/chara.png
  96. BIN
      user_wxui/mine/static/house/charb.png
  97. BIN
      user_wxui/mine/static/house/cmico.png
  98. BIN
      user_wxui/mine/static/house/edit.png
  99. BIN
      user_wxui/mine/static/house/house.png
  100. BIN
      user_wxui/mine/static/house/icoa.png

+ 23 - 0
user_wxui/.hbuilderx/launch.json

@@ -0,0 +1,23 @@
+{
+    // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+    // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version" : "0.0",
+    "configurations" : [
+        {
+            "app-plus" : {
+                "launchtype" : "local"
+            },
+            "default" : {
+                "launchtype" : "local"
+            },
+            "mp-weixin" : {
+                "launchtype" : "local"
+            },
+            "type" : "uniCloud"
+        },
+        {
+            "playground" : "custom",
+            "type" : "uni-app:app-android"
+        }
+    ]
+}

+ 17 - 0
user_wxui/1.txt

@@ -0,0 +1,17 @@
+包名:qswg.user.app
+
+
+证书别名:__uni__e57e235
+证书私钥密码:KKj3wPFb
+
+MD5: 43:45:A4:46:EE:C4:B9:9A:BF:D0:B2:B2:9E:EE:79:02
+SHA1: BC:CC:2F:16:32:84:D8:EE:F7:2A:8C:26:F2:11:8E:FA:EE:16:9B:16
+
+高德key:f55857365884963baed205a0974d6e96
+
+极光appkey:
+百度语音
+
+语音识别: AppID:30799445
+	API Key :MuVtMTc6EHaLbrr38WEhqjml
+	Secret Key:rPGCiA3L41VwuTCBHkwkmcOt0IPTsi8z

BIN
user_wxui/765a696dc3f2e3e010b1228f7bf957cd.keystore


+ 188 - 0
user_wxui/App.vue

@@ -0,0 +1,188 @@
+<script>
+  import config from './config'
+  import store from '@/store'
+  import { getToken } from '@/utils/auth'
+import {updateUserProfile,findVersion} from "@/api/system/user.js"
+  const baseUrl = config.baseUrl
+  export default {
+	data(){
+		return{
+			platform:'Android',
+			appPort:'2', //appPort    1:物管端,2:用户端
+		}
+	},
+    onLaunch: function() {
+		// #ifdef APP
+		this.onlineWgt(); //版本更新
+		// #endif
+		this.initApp()
+    },
+    methods: {
+		//极光推送
+		// this.getJGtuifn()
+		// 在线跟新
+		onlineWgt() {
+			let that = this;
+			plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
+				that.comparisonVersionNo(widgetInfo.versionCode);
+			});
+			// that.comparisonVersionNo()
+		},
+		comparisonVersionNo(versionCode) {
+			let that = this;
+			// console.log("aaaaaaa===versionCode", versionCode);
+			const parmas = {
+				model: that.platform,
+				appPort:that.appPort
+			}   
+			findVersion(parmas).then(res => {
+				console.log(res)  
+				if (res.code == "200") {
+					let versionNos = res.data.code;
+					// console.log(versionNos,'versionNos')
+					let filePath = res.data.path;
+					if (Number(versionNos) > Number(versionCode)) { //服务器返回1更新,0则不更新
+						uni.showModal({
+							title: '提示',
+							content: '发现新版本,是否升级',
+							success: function(res) {
+								// console.log(widgetInfo.version);
+								if (res.confirm) {
+									console.log('用户点击确定');
+									that.getProperty(filePath);
+								} else if (res.cancel) {
+									console.log('用户点击取消');
+								}
+							}
+						});
+					}
+				}
+			}).catch(error=>{
+				uni.hideLoading()
+				console.log(error)
+			})
+		},
+		getProperty(getProperty) {
+			// console.log("bbbbbbbbb----------->", getProperty)
+			let that = this;
+			// console.log(baseUrl + getProperty)
+			// 在线升级app/热更新
+			that.showwri = true;
+			const downloadTask = uni.downloadFile({ //下载文件
+				url: baseUrl + getProperty,
+				success: (downloadResult) => {
+					// console.log(downloadResult);
+					if (downloadResult.statusCode == 200) {
+						// 更新升级
+						plus.runtime.install(downloadResult.tempFilePath, {
+							force: true
+						}, function() {
+							// console.log('install success...');
+							that.showwri = false;
+							plus.nativeUI.alert("应用资源更新完成!", function() {
+								plus.runtime.restart();
+							});
+						}, function(e) {
+							that.showwri = false;
+							plus.nativeUI.alert("更新失败,请稍后再试");
+						});
+					}
+				}
+			});
+			downloadTask.onProgressUpdate((res) => { //下载文件的进度
+				that.totalBytesWritten = res.totalBytesWritten; //当前下载大小
+				that.progress = res.progress; //当前下载比例
+				that.totalBytesExpectedToWrite = res.totalBytesExpectedToWrite; //
+			});
+		},
+		// 极光推送
+		getJGtuifn(){ 
+			//#ifdef APP-PLUS
+				var jpushModule = uni.requireNativePlugin("JG-JPush");
+				jpushModule.setLoggerEnable(true);
+				// 初始化函数
+				jpushModule.initJPushService();
+				jpushModule.addConnectEventListener(result=>{
+					let connectEnable = result.connectEnable
+					// console.log("jpush连接", connectEnable)
+				})
+				jpushModule.getRegistrationID(result => {
+					// console.log("注册ID.....",result)
+					this.registerID = result.registerID;
+					if(getToken()){
+						var params={
+							jgId:this.registerID,
+						}
+						updateUserProfile(params).then(res=>{
+							if(rtes.code==200){
+								console.log(res,9)
+							}
+						})
+					}	
+				})
+				jpushModule.isPushStopped(result=>{
+					let code = result.code
+					console.log('连接状态回调',result)
+				});
+				// 设置别名
+				jpushModule.setAlias({
+					'alias' : 'coder',
+					'sequence': 1
+				})
+				jpushModule.addNotificationListener(result=>{
+					let notificationEventType = result.notificationEventType
+					let messageID = result.messageID
+					let title = result.title
+					let content = result.content
+					let extras = result.extras
+					console.log('通知事件回调',result)
+					// 推送一个本地通知
+					jpushModule.addLocalNotification({
+						messageID,
+						title,
+						content,
+						extras
+					})
+				})
+				jpushModule.addNotificationListener(result => {
+				console.log(result)
+				if (result.notificationEventType == "notificationOpened") {
+				  //点击窗口通知栏推送的消息 跳转指定页面
+					uni.reLaunch({
+						url:'/pages/login'
+					})
+				}
+		 
+			});
+			//#endif 
+		},
+      // 初始化应用
+      initApp() {
+        // 初始化应用配置
+        this.initConfig()
+        // 检查用户登录状态
+        //#ifdef H5
+        // this.checkLogin()
+        //#endif
+      },
+      initConfig() {
+        this.globalData.config = config
+      },
+      checkLogin() {
+        if (!getToken()) {
+          this.$tab.reLaunch('/pages/login') 
+        }
+      }
+    }
+  }
+</script>
+<style>
+/deep/ .uni-forms-item__error{left:auto !important;right: 0;margin-top: 10rpx;z-index: 1;}
+ /deep/ .uniui-calendar::before{display: none;}
+/deep/ .uni-date__x-input{text-align: right;color: #272727;}
+/deep/ .uni-easyinput__content-textarea{margin: 0;}
+</style>
+<style lang="scss">
+@import "@/static/style.css";
+  @import '@/static/scss/index.scss'
+</style>

+ 21 - 0
user_wxui/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 若依
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 51 - 0
user_wxui/README.md

@@ -0,0 +1,51 @@
+<p align="center">
+	<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-43e3941654fa3054c9684bf53d1b1d356a1.png">
+</p>
+<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v1.1.0</h1>
+<h4 align="center">基于UniApp开发的轻量级移动端框架</h4>
+<p align="center">
+	<a href="https://gitee.com/y_project/RuoYi-App/stargazers"><img src="https://gitee.com/y_project/RuoYi-App/badge/star.svg?theme=dark"></a>
+	<a href="https://gitee.com/y_project/RuoYi-App"><img src="https://img.shields.io/badge/RuoYi-v1.1.0-brightgreen.svg"></a>
+	<a href="https://gitee.com/y_project/RuoYi-App/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
+</p>
+
+## 平台简介
+
+RuoYi App 移动解决方案,采用uniapp框架,一份代码多终端适配,同时支持APP、小程序、H5!实现了与[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue)、[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)完美对接的移动解决方案!目前已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。
+
+* 配套后端代码仓库地址[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) 或 [RuoYi-Cloud](https://github.com/yangzongzhuan/RuoYi-Cloud) 版本。
+* 应用框架基于[uniapp](https://uniapp.dcloud.net.cn/),支持小程序、H5、Android和IOS。
+* 前端组件采用[uni-ui](https://github.com/dcloudio/uni-ui),全端兼容的高性能UI框架。
+* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)&nbsp;&nbsp;
+
+
+## 技术文档
+
+- 官网网站:[http://ruoyi.vip](http://ruoyi.vip)
+- 文档地址:[http://doc.ruoyi.vip](http://doc.ruoyi.vip)
+- H5页体验:[http://h5.ruoyi.vip](http://h5.ruoyi.vip)
+- QQ交流群: ①133713780(满)、②146013835(满)、③189091635
+- 小程序体验
+
+<img src="https://oscimg.oschina.net/oscnet/up-26c76dc90b92acdbd9ac8cd5252f07c8ad9.jpg" alt="小程序演示"/>
+ 
+
+## 演示图
+
+<table>
+    <tr>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-21f6f842fdc94540469b4eb43fdadbaf7f8.png"/></td>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-a6f23cf9a371a30165e135eff6d9ae89a9d.png"/></td>
+		<td><img src="https://oscimg.oschina.net/oscnet/up-ff5f62016bf6624c1ff27eee57499dccd44.png"/></td>
+    </tr>
+	<tr>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-b9a582fdb26ec69d407fabd044d2c8494df.png"/></td>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-96427ee08fca29d77934cfc8d1b1a637cef.png"/></td>
+		<td><img src="https://oscimg.oschina.net/oscnet/up-5fdadc582d24cccd7727030d397b63185a3.png"/></td>
+    </tr>
+	<tr>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-0a36797b6bcc50c36d40c3c782665b89efc.png"/></td>
+        <td><img src="https://oscimg.oschina.net/oscnet/up-d77995cc00687cedd00d5ac7d68a07ea276.png"/></td>
+		<td><img src="https://oscimg.oschina.net/oscnet/up-fa8f5ab20becf59b4b38c1b92a9989e7109.png"/></td>
+    </tr>
+</table>

+ 73 - 0
user_wxui/api/login.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 登录方法
+export function login(username, password, code, uuid) {
+  const data = {
+    username,
+    password,
+    code,
+    uuid
+  }
+  return request({
+    'url': '/login',
+    headers: {
+      isToken: false
+    },
+    'method': 'post',
+    'data': data
+  })
+}
+
+// 注册方法
+export function register(data) {
+  return request({
+    url: '/register',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data: data
+  })
+}
+// 通用注册
+export function getRegisterFn(data) {
+  return request({
+    'url': '/register/common',
+    'method': 'post',
+	'data':data
+  })
+}
+export function sendSmszcOnly(data) {
+  return request({
+    'url': '/sendSms/sendRegisterSms',
+    'method': 'POST',
+	data:data
+  })
+}
+// 获取用户详细信息
+export function getInfo() {
+  return request({
+    'url': '/getInfo',
+    'method': 'get'
+  })
+}
+
+// 退出方法
+export function logout() {
+  return request({
+    'url': '/logout',
+    'method': 'post'
+  })
+}
+
+// 获取验证码
+export function getCodeImg() {
+  return request({
+    'url': '/captchaImage',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    timeout: 20000
+  })
+}

+ 33 - 0
user_wxui/api/system/card.js

@@ -0,0 +1,33 @@
+import request from '@/utils/request'
+//身份证识别
+export function getOcrIdCard(data) {
+  return request({
+    'url': '/ocr/ocrIdCard',
+    'method': 'post',
+	'data':data
+  })
+}
+//车牌照识别
+export function getlicensePlate(data) {
+  return request({
+    'url': '/ocr/licensePlate',
+    'method': 'post',
+	'data':data
+  })
+}
+//房产证识别wuYe:ocr:realEstateCertificate
+export function getrealEstateCertificatee(data) {
+  return request({
+    'url': '/ocr/realEstateCertificate',
+    'method': 'post',
+	'data':data
+  })
+}
+//行驶证识别wuYe:ocr:vehicleLicense
+export function getvehicleLicense(data) {
+  return request({
+    'url': '/ocr/vehicleLicense',
+    'method': 'post',
+	'data':data
+  })
+}

+ 59 - 0
user_wxui/api/system/user.js

@@ -0,0 +1,59 @@
+import upload from '@/utils/upload'
+import request from '@/utils/request'
+
+// 用户密码重置
+export function updateUserPwd(oldPassword, newPassword) {
+  const data = {
+    oldPassword,
+    newPassword
+  }
+  return request({
+    url: '/system/user/profile/updatePwd',
+    method: 'post',
+    data: data
+  })
+}
+
+// 查询用户个人信息
+export function getUserProfile() {
+  return request({
+    url: '/system/user/profile',
+    method: 'get'
+  })
+}
+
+// 修改用户个人信息
+export function updateUserProfile(data) {
+  return request({
+    url: '/system/user/profile/put',
+    method: 'post',
+    data: data
+  })
+}
+
+// 用户头像上传
+export function uploadAvatar(data) {
+  return upload({
+    url: '/system/user/profile/avatar',
+    name: data.name,
+    filePath: data.filePath
+  })
+}
+// 下载版本更新
+export function findVersion(data) {
+  return request({
+    url: '/system/app/new',
+    method: 'get',
+    data: data,
+	lhide:true,
+  })
+}
+// 字典值yzdqId
+export function getDictionaryFn(data) {
+  return request({
+    url: '/system/dict/data/type/'+data,
+    method: 'get',
+	type:true
+  })
+}
+

+ 63 - 0
user_wxui/api/work/car.js

@@ -0,0 +1,63 @@
+import request from '@/utils/request'
+
+// 业主车辆-新增wuYe:car:add
+export function carAdd(data) {
+  return request({
+    url: '/wuYe/car',
+    method: 'post',
+    'data': data
+  })
+}
+// 业主车辆-修改wuYe:car:edit
+export function carPut(data) {
+  return request({
+    url: '/wuYe/car/put',
+    method: 'post',
+    'data': data
+  })
+}
+// 业主车辆-删除wuYe:car:remove
+export function carDel(data) {
+  return request({
+    url: '/wuYe/car/delete/'+data,
+    method: 'get',
+  })
+}
+// 业主车辆-列表wuYe:car:list
+export function carList(data) {
+  return request({
+    url: '/wuYe/car/list',
+    method: 'get',
+    'data': data
+  })
+}
+// 业主车辆-详情wuYe:car:query
+export function carDet(data) {
+  return request({
+    url: '/wuYe/car/'+data,
+    method: 'get',
+  })
+}
+
+// 违章停车登记-列表
+export function illegalParkingList(data) {
+  return request({
+    url: '/wuYe/illegalParking/list',
+    method: 'get',
+    'data': data
+  })
+}
+// 违章停车登记-详情
+export function illegalParkingDet(data) {
+  return request({
+    url: '/wuYe/illegalParking/'+data,
+    method: 'get',
+  })
+}
+// 违章停车登记-删除
+export function illegalParkingDel(data) {
+  return request({
+    url: '/wuYe/illegalParking/delete/'+data,
+    method: 'get',
+  })
+}

+ 17 - 0
user_wxui/api/work/index.js

@@ -0,0 +1,17 @@
+import request from '@/utils/request'
+//物业管家-列表wuYe:settings:list
+export function gesettingsList(data) {
+  return request({
+    'url': '/wuYe/settings/list',
+    'method': 'get',
+	'data':data
+  })
+}
+//统计
+export function getCount(data) {
+  return request({
+    'url': '/wuYe/statistics/num/app/yeZhuTips',
+    'method': 'post',
+	'data':data
+  })
+}

+ 86 - 0
user_wxui/api/work/manage.js

@@ -0,0 +1,86 @@
+import request from '@/utils/request'
+
+// 党建资讯-新增wuYe:partyNews:add
+export function partyNewsAdd(data) {
+  return request({
+    url: '/wuYe/partyNews',
+    method: 'post',
+    'data': data
+  })
+}
+// 党建资讯-修改wuye:partyNews:edit
+export function partyNewsPut(data) {
+  return request({
+    url: '/wuYe/partyNews/put',
+    method: 'post',
+    'data': data
+  })
+}
+// 党建资讯-删除wuYe:partyIds:remove
+export function partyNewsDel(data) {
+  return request({
+    url: '/wuYe/partyNews/delete/'+data,
+    method: 'get',
+  })
+}
+// 党建资讯-列表wuYe:partyNews:list
+export function partyNewsList(data) {
+  return request({
+    url: '/wuYe/partyNews/list',
+    method: 'get',
+    'data': data
+  })
+}
+// 进行收藏操作
+export function getStarsDj(data) {
+  return request({
+    url: '/wuYe/commentStars/getPartyNewsStars',
+    method: 'post',
+    'data': data
+  })
+}
+// 党建资讯-详情wuYe:partyNews:query
+export function partyNewsDet(data) {
+  return request({
+    url: '/wuYe/partyNews/'+data,
+    method: 'get',
+  })
+}
+// 社区资讯-新增wuYe:news:add
+export function newsAdd(data) {
+  return request({
+    url: '/wuYe/news',
+    method: 'post',
+    'data': data
+  })
+}
+// 社区资讯-修改wuye:news:edit
+export function newsPut(data) {
+  return request({
+    url: '/wuYe/news/put',
+    method: 'post',
+    'data': data
+  })
+}
+// 社区资讯-删除wuYe:news:remove
+export function newsDel(data) {
+  return request({
+    url: '/wuYe/news/delete/'+data,
+    method: 'get',
+  })
+}
+// 社区资讯-列表wuYe:news:list
+export function newsList(data) {
+  return request({
+    url: '/wuYe/news/list',
+    method: 'get',
+    'data': data
+  })
+}
+// 社区资讯-详情wuYe:news:query
+export function newsDet(data) {
+  return request({
+    url: '/wuYe/news/'+data,
+    method: 'get',
+  })
+}

+ 153 - 0
user_wxui/api/work/news.js

@@ -0,0 +1,153 @@
+import request from '@/utils/request'
+
+// 投诉建议-新增wuYe:suggestion:add
+export function suggestionAdd(data) {
+  return request({
+    url: '/wuYe/suggestion',
+    method: 'post',
+    'data': data
+  })
+}
+// 投诉建议-修改wuYe:suggestion:edit
+export function suggestionlPut(data) {
+  return request({
+    url: '/wuYe/suggestion/put',
+    method: 'post',
+    'data': data
+  })
+}
+// 投诉建议-删除wuYe:suggestion:remove
+export function suggestionlDel(data) {
+  return request({
+    url: '/wuYe/suggestion/delete/'+data,
+    method: 'get',
+  })
+}
+// 投诉建议-列表wuYe:suggestion:list
+export function suggestionlList(data) {
+  return request({
+    url: '/wuYe/suggestion/list',
+    method: 'get',
+    'data': data
+  })
+}
+// 投诉建议-详情wuYe:suggestion:query
+export function suggestionlDet(data) {
+  return request({
+    url: '/wuYe/suggestion/'+data,
+    method: 'get',
+  })
+}
+
+// 评论-新增wuYe:commentIndex:add
+export function commentIndex(data) {
+  return request({
+    url: '/wuYe/commentIndex',
+    method: 'post',
+    'data': data
+  })
+}
+// 进行点赞操作
+export function giveTheThumbs(data) {
+  return request({
+    url: '/wuYe/commentLikes/giveTheThumbs',
+    method: 'post',
+    'data': data
+  })
+}
+// 进行收藏操作
+export function getStars(data) {
+  return request({
+    url: '/wuYe/commentStars/getStars',
+    method: 'post',
+    'data': data
+  })
+}
+
+//评论-列表父集
+//根据查询所有一级评论组带子集总数组装成前端所需要的数据结构 带分页
+export function getRootComment(data) {
+  return request({
+    url: '/wuYe/commentIndex/getRootComment',
+    method: 'post',
+    'data': data
+  })
+}
+// 列表子集
+//根据parent_id查询所有评论组装成前端所需要的子集数据结构 带分页
+export function getParentComment(data) {
+  return request({
+    url: '/wuYe/commentIndex/getParentComment',
+    method: 'post',
+    'data': data
+  })
+}
+// 审核列表wuYe:commentIndex:commentSh
+export function commentSh(data) {
+  return request({
+    url: '/wuYe/commentIndex/commentSh',
+    method: 'get',
+    'data': data
+  })
+}
+// 评论-审核wuYe:commentContent:edit
+export function commentContentPut(data) {
+  return request({
+    url: '/wuYe/commentContent/put',
+    method: 'post',
+    'data': data
+  })
+}
+
+// 我的评论-列表wuYe:commentIndex:list
+export function mycommentIndex(data) {
+  return request({
+    url: '/wuYe/commentIndex/list',
+    method: 'get',
+    'data': data
+  })
+}
+// 我的点赞-列表wuYe:commentLikes:list
+export function mycommentLikes(data) {
+  return request({
+    url: '/wuYe/commentLikes/list',
+    method: 'get',
+    'data': data
+  })
+}
+// 我的收藏-列表wuYe:commentStars:list
+export function mycommentStars(data) {
+  return request({
+    url: '/wuYe/commentStars/list',
+    method: 'get',
+    'data': data
+  })
+}
+
+// 社区资讯评论-删除wuYe:commentIndex:remove
+export function deletepl(data) {
+  return request({
+    url: '/wuYe/commentIndex/delete/'+data,
+    method: 'get',
+  })
+}
+
+// 获取未读互动数量wuYe:news:getCommentInteractionCount
+export function getCommentInteractionCount(data) {
+  return request({
+    url: '/wuYe/news/getCommentInteractionCount',
+    method: 'post',
+    'data': data
+  })
+}
+// 获取未读互动列表wuYe:news:getCommentInteraction
+export function getCommentInteraction(data) {
+  return request({
+    url: '/wuYe/news/getCommentInteraction',
+    method: 'post',
+    'data': data
+  })
+}
+
+
+

+ 118 - 0
user_wxui/api/work/people.js

@@ -0,0 +1,118 @@
+import request from '@/utils/request'
+
+// 来访管理-列表wuYe:visitorManage:list
+export function visitorList(data) {
+  return request({
+    url: '/wuYe/visitorManage/list',
+    method: 'get',
+    'data': data
+  })
+}
+// 来访管理-详情wuYe:visitorManage:query
+export function visitorDet(data) {
+  return request({
+    url: '/wuYe/visitorManage/'+data,
+    method: 'get',
+  })
+}
+// 来访管理-新增wuYe:visitorManage:add
+export function visitorAdd(data) {
+  return request({
+    url: '/wuYe/visitorManage',
+    method: 'post',
+    'data': data
+  })
+}
+// 来访管理-修改wuYe:visitorManage:edit
+export function visitorPut(data) {
+  return request({
+    url: '/wuYe/visitorManage/put',
+    method: 'post',
+    'data': data
+  })
+}
+// 来访管理-删除wuYe:visitorManage:remove
+export function visitorDel(data) {
+  return request({
+    url: '/wuYe/visitorManage/delete/'+data,
+    method: 'get',
+  })
+}
+
+// 预约记录-列表wuYe:reservRecord:list
+export function reservList(data) {
+  return request({
+    url: '/wuYe/reservRecord/list',
+    method: 'get',
+    'data': data
+  })
+}
+// 预约记录-详情wuYe:reservRecord:query
+export function reservDet(data) {
+  return request({
+    url: '/wuYe/reservRecord/'+data,
+    method: 'get',
+  })
+}
+// 预约记录-新增wuYe:reservRecord:add
+export function reservAdd(data) {
+  return request({
+    url: '/wuYe/reservRecord',
+    method: 'post',
+    'data': data
+  })
+}
+// 预约记录-修改wuYe:reservRecord:edit
+export function reservPut(data) {
+  return request({
+    url: '/wuYe/reservRecord/put',
+    method: 'post',
+    'data': data
+  })
+}
+// 预约记录-删除wuYe:reservRecord:remove
+export function reservDel(data) {
+  return request({
+    url: '/wuYe/reservRecord/delete/'+data,
+    method: 'get',
+  })
+}
+
+// 居住人员-列表wuYe:residentInfo:list
+export function residentInfoList(data) {
+  return request({
+    url: '/wuYe/residentInfo/list',
+    method: 'get',
+    data: data
+  })
+}
+// 居住人员-详情wuYe:residentInfo:query
+export function residentInfoDet(data) {
+  return request({
+    url: '/wuYe/residentInfo/'+data,
+    method: 'get',
+  })
+}
+// 居住人员-新增wuYe:residentInfo:add
+export function residentInfoAdd(data) {
+  return request({
+    url: '/wuYe/residentInfo',
+    method: 'post',
+    data: data
+  })
+}
+// 居住人员-修改wuYe:residentInfo:edit
+export function residentInfoPut(data) {
+  return request({
+    url: '/wuYe/residentInfo/put',
+    method: 'post',
+    data: data
+  })
+}
+// 居住人员-删除wuYe:residentInfo:remove
+export function residentInfoDel(data) {
+  return request({
+    url: '/wuYe/residentInfo/delete/'+data,
+    method: 'get',
+  })
+}

+ 40 - 0
user_wxui/api/work/service.js

@@ -0,0 +1,40 @@
+import request from '@/utils/request'
+
+// 物业报修-新增wuYe:repair:add
+export function repairAdd(data) {
+  return request({
+    url: '/wuYe/repair',
+    method: 'post',
+    'data': data
+  })
+}
+// 物业报修-修改wuYe:repair:edit
+export function repairPut(data) {
+  return request({
+    url: '/wuYe/repair/put',
+    method: 'post',
+    'data': data
+  })
+}
+// 物业报修-删除wuYe:repair:remove
+export function repairDel(data) {
+  return request({
+    url: '/wuYe/repair/delete/'+data,
+    method: 'get',
+  })
+}
+// 物业报修-列表wuYe:repair:list
+export function repairList(data) {
+  return request({
+    url: '/wuYe/repair/list',
+    method: 'get',
+    'data': data
+  })
+}
+// 物业报修-详情wuYe:repair:query
+export function repairDet(data) {
+  return request({
+    url: '/wuYe/repair/'+data,
+    method: 'get',
+  })
+}

+ 56 - 0
user_wxui/api/work/work.js

@@ -0,0 +1,56 @@
+import request from '@/utils/request'
+
+// 房屋信息-新增wuYe:houseInfo:add
+export function houseInfoAdd(data) {
+  return request({
+    url: '/wuYe/houseInfo',
+    method: 'post',
+    'data': data
+  })
+}
+// 房屋信息-修改wuYe:houseInfo:edit
+export function houseInfoPut(data) {
+  return request({
+    url: '/wuYe/houseInfo/put',
+    method: 'post',
+    'data': data
+  })
+}
+// 房屋信息-删除wuYe:houseInfo:remove
+export function houseInfoDel(data) {
+  return request({
+    url: '/wuYe/houseInfo/delete/'+data,
+    method: 'get',
+  })
+}
+// 房屋信息-列表wuYe:houseInfo:list
+export function houseInfoList(data) {
+  return request({
+    url: '/wuYe/houseInfo/list',
+    method: 'get',
+    'data': data
+  })
+}
+// 房屋信息-详情wuYe:houseInfo:query
+export function houseInfoDet(data) {
+  return request({
+    url: '/wuYe/houseInfo/'+data,
+    method: 'get',
+  })
+}
+// 房屋信息-列表不分页wuYe:houseInfo:listNoPage
+export function houseInfolistNoPage(data) {
+  return request({
+    url: '/wuYe/houseInfo/list',
+    method: 'get',
+	'data':data
+  })
+}
+// 房屋信息-列表不分页wuYe:houseInfo:listNoPage
+// export function houseInfolistNoPage(data) {
+//   return request({
+//     url: '/wuYe/houseInfo/listNoPage',
+//     method: 'get',
+// 	'data':data
+//   })
+// }

+ 265 - 0
user_wxui/components/box/list.vue

@@ -0,0 +1,265 @@
+<template>
+<view>
+	<!-- 第一种样式  人员管理-->
+	<block v-if="datainfo.length>0">
+		<!-- 订单 -->
+		<block v-if="type=='delivery'">
+			<view class="kdlists flexc" v-for="(ite,idx) in datainfo" :key="idx">
+				<view class="kdll">
+					<image :src="deva" class="limg"></image>
+					<view class="tit pr35">运输中</view>
+					<view class="over tit">陕西老潼关肉…</view>
+					<view class="time">12-03  22:05 </view>
+				</view>
+				<view class="kdlr">
+					<image :src="cirimg" class="limg"></image>
+					<view>
+						<view class="txt">运输中</view>
+						<view class="tit overtwo">【沧州市】快件已发往 蚌埠转运中心</view>
+						<view class="time">12-03  22:05 </view>
+					</view>
+				</view>
+			</view>
+		</block>
+		<!-- 优惠券 -->
+		<view v-if="type=='coupon'" class="coubox">
+			<view class="coulists flexc" v-for="(ite,idx) in datainfo" :key="idx">
+				<image :src="yhbg" class="yhbg"></image>
+				<view class="coulist flexc">
+					<view class="cltl flexccc">
+						<view class="tit">30<text>元</text></view>
+						<view class="txt">满100减30</view>
+					</view>
+					<view class="line"></view>
+					<view class="cltr">
+						<view class="over tit">合家福商品优惠券满100…</view>
+						<view class="btns">
+							<image :src="jfico" class="jfimg"></image>
+							<view class="txt">1000<text>积分</text></view>
+							<view class="btn flex0 flexcc">兑换</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- 资讯 -->
+		<block v-if="type=='news'">
+			<view class="newslists flexc" v-for="(ite,idx) in datainfo" :key="idx">
+				<image :src="jfico" class="newsll"></image>	
+				<view class="newslr over flex1">
+					<view class="flexc mb8">
+						<view class="over tit flex1">合肥市跌幅最大的小区房价公布</view>
+						<view class="num flexc"><image :src="eye"></image>1361</view>
+					</view>
+					<view class="overtwo txt">对于合肥市这座城来说,可供选择的项目太多了,合肥市的购房者买房一定要三思而后行,货比三…</view>
+				</view>
+			</view>
+		</block>
+		<!-- 康养 -->
+		<block v-if="type=='health'">
+			<view class="healthlist flexc" v-for="(ite,idx) in datainfo" :key="idx">
+				<view class="hlbox flex1">
+					<view class="tit overtwo">吃粗粮能够降血脂吗?这三种吃法让血糖不降反增</view>
+					<view class="flexc">
+						<view class="txt">2024-11-14</view>
+						<view class="flexc">
+							<image :src="eye" class="eyeimg"></image>
+							<view class="txt">1361</view>
+						</view>
+					</view>
+				</view>
+				<image :src="noiconpimg" class="hrimg"></image>
+			</view>
+		</block>
+		<!-- 推荐商品 -->
+		<view v-if="type=='goods'" class="goods flexcw">
+			<view class="goodslist" v-for="(ite,idx) in datainfo" :key="idx">
+				<image :src="noiconpimg" class="headimg"></image>
+				<view class="glist">
+					<view class="tit overtwo mb10">年货通用大米礼品包装盒新款五谷杂粮礼盒东北…</view>
+					<view class="numbox flexc">
+						<view class="num flex1"><text>¥</text>278</view>
+						<view class="txt flex0">已售2000+</view>
+					</view>
+				</view>
+				
+			</view>
+		</view>
+		<view class="shax" v-if="wtdt">{{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 ''
+				}
+			},
+			wtdtfalg:{
+				type:Boolean,
+				default () {
+					return true
+				}
+			},
+			type:{
+				type:String,
+				default () {
+					return 0
+				}
+			},
+		},
+		data(){
+			return{
+				noiconpimg:require("@/static/images/nodata.png"),
+				yhbg:require("@/static/images/home/yhbg.png"),
+				cirimg:require("@/static/images/home/cir.png"),
+				deva:require("@/static/images/home/deva.png"),
+				jfico:require("@/static/images/home/jfico.png"),
+				eye:require("@/static/images/home/eye.png"),
+				baseUrl:config.baseUrl,
+				delBtnWidth:66,//左滑默认宽度
+			}
+		},
+		mounted() {
+			
+		},
+		methods:{
+			checkPermi, checkRole,
+			getDetail(e){
+				this.$emit('getDetail',e)
+			},
+			getAddFn(e){
+				this.$emit('getAddFn',e)
+			},
+			getReadlist(e){
+				this.$emit('getReadlist',e)
+			},
+			getBtnFn(e){
+				this.$emit('getBtnFn',e)
+			},
+			getZhan(idx){
+				console.log(idx,1)
+				// 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) {}
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.flex{display: flex;}
+.flexc{display: flex;align-items: center;}
+.mb10{margin-bottom: 20rpx;}
+.kdlists{background: #FFFFFF;box-shadow: 0px 0px 8rpx 0px #CDCDCD;border-radius: 20rpx;margin-bottom: 24rpx;
+	.kdll{background: #E4EDFF;width: 220rpx;border-radius:20rpx 0 0 20rpx;flex: 0 0 auto;height: 160rpx;position: relative;padding: 30rpx 0 0 24rpx;
+		.limg{width: 42rpx;height: 42rpx;position: absolute;right: 20rpx;top: 24rpx;}	
+	}
+	.tit{font-weight: 500;font-size: 24rpx;color: #000000;margin-bottom: 8rpx;}
+	.time{font-weight: 500;font-size:20rpx;color: #AAAAAA;}
+	.kdlr{flex: 1;height: 160rpx;padding-left: 20rpx;padding-top: 30rpx;display: flex;
+		.limg{width: 24rpx;height: 24rpx;margin-right: 16rpx;flex: 0 0 auto;margin-top: 5rpx;}
+		.txt{font-size: 26rpx;font-weight: 500;color: #000000;margin-bottom: 6rpx;}
+	}
+}
+//优惠券
+.coubox{display: flex;flex-wrap: nowrap;overflow: auto;padding-left: 24rpx;}
+.coulists{width:524rpx;height: 156rpx;margin-right: 24rpx;
+	position: relative;
+	.yhbg{position: absolute;left: 0;top: 0;width:524rpx;height: 156rpx;z-index: 0;}
+	.coulist{width:100%;height: 100%;z-index: 1;
+		.cltl{width: 156rpx;flex: 0 0 auto;
+			.tit{font-weight: bold;font-size: 44rpx;color: #FE5A0E;margin-bottom: 2rpx;
+				text{font-size: 24rpx;}
+			}
+			.txt{font-weight: bold;font-size: 20rpx;color: #979797;}
+		}
+		.line{width: 2rpx;height: 80rpx;background: #ECD19D;flex: 0 0 auto;}
+		.cltr{height: 156rpx;padding:24rpx 20rpx 0 16rpx;
+			.tit{font-size: 28rpx;color: #272727;font-weight: bold;padding-left: 2rpx;margin-bottom: 26rpx;}
+			.btns{display: flex;align-items: center;
+				.jfimg{width: 28rpx;height: 28rpx;margin-right: 10rpx;flex: 0 0 auto;}
+				.txt{font-size: 40rpx;color: #FE5A0E;font-weight: bold;flex: 1;
+					text{margin-left: 12rpx;font-size: 24rpx;}
+				}
+				.btn{min-width: 92rpx;font-weight: bold;font-size: 24rpx;color: #FFFFFF;height:42rpx;background: linear-gradient(129deg, #FFB132, #FE5A0E);border-radius: 11px;}
+			}
+		}
+	}
+}
+// 资讯
+.newslists{border-bottom: 2rpx solid #E5E5E5;padding: 30rpx 0;
+	.newsll{width: 136rpx;height: 136rpx;border-radius: 24rpx;margin-right: 22rpx;flex: 0 0 auto;}
+	.newslr{
+		.tit{font-size: 26rpx;color: #272727;font-weight: bold;}
+		.num{font-weight: 500;font-size:22rpx;color: #666666;margin-left: 24rpx;flex: 0 0 auto;
+			image{width: 24rpx;height: 18rpx;margin-right: 10rpx;}
+		}
+		.txt{font-weight: 500;font-size: 24rpx;color: #8F8F8F;line-height: 36rpx;}
+	}
+}
+// 康养
+.healthlist{
+	padding:26rpx 22rpx;border-bottom: 2rpx solid #E5E5E5;
+	.hlbox{
+		.tit{font-weight: bold;font-size: 28rpx;color: #272727;line-height:48rpx;margin-bottom: 10rpx;}
+		.txt{font-weight: 500;line-height: 36rpx;font-size: 22rpx;color: #AAAAAA;}
+		.eyeimg{width: 24rpx;height: 18rpx;margin-right: 10rpx;margin-left: 34rpx;}
+		
+	}
+	.hrimg{width: 210rpx;height: 138rpx;flex: 0 0 auto;margin-left: 36rpx;}
+}
+// 商品
+.goods{padding: 0 8rpx;align-items: stretch;
+	.goodslist{width: 334rpx;min-height: 472rpx;background: #FFFFFF;box-shadow: 0px 0px 18rpx 0px #DADADA;border-radius: 20rpx;border: 2rpx solid #DADADA;margin: 0 16rpx 20rpx;padding-bottom: 8rpx;box-sizing: border-box;
+		.headimg{height: 298rpx;width: 100%;margin-bottom: 18rpx;}
+		.glist{padding: 0 12rpx;}
+		.tit{font-weight: bold;font-size: 28rpx;color: #272727;}
+		.numbox{
+			.num{font-size: 40rpx;color: #FE5A0E;font-weight: bold;word-break: break-all;
+				text{font-size: 20rpx;}
+			}
+		}
+		.txt{font-weight: bold;font-size: 24rpx;color: #AAAAAA;}
+	}
+}
+
+// 无数据
+.nodata{display: flex;flex-direction: column;align-items: center;
+	image{width: 440rpx;height: 440rpx;}
+	view{font-size: 30rpx;color: #666666;font-weight: bold;}
+	
+}
+</style>

+ 109 - 0
user_wxui/components/box/popup.vue

@@ -0,0 +1,109 @@
+<template>
+	<view>
+		<!-- 弹窗 -->
+		<view class="bgbox" @click="getClose" v-if="type"></view>
+		<view v-if="type=='wygj'" class="wygjbox">
+			<view class="wytop">
+				<image :src="wytit" class="imga"></image>
+				<image :src="head" class="imgb"></image>
+			</view>
+			<view class="wylist flexc" v-for="(ite,idx) in phoneList" :key="idx">
+				<image :src="ite.title.indexOf('投诉')!=-1?phicob:phicoa"></image>
+				<view>
+					<view class="co6 mb4">{{ite.title}}</view>
+					<view class="co27">{{ite.content}}</view>
+				</view>
+			</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 ''
+				}
+			},
+			canres:{
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			finshtype:{
+				type: [String,Number],
+				default () {
+					return ''
+				}
+			},
+			phoneList:{
+				type: Array,
+				default () {
+					return []
+				}
+			}
+		},
+		data(){
+			return{
+				baseUrl:config.baseUrl,
+				closeimg:require("@/static/images/close.png"),
+				head:require("@/static/images/head.png"),
+				phicoa:require("@/static/images/phicoa.png"),
+				phicob:require("@/static/images/phicob.png"),
+				wytit:require("@/static/images/wytit.png"),
+				// rimg: require('@/work/static/people/rimg.png'),
+				// headbg: require('@/work/static/service/headbg.png'),
+				datainfo:{
+					iszc:""
+				},
+				tabval:0,
+
+			}
+		},
+		mounted() {
+			this.baseUrl=baseUrl
+		},
+		watch:{
+			type(val){
+				// this.filelist=[];
+				// this.shtext='';
+				// this.isty='2';
+				// this.phofile=[];
+			}
+		},
+		methods:{
+			
+			getClose(){
+				this.$emit('getClose')
+			},
+			getSure(){
+				this.$emit('getSure')
+			},
+			
+			
+		}
+	}
+</script>
+
+<style lang="scss" scoped>	
+.wygjbox{position: fixed;left:166rpx;right: 166rpx;background: linear-gradient(0deg, #FFFFFF, #FEF6E1);border-radius: 20rpx;padding: 26rpx 38rpx 12rpx;z-index: 10;top: 40%;transform: translateY(-50%);
+	.wytop{display: flex;align-items: flex-end;margin-bottom: 52rpx;
+		.imga{width: 230rpx;height: 74rpx;margin-right: 26rpx;}
+		.imgb{width: 86rpx;height: 86rpx;}
+	}
+	.wylist{padding-left: 34rpx;margin-bottom: 28rpx;
+		image{width: 34rpx;height: 34rpx;margin-right: 16rpx;flex: 0 0 auto;}
+		view{font-weight: 500;font-size: 26rpx;}
+	}
+}
+.closeimg{width: 34rpx;height: 34rpx;position: absolute;bottom: -52rpx;left: 50%;margin-left: -16rpx;}
+</style>

+ 82 - 0
user_wxui/components/footer/footer.vue

@@ -0,0 +1,82 @@
+<template>
+	<view>
+		
+	
+	<view style="height: 100rpx;"></view>
+    <view class="com_footer">
+		<block v-for="(item,k) in footlist" :key="k">
+			<!-- v-if="!item.limit||item.limit&&checkPermi([item.limit])" -->
+			<view class="in_item"   @click="gotopage(item)">
+				<view class="im_imgs">
+					<image class="in_img" :class="item.img" v-if="active == item.module" :src="item.icon_checked" mode="scaleToFill"></image>
+					<image class="in_img" :class="item.img" v-else :src="item.icon_nochecked" mode="scaleToFill"></image>
+				</view>
+				<view class="in_txt" v-if="active == item.module" :style="'color: #'+color_checked">{{item.title}}</view>
+				<view class="in_txt" v-else :style="'color: #'+color_nochecked">{{item.title}}</view>
+			</view>
+		</block>
+    </view>
+	</view>
+</template>
+
+<script>
+	import { checkPermi, checkRole } from "@/utils/permission";
+    export default {
+		props:[
+			'footerindex'
+		],
+        data () {
+            return{
+				active :'',
+				footlist:[
+					// limit:'system:camera:video',
+					{module:'home',title:'首页',img:"imga",icon_checked:require('@/static/images/tabbar/home_.png'),icon_nochecked:require('@/static/images/tabbar/home.png')},
+					{module:'health',title:'康养',img:"imgb",icon_checked:require('@/static/images/tabbar/health_.png'),icon_nochecked:require('@/static/images/tabbar/health.png')},
+					{module:'goods',title:'商圈',img:"imgc",icon_checked:require('@/static/images/tabbar/store_.png'),icon_nochecked:require('@/static/images/tabbar/store.png')},
+					{module:'mine',title:'我的',img:"imgd",icon_checked:require('@/static/images/tabbar/mine_.png'),icon_nochecked:require('@/static/images/tabbar/mine.png')},
+					],
+				color_checked :'272727',
+				color_nochecked :'666666',
+            }
+        },
+		mounted() {
+			var that = this;
+			this.active = this.footerindex;
+		},
+        methods:{
+			checkPermi, checkRole,
+            // 跳转底部导航页面
+			gotopage(e){
+				var that = this;
+				let link = e.link, module = e.module, def = e.default, title = e.title;
+				if(module == 'home'){
+					this.$tab.reLaunch('/pages/index/index')
+				}else if(module == 'health'){
+					this.$tab.reLaunch('/pages/health/index')
+				}else if(module == 'goods'){
+					this.$tab.reLaunch('/pages/goods/index')
+				}else if(module == 'mine'){
+					this.$tab.reLaunch('/pages/mine/index')
+				}
+			},
+			
+        }
+    }
+</script>
+
+
+
+<style type="text/css" lang="scss" scoped>
+    .com_footer{ display: flex;position: fixed;box-sizing: border-box;z-index: 4;width: 100%;height: 100rpx;bottom: 0;left: 0;background-color: #fff;overflow: hidden;box-shadow: 0px 0px 16rpx 0px rgba(87,87,87,0.41);}
+	.com_footer .in_item{ display: block;flex: 1;padding: 12rpx 0 0 0;overflow: hidden; }
+	.com_footer .in_img{ display: block;width: 44rpx;height: 44rpx;margin: 0 auto; }
+	.com_footer .in_txt{ font-size: 24rpx;color: #999;text-align: center; font-weight: bold;}
+	.com_footer .in_txt_on{ color: #20AD20; }
+	.im_imgs{width: 48rpx;height: 48rpx;display: flex;align-items: center;justify-content: center;margin: 0 auto;}
+	.in_img{
+		&.imga{width: 44rpx;height: 42rpx;}
+		&.imgb{width: 44rpx;height: 40rpx;}
+		&.imgc{width: 44rpx;height: 44rpx;}
+		&.imgd{width: 42rpx;height: 44rpx;}
+	}
+</style>

+ 96 - 0
user_wxui/components/loading/loading.vue

@@ -0,0 +1,96 @@
+<template>
+  <view class="animations" v-if="is_loading">
+    <view class="box">
+      <view class="dot dot1"></view>
+      <view class="dot dot2"></view>
+      <view class="dot dot3"></view>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: "loading-bounce",
+  data() {
+    return {};
+  },
+  methods:{
+  	switch_loading(){
+  		this.$store.commit("switch_loading")
+  	}
+  },
+  //实测直接在标签属性里写  $store.state.XX  拿不到数据  所以这里通过 计算属性去监听一下
+  computed:{
+  	is_loading(){
+  		return this.$store.state.user.loading
+  	}
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+	.animations{display: flex;align-items: center;justify-content: center;position: fixed;top: 40%;left: 0;right: 0;z-index: 3;}
+.box {
+  width: 100rpx;
+  height: 50rpx;
+  position: relative;
+}
+.dot {
+  width: 18rpx;
+  height: 18rpx;
+  background: #007aff;
+  border-radius: 50%;
+  position: absolute;
+  top: calc(50% - 5rpx);
+}
+
+.dot1 {
+  background: #1fa2ff;
+  left: 0rpx;
+  -webkit-animation: bounce 0.5s cubic-bezier(0.77, 0.47, 0.64, 0.28) alternate
+    infinite;
+  animation: bounce 0.5s cubic-bezier(0.77, 0.47, 0.64, 0.28) alternate infinite;
+}
+
+.dot2 {
+  background: #12d8fa;
+  left: 40rpx;
+  -webkit-animation: bounce 0.5s 0.2s cubic-bezier(0.77, 0.47, 0.64, 0.28)
+    alternate infinite;
+  animation: bounce 0.5s 0.2s cubic-bezier(0.77, 0.47, 0.64, 0.28) alternate
+    infinite;
+}
+
+.dot3 {
+  background: #29ffc6;
+  left: 80rpx;
+  -webkit-animation: bounce 0.5s 0.4s cubic-bezier(0.77, 0.47, 0.64, 0.28)
+    alternate infinite;
+  animation: bounce 0.5s 0.4s cubic-bezier(0.77, 0.47, 0.64, 0.28) alternate
+    infinite;
+}
+
+@-webkit-keyframes bounce {
+  0% {
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    -webkit-transform: translateY(-20rpx);
+    transform: translateY(-20rpx);
+  }
+}
+
+@keyframes bounce {
+  0% {
+    -webkit-transform: translateY(0);
+    transform: translateY(0);
+  }
+
+  100% {
+    -webkit-transform: translateY(-20rpx);
+    transform: translateY(-20rpx);
+  }
+}
+</style>

+ 39 - 0
user_wxui/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>

+ 90 - 0
user_wxui/components/swiper/notice.vue

@@ -0,0 +1,90 @@
+<template>
+  <view v-if="noticelist.length">
+	  <view class="hswip" >
+			<image :src="tips" class="tipimg"></image>
+			  
+	  		<image :src="voice" class="voiceimg"></image>
+			<!--  -->
+			<swiper class="swiper" indicator-dots="true" :indicator-color="nactiveColor" :indicator-active-color="activeColor" circular :autoplay="autoplay" :interval="interval" :duration="duration" vertical='true'>
+				<swiper-item v-for="(ite,idx) in noticelist" :key="">
+					<view class="flexc swipers" @click="getDetail(ite.communityId)">
+						<!-- <view class="tit over">{{ite.noticeTitle}}</view> -->
+						<view class="tit over">{{ite.communityTitle}}</view>
+						<!-- <view class="num flexcc">{{ite.num}}</view> -->
+						<!-- <image :src="rimg" class="rimg"></image> -->
+						<view class="time">{{ite.publishTime}}</view>
+						<!-- <view class="time" v-if="ite.createTime">{{ite.createTime.substring(0,10)}}</view> -->
+					</view>
+				</swiper-item>
+			</swiper>
+	  		
+	  </view>
+  </view>
+</template>
+
+<script>
+  export default {
+	  props:{
+	  	autoplay: {
+	  		type: Boolean,
+	  		default () {
+	  			return false
+	  		}
+	  	},
+	  	confdat:{},
+		activeColor:{
+			type:String,
+			default () {
+				return '#000000'
+			}
+		},
+		nactiveColor:{
+			type:String,
+			default () {
+				return 'rgba(0, 0, 0, .3)'
+			}
+		},
+		noticelist:{
+			type: Array,
+			default () {
+				return []
+			}
+		}
+	  },
+	data(){
+		return{
+			tips:require("@/static/images/home/tips.png"),
+			voice:require("@/static/images/home/voice.png"),
+            interval: 2000,
+            duration: 500
+		}
+	},
+	methods:{
+		 getRoad(){
+		 	console.log(1)
+		 },
+		 getDetail(e){
+			 this.$emit('getNoticeDet',e)
+		 }
+	},
+	onLoad: function() {
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+.hswip /deep/ .uni-swiper-dots-vertical{right: 0;}
+.hswip /deep/  .uni-swiper-dot{width: 10rpx; height: 10rpx;}
+.hswip{width: 100%;background: #ffffff;border-radius: 20rpx;height:156rpx;padding: 32rpx 28rpx 0 24rpx;box-sizing: border-box;box-shadow: 0px 0px 6rpx 0px #DEDEDE;position: relative;
+	.tipimg{width: 168rpx;height: 32rpx;flex: 0 0 auto;margin-right: 22rpx;margin-bottom: 2rpx;}
+	.voiceimg{width: 96rpx;height: 82rpx;position: absolute;right: 26rpx;top: 12rpx;}
+	.swiper{flex: 1;height: 72rpx;z-index: 1;
+	.swipers{height: 72rpx;padding-right: 60rpx;}
+		.tit{flex: 1;font-weight: 500;font-size: 26rpx;color: #272707;}
+		.time{font-weight: 500;font-size: 22rpx;color: #AAAAAA;}
+		.num{font-weight: bold;
+font-size: 22rpx;min-width: 30rpx;height: 30rpx;padding: 0 4rpx;box-sizing: border-box;background: #D32C26;border-radius: 30rpx;color: #FFFFFF;margin-left: 14rpx;}
+		.rimg{width: 14rpx;height: 24rpx;margin-left: 14rpx;}
+	}
+}
+</style>

+ 176 - 0
user_wxui/components/toptab/phonebtn.vue

@@ -0,0 +1,176 @@
+<template>
+  <view>
+	  <view class="box_hei" @click="getClose" v-if="type">
+	  	<view @click.stop="btns"  class="hei_box">
+	  		<view class="box_top">
+	  			<view class="box_title">
+	  				<view>
+	  					智能校管家 申请使用
+	  				</view>
+	  			</view>
+	  			<view class="box_nameq">你的手机号码</view>
+	  		</view>
+	  		<!-- <view class="boxs"></view> -->
+	  		<view class="box_btns">
+	  			<view @click="getClose" class="box_btn box_btn1">拒绝</view>
+	  			<button class="box_btn box_btn2" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">允许</button>
+	  		</view>
+	  	</view>
+	  </view>
+  </view>
+</template>
+
+<script>
+	// import tabSearch from "@/components/toptab/search.vue"
+	import {getweChatOpenid} from "@/api/login.js"
+  export default {
+	  props:{
+		type:{
+			type:Boolean,
+			default () {
+				return true
+			}
+		},
+	  },
+	data(){
+		return{
+			sucimg:require("@/static/images/mine/success.png") 
+		}
+	},
+	methods:{
+		getClose(){
+			this.$emit("getClose")
+		},
+		btns(){
+			
+		},
+		async getPhoneNumber(e){
+			const {iv,encryptedData} = e.detail;
+			var that=this;
+			uni.login({
+			    provider: 'weixin',
+			    success: (res) => {
+			        // 获取用户信息
+					if(res.code) {
+						var params={
+							iv: iv,
+							encryptedData: encryptedData,
+							code : res.code,
+						}
+						// 登录还是注册
+						that.$emit("getPhoneNumber",params)
+						
+					}
+			    }
+			})			
+		}, 
+	},
+	onLoad: function() {
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+.box_hei{
+		width: 100%;
+		height: 100%;
+		background: rgba(0,0,0,.8);
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 3;
+		.hei_box{
+			background: #fff;
+			border-radius:22upx 22upx 0 0;
+			height: 440upx;
+			padding: 52upx 28upx 104upx;
+			position: absolute;
+			bottom:0;
+			width: 100%;
+			box-sizing: border-box;
+			.box_top{
+				padding: 0 18upx 62upx;
+				.box_title{
+					display: flex;
+					justify-content: space-between;
+					font-size: 30upx;
+					margin-bottom: 30upx;
+					view{
+						display: flex;
+						align-items: center;
+						color: #333333;
+					}
+					.img{
+						margin-right: 14upx;
+						width: 180upx;
+						height: 48upx;
+					}
+					.imgs{
+						width: 40upx;
+						height: 40upx;
+					}
+				}
+				.box_nameq{
+					color: #333333;
+					font-size: 44upx;
+					font-weight: bold;
+				}
+			}
+			.box_phone{
+				height: 106upx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				font-size: 28upx;
+				color: #A6A6A6;
+				border-bottom: 1upx solid #EBEBEB;
+				border-top: 1upx solid #EBEBEB;
+				view{
+					display: flex;
+					align-items: center;
+				}
+				.img{
+					width: 26upx;
+					height: 22upx;
+				}
+				span{
+					color: #333333;
+					font-size: 32upx;
+					padding-right: 18upx;
+					font-weight: bold;
+				}
+			}
+			.box_qita{
+				height: 106upx;
+				font-size: 28upx;
+				color: #7CA4FC;
+				line-height: 106upx;
+			}
+			.boxs{
+				height: 50upx;
+			}
+			.box_btns{
+				margin-top: 10upx;
+				display: flex;
+				justify-content: space-between;
+				.box_btn{
+					width: 324upx;
+					height: 82upx;
+					font-size: 32upx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					border-radius: 4upx;
+				}
+				.box_btn1{
+					background: #F3F3F3;
+					color: #33B925;
+				}
+				.box_btn2{
+					background: #37962B;
+					color: #FFFFFF;
+				}
+			}
+		}
+	}
+</style>

+ 31 - 0
user_wxui/config.js

@@ -0,0 +1,31 @@
+// 应用全局配置
+module.exports = {
+  // baseUrl: 'https://vue.ruoyi.vip/prod-api',
+  // baseUrl: 'http://47.99.82.249:5010/prod-api',
+  // baseUrl: 'http://192.168.101.245:8065',
+  baseUrl: 'http://10.90.90.52:8065',
+  // baseUrl: 'http://192.168.101.168:8065',
+  // baseUrlimg: 'http://114.99.127.243:2001',
+  baseName:'智慧社区用户端',
+  // 应用信息
+  appInfo: {
+    // 应用名称
+    name: "ruoyi-app",
+    // 应用版本
+    version: "1.1.0",
+    // 应用logo
+    logo: "/static/logo.png",
+    // 官方网站
+    site_url: "http://ruoyi.vip",
+    // 政策协议
+    agreements: [{
+        title: "隐私政策",
+        url: "https://ruoyi.vip/protocol.html"
+      },
+      {
+        title: "用户服务协议",
+        url: "https://ruoyi.vip/protocol.html"
+      }
+    ]
+  }
+}

+ 175 - 0
user_wxui/goods/components/box/list.vue

@@ -0,0 +1,175 @@
+<template>
+<view>
+	<!-- 第一种样式  人员管理-->
+	<block v-if="datainfo.length>0">
+		<!-- 人员管理 -->
+		<block v-if="type=='people'">
+			
+		</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
+				}
+			},
+		},
+		data(){
+			return{
+				noiconpimg:require("@/static/images/nodata.png"),
+				
+				
+				baseUrl:config.baseUrl,
+				delBtnWidth:66,//左滑默认宽度
+			}
+		},
+		mounted() {
+			
+		},
+		methods:{
+			checkPermi, checkRole,
+			getDetail(e){
+				this.$emit('getDetail',e)
+			},
+			getAddFn(e){
+				this.$emit('getAddFn',e)
+			},
+			getReadlist(e){
+				this.$emit('getReadlist',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: 24rpx 24rpx 22rpx;
+		.imgs{width: 40rpx;height: 42rpx;margin-right: 32rpx;}
+		.tit{font-size: 30rpx;color: #272727;font-weight: bold;margin-right: 20rpx;}
+		.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;}
+	}
+	.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;display: flex;
+		.head{width: 96rpx;height: 98rpx;margin-right: 32rpx;flex: 0 0 auto;margin-top: 36rpx;}
+		.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);}
+	}
+	.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;}
+	}
+}
+
+
+
+// 无数据
+.nodata{display: flex;flex-direction: column;align-items: center;
+	image{width: 440rpx;height: 440rpx;}
+	view{font-size: 30rpx;color: #666666;font-weight: bold;}
+}
+</style>

+ 85 - 0
user_wxui/goods/components/popup/popup.vue

@@ -0,0 +1,85 @@
+<template>
+	<view>
+		<!-- 弹窗 -->
+		<view class="bgbox" @click="getClose" v-if="type"></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("@/static/images/close.png"),
+				downimg:require("@/health/static/health/down.png"),
+				hicoa:require("@/health/static/health/hicoa.png"),
+			}
+		},
+		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) {
+						
+					}
+				});
+			},	
+		}
+	}
+</script>
+
+<style lang="scss" scoped>	
+.closeimg{width: 32rpx;height: 32rpx;position: absolute;bottom: -72rpx;left: 50%;margin-left: -16rpx;}
+</style>

+ 124 - 0
user_wxui/goods/pages/points/index.vue

@@ -0,0 +1,124 @@
+<template>
+  <view class="hdetail" :style="'padding-top:'+nvaHeight+'px;'">
+		<view class="navbox">
+			<uni-nav-bar  color="#ffffff" left-icon="left" title="积分商城"  :background-color="backgroundColor" :border="false" statusBar='true' fixed="true" @clickLeft="getBackFn">
+			</uni-nav-bar>
+			<!-- 家人 -->
+			<view class="headbox flexc" :style="'backgroundColor:'+backgroundColor">
+				<view class="htop" :class="tabval==idx?'act':''" v-for="(ite,idx) in list" :key="idx" @click="getTabFn(idx)">
+					<view class="img"><image :src="heada" class="imaga"></image></view>
+					<view class="tit">{{ite.tit}}</view>
+				</view>
+				<view class="htop"  @click="getAddFn">
+					<view class="img add"><image :src="addimg"></image></view>
+					
+				</view>
+				
+			</view>
+		</view>
+		<!-- 主体 -->
+		<view class="wymain" >
+			
+		</view>
+	<loading></loading>
+  </view>
+</template>
+
+<script>
+  export default {
+	components:{},
+	data(){
+		return{
+			nvaHeight:44,
+			// activeColor:'#A7CDF9',
+			// nactiveColor:'#DADADA',
+			backgroundColor: "transparent",
+			
+		}
+	},
+	watch:{
+		lookfalg(val){
+			if(val){
+				
+			}
+		}
+	},
+	onPageScroll(e) {
+		var scrollTop = Number(e.scrollTop);
+		if (scrollTop > 0) {
+			this.backgroundColor = '#48CC9A'
+		} else {
+			this.backgroundColor = 'transparent'
+		}
+	},
+    onLoad: function() {
+		uni.getSystemInfo({
+			success: (e) => {
+				this.nvaHeight = Number(e.statusBarHeight)+44;
+			}
+		})
+    },
+	methods:{	
+		getClose(){
+			this.type="";
+		},
+		getCodeFn(){
+			this.type='code'
+		},
+		getAddFn(){
+			this.$tab.navigateTo(`/health/pages/health/add`)
+		},
+		getZhanFn(idx){
+			this.zhanList[idx].zhanflag=!this.zhanList[idx].zhanflag
+		},
+		getBackFn(){
+			uni.navigateBack({
+				delta:1
+			})
+		},
+		getCode(code){
+			var idCard='123456789'
+			const firstPart = idCard.slice(0, 1);  
+			  // 生成中间8位的星号  
+			  const middlePart = '*'.repeat(idCard.length-2);  
+			  // 获取后4位  
+			  const lastPart = idCard.slice(idCard.length-1); 
+			  var s= firstPart + middlePart + lastPart;
+			  console.log(s)
+			  // return firstPart + middlePart + lastPart;
+		},
+		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){
+					
+				}else{
+					this.$toast(res.msg)
+				}
+			})
+			
+		},
+		
+	}
+  }
+</script>
+<style>
+	page{background:#F4F6F8;}
+</style>
+<style lang="scss" scoped>
+.w100{width: 100%;}
+.hdetail{
+	background: linear-gradient(180deg, #FFB132 0%, #FE5A0E 49%, #FFFFFF 100%) no-repeat;background-size: 100% 722rpx;min-height: 100vh;box-sizing: border-box;
+}
+
+.navbox{position: fixed;left: 0;right: 0;top: 0;z-index: 4;	}
+.wymain{z-index: 2;position: relative;padding: 0 24rpx 24rpx;}
+
+</style>

BIN
user_wxui/goods/static/goods/icon_gmdd_sjtx.png


BIN
user_wxui/goods/static/goods/icon_ljgm_dz.png


BIN
user_wxui/goods/static/goods/icon_ljgm_dz_jr.png


BIN
user_wxui/goods/static/goods/icon_mrqd_jbng.png


BIN
user_wxui/goods/static/goods/icon_mrqd_qdtx_big.png


BIN
user_wxui/goods/static/goods/icon_mrqd_qdtx_normal.png


BIN
user_wxui/goods/static/goods/icon_mrqd_qdtx_selected.png


BIN
user_wxui/goods/static/goods/icon_spxq_fx.png


BIN
user_wxui/goods/static/goods/icon_tjjl_ss.png


BIN
user_wxui/goods/static/goods/pic_jfsc_tx.png


BIN
user_wxui/goods/static/goods/pic_lqzx_qmc.png


BIN
user_wxui/goods/static/goods/pic_lqzx_yhqbg.png


BIN
user_wxui/goods/static/goods/pic_mrqd_bt.png


+ 175 - 0
user_wxui/health/components/box/list.vue

@@ -0,0 +1,175 @@
+<template>
+<view>
+	<!-- 第一种样式  人员管理-->
+	<block v-if="datainfo.length>0">
+		<!-- 人员管理 -->
+		<block v-if="type=='people'">
+			
+		</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
+				}
+			},
+		},
+		data(){
+			return{
+				noiconpimg:require("@/static/images/nodata.png"),
+				
+				
+				baseUrl:config.baseUrl,
+				delBtnWidth:66,//左滑默认宽度
+			}
+		},
+		mounted() {
+			
+		},
+		methods:{
+			checkPermi, checkRole,
+			getDetail(e){
+				this.$emit('getDetail',e)
+			},
+			getAddFn(e){
+				this.$emit('getAddFn',e)
+			},
+			getReadlist(e){
+				this.$emit('getReadlist',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: 24rpx 24rpx 22rpx;
+		.imgs{width: 40rpx;height: 42rpx;margin-right: 32rpx;}
+		.tit{font-size: 30rpx;color: #272727;font-weight: bold;margin-right: 20rpx;}
+		.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;}
+	}
+	.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;display: flex;
+		.head{width: 96rpx;height: 98rpx;margin-right: 32rpx;flex: 0 0 auto;margin-top: 36rpx;}
+		.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);}
+	}
+	.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;}
+	}
+}
+
+
+
+// 无数据
+.nodata{display: flex;flex-direction: column;align-items: center;
+	image{width: 440rpx;height: 440rpx;}
+	view{font-size: 30rpx;color: #666666;font-weight: bold;}
+}
+</style>

+ 104 - 0
user_wxui/health/components/popup/popup.vue

@@ -0,0 +1,104 @@
+<template>
+	<view>
+		<!-- 弹窗 -->
+		<view class="bgbox" @click="getClose" v-if="type"></view>
+		<!-- 健康码 -->
+		<view v-if="type=='code'" class="codebox">
+			<view class="tit mb18">健康码</view>
+			<image :src="hicoa" class="code"></image>
+			<view class="codebtns flexcc">
+				<image :src="downimg"></image>
+				保存健康码至手机
+			</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("@/static/images/close.png"),
+				downimg:require("@/health/static/health/down.png"),
+				hicoa:require("@/health/static/health/hicoa.png"),
+			}
+		},
+		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) {
+						
+					}
+				});
+			},	
+		}
+	}
+</script>
+
+<style lang="scss" scoped>	
+// 指派
+.codebox{width: 470rpx;height: 620rpx;background: #FFFFFF;border-radius: 20rpx;padding: 30rpx 36rpx 44rpx;position: fixed;left:140rpx;top: 40%;transform: translateY(-235rpx);z-index: 10;box-sizing: border-box;
+	.tit{font-weight: bold;font-size: 30rpx;color: #272727;text-align: center;}
+	.code{width: 334rpx;height:334rpx;margin: 0 auto 56rpx;}
+	.codebtns{height: 78rpx;background: #318E6B;border-radius: 20rpx;font-weight: 500;
+font-size: 26rpx;
+color: #FFFFFF;
+		image{width: 22rpx;height: 22rpx;margin-right: 14rpx;}
+	}
+}
+.closeimg{width: 32rpx;height: 32rpx;position: absolute;bottom: -72rpx;left: 50%;margin-left: -16rpx;}
+</style>

+ 295 - 0
user_wxui/health/pages/health/add - 副本.vue

@@ -0,0 +1,295 @@
+<template>
+	<view class="check" :style="'padding-top:'+nvaHeight+'px;'">
+		<view class="navbox">
+			<uni-nav-bar  color="#ffffff" left-icon="left" title="健康档案"  :background-color="backgroundColor" :border="false" statusBar='true' fixed="true" @clickLeft="getBackFn">
+			</uni-nav-bar>
+		</view>
+		<uni-forms ref="form" :model="datainfo">
+			<view class="cbox">
+				<view class="chmain">
+					<view class="plr6">
+						<view class="rztit">请上传身份证照片</view>
+						<view class="flexcj mb10">
+							<view class="carbox" @click="getaddImage('front')">
+								<image :src="baseUrl+datainfo.front" class="img" v-if="datainfo.front"></image>
+								<image :src="cardz" class="img" v-else></image>
+								<view class="tit">拍摄人像面</view>
+								<!-- <view class="tit">身份证正面</view> -->
+							</view>
+							<view class="carbox" @click="getaddImage('back')">
+								<image :src="baseUrl+datainfo.back" class="img" v-if="datainfo.back"></image>
+								<image :src="cardf" class="img" v-else></image>
+								<view class="tit">拍摄国徽面</view>
+								<!-- <view class="tit">身份证反面</view> -->
+							</view>
+						</view>
+						<view class="mb4">
+							<view class="cardtip">身份信息会根据上传的证件照片自动识别,支持手动输入。</view>
+							<view class="cardtip">如果识别错误,可尝试再次拍照。</view>
+						</view>
+					</view>
+					<uni-forms-item label="身份证号" required name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput disabled v-model="datainfo.phonenumber"  :inputBorder='false' placeholder="自动识别" />
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="姓名" required name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput disabled v-model="datainfo.phonenumber"  :inputBorder='false' placeholder="自动识别" />
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="性别" required name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput disabled v-model="datainfo.phonenumber"  :inputBorder='false' placeholder="自动识别" />
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="家庭地址" required name="phonenumber">
+						<view class="flexc">
+							<uni-easyinput disabled  v-model="datainfo.phonenumber"  :inputBorder='false' placeholder="自动识别" />
+						</view>
+					</uni-forms-item>
+					<picker range-key='dictLabel' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+						<uni-forms-item label="与户主关系" required name="phonenumber">
+							<view class="flexc ml10">
+								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'选择与户主关系'}}</view>
+							</view>
+						</uni-forms-item>
+					</picker>
+					<picker range-key='dictLabel' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+						<uni-forms-item label="是否党员" required name="phonenumber">
+							<view class="flexc ml10">
+								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择是/否'}}</view>
+							</view>
+						</uni-forms-item>
+					</picker>
+					<picker range-key='dictLabel' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+						<uni-forms-item label="特殊类型" name="phonenumber">
+							<view class="flexc ml10">
+								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'如有五保户等特殊类型,请选择'}}</view>
+							</view>
+						</uni-forms-item>
+					</picker>
+					<uni-forms-item label="兴趣爱好" name="phonenumber">
+						<view class="flexc ml10">
+							<uni-easyinput type="textarea" autoHeight v-model="text" :inputBorder='false' placeholder="请输入兴趣爱好" />
+						</view>
+					</uni-forms-item>
+					
+					<uni-forms-item label="上传头像" name="phonenumber">			
+						<view class="flexe mt10">
+							<view class="addimgs">
+								<view class="assimg">
+									<image :src="aphoto" class="img"></image>
+									<image :src="rdelimg" class="delimg" @click="getDelFn"></image>
+								</view>
+							</view>
+							<view class="addbox">
+								<image :src="aphoto"></image>
+								<view>添加头图</view>
+							</view>
+						</view>	
+					</uni-forms-item>
+				</view>
+				<view class="rhbtn mt30 bga" @click="getNext">提交</view>
+			</view>
+		</uni-forms>
+		
+
+		<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 {
+				cardz:require('@/health/static/health/cardz.png'),
+				cardf:require('@/health/static/health/cardf.png'),
+				aphoto: require('@/work/static/service/photo.png'),
+				rdelimg: require('@/work/static/service/rdel.png'),
+				baseUrl: config.baseUrl,
+				checkflag:true,
+				nvaHeight:44,
+				backgroundColor: "transparent",
+				datainfo: {
+					sex:1,
+					realName: '',
+					idCard: '',
+					address: '',
+					expirationDate: '',
+					phonenumber: '',
+					front: '',
+					back: '',
+				},
+				syqxidx:'',
+				sexs: [{
+					text: '男',
+					value: 1
+				}, {
+					text: '女',
+					value: 2
+				}],
+			}
+		},
+		onLoad: function() {
+			uni.getSystemInfo({
+				success: (e) => {
+					this.nvaHeight = Number(e.statusBarHeight)+44;
+				}
+			})
+		},
+		onPageScroll(e) {
+			var scrollTop = Number(e.scrollTop);
+			if (scrollTop > 0) {
+				this.backgroundColor = '#48CC9A'
+			} else {
+				this.backgroundColor = 'transparent'
+			}
+		},
+		methods: {
+			checkPermi,
+			checkRole,
+			getBackFn(){
+				uni.navigateBack({
+					delta:1
+				})
+			},
+			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>
+	.bga{background-color: #46CB99;}
+.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 /deep/ .is-required{font-size: 26rpx;color: #F40027;margin-right: 4rpx;}
+.check{background: linear-gradient(180deg, #45CB99 0%, rgba(238,227,197,0) 100%) no-repeat;background-size: 100% 782rpx;min-height: 100vh;box-sizing: border-box;padding: 0 18rpx 22rpx;}
+.cbox{background: #FFFFFF;border-radius: 20rpx;flex: 1;padding: 30rpx 24rpx 46rpx;
+	.chmain{
+		padding: 0 8rpx;
+		.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;}
+		}
+	}
+	
+}
+.navbox{position: fixed;left: 0;right: 0;top: 0;z-index: 4;	}
+.rztit{font-weight: bold;font-size: 30rpx;color: #222327;margin-bottom: 30rpx;}
+	.carbox{width: 300rpx;border-radius: 14rpx;overflow: hidden;
+		.img{width: 300rpx;height: 208rpx;}
+		.tit{width: 100%;height: 56rpx;background: #7CC2A8;text-align: center;font-weight: 500;
+font-size: 26rpx;line-height: 56rpx;
+color: #FFFFFF;}
+	}
+	.cardtip{font-weight: 500;font-size: 24rpx;color: #999999;line-height: 40rpx;}
+.addimgs{display: flex;align-items: center;flex-wrap: wrap;justify-content: flex-end;
+	
+	.assimg{width: 128rpx;height: 128rpx;position: relative;overflow: hidden;margin: 0 0 20rpx 24rpx;
+		.img{width: 100%;height: 100%;}
+		.delimg{width: 24rpx;height: 24rpx;position: absolute;right: 0;top: 0;}
+	}
+}
+.addbox{width: 160rpx;height: 128rpx;background: #F0F0F0;border-radius: 20rpx;display: flex;flex-direction: column;align-items: center;justify-content: center;margin-left: 24rpx;margin-bottom: 20rpx;flex: 0 0 auto;
+		image{width: 48rpx;height: 42rpx;margin-bottom: 12rpx;}
+		view{font-weight: 500;font-size: 24rpx;color: #666666;}
+	}
+.tips{font-weight: bold;color: #272727;font-size: 26rpx;margin-left: 8rpx;}
+</style>

+ 615 - 0
user_wxui/health/pages/health/add.vue

@@ -0,0 +1,615 @@
+<template>
+	<!-- :style="'padding-top:'+nvaHeight+'px;'" -->
+	<view class="check">
+		<!-- <view class="navbox">
+			<uni-nav-bar  color="#ffffff" left-icon="left" title="健康档案"  :background-color="backgroundColor" :border="false" statusBar='true' fixed="true" @clickLeft="getBackFn">
+			</uni-nav-bar>
+		</view> -->
+		<uni-forms ref="form" :model="datainfo" :rules="rules">
+			<view class="cbox">
+				<view class="chmain">
+					<view class="plr6">
+						<view class="rztit">请上传身份证照片</view>
+						<view class="flexcj mb10">
+							<view class="carbox" @click="getaddImagea('front')">
+								<image :src="baseUrl+datainfo.idCardBack" class="img" v-if="datainfo.idCardBack"></image>
+								<image :src="cardz" class="img" v-else></image>
+								<view class="tit">拍摄人像面</view>
+							</view>
+							<view class="carbox" @click="getaddImagea('back')">
+								<image :src="baseUrl+datainfo.idCardFront" class="img" v-if="datainfo.idCardFront"></image>
+								<image :src="cardf" class="img" v-else></image>
+								<view class="tit">拍摄国徽面</view>
+							</view>
+						</view>
+						<view class="mb4">
+							<view class="cardtip">身份信息会根据上传的证件照片自动识别,支持手动输入。</view>
+							<view class="cardtip">如果识别错误,可尝试再次拍照。</view>
+						</view>
+					</view>
+					<uni-forms-item label="身份证号" required name="residentIdCard">
+						<view class="flexc">
+							<uni-easyinput  disabled v-model="datainfo.residentIdCard"  :inputBorder='false' placeholder="自动识别" />
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="姓名" required name="residentName">
+						<view class="flexc">
+							<uni-easyinput  disabled v-model="datainfo.residentName"  :inputBorder='false' placeholder="自动识别" />
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="性别" required name="residentGender">
+						<view class="flexc">
+							<view class="flex1"></view>
+							<uni-data-checkbox  :map="map" :disabled="isdisabled" selectedColor="#0156FE" selectedTextColor="#272727" v-model="datainfo.residentGender" :localdata="xbList" />
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="家庭地址" required name="idCardAddress">
+						<view class="flexc">
+							<uni-easyinput  disabled  v-model="datainfo.idCardAddress"  :inputBorder='false' placeholder="自动识别" />
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="手机号码" required name="residentPhone">
+						<view class="flexc">
+							<uni-easyinput  :disabled="isdisabled"  v-model="datainfo.residentPhone"  :inputBorder='false' placeholder="请输入手机号码" />
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="居住门户" required name="houseId">
+						<w-select
+						      style="margin-left: 20rpx;" 
+						     v-model="datainfo.houseId"
+						      :list='fwlist'
+						      valueName='dictLabel' 
+						      keyName="dictValue"
+							  :chosevalue="datainfo.detailedAddress"
+							  :filterable='filterable'
+						      @change='getchange'
+						    >
+						    </w-select>
+					</uni-forms-item>
+					
+					<picker range-key='dictLabel' :disabled="isdisabled" :value="sfhzidx" :range="sfList"   @change='bindDateChange'>
+						<uni-forms-item label="是否户主" required name="isHouseholder">
+							<view class="flexc mh35">
+								<view class="flex1 txr f13 co27" v-if="datainfo.isHouseholder&&!sfhz">{{statusFormats(datainfo.isHouseholder,sfList,'sfhz')}}</view>
+								<view class="flex1 txr f13" v-else :class="sfhz?'co27':'coa'">{{sfhz||"请选择是/否"}}</view>
+								
+							</view>
+						</uni-forms-item>
+					</picker>
+					<picker range-key='dictLabel' :disabled="isdisabled" :value="hzgxidx" :range="hzgxList"   @change='bindDateChangea'>
+						<uni-forms-item label="与户主关系" required name="residentRelationship">
+							<view class="flexc mh35">
+								<view class="flex1 txr f13 co27" v-if="datainfo.residentRelationship&&!hzgx">{{statusFormats(datainfo.residentRelationship,hzgxList,'hzgx')}}</view>
+								<view class="flex1 txr f13" v-else :class="hzgx?'co27':'coa'">{{hzgx||"请选择与户主关系"}}</view>
+								
+							</view>
+						</uni-forms-item>
+					</picker>
+					<picker range-key='dictLabel' :disabled="isdisabled" :value="sfzhidx" :range="sfList"   @change='bindDateChangeb'>
+						<uni-forms-item label="是否租户" required name="isTenant">
+							<view class="flexc mh35">
+								<view class="flex1 txr f13 co27" v-if="datainfo.isTenant&&!sfzh">{{statusFormats(datainfo.isTenant,sfList,'sfzh')}}</view>
+								<view class="flex1 txr f13" v-else :class="sfzh?'co27':'coa'">{{sfzh||"请选择是/否"}}</view>
+								
+							</view>
+						</uni-forms-item>
+					</picker>
+					<picker range-key='dictLabel' :disabled="isdisabled" :value="rymmidx" :range="rymmList"   @change='bindDateChangec'>
+						<uni-forms-item label="人员面貌" required name="residentAppearance">
+							<view class="flexc mh35">
+								<view class="flex1 txr f13 co27" v-if="datainfo.residentAppearance&&!rymm">{{statusFormats(datainfo.residentAppearance,rymmList,'rymm')}}</view>
+								<view class="flex1 txr f13" v-else :class="rymm?'co27':'coa'">{{rymm||"请选择人员面貌"}}</view>
+								
+							</view>
+						</uni-forms-item>
+					</picker>
+					<picker range-key='dictLabel' :disabled="isdisabled" :value="dslxidx" :range="dslxList"   @change='bindDateChanged'>
+						<uni-forms-item label="特殊类型" name="specialType">
+							<view class="flexc mh35">
+								<view class="flex1 txr f13 co27" v-if="datainfo.specialType&&!dslx">{{statusFormats(datainfo.specialType,dslxList,'dslx')}}</view>
+								<view class="flex1 txr f13" v-else :class="dslx?'co27':'coa'">{{dslx||"如有五保户等特殊类型,请选择"}}</view>
+								
+							</view>
+						</uni-forms-item>
+					</picker>
+					<uni-forms-item label="工作单位"  name="residentEmployer">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled"  v-model="datainfo.residentEmployer"  :inputBorder='false' placeholder="请输入工作单位" />
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="兴趣爱好" name="residentHobby">
+						<view class="flexc ml10">
+							<uni-easyinput type="textarea" :disabled="isdisabled" autoHeight v-model="datainfo.residentHobby" :inputBorder='false' placeholder="请输入兴趣爱好" />
+						</view>
+					</uni-forms-item>
+					
+					<uni-forms-item label="上传头像" name="facePhoto">			
+						<view class="addimgs">
+							<block v-if="phofile&&phofile.length">
+								<view class="assimg" v-for="(ite,idx) in phofile" :key="idx" @click="getPreview(idx,phofile)">
+									<image :src="baseUrl+ite" class="img"></image>
+									<image :src="rdelimg" class="delimg" @click.stop="getDelFn(idx,'fm')"></image>
+								</view>
+							</block>
+							<view class="addbox" @click="getaddImage">
+								<image :src="aphoto"></image>
+								<view>添加图片</view>
+							</view>
+						</view>
+					</uni-forms-item>
+				</view>
+				<view class="rhbtn mt30 bga" @click="getEditFn" v-if="isdisabled">修改</view>
+				<view class="rhbtn mt30 bga" @click="getSubmit" v-else>提交</view>
+			</view>
+		</uni-forms>
+		
+
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import {checkPermi,checkRole} from "@/utils/permission"; // 权限判断函数
+	import {uploadIdentify,uploadmore} from '@/utils/common.js'
+	import {houseInfolistNoPage} from "@/api/work/work.js"
+	import {residentInfoAdd,residentInfoPut,residentInfoDet} from "@/api/work/people.js"
+	import {getDictionaryFn} from "@/api/system/user.js"
+	import {selectValueKey} from "@/utils/common.js"
+	import {getOcrIdCard} from "@/api/system/card.js"
+	import wSelect from "@/work/components/w-select/w-select.vue"
+	export default {
+		components: {wSelect},
+		data() {
+			return {
+				cardz:require('@/health/static/health/cardz.png'),
+				cardf:require('@/health/static/health/cardf.png'),
+				aphoto: require('@/work/static/service/photo.png'),
+				rdelimg: require('@/work/static/service/rdel.png'),
+				baseUrl: config.baseUrl,
+				checkflag:true,
+				nvaHeight:44,
+				backgroundColor: "transparent",
+				datainfo: {
+					// "residentId":"",//居住人员主键
+					"houseId":"",//关联房屋信息表的house_id
+					// "userId":"",//关联sys_user表中user_id
+					"detailedAddress":"",//居住人员的详细门牌号
+					"residentName":"",//居住人员姓名
+					"residentIdCard":"",//居住人员身份证号码,18位
+					"residentBirthday":"",//居住人员出生日期
+					// "yearsOld":"",//年龄
+					"residentPhone":"",//居住人员手机号
+					"residentGender":'',//居住人员性别:1-男,2-女
+					"residentRelationship":"",//居住人员与户主的关系,如父子、夫妻等
+					"isHouseholder":"",//是否是户主 N不是 Y是
+					"isTenant":"",//是否是租户:Y-是,N-否
+					"residentEmployer":"",//居住人员工作单位
+					"residentAppearance":"",//居住人员面貌,如党员、群众等
+					"residentHobby":"",//爱好
+					"facePhoto":"",//人脸地址
+					"idCardAddress":"",//身份证住址
+					"specialType":"",//特殊类型
+					"idCardFront":"",//身份证正面
+					"idCardBack":"",//身份证反面
+				},
+				rules:{
+					residentIdCard: {rules: [{required: true,errorMessage: '请输入身份证号码' }]},
+					residentName: {rules: [{required: true,errorMessage: '请输入姓名' }]},
+					residentGender: {rules: [{required: true,errorMessage: '请选择性别' }]},
+					houseId: {rules: [{required: true,errorMessage: '请选择居住门户' }]},
+					detailedAddress: {rules: [{required: true,errorMessage: '请输入居住地址' }]},
+					isHouseholder: {rules: [{required: true,errorMessage: '请选择是否户主' }]},
+					// residentRelationship: {rules: [{required: true,errorMessage: '请选择与户主关系' }]},
+					// isTenant: {rules: [{required: true,errorMessage: '请选择是否租户' }]},
+					// residentAppearance: {rules: [{required: true,errorMessage: '请选择人员面貌' }]},
+					residentPhone: {rules: [{required: true,errorMessage: '请输入手机号'}, {pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,errorMessage:'请输入正确的手机号码'}]},
+				  },
+				sfhz:"",
+				hzgx:"",
+				sfzh:"",
+				rymm:"",
+				dslx:"",
+				sfhzidx:0,
+				hzgxidx:0,
+				sfzhidx:0,
+				rymmidx:0,
+				sfhzidx:0,
+				dslxidx:0,
+				list:[],
+				sfList:[],
+				hzgxList:[],
+				rymmList:[],
+				dslxList:[],
+				xbList:[],
+				phofile:[],
+				fwlist:[],
+				isdisabled:false,
+				ptype:'add',
+				filterable:true,
+				chooseValue:'',
+				map:{text:'dictLabel',value:'dictValue'},
+				userId:this.$store.state.user.userId,
+			}
+		},
+		onLoad: function(e) {
+			if(e.id){
+				this.id=e.id;
+				this.ptype="edit";
+				// this.isdisabled=true;
+				this.getDetail()
+			}
+			this.init()
+			uni.getSystemInfo({
+				success: (e) => {
+					this.nvaHeight = Number(e.statusBarHeight)+44;
+				}
+			})
+		},
+		onPageScroll(e) {
+			var scrollTop = Number(e.scrollTop);
+			if (scrollTop > 0) {
+				this.backgroundColor = '#48CC9A'
+			} else {
+				this.backgroundColor = 'transparent'
+			}
+		},
+		methods: {
+			checkPermi,
+			checkRole,
+			getEditFn(){
+				this.isdisabled=false;
+			},
+			statusFormats(data, list,type) {
+				var aite=selectValueKey(list, data);
+				if(type=='sfhz'){
+					this.sfhzidx=aite.key
+				}else if(type=='hzgx'){
+					this.hzgxidx=aite.key;
+				}else if(type=='sfzh'){
+					this.sfzhidx=aite.key;
+				}else if(type=='rymm'){
+					this.rymmidx=aite.key;
+				}
+				return aite.actions;
+			},
+			getchange(e){
+				this.datainfo.houseId=e.dictValue;
+				this.datainfo.detailedAddress=e.dictLabel;
+			},
+			init(){
+				var params={
+					userId:this.userId,
+					pageSize: 100,
+					pageNum: 1,
+				}
+				houseInfolistNoPage(params).then(res=>{
+					if(res.code==200){
+						this.fwlist= res.rows.map(v => {
+							return {
+								dictLabel: v.detailedAddress,
+								dictValue: v.houseId,
+								location: v.location
+							}
+						})
+						if(res.rows&&res.rows.length<2){
+							var newObj=res.rows[0];
+							this.datainfo.houseId=newObj.houseId;
+							this.datainfo.detailedAddress=newObj.detailedAddress
+						}
+					}
+				})
+				// 是否
+				getDictionaryFn('sys_yes_no').then(res=>{
+					if(res.code==200){
+						this.sfList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+				//户主关系
+				getDictionaryFn('relationship_householder').then(res=>{
+					if(res.code==200){
+						this.hzgxList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+				//人员面貌
+				getDictionaryFn('affiliation_personnel').then(res=>{
+					if(res.code==200){
+						this.rymmList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+				// 特殊类型
+				
+				getDictionaryFn('special_type').then(res=>{
+					if(res.code==200){
+						this.dslxList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+				//性别
+				getDictionaryFn('gender').then(res=>{
+					if(res.code==200){
+						this.xbList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: Number(v.dictValue)
+							}
+						})
+					}
+				})
+				
+			},
+			getBackFn(){
+				uni.navigateBack({
+					delta:1
+				})
+			},
+			bindDateChange(e){
+				var val=e.detail.value;
+				this.datainfo.isHouseholder=this.sfList[val].dictValue;
+				this.sfhz=this.sfList[val].dictLabel;
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.datainfo.residentRelationship=this.hzgxList[val].dictValue;
+				this.hzgx=this.hzgxList[val].dictLabel;
+			},
+			bindDateChangeb(e){
+				var val=e.detail.value;
+				this.datainfo.isTenant=this.sfList[val].dictValue;
+				this.sfzh=this.sfList[val].dictLabel;
+			},
+			bindDateChangec(e){
+				var val=e.detail.value;
+				this.datainfo.residentAppearance=this.rymmList[val].dictValue;
+				this.rymm=this.rymmList[val].dictLabel;
+			},
+			bindDateChanged(e){
+				var val=e.detail.value;
+				this.datainfo.specialType=this.dslxList[val].dictValue;
+				this.dslx=this.dslxList[val].dictLabel;
+			},
+			getDetail(){
+				residentInfoDet(this.id).then(res=>{
+					if(res.code==200){
+						this.datainfo=res.data;
+						if(res.data.facePhoto){
+							this.phofile=res.data.facePhoto.split(',')
+						}
+					}
+				})
+			},
+			getSubmit(){
+				var that=this;
+				this.$refs.form.validate().then(res => {
+					var params=JSON.parse(JSON.stringify(this.datainfo))
+					var phofile=JSON.parse(JSON.stringify(this.phofile))
+					if(phofile&&phofile.length){
+						params.facePhoto=this.phofile.join(',');
+					}
+					// if(!params.assetId){
+					// 	this.$toast('请选择资产类型')
+					// 	return
+					// }
+					// if(!params.equipmentName){
+					// 	this.$toast('请输入资产名称')
+					// 	return
+					// }
+					if(!params.detailedAddress){
+						this.$toast('请选择居住门户')
+						return
+					}
+					let _IDRe18 =
+						/^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
+					let _IDre15 = /^([1-6][1-9]|50)\d{4}\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}$/
+					// 校验身份证:
+					if (params.residentIdCard&&!_IDRe18.test(params.residentIdCard) && !_IDre15.test(params.residentIdCard)) {
+						this.$toast("请输入正确身份证号")
+						return
+					}
+					if(this.ptype=='add'){
+						residentInfoAdd(params).then(res=>{
+							if(res.code==200){
+								this.$toast("新增成功")
+								setTimeout(function(){
+									uni.$emit("residentInfoList")
+									uni.navigateBack({
+										delta:1
+									})
+								},1500)
+							}
+						})
+					}else{
+						residentInfoPut(params).then(res=>{
+							if(res.code==200){
+								this.$toast("修改成功")
+								setTimeout(function(){
+									uni.$emit("residentInfoList")
+									uni.navigateBack({
+										delta:1
+									})
+								},1500)
+							}
+						})
+					}	
+				})
+			},
+			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(idx,type){
+				var that=this;
+				uni.showModal({
+					title: '确认删除',
+					content: "是否确认删除",
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							that.phofile.splice(idx,1)	
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			getaddImage(type){
+				if(this.isdisabled){
+					return
+				}
+				let that = this;
+				let file =[],count=9
+				uni.chooseImage({
+					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){
+								that.phofile = that.phofile.concat(rs);
+							})	
+						}
+					}
+				});
+			},
+			getaddImagea(e) {
+				let that = this;
+				let file = []
+				uni.chooseImage({
+					count: 1,
+					success: function(res) {
+						let img = res.tempFilePaths;
+						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.idCardBack = resurl.fileName;
+								if (rs && rs.length > 0) {
+									var obj = {
+										type: e,
+										url: resurl.urlOnline
+									}
+									that.getOcrIdCard(obj)
+								}
+							} else {
+								that.datainfo.idCardFront = resurl.fileName;
+							}
+						})
+					}
+				});
+			},
+			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.residentName = datainfo.realName;
+							this.datainfo.residentIdCard = datainfo.idCard;
+							this.datainfo.idCardAddress = datainfo.address;
+						// } else {
+						// 	this.datainfo.expirationDate = datainfo.expirationDate
+						}
+					}
+				})
+			}
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+	.bga{background-color: #46CB99;}
+.check /deep/ .select-wrap{border: none;width: 100%;}
+.mh35{min-height: 70rpx;display: flex;align-items: center;}
+.check /deep/ .uni-forms-item{min-height: 106rpx;box-sizing: border-box;display: flex;align-items: center;margin-bottom: 0;border-bottom: 2rpx solid #E6E6E6;padding:10rpx 0;}
+// .check .cbox /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 /deep/ .is-required{font-size: 26rpx;color: #F40027;margin-right: 4rpx;}
+.check{background: linear-gradient(180deg, #45CB99 0%, rgba(238,227,197,0) 100%) no-repeat;background-size: 100% 782rpx;min-height: 100vh;box-sizing: border-box;padding: 0 18rpx 22rpx;}
+.cbox{background: #FFFFFF;border-radius: 20rpx;flex: 1;padding: 30rpx 24rpx 46rpx;
+	.chmain{
+		padding: 0 8rpx;
+		.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;}
+		}
+	}
+	
+}
+.navbox{position: fixed;left: 0;right: 0;top: 0;z-index: 4;	}
+.rztit{font-weight: bold;font-size: 30rpx;color: #222327;margin-bottom: 30rpx;}
+	.carbox{width: 300rpx;border-radius: 14rpx;overflow: hidden;
+		.img{width: 300rpx;height: 208rpx;}
+		.tit{width: 100%;height: 56rpx;background: #7CC2A8;text-align: center;font-weight: 500;
+font-size: 26rpx;line-height: 56rpx;
+color: #FFFFFF;}
+	}
+	.cardtip{font-weight: 500;font-size: 24rpx;color: #999999;line-height: 40rpx;}
+.addimgs{display: flex;align-items: center;flex-wrap: wrap;justify-content: flex-end;
+	
+	.assimg{width: 128rpx;height: 128rpx;position: relative;overflow: hidden;margin: 0 0 20rpx 24rpx;
+		.img{width: 100%;height: 100%;}
+		.delimg{width: 24rpx;height: 24rpx;position: absolute;right: 0;top: 0;}
+	}
+}
+.addbox{width: 160rpx;height: 128rpx;background: #F0F0F0;border-radius: 20rpx;display: flex;flex-direction: column;align-items: center;justify-content: center;margin-left: 24rpx;margin-bottom: 20rpx;flex: 0 0 auto;
+		image{width: 48rpx;height: 42rpx;margin-bottom: 12rpx;}
+		view{font-weight: 500;font-size: 24rpx;color: #666666;}
+	}
+.tips{font-weight: bold;color: #272727;font-size: 26rpx;margin-left: 8rpx;}
+</style>

+ 358 - 0
user_wxui/health/pages/health/detail.vue

@@ -0,0 +1,358 @@
+<template>
+  <view class="hdetail" :style="'padding-top:'+nvaHeight+'px;'">
+		<view class="navbox">
+			<uni-nav-bar  color="#ffffff" left-icon="left" title="健康档案"  :background-color="backgroundColor" :border="false" statusBar='true' fixed="true" @clickLeft="getBackFn">
+			</uni-nav-bar>
+			<!-- 家人 -->
+			<view class="headbox flexc" :style="'backgroundColor:'+backgroundColor">
+				<view class="htop" :class="tabval==idx?'act':''" v-for="(ite,idx) in list" :key="idx" @click="getTabFn(idx)">
+					<view class="img"><image :src="heada" class="imaga"></image></view>
+					<view class="tit">{{ite.tit}}</view>
+				</view>
+				<view class="htop"  @click="getAddFn">
+					<view class="img add"><image :src="addimg"></image></view>
+					<view class="tit">添加</view>
+				</view>
+				
+			</view>
+		</view>
+		<!-- 主体 -->
+		<view class="wymain" >
+			<view class="headbox flexc" style="opacity: 0;">
+				<view class="htop">
+					<view class="img"><image :src="heada" class="imaga"></image></view>
+					<view class="tit">户主</view>
+				</view>
+			</view>
+			<view class="hmain">
+				<view class="hmtop mb20">
+					<image :src="heada" class="head"></image>
+					<view class="hmtopa flex1">
+						<view class="flex mb14">
+							<view class="tit">袁玥</view>
+							<view class="btn btna">本人</view>
+							<view class="btn btnb">党员</view>
+							<view class="btn btnc">五保户</view>
+						</view>
+						<view class="hmtopb flexc mb10">
+							<image :src="car" class="limg"></image>
+							<view >
+								<view class="hmtit">身份证号</view>
+								<view class="hmtxt flexc">
+									<view class="hmtxts">{{lookfalg?cartit:carpass}}</view>
+								<image :src="eye" v-if="lookfalg" @click="lookfalg=false"></image>
+								<image :src="neye" v-else @click="lookfalg=true"></image>
+								
+								</view>
+							</view>
+						</view>
+						<view class="hmtopb flexc ">
+							<image :src="adr" class="limg"></image>
+							<view >
+								<view class="hmtit">家庭住址</view>
+								<view class="hmtxt">幸福小区1号楼3单元1101</view>
+							</view>
+						</view>
+					</view>
+					<view class="code" @click="getCodeFn">
+						<image :src="headb"></image>
+						<view>点击放大二维码</view>
+					</view>
+				</view>
+				<view class="hline mb18 flexc">
+					<view class="tit">MORE</view>
+					<view class="line"></view>
+				</view>
+				<view class="detail mb24">
+					<view class="detop mb14">
+						<image :src="icon"></image>
+						<view class="flexcj detit">基础信息<view class="detxt">更新时间:2024-10-24</view></view>
+					</view>
+					<view class="dlists">
+						<view class="lists">
+							<view class="ltit">性别</view><view class="ltxt">女</view>
+						</view>
+						<view class="lists">
+							<view class="ltit">年龄</view><view class="ltxt">38岁</view>
+						</view>
+						<view class="lists">
+							<view class="ltit">血型</view><view class="ltxt">B型</view>
+						</view>
+						<view class="lists">
+							<view class="ltit">血压</view><view class="ltxt">65/120mmHg</view>
+						</view>
+						<block v-if="zhanList[0].zhanflag">
+							<view class="lists">
+								<view class="ltit">身高</view><view class="ltxt">165cm</view>
+							</view>
+							<view class="lists">
+								<view class="ltit">体重</view><view class="ltxt">67kg</view>
+							</view>
+							<view class="lists">
+								<view class="ltit">腰围</view><view class="ltxt">85cm</view>
+							</view>
+							<view class="lists">
+								<view class="ltit">体质指数</view><view class="ltxt">142kg/m2</view>
+							</view>
+							<view class="lists">
+								<view class="ltit">脉搏</view><view class="ltxt">90bpm</view>
+							</view>
+							<view class="lists">
+								<view class="ltit">体温</view><view class="ltxt">36.4℃</view>
+							</view>
+							<view class="lists">
+								<view class="ltit">呼吸频率</view><view class="ltxt">50次/分钟</view>
+							</view>
+						</block>
+					</view>
+					<view class="upbox" @click="getZhanFn(0)">
+						<view>{{zhanList[0].zhanflag?'折叠':'展开'}}</view>
+						<image :src="upimg" :class="zhanList[0].zhanflag?'':'zhe'"></image>
+					</view>
+				</view>
+				<view class="detail mb24">
+					<view class="detop mb14">
+						<image :src="icon"></image>
+						<view class="flexcj detit">健康病史<view class="detxt">更新时间:2024-10-24</view></view>
+					</view>
+					<view class="dlists">
+						<view class="lists w100">
+							<view class="ltit">基础疾病</view><view class="ltxt">慢性支气管炎</view>
+						</view>
+						<view class="lists w100">
+							<view class="ltit">病史</view><view class="ltxt">高血压、高血糖、甲状腺结节 拷贝</view>
+						</view>
+						<block v-if="zhanList[1].zhanflag">
+							<view class="lists">
+								<view class="ltit">近视/远视</view><view class="ltxt">近视</view>
+							</view>
+							<view class="lists">
+								<view class="ltit">近视/远视度数</view><view class="ltxt">左:375 右:400</view>
+							</view>
+						</block>
+					</view>
+					<view class="upbox" @click="getZhanFn(1)">
+						<view>{{zhanList[1].zhanflag?'折叠':'展开'}}</view>
+						<image :src="upimg" :class="zhanList[1].zhanflag?'':'zhe'"></image>
+					</view>
+				</view>
+				<view class="detail">
+					<view class="detop mb14">
+						<image :src="icon"></image>
+						<view class="flexcj detit">兴趣爱好<view class="detxt">更新时间:2024-10-24</view></view>
+					</view>
+					<view class="dlists">
+						<view class="lists w100">
+							<view class="ltit">兴趣爱好</view>
+							<view class="ltxt">喜欢运动,经常参加马拉松比赛</view>
+							<view class="ltxt">平时也好书法,参加书法展</view>
+						</view>
+					</view>
+				</view>
+				<view class="dbtns flexcj mt55">
+					<view class="btna">删除档案</view>
+					<view class="btnb">修改档案</view>
+				</view>
+			</view>
+		</view>
+	<loading></loading>
+	<pop-up :type="type" @getClose='getClose'></pop-up>
+  </view>
+</template>
+
+<script>
+	import popUp from "@/health/components/popup/popup.vue"
+  export default {
+	components:{popUp},
+	data(){
+		return{
+			nvaHeight:44,
+			// activeColor:'#A7CDF9',
+			// nactiveColor:'#DADADA',
+			backgroundColor: "transparent",
+			heada:require("@/health/static/health/heada.png"),
+			headb:require("@/health/static/health/headb.png"),
+			headc:require("@/health/static/health/headc.png"),
+			headd:require("@/health/static/health/headd.png"),
+			heade:require("@/health/static/health/heade.png"),
+			headf:require("@/health/static/health/headf.png"),
+			adr:require("@/health/static/health/adr.png"),
+			car:require("@/health/static/health/car.png"),
+			icon:require("@/health/static/health/icon.png"),
+			addimg:require("@/health/static/health/add.png"),
+			eye:require("@/static/images/home/eye.png"),
+			neye:require("@/static/images/neye.png"),
+			upimg:require("@/static/images/up.png"),
+			lookfalg:false,	
+			tabval:0,
+			cartit:'378554199010206016',
+			carpass:'3********6',
+			type:'',
+			list:[{tit:'户主'},{tit:'丈夫'},{tit:'儿子'},{tit:'女儿'},{tit:'婆婆'},{tit:'公公'},],
+			datainfo:{
+				
+			},
+			zhanList:[{zhanflag:true},{zhanflag:true},{zhanflag:true},{zhanflag:true}],
+		}
+	},
+	watch:{
+		lookfalg(val){
+			if(val){
+				
+			}
+		}
+	},
+	onPageScroll(e) {
+		var scrollTop = Number(e.scrollTop);
+		if (scrollTop > 0) {
+			this.backgroundColor = '#48CC9A'
+		} else {
+			this.backgroundColor = 'transparent'
+		}
+	},
+    onLoad: function() {
+		uni.getSystemInfo({
+			success: (e) => {
+				this.nvaHeight = Number(e.statusBarHeight)+44;
+			}
+		})
+    },
+	methods:{	
+		getClose(){
+			this.type="";
+		},
+		getCodeFn(){
+			this.type='code'
+		},
+		getAddFn(){
+			this.$tab.navigateTo(`/health/pages/health/add`)
+		},
+		getZhanFn(idx){
+			this.zhanList[idx].zhanflag=!this.zhanList[idx].zhanflag
+		},
+		getBackFn(){
+			uni.navigateBack({
+				delta:1
+			})
+		},
+		getCode(code){
+			var idCard='123456789'
+			const firstPart = idCard.slice(0, 1);  
+			  // 生成中间8位的星号  
+			  const middlePart = '*'.repeat(idCard.length-2);  
+			  // 获取后4位  
+			  const lastPart = idCard.slice(idCard.length-1); 
+			  var s= firstPart + middlePart + lastPart;
+			  console.log(s)
+			  // return firstPart + middlePart + lastPart;
+		},
+		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){
+					
+				}else{
+					this.$toast(res.msg)
+				}
+			})
+			
+		},
+		
+	}
+  }
+</script>
+<style>
+	page{background:#F4F6F8;}
+</style>
+<style lang="scss" scoped>
+.w100{width: 100%;}
+.hdetail{
+	background: linear-gradient(180deg, #45CB99 0%, rgba(238,227,197,0) 100%) no-repeat;background-size: 100% 782rpx;min-height: 100vh;box-sizing: border-box;
+}
+.headbox{padding: 14rpx 20rpx 20rpx;overflow: auto;
+	.htop{display: flex;flex-direction: column;align-items: center;margin: 0 16rpx;
+		.img{width: 88rpx;height: 88rpx;border-radius: 50%;border: 8rpx solid #D4F6E5;margin-bottom: 16rpx;display: flex;align-items: center;justify-content: center;box-sizing: border-box;
+		&.add{border: none;
+			image{width: 86rpx;height: 86rpx;}
+		}
+			image{border-radius: 50%;}
+			.imaga{width: 70rpx;height: 74rpx;}
+			.imagb{width: 70rpx;height: 72rpx;}
+			.imagc{width: 70rpx;height: 76rpx;}
+			.imagd{width: 70rpx;height: 70rpx;}
+			.image{width: 70rpx;height: 74rpx;}
+		}
+		.tit{font-weight: 500;font-size: 22rpx;color: #3FA47D;}
+		&.act{
+			.tit{font-weight: bold;color: #FFFFFF;}
+		}
+	}
+}
+.navbox{position: fixed;left: 0;right: 0;top: 0;z-index: 4;	}
+.wymain{z-index: 2;position: relative;padding: 0 24rpx 24rpx;}
+.hmain{background: #FFFFFF;border-radius: 20rpx;padding: 32rpx 24rpx 44rpx;
+	.hmtop{display: flex;
+		.head{width: 60rpx;height: 60rpx;border-radius: 8rpx;flex: 0 0 auto;margin-right: 28rpx;}
+		.hmtopa{
+			.tit{font-weight: bold;font-size: 32rpx;
+color: #272727;}
+			.btn{font-weight: bold;font-size: 22rpx;min-width: 64rpx;height: 30rpx;padding: 0 10rpx;box-sizing: border-box;margin-left: 14rpx;border-radius: 16rpx;display: flex;align-items: center;justify-content: center;margin-top: 6rpx;color: #FFFFFF;
+			&.btna{border: 2rpx solid #2589FF;color: #2589FF;}
+			&.btnb{background:#FF6969;}
+			&.btnc{background:#F6C576;}
+			}
+		}
+		.hmtopb{
+			image{flex: 0 0 auto;}
+			.limg{width: 46rpx;height: 46rpx;margin-right: 22rpx;}
+			.hmtit{font-size: 26rpx;color: #AAAAAA;font-weight: 500;margin-bottom: 4rpx;}
+			.hmtxt{font-size: 26rpx;color: #272727;font-weight: 500;
+				.hmtxts{min-width: 270rpx;}
+			 image{width: 26rpx;height: 18rpx;margin-left: 16rpx;
+				// image{width: 100%;height: 100%;}
+			 }
+			}
+		}
+		.code{flex:0 0 auto;
+			view{font-weight: 500;font-size: 20rpx;color: #AAAAAA;}
+			image{width: 132rpx;height: 132rpx;margin-bottom: 10rpx;}
+		}
+	}
+	.hline{
+		.tit{font-weight: bold;font-size: 20rpx;color: #48CB9B;font-style: italic;margin-right: 22rpx;flex: 0 0 auto;}
+		.line{flex: 1;border-bottom: 2rpx solid #E6E6E6;}
+	}	
+	.detail{
+		.detop{position: relative;
+			image{width: 30rpx;height: 30rpx;position: absolute;left: 0;top: 7rpx;z-index: 0;}
+			.detit{font-size: 16px;color: #272727;font-weight: bold;line-height: 44rpx;padding-left: 10rpx;position: relative;z-index: 2;}
+			.detxt{font-weight: 500;font-size: 22rpx;color: #666666;line-height: 36rpx;}
+		}
+	}
+	.dlists{display: flex;align-items: center;flex-wrap: wrap;
+		.lists{line-height: 36rpx;padding: 12rpx 0 12rpx 12rpx;min-width: 23%;box-sizing: border-box;
+			.ltit{font-weight: 500;font-size: 26rpx;color: #AAAAAA;margin-bottom: 4rpx;}
+			.ltxt{font-weight: 500;font-size: 26rpx;color: #272727;}
+		}
+	}
+}
+.upbox{display: flex;align-items: center;justify-content: center;margin-top: 8rpx;padding: 10rpx 0;
+		image{width: 24rpx;height: 20rpx;transition: all 0.3s;margin-left: 14rpx;
+			&.zhe{transform: rotate(-180deg);}
+		}
+		view{font-weight: 500;font-size: 22rpx;color: #AAAAAA;}
+	}
+.dbtns{
+	view{width: 314rpx;box-sizing: border-box;display: flex;align-items: center;justify-content: center;font-weight: bold;font-size: 26rpx;height: 88rpx;border-radius: 10px;
+	&.btna{border: 1px solid #FF6969;background: #FFEEEE;color: #FF6969;}
+	&.btnb{background: #46CB99;color: #FFFFFF;}
+	}
+}
+</style>

BIN
user_wxui/health/static/health/add.png


BIN
user_wxui/health/static/health/adr.png


BIN
user_wxui/health/static/health/car.png


BIN
user_wxui/health/static/health/cardf.png


BIN
user_wxui/health/static/health/cardz.png


BIN
user_wxui/health/static/health/down.png


BIN
user_wxui/health/static/health/heada.png


BIN
user_wxui/health/static/health/headb.png


BIN
user_wxui/health/static/health/headc.png


BIN
user_wxui/health/static/health/headd.png


BIN
user_wxui/health/static/health/heade.png


BIN
user_wxui/health/static/health/headf.png


BIN
user_wxui/health/static/health/hicoa.png


BIN
user_wxui/health/static/health/hicob.png


BIN
user_wxui/health/static/health/icon.png


BIN
user_wxui/health/static/health/search.png


BIN
user_wxui/health/static/house.png


BIN
user_wxui/health/static/housea.png


BIN
user_wxui/health/static/houseb.png


BIN
user_wxui/health/static/housec.png


BIN
user_wxui/health/static/man.png


BIN
user_wxui/health/static/woman.png


+ 36 - 0
user_wxui/main.js

@@ -0,0 +1,36 @@
+import Vue from 'vue'
+import App from './App'
+import store from './store' // store
+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
+Vue.prototype.$toast=toast;
+App.mpType = 'app'
+
+const app = new Vue({
+  ...App
+})
+
+app.$mount()
+export default app

+ 117 - 0
user_wxui/manifest.json

@@ -0,0 +1,117 @@
+{
+    "name" : "智慧社区用户端",
+    "appid" : "__UNI__E57E235",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueCompiler" : "uni-app",
+        "compatible" : {
+            "ignoreVersion" : true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持
+        },
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        "modules" : {
+            "Maps" : {},
+            "Speech" : {}
+        },
+        "distribute" : {
+            "android" : {
+                "permissions" : [
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<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.INTERNET\"/>",
+                    "<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.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            "ios" : {
+                "dSYMs" : false
+            },
+            "sdkConfigs" : {
+                "ad" : {},
+                "share" : {},
+                "maps" : {
+                    "amap" : {
+                        "appkey_ios" : "f55857365884963baed205a0974d6e96",
+                        "appkey_android" : "f55857365884963baed205a0974d6e96"
+                    }
+                },
+                "speech" : {
+                    "baidu" : {
+                        "appid" : "30799445",
+                        "apikey" : "MuVtMTc6EHaLbrr38WEhqjml",
+                        "secretkey" : "rPGCiA3L41VwuTCBHkwkmcOt0IPTsi8z"
+                    }
+                }
+            },
+            "icons" : {
+                "android" : {
+                    "hdpi" : "static/applogo.png",
+                    "xhdpi" : "static/applogo.png"
+                }
+            }
+        }
+    },
+    "quickapp" : {},
+    "mp-weixin" : {
+        "appid" : "wx694b1ba10320b8bc",
+        "permission" : {
+            "scope.userLocation" : {
+                "desc" : "获取当前位置" // 此处可以修改成自己的权限提示文本
+            }
+        },
+        "setting" : {
+            "urlCheck" : false,
+            "es6" : false,
+            "minified" : true,
+            "postcss" : true
+        },
+        "optimization" : {
+            "subPackages" : true
+        },
+        "usingComponents" : true
+    },
+    "vueVersion" : "2",
+    "h5" : {
+        "template" : "static/index.html",
+        "devServer" : {
+            "port" : 9090,
+            "https" : false
+        },
+        "title" : "RuoYi-App",
+        "router" : {
+            "mode" : "history",
+            "base" : ""
+        },
+        "sdkConfigs" : {
+            "maps" : {
+                "amap" : {
+                    "key" : "fba818d626f91cf5a13cd61943a7667e",
+                    "securityJsCode" : "fba818d626f91cf5a13cd61943a7667e",
+                    "serviceHost" : ""
+                }
+            }
+        }
+    }
+}

+ 510 - 0
user_wxui/mine/components/box/list.vue

@@ -0,0 +1,510 @@
+<template>
+<view>
+	<!-- 第一种样式  人员管理-->
+	<block v-if="datainfo.length>0">
+		<block v-if="type=='mycar'">
+			<view class="carlist pr" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail(ite.carId)"
+				:data-idx="idx"
+				@touchstart="drawStart" @touchmove="drawMove" @touchend="drawEnd" :style="'right:'+ite.right+'px'"
+			>
+				<view class="delleft" style="padding: 0 24rpx;">
+					<view class="carltop flexc">
+						<view class="flex1">
+							<view class="tit mb6 flexc" :class="ite.vehicleEnergy=='新能源'?'co16':'co01'">{{ite.plateNumber}}
+								<text class="cir"></text>
+								<text v-if="ite.vehicleColour">{{ite.vehicleColour}}</text>
+							</view>
+							<view class="txt flexc">
+								{{ite.vehicleBrand}}
+								<view class="txtbtn flexcc" v-if="ite.vehicleEnergy=='新能源'">{{ite.vehicleEnergy}}</view>
+								<!-- <view class="txtbtn flexcc" v-if="ite.vehicleType==2">新能源</view> -->
+							</view>
+						</view>
+						<image :src="carb" class="carb" v-if="ite.vehicleEnergy=='新能源'"></image>
+						<image :src="cara" class="cara" v-else></image>
+					</view>
+					<view class="carlf">
+						<view class="clflist">发动机号码 :{{ite.engineNumber}}</view>
+						<view class="clflist">车辆识别代号:{{ite.identificationNumber}}</view>
+						<view class="flexc">
+							<view class="clflist w50">注册日期:{{ite.registrationDate}}</view>
+							<view class="clflist w50">发证日期:{{ite.issueDate}}</view>
+						</view>
+					</view>
+				</view>
+				
+				<view class="spdel" v-if="ite.right>0&&checkPermi(['wuYe:car:remove'])" @click.stop="getDelFn(ite.carId)">删除</view>
+			</view>
+		</block>
+		<!-- 地址 -->
+		<block v-if="type=='address'">
+			<view class="adrlist flexc" :class="ite.isdefault?'act':''" v-for="(ite,idx) in datainfo" :key="idx">
+				<view class="adrl flex1">
+					<view class="tit mb5">安徽省 合肥市 蜀山区 高新技术产业开发区</view>
+					<view class="txt mb5">幸福大街88号幸福小区12#1304</view>
+					<view class="txts flexc">袁玥  <text class="ml8">18305687768</text>
+						<text class="ml8 btns" v-if="ite.isdefault">默认</text>
+						<text class="ml8 btns" v-if="ite.isuser">最近使用</text>
+					</view>
+				</view>
+				<view class="adrr flexcc">
+					<image :src="edit"></image>
+				</view>
+			</view>
+		</block>
+		<!-- 人员管理 -->
+		<block v-if="type=='people'">
+			<view class="carlist peolist" v-for="(ite,idx) in datainfo" :key="idx">
+				<view class="ctop flexc">
+					<image :src="house" class="imgs" v-if="ite.houseStatus==1"></image>
+					<image :src="housea" class="imgs" v-if="ite.houseStatus==4"></image>
+					<image :src="houseb" class="imgs" v-if="ite.houseStatus==2"></image>
+					<image :src="housec" class="imgs" v-if="ite.houseStatus==3"></image>
+					<view class="tit">{{ite.detailedAddress}}</view>
+					<view class="flex1"></view>
+					<view class="txt ca" v-if="ite.houseStatus==1">自住</view>
+					<view class="txt cb" v-if="ite.houseStatus==4">出租</view>
+					<view class="txt cc" v-if="ite.houseStatus==2">空闲</view>
+					<view class="txt co6" v-if="ite.houseStatus==3">代售</view>
+				</view>
+				<view class="plists">
+					<block v-for="(aite,aidx) in ite.residentInfoList">
+						<view class="flexc pr mb12"   :key="`peo${aidx}`" v-if="aidx==0" @click="getDetail(aite.residentId)"
+							:data-idx="idx" :data-aidx="aidx" data-type="peo"
+							@touchstart="drawStart" @touchmove="drawMove" @touchend="drawEnd" :style="'right:'+aite.right+'px'"
+						>
+							<view class="plist flexc">
+								<image :src="man" class="head" v-if="aite.residentGender==1"></image>
+								<image :src="woman" class="head" v-else></image>
+								<view class="flex1">
+									<view class="ptit">{{aite.residentName}}
+										<view class="btn btnc ml10" v-if="aite.isHouseholder=='Y'">户主</view>
+									</view>
+									<view class="ptxt">身份证号 | {{aite.residentIdCard}}</view>
+									<view class="flexc">
+										<view class="ptxt">性别 | {{aite.residentGender==1?'男':'女'}}</view>
+										<view class="ptxt">年龄 | {{getAgeFromID(aite.residentIdCard)}}岁</view>
+									</view>
+									<view class="flexc" v-if="aite.residentAppearance">
+										<view class="ptxt">人员面貌 | {{kaType(aite.residentAppearance,rymmList)}}</view>
+									</view>
+								</view>
+							</view>
+							<view class="spdel" v-if="aite.right>0&&checkPermi(['wuYe:residentInfo:remove'])" @click.stop="getDelFn(aite.residentId)">删除</view>
+						</view>
+						<view class="flexc pr mb12"   :key="`peo${aidx}`" v-if="aidx>0&&ite.zhanflag" @click="getDetail(aite.residentId)"
+							:data-idx="idx"
+							:data-aidx="aidx" data-type="peo"
+							@touchstart="drawStart" @touchmove="drawMove" @touchend="drawEnd" :style="'right:'+aite.right+'px'"
+						>
+							<view class="plist flexc">
+								<image :src="man" class="head" v-if="aite.residentGender==1"></image>
+								<image :src="woman" class="head" v-else></image>
+								<view class="flex1">
+									<view class="ptit">{{aite.residentName}}
+										<view class="btn btnc ml10" v-if="aite.isHouseholder=='Y'">户主</view>
+									</view>
+									<view class="ptxt">身份证号 | {{aite.residentIdCard}}</view>
+									<view class="flexc">
+										<view class="ptxt">性别 | {{aite.residentGender==1?'男':'女'}}</view>
+										<view class="ptxt">年龄 | {{getAgeFromID(aite.residentIdCard)}}岁</view>
+									</view>
+									<view class="flexc" v-if="aite.residentAppearance">
+										<view class="ptxt">人员面貌 | {{kaType(aite.residentAppearance,rymmList)}}</view>
+									</view>
+								</view>
+							</view>
+							<view class="spdel" v-if="aite.right>0&&checkPermi(['wuYe:residentInfo:remove'])" @click.stop="getDelFn(aite.residentId)">删除</view>
+						</view>
+					</block>
+					<image :src="upimg" v-if="ite.residentInfoList.length>1" :class="ite.zhanflag?'act':''" class="upimg" @click="getZhan(idx)"></image>
+				</view>
+			</view>
+		</block>
+		<!-- 车辆违规 -->
+		<block v-if="type=='carpark'">
+			<view class="carlist pr" v-for="(ite,idx) in datainfo" :key="ite.illegalParkingId" @click="getDetail(ite.illegalParkingId)"
+				:data-idx="idx"
+				@touchstart="drawStart" @touchmove="drawMove" @touchend="drawEnd" :style="checkPermi(['wuYe:illegalParking:remove'])?'right:'+ite.right+'px':''"
+			>
+				<view class="delleft">
+					<view class="ctop flexc">
+						<image :src="caraa" class="imgs" v-if="ite.carType==1"></image>
+						<image :src="carbb" class="imgs" v-if="ite.carType==2"></image>
+						<view class="tit">{{ite.plateNumber}}</view>
+						<view class="num coff" v-if="ite.isBlack=='Y'">(已登黑名单)</view>
+						<view class="flex1"></view>
+						<block v-if="ite.carType">
+							<view class="txt " :class="ite.carType==1?'ca':'cb'">{{kaType(ite.carType,carType)}}</view>
+						</block>
+						
+						<!-- <view class="txt cb" v-if="ite.type==2">外来车辆</view> -->
+					</view>
+					<view class="clists">
+						<block v-if="ite.carType==1">
+							<view class="clist"><view class="tit">关联房号</view>{{ite.visitPortal}}</view>
+							<view class="clist"><view class="tit">手机号码</view>{{ite.mobileNumber}}</view>
+						</block>
+						<view class="clist"><view class="tit">登记时间</view>{{ite.createTime}}</view>
+						<view class="clist"><view class="tit">违停拍照</view>
+							<view class="imgas" v-if="ite.illegalPhoto">
+								<image :src="baseUrl+aite" v-for="(aite,aidx) in kaPhoto(ite.illegalPhoto)" :key="aidx" @click.stop="getPreview(aidx,ite.illegalPhoto)"></image>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="spdel" v-if="ite.right>0&&checkPermi(['wuYe:illegalParking:remove'])" @click.stop="getDelFn(ite.illegalParkingId)">删除</view>
+			</view>
+		</block>
+		<view class="shax" v-if="wtdt">{{wtdt}}</view>
+	</block>
+	<!-- 无数据 -->
+	<view class="nodata" v-else>
+		<image :src="noiconpimg"></image>
+		<view>
+			暂无数据
+		</view>
+	</view>
+</view>
+</template>
+
+<script>
+	import {selectDictValue} from "@/utils/common.js"
+	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
+				}
+			},
+			clcxList:{
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			rymmList:{
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			carType:{
+				type: Array,
+				default () {
+					return []
+				}
+			},	
+			tabval:{
+				type:String,
+				default () {
+					return ''
+				}
+			}
+		},
+		data(){
+			return{
+				house:require("@/health/static/house.png"),
+				housea:require("@/health/static/housea.png"),
+				houseb:require("@/health/static/houseb.png"),
+				housec:require("@/health/static/housec.png"),
+				noiconpimg:require("@/static/images/nodata.png"),
+				upimg:require("@/mine/static/house/up.png"),
+				cara:require("@/mine/static/house/cara.png"),
+				carb:require("@/mine/static/house/carb.png"),
+				caraa:require("@/mine/static/house/caraa.png"),
+				carbb:require("@/mine/static/house/carbb.png"),
+				edit:require("@/mine/static/edit.png"),
+				cira:require('@/news/static/complaint/cira.png'),
+				cirb:require('@/news/static/complaint/cirb.png'),
+				man:require("@/health/static/man.png"),
+				woman:require("@/health/static/woman.png"),
+				rimg:require("@/static/images/rimga.png"),
+				baseUrl:config.baseUrl,
+				delBtnWidth:66,//左滑默认宽度
+			}
+		},
+		mounted() {
+			
+		},
+		methods:{
+			checkPermi, checkRole,
+			kaType(data, list) {
+				return selectDictValue(list, data);
+			},
+			kaPhoto(data){
+				return data.split(',');
+			},
+			getDetail(e){
+				this.$emit('getDetail',e)
+			},
+			getDelFn(e){
+				var that=this;
+				uni.showModal({
+					title: '确认删除',
+					content: "是否确认删除",
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							that.$emit('getDelFn',e)
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			getSh(type,ite){
+				var that=this;
+				var str="";
+				if(type=='2'){
+					str="通过"
+				}else if(type=='3'){
+					str="不通过"
+				}else if(type=='4'){
+					str="下架"
+				}
+				uni.showModal({
+					title: '确认'+str,
+					content: "是否确认"+str,
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							var obj={
+								status:type,
+								contentId:ite.contentId,
+								commentId:ite.commentId,
+							}
+							that.$emit('getSh',obj)
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			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
+			},
+			getDelFn(id){
+				var that=this;
+				uni.showModal({
+					title: '确认删除',
+					content: "是否确认删除",
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							that.$emit('getDelFn',id)
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			getAgeFromID(idNumber) {
+				if(idNumber){
+					const birthDateStr = idNumber.substring(6, 14);
+					const birthYear = parseInt(birthDateStr.substring(0, 4));
+					const birthMonth = parseInt(birthDateStr.substring(4, 6));
+					const birthDay = parseInt(birthDateStr.substring(6, 8));
+								
+					const today = new Date();
+					const currentYear = today.getFullYear();
+					const currentMonth = today.getMonth() + 1;
+					const currentDay = today.getDate();
+								
+					let age = currentYear - birthYear;
+					if (currentMonth < birthMonth || (currentMonth === birthMonth && currentDay < birthDay)) {
+					    age--;
+					}
+								
+					return age;
+				}         
+			 },
+			getPreview(idx,arr) {
+				var newArr=[];
+				var list=arr.split(',')
+				list.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) {
+				var idx=e.currentTarget.dataset.idx
+				var aidx=e.currentTarget.dataset.aidx
+				var type=e.currentTarget.dataset.type;
+				for (var index in this.datainfo) {
+					if(type&&type=='peo'){	
+						for(var i in this.datainfo[idx].residentInfoList){
+							this.$set(this.datainfo[idx].residentInfoList[i],'right',0);
+						}
+					}else{
+						 this.$set(this.datainfo[index],'right',0);
+					}	
+				}
+				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;
+				        }
+						
+						if(type&&type=='peo'){
+							
+							 this.$set(this.datainfo[idx].residentInfoList[aidx],'right',disX);
+						}else{
+							 this.$set(this.datainfo[idx],'right',disX);
+						}
+						// this.csListArrl[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;
+	.carltop{min-height: 154rpx;border-bottom: 2rpx solid #E5E5E5;
+		.cir{width: 8rpx;height: 8rpx;border-radius: 50%;margin: 0 8rpx;display: inline-block;}
+		.co16{
+			.cir{background: #16BE7F;}
+		}
+		.co01{
+			.cir{background: #0156FE;}
+		}
+		.tit{font-weight: bold;font-size: 32rpx;}
+		.txt{font-weight: 500;font-size: 26rpx;color: #272727;}
+		.txtbtn{min-width: 82rpx;
+height: 32rpx;font-weight: 500;font-size: 20rpx;color: #45CB99;
+border-radius: 16rpx;border: 1px solid #45CB99;margin-left: 12rpx;}
+		.cara{flex: 0 0 auto;width: 232rpx;height: 74rpx;margin-right: 40rpx;}
+		.carb{flex: 0 0 auto;width: 278rpx;height: 130rpx;}
+	}
+	.carlf{padding:26rpx 0 10rpx;
+		.clflist{font-weight: 500;font-size: 26rpx;color: #666666;margin-bottom: 16rpx;}
+	}
+}
+.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%;}
+		}
+	}
+}
+// 收货地址
+.adrlist{border-bottom: 2rpx solid  #E5E5E5;padding: 34rpx 0 34rpx 8rpx;
+	.tit{font-weight: 500;font-size: 22rpx;color: #666666;}
+	.txt{font-size: 28rpx;color: #272727;font-weight: bold;}
+	.txts{font-weight: 500;font-size: 26rpx;color: #272727;}
+	.btns{font-weight: 500;font-size: 22rpx;color: #0256FD;padding: 2rpx 14rpx;display:inline-block;background: #C9DBFF;
+border-radius: 10rpx;}
+	.adrr{width: 40rpx;height: 40rpx;flex: 0 0 auto;margin-left: 12rpx;
+		image{width: 22rpx;height: 22rpx;}
+	}
+	&.act{
+		.tit{color: #0256FD;}
+		.txt{color: #0256FD;}
+		.txts{color: #0256FD;}
+	}
+}
+
+
+// 人员
+.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;padding: 18rpx 26rpx 4rpx;width: 100%;z-index: 1;
+		.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);}
+	}
+}
+// 互动
+.pd12{padding: 24rpx;}
+// 无数据
+.nodata{display: flex;flex-direction: column;align-items: center;
+	image{width: 440rpx;height: 440rpx;}
+	view{font-size: 30rpx;color: #666666;font-weight: bold;}
+}
+</style>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
user_wxui/mine/components/tki-float-keyboard/style.css


+ 459 - 0
user_wxui/mine/components/tki-float-keyboard/tki-float-keyboard.vue

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

+ 594 - 0
user_wxui/mine/pages/car/addcar.vue

@@ -0,0 +1,594 @@
+<template>
+	<view class="check">
+		<view class="cbox" @click="keyHide">
+			<view class="chtop flexc">
+				<view class="line"></view>
+				<view>车辆信息</view>
+			</view>
+			<view class="chmain">
+				<uni-forms ref="form" :model="datainfo" :rules="rules">
+					<view class="upbox" @click="getaddImage">
+						<image :src="baseUrl+datainfo.front" class="img" v-if="datainfo.front"></image>
+						<image :src="cmico" class="addimg"></image>
+						<view>扫描行驶证自动填写</view>
+					</view>
+					<view class="tips mb22 mt5 cof4">请上传行驶证正面</view>
+					<view class="carcode">
+						<view class="tit mb16 lh18"><text class="cof4">*</text>车牌号码</view>
+						<view class="carinput-input">
+							<view class="carinput-input-i" :class="{'input-active':carIndex == i}" @tap.stop="inputKey" :data-index="i" v-for="(v,i) in carInput" :key="i" v-if="i < 2">
+								{{carInput[i].val}}
+							</view>
+							<!-- 塞个点 -->
+							<view class="cir"></view>
+							<view class="carinput-input-i" :class="{'input-active':carIndex == i}" @tap.stop="inputKey" :data-index="i" v-for="(v,i) in carInput" :key="i" v-if="i < 7&&i>1">
+								{{carInput[i].val}}
+							</view>
+							<view class="carinput-input-i " :class="{'input-active':carIndex == 7}" @tap.stop="inputKey" data-index="7">
+								<block v-if="carInput[7].val">{{carInput[7].val}}</block>
+								<view v-else class="newtit flexccc">
+									<image :src="addnew"></image>
+									新能源
+								</view>
+								<!-- {{carInput[7].val?carInput[7].val:'+新能源'}} -->
+							</view>
+						</view>
+					</view>
+					<!-- <uni-forms-item label="车牌号" name="plateNumber">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.plateNumber" :inputBorder='false' placeholder="请输入车牌号" />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item> -->
+					<uni-forms-item label="手机号码" required name="residentPhone">
+						<view class="flexc" >
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.residentPhone" :inputBorder='false' placeholder="请输入手机号" />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					<block v-if="zhanfalg">
+						<uni-forms-item label="居住门户" name="houseId">
+							<w-select
+							      style="margin-left: 20rpx;" 
+							     v-model="chooseValue"
+							      :list='fwlist'
+							      valueName='label' 
+							      keyName="value"
+								  :chosevalue="datainfo.detailedAddress"
+								  :filterable='filterable'
+							      @change='getchange'
+							    >
+							    </w-select>
+						</uni-forms-item>
+						<uni-forms-item label="品牌车型" name="vehicleBrand">
+							<view class="flexc">
+								<uni-easyinput :disabled="isdisabled" v-model="datainfo.vehicleBrand" :inputBorder='false' placeholder="请输入品牌车型" />
+								<view class="rimg"><image :src="rimg"></image></view>
+							</view>
+						</uni-forms-item>
+					<uni-forms-item label="车辆类型" name="vehicleType">
+						<view class="flexc" @click.stop="">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.vehicleType" :inputBorder='false' placeholder="请输入车辆类型" />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="车辆颜色" name="vehicleColour">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.vehicleColour" :inputBorder='false' placeholder="请输入车辆颜色" />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="发动机编号" name="engineNumber">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.engineNumber" :inputBorder='false' placeholder="请输入发动机编号" />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="车辆识别代号" name="identificationNumber">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.identificationNumber" :inputBorder='false' placeholder="请输入车辆识别代号" />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="注册日期" name="registrationDate">
+						<view class="flexc">
+							<uni-datetime-picker  :disabled="isdisabled" :class="datainfo.registrationDate?'co27':'coa'" type="date" placeholder="请选择注册日期" :border="false" :hide-second='true' v-model="datainfo.registrationDate"  />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="发证日期" name="issueDate">
+						<view class="flexc">
+							<uni-datetime-picker  :disabled="isdisabled" :class="datainfo.issueDate?'co27':'coa'" type="date" placeholder="请选择发证日期" :border="false" :hide-second='true' v-model="datainfo.issueDate"  />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					</block>
+					<view class="zhanbox flexcc" @click="zhanfalg=!zhanfalg">
+						{{zhanfalg?"折叠信息":'展开信息'}}<image :class="!zhanfalg?'act':''" :src="upimg"></image>
+					</view>
+				</uni-forms>
+				<view class="rhbtn mt30" @click="getEditFn" v-if="isdisabled">修改</view>
+				<view class="rhbtn mt30" @click="getSubmit" v-else>确定</view>
+				<!-- <view class="rhbtn mt30" @click="getNext">确定添加</view> -->
+			</view>
+		</view>
+		<tki-float-keyboard ref="keybd" :mode="'car'" :type="keyType" :title="'车牌键盘'" @del="keyCbDel" @val="keyCbVal" @hide="keyCbHide"></tki-float-keyboard>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {uploadIdentify,selectValueKey} from '@/utils/common.js'
+	import wSelect from "@/work/components/w-select/w-select.vue"
+	import {houseInfolistNoPage} from "@/api/work/work.js"
+	import {carPut,carAdd,carDet} from "@/api/work/car.js"
+	import {getDictionaryFn} from "@/api/system/user.js"
+	import {getvehicleLicense} from "@/api/system/card.js"
+	import tkiFloatKeyboard from "@/mine/components/tki-float-keyboard/tki-float-keyboard.vue";
+	export default{
+		components:{wSelect,tkiFloatKeyboard},
+		data(){
+			return{
+				carIndex: -1,
+				carInput: [
+					{ type: 2, val: "皖" },
+					{ type: 4, val: "A" },
+					{ type: 1, val: "" },
+					{ type: 1, val: "" },
+					{ type: 1, val: "" },
+					{ type: 1, val: "" },
+					{ type: 3, val: "" },
+					{ type: 1, val: "" }
+				],
+				keyType: 0,
+				isPower: false, // 新能源
+				rimg: require('@/mine/static/house/rimg.png'),
+				cmico:require('@/mine/static/house/cmico.png'),
+				upimg:require('@/mine/static/house/up.png'),
+				addnew:require('@/mine/static/house/add.png'),
+				baseUrl:config.baseUrl,
+				datainfo:{
+					// "carId":"",//业主车辆主键
+					"houseId":"",//房屋信息id
+					"detailedAddress":"",//房屋的详细门牌号
+					// "userId":"",//用户id
+					"residentId":"",//居住人员表id
+					// "userName":"",//业主姓名
+					"residentPhone":"",//业主手机号
+					"plateNumber":"",//车牌号码
+					"vehicleBrand":"",//车辆车型
+					"vehicleType":"",//车辆类型
+					"engineNumber":"",//发动机编号
+					"identificationNumber":"",//车辆识别代号
+					"registrationDate":"",//注册日期
+					"issueDate":"",//发证日期
+				},
+				// vehicleEnergy 	车辆能源类型 燃油 新能源
+				zhanfalg:true,
+				syqxidx:'',
+				filterable:true,
+				chooseValue:'',
+				fwlist:[],
+				isdisabled:false,
+				rules:{
+					houseId: {rules: [{required: true,errorMessage: '请选择居住门户' }]},
+					detailedAddress: {rules: [{required: true,errorMessage: '请输入居住地址' }]},
+					residentPhone: {rules: [{required: true,errorMessage: '请输入手机号'}, {pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,errorMessage:'请输入正确的手机号码'}]},
+				  },
+				cllx:"",
+				cllxidx:0,
+				cllxList:[],
+				id:'',
+				isdisabled:false,
+				ptype:'add',
+				userId:this.$store.state.user.userId,
+				phonenumber:this.$store.state.user.phonenumber,
+			}
+		},
+		onLoad: function(e) {
+			if(e.id){
+				this.id=e.id;
+				this.ptype="edit";
+				// this.isdisabled=true;
+				this.getDetail()
+			}else{
+				this.datainfo.residentPhone=this.phonenumber
+			}
+			this.init()
+			
+		},
+		methods:{
+			checkPermi, checkRole,
+			getEditFn(){
+				this.isdisabled=false;
+			},
+			getchange(e){
+				this.datainfo.houseId=e.value;
+				this.datainfo.detailedAddress=e.label;
+			},
+			statusFormats(data, list,type) {
+				var aite=selectValueKey(list, data);
+				if(type=='cllx'){
+					this.cllxidx=aite.key;
+				}
+				return aite.actions;
+			},
+			init(){
+				// 自己的房屋
+				var params={
+					userId:this.userId,
+					pageSize: 100,
+					pageNum: 1,
+				}
+				houseInfolistNoPage(params).then(res=>{
+					if(res.code==200){
+						this.fwlist= res.rows.map(v => {
+							return {
+								label: v.detailedAddress,
+								value: v.houseId,
+								location: v.location
+							}
+						})
+						if(res.rows&&res.rows.length<2){
+							var newObj=res.rows[0];
+							this.datainfo.houseId=newObj.houseId;
+							this.datainfo.detailedAddress=newObj.detailedAddress
+						}
+					}
+				})
+				// // 车辆类型
+				// getDictionaryFn('cartype').then(res=>{
+				// 	if(res.code==200){
+				// 		this.cllxList = res.data.map(v => {
+				// 			return {
+				// 				dictLabel: v.dictLabel,
+				// 				dictValue: v.dictValue
+				// 			}
+				// 		})
+				// 	}
+				// })
+			},
+			bindDateChange(e){
+				var val=e.detail.value;
+				this.datainfo.vehicleBrand=this.cllxList[val].dictValue;
+				this.cllx=this.cllxList[val].dictLabel;
+			},
+			getDetail(){
+				carDet(this.id).then(res=>{
+					if(res.code==200){
+						this.datainfo=res.data;
+						if(res.data.plateNumber){
+							this.toCarCode(res.data.plateNumber)
+							if(res.data.vehicleEnergy=='新能源'){
+								this.isPower=true;
+							}
+						}
+					}
+				})
+			},
+			getSubmit(){
+				var num=this.toBind()
+				if(num=='-1'){
+					this.$toast('请输入完整的车牌号')
+					return
+				}
+				this.$refs.form.validate().then(res => {
+					var params=JSON.parse(JSON.stringify(this.datainfo))
+					if(this.ptype=='add'){
+						carAdd(params).then(res=>{
+							if(res.code==200){
+								this.$toast("新增成功")
+								setTimeout(function(){
+									uni.$emit("carlist")
+									uni.navigateBack({
+										delta:1
+									})
+								},1500)
+							}
+						})
+					}else{
+						carPut(params).then(res=>{
+							if(res.code==200){
+								this.$toast("修改成功")
+								setTimeout(function(){
+									uni.$emit("carlist")
+									uni.navigateBack({
+										delta:1
+									})
+								},1500)
+							}
+						})
+					}
+				})
+			},
+			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 = [];
+							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={
+										url:resurl.urlOnline
+									}
+									that.getOcrIdCard(obj)
+								}
+							})	
+						}
+					}
+				});
+			},
+			getOcrIdCard(obj){
+				var params={
+					image:obj.url,
+				}
+				getvehicleLicense(params).then(res=>{
+					if(res.code==200){
+						var datainfo=res.data;
+						this.datainfo.vehicleBrand=datainfo.vehicleBrand;
+						this.datainfo.vehicleType=datainfo.vehicleType;
+						this.datainfo.engineNumber=datainfo.engineNumber;
+						this.datainfo.identificationNumber=datainfo.identificationNumber;
+						var zcrq=datainfo.registrationDate;
+						var fzrq=datainfo.issueDate;
+						this.datainfo.registrationDate=`${zcrq.slice(0, 4)}-${zcrq.slice(4, 6)}-${zcrq.slice(6, 8)}`;
+						this.datainfo.issueDate=`${fzrq.slice(0, 4)}-${fzrq.slice(4, 6)}-${fzrq.slice(6, 8)}`;
+						this.datainfo.plateNumber=datainfo.plateNumber;
+						this.toCarCode(datainfo.plateNumber)
+					}
+				})
+			},
+			// 车牌
+			// 判定是否为空
+			empty(v) {
+				let tp = typeof v,
+					rt = false;
+				if (tp == "number" && String(v) == "") {
+					rt = true
+				} else if (tp == "undefined") {
+					rt = true
+				} else if (tp == "object") {
+					if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true
+				} else if (tp == "string") {
+					if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true
+				} else if (tp == "function") {
+					rt = false
+				}
+				return rt
+			},
+			inputKey(e) {
+				let that = this;
+				let data = e.currentTarget.dataset;
+				that.carIndex = data.index;
+				if (data.index >= 7) {
+					that.isPower=true;
+					that.carIndex = 7;
+					// if (!that.isPower) {
+					// 	return false;
+					// } else {
+					// 	that.carIndex = 7;
+					// }
+				} else {
+					that.carIndex = data.index;
+				}
+				that.upKeyType();
+				that.keyShow();
+			},
+			keyCbVal(e) {
+				let that = this;
+				let index = Number(that.carIndex);
+				if (index >= 0 && index < 6) {
+					that.carInput[index].val = e;
+					that.carIndex = index + 1;
+				} else if (index == 6) {
+					that.carInput[index].val = e;
+					if (that.isPower) {
+						// 新能源
+						that.carIndex = 7;
+					} else {
+						// 不是新能源出输入结束
+						that.keyHide();
+						that.carIndex = -2;
+						console.log('非新能源车输入完毕')
+					}
+				} else if (index == 7) {
+					// 新能源车输入完毕
+					that.carInput[index].val = e;
+					that.keyHide();
+					that.carIndex = -3;
+					console.log('新能源车输入完毕')
+				}
+				that.upKeyType();
+			},
+			keyCbDel(e) {
+				let index = this.carIndex;
+				console.log(index,1)
+				if (index > 0) {
+					if (!this.empty(this.carInput[index].val)) {
+						this.carInput[index].val = "";
+						this.carIndex = index;
+					} else {
+						this.carInput[index - 1].val = "";
+						this.carIndex = index - 1;
+					}
+					if(index==7){
+						var obj={ type: 1, val: "" }
+						this.carInput.splice(index,1,obj)
+						this.isPower=false;
+					}
+					console.log(this.carInput)
+				}
+				this.upKeyType();
+			},
+			upKeyType() {
+				if (!this.empty(this.carInput[this.carIndex])) {
+					this.keyType = this.carInput[this.carIndex].type;
+				}
+			},
+			keyShow() {
+				this.$refs.keybd._keyShow();
+			},
+			keyHide() {
+				this.$refs.keybd._keyHide();
+			},
+			keyCbHide() {
+				if (this.carIndex != -3 || this.carIndex != -2) {
+					this.carIndex = -1;
+				}
+			},
+			powerChange(e) {
+				let that = this
+				let i = that.checkCar().i
+				if (e.detail.value.length > 0) {
+					that.isPower = true;
+					if (i == -1) {
+						that.carIndex = 7;
+					} else {
+						that.carIndex = i;
+					}
+					that.keyShow();
+				} else {
+					that.isPower = false;
+					that.carInput[7].val = "";
+					if (that.carIndex == 7) {
+						that.keyHide();
+						that.carIndex = -2;
+					}
+				}
+				that.upKeyType();
+			},
+			checkCar() {
+				// 检查车牌是否输入完成
+				let that = this;
+				let i = 7;
+				let rt = { i: -1, isempty: false, val: "" };
+				if (that.isPower) {
+					i = 8;
+				}
+				for (let index = 0; index < i; index++) {
+					const obj = that.carInput[index];
+					if (this.empty(String(obj.val))) {
+						rt.i = index;
+						rt.isempty = true;
+						rt.val = "";
+						break;
+					}
+					rt.val += that.carInput[index].val;
+				}
+				return rt;
+			},
+			toBind() {
+				let that = this
+				let ck = that.checkCar();
+				if (ck.i == -1 && !ck.isempty) {
+					this.datainfo.plateNumber=ck.val;
+					if(this.isPower){
+						this.datainfo.vehicleEnergy='新能源'
+					}else{
+						this.datainfo.vehicleEnergy='燃油车'
+					}
+					return ck.val
+				} else {
+					// 显示键盘输入
+					// that.keyShow();
+					// that.carIndex = ck.i;
+					// that.keyType = that.carInput[ck.i].type;
+					return '-1'
+				}
+			},
+			//分解车牌
+			toCarCode(code){
+				var list=JSON.parse(JSON.stringify(this.carInput))
+				var newArr=[]
+				if(code){
+					newArr=code.split('')
+				}
+				list.forEach((ite,idx)=>{
+					ite.val=newArr[idx]
+				})
+				if(newArr.length==8){
+					this.isPower=true;
+				}
+				this.carInput=JSON.parse(JSON.stringify(list))
+			}
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+// 车牌
+.carinput {margin-top: 74rpx;display: flex;flex-direction: column;padding-left: 40rpx;padding-right: 40rpx}
+.carinput-input{display: flex;justify-content: center;padding-bottom: 40rpx;border-bottom: 2rpx solid #CDCDCD;align-items: center;
+	.input-active {color: #0256FD;border: 2rpx solid #0256FD;}
+	.cir{width: 14rpx;height: 14rpx;background: #8D8D8D;border-radius: 50%;margin-right: 18rpx;}
+}
+	
+.carinput-input-i{width: 62rpx;height: 88rpx;background: #F5F4F7;border-radius: 10rpx;font-weight: bold;font-size: 30rpx;color: #272727;margin-right: 18rpx;text-align: center;box-sizing: border-box;display: flex;flex-direction: column;align-items: center;justify-content: center;
+	.newtit{
+		font-weight: bold;font-size: 16rpx;color: #0256FD;
+		image{width: 28rpx;height: 28rpx;margin-bottom: 4rpx;}
+	}
+}
+.check /deep/ .uni-date-editor--x__disabled{opacity: 1;}
+.carinput-input-i:nth-last-child(1) {margin-right: 0}
+.check /deep/ .uni-forms-item__label .is-required{width: auto;}
+.coa /deep/ .uni-date__x-input{text-align: right;color: #AAAAAA;}
+.check /deep/ .select-wrap{border: none;width: 100%;}
+.check /deep/ .uni-forms-item{min-height: 106rpx;box-sizing: border-box;display: flex;align-items: center;margin-bottom: 0;border-bottom: 2rpx solid #E6E6E6;padding:10rpx 0;}
+.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/ .uni-forms-item__label text{width: 110rpx;text-align-last: justify;}
+.check /deep/ .is-disabled{color: #222327;background-color: #ffffff !important;}
+.check{min-height: 100vh;padding: 20rpx 24rpx 28rpx;box-sizing: border-box;display: flex;box-sizing: border-box;}
+.cbox{background: #FFFFFF;border-radius: 20rpx;flex: 1;padding-bottom: 76rpx;
+	.chtop{padding-top: 32rpx;margin-bottom: 22rpx;
+		.line{width: 14rpx;height: 48rpx;background: #0256FD;border-radius:0 12rpx 12rpx 0;margin-right: 18rpx;}
+		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;overflow: auto;
+			.img{width: 100%;height: 100%;}
+			.addimg{width: 90rpx;height: 90rpx;margin-bottom: 8rpx;}
+			view{font-weight: bold;font-size: 26rpx;color: #4C6686;}
+		}
+		.carcode{
+			.tit{font-weight: bold;font-size: 26rpx;color: #272727;}
+		}
+	}
+	.rimg{width: 16rpx;height: 28rpx;flex: 0 0 auto;margin-left: 20rpx;
+		image{width: 100%;height: 100%;}
+	}
+	.zhanbox{font-weight: 500;font-size: 24rpx;color: #AAAAAA;padding: 16rpx 0;margin-top: 20rpx;
+		image{width: 20rpx;height: 12rpx;margin-left: 18rpx;transition: all 0.3s;
+			&.act{transform: rotate(-180deg);}
+		}
+	}
+}
+.tips{font-weight: bold;color: #272727;font-size: 26rpx;margin-left: 8rpx;}
+</style>

+ 136 - 0
user_wxui/mine/pages/car/charge.vue

@@ -0,0 +1,136 @@
+<template>
+	<view class="charge">
+		<view class="flex1">
+			<view class="chabox">
+				<view class="chatop mb38 flexcj">
+					<view class="tit flex0 mr12">7号充电桩</view>
+					<view class="txt">设备编号:400569856561B</view>
+				</view>
+				<view class="cimgs mb18">
+					<image :src="carc"></image>
+					<view class="flexcc mt5"><text class="cir"></text>正在充电中…</view>
+				</view>
+				<view class="chamain mb20">
+					<view class="flexc mb30">
+						<view class="chaml flexcc w50">
+							<image :src="chara"></image>
+							<view>
+								<view class="f12 mb4">充电时长</view>
+								<view class="f18">00 : 31 : 05</view>
+							</view>
+						</view>
+						<view class="chaml flexcc w50">
+							<image :src="charb"></image>
+							<view>
+								<view class="f12 mb4">已充电量度</view>
+								<view class="f12"><text class="f18">33.12</text> 度</view>
+							</view>
+						</view>
+					</view>
+					<view class="chamc flexcc">
+						<view>电量 30.3A</view>
+						<view>电压 220V</view>
+						<view>功率 15KW</view>
+					</view>
+				</view>
+				
+				<view class="rhbtn">停止充电</view>
+			</view>
+			<view class="chabox chalist">
+				<view class="tit mb14">最近充电</view>
+				<view class="flexc">
+					<view class="flex1">11月10日 23:17:51</view>
+					<view class="flex0">46.32度</view>
+					<image :src="rimg"></image>
+				</view>
+			</view>
+			
+		</view>
+		<view class="charftit flexcc">客服电话 <text class="co025 ml2">400-400-1234</text></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{
+				carc:require('@/mine/static/house/carc.png'),
+				chara:require('@/mine/static/house/chara.png'),
+				charb:require('@/mine/static/house/charb.png'),
+				rimg:require('@/mine/static/house/rimg.png'),
+				list:[],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+			}
+		},
+		onLoad: function() {
+		
+		},
+		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){
+						
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.charge{padding: 20rpx 24rpx 100rpx;display: flex;flex-direction: column;min-height: 100vh;
+	.charftit{font-weight: 500;flex: 0 0 auto;font-size: 24rpx;color: #AAAAAA;}
+	.chabox{background: #FFFFFF;margin-bottom: 60rpx;border-radius: 20rpx;padding: 34rpx 24rpx 40rpx;
+		.chatop{
+			.tit{font-weight: bold;font-size: 30rpx;color: #272727;}
+			.txt{font-weight: 500;font-size: 26rpx;color: #666666;}
+		}
+		.cimgs{
+			image{width: 506rpx;height: 200rpx;margin: 0 auto;}
+			view{font-weight: bold;font-size: 26rpx;color: #272727;
+				.cir{display: inline-block;width: 14rpx;height: 14rpx;margin-right: 16rpx;background: #0AC86E;border-radius: 50%;}
+			}
+		}
+		.chamain{background: #EFF4FF;border-radius: 20rpx;
+			padding: 48rpx 20rpx 20rpx;
+			.chaml{
+				image{width: 30rpx;height: 30rpx;margin-right: 20rpx;flex: 0 0 auto;}
+				view{font-weight: bold;color: #272727;}	
+			}
+			.chamc{
+				view{font-weight: 500;font-size: 26rpx;color: #949494;padding: 0 38rpx;border-right: 2rpx solid #CDCDCD;box-sizing: border-box;line-height: 36rpx;
+					&:last-child{border-right: none;}
+				}
+			}
+		}
+		&.chalist{padding:34rpx 24rpx 32rpx ;
+			.tit{font-weight: bold;font-size: 30rpx;color: #272727;}
+			.txt{font-weight: 500;font-size: 26rpx;color: #666666;}
+			image{width:16rpx;height: 24rpx;flex: 0 0 auto;margin-left: 44rpx;}
+		}
+	}
+	
+}
+</style>

+ 206 - 0
user_wxui/mine/pages/car/illegalParking.vue

@@ -0,0 +1,206 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+			
+			<view class="tabtop flexc">
+				<view class="tabt" :class="tabval==ite.val?'act':''" v-for="(ite,idx) in tablist" :key="idx" @click="getTabFn(ite.val)">{{ite.tit}}</view>
+				<view class="flex1"></view>
+				<view class="topa flexc">
+					<image :src="reset" class="resetimg" @click="getReset"></image>
+					<picker mode="date"   @change='bindDateChangea'>
+						<view class="chekt flexc">
+							<view>{{wtrq|| "选择日期"}}</view>
+							<image :src="up"></image>
+						</view>
+					</picker>
+				</view>
+			</view>
+		</view>
+		<!-- 列表 -->
+		<view class="carlists">
+			<box-list :datainfo="list" :carType="carType" :wtdt="wtdt" type='carpark' @getDetail="getDetail" @getDelFn='getDelFn'></box-list>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import boxList from "@/mine/components/box/list.vue"
+	import {illegalParkingList,illegalParkingDel} from "@/api/work/car.js"
+	import {getDictionaryFn} from "@/api/system/user.js"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{boxList},
+		data(){
+			return{
+				reset:require('@/mine/static/reset.png'),
+				up:require('@/mine/static/up.png'),
+				wtrq:"",
+				text:'',
+				list:[],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'暂无数据',
+				tabval:'1',
+				phonenumber:this.$store.state.user.phonenumber,
+				tablist:[{tit:'我的车辆',val:'1'}],
+				carType:[],//车辆类型
+			}
+		},
+		onUnload() {
+			uni.$off('refCarPark')
+		},
+		onLoad: function() {
+			uni.$on('refCarPark',(res)=>{
+				this.getrefreshData()
+			})
+			this.init()
+			this.getDataFn()
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			init(){//car_type
+				// 车辆类型
+				getDictionaryFn('car_type').then(res=>{
+					if(res.code==200){
+						this.carType = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+			},
+			getCheck(){
+				this.$tab.navigateTo("/mine/pages/illegalcheck")
+			},
+			getDetail(e){
+				this.$tab.navigateTo("/mine/pages/car/illegalrecord?id="+e)
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.wtrq='';
+				this.text='';
+				this.getrefreshData()
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getTabFn(val){
+				this.tabval=val;
+				this.getrefreshData()
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.wtrq=val;
+				this.getrefreshData()
+			},
+			getDelFn(data){
+				var that=this;
+				illegalParkingDel(data).then(res=>{
+					if(res.code==200){
+						this.$toast("删除成功");
+						setTimeout(function(){
+							that.getrefreshData()
+						},1500)
+					}
+				})
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+					mobileNumber:this.phonenumber,
+					// carType:'1'
+				}
+				// if(this.tabval!='-1'){
+				// 	params.carType=this.tabval
+				// }
+				if(this.wtrq){
+					params['params[createTime]']=this.wtrq
+				}
+				illegalParkingList(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;
+						})
+						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: 130rpx 0 10rpx;}
+.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: 30rpx;
+		.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>

+ 188 - 0
user_wxui/mine/pages/car/illegalrecord.vue

@@ -0,0 +1,188 @@
+<template>
+	<view class="irecord">
+		<view class="ctop flexc">
+			<image :src="carc" class="imgs" v-if="datainfo.carType==1"></image>
+			<image :src="card" class="imgs" v-if="datainfo.carType==2"></image>
+			<view class="tit">{{datainfo.plateNumber}}</view>
+			<view class="flex1"></view>
+			<block v-if="datainfo.carType">
+				<view class="txt" :class="datainfo.carType==1?'ca':'cb'">{{kaType(datainfo.carType,carType)}}</view>
+			</block>
+		</view>
+		<view class="pdlr12" v-if="datainfo.carType==1">
+			<view class="clists bgef">
+				<view class="clist"><view class="tit">关联房号:</view>{{datainfo.visitPortal}}</view>
+				<view class="clist"><view class="tit">手机号码:</view>{{datainfo.mobileNumber}}</view>
+			</view>
+		</view>
+		<view class="chtop flexc">
+			<view class="line"></view>
+			<view>违停记录</view>
+			<view class="flex1"></view>
+			<view class="num coff" v-if="datainfo.isBlack=='Y'">(已登黑名单)</view>
+		</view>
+		<!-- 步骤条 -->
+		<view class="steps" v-for="(ite,idx) in datainfo.children">
+			<image :src="icoa" v-if="idx==0" class="circle"></image>
+			<image :src="icob" v-else class="circle"></image>
+			<view class="step">
+				<view class="slist">
+					<view class="tit">登记时间:</view>{{ite.createTime}}
+				</view>
+				<view class="slist">
+					<view class="tit">违停拍照:</view>
+					<view class="imgas" v-if="ite.illegalPhoto">
+						<image :src="baseUrl+aite" v-for="(aite,aidx) in kaPhoto(ite.illegalPhoto)" :key="aidx" @click.stop="getPreview(aidx,ite.illegalPhoto)"></image>
+					</view>
+				</view>
+			</view>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import {selectDictValue} from "@/utils/common.js"
+	import {illegalParkingDet,illegalParkingDel,illegalParkingCancel} from "@/api/work/car.js"
+	import {getDictionaryFn} from "@/api/system/user.js"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{},
+		data(){
+			return{
+				// line:require('@/car/static/car/line.png'),
+				carc:require('@/mine/static/house/carcc.png'),
+				card:require('@/mine/static/house/carbb.png'),
+				icoa:require('@/mine/static/house/icoa.png'),
+				icob:require('@/mine/static/house/icob.png'),
+				baseUrl:config.baseUrl,
+				datainfo:{},
+				id:'',
+				carType:[],
+			}
+		},
+		onLoad: function(e) {
+			this.init()
+			if(e.id){
+				this.id=e.id;
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			kaType(data, list) {
+				return selectDictValue(list, data);
+			},
+			kaPhoto(data){
+				return data.split(',');
+			},
+			init(){
+				// 车辆类型
+				getDictionaryFn('car_type').then(res=>{
+					if(res.code==200){
+						this.carType = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+			},
+			getDataFn(){
+				illegalParkingDet(this.id).then(res=>{
+					if(res.code==200){
+						this.datainfo=JSON.parse(JSON.stringify(res.data));
+					}
+				})
+			},
+			getPreview(idx,arr) {
+				var newArr=[];
+				var list=arr.split(',')
+				list.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.getLiftFn()
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			getLiftFn(){
+				var that=this;
+				var info=JSON.parse(JSON.stringify(this.datainfo));
+				var params={};
+				params.plateNumber=info.plateNumber;
+				params.illegalParkingId=info.illegalParkingId;
+				params.isBlack="N"
+				// 车牌号,id,isblace
+				illegalParkingCancel(params).then(res=>{
+					if(res.code==200){
+						this.$toast("解除成功")
+						setTimeout(function(){
+							uni.$emit("refCarPark")
+							uni.navigateBack({
+								delta:1
+							})
+						},1500)
+					}
+				})
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+.bgef{background: #EFF4FF;}
+.irecord{background: #FFFFFF;border-radius: 20rpx;flex: 1;padding-bottom: 10rpx;
+	.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;}
+		.line{width: 14rpx;height: 48rpx;background: #0256FD;border-radius:0 12rpx 12rpx 0;margin-right: 18rpx;}
+	}
+	.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>

+ 147 - 0
user_wxui/mine/pages/car/index.vue

@@ -0,0 +1,147 @@
+<template>
+	<view class="carbox">
+		<view class="flex1 cartop">
+			<box-list :datainfo="list" type="mycar" :clcxList="clcxList" @getDetail="getDetail" @getDelFn="getDelFn"></box-list>
+			<!-- <view class="cartips flexc mt16 mb16" @click="getChargeFn">
+				<view class="tit flex1">当前有车辆<text class="co025">充电中…</text></view>
+				<image :src="rimg"></image>
+			</view> -->
+		</view>
+		<view class="plr12 flex0">
+			<view class="rhbtn" @click="getAddFn">添加车辆</view>
+		</view>
+	<loading></loading>	
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import boxList from "@/mine/components/box/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {carList,carDel} from "@/api/work/car.js"
+	import {getDictionaryFn} from "@/api/system/user.js"
+	export default{
+		components:{boxList},
+		data(){
+			return{
+				rimg: require('@/mine/static/house/rimg.png'),
+				list:[],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+				clcxList:[],
+				userId:this.$store.state.user.userId,
+				phonenumber:this.$store.state.user.phonenumber,
+			}
+		},
+		onUnload() {
+			uni.$off('carlist')
+		},
+		onLoad: function() {
+			uni.$on('carlist',(res)=>{
+				this.getrefreshData()
+			})
+			this.init()
+			this.getDataFn()
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			init(){
+				// 车型
+				getDictionaryFn('cartype').then(res=>{
+					if(res.code==200){
+						this.clcxList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+			},
+			getDelFn(data){
+				var that=this;
+				carDel(data).then(res=>{
+					if(res.code==200){
+						this.$toast("删除成功");
+						setTimeout(function(){
+							that.getrefreshData()
+						},1500)
+					}
+				})
+			},
+			getAddFn(){
+				this.$tab.navigateTo("/mine/pages/car/addcar")
+			},
+			getDetail(id){
+				this.$tab.navigateTo("/mine/pages/car/addcar?id="+id)
+			},
+			getChargeFn(){
+				this.$tab.navigateTo("/mine/pages/car/charge")
+			},
+			getrefreshData(){
+				this.pageNum=1;
+				this.list=[];
+				this.reachflag=true;
+				this.getDataFn()
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+					residentPhone:this.phonenumber
+				}
+				carList(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;
+						})
+						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>
+.carbox{display: flex;flex-direction: column;min-height: 100vh;padding: 22rpx 18rpx 100rpx;
+	.cartop{overflow: auto;}
+	.cartips{background: #FFFFFF;border-radius: 20rpx;height: 98rpx;padding: 0 24rpx;
+		image{width: 16rpx;height: 28rpx;flex: 0 0 auto;margin-left: 20rpx;}
+		.tit{font-weight: bold;font-size: 26rpx;color: #272727;}
+	}
+}
+</style>

+ 89 - 0
user_wxui/mine/pages/car/style.css

@@ -0,0 +1,89 @@
+.hover-c {
+    opacity: .5
+}
+
+.body,
+page {
+    height: 100%
+}
+
+.body {
+    overflow: auto
+}
+
+.carinput {
+    margin-top: 74upx;
+    display: flex;
+    flex-direction: column;
+    padding-left: 40upx;
+    padding-right: 40upx
+}
+
+.carinput-title {
+    font-size: 30upx;
+    color: #333333;
+    line-height: 1;
+    margin-bottom: 90upx
+}
+
+.carinput-input {
+    display: flex;
+    justify-content: center
+}
+
+.carinput-input-i {
+    width: 50upx;
+    border-bottom-width: 2upx !important;
+    border-bottom-style: solid;
+    border-bottom-color: #BCBCBC;
+    font-size: 36upx;
+    color: #333333;
+    line-height: 1;
+    margin-right: 12upx;
+    padding-bottom: 7upx;
+    text-align: center
+}
+
+.carinput-input-i:nth-last-child(1) {
+    margin-right: 0
+}
+
+.carinput-input .input-active {
+    border-bottom-width: 2upx !important;
+    border-bottom-style: solid;
+    border-bottom-color: #23CCAB;
+    color: #23CCAB
+}
+
+.carinput-power {
+    height: 90upx;
+    display: flex;
+    justify-content: flex-end
+}
+
+.carinput-power .checkbox-g {
+    display: flex;
+    justify-content: center;
+    align-items: center
+}
+
+.carinput-power .checkbox {
+    margin-right: 92upx;
+    font-size: 28upx;
+    color: #999999;
+    line-height: 1
+}
+
+.carinput-power .checkbox checkbox {
+    transform: scale(.6) translateY(-2px);
+    margin-right: 0
+}
+
+.card-btn {
+    margin-top: 40upx
+}
+
+.card-btn .btn {
+    width: 324upx;
+    height: 80upx
+}

+ 145 - 0
user_wxui/mine/pages/house/addaddress.vue

@@ -0,0 +1,145 @@
+<template>
+	<view class="address">
+		<uni-forms ref="form" :model="datainfo">
+			<view class="adrbox">
+				<uni-forms-item label="智能填写" name="realName">
+					<uni-easyinput type="textarea" autoHeight v-model="text" :inputBorder='false' placeholder="粘贴信息至此处可自动识别信息并填写" />
+				</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="手机号码" />
+						<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="省、市、区、街道" />
+						<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="小区、门牌号等" />
+						<view class="rimg">
+							<image :src="rimg"></image>
+						</view>
+					</view>
+				</uni-forms-item>
+			</view>
+			<view class="adrbox mjbox">
+				<view class="tit mb15">住宅面积</view>
+				<view class="adrlist flexcw">
+					<view v-for="(ite,idx) in mjlist" :class="tabval==ite.val?'act':''" :key="idx" @click="getTabFn(ite.val)">{{ite.tit}}</view>
+				</view>
+			</view>
+			<view class="adrbox">
+				<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>
+			</view>
+			
+		</uni-forms>
+		
+		<view class="rhbtn mt30" @click="getAddFn">确定</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{
+				rimg:require('@/static/images/rimg.png'),
+				check: require('@/mine/static/check.png'),
+				ncheck: require('@/mine/static/ncheck.png'),
+				list:[],
+				text:"",
+				datainfo:{},
+				mjlist:[{tit:'80m²以内',val:'0'},{tit:'80-90m²',val:'1'},{tit:'90-119m²',val:'2'},{tit:'120-139m²',val:'3'},{tit:'140-159m²',val:'4'},{tit:'160m²以上',val:'5'},],
+				checkflag:true,
+				tabval:'0'
+			}
+		},
+		onLoad: function() {
+		
+		},
+		methods:{
+			checkPermi,checkRole,
+			getAddFn(){
+				// this.$tab.navigateTo("/mine/pages/house/addaddress")
+			},
+			getTabFn(val){
+				this.tabval=val
+			},
+			getDataFn(){
+				return
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				params.noticeType=this.tabidx
+				getNoticeList(params).then(res=>{
+					if(res.code==200){
+						
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.address /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;}
+.address /deep/ .uni-forms-item:last-child{border-bottom: none;}
+.address /deep/ .uni-forms-item__label{font-weight: bold;font-size: 26rpx;color: #222327;flex: 0 0 auto;width: auto !important;}
+.address /deep/ .uni-easyinput{flex: 1;text-align: right;font-size: 26rpx;color: #222327;}
+.address /deep/ .uni-easyinput__content-textarea{min-height: 140rpx;font-size: 26rpx;background: #F4F4F4;
+border-radius: 10rpx;padding: 20rpx 14rpx;text-align: left;}
+.address /deep/ .uni-easyinput__placeholder-class{font-size: 26rpx;color: #AAAAAA;}
+.address /deep/ .uni-input-input{font-size: 26rpx;}
+.address /deep/ .uni-textarea-textarea{font-size: 26rpx;}
+.address /deep/ .is-disabled{color: #222327;background-color: #ffffff !important;}
+.address{min-height: 100vh;padding: 20rpx 18rpx;display: flex;flex-direction: column;}
+.adrbox{background: #FFFFFF;border-radius: 20rpx;padding:0 30rpx;margin-bottom: 24rpx;
+	.rimg{width: 16rpx;height: 28rpx;flex: 0 0 auto;margin-left: 20rpx;
+		image{width: 100%;height: 100%;}
+	}
+	&.mjbox{
+		padding: 36rpx  24rpx 18rpx;
+		.tit{font-weight: bold;font-size: 26rpx;color: #272727;padding-left: 18rpx;}
+		.adrlist{
+			view{font-weight: bold;font-size: 26rpx;color: #666666;min-width: 198rpx;padding: 0 10rpx;box-sizing: border-box;margin: 0 12rpx 24rpx;height: 64rpx;display: flex;align-items: center;justify-content: center;border-radius: 10rpx;border: 2rpx solid #C1C1C1;
+			&.act{background: #DFEAFF;border: 2rpx solid #0256FD;color: #0256FD;}
+			}
+		}
+	}
+	
+	.checkimg{width: 80rpx;height: 40rpx;margin-right: 8rpx;}
+}
+
+</style>

+ 489 - 0
user_wxui/mine/pages/house/addhouse.vue

@@ -0,0 +1,489 @@
+<template>
+	<view class="check">
+		<view class="cbox">
+			<view class="chtop flexc">
+				<view class="line"></view>
+				<view>房屋信息</view>
+			</view>
+			<view class="chmain">
+				<uni-forms ref="form" :model="datainfo" :rules="rules">
+				<view class="upbox" @click="getaddImage">
+					<image :src="baseUrl+datainfo.front" class="img" v-if="datainfo.front"></image>
+					<image :src="cmico" class="addimg"></image>
+					<view>扫描房产证自动填写</view>
+				</view>
+				  <uni-forms-item label="房屋坐落" required name="location">
+					  <view class="flexc">
+					  	<uni-easyinput :disabled="isdisabled" v-model="datainfo.location" :inputBorder='false' placeholder="自动识别" />
+					  	<view class="rimg"></view>
+					  </view>
+				  </uni-forms-item>
+					<uni-forms-item label="权利人姓名" name="ownerName">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.ownerName" :inputBorder='false' placeholder="自动识别" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="权利类型" name="rightType">
+						<picker range-key='dictLabel' :disabled="isdisabled" :value="qllxidx" :range="qllxList"   @change='bindDateChange'>
+							<view class="flexc">
+								<view class="flex1 txr f13 co27" v-if="datainfo.rightType&&!qllx">{{statusFormats(datainfo.rightType,qllxList,'qllx')}}</view>
+								<view class="flex1 txr f13" v-else :class="qllx?'co27':'coa'">{{qllx||"请选择权利类型"}}</view>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</view>
+						</picker>
+					</uni-forms-item>
+					<uni-forms-item label="建筑面积" required name="area">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.area" :inputBorder='false' placeholder="自动识别" />
+							<view class="tips">m²</view>
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="不动产单元号" name="propertyUnitNumber">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.propertyUnitNumber" :inputBorder='false' placeholder="请输入不动产单元号" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="相关的字第号" name="documentNumber">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.documentNumber" :inputBorder='false' placeholder="请输入相关的字第号" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="小区名称" name="communityName">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.communityName" :inputBorder='false' placeholder="请输入小区名称" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="门牌号" required name="detailedAddress">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.detailedAddress" :inputBorder='false' placeholder="请输入门牌号" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="使用期限" name="usagePeriod">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.usagePeriod" :inputBorder='false' placeholder="请输入使用期限" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="登记日期" name="registrationDate">
+						<!-- <picker mode="timed" :disabled="isdisabled"  @change='bindDateChangea'>
+							<view class="flexc">
+								<view class="flex1 txr f13"  :class="datainfo.registrationDate?'co27':'coa'">{{datainfo.registrationDate||"请选择登记日期"}}</view>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</view>
+						</picker> -->
+						<!-- :hide-second='true' -->
+						<view class="flexc">
+							<uni-datetime-picker  :disabled="isdisabled" :class="datainfo.registrationDate?'co27':'coa'" type="datetime" placeholder="请选择登记日期" :border="false"  v-model="datainfo.registrationDate" @change="changeLog" />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					
+					<uni-forms-item label="共有姓名" name="coOwner">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.coOwner" :inputBorder='false' placeholder="请输入共有姓名" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="共有情况" name="coOwnership">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.coOwnership" :inputBorder='false' placeholder="请输入共有情况" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="房屋状态" name="houseStatus">
+						<picker range-key='dictLabel' :disabled="isdisabled" :value="fwztidx" :range="fwztList"   @change='bindDateChangeb'>
+							<view class="flexc">
+								<view class="flex1 txr f13 co27" v-if="datainfo.houseStatus&&!fwzt">{{statusFormats(datainfo.houseStatus,fwztList,'fwzt')}}</view>
+								<view class="flex1 txr f13" v-else :class="fwzt?'co27':'coa'">{{fwzt||"请选择房屋状态"}}</view>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</view>
+						</picker>
+					</uni-forms-item>
+					<uni-forms-item label="房屋用途" name="usageType">
+						<picker range-key='dictLabel' :disabled="isdisabled" :value="fwytidx" :range="fwytList"   @change='bindDateChangec'>
+							<view class="flexc">
+								<view class="flex1 txr f13 co27" v-if="datainfo.usageType&&!fwyt">{{statusFormats(datainfo.usageType,fwytList,'fwyt')}}</view>
+								<view class="flex1 txr f13" v-else :class="fwyt?'co27':'coa'">{{fwyt||"请选择房屋用途"}}</view>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</view>
+						</picker>
+					</uni-forms-item>
+					<uni-forms-item label="有无车位" name="hasParkingSpace">
+						<picker range-key='dictLabel' :disabled="isdisabled" :value="ywcwidx" :range="ywcwList"   @change='bindDateChanged'>
+							<view class="flexc">
+								<view class="flex1 txr f13 co27" v-if="datainfo.hasParkingSpace&&!ywcw">{{statusFormats(datainfo.hasParkingSpace,ywcwList,'ywcw')}}</view>
+								<view class="flex1 txr f13" v-else :class="ywcw?'co27':'coa'">{{ywcw||"请选择有/无"}}</view>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</view>
+						</picker>
+					</uni-forms-item>
+					<uni-forms-item label="车位号" name="parkingNumber">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.parkingNumber" :inputBorder='false' placeholder="请输入车位号" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<!-- <uni-forms-item label="房型" name="realName">
+						<view class="flexjd">
+							<picker range-key='dictLabel' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+								<view class="flexc ml10">
+									<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择'}}</view>
+									<view class="tips">室</view>
+								</view>
+							</picker>
+							<picker range-key='dictLabel' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+								<view class="flexc ml10">
+									<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择'}}</view>
+									<view class="tips">厅</view>
+								</view>
+							</picker>
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item> -->
+					<!-- <uni-forms-item label="住户类型" name="realName">
+						<picker range-key='dictLabel' :disabled="isdisabled" :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 :disabled="isdisabled" v-model="datainfo.phonenumber" disabled :inputBorder='false' placeholder="自动识别" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="与户主关系" :disabled="isdisabled" name="realName">
+						<picker range-key='dictLabel' :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="realName">
+						<picker range-key='dictLabel' :disabled="isdisabled" :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>
+				<view class="rhbtn mt30" @click="getEditFn" v-if="isdisabled">修改</view>
+				<view class="rhbtn mt30" @click="getSubmit" v-else>确定{{ptype=='add'?'添加':'修改'}}</view>
+			</view>
+		</view>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {uploadIdentify,selectValueKey,geocodeAddress} from '@/utils/common.js'
+	import {getDictionaryFn} from "@/api/system/user.js"
+	import {houseInfoAdd,houseInfoPut,houseInfoDet} from "@/api/work/work.js"
+	export default{
+		components:{},
+		data(){
+			return{
+				rimg: require('@/mine/static/house/rimg.png'),
+				cmico:require('@/mine/static/house/cmico.png'),
+				baseUrl:config.baseUrl,
+				datainfo:{
+					 // "houseId":"",//房屋信息主键
+					 "ownerName":"",//权利人姓名
+					 "location":"",//房屋坐落位置
+					 "rightType":"",//权利类型,如所有权、使用权等
+					 "area":"",//房屋面积,单位为平方米
+					 "documentNumber":"",//房屋相关的字第号
+					 "propertyUnitNumber":"",//不动产单元号
+					 "coOwnership":"",//房屋的共有情况,如共有比例等
+					 "usageType":"",//房屋用途,如住宅、商业等
+					 "usagePeriod":"",//房屋使用期限
+					 "registrationDate":"",//房屋登记日期
+					 "coOwner":"",//共有人姓名,多个共有人可以用逗号分隔
+					 "detailedAddress":"",//房屋的详细门牌号
+					 "hasParkingSpace":"",//是否有车位,Y表示有,N表示无
+					 "communityName":"",//房屋所在小区名称
+					 "houseStatus":"",//房屋状态:1-自住,2-出租,3-空闲,4-待售
+					 "parkingNumber":'',//车位号
+				},
+				rules: {
+				  location: {rules: [{required: true,errorMessage: '请输入房屋坐落位置' }]},
+				  detailedAddress: {rules: [{required: true,errorMessage: '请输入详细门牌号' }]},
+				  area: {rules: [{required: true,errorMessage: '请输入面积' }]},
+				},
+				id:'',
+				ptype:'add',
+				fwzt:'',
+				qllx:'',
+				fwyt:'',
+				ywcw:'',
+				fwztidx:'',
+				qllxidx:'',
+				fwytidx:'',
+				ywcwidx:'',
+				fwztList:[],
+				qllxList:[],
+				fwytList:[],
+				ywcwList:[{dictLabel:'有',dictValue:'Y'},{dictLabel:'无',dictValue:'N'},],
+				isdisabled:false,
+				latitude:'',
+				longitude:"",
+				starttime:'',
+			}
+		},
+		onLoad: function(e) {
+			if(e.id){
+				this.id=e.id;
+				this.ptype="edit";
+				// this.isdisabled=true;
+				this.getDetail()
+			}
+			this.time()
+			this.init()
+		},
+		methods:{
+			checkPermi, checkRole,
+			getEditFn(){
+				this.isdisabled=false;
+			},
+			time() {
+				var date = new Date();
+				var y = date.getFullYear();
+				var m = date.getMonth() + 1;
+				var d = date.getDate();
+				var h = date.getHours();
+				var min = date.getMinutes();
+				var s = date.getSeconds();
+				var yearStr = y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d)
+				// var timeStr = (h < 10 ? ('0' + h) : h) + ':' + (min < 10 ? ('0' + min) : min) + ':' + (s < 10 ? (
+				// 	'0' + s) : s);
+				// var kaTime = yearStr + ' ' + timeStr;
+				this.starttime=yearStr
+				// return kaTime
+			},
+			statusFormats(data, list,type) {
+				var aite=selectValueKey(list, data);
+				if(type=='qllx'){
+					this.qllxidx=aite.key;
+				}else if(type=='fwzt'){
+					this.fwztidx=aite.key;
+				}else if(type=='fwyt'){
+					this.fwytidx=aite.key;
+				}else if(type=='ywcw'){
+					this.ywcwidx=aite.key;
+				}
+				return aite.actions;
+			},
+			init(){
+				// 房屋状态
+				getDictionaryFn('house_status').then(res=>{
+					if(res.code==200){
+						this.fwztList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+				//权利类型
+				getDictionaryFn('types_rights').then(res=>{
+					if(res.code==200){
+						this.qllxList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+				//房屋用途
+				getDictionaryFn('use_remises').then(res=>{
+					if(res.code==200){
+						this.fwytList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+			},
+			bindDateChange(e){
+				var val=e.detail.value;
+				this.datainfo.rightType=this.qllxList[val].dictValue;
+				this.qllx=this.qllxList[val].dictLabel;
+			},
+			bindDateChangea(e){
+				var val=e.detail.value;
+				this.datainfo.registrationDate=val;
+			},
+			bindDateChangeb(e){
+				var val=e.detail.value;
+				this.datainfo.houseStatus=this.fwztList[val].dictValue;
+				this.fwzt=this.fwztList[val].dictLabel;
+			},
+			bindDateChangec(e){
+				var val=e.detail.value;
+				this.datainfo.usageType=this.fwytList[val].dictValue;
+				this.fwyt=this.fwytList[val].dictLabel;
+			},
+			bindDateChanged(e){
+				var val=e.detail.value;
+				this.datainfo.hasParkingSpace=this.ywcwList[val].dictValue;
+				this.ywcw=this.ywcwList[val].dictLabel;
+			},
+			getDetail(){
+				houseInfoDet(this.id).then(res=>{
+					if(res.code==200){
+						this.datainfo=res.data;
+						
+					}
+				})
+			},
+			getSubmit(){
+				this.$refs.form.validate().then(res => {
+					var params=JSON.parse(JSON.stringify(this.datainfo))
+					// if(!params.portalId){
+					// 	this.$toast("请选择来访门户")
+					// 	return
+					// }
+					// if(params.isCar=='Y'&&!params.plateNumber){
+					// 	this.$toast("请输入车牌号")
+					// 	return
+					// }
+					// if(!params.visitorTime){
+					// 	this.$toast("请选择来访时间")
+					// 	return
+					// }
+					if(this.ptype=='add'){
+						houseInfoAdd(params).then(res=>{
+							if(res.code==200){
+								this.$toast("新增成功")
+								setTimeout(function(){
+									uni.$emit("refHouseList")
+									uni.navigateBack({
+										delta:1
+									})
+								},1500)
+							}
+						})
+					}else{
+						houseInfoPut(params).then(res=>{
+							if(res.code==200){
+								this.$toast("修改成功")
+								setTimeout(function(){
+									uni.$emit("refHouseList")
+									uni.navigateBack({
+										delta:1
+									})
+								},1500)
+							}
+						})
+					}
+				})
+			},
+			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 = [];
+							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>
+.coa /deep/ .uni-date__x-input{text-align: right;color: #AAAAAA;}
+.check /deep/ .uni-date-editor--x__disabled{opacity: 1;}
+.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/ .uni-forms-item__label text{width: 110rpx;text-align-last: justify;}
+.check /deep/ .uni-forms-item__label .is-required{width: auto;}
+.check /deep/ .is-disabled{color: #222327;background-color: #ffffff !important;}
+.check{min-height: 100vh;padding: 20rpx 18rpx 22rpx;box-sizing: border-box;display: flex;box-sizing: border-box;}
+.cbox{background: #FFFFFF;border-radius: 20rpx;flex: 1;padding-bottom: 28rpx;
+	.chtop{padding-top: 32rpx;margin-bottom: 22rpx;
+		.line{width: 14rpx;height: 48rpx;background: #0256FD;border-radius:0 12rpx 12rpx 0;margin-right: 18rpx;}
+		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: 90rpx;height: 90rpx;margin-bottom: 8rpx;}
+			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%;}
+	}
+}
+.tips{font-weight: bold;color: #272727;font-size: 26rpx;margin-left: 8rpx;}
+</style>

+ 88 - 0
user_wxui/mine/pages/house/address.vue

@@ -0,0 +1,88 @@
+<template>
+	<view class="address">
+		<view class="adrbox ">
+			<view class="flex1 plr2">
+				<box-lit :datainfo="list" :wtdt="wtdt" type="address"></box-lit>
+			</view>
+			<view class="rhbtn flex0 mt16" @click="getAddFn">新建地址</view>
+		</view>
+		
+		
+	<loading></loading>	
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import boxLit from "@/mine/components/box/list.vue"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{boxLit},
+		data(){
+			return{
+				// hrimg:require('@/static/logo.png'),
+				list:[],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+			}
+		},
+		onLoad: function() {
+		
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getAddFn(){
+				this.$tab.navigateTo("/mine/pages/house/addaddress")
+			},
+			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>
+.address{min-height: 100vh;padding: 20rpx 18rpx;display: flex;flex-direction: column;}
+.adrbox{background: #FFFFFF;border-radius: 20rpx;padding:0 26rpx 80rpx;flex: 1;display: flex;flex-direction: column;}
+</style>

+ 301 - 0
user_wxui/mine/pages/house/index.vue

@@ -0,0 +1,301 @@
+<template>
+	<view class="house" :style="'padding-top:'+nvaHeight+'px;'">
+		<view class="navbox">
+			<uni-nav-bar  color="#272727" left-icon="left"  @clickLeft="getBackFn"  :background-color="backgroundColor" :border="false" statusBar='true' fixed="true">
+			</uni-nav-bar>
+		</view>
+		<view class="houtop">
+			<!-- 有 -->
+			<view class="flexc mb10" v-if="list.length">
+				<view class="tit">嗨,{{nickName}}!</view>
+				<view class="tita flexcc" v-if="list[0].isHouseholder=='Y'">户主</view>
+				<view class="flex1"></view>
+				<view class="tbtns flex0 flexc" @click="getListFn">家庭成员
+					<image :src="more"></image>
+				</view>
+			</view>
+			<!-- 无 -->
+			<block v-else>
+				<view class="flexc mb10">
+					<view class="tit">我的房屋</view>
+				</view>
+				<view class="txt mb10 fw5">您还未添加房屋信息喔~</view>
+			</block>
+			
+			<view class="txt">Welcome back home</view>
+			<image :src="housebg" class="houseimg"></image>
+		</view>
+		<block v-if="list.length">
+			<view class="housebox pr" v-for="(ite,idx) in list" :key="idx" :data-idx="idx"
+				@touchstart="drawStart" @touchmove="drawMove" @touchend="drawEnd" :style="'right:'+ite.right+'px'"
+			>
+				<view class="delleft pr">
+					<view class="hblist">
+						<view class="laber"><text>房屋坐落</text>:</view>
+						<view class="tit">{{ite.location}}</view>
+						<image :src="adrs" class="adrs"></image>
+						<view class="flex1"></view>
+						<view class="edit flexc flex0" @click.stop="getEdit(ite.houseId)">
+							<image :src="edit"></image>
+							编辑
+						</view>
+					</view>
+					<view class="flexc">
+						<view class="hblist w50">
+							<view class="laber"><text>小区名称</text>:</view>
+							<view class="tit">{{ite.communityName}}</view>
+						</view>
+						<view class="hblist w50">
+							<view class="laber"><text>门牌号</text>:</view>
+							<view class="tit">{{ite.detailedAddress}}</view>
+						</view>
+					</view>
+					<view class="flexc">
+						<view class="hblist w50">
+							<view class="laber"><text>房屋所属</text>:</view>
+							<view class="tit">{{ite.ownerName}}</view>
+						</view>
+						<view class="hblist w50">
+							<view class="laber"><text>建筑面积</text>:</view>
+							<view class="tit">{{ite.area}}m²</view>
+						</view>
+					</view>
+					<!-- <view class="flexc">
+						<view class="hblist w50">
+							<view class="laber"><text>房型</text>:</view>
+							<view class="tit">3室1厅</view>
+						</view>
+						<view class="hblist w50">
+							<view class="laber"><text>居住人口</text>:</view>
+							<view class="tit">3口人</view>
+						</view>
+					</view> -->
+					<view class="flexc">
+						<view class="hblist w50">
+							<view class="laber"><text>有无车位</text>:</view>
+							<view class="tit">{{ite.hasParkingSpace=='Y'?'有':'无'}}</view>
+						</view>
+					</view>
+				</view>
+				<view class="spdel" v-if="ite.right>0&&checkPermi(['wuYe:houseInfo:remove'])" @click.stop="getDelFn(ite.houseId)">删除</view>
+			</view>
+		</block>
+		<view style="height: 76rpx;"></view>
+		<!-- <view class="hbtns bga mb18" v-if="list.length">修改信息</view> -->
+		<view class="hbtns bgb" :class="list.length?'':'mt110'" @click="getAddFn">添加房屋</view>
+		
+	<loading></loading>	
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl;
+	import {houseInfoList,houseInfoDel} from "@/api/work/work.js"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	export default{
+		components:{},
+		data(){
+			return{
+				housebg:require('@/mine/static/house/house.png'),
+				more:require("@/work/static/visitor/more.png"),
+				adrs:require('@/mine/static/house/adrs.png'),
+				edit:require('@/mine/static/house/edit.png'),
+				backgroundColor: "transparent",
+				nvaHeight:44,
+				list:[],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+				delBtnWidth:66,//左滑默认宽度
+				nickName:this.$store.state.user.nickName,
+				userId:this.$store.state.user.userId,
+				phonenumber:this.$store.state.user.phonenumber,
+			}
+		},
+		onUnload() {
+			uni.$off('refHouseList')
+		},
+		onLoad: function() {
+			uni.$on('refHouseList',(res)=>{
+				this.getDataFn()
+			})
+			uni.getSystemInfo({
+				success: (e) => {
+					this.nvaHeight = Number(e.statusBarHeight)+44;
+				}
+			})
+			this.getDataFn()
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		onPageScroll(e) {
+			var scrollTop = Number(e.scrollTop);
+			if (scrollTop > 0) {
+				this.backgroundColor = '#CCDDFF'
+			} else {
+				this.backgroundColor = 'transparent'
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getAddFn(){
+				this.$tab.navigateTo("/mine/pages/house/addhouse")
+			},
+			getListFn(){
+				this.$tab.navigateTo("/mine/pages/house/people")
+			},
+			getEdit(id){
+				this.$tab.navigateTo("/mine/pages/house/addhouse?id="+id)
+			},
+			getBackFn(){
+				uni.navigateBack({
+					delta:1
+				})
+			},
+			getDelFn(id){
+				var that=this;
+				uni.showModal({
+					title: '确认删除',
+					content: "是否确认删除",
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							houseInfoDel(id).then(res=>{
+								if(res.code==200){
+									that.$toast('删除成功')
+									setTimeout(function(){
+										that.getDataFn()
+									},1200)
+								}else{
+									that.$toast(res.msg)
+								}
+							})
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			getDataFn(){
+				var params={
+					userId:this.userId,
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+				}
+				houseInfoList(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;
+						})
+						if (this.pageNum == 1) {
+							this.list = newArr;
+						} else {
+							this.list = this.list.concat(newArr)
+						}
+					}else{
+						this.$toast(res.msg)
+					}
+				})
+				
+			},
+			//开始触摸滑动
+			drawStart(e) {
+				console.log("开始触发");
+				var touch = e.touches[0];
+				this.startX = touch.clientX;
+			},
+			//触摸滑动
+			drawMove(e) {
+				// console.log("滑动");
+				for (var index in this.list) {
+					// this.csListArrl[index].right=0
+					this.$set(this.list[index],'right',0);
+				}
+				var idx=e.currentTarget.dataset.idx
+				var touch = e.touches[0];
+				var item = this.list[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.list[idx],'right',disX);
+				} else {
+					// this.csListArrl[idx].right=0
+					this.$set(this.list[idx],'right',0);
+				}
+			},
+			//触摸滑动结束
+			drawEnd(e) {
+				// console.log("滑动结束");
+				var idx=e.currentTarget.dataset.idx
+				var item = this.list[idx];
+				if (item.right >= this.delBtnWidth / 2) {
+					// this.list[idx].right=this.delBtnWidth
+					this.$set(this.list[idx],'right',this.delBtnWidth);
+				} else {
+					this.list[idx].right=0
+				}
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.navbox{position: fixed;left: 0;right: 0;top: 0;z-index: 4;	}
+.house{min-height: 100vh;background: linear-gradient(180deg, #CDDDFF 0%, rgba(255,255,255,0) 100%) no-repeat;background-size: 100% 578rpx;padding: 0 54rpx 100rpx;
+	.houtop{padding: 20rpx 4rpx 0 4rpx;height:520rpx;box-sizing: border-box;margin-bottom: 50rpx;position: relative;
+		.tit{font-size: 36rpx;font-weight: bold;color: #272727;}
+		.txt{font-size: 26rpx;color: #272727;}
+		.tita{min-width: 86rpx;font-weight: 500;margin-left: 26rpx;font-size: 24rpx;color: #0156FE;height: 36rpx;border-radius: 18rpx;border: 2rpx solid #0156FE;}
+		.houseimg{width: 596rpx;height:204rpx;position: absolute;bottom: 0;right: -58rpx;}
+		.tbtns{font-weight: 500;font-size: 26rpx;color: #0256FD;
+			image{width: 20rpx;height: 16rpx;margin-left: 10rpx;}
+		}
+	}
+	.housebox{width: 100%;background: #FFFFFF;border-radius: 20rpx;box-sizing: border-box;margin-bottom: 24rpx;
+		.delleft{
+			padding: 36rpx 24rpx 16rpx;
+		}
+		.hblist{display: flex;margin-bottom: 20rpx;
+			.laber{font-weight: 500;font-size: 26rpx;color: #666666;flex: 0 0 auto;
+				text{min-width: 104rpx;text-align-last: justify;display: inline-block;}
+			}
+			.tit{color: #272727;font-weight: 500;font-size: 26rpx;}
+			.adrs{width: 20rpx;height: 22rpx;margin-left: 16rpx;flex: 0 0 auto;margin-top: 6rpx;}
+		}
+	}
+	.hbtns{font-weight: bold;display: flex;align-items: center;justify-content: center;font-size: 26rpx;height: 88rpx;border-radius: 44rpx;box-sizing: border-box;
+		&.bga{border: 1px solid #0256FD;color: #0256FD;background: #CADBFF;}
+		&.bgb{border: 1px solid #45CB99;color: #45CB99;background: #DBF8ED;}
+		
+	}
+}
+.edit{font-weight: 500;font-size: 24rpx;color: #06C770;
+	image{width: 22rpx;height: 22rpx;margin-right: 4rpx;}
+}
+</style>

+ 215 - 0
user_wxui/mine/pages/house/people.vue

@@ -0,0 +1,215 @@
+<template>
+	<view class="car">
+		<view class="cartop">
+			<view class="topa flexc">
+				<image :src="reset" class="resetimg" @click="getReset"></image>
+				<picker range-key='dictLabel' 	:range="rymmList"    @change='bindDateChangea'>
+					<view class="chekt flexc">
+						<view class="over">{{rymm|| "选择身份"}}</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">
+			<box-list :datainfo="list" :rymmList="rymmList" :wtdt="wtdt" type='people' @getDelFn="getDelFn" @getDetail="getDetail"></box-list>
+		</view>
+		<block v-if="checkPermi(['wuYe:residentInfo:add'])">
+			<view style="height: 100rpx;"></view>
+			<view class="rfbtn" @click="getAddFn">添加人员</view>
+		</block>
+		<loading></loading>
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import boxList from "@/mine/components/box/list.vue"
+	import {getDictionaryFn} from "@/api/system/user.js"
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {houseInfoList} from "@/api/work/work.js"
+	import {residentInfoList,residentInfoDel} from "@/api/work/people.js"
+	export default{
+		components:{boxList},
+		data(){
+			return{
+				reset:require('@/mine/static/reset.png'),
+				search:require('@/mine/static/search.png'),
+				up:require('@/mine/static/up.png'),
+				sfxx:"",
+				text:'',
+				rymm:'',
+				rymmid:"",
+				rymmList:[],
+				list:[],
+				pageSize: 10,
+				pageNum: 1,
+				reachflag: true,
+				wtdt:'',
+				houseId:'',
+				userId:this.$store.state.user.userId,
+				phonenumber:this.$store.state.user.phonenumber,
+			}
+		},
+		onUnload() {
+			uni.$off('residentInfoList')
+		},
+		onLoad: function(e) {
+			uni.$on('residentInfoList',(res)=>{
+				this.getrefreshData()
+			})
+			if(e.id){
+				this.houseId=e.id;
+			}
+			this.init()
+			this.getDataFn()
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			init(){
+				//人员面貌
+				getDictionaryFn('affiliation_personnel').then(res=>{
+					if(res.code==200){
+						this.rymmList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+			},
+			getAddFn(){
+				this.$tab.navigateTo("/health/pages/health/add")
+			},
+			getDetail(id){
+				this.$tab.navigateTo("/health/pages/health/add?id="+id)
+			},
+			getConfirm(){
+				this.getrefreshData()
+			},
+			getReset(){
+				this.rymm='';
+				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.rymm=this.rymmList[val].dictLabel;
+				this.rymmid=this.rymmList[val].dictValue;
+				this.getrefreshData()
+			},
+			getDelFn(id){
+				var that=this;
+				residentInfoDel(id).then(res=>{
+					if(res.code==200){
+						that.$toast("删除成功")
+						setTimeout(function(){
+							that.getrefreshData()
+						},1500)
+					}
+				})
+			},
+			getDataFn(){
+				var params={
+					pageSize:this.pageSize,
+					pageNum: this.pageNum,
+					residentPhone:this.phonenumber,
+					userId:this.userId
+				}
+				if(this.houseId){
+					params.houseId=this.houseId
+				}
+				if(this.text){
+					params.residentName=this.text
+				}
+				if(this.rymm){
+					params.residentAppearance=this.rymmid
+				}
+				houseInfoList(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=>{
+							var newArr=ite.residentInfoList;
+							if(ite.residentInfoList){
+								newArr.forEach(itea=>{
+									itea.right=0
+								})
+							}
+							ite.zhanflag=false;
+						})
+						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-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>

BIN
user_wxui/mine/static/check.png


BIN
user_wxui/mine/static/edit.png


BIN
user_wxui/mine/static/house/add.png


BIN
user_wxui/mine/static/house/adrs.png


BIN
user_wxui/mine/static/house/cara.png


BIN
user_wxui/mine/static/house/caraa.png


BIN
user_wxui/mine/static/house/carb.png


BIN
user_wxui/mine/static/house/carbb.png


BIN
user_wxui/mine/static/house/carc.png


BIN
user_wxui/mine/static/house/carcc.png


BIN
user_wxui/mine/static/house/card.png


BIN
user_wxui/mine/static/house/chara.png


BIN
user_wxui/mine/static/house/charb.png


BIN
user_wxui/mine/static/house/cmico.png


BIN
user_wxui/mine/static/house/edit.png


BIN
user_wxui/mine/static/house/house.png


BIN
user_wxui/mine/static/house/icoa.png


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác