zouling 4 months ago
parent
commit
546d409b7b
38 changed files with 2952 additions and 549 deletions
  1. 16 0
      user_ui/.hbuilderx/launch.json
  2. 6 1
      user_ui/App.vue
  3. 41 0
      user_ui/api/work/car.js
  4. 78 0
      user_ui/api/work/manage.js
  5. 79 0
      user_ui/api/work/people.js
  6. 40 0
      user_ui/api/work/service.js
  7. 47 0
      user_ui/api/work/work.js
  8. 3 3
      user_ui/health/pages/health/add.vue
  9. 2 2
      user_ui/manifest.json
  10. 11 10
      user_ui/mine/components/box/list.vue
  11. 193 39
      user_ui/mine/pages/car/addcar.vue
  12. 35 7
      user_ui/mine/pages/car/index.vue
  13. 2 2
      user_ui/mine/pages/house/addaddress.vue
  14. 344 77
      user_ui/mine/pages/house/addhouse.vue
  15. 148 44
      user_ui/mine/pages/house/index.vue
  16. 8 0
      user_ui/mine/pages/house/list.vue
  17. BIN
      user_ui/mine/static/house/edit.png
  18. 8 8
      user_ui/news/components/box/list.vue
  19. 2 2
      user_ui/news/pages/complaint/add.vue
  20. 24 52
      user_ui/news/pages/news/detail.vue
  21. 214 0
      user_ui/news/pages/news/djdetail.vue
  22. 2 2
      user_ui/news/pages/news/newsadd.vue
  23. 71 21
      user_ui/news/pages/news/newsdj.vue
  24. 57 12
      user_ui/news/pages/news/newssq.vue
  25. 7 0
      user_ui/pages.json
  26. 4 4
      user_ui/static/index.html
  27. 4 0
      user_ui/static/style.css
  28. 44 0
      user_ui/utils/common.js
  29. 117 31
      user_ui/work/components/box/list.vue
  30. 2 2
      user_ui/work/components/popup/pay.vue
  31. 108 0
      user_ui/work/components/w-select/readme.md
  32. 575 0
      user_ui/work/components/w-select/w-select.vue
  33. 66 13
      user_ui/work/pages/service/warranty.vue
  34. 241 56
      user_ui/work/pages/service/warrantyadd.vue
  35. 44 16
      user_ui/work/pages/service/warrantydetail.vue
  36. 246 100
      user_ui/work/pages/visitor/vadd.vue
  37. 24 37
      user_ui/work/pages/visitor/vdetail.vue
  38. 39 8
      user_ui/work/pages/visitor/vlist.vue

+ 16 - 0
user_ui/.hbuilderx/launch.json

@@ -0,0 +1,16 @@
+{ // 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": [{
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"mp-weixin" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

+ 6 - 1
user_ui/App.vue

@@ -174,7 +174,12 @@ import {updateUserProfile,findVersion} from "@/api/system/user.js"
     }
   }
 </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'

+ 41 - 0
user_ui/api/work/car.js

@@ -0,0 +1,41 @@
+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',
+  })
+}
+

+ 78 - 0
user_ui/api/work/manage.js

@@ -0,0 +1,78 @@
+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
+  })
+}
+// 党建资讯-详情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',
+  })
+}

+ 79 - 0
user_ui/api/work/people.js

@@ -0,0 +1,79 @@
+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',
+  })
+}

+ 40 - 0
user_ui/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',
+  })
+}

+ 47 - 0
user_ui/api/work/work.js

@@ -0,0 +1,47 @@
+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/listNoPage',
+    method: 'get',
+  })
+}

+ 3 - 3
user_ui/health/pages/health/add.vue

@@ -48,21 +48,21 @@
 							<uni-easyinput disabled  v-model="datainfo.phonenumber"  :inputBorder='false' placeholder="自动识别" />
 						</view>
 					</uni-forms-item>
-					<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+					<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='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+					<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='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+					<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>

+ 2 - 2
user_ui/manifest.json

@@ -68,8 +68,8 @@
         "sdkConfigs" : {
             "maps" : {
                 "amap" : {
-                    "key" : "fba818d626f91cf5a13cd61943a7667e",
-                    "securityJsCode" : "b06df55c66884ce2c9a3f3281c2c5ca9",
+                    "key" : "8de52b560193f01932ad997dba3e76c0",
+                    "securityJsCode" : "8de52b560193f01932ad997dba3e76c0",
                     "serviceHost" : ""
                 }
             }

+ 11 - 10
user_ui/mine/components/box/list.vue

@@ -3,23 +3,24 @@
 	<!-- 第一种样式  人员管理-->
 	<block v-if="datainfo.length>0">
 		<block v-if="type=='mycar'">
-			<view class="carlist" v-for="(ite,idx) in datainfo" :key="idx">
+			<view class="carlist" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail(ite.houseId)">
 				<view class="carltop flexc">
 					<view class="flex1">
-						<view class="tit mb6" :class="ite.type==1?'co01':'co16'">皖A 86KY2·白</view>
-						<view class="txt flexc">奔驰·E300L
-							<view class="txtbtn flexcc" v-if="ite.type==2">新能源</view>
+						<view class="tit mb6" :class="ite.vehicleType==1?'co01':'co16'">{{ite.plateNumber}}</view>
+						<view class="txt flexc">{{ite.plateNumber}}
+							<view class="txtbtn flexcc">{{ite.vehicleType}}</view>
+							<!-- <view class="txtbtn flexcc" v-if="ite.vehicleType==2">新能源</view> -->
 						</view>
 					</view>
-					<image :src="cara" class="cara" v-if="ite.type==1"></image>
-					<image :src="carb" class="carb" v-if="ite.type==2"></image>
+					<image :src="cara" class="cara" v-if="ite.vehicleType==1"></image>
+					<image :src="carb" class="carb" v-if="ite.vehicleType==2"></image>
 				</view>
 				<view class="carlf">
-					<view class="clflist">发动机号码 :916509</view>
-					<view class="clflist">车辆识别代号:LFV2A21K7D4044585</view>
+					<view class="clflist">发动机号码 :{{ite.engineNumber}}</view>
+					<view class="clflist">车辆识别代号:{{ite.identificationNumber}}</view>
 					<view class="flexc">
-						<view class="clflist w50">注册日期:2015-03-18</view>
-						<view class="clflist w50">发证日期:2015-03-18</view>
+						<view class="clflist w50">注册日期:{{ite.registrationDate}}</view>
+						<view class="clflist w50">发证日期:{{ite.issueDate}}</view>
 					</view>
 				</view>
 			</view>

+ 193 - 39
user_ui/mine/pages/car/addcar.vue

@@ -6,7 +6,7 @@
 				<view>车辆信息</view>
 			</view>
 			<view class="chmain">
-				<uni-forms ref="form" :model="datainfo">
+				<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>
@@ -17,36 +17,72 @@
 						<view>需车牌插件</view>
 					</view>
 					<block v-if="zhanfalg">
-					<uni-forms-item label="品牌车型" name="realName">
-						<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
-							<view class="flexc">
-								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择品牌车型'}}</view>
+						<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">
+						<picker range-key='dictLabel' :disabled="isdisabled" :value="cllxidx" :range="cllxList"   @change='bindDateChange'>
+							<view class="flexc mh35">
+								<view class="flex1 txr f13 co27" v-if="datainfo.vehicleBrand&&!cllx">{{statusFormats(datainfo.vehicleBrand,cllxList,'cllx')}}</view>
+								<view class="flex1 txr f13" v-else :class="cllx?'co27':'coa'">{{cllx||"请选择品牌车型"}}</view>
 								<view class="rimg"><image :src="rimg"></image></view>
 							</view>
 						</picker>
 					</uni-forms-item>
-					<uni-forms-item label="车辆类型" name="realName">
-						<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
-							<view class="flexc">
-								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择车辆类型'}}</view>
-								<view class="rimg"><image :src="rimg"></image></view>
-							</view>
-						</picker>
+					<uni-forms-item 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" @click.stop="">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.vehicleColour" :inputBorder='false' placeholder="请输入车辆颜色" />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="发动机编号" name="engineNumber">
+						<view class="flexc" @click.stop="">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.engineNumber" :inputBorder='false' placeholder="请输入发动机编号" />
+							<view class="rimg"><image :src="rimg"></image></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="车辆识别代号" name="identificationNumber">
+						<view class="flexc" @click.stop="">
+							<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>
-					<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
-						<uni-forms-item label="车辆颜色" name="phonenumber">
-							<view class="flexc" @click.stop="">
-								<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请选择或输入车辆颜色" />
-								<view class="rimg"><image :src="rimg"></image></view>
-							</view>
-						</uni-forms-item>
-					</picker>
 					</block>
 					<view class="zhanbox flexcc" @click="zhanfalg=!zhanfalg">
 						{{zhanfalg?"折叠信息":'展开信息'}}<image :class="!zhanfalg?'act':''" :src="upimg"></image>
 					</view>
 				</uni-forms>
-				<view class="rhbtn mt30" @click="getNext">确定添加</view>
+				<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>
 		<loading></loading>
@@ -56,9 +92,13 @@
 <script>
 	import config from '@/config'
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
-	import {uploadIdentify} from '@/utils/common.js'
+	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"
 	export default{
-		components:{},
+		components:{wSelect},
 		data(){
 			return{
 				rimg: require('@/mine/static/house/rimg.png'),
@@ -66,30 +106,142 @@
 				upimg:require('@/mine/static/house/up.png'),
 				baseUrl:config.baseUrl,
 				datainfo:{
-					realName:'',
-					idCard:'',
-					address:'',
-					expirationDate:'',
-					phonenumber:'',
-					front:'',
-					back:'',
+					// "carId":"",//业主车辆主键
+					"houseId":"",//房屋信息id
+					"detailedAddress":"",//房屋的详细门牌号
+					"userId":"",//用户id
+					"residentId":"",//居住人员表id
+					"userName":"",//业主姓名
+					"residentPhone":"",//业主手机号
+					"plateNumber":"",//车牌号码
+					"vehicleBrand":"",//车辆车型
+					"vehicleType":"",//车辆类型
 				},
 				zhanfalg:true,
 				syqxidx:'',
-				sexs: [{
-					text: '男',
-					value: 0
-				}, {
-					text: '女',
-					value: 1
-				}],
+				filterable:true,
+				chooseValue:'',
+				fwlist:[],
+				isdisabled:false,
+				rules:{
+					houseId: {rules: [{required: true,errorMessage: '请选择居住门户' }]},
+					detailedAddress: {rules: [{required: true,errorMessage: '请输入居住地址' }]},
+					// name: {rules: [{required: true,errorMessage: '请输入访客姓名' }]},
+				 //  portalId: {rules: [{required: true,errorMessage: '请选择来访门户' }]},
+				 //  mobileNumber: {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',
 			}
 		},
-		onLoad: function() {
-		
+		onLoad: function(e) {
+			if(e.id){
+				this.id=e.id;
+				this.ptype="edit";
+				this.isdisabled=true;
+				this.getDetail()
+			}
+			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(){
+				// 自己的房屋
+				houseInfolistNoPage().then(res=>{
+					if(res.code==200){
+						this.fwlist= res.rows.map(v => {
+							return {
+								label: v.detailedAddress,
+								value: v.houseId,
+								location: v.location
+							}
+						})
+					}
+				})
+				// 车辆类型
+				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
+					}
+				})
+			},
+			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'){
+						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;
 				// var rs=['D:\\idcard.png']
@@ -160,6 +312,8 @@
 	page{background: #F3F3F0;}
 </style>
 <style lang="scss" scoped>
+.coa /deep/ .uni-date__x-input{text-align: right;color: #AAAAAA;}
+.check /deep/ .select-wrap{border: none;width: 100%;}
 .check /deep/ .uni-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;}

+ 35 - 7
user_ui/mine/pages/car/index.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="carbox">
 		<view class="flex1 cartop">
-			<box-list :datainfo="list" type="mycar"></box-list>
+			<box-list :datainfo="list" type="mycar" @getDetail="getDetail"></box-list>
 			<view class="cartips flexc mt16 mb16" @click="getChargeFn">
 				<view class="tit flex1">当前有车辆<text class="co025">充电中…</text></view>
 				<image :src="rimg"></image>
@@ -19,20 +19,29 @@
 	const baseUrl = config.baseUrl
 	import boxList from "@/mine/components/box/list.vue"
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {carList} 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:[{tit:'123',type:1},{tit:'123',type:2},],
+				list:[],
 				pageSize: 10,
 				pageNum: 1,
 				reachflag: true,
 				wtdt:'',
 			}
 		},
+		onUnload() {
+			uni.$off('refcarList')
+		},
 		onLoad: function() {
-		
+			uni.$on('refcarList',(res)=>{
+				this.getDataFn()
+			})
+			this.init()
+			this.getDataFn()
 		},
 		// 上拉触底加载更多触发事件
 		onReachBottom() {
@@ -43,9 +52,25 @@
 		},
 		methods:{
 			checkPermi, checkRole,
+			init(){
+				// 车型
+				getDictionaryFn('cartype').then(res=>{
+					if(res.code==200){
+						this.sfList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+			},
 			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")
 			},
@@ -54,8 +79,7 @@
 					pageSize:this.pageSize,
 					pageNum: this.pageNum,
 				}
-				params.noticeType=this.tabidx
-				getNoticeList(params).then(res=>{
+				carList(params).then(res=>{
 					if(res.code==200){
 						if (res.rows.length < this.pageSize) {
 							this.reachflag = false
@@ -70,10 +94,14 @@
 								this.wtdt = '到底了~';
 							}
 						}
+						var newArr=JSON.parse(JSON.stringify(res.rows))
+						newArr.forEach(ite=>{
+							ite.right=0;
+						})
 						if (this.pageNum == 1) {
-							this.list = res.rows;
+							this.list = newArr;
 						} else {
-							this.list = this.list.concat(res.rows)
+							this.list = this.list.concat(newArr)
 						}
 					}else{
 						this.$toast(res.msg)

+ 2 - 2
user_ui/mine/pages/house/addaddress.vue

@@ -64,7 +64,7 @@
 <script>
 	import config from '@/config'
 	const baseUrl = config.baseUrl
-	import { addressPermi, addressRole } from "@/utils/permission"; // 权限判断函数
+	import { checkPermi,checkRole } from "@/utils/permission"; // 权限判断函数
 	export default{
 		components:{},
 		data(){
@@ -84,7 +84,7 @@
 		
 		},
 		methods:{
-			addressPermi, addressRole,
+			checkPermi,checkRole,
 			getAddFn(){
 				// this.$tab.navigateTo("/mine/pages/house/addaddress")
 			},

+ 344 - 77
user_ui/mine/pages/house/addhouse.vue

@@ -6,39 +6,138 @@
 				<view>房屋信息</view>
 			</view>
 			<view class="chmain">
-				<uni-forms ref="form" :model="datainfo">
+				<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="房屋坐落" name="realName">
+				  <uni-forms-item label="房屋坐落" required name="location">
 					  <view class="flexc">
-					  	<uni-easyinput v-model="datainfo.realName" disabled :inputBorder='false' placeholder="自动识别" />
+					  	<uni-easyinput :disabled="isdisabled" v-model="datainfo.location" :inputBorder='false' placeholder="自动识别" />
 					  	<view class="rimg"></view>
 					  </view>
 				  </uni-forms-item>
-					<uni-forms-item label="房屋所属" name="phonenumber">
+					<uni-forms-item label="权利人姓名" name="ownerName">
 						<view class="flexc">
-							<uni-easyinput v-model="datainfo.phonenumber" disabled :inputBorder='false' placeholder="自动识别" />
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.ownerName" :inputBorder='false' placeholder="自动识别" />
 							<view class="rimg"></view>
 						</view>
 					</uni-forms-item>
-					<uni-forms-item label="建筑面积" name="phonenumber">
+					<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 v-model="datainfo.phonenumber" disabled :inputBorder='false' placeholder="自动识别" />
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.documentNumber" :inputBorder='false' placeholder="请输入相关的字第号" />
 							<view class="rimg"></view>
 						</view>
 					</uni-forms-item>
-					<uni-forms-item label="房型" name="realName">
+					<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="phonenumber">
+						<view class="flexc">
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入车位号" />
+							<view class="rimg"></view>
+						</view>
+					</uni-forms-item>
+					<!-- <uni-forms-item label="房型" name="realName">
 						<view class="flexjd">
-							<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+							<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='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+							<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>
@@ -46,29 +145,23 @@
 							</picker>
 							<view class="rimg"></view>
 						</view>
-					</uni-forms-item>
-					<uni-forms-item label="姓名" name="phonenumber">
-						<view class="flexc">
-							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入姓名" />
-							<view class="rimg"></view>
-						</view>
-					</uni-forms-item>
-					<uni-forms-item label="住户类型" name="realName">
-						<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+					</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">
+					</uni-forms-item> -->
+					<!-- <uni-forms-item label="是否户主"  name="phonenumber">
 						<view class="flexc">
-							<uni-easyinput v-model="datainfo.phonenumber" disabled :inputBorder='false' placeholder="自动识别" />
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.phonenumber" disabled :inputBorder='false' placeholder="自动识别" />
 							<view class="rimg"></view>
 						</view>
 					</uni-forms-item>
-					<uni-forms-item label="与户主关系" name="realName">
-						<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+					<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>
@@ -76,23 +169,17 @@
 						</picker>
 					</uni-forms-item>
 					<uni-forms-item label="居住人口" name="realName">
-						<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+						<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="realName">
-						<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
-							<view class="flexc">
-								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择有/无'}}</view>
-								<view class="rimg"><image :src="rimg"></image></view>
-							</view>
-						</picker>
-					</uni-forms-item>
+					</uni-forms-item> -->
+					
 				</uni-forms>
-				<view class="rhbtn mt30" @click="getNext">确定添加</view>
+				<view class="rhbtn mt30" @click="getEditFn" v-if="isdisabled">修改</view>
+				<view class="rhbtn mt30" @click="getSubmit" v-else>确定添加</view>
 			</view>
 		</view>
 		<loading></loading>
@@ -102,7 +189,19 @@
 <script>
 	import config from '@/config'
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
-	import {uploadIdentify} from '@/utils/common.js'
+	import {uploadIdentify,selectValueKey,geocodeAddress} from '@/utils/common.js'
+	import {getDictionaryFn} from "@/api/system/user.js"
+	import {houseInfoAdd,houseInfoPut,houseInfoDet} from "@/api/work/work.js"
+	var key='';
+	// #ifdef H5
+	key='8de52b560193f01932ad997dba3e76c0'
+	// #endif
+	// #ifdef APP-PLUS
+	key='ccbe52b1ec5f66295fa4609c90a819b7'
+	// #endif
+	// #ifdef MP-WEIXIN
+	key='ccbe52b1ec5f66295fa4609c90a819b7'
+	// #endif
 	export default{
 		components:{},
 		data(){
@@ -111,41 +210,206 @@
 				cmico:require('@/mine/static/house/cmico.png'),
 				baseUrl:config.baseUrl,
 				datainfo:{
-					realName:'',
-					idCard:'',
-					address:'',
-					expirationDate:'',
-					phonenumber:'',
-					front:'',
-					back:'',
+					 // "houseId":"",//房屋信息主键
+					 "ownerName":"",//权利人姓名
+					 "location":"",//房屋坐落位置
+					 "rightType":"",//权利类型,如所有权、使用权等
+					 "area":"",//房屋面积,单位为平方米
+					 "documentNumber":"",//房屋相关的字第号
+					 "propertyUnitNumber":"",//不动产单元号
+					 "coOwnership":"",//房屋的共有情况,如共有比例等
+					 "usageType":"",//房屋用途,如住宅、商业等
+					 "usagePeriod":"",//房屋使用期限
+					 "registrationDate":"",//房屋登记日期
+					 "coOwner":"",//共有人姓名,多个共有人可以用逗号分隔
+					 "detailedAddress":"",//房屋的详细门牌号
+					 "hasParkingSpace":"",//是否有车位,Y表示有,N表示无
+					 "communityName":"",//房屋所在小区名称
+					 "houseStatus":""//房屋状态:1-自住,2-出租,3-空闲,4-待售
 				},
-				syqxidx:'',
-				sexs: [{
-					text: '男',
-					value: 0
-				}, {
-					text: '女',
-					value: 1
-				}],
+				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:"",
 			}
 		},
-		onLoad: function() {
-		
+		onLoad: function(e) {
+			if(e.id){
+				this.id=e.id;
+				this.ptype="edit";
+				this.isdisabled=true;
+				this.getDetail()
+			}
+			this.init()
 		},
 		methods:{
 			checkPermi, checkRole,
+			getEditFn(){
+				this.isdisabled=false;
+			},
+			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;
+						
+					}
+				})
+			},
+			async getLocation(address) {
+			      if (!address) {
+			        uni.showToast({ title: '请输入地址', icon: 'none' });
+			        return;
+			      }
+			
+			      try {
+			        const { latitude, longitude } = await geocodeAddress(address, key);
+			        this.latitude = latitude;
+			        this.longitude = longitude;
+			      } catch (error) {
+			        uni.showToast({ title: '获取经纬度失败', icon: 'none' });
+			      }
+			},
+			getSubmit(){
+				this.$refs.form.validate().then(res => {
+					var params=JSON.parse(JSON.stringify(this.datainfo))
+					// if(!params.portalId){
+					// 	this.$toast("请选择来访门户")
+					// 	return
+					// }
+					// if(params.isCar=='Y'&&!params.plateNumber){
+					// 	this.$toast("请输入车牌号")
+					// 	return
+					// }
+					// if(!params.visitorTime){
+					// 	this.$toast("请选择来访时间")
+					// 	return
+					// }
+					// if(params.location){
+					// 	var pobj=this.getLocation(params.location)
+					// 	console.log(pobj)
+					// 	params.lgt=longitude;
+					// 	params.lat=latitude;
+
+					// }
+					if(this.ptype=='add'){
+						houseInfoAdd(params).then(res=>{
+							if(res.code==200){
+								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;
-				// 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,
@@ -161,19 +425,19 @@
 							let imglen = res.tempFilePaths.length;
 							var fuwufile = [];
 							uploadIdentify('/common/upload',img,0,0,0,imglen,fuwufile,function(rs){
-								var resurl=rs[0];
-								if(e=='front'){
-									that.datainfo.front=resurl.fileName;
-								}else{
-									that.datainfo.back=resurl.fileName;
-								}
-								if(rs&&rs.length>0){
-									var obj={
-										type:e,
-										url:resurl.urlOnline
-									}
-									that.getOcrIdCard(obj)
-								}
+								// var resurl=rs[0];
+								// if(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)
+								// }
 							})	
 						}
 					}
@@ -196,7 +460,7 @@
 						}
 					}
 				})
-			}
+			},
 		}
 	}
 </script>
@@ -204,6 +468,8 @@
 	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;}
@@ -212,6 +478,7 @@
 .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;

+ 148 - 44
user_ui/mine/pages/house/index.vue

@@ -25,41 +25,63 @@
 			<view class="txt">Welcome back home</view>
 			<image :src="housebg" class="houseimg"></image>
 		</view>
-		<view class="housebox" v-if="list.length">
-			<view class="hblist">
-				<view class="laber"><text>房屋坐落</text>:</view>
-				<view class="tit">幸福大街88号幸福小区12#1101室</view>
-				<image :src="adrs" class="adrs"></image>
-			</view>
-			<view class="flexc">
-				<view class="hblist w50">
-					<view class="laber"><text>房屋所属</text>:</view>
-					<view class="tit">袁玥</view>
-				</view>
-				<view class="hblist w50">
-					<view class="laber"><text>建筑面积</text>:</view>
-					<view class="tit">121.3m²</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">有</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.rightType}}</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>
-		</view>
-		
-		<view class="hbtns bga mb18" v-if="list.length">修改信息</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>	
@@ -68,7 +90,8 @@
 
 <script>
 	import config from '@/config'
-	const baseUrl = config.baseUrl
+	const baseUrl = config.baseUrl;
+	import {houseInfoList,houseInfoDel} from "@/api/work/work.js"
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
 	export default{
 		components:{},
@@ -77,21 +100,30 @@
 				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:[{tit:'123'}],
+				list:[],
 				pageSize: 10,
 				pageNum: 1,
 				reachflag: true,
 				wtdt:'',
+				delBtnWidth:66,//左滑默认宽度
 			}
 		},
+		onUnload() {
+			uni.$off('refHouseList')
+		},
 		onLoad: function() {
+			uni.$on('refHouseList',(res)=>{
+				this.getDataFn()
+			})
 			uni.getSystemInfo({
 				success: (e) => {
 					this.nvaHeight = Number(e.statusBarHeight)+44;
 				}
 			})
+			this.getDataFn()
 		},
 		onPageScroll(e) {
 			var scrollTop = Number(e.scrollTop);
@@ -106,27 +138,93 @@
 			getAddFn(){
 				this.$tab.navigateTo("/mine/pages/house/addhouse")
 			},
+			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(){
-				return
-				var params={
-					pageSize:this.pageSize,
-					pageNum: this.pageNum,
-				}
-				params.noticeType=this.tabidx
-				getNoticeList(params).then(res=>{
+				var params={}
+				houseInfoList(params).then(res=>{
 					if(res.code==200){
-						
+						var newArr=JSON.parse(JSON.stringify(res.rows))
+						newArr.forEach(ite=>{
+							ite.right=0;
+						})
+						this.list = JSON.parse(JSON.stringify(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>
@@ -145,7 +243,10 @@
 			image{width: 20rpx;height: 16rpx;margin-left: 10rpx;}
 		}
 	}
-	.housebox{width: 100%;background: #FFFFFF;border-radius: 20rpx;padding: 36rpx 24rpx 16rpx;box-sizing: border-box;margin-bottom: 100rpx;
+	.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;}
@@ -160,4 +261,7 @@
 		
 	}
 }
+.edit{font-weight: 500;font-size: 24rpx;color: #06C770;
+	image{width: 22rpx;height: 22rpx;margin-right: 4rpx;}
+}
 </style>

+ 8 - 0
user_ui/mine/pages/house/list.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

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


+ 8 - 8
user_ui/news/components/box/list.vue

@@ -4,13 +4,13 @@
 	<block v-if="datainfo.length>0">
 		<!-- 社区资讯 -->
 		<block v-if="type=='newssq'">
-			<view class="walists" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail">
+			<view class="walists" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail(ite.communityId)">
 				<view class="watop">
 					<view class="watit">
-						<view class="tit">物业服务费缴费公告<text class="cir"></text></view>
+						<view class="tit">{{ite.communityTitle}}<text class="cir"></text></view>
 					</view>
-					<view class="wacoma overtwo">尊敬的各位业主:为更好地提供优质小区环境,保障小区 公共区域设施设备正常的运行,现收取2024年度物业…</view>
-					<view class="wacomb">2024-11-18 08:16:54</view>
+					<view class="wacoma overtwo"><rich-text :nodes="ite.communityContent"></rich-text></view>
+					<view class="wacomb">{{ite.publishTime}}</view>
 				</view>
 				<view class="wabtn">
 					<view>查看详情</view>
@@ -40,12 +40,12 @@
 		</block>
 		<!-- 党建资讯 -->
 		<block v-if="type=='newsdj'">
-			<view class="newlists" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail" 
+			<view class="newlists" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail(ite.partyId)" 
 			>
-				<view class="tit">潜山:多举措建优非公党建工作指导员队伍</view>
-				<view class="txt overtwo">如何不断激发非公企业和社会组织党建工作新活力?潜山市委社 会工作部发挥考核的指挥棒作用,“三点发力”推动党建工作部…</view>
+				<view class="tit">{{ite.partyTitle}}</view>
+				<view class="txt overtwo"><rich-text :nodes="ite.partyContent"></rich-text></view>
 				<view class="stabox flexc">
-					<view class="time flex1">2024-11-18 08:16:54</view>
+					<view class="time flex1">{{ite.publishTime}}</view>
 					<view class="btns flexc">
 						<image :src="star" class="imga"></image>42
 						<!-- <image :src="stara" class="imga"></image>42 -->

+ 2 - 2
user_ui/news/pages/complaint/add.vue

@@ -54,7 +54,7 @@
 
 <script>
 	import config from '@/config.js'
-	import { addressPermi, addressRole } from "@/utils/permission"; // 权限判断函数
+	import { checkPermi,checkRole } from "@/utils/permission"; // 权限判断函数
 	import {uploadIdentify,uploadmore} from '@/utils/common.js'
 	import {suggestionAdd,suggestionlPut} from "@/api/work/news.js"
 	
@@ -87,7 +87,7 @@
 		
 		},
 		methods:{
-			addressPermi, addressRole,
+			checkPermi,checkRole,
 			getAddFn(){
 				// this.$tab.navigateTo("/mine/pages/house/addaddress")
 			},

+ 24 - 52
user_ui/news/pages/news/detail.vue

@@ -3,10 +3,10 @@
 		<!-- 详情 -->
 		<view class="ndbox mb12">
 			<view class="plr15">
-				<view class="tit">物业服务费缴费公告</view>
-				<view class="time mb12">2024-12-01 08:21</view>
+				<view class="tit">{{datainfo.communityTitle}}</view>
+				<view class="time mb12">{{datainfo.publishTime}}</view>
 				<view class="rich">
-					<rich-text :nodes="infoContent" style="word-break: break-all;"></rich-text>
+					<rich-text :nodes="communityContent" style="word-break: break-all;"></rich-text>
 				</view>
 			</view>
 			<view class="ndbfox flexc">
@@ -98,6 +98,7 @@
 	import config from '@/config'
 	const baseUrl = config.baseUrl
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {newsDet} from "@/api/work/manage.js"
 	export default{
 		components:{},
 		data(){
@@ -108,18 +109,17 @@
 				nicond:require('@/news/static/news/nicond.png'),
 				nicone:require('@/news/static/news/nicone.png'),
 				head:require('@/news/static/news/head.png'),
-				list:[],
-				pageSize: 10,
-				pageNum: 1,
-				reachflag: true,
-				wtdt:'',
-				showAll:true,
-				infoContent:'<span>hello uni-app x!</span><br/><span>uni-app x,终极跨平台方案</span>',
+				datainfo:{
+					
+				},
+				communityContent:'<span>hello uni-app x!</span><br/><span>uni-app x,终极跨平台方案</span>',
 				text:'',
+				id:"",
 			}
 		},
-		onLoad: function() {
-		
+		onLoad: function(e) {
+			this.id=e.id;
+			this.getDetailFn()
 		},
 		// 上拉触底加载更多触发事件
 		onReachBottom() {
@@ -130,9 +130,17 @@
 		},
 		methods:{
 			checkPermi, checkRole,
-			// getNextFn(){
-			// 	this.$tab.navigateTo("/work/pages/business/add")
-			// },
+			getDetailFn(){
+				newsDet(this.id).then(res=>{
+					if(res.code==200){
+						this.datainfo=res.data;
+						var data=JSON.parse(JSON.stringify(res.data))
+						if(data.communityContent){
+							this.communityContent=this.formatRichText(data.communityContent)
+						}
+					}
+				})
+			},
 			//解析富文本方法
 			formatRichText(html) {
 					let newContent = html.replace(/<img[^>]*>/gi, function(match, capture) {
@@ -147,45 +155,9 @@
 					});
 					newContent = newContent.replace(/<br[^>]*\/>/gi, '');
 					newContent = newContent.replace(/\<img src="/gi,
-						'<img style="max-width:100%;height:auto;display:block;margin:10rpx auto;" src="' +baseUrlimg);
+						'<img style="max-width:100%;height:auto;display:block;margin:10rpx auto;" src="' +baseUrl);
 					return newContent;
 			},
-			getDataFn(){
-				return
-				var params={
-					pageSize:this.pageSize,
-					pageNum: this.pageNum,
-				}
-				params.noticeType=this.tabidx
-				getNoticeList(params).then(res=>{
-					if(res.code==200){
-						if(res.data.infoContent){
-							this.infoContent=this.formatRichText(res.data.infoContent);
-						}
-						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>

+ 214 - 0
user_ui/news/pages/news/djdetail.vue

@@ -0,0 +1,214 @@
+<template>
+	<view class="ndetail ">
+		<!-- 详情 -->
+		<view class="ndbox mb12">
+			<view class="plr15">
+				<view class="tit">{{datainfo.partyTitle}}</view>
+				<view class="time mb12">{{datainfo.publishTime}}</view>
+				<view class="rich">
+					<rich-text :nodes="partyContent" style="word-break: break-all;"></rich-text>
+				</view>
+			</view>
+			<view class="ndbfox flexc">
+				<view class="flexcc ndbflist">
+					<image :src="nicona"></image>
+					<view>32</view>
+				</view>
+				<view class="flexcc ndbflist">
+					<image :src="niconb"></image>
+					<view>32</view>
+				</view>
+				<view class="flexcc ndbflist">
+					<image :src="niconc"></image>
+					<view>32</view>
+				</view>
+			</view>
+		</view>
+		<view class="ndbox mb12 plr15">
+			<view class="pltit">评论<text>(31)</text></view>
+			<!-- 评论列表 -->
+			<view class="pllist flex">
+				<image :src="head" class="head"></image>
+				<view class="flex1 overh">
+					<view class="flexat mb14 ">
+						<view class="plname flex1 over">床前明月光</view>
+						<view class="plrbtn flexc flex0">
+							<!-- <image :src="niconb" class="imga"></image> -->
+							<image :src="nicond"></image>
+							<view>点赞</view>
+						</view>
+						<view class="plrbtn flexc flex0">
+							<image :src="nicone" class="imgb"></image>
+							<view>回复</view>
+						</view>
+					</view>
+					<view class="infotxt mb15">支持!去看一下优惠政策!<view class="infotime">12-3</view></view>
+				</view>
+			</view>
+			<view class="pllist flex">
+				<image :src="head" class="head"></image>
+				<view class="flex1 overh">
+					<view class="flexat mb14 ">
+						<view class="plname flex1 over">疑是地上霜</view>
+						<view class="plrbtn flexc flex0">
+							<image :src="niconb" class="imga"></image>
+							<!-- <image :src="nicond"></image> -->
+							<view>点赞</view>
+						</view>
+						<view class="plrbtn flexc flex0">
+							<image :src="nicone" class="imgb"></image>
+							<view>回复</view>
+						</view>
+					</view>
+					<view class="infotxt mb15">提前缴一年的物业费,可以免一个月吗?<view class="infotime">12-3</view></view>
+					<!-- 二级回复 -->
+					<view class="pllist flex">
+						<image :src="head" class="head"></image>
+						<view class="flex1 overh">
+							<view class="flexat mb14 ">
+								<view class="plname flex1 over">幸福小区物业</view>
+								<view class="plrbtn flexc flex0">
+									<image :src="niconb" class="imga"></image>
+									<!-- <image :src="nicond"></image> -->
+									<view>点赞</view>
+								</view>
+								<view class="plrbtn flexc flex0">
+									<image :src="nicone" class="imgb"></image>
+									<view>回复</view>
+								</view>
+							</view>
+							<view class="infotxt mb15">尊敬的业主朋友,您的建议我司已收到,将在内 部讨论后于物业公告中告知结果,谢谢您的宝贵 建议!<view class="infotime">12-3</view></view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- 评论 -->
+		<view class="pjfbtn">
+			<view class="flexc pjfbox">
+				<uni-easyinput type="textarea" autoHeight v-model="text" :inputBorder='false' placeholder="发表我的评论…" />
+				<view class="btns">发送</view>
+			</view>
+		</view>
+	<loading></loading>	
+	</view>
+</template>
+
+<script>
+	import config from '@/config'
+	const baseUrl = config.baseUrl
+	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {partyNewsDet} from "@/api/work/manage.js"
+	export default{
+		components:{},
+		data(){
+			return{
+				nicona:require('@/news/static/news/nicona.png'),
+				niconb:require('@/news/static/news/niconb.png'),
+				niconc:require('@/news/static/news/niconc.png'),
+				nicond:require('@/news/static/news/nicond.png'),
+				nicone:require('@/news/static/news/nicone.png'),
+				head:require('@/news/static/news/head.png'),
+				datainfo:{
+					
+				},
+				partyContent:'',
+				text:'',
+				id:"",
+			}
+		},
+		onLoad: function(e) {
+			this.id=e.id;
+			this.getDetailFn()
+		},
+		// 上拉触底加载更多触发事件
+		onReachBottom() {
+			if (this.reachflag) {
+				this.pageNum++
+				this.getDataFn()
+			}
+		},
+		methods:{
+			checkPermi, checkRole,
+			getDetailFn(){
+				partyNewsDet(this.id).then(res=>{
+					if(res.code==200){
+						this.datainfo=res.data;
+						var data=JSON.parse(JSON.stringify(res.data))
+						if(data.partyContent){
+							this.partyContent=this.formatRichText(data.partyContent)
+						}
+					}
+				})
+			},
+			//解析富文本方法
+			formatRichText(html) {
+					let newContent = html.replace(/<img[^>]*>/gi, function(match, capture) {
+						match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '').replace(/style=""/gi, '');
+						match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
+						match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
+						return match;
+					});
+					newContent = newContent.replace(/style="[^"]+"/gi, function(match, capture) {
+						match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;');
+						return match;
+					});
+					newContent = newContent.replace(/<br[^>]*\/>/gi, '');
+					newContent = newContent.replace(/\<img src="/gi,
+						'<img style="max-width:100%;height:auto;display:block;margin:10rpx auto;" src="' +baseUrl);
+					return newContent;
+			},
+		}
+	}
+</script>
+<style>
+	page{background: #F3F3F0;}
+</style>
+<style lang="scss" scoped>
+.ndetail{
+	min-height: 100vh;padding: 20rpx 18rpx 100rpx;
+	.ndbox{background: #FFFFFF;border-radius: 20rpx;padding-top: 30rpx;
+		.tit{font-weight: bold;font-size: 32rpx;color: #272727;margin-bottom: 14rpx;text-align: center;padding-top: 4rpx;}
+		.time{font-weight: 500;font-size: 24rpx;color: #AAAAAA;text-align: center;}
+		.rich{border-top: 2rpx solid #E5E5E5;padding: 28rpx 0;}	
+		.ndbfox{
+			border-top: 2rpx solid #E5E5E5;
+			.ndbflist{width: 33.3%;min-height: 78rpx;padding: 16rpx 0;box-sizing: border-box;
+				image{width: 26rpx;height: 26rpx;margin-right: 26rpx;}
+				view{font-weight: 500;font-size: 26rpx;color: #666666;}
+			}
+		}
+	}
+}
+.pltit{font-weight: bold;font-size: 30rpx;color: #272727;
+	text{margin-left: 24rpx;font-size: 24rpx;color: #666666;}
+}
+.pllist{padding-top: 20rpx;margin-bottom: 16rpx;border-bottom: 2rpx solid #DADADA;
+	.head{width: 40rpx;height: 40rpx;margin-right: 18rpx;flex: 0 0 auto;}
+	.plname{font-weight: bold;font-size: 30rpx;color: #161616;}
+	.plrbtn{margin-left: 36rpx;
+		image{width: 26rpx;height: 24rpx;margin-right: 16rpx;
+			&.imga{width: 26rpx;height: 26rpx;}
+			&.imgb{width: 26rpx;height: 22rpx;}
+		}
+		view{font-weight: bold;font-size: 24rpx;color: #314081;}
+	}
+	.infotxt{font-weight: 500;font-size: 26rpx;color: #161616;line-height: 40rpx;
+		&:before {content: "";float: right;width: 0;height: calc(100% - 16px);background: red;}
+		.infotime{font-weight: 500;font-size: 24rpx;color: #666666; float: right;clear: both;}	
+	}
+	.pllist{
+		padding-top: 0;border-bottom: none;margin-bottom: 0;
+	}
+}
+.pjfbtn{background: #FFFFFF;position: fixed;bottom: 0;left: 0;right: 0;padding:20rpx 48rpx;box-shadow: 0px 0px 18rpx 0px rgba(159,159,159,0.47);
+	.pjfbox{background: #E6E6E6;border-radius: 10rpx;
+		.btns{nt-weight: bold;padding: 0 34rpx;height: 60rpx;line-height: 60rpx;flex: 0 0 auto;
+		font-size: 26rpx;
+	}
+	
+color: #314081;}
+}
+.pjfbtn /deep/ .uni-easyinput{flex: 1;font-size: 26rpx;color: #222327;}
+.pjfbtn /deep/ .uni-easyinput__content-textarea{min-height: 40rpx;font-size: 26rpx;margin: 0;background: #E6E6E6;box-sizing: border-box;padding: 10rpx 0 10rpx 36rpx;border-radius:10rpx 0 0 10rpx;}
+</style>

+ 2 - 2
user_ui/news/pages/news/newsadd.vue

@@ -4,7 +4,7 @@
 			<!-- <view class="cbox">
 				<view class="chmain">
 					<uni-forms-item label="文章类型" name="phonenumber">
-						<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+						<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>
@@ -24,7 +24,7 @@
 					<!-- <uni-forms-item label="文章类型" name="phonenumber">
 						<view class="flexc">
 							
-							<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+							<picker range-key='dictLabel' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
 								<view class="rimg"><image :src="rimg"></image></view>
 							</picker>
 						</view>

+ 71 - 21
user_ui/news/pages/news/newsdj.vue

@@ -1,16 +1,13 @@
 <template>
 	<view class="car">
 		<view class="cartop">
-			<!-- <view class="toptit">
-				<image :src="djtop"></image>本社区党员共<text>367</text>人
-			</view> -->
 			<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="tabt" :class="tabval==ite.dictValue?'act':''" v-for="(ite,idx) in wzlxList" :key="idx" @click="getTabFn(ite.dictValue)">{{ite.dictLabel}}</view>
 			</view>
 		</view>
 		<!-- 列表 -->
 		<view class="carlists">
-			<box-list :datainfo="list"  :wtdt="wtdt" type='newsdj' @getDetail="getDetail"></box-list>
+			<box-list :datainfo="list" :wzlxList="wzlxList" :wtdt="wtdt" type='newsdj' @getDetail="getDetail" @getDelFn="getDelFn"></box-list>
 		</view>
 		<loading></loading>
 	</view>
@@ -18,26 +15,36 @@
 
 <script>
 	import config from '@/config'
-	const baseUrl = config.baseUrl
+	// const baseUrl = config.baseUrl,
 	import boxList from "@/news/components/box/list.vue"
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {getDictionaryFn} from "@/api/system/user.js"
+	import {partyNewsList,partyNewsDel} from "@/api/work/manage.js"
 	export default{
 		components:{boxList},
 		data(){
 			return{
 				cxrq:"",
 				text:'',
-				list:[{tit:'皖A IC520',type:1,right:0},{tit:'晋E KD783',type:2,right:0},],
+				list:[],
 				pageSize: 10,
 				pageNum: 1,
 				reachflag: true,
 				wtdt:'',
-				tabval:'0',
-				tablist:[{tit:'党建活动',val:0},{tit:'党建学习',val:1},{tit:'党建知识',val:2}]
+				tabval:'',
+				wzlxList:[],
+				baseUrl:config.baseUrl,
 			}
 		},
+		onUnload() {
+			uni.$off('partyNewsList')
+		},
 		onLoad: function() {
-		
+			uni.$on('partyNewsList',(res)=>{
+				this.getrefreshData()
+			})
+			this.init()
+			
 		},
 		// 上拉触底加载更多触发事件
 		onReachBottom() {
@@ -48,11 +55,25 @@
 		},
 		methods:{
 			checkPermi, checkRole,
-			getAddFn(){
-				this.$tab.navigateTo("/manage/pages/community/newsadddj")
+			init(){
+				// 文章类型
+				getDictionaryFn('article_type').then(res=>{
+					if(res.code==200){
+						if(res.data){
+							this.tabval=res.data[0].dictValue;
+							this.wzlxList = res.data.map(v => {
+								return {
+									dictLabel: v.dictLabel,
+									dictValue: v.dictValue
+								}
+							})
+							this.getDataFn()
+						}
+					}
+				})
 			},
-			getTabFn(val){
-				this.tabval=val
+			getDetail(id){
+				this.$tab.navigateTo("/news/pages/news/djdetail?id="+id)
 			},
 			getrefreshData(){
 				this.pageNum=1;
@@ -60,17 +81,44 @@
 				this.reachflag=true;
 				this.getDataFn()
 			},
-			bindDateChangea(e){
-				var val=e.detail.value;
-				this.cxrq=val;
+			getTabFn(val){
+				this.tabval=val;
+				this.getrefreshData()
+			},
+			getDelFn(data){
+				var that=this;
+				partyNewsDel(data).then(res=>{
+					if(res.code==200){
+						this.$toast("删除成功");
+						setTimeout(function(){
+							that.getrefreshData()
+						},1500)
+					}
+				})
+			},
+			formatRichText(html) {
+					let newContent = html.replace(/<img[^>]*>/gi, function(match, capture) {
+						match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '').replace(/style=""/gi, '');
+						match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
+						match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
+						return match;
+					});
+					newContent = newContent.replace(/style="[^"]+"/gi, function(match, capture) {
+						match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;');
+						return match;
+					});
+					newContent = newContent.replace(/<br[^>]*\/>/gi, '');
+					newContent = newContent.replace(/\<img src="/gi,
+						'<img style="max-width:100%;height:auto;display:block;margin:10rpx auto;" src="' +this.baseUrl);
+					return newContent;
 			},
 			getDataFn(){
 				var params={
 					pageSize:this.pageSize,
 					pageNum: this.pageNum,
+					partyType:this.tabval
 				}
-				params.noticeType=this.tabidx
-				getNoticeList(params).then(res=>{
+				partyNewsList(params).then(res=>{
 					if(res.code==200){
 						if (res.rows.length < this.pageSize) {
 							this.reachflag = false
@@ -87,9 +135,11 @@
 						}
 						var newArr=JSON.parse(JSON.stringify(res.rows))
 						newArr.forEach(ite=>{
+							if(ite.partyContent){
+								ite.partyContent=this.formatRichText(ite.partyContent)
+							}
 							ite.right=0;
 						})
-						// console.log(newArr,555)
 						if (this.pageNum == 1) {
 							this.list = newArr;
 						} else {
@@ -108,7 +158,7 @@
 	page{background: #F3F3F0;}
 </style>
 <style lang="scss" scoped>
-.car{padding: 134rpx 0 10rpx;}
+.car{padding: 120rpx 0 10rpx;}
 .cartop{position: fixed;left: 0;right: 0;top: 0;background-color: #ffffff;z-index: 2;
 	.toptit{display: flex;justify-content: center;font-weight: 500;font-size: 26rpx;color: #8592AA;height: 70rpx;align-items: center;
 background: #E4EDFF;

+ 57 - 12
user_ui/news/pages/news/newssq.vue

@@ -2,7 +2,7 @@
 	<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="tabt" :class="tabval==ite.dictValue?'act':''" v-for="(ite,idx) in wzlxList" :key="idx" @click="getTabFn(ite.dictValue)">{{ite.dictLabel}}</view>
 				<view class="numbox">
 					未读互动<text>27</text>
 				</view>
@@ -10,7 +10,7 @@
 		</view>
 		<!-- 列表 -->
 		<view class="carlists">
-			<box-list :datainfo="list"  :wtdt="wtdt" type='newssq' @getDetail="getDetail"></box-list>
+			<box-list :datainfo="list" :wzlxList="wzlxList" :topval="tabval" :wtdt="wtdt" type='newssq' @getDetail="getDetail"></box-list>
 		</view>
 		<loading></loading>
 	</view>
@@ -21,23 +21,31 @@
 	const baseUrl = config.baseUrl
 	import boxList from "@/news/components/box/list.vue"
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {getDictionaryFn} from "@/api/system/user.js"
+	import {newsList,newsDel} from "@/api/work/manage.js"
 	export default{
 		components:{boxList},
 		data(){
 			return{
 				cxrq:"",
 				text:'',
-				list:[{tit:'皖A IC520',type:1,right:0},{tit:'晋E KD783',type:2,right:0},],
+				list:[],
 				pageSize: 10,
 				pageNum: 1,
 				reachflag: true,
 				wtdt:'',
-				tabval:'0',
-				tablist:[{tit:'公告',val:0},{tit:'通知',val:1},{tit:'资讯',val:2}]
+				tabval:'',
+				wzlxList:[],
 			}
 		},
+		onUnload() {
+			uni.$off('newsList')
+		},
 		onLoad: function() {
-		
+			uni.$on('newsList',(res)=>{
+				this.getrefreshData()
+			})
+			this.init()
 		},
 		// 上拉触底加载更多触发事件
 		onReachBottom() {
@@ -48,8 +56,26 @@
 		},
 		methods:{
 			checkPermi, checkRole,
-			getDetail(){
-				this.$tab.navigateTo("/news/pages/news/detail")
+			init(){
+				// 社区资讯类型
+				getDictionaryFn('community_typ').then(res=>{
+					if(res.code==200){
+						if(res.data){
+							this.tabval=res.data[0].dictValue;
+							this.wzlxList = res.data.map(v => {
+								return {
+									dictLabel: v.dictLabel,
+									dictValue: v.dictValue
+								}
+							})
+							this.getDataFn()
+						}
+					}
+				})
+			},
+			
+			getDetail(id){
+				this.$tab.navigateTo("/news/pages/news/detail?id="+id)
 			},
 			getrefreshData(){
 				this.pageNum=1;
@@ -58,19 +84,36 @@
 				this.getDataFn()
 			},
 			getTabFn(val){
-				this.tabval=val
+				this.tabval=val;
+				this.getrefreshData()
 			},
 			bindDateChangea(e){
 				var val=e.detail.value;
 				this.cxrq=val;
 			},
+			formatRichText(html) {
+					let newContent = html.replace(/<img[^>]*>/gi, function(match, capture) {
+						match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '').replace(/style=""/gi, '');
+						match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
+						match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
+						return match;
+					});
+					newContent = newContent.replace(/style="[^"]+"/gi, function(match, capture) {
+						match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;');
+						return match;
+					});
+					newContent = newContent.replace(/<br[^>]*\/>/gi, '');
+					newContent = newContent.replace(/\<img src="/gi,
+						'<img style="max-width:100%;height:auto;display:block;margin:10rpx auto;" src="' +this.baseUrl);
+					return newContent;
+			},
 			getDataFn(){
 				var params={
 					pageSize:this.pageSize,
 					pageNum: this.pageNum,
+					communityType:this.tabval
 				}
-				params.noticeType=this.tabidx
-				getNoticeList(params).then(res=>{
+				newsList(params).then(res=>{
 					if(res.code==200){
 						if (res.rows.length < this.pageSize) {
 							this.reachflag = false
@@ -87,9 +130,11 @@
 						}
 						var newArr=JSON.parse(JSON.stringify(res.rows))
 						newArr.forEach(ite=>{
+							if(ite.communityContent){
+								ite.communityContent=this.formatRichText(ite.communityContent)
+							}
 							ite.right=0;
 						})
-						// console.log(newArr,555)
 						if (this.pageNum == 1) {
 							this.list = newArr;
 						} else {

+ 7 - 0
user_ui/pages.json

@@ -233,6 +233,13 @@
 				"h5":{"titleNView":false}
 			  }
 			},
+			{
+			  "path": "pages/news/djdetail",
+			  "style": {
+			    "navigationBarTitleText": "党建资讯",
+				"h5":{"titleNView":false}
+			  }
+			},
 			{
 			  "path": "pages/complaint/index",
 			  "style": {

+ 4 - 4
user_ui/static/index.html

@@ -11,11 +11,11 @@
 			document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
 		</script>
 		<link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />
-		<script src="https://webapi.amap.com/maps?v=1.4.15&key=fba818d626f91cf5a13cd61943a7667e&plugin=AMap.Autocomplete,AMap.Geocoder"></script>
+		<script src="https://webapi.amap.com/maps?v=1.4.15&key=8de52b560193f01932ad997dba3e76c0&plugin=AMap.Autocomplete,AMap.Geocoder,AMap.getGeo"></script>
 		<script type="text/javascript">
-		        window._AMapSecurityConfig = {
-		            securityJsCode:'b06df55c66884ce2c9a3f3281c2c5ca9',
-		        }
+		        // window._AMapSecurityConfig = {
+		        //     securityJsCode:'b06df55c66884ce2c9a3f3281c2c5ca9',
+		        // }
 		</script>
 	</head>
 	<body>

+ 4 - 0
user_ui/static/style.css

@@ -33,6 +33,10 @@ image{display: block !important;}
 font-weight: bold;font-size: 26rpx;color: #FFFFFF;background: #0256FD;border-radius: 20rpx;}
 .rfbtn{height: 100rpx;display: flex;align-items: center;justify-content: center;font-weight: bold;position: fixed;left: 0;right: 0;bottom: 0;z-index: 4;font-size: 26rpx;color: #FFFFFF;background: #0156FE;}
 .linetit{width: 14rpx;height: 48rpx;background: #0256FD;border-radius:0 12rpx 12rpx 0;margin-right: 18rpx;}
+.spdel{width: 164rpx;background: #EA2D2D;font-weight: bold;font-size: 26rpx;color: #FFFFFF;display: flex;align-items: center;justify-content: center;position: absolute;right: -146rpx;top: 0;bottom: 0;padding-left: 14rpx;}
+.delleft{background-color: #ffffff;border-radius: 20rpx;position: relative;z-index: 1;}
+.pr{position: relative;}
+
 
 .tdu{text-decoration: underline;}
 .lh18{line-height: 36rpx;}

+ 44 - 0
user_ui/utils/common.js

@@ -91,6 +91,50 @@ export function selectValueKey(datas, value) {
 // 	})
 // 	return actions.join('')
 // }
+
+export function geocodeAddress(address, key) {
+  return new Promise((resolve, reject) => {
+    // H5 和 App 平台使用高德地图 JavaScript API
+    if (uni.getSystemInfoSync().platform === 'h5' || uni.getSystemInfoSync().platform === 'android') {
+      const url = `https://restapi.amap.com/v3/geocode/geo?address=${encodeURIComponent(address)}&key=${key}`;
+      uni.request({
+        url,
+        success: (res) => {
+          if (res.data.status === '1' && res.data.geocodes.length > 0) {
+            const location = res.data.geocodes[0].location; // 返回格式:经度,纬度
+            const [longitude, latitude] = location.split(',');
+            resolve({ latitude: parseFloat(latitude), longitude: parseFloat(longitude) });
+          } else {
+            reject(new Error('未找到地址对应的经纬度'));
+          }
+        },
+        fail: (err) => {
+          reject(err);
+        },
+      });
+    }
+    // 小程序平台使用高德地图小程序 SDK
+    else if (uni.getSystemInfoSync().platform === 'mp-weixin') {
+      wx.request({
+        url: `https://restapi.amap.com/v3/geocode/geo?address=${encodeURIComponent(address)}&key=${key}`,
+        success: (res) => {
+          if (res.data.status === '1' && res.data.geocodes.length > 0) {
+            const location = res.data.geocodes[0].location; // 返回格式:经度,纬度
+            const [longitude, latitude] = location.split(',');
+            resolve({ latitude: parseFloat(latitude), longitude: parseFloat(longitude) });
+          } else {
+            reject(new Error('未找到地址对应的经纬度'));
+          }
+        },
+        fail: (err) => {
+          reject(err);
+        },
+      });
+    } else {
+      reject(new Error('不支持的平台'));
+    }
+  });
+}
 /**
 * 参数处理
 * @param params 参数

+ 117 - 31
user_ui/work/components/box/list.vue

@@ -4,43 +4,54 @@
 	<block v-if="datainfo.length>0">
 		<!-- 报修管理 -->
 		<block v-if="type=='warranty'">
-			<view class="walists" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail">
-				<view class="watop ">
-					<view class="watit">
-						<view class="tit">一号楼3单元12楼楼梯间灯不亮</view>
-						<view class="txt co01" v-if="ite.type==1">待分派</view>
-						<view class="txt coa" v-if="ite.type==3">已完成</view>
-						<view class="txt co28" v-if="ite.type==2">处理中</view>
+			<view class="walists" v-for="(ite,idx) in datainfo" :key="idx" @click="getPut(ite.repairId)"
+				:data-idx="idx"
+				@touchstart="drawStart" @touchmove="drawMove" @touchend="drawEnd" :style="'right:'+ite.right+'px'"
+			>
+				<view class="delleft">
+					<view class="watop ">
+						<view class="watit">
+							<view class="tit">{{ite.repairTitle}}</view>
+							<view class="txt co01":class="{'co01':ite.repairStatus=='1','coa':ite.repairStatus=='3','co28':ite.repairStatus=='3'}">{{kaType(ite.repairStatus,bxztList)}}</view>
+							<!-- <view class="txt co01" v-if="ite.type==1">待分派</view>
+							<view class="txt coa" v-if="ite.type==3">已完成</view>
+							<view class="txt co28" v-if="ite.type==2">处理中</view> -->
+						</view>
+						<view class="walist"><view class="tit">小区名称</view>:幸福小区</view>
+						<view class="walist"><view class="tit">报修门户</view>:{{ite.houseAddress}}</view>
+						<view class="walist"><view class="tit">报修时间</view>:{{ite.repairTime}}</view>
+						<view class="walist" v-if="ite.type==3"><view class="tit" >完成时间</view>:{{ite.completionTime}}</view>
+					</view>
+					<view class="wabtn" @click.stop="getDetail(ite.repairId)">
+						<view>查看详情</view>
+						<image :src="rimg"></image>
 					</view>
-					<view class="walist"><view class="tit">小区名称</view>:幸福小区</view>
-					<view class="walist"><view class="tit">报修门户</view>:3号楼1单元406</view>
-					<view class="walist"><view class="tit">报修时间</view>:2024-11-14 17:16:31</view>
-					<view class="walist" v-if="ite.type==3"><view class="tit" >完成时间</view>:2024-11-14 18:16:31</view>
-				</view>
-				<view class="wabtn">
-					<view>查看详情</view>
-					<image :src="rimg"></image>
 				</view>
+				<view class="spdel" v-if="ite.right>0&&checkPermi(['wuYe:repair:remove'])" @click.stop="getDelFn(ite.repairId)">删除</view>
 			</view>
 		</block>
 		<!-- 访客 -->
 		<block v-if="type=='visitor'">
-			<view class="vislist" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail">
-				<view class="vistop flexc mb12">
-					<view class="tit flex0">王女士</view>
-					<view class="btns flex0">驾车</view>
-					<view class="flex1"></view>
-					<view class="txt flex0 coa">已来访</view>
-					<view class="txt flex0 co01">待来访</view>
-				</view>
-				<view class="vlist flexcw">
-					<view>来访人数:1人</view>
-					<view>来访事由:亲友</view>
-					<view>车牌号码:皖A B8888</view>
-					<view >手机号码:18705665588</view>
-					<view>来访时间:2024-11-20 10:00</view>
+			<view class="pr mb12" v-for="(ite,idx) in datainfo" :key="idx" @click="getDetail(ite.reservRecordId)" :data-idx="idx"
+					@touchstart="drawStart" @touchmove="drawMove" @touchend="drawEnd" :style="'right:'+ite.right+'px'">
+				<view class="vislist pr" style="z-index: 1;margin-bottom: 0;">
+					<view class="vistop flexc mb12">
+						<view class="tit flex0">{{ite.name}}</view>
+						<view class="btns flex0" v-if="ite.isCar=='Y'">驾车</view>
+						<view class="flex1"></view>
+						<view class="txt flex0"  :class="{'co01':ite.status==1,'coa':ite.status==2,'cof4':ite.status==3,}">{{kaType(ite.status,fkztList)}}</view>
+					</view>
+					<view class="vlist flexcw">
+						<view>来访人数:{{ite.num}}人</view>
+						<view>来访事由:{{ite.reason}}</view>
+						<view>车牌号码:{{ite.plateNumber}}</view>
+						<view>手机号码:{{ite.mobileNumber}}</view>
+						<view>来访时间:{{ite.visitorTime}}</view>
+					</view>
 				</view>
+				<view class="spdel" v-if="ite.right>0" @click.stop="getDelFn(ite.reservRecordId)">删除</view>
 			</view>
+			
 		</block>
 		<view class="shax" v-if="wtdt">{{wtdt}}</view>
 	</block>
@@ -56,6 +67,8 @@
 
 <script>
 	import config from '@/config'
+	import {selectDictValue} from "@/utils/common.js"
+	import {checkPermi,checkRole} from "@/utils/permission"; // 权限判断函数
 	export default{
 		props:{
 			datainfo: {
@@ -76,23 +89,56 @@
 					return 0
 				}
 			},
-			
+			bxztList:{
+				type:Array,
+				default () {
+					return []
+				}
+			},
+			fkztList:{
+				type:Array,
+				default () {
+					return []
+				}
+			},
 		},
 		data(){
 			return{
 				noiconpimg:require("@/static/images/nodata.png"),
 				rimg:require('@/static/images/rimg.png'),
 				baseUrl:config.baseUrl,
-				
+				delBtnWidth:66,//左滑默认宽度
 			}
 		},
 		mounted() {
 			
 		},
 		methods:{
+			checkPermi,checkRole,
+			kaType(data, list) {
+				return selectDictValue(list, data);
+			},
 			getDetail(e){
 				this.$emit('getDetail',e)
 			},
+			getPut(e){
+				this.$emit('getPut',e)
+			},
+			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) {
+						}
+					}
+				});
+			},
 			getPreview(idx,arr) {
 				var newArr=[];
 				arr.forEach(ite=>{
@@ -106,6 +152,46 @@
 					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>

+ 2 - 2
user_ui/work/components/popup/pay.vue

@@ -25,7 +25,7 @@
 							<view @click="_calcValue('plus')">+</view>
 						</view>
 					</view>
-					<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+					<picker range-key='dictLabel' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
 						<view class="buylist flexc">
 							<view class="tit">优惠券</view>
 							<view class="flex1 txr f12" :class="iszc?'co025':'coa'">{{iszc?'家政服务满200减50':'选择上门时间'}}</view>
@@ -33,7 +33,7 @@
 						</view>
 					</picker>
 					
-					<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+					<picker range-key='dictLabel' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
 						<view class="buylist flexc">
 							<view class="tit">预约时间</view>
 							<view class="flex1 txr f12" :class="iszc?'co27':'coa'">{{iszc?'是':'选择上门时间'}}</view>

+ 108 - 0
user_ui/work/components/w-select/readme.md

@@ -0,0 +1,108 @@
+#### props
+
+| 名称         | 类型    | 默认值   | 说明                                                   |
+| ------------ | ------- | -------- | ------------------------------------------------------ |
+| width        | string  | '200px'  | 选择框宽度                                             |
+| height       | string  | '30px'   | 选择框高度                                             |
+| bgColor      | string  | '#fff'   | 选择框背景颜色                                         |
+| defaultValue | string  | '请选择' | 默认显示的名称                                         |
+| valueName    | string  | 'label'  | 显示的内容字段名                                       |
+| keyName      | string  | 'value'  | 绑定的内容字段名                                       |
+| list         | array   | []       | 展示的内容列表                                         |
+| showClose    | boolean | true     | 是否显示删除按钮                                       |
+| multiple     | boolean | false    | 是否开启多选                                           |
+| filterable   | boolean | false    | 是否开启搜索功能,开启后直接输入值不选择也可以保存内容 |
+
+该组件默认下拉选择器是从底部弹出,当检测到底部高度不足时则会在上面弹出
+
+#### events
+
+| 事件名 | 说明                                         |
+| ------ | -------------------------------------------- |
+| change | 选择的内容改变时触发,返回的参数为列表的item |
+
+#### 基本使用
+
+绑定的值通过`v-model`绑定,如下面的`chooseValue`,需要获取item的值可以监听`@change`事件
+
+```vue
+<template>
+  <view class="login">
+    <w-select 
+      style="margin-left: 20rpx;" 
+      v-model='chooseValue' 
+      :list='list'
+      valueName='content' 
+      keyName="id"
+      @change='change'
+    >
+    </w-select>
+  </view>
+</template>
+<script>
+  export default {
+    data() {
+      return {
+        chooseValue: "",
+        list: [{
+          id: 1,
+          content: '张三'
+        }, {
+          id: 2,
+          content: '李四'
+        }, {
+          id: 3,
+          content: '王五'
+        }],
+      };
+    },
+    methods: {
+      change(e) {
+        console.log('chooseValue', this.chooseValue)
+      }
+    },
+  }
+</script>
+```
+
+#### 多选
+
+多选开启`multiple`属性,双向绑定的值必须为数组类型,在change事件中根据自己需求进行处理。
+
+```vue
+<template>
+    <w-select 
+      v-model='chooseValue' 
+      :list='list'
+      multiple
+      valueName='content' 
+      keyName="id"
+      @change='change'
+    >
+    </w-select>
+</template>
+<script>
+  export default {
+    data() {
+      return {
+        chooseValue: [],
+        list: [{
+          id: 1,
+          content: '张三'
+        }, {
+          id: 2,
+          content: '李四'
+        }, {
+          id: 3,
+          content: '王五'
+        }],
+      };
+    },
+    methods: {
+      change(e) {
+        console.log('chooseValue', this.chooseValue)
+      }
+    },
+  }
+</script>
+```

+ 575 - 0
user_ui/work/components/w-select/w-select.vue

@@ -0,0 +1,575 @@
+<template>
+	<view
+	  class="w-select"
+	  id="wSelect"
+	  :style="{
+		'--select-wrap-width': width,
+		'--select-wrap-height': height,
+		'--select-bg-color': bgColor
+	  }"
+	>
+	  <view :class="isShow ? 'select-wrap-active' : ''" class="select-wrap" @click="changeShow">
+		<view v-if="multiple" class="select-content">
+		  <view class="select-content-item-default" v-if="multiSelectList.length === 0 && !filterable">
+			{{ defaultValue }}
+		  </view>
+		  <view class="select-content-item" v-if="multiSelectList.length > 0">
+			{{ multiSelectList[0][valueName] }}
+		  </view>
+		  <view class="select-content-item" v-if="multiSelectList.length > 1">
+			{{ multiLength }}
+		  </view>
+		</view>
+		<input
+		  v-if="!multiple || filterable"
+		  type="text"
+		  @input="inputChange"
+		  @blur="blurChange"
+		  :placeholder="multiple ? multiSelectList.length === 0 ? defaultValue : '' : defaultValue"
+		  :disabled="!filterable"
+		  :style="!filterable ? 'pointer-events: none' : ''"
+		  :value="inputData"
+		>
+		<!-- #ifdef VUE2 -->
+		<view
+		  @click.stop="refreshValue"
+		  class="close-icon"
+		  v-if="showClose && (multiple ? value.length > 0 : value)"
+		>
+		  <image :src="refreshUrl" mode="" />
+		</view>
+		<view
+		  v-if="value.length <= 0 || !showClose"
+		  :class="isShow ? 'w-select-arrow-up' : ''"
+		  class="w-select-arrow "
+		/>
+		<!-- #endif -->
+		<!-- #ifdef VUE3 -->
+		<view
+		  @click.stop="refreshValue"
+		  class="close-icon"
+		  v-if="showClose && (multiple ? modelValue.length > 0 : modelValue)"
+		>
+		  <image :src="refreshUrl" mode="" />
+		</view>
+		<view
+		  v-if="modelValue.length <= 0 || !showClose"
+		  :class="isShow ? 'w-select-arrow-up' : ''"
+		  class="w-select-arrow "
+		/>
+		<!-- #endif -->
+  
+		<scroll-view
+		  scroll-y
+		  v-show="optionsShow"
+		  :class="[
+			isShow
+			  ? showPosition === 'bottom'
+				? 'animation-bottom-in'
+				: 'animation-top-in'
+			  : showPosition === 'bottom'
+				? 'animation-bottom-out'
+				: 'animation-top-out',
+			showPosition === 'bottom'
+			  ? 'position-bottom'
+			  : 'position-top'
+		  ]"
+		  class="select-options"
+		>
+		  <!-- #ifdef VUE2 -->
+		  <view
+			@click.stop="handleClickItem(item)"
+			:class="
+			  multiple &&
+				multiSelectList.find(
+				  res => res[keyName] === item[keyName]
+				)
+				? 'item-active'
+				: value == item[keyName]
+				  ? 'item-active'
+				  : ''
+			"
+			v-for="item in filterList"
+			:key="item[keyName]"
+			class="select-option-item"
+		  >
+			{{ item[valueName] }}
+		  </view>
+		  <!-- #endif -->
+		  <!-- #ifdef VUE3 -->
+		  <view
+			@click.stop="handleClickItem(item)"
+			:class="
+			  multiple &&
+				multiSelectList.find(
+				  res => res[keyName] === item[keyName]
+				)
+				? 'item-active'
+				: modelValue == item[keyName]
+				  ? 'item-active'
+				  : ''
+			"
+			v-for="item in filterList"
+			:key="item[keyName]"
+			class="select-option-item"
+		  >
+			{{ item[valueName] }}
+		  </view>
+		  <!-- #endif -->
+  
+		  <view class="options-no-data" v-if="filterList.length < 1">
+			无匹配数据~
+		  </view>
+		</scroll-view>
+	  </view>
+	  <view v-if="isShow" @click="closeContentSelect" class="contentMask" />
+	</view>
+  </template>
+  
+  <script>
+  export default {
+	props: {
+	  width: {
+		type: String,
+		default: '200px'
+	  },
+	  height: {
+		type: String,
+		default: '30px'
+	  },
+	  bgColor: {
+		type: String,
+		default: '#fff'
+	  },
+	  // 是否多选
+	  multiple: {
+		type: Boolean,
+		default: false
+	  },
+	  // 是否可搜索
+	  filterable: {
+		type: Boolean,
+		default: false
+	  },
+	  // 是否显示关闭按钮
+	  showClose: {
+		type: Boolean,
+		default: false
+	  },
+	  // 渲染列表
+	  list: {
+		type: Array,
+		default: () => []
+	  },
+	  // #ifdef VUE3
+	  // 双向绑定的值
+	  modelValue: {
+		type: [Array, String, Number],
+		default: ''
+	  },
+	  // #endif
+	  // #ifdef VUE2
+	  // 双向绑定的值
+	  value: {
+		type: [Array, String, Number],
+		default: ''
+	  },
+	  // #endif
+	  // 默认显示的内容
+	  defaultValue: {
+		type: String,
+		default: '请选择'
+	  },
+	  // 显示的内容
+	  valueName: {
+		type: String,
+		default: 'label'
+	  },
+	  // 绑定的内容
+	  keyName: {
+		type: String,
+		default: 'value'
+	  },
+	  chosevalue:{
+	  		type: String,
+	  		default: '' 
+	  }
+	},
+	// #ifdef VUE3
+	emits: ['update:modelValue', 'change'],
+	// #endif
+	watch: {
+		chosevalue(newval){
+			if(newval&&!this.inputData){
+				this.inputData=newval
+			}
+		},
+	  list: {
+		immediate: true,
+		deep: true,
+		handler (news) {
+		  this.filterList = news
+		  const findItem = news.find(item => {
+			let isItem = ''
+			// #ifdef VUE3
+			if (item[this.keyName] === this.modelValue) {
+			  isItem = true
+			} else {
+			  isItem = false
+			}
+			// #endif
+  
+			// #ifdef VUE2
+			
+			if (item[this.keyName] === this.value) {
+			  isItem = true
+			} else {
+			  isItem = false
+			}
+			// #endif
+			return isItem
+		  })
+		  if (findItem) { 
+			this.inputData = findItem[this.valueName]
+		  }
+		}
+	  }
+	},
+	computed: {
+	  multiLength () {
+		const length = this.multiSelectList.length - 1
+		return '+' + length
+	  },
+	  bottomDistance () {
+		return (
+		  this.windowHeight - this.distanceTop - this.curHeight
+		) // 当前元素距离可视屏幕底部的距离
+	  }
+	},
+	data () {
+	  return {
+		inputData: '',
+		// #ifdef VUE3
+		multiSelectList: this.multiple ? this.modelValue : [],
+		// #endif
+		// #ifdef VUE2
+		multiSelectList: this.multiple ? this.value : [],
+		// #endif
+		isShow: false,
+		optionsShow: false,
+		windowHeight: null,
+		curHeight: null,
+		distanceTop: null,
+		showPosition: 'bottom',
+		filterList: [],
+		refreshUrl: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDQ4IDQ4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC4wMSIvPjxwYXRoIGQ9Ik0yNCA0NEMzNS4wNDU3IDQ0IDQ0IDM1LjA0NTcgNDQgMjRDNDQgMTIuOTU0MyAzNS4wNDU3IDQgMjQgNEMxMi45NTQzIDQgNCAxMi45NTQzIDQgMjRDNCAzNS4wNDU3IDEyLjk1NDMgNDQgMjQgNDRaIiBmaWxsPSJub25lIiBzdHJva2U9IiM3YzZlNmUiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjxwYXRoIGQ9Ik0yOS42NTY5IDE4LjM0MzFMMTguMzQzMiAyOS42NTY4IiBzdHJva2U9IiM3YzZlNmUiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PHBhdGggZD0iTTE4LjM0MzIgMTguMzQzMUwyOS42NTY5IDI5LjY1NjgiIHN0cm9rZT0iIzdjNmU2ZSIgc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4='
+	  }
+	},
+	mounted () {
+	  this.$nextTick(() => {
+		const res = uni.getSystemInfoSync()
+		this.windowHeight = res.windowHeight // 当前设备屏幕高度
+		uni
+		  .createSelectorQuery()
+		  .in(this)
+		  .select('#wSelect')
+		  .boundingClientRect(data => {
+			this.distanceTop = data.top // 当前元素距离顶部的距离
+			this.curHeight = data.height
+		  })
+		  .exec()
+	  })
+	},
+	methods: {
+	  showPositon () {
+		this.showPosition = 'bottom'
+		if (this.bottomDistance < this.windowHeight / 3) {
+		  this.showPosition = 'top'
+		}
+	  },
+	  changeShow () {
+		this.isShow = !this.isShow
+		if (this.isShow === false) {
+		  this.filterList = this.list
+		  setTimeout(() => {
+			this.optionsShow = false
+		  }, 200)
+		} else {
+		  this.showPositon()
+		  this.optionsShow = this.isShow;
+		  // 重置列表
+		  this.filterList = this.list
+		}
+	  },
+	  closeContentSelect () {
+		this.isShow = false
+		setTimeout(() => {
+		  this.optionsShow = false
+		}, 200)
+	  },
+	  setValue (value = '') {
+		// #ifdef VUE3
+		this.$emit('update:modelValue', value)
+		// #endif
+  
+		// #ifdef VUE2
+		this.$emit('input', value)
+		// #endif
+	  },
+	  inputChange (e) {
+		const value = e.detail.value
+		if(this.multiple && this.filterable) {
+			this.inputData = value
+		}else {
+			// this.setValue(value)
+			this.inputData = value
+		}
+		
+		this.filterList = this.list.filter(item =>
+		  item[this.valueName].includes(value)
+		)
+	  },
+	  blurChange(e) {
+		const value = e.detail.value
+		this.inputData=this.chosevalue;
+		if(this.multiple && this.filterable && value) {
+			let curValue ={
+				[this.keyName]:value,
+				[this.valueName]:value
+			}
+			this.multiSelect(curValue)
+		}
+	  },
+	  refreshValue () {
+		this.setValue('')
+		this.inputData = ''
+		this.$emit('change', '')
+		this.filterList = this.list
+		if (this.multiple) {
+		  this.multiSelectList = []
+		}
+	  },
+	  handleClickItem (e) {
+		if (this.multiple) {
+		  this.multiSelect(e)
+		} else {
+		  this.setValue(e[this.keyName])
+		  this.inputData = e[this.valueName]
+		  this.$emit('change', e)
+		  this.changeShow()
+		}
+	  },
+	  multiSelect (item) {
+		const index = this.multiSelectList.findIndex(
+		  res => res[this.valueName] === item[this.valueName]
+		)
+		if (index > -1) {
+		  this.multiSelectList.splice(index, 1)
+		} else {
+		  this.multiSelectList.push(item)
+		}
+		this.inputData = ''
+		this.filterList = this.list
+		this.setValue(this.multiSelectList)
+		this.$emit('change', item)
+	  }
+	}
+  }
+  </script>
+  <style lang="scss" scoped>
+.select-wrap /deep/ .input-placeholder{font-size: 30rpx;color: #AAAAAA;}
+  .w-select {
+	--select-wrap-width: 200px;
+	--select-wrap-height: 30px;
+	--select-border-radius: 4px;
+	--select-border: 1px solid #dcdfe6;
+	--select-active-border: 1px solid #409eff;
+	--select-options-max-height: 150px;
+	--select-option-item-font-size: 14px;
+	--select-input-font-size: 14px;
+	--no-data-default-color: #999999;
+	--select-options-box-shadow: 0px 0px 12px rgb(0 0 0 / 12%);
+	--select-bg-color: #ffffff;
+	.select-wrap {
+	  position: relative;
+	  display: flex;
+	  justify-content: space-between;
+	  align-items: center;
+	  width: var(--select-wrap-width);
+	  height: var(--select-wrap-height);
+	  border: var(--select-border);
+	  border-radius: var(--select-border-radius);
+	  background-color: var(--select-bg-color);
+	  transition: all 0.2s;
+	  input {
+		padding: 0 2px;
+		width: 100%;
+		min-width: 0;
+		height: 100%;
+		font-size: var(--select-input-font-size);
+		flex: 1;
+		text-align: right;
+	  }
+	  .select-content {
+		display: flex;
+		align-items: center;
+		font-size: var(--select-option-item-font-size);
+		.select-content-item {
+		  margin-left: 5px;
+		  padding: 2px 6px;
+		  border-radius: var(--select-border-radius);
+		  color: #aa93b1;
+		  background-color: #f4f4f5;
+		}
+		.select-content-item-default {
+		  margin-left: 5px;
+		  color: var(--no-data-default-color);
+		}
+	  }
+	  .close-icon {
+		position: absolute;
+		top: 50%;
+		right: 7px;
+		z-index: 1000;
+		width: 15px;
+		height: 15px;
+		transform: translateY(-50%);
+		image {
+		  width: 100%;
+		  height: 100%;
+		}
+	  }
+	  .position-bottom {
+		top: calc(var(--select-wrap-height) + 10px);
+	  }
+	  .position-top {
+		bottom: calc(var(--select-wrap-height) + 10px);
+	  }
+	  .select-options {
+		position: absolute;
+		right: 0;
+		left: 0;
+		z-index: 999;
+		overflow: scroll;
+		padding: 10px;
+		max-height: var(--select-options-max-height);
+		border-radius: var(--select-border-radius);
+		background-color: var(--select-bg-color);
+		box-shadow: var(--select-options-box-shadow);
+		.select-option-item {
+		  margin-bottom: 5px;
+		  padding: 5px;
+		  font-size: var(--select-option-item-font-size);
+		  transition: background-color 0.2s;
+		}
+		.item-active {
+		  font-weight: 700;
+		  color: #409eff;
+		  background-color: #f5f7fa;
+		}
+		.options-no-data {
+		  font-size: var(--select-option-item-font-size);
+		  text-align: center;
+		  color: var(--no-data-default-color);
+		}
+	  }
+	  .w-select-arrow {
+		display: inline-block;
+		margin: 3px 10px 0;
+		width: 8px;
+		height: 8px;
+		border-top: 1px solid transparent;
+		border-right: 1px solid transparent;
+		border-bottom: 1px solid #999999;
+		border-left: 1px solid #999999;
+		transition: all 0.3s;
+		transform: translateY(-50%) rotate(-45deg);
+	  }
+	  .w-select-arrow-up {
+		transform: rotate(-225deg);
+	  }
+	}
+	.select-wrap-active {
+	  border: var(--select-active-border);
+	}
+	.animation-bottom-in {
+	  animation-name: bottom-in;
+	  animation-duration: 0.4s;
+	  animation-timing-function: ease-out;
+	  animation-fill-mode: both;
+	}
+	.animation-bottom-out {
+	  animation-name: bottom-out;
+	  animation-duration: 0.2s;
+	  animation-timing-function: ease-out;
+	  animation-fill-mode: both;
+	}
+	.animation-top-in {
+	  animation-name: top-in;
+	  animation-duration: 0.4s;
+	  animation-timing-function: ease-out;
+	  animation-fill-mode: both;
+	}
+	.animation-top-out {
+	  animation-name: top-out;
+	  animation-duration: 0.2s;
+	  animation-timing-function: ease-out;
+	  animation-fill-mode: both;
+	}
+  
+	@keyframes bottom-in {
+	  0% {
+		opacity: 0;
+		transform: translateY(-15%);
+	  }
+	  100% {
+		opacity: 1;
+		transform: translateY(0);
+	  }
+	}
+  
+	@keyframes bottom-out {
+	  0% {
+		opacity: 1;
+		transform: translateY(0);
+	  }
+	  100% {
+		opacity: 0;
+		transform: translateY(-20%);
+	  }
+	}
+  
+	@keyframes top-in {
+	  0% {
+		opacity: 0;
+		transform: translateY(15%);
+	  }
+	  100% {
+		opacity: 1;
+		transform: translateY(0);
+	  }
+	}
+  
+	@keyframes top-out {
+	  0% {
+		opacity: 1;
+		transform: translateY(0);
+	  }
+	  100% {
+		opacity: 0;
+		transform: translateY(20%);
+	  }
+	}
+	.contentMask {
+	  position: fixed;
+	  top: 0;
+	  right: 0;
+	  bottom: 0;
+	  left: 0;
+	  z-index: 998;
+	  width: 100%;
+	  height: 100%;
+	}
+  }
+  </style>
+  

+ 66 - 13
user_ui/work/pages/service/warranty.vue

@@ -21,7 +21,7 @@
 		</view>
 		<!-- 列表 -->
 		<view class="carlists">
-			<box-list :datainfo="list" :wtdt="wtdt" type='warranty' @getDetail="getDetail"></box-list>
+			<box-list :datainfo="list" :wtdt="wtdt" :bxztList="bxztList" type='warranty' @getDetail="getDetail" @getPut="getPut" @getDelFn="getDelFn"></box-list>
 		</view>
 		<view class="rfbtn" @click="getAddFn">我要报修</view>
 		<loading></loading>
@@ -33,6 +33,8 @@
 	const baseUrl = config.baseUrl
 	import boxList from "@/work/components/box/list.vue"
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {repairList,repairDel} from "@/api/work/service.js"
+	import {getDictionaryFn} from "@/api/system/user.js"
 	export default{
 		components:{boxList},
 		data(){
@@ -42,17 +44,25 @@
 				// up:require('@/work/static/car/up.png'),
 				cxrq:"",
 				text:'',
-				list:[{tit:'皖A IC520',type:1},{tit:'晋E KD783',type:2},],
+				list:[],
 				pageSize: 10,
 				pageNum: 1,
 				reachflag: true,
 				wtdt:'',
-				tabval:'0',
-				tablist:[{tit:'全部报修',val:0},{tit:'待指派',val:1},{tit:'处理中',val:2},{tit:'已完成',val:2}]
+				tabval:'-1',
+				tablist:[{tit:'全部报修',val:-1}],
+				bxztList:[],
 			}
 		},
+		onUnload() {
+			uni.$off('repairList')
+		},
 		onLoad: function() {
-		
+			uni.$on('repairList',(res)=>{
+				this.getrefreshData()
+			})
+			this.init()
+			this.getDataFn()
 		},
 		// 上拉触底加载更多触发事件
 		onReachBottom() {
@@ -63,8 +73,44 @@
 		},
 		methods:{
 			checkPermi, checkRole,
-			getDetail(){
-				this.$tab.navigateTo("/work/pages/service/warrantydetail")
+			init(){
+				// 报修状态
+				getDictionaryFn('repair_status').then(res=>{
+					if(res.code==200){
+						this.bxztList = res.data.map(v => {
+							var obj={
+								tit: v.dictLabel,
+								val: v.dictValue
+							}
+							this.tablist.push(obj)
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
+			},
+			getDelFn(data){
+				var that=this;
+				repairDel(data).then(res=>{
+					if(res.code==200){
+						this.$toast("删除成功");
+						setTimeout(function(){
+							that.getrefreshData()
+						},1500)
+					}
+				})
+			},
+			getDetail(id){
+				this.$tab.navigateTo("/work/pages/service/warrantydetail?id="+id)
+			},
+			getPut(id){
+				if(checkPermi(['wuYe:repair:edit'])){
+					this.$tab.navigateTo("/work/pages/service/warrantyadd?id="+id)
+				}else{
+					this.$tab.navigateTo("/work/pages/service/warrantydetail?id="+id)
+				}
 			},
 			getAddFn(){
 				this.$tab.navigateTo("/work/pages/service/warrantyadd")
@@ -84,7 +130,8 @@
 				this.getDataFn()
 			},
 			getTabFn(val){
-				this.tabval=val
+				this.tabval=val;
+				this.getrefreshData()
 			},
 			bindDateChangea(e){
 				var val=e.detail.value;
@@ -95,8 +142,10 @@
 					pageSize:this.pageSize,
 					pageNum: this.pageNum,
 				}
-				params.noticeType=this.tabidx
-				getNoticeList(params).then(res=>{
+				if(this.tabval!=-1){
+					params.repairStatus=this.tabval
+				}
+				repairList(params).then(res=>{
 					if(res.code==200){
 						if (res.rows.length < this.pageSize) {
 							this.reachflag = false
@@ -111,10 +160,14 @@
 								this.wtdt = '到底了~';
 							}
 						}
+						var newArr=JSON.parse(JSON.stringify(res.rows))
+						newArr.forEach(ite=>{
+							ite.right=0;
+						})
 						if (this.pageNum == 1) {
-							this.list = res.rows;
+							this.list = newArr;
 						} else {
-							this.list = this.list.concat(res.rows)
+							this.list = this.list.concat(newArr)
 						}
 					}else{
 						this.$toast(res.msg)
@@ -146,7 +199,7 @@ color: #FFFFFF;}
 		}
 	}
 	.tabtop{padding-bottom: 40rpx;padding-top: 26rpx;
-		.tabt{font-weight: 500;font-size: 32rpx;color: #666666;position: relative;line-height: 56rpx;padding: 0 40rpx;
+		.tabt{font-weight: 500;font-size: 32rpx;color: #666666;position: relative;line-height: 56rpx;flex: 1;text-align: center;
 			&.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;}
 			}

+ 241 - 56
user_ui/work/pages/service/warrantyadd.vue

@@ -7,21 +7,35 @@
 					<view>报修信息</view>
 				</view>
 				<view class="plr15">
-					<uni-forms-item label="项目" required="true" name="realName">
-						<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+					<uni-forms-item label="项目" required name="maintenanceCategory">
+						<picker range-key='dictLabel' :disabled="isdisabled" :value="bxlbidx" :range="bxlbList"   @change='bindDateChange'>
 							<view class="flexc">
-								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择项目'}}</view>
+								<view class="flex1 txr f13 co27" v-if="datainfo.maintenanceCategory&&!bxlb">{{statusFormats(datainfo.maintenanceCategory,bxlbList,'bxlb')}}</view>
+								<view class="flex1 txr f13" v-else :class="bxlb?'co27':'coa'">{{bxlb||"请选择项目"}}</view>
 								<view class="rimg"><image :src="rimg"></image></view>
 							</view>
 						</picker>
 					</uni-forms-item>
-					<uni-forms-item label="标题" required="true"  name="phonenumber">
+					<uni-forms-item label="标题" required  name="repairTitle">
 						<view class="flexc">
-							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入报修标题" />
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.repairTitle" :inputBorder='false' placeholder="请输入报修标题" />
 							<view class="rimg"></view>
 						</view>
 					</uni-forms-item>
-					<uni-easyinput type="textarea" autoHeight v-model="datainfo.companyIntroduction" :inputBorder='false' placeholder="请详细描述您要报修的内容(最多可输入200字哦" />
+					<uni-forms-item label="报修门户" name="portalId">
+						<w-select
+						      style="margin-left: 20rpx;" 
+						     v-model="chooseValue"
+						      :list='fwlist'
+						      valueName='label' 
+						      keyName="value"
+							  :chosevalue="datainfo.houseAddress"
+							  :filterable='filterable'
+						      @change='getchange'
+						    >
+						    </w-select>
+					</uni-forms-item>
+					<uni-easyinput type="textarea" :disabled="isdisabled" autoHeight v-model="datainfo.repairDetails" :inputBorder='false' placeholder="请详细描述您要报修的内容(最多可输入200字哦" />
 					<view class="voice mb28">
 						<view class="flexc">
 							<image :src="voice"></image>
@@ -31,22 +45,12 @@
 				</view>
 				<!-- 图片 -->
 				<view class="imgs">
-					<view class="img" @click="getPreview">
-						<image :src="photo" class="pico"></image>
-						<image :src="del" class="del" @click="getDelFn"></image>
-					</view>
-					<view class="img" @click="getPreview">
-						<image :src="photo" class="pico"></image>
-						<image :src="del" class="del" @click="getDelFn"></image>
-					</view>
-					<view class="img" @click="getPreview">
-						<image :src="photo" class="pico"></image>
-						<image :src="del" class="del" @click="getDelFn"></image>
-					</view>
-					<view class="img" @click="getPreview">
-						<image :src="photo" class="pico"></image>
-						<image :src="del" class="del" @click="getDelFn"></image>
-					</view>
+					<block v-if="phofile&&phofile.length">
+						<view class="img" v-for="(ite,idx) in phofile" :key="idx" @click="getPreview(idx,phofile)">
+							<image :src="baseUrl+ite" class="pico"></image>
+							<image :src="del" class="del" @click.stop="getDelFn(idx)"></image>
+						</view>
+					</block>
 					<view class="addbox" @click="getaddImage">
 						<image :src="photo" class="pico"></image>
 						<view>添加图片</view>
@@ -55,9 +59,9 @@
 			</view>
 			<view class="adrbox">
 				<view class="plr15">
-					<uni-forms-item label="联系方式"  name="phonenumber">
+					<uni-forms-item label="联系方式" :disabled="isdisabled"  name="phoneNumber">
 						<view class="flexc">
-							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入联系方式" />
+							<uni-easyinput v-model="datainfo.phoneNumber" :inputBorder='false' placeholder="请输入联系方式" />
 							<view class="rimg"></view>
 						</view>
 					</uni-forms-item>
@@ -66,7 +70,8 @@
 			
 		</uni-forms>
 		
-		<view class="rhbtn mt30" @click="getAddFn">提交信息</view>
+		<view class="rfbtn mt30" @click="getEditFn" v-if="isdisabled">修改</view>
+		<view class="rfbtn mt30" @click="getSubmit" v-else>提交信息</view>
 	<loading></loading>	
 	</view>
 </template>
@@ -74,9 +79,14 @@
 <script>
 	import config from '@/config'
 	const baseUrl = config.baseUrl
-	import { addressPermi, addressRole } from "@/utils/permission"; // 权限判断函数
+	import {checkPermi,checkRole} from "@/utils/permission"; // 权限判断函数
+	import {uploadmore,selectValueKey} from '@/utils/common.js'
+	import {houseInfolistNoPage} from "@/api/work/work.js"
+	import {repairAdd,repairPut,repairDet} from "@/api/work/service.js"
+	import {getDictionaryFn} from "@/api/system/user.js"
+	import wSelect from "@/work/components/w-select/w-select.vue"
 	export default{
-		components:{},
+		components:{wSelect},
 		data(){
 			return{
 				rimg:require('@/static/images/rimg.png'),
@@ -85,47 +95,221 @@
 				voice: require('@/work/static/voice.png'),
 				photo:require("@/work/static/service/photo.png"),
 				del:require('@/work/static/service/rdel.png'),
-				list:[{tit:'123',isdefault:true},{tit:'212123',isdefault:false,isuser:true},],
-				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'},],
+				datainfo:{
+					// "repairId":"",//报修ID
+					 "portalId":"",//门户id
+					 "houseAddress":"",//详细门牌号
+					 "repairTime":"",//报修时间
+					 "phoneNumber":"",//报修用户手机号码
+					 "repairTitle":"",//报修标题
+					 "maintenanceCategory":"",//报修类别
+					 "repairDetails":"",//报修详情
+					 "repairImages":"",//报修详情图片
+				},
 				checkflag:true,
+				baseUrl:config.baseUrl,
 				tabval:'0',
-				sexs: [{
-					text: '男',
-					value: 0
-				}, {
-					text: '女',
-					value: 1
-				}],
+				phofile:[],
+				bxlbList:[],
+				bxlbidx:0,
+				bxlb:"",
+				id:'',
+				ptype:"add",
+				isdisabled:false,
+				fwlist:[],
+				chooseValue:'',
+				filterable:true,
 			}
 		},
-		onLoad: function() {
-		
+		onLoad: function(e) {
+			this.init();
+			if(e.id){
+				this.id=e.id;
+				this.ptype='edit';
+				this.isdisabled=true;
+				this.getDetailFn()
+			}
 		},
 		methods:{
-			addressPermi, addressRole,
-			getAddFn(){
-				// this.$tab.navigateTo("/mine/pages/house/addaddress")
+			checkPermi,checkRole,
+			bindDateChange(e){
+				var val=e.detail.value;
+				this.datainfo.maintenanceCategory=this.bxlbList[val].dictValue;
+				this.bxlb=this.bxlbList[val].dictLabel;
 			},
-			getTabFn(val){
-				this.tabval=val
+			getEditFn(){
+				this.isdisabled=false;
 			},
-			getDataFn(){
-				return
-				var params={
-					pageSize:this.pageSize,
-					pageNum: this.pageNum,
+			statusFormats(data, list,type) {
+				var aite=selectValueKey(list, data);
+				if(type=='bxlb'){
+					this.bxlbidx=aite.key
 				}
-				params.noticeType=this.tabidx
-				getNoticeList(params).then(res=>{
+				return aite.actions;
+			},
+			getchange(e){
+				this.datainfo.portalId=e.value;
+				this.datainfo.houseAddress=e.label;
+				// this.datainfo.detailAddress=e.location;
+			},
+			init(){
+				//报修类别
+				getDictionaryFn('baoxiutype').then(res=>{
 					if(res.code==200){
-						
-					}else{
-						this.$toast(res.msg)
+						this.bxlbList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
 					}
 				})
-				
+				// 自己的房屋
+				houseInfolistNoPage().then(res=>{
+					if(res.code==200){
+						this.fwlist= res.rows.map(v => {
+							return {
+								label: v.detailedAddress,
+								value: v.houseId,
+								location: v.location
+							}
+						})
+					}
+				})
+			},
+			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){
+				var that=this;
+				if(this.isdisabled){
+					return
+				}
+				uni.showModal({
+					title: '确认删除',
+					content: "是否确认删除",
+					cancelText: '取消',
+					confirmText: '确认',
+					success: function(res) {
+						if (res.confirm) {
+							that.phofile.splice(idx,1)
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			getaddImage(e){
+				let that = this;
+				let file =[],count=9
+				uni.chooseImage({
+					// count: 1,
+					success:function(res){
+						let img= res.tempFilePaths;
+						if(img.length + file.length > count){
+							uni.showToast({
+								title: '最多上传'+count+'张图片',
+								icon: 'none',
+								duration: 2000
+							})
+						}else{
+							let imglen = res.tempFilePaths.length;
+							var fuwufile = [];
+							uploadmore('/common/upload',img,0,0,0,imglen,fuwufile,function(rs){
+								that.phofile = that.phofile.concat(rs);
+							})	
+						}
+					}
+				});
+			},
+			getDetailFn(){
+				var that=this;
+				repairDet(this.id).then(res=>{
+					if(res.code==200){
+						this.datainfo=res.data;
+						this.repairStatus=res.data.repairStatus;
+						if(res.data.repairImages){
+							this.phofile=res.data.repairImages.split(',')
+						}
+						if(res.data.visitPhoto){
+							this.visitPhoto=res.data.visitPhoto.split(',')
+						}
+						if(res.data.completionPhoto){
+							this.completionPhoto=res.data.completionPhoto.split(',')
+						}
+					}
+				})
+			},
+			time() {
+				var date = new Date();
+				var y = date.getFullYear();
+				var m = date.getMonth() + 1;
+				var d = date.getDate();
+				var h = date.getHours();
+				var min = date.getMinutes();
+				var s = date.getSeconds();
+				var yearStr = y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d)
+				var timeStr = (h < 10 ? ('0' + h) : h) + ':' + (min < 10 ? ('0' + min) : min) + ':' + (s < 10 ? (
+					'0' + s) : s);
+				var kaTime = yearStr + ' ' + timeStr;
+				return kaTime
+			},
+			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.repairImages=this.phofile.join(',');
+					}
+					if(!params.maintenanceCategory){
+						this.$toast('请选择项目')
+						return
+					}
+					if(!params.repairTitle){
+						this.$toast('请输入标题')
+						return
+					}
+					if(!params.phoneNumber){
+						this.$toast('请输入联系方式')
+						return
+					}
+					if(this.ptype=='add'){
+						params.repairTime=this.time();
+						repairAdd(params).then(res=>{
+							if(res.code==200){
+								this.$toast("新增成功")
+								setTimeout(function(){
+									uni.$emit("repairList")
+									uni.navigateBack({
+										delta:1
+									})
+								},1500)
+							}
+						})
+					}else{
+						repairPut(params).then(res=>{
+							if(res.code==200){
+								this.$toast("修改成功")
+								setTimeout(function(){
+									uni.$emit("repairList")
+									uni.navigateBack({
+										delta:1
+									})
+								},1500)
+							}
+						})
+					}	
+				})
 			},
 		}
 	}
@@ -134,6 +318,7 @@
 	page{background: #F3F3F0;}
 </style>
 <style lang="scss" scoped>
+.address /deep/ .select-wrap{border: none;width: 100%;}
 .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;padding-left: 12rpx;}

+ 44 - 16
user_ui/work/pages/service/warrantydetail.vue

@@ -8,24 +8,24 @@
 		<view class="wymain">
 			<view class="wytop flexc">
 				<image :src="typeimg" class="flex0"></image>
-				<view class="flex1" v-if="finshtype==0">
+				<view class="flex1" v-if="repairStatus==1">
 					<view class="tit">未派工</view>
 					<view class="txt">请尽快指派人员进行处理</view>
 				</view>
-				<view class="flex1" v-if="finshtype>0&&finshtype<3">
+				<view class="flex1" v-if="repairStatus>1&&repairStatus<4">
 					<view class="tit">已派工</view>
 					<view class="txt">已指派人员进行处理</view>
 				</view>
-				<view class="flex1" v-if="finshtype==3">
+				<view class="flex1" v-if="repairStatus==4">
 					<view class="tit">已完成</view>
 					<view class="txt">报修订单已完成</view>
 				</view>
 			</view>
-			<view class="wabox peobox">
+			<view class="wabox peobox" v-if="repairStatus>1">
 				<image :src="head" class="head"></image>
 				<view class="flex1">
-					<view class="peotit mb6">王师傅</view>
-					<view class="peotxt">15802340788</view>
+					<view class="peotit mb6">{{datainfo.staffName}}</view>
+					<view class="peotxt">{{datainfo.staffPhone}}</view>
 				</view>
 				<image :src="phone" class="phone" @click="getPhoneFn"></image>
 			</view>
@@ -36,10 +36,10 @@
 					<view class="flex1"></view>
 				</view>
 				<view class="walist">
-					<view class="tit">二号楼1单元904厨房油烟机损坏</view>
-					<view class="txt">二号楼1单元904厨房油烟机无法吸烟,请尽快派人上门 维修,谢谢!</view>
-					<view class="imgs">
-						<image :src="head" class="img"></image>
+					<view class="tit">{{datainfo.repairTitle}}</view>
+					<view class="txt">{{datainfo.repairDetails}}</view>
+					<view class="imgs" v-if="phofile&&phofile.length">
+						<image :src="baseUrl+ite" class="img" v-for="(ite,idx) in phofile" :key="idx" @click="getPreviewImage(idx,phofile)"></image>
 					</view>
 				</view>
 			</view>
@@ -50,9 +50,9 @@
 					<view class="flex1"></view>
 				</view>
 				<view class="walist watxt"><view class="wtit">小区名称</view><view class="wtxt">幸福小区</view></view>
-				<view class="walist watxt"><view class="wtit">报修门户</view><view class="wtxt">二号楼1单元904</view></view>
-				<view class="walist watxt"><view class="wtit">报修时间</view><view class="wtxt">2024-11-12 13:27:36</view></view>
-				<view class="walist watxt"><view class="wtit">联系方式</view><view class="wtxt">13805680028</view></view>
+				<view class="walist watxt"><view class="wtit">报修门户</view><view class="wtxt">{{datainfo.houseAddress}}</view></view>
+				<view class="walist watxt"><view class="wtit">报修时间</view><view class="wtxt">{{datainfo.repairTime}}</view></view>
+				<view class="walist watxt"><view class="wtit">联系方式</view><view class="wtxt">{{datainfo.phoneNumber}}</view></view>
 			</view>
 			<!-- <view class="wabox" v-if="finshtype>1">
 				<view class="chtop flexc">
@@ -83,6 +83,7 @@
 	import config from '@/config'
 	const baseUrl = config.baseUrl
 	import popUp from "@/work/components/popup/popup.vue"
+	import {repairDet,repairPut,repairAssign} from "@/api/work/service.js"
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
 	export default{
 		components:{popUp},
@@ -97,14 +98,23 @@
 				baseUrl:config.baseUrl,
 				type:'',
 				finshtype:3,
+				datainfo:{},
+				phofile:[],
+				repairStatus:'',
 			}
 		},
-		onLoad: function() {
+		onLoad: function(e) {
 			uni.getSystemInfo({
 				success: (e) => {
 					this.nvaHeight = Number(e.statusBarHeight)+44;
 				}
 			})
+			if(e.id){
+				this.id=e.id;
+				this.ptype='edit';
+				this.isdisabled=true;
+				this.getDetailFn()
+			}
 		},
 		onPageScroll(e) {
 			var scrollTop = Number(e.scrollTop);
@@ -138,10 +148,10 @@
 			},
 			getPhoneFn(){
 				uni.makePhoneCall({
-					phoneNumber: '114' //仅为示例
+					phoneNumber: this.datainfo.staffPhone //仅为示例
 				});
 			},
-			getPreviewImage(arr,idx){
+			getPreviewImage(idx,arr){
 				var newArr=[];
 				arr.forEach(ite=>{
 					var ds=this.baseUrl+ite
@@ -158,6 +168,24 @@
 					}
 				});
 			},
+			getDetailFn(){
+				var that=this;
+				repairDet(this.id).then(res=>{
+					if(res.code==200){
+						this.datainfo=res.data;
+						this.repairStatus=res.data.repairStatus;
+						if(res.data.repairImages){
+							this.phofile=res.data.repairImages.split(',')
+						}
+						if(res.data.visitPhoto){
+							this.visitPhoto=res.data.visitPhoto.split(',')
+						}
+						if(res.data.completionPhoto){
+							this.completionPhoto=res.data.completionPhoto.split(',')
+						}
+					}
+				})
+			},
 		}
 	}
 </script>

+ 246 - 100
user_ui/work/pages/visitor/vadd.vue

@@ -1,46 +1,60 @@
 <template>
 	<view class="check">
-		<uni-forms ref="form" class="flex1" :model="datainfo">
+		<uni-forms ref="form" :model="datainfo" :rules="rules">
 			<view class="cbox">
 				<view class="chtop flexc">
 					<view class="line"></view>
 					<view>访客信息</view>
 				</view>
 				<view class="chmain">
-					<uni-forms-item label="访客姓名" name="realName">
+					<!-- 选择房屋 -->
+					<uni-forms-item label="访客姓名" name="name">
 						<view class="flexc">
-							<uni-easyinput v-model="datainfo.realName"  :inputBorder='false' placeholder="请输入访客姓名" />
-							<uni-data-checkbox selectedColor="#0156FE" selectedTextColor="#272727" v-model="datainfo.sex" :localdata="sexs" />
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.name"  :inputBorder='false' placeholder="请输入访客姓名" />
+							<!-- <uni-data-checkbox selectedColor="#0156FE" selectedTextColor="#272727" v-model="datainfo.sex" :localdata="sexs" /> -->
 						</view>
 					</uni-forms-item>
-					<uni-forms-item label="来访人数" name="phonenumber">
+					<uni-forms-item label="来访人数" name="num">
 						<view class="flexc">
-							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入来访人数" />
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.num" type="Number" :inputBorder='false' placeholder="请输入来访人数" />
 							<view class="rimg"><image :src="rimg"></image></view>
 						</view>
 					</uni-forms-item>
-					<uni-forms-item label="来访事由" name="phonenumber">
+					<uni-forms-item label="来访时间" name="visitorTime">
 						<view class="flexc">
-							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请选择或输入来访事由" />
-							<picker range-key='text' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
-								<view class="rimg"><image :src="rimg"></image></view>
-							</picker>
+							<uni-datetime-picker  :disabled="isdisabled" :class="datainfo.visitorTime?'co27':'coa'" type="date" placeholder="请选择来访时间" :border="false" :hide-second='true' v-model="datainfo.visitorTime" @change="changeLog" />
+							<view class="rimg"><image :src="rimg"></image></view>
 						</view>
-					</uni-forms-item>
-					<uni-forms-item label="来访时间" name="phonenumber">
-						<uni-datetime-picker type="date" :clear-icon="false" v-model="single" @maskClick="maskClick">
+						<!-- <picker range-key='dictLabel' :value="vxlbidx" :range="vxlbList"   @change='bindDateChangea'>
 							<view class="flexc">
-								<view class="flex1 txr f13" :class="datainfo.iszc?'co27':'coa'">{{datainfo.iszc?'是':'请选择来访时间'}}</view>
+								<view class="flex1 txr f13 co27" v-if="datainfo.maintenanceCategory&&!vxlb">{{statusFormats(datainfo.maintenanceCategory,vxlbList,'vxlb')}}</view>
+								<view class="flex1 txr f13" v-else :class="vxlb?'co27':'coa'">{{vxlb||"请选择来访时间"}}</view>
 								<view class="rimg"><image :src="rimg"></image></view>
 							</view>
-						</uni-datetime-picker>
+						</picker> -->
 					</uni-forms-item>
-					<!-- <uni-forms-item label="来访门户" name="phonenumber">
+					<uni-forms-item label="来访事由" name="reason">
 						<view class="flexc">
-							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入门户号" />
-							<view class="rimg"></view>
+							<uni-easyinput  :disabled="isdisabled" v-model="datainfo.reason" :inputBorder='false' placeholder="请输入来访事由" />
+							<view class="rimg"><image :src="rimg"></image></view>
+							<!-- <picker range-key='dictLabel' :value="syqxidx" :range="sexs"   @change='bindDateChange'>
+								<view class="rimg"><image :src="rimg"></image></view>
+							</picker> -->
 						</view>
-					</uni-forms-item> -->
+					</uni-forms-item>
+					<uni-forms-item label="来访门户" name="portalId">
+						<w-select
+						      style="margin-left: 20rpx;" 
+						     v-model="chooseValue"
+						      :list='fwlist'
+						      valueName='label' 
+						      keyName="value"
+							  :chosevalue="datainfo.houseAddress"
+							  :filterable='filterable'
+						      @change='getchange'
+						    >
+						    </w-select>
+					</uni-forms-item>
 				</view>
 			</view>
 			<view class="cbox">
@@ -49,28 +63,26 @@
 					<view>驾车信息</view>
 				</view>
 				<view class="chmain">
-					<uni-forms-item label="是否驾车" name="realName">
-						<view class="flexc" @click="checkflag=!checkflag">
+					<uni-forms-item label="是否驾车" name="isCar">
+						<view class="flexc" @click="getChangeFn">
 							<view class="flex1"></view>
-							<image :src="check" v-if="checkflag" class="checkimg"></image>
+							<image :src="check" v-if="datainfo.isCar=='Y'" class="checkimg"></image>
 							<image :src="ncheck" v-else class="checkimg"></image>
 						</view>
 					</uni-forms-item>
-					<uni-forms-item label="车牌号码" name="phonenumber">
+					<uni-forms-item label="车牌号码" name="plateNumber">
 						<view class="flexc">
-							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入车牌号码" />
-							<view class="rimg"></view>
-						</view>
-						<!-- <view class="flexc">
-							<uni-easyinput v-model="datainfo.phonenumber" disabled :inputBorder='false' placeholder="拍照自动识别" />
-							<view class="aphoto" @click="getaddImage">
+							<!-- disabled -->
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.plateNumber" :inputBorder='false' placeholder="请输入车牌号" />
+							<!-- <view class="aphoto" @click="getaddImage">
 								<image :src="aphoto"></image>
-							</view>
-						</view> -->
+							</view> -->
+							
+						</view>
 					</uni-forms-item>
-					<uni-forms-item label="手机号码" name="phonenumber">
+					<uni-forms-item label="手机号码" name="mobileNumber">
 						<view class="flexc">
-							<uni-easyinput v-model="datainfo.phonenumber" :inputBorder='false' placeholder="请输入手机号码" />
+							<uni-easyinput :disabled="isdisabled" v-model="datainfo.mobileNumber" :inputBorder='false' placeholder="请输入手机号码" />
 							<view class="rimg"></view>
 						</view>
 					</uni-forms-item>
@@ -80,8 +92,9 @@
 				</view>
 			</view>
 		</uni-forms>
-		<view class="pdlr12 flex0">
-			<view class="rhbtn" @click="getNext">确定</view>
+		<view class="pdlr12 mt63">
+			<view class="rhbtn" @click="getEditFn" v-if="isdisabled">修改</view>
+			<view class="rhbtn" @click="getSubmit" v-else>确定</view>
 		</view>
 
 		<loading></loading>
@@ -90,15 +103,13 @@
 
 <script>
 	import config from '@/config'
-	import {
-		checkPermi,
-		checkRole
-	} from "@/utils/permission"; // 权限判断函数
-	import {
-		uploadIdentify
-	} from '@/utils/common.js'
+	import {checkPermi,checkRole} from "@/utils/permission"; // 权限判断函数
+	import {uploadIdentify,uploadmore} from '@/utils/common.js'
+	import {reservAdd,reservDet,reservPut} from "@/api/work/people.js"
+	import {houseInfolistNoPage} from "@/api/work/work.js"
+	import wSelect from "@/work/components/w-select/w-select.vue"
 	export default {
-		components: {},
+		components: {wSelect},
 		data() {
 			return {
 				rimg: require('@/static/images/rimg.png'),
@@ -108,14 +119,19 @@
 				baseUrl: config.baseUrl,
 				checkflag:true,
 				datainfo: {
-					sex:0,
-					realName: '',
-					idCard: '',
-					address: '',
-					expirationDate: '',
-					phonenumber: '',
-					front: '',
-					back: '',
+					// "visitorManageId":"",//来访主键
+					 "portalId":"",//门户id
+					 "houseAddress":"",//详细门牌号
+					 "name":"",//访客姓名
+					 "num":"",//来访人数
+					 "reason":"",//来访事由
+					 "mobileNumber":"",//手机号码
+					 "isCar":"N",//是否驾车 N:否 Y:是
+					 "plateNumber":"",//车牌号码
+					 // "reserveTime":"",//预约时间
+					 "visitorTime":"",//来访时间
+					 // "status":"",//状态 1:预约成功 2:已来访 3:已过期
+					 // "photo":""//人脸信息
 				},
 				syqxidx:'',
 				sexs: [{
@@ -125,35 +141,129 @@
 					text: '女',
 					value: 1
 				}],
+				rules:{name: {rules: [{required: true,errorMessage: '请输入访客姓名' }]},
+				  portalId: {rules: [{required: true,errorMessage: '请选择来访门户' }]},
+				  mobileNumber: {rules: [{required: true,errorMessage: '请输入手机号'}, {pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,errorMessage:'请输入正确的手机号码'}]},},
+				phofile:[],
+				filterable:true,
+				chooseValue:'',
+				fwlist:[],
+				id:'',
+				isdisabled:false,
+				ptype:'add',
 			}
 		},
-		onLoad: function() {
-
+		onLoad: function(e) {
+			if(e.id){
+				this.id=e.id;
+				this.ptype="edit";
+				this.isdisabled=true;
+				this.getDetail()
+			}
+			this.init()
 		},
 		methods: {
 			checkPermi,
 			checkRole,
+			getEditFn(){
+				this.isdisabled=false;
+			},
+			changeLog(){
+				
+			},
+			init(){
+				// 自己的房屋
+				houseInfolistNoPage().then(res=>{
+					if(res.code==200){
+						this.fwlist= res.rows.map(v => {
+							return {
+								label: v.detailedAddress,
+								value: v.houseId,
+								location: v.location
+							}
+						})
+					}
+				})
+			},
 			bindDateChange(e){
 				var val=e.detail.value;
 				// this.datainfo.applicationBank=this.sdyhlist[val].value;
 				// this.applicationBank=this.sdyhlist[val].label;
 			},
+			getChangeFn(){
+				if(this.isdisabled){
+					return
+				}
+				if(this.datainfo.isCar=='Y'){
+					this.datainfo.isCar='N'
+				}else{
+					this.datainfo.isCar='Y'
+				}
+			},
+			getDetail(){
+				reservDet(this.id).then(res=>{
+					if(res.code==200){
+						this.datainfo=res.data;
+						this.chooseValue=res.data.portalId
+					}
+				})
+			},
+			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
+					}
+					var lng = '117.211954';
+					var lat = '31.839676';
+					params.lgt=lng;
+					params.lat=lat;
+					if(this.ptype=='add'){
+						reservAdd(params).then(res=>{
+							if(res.code==200){
+								this.$toast("新增成功")
+								setTimeout(function(){
+									// uni.$emit("refComelist")
+									uni.navigateBack({
+										delta:1
+									})
+								},1500)
+							}
+						})
+					}else{
+						reservPut(params).then(res=>{
+							if(res.code==200){
+								this.$toast("修改成功")
+								setTimeout(function(){
+									// uni.$emit("refComelist")
+									uni.navigateBack({
+										delta:1
+									})
+								},1500)
+							}
+						})
+					}
+				})
+			},
+			getchange(e){
+				this.datainfo.portalId=e.value;
+				this.datainfo.houseAddress=e.label;
+				this.datainfo.detailAddress=e.location;
+			},
 			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) {
@@ -165,43 +275,77 @@
 						} 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)
-								}
+							uploadmore('/common/upload', img, 0, 0, 0, imglen, fuwufile, function(rs) {
+								that.phofile = that.phofile.concat(rs);
 							})
 						}
 					}
 				});
 			},
-			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
-						}
-					}
-				})
-			}
+			// 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>
@@ -209,6 +353,8 @@
 	page{background: #F3F3F0;}
 </style>
 <style lang="scss" scoped>
+.coa /deep/ .uni-date__x-input{text-align: right;color: #AAAAAA;}
+.check /deep/ .select-wrap{border: none;width: 100%;}
 .check /deep/ .uni-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;}
@@ -220,7 +366,7 @@
 .check /deep/ .is-disabled{color: #222327;background-color: #ffffff !important;}
 .check /deep/ .uni-data-checklist .checklist-group .checklist-box{margin:10rpx 8rpx 10rpx 16rpx;}
 .check /deep/ .uni-data-checklist{flex: 0 0 auto;}
-.check{min-height: 100vh;padding: 20rpx 18rpx 100rpx;box-sizing: border-box;display: flex;flex-direction: column;}
+.check{min-height: 100vh;padding: 20rpx 18rpx 24rpx;box-sizing: border-box;}
 .cbox{background: #FFFFFF;border-radius: 20rpx;flex: 1;margin-bottom: 24rpx;
 	.chtop{padding-top: 32rpx;margin-bottom: 8rpx;
 		image{width: 14rpx;height: 48rpx;margin-right: 20rpx;}
@@ -241,8 +387,8 @@
 			image{width: 40rpx;height: 38rpx;}
 		}
 	}
-	.line{width: 14rpx;height: 48rpx;background: #0256FD;border-radius:0 12rpx 12rpx 0;margin-right: 18rpx;}
-	.tips{font-weight: 500;font-size: 22rpx;color: #0256FD;padding: 20rpx 0;}
 	
 }
+.line{width: 14rpx;height: 48rpx;background: #0256FD;border-radius:0 12rpx 12rpx 0;margin-right: 18rpx;}
+.tips{font-weight: 500;font-size: 22rpx;color: #0256FD;padding: 20rpx 0;}
 </style>

+ 24 - 37
user_ui/work/pages/visitor/vdetail.vue

@@ -13,15 +13,15 @@
 					<view class="line lib"></view>
 				</view>
 				<view class="vdlist mb26">
-					<view class="list"><text>访客姓名:</text>王女士</view>
-					<view class="list"><text>来访时间:</text>2024-11-20  10:00</view>
+					<view class="list"><text>访客姓名:</text>{{datainfo.name}}</view>
+					<view class="list"><text>来访时间:</text>{{datainfo.visitorTime}}</view>
 					<view class="flexc">
-						<view class="list mw50"><text>来访人数:</text>1人</view>
-						<view class="list mw50"><text>来访事由:</text>亲友</view>
+						<view class="list mw50"><text>来访人数:</text>{{datainfo.num}}人</view>
+						<view class="list mw50"><text>来访事由:</text>{{datainfo.reason}}</view>
 					</view>
 					<view class="flexc">
-						<view class="list mw50"><text>车牌号码:</text>皖A B8888</view>
-						<view class="list mw50"><text>手机号码:</text>1870566558</view>
+						<view class="list mw50"><text>车牌号码:</text>{{datainfo.plateNumber}}</view>
+						<view class="list mw50"><text>手机号码:</text>{{datainfo.mobileNumber}}</view>
 					</view>	
 				</view>
 				<!-- 地图 -->
@@ -40,8 +40,7 @@
 				</view>
 				<view class="adrbox mb16">
 					<view class="tit mb10">房屋地址</view>
-					<view class="txt">安徽省合肥市蜀山区高新技术产业开发区幸福大街88号
-幸福小区5#1304</view>
+					<view class="txt">{{datainfo.houseAddress}}</view>
 				</view>
 				<view class="adrbox">
 					<view class="flexc mb6">
@@ -57,6 +56,7 @@
 				</view>
 			</view>
 			<view class="rhbtn mt30" @click="getShareFn">分享</view>
+<!-- 			<view class="rhbtn mt30" @click="getPutFn">修改</view> -->
 		</view>	
 	<loading></loading>	
 	</view>
@@ -66,6 +66,7 @@
 	import config from '@/config'
 	const baseUrl = config.baseUrl
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+		import {reservDet} from "@/api/work/people.js"
 	export default{
 		components:{},
 		data(){
@@ -76,8 +77,6 @@
 				checkflag:false,
 				backgroundColor: "transparent",
 				baseUrl:config.baseUrl,
-				type:'',
-				finshtype:3,
 				center:{
 					lng:'117.211954',
 					lat:'31.839676',
@@ -91,14 +90,20 @@
 					iconPath: require("@/work/static/visitor/adr.png"),
 					anchor:{x: 0.5, y: 0.5}
 				}],
+				id:'',
+				datainfo:{}
 			}
 		},
-		onLoad: function() {
+		onLoad: function(e) {
 			uni.getSystemInfo({
 				success: (e) => {
 					this.nvaHeight = Number(e.statusBarHeight)+44;
 				}
 			})
+			if(e.id){
+				this.id=e.id;
+				this.getDetail()
+			}
 		},
 		onReady() {
 			this.getcreateMap()
@@ -120,11 +125,8 @@
 			getShareFn(){
 				this.$tab.navigateTo("/work/pages/visitor/vshare")
 			},
-			getAssignFn(){
-				this.type='assign'
-			},
-			getCheckFn(){
-				this.type='assigncheck'
+			getPutFn(){
+				this.$tab.navigateTo("/work/pages/visitor/vadd?id="+this.id)
 			},
 			getOpenFn(){
 				
@@ -134,33 +136,18 @@
 					delta:1
 				})
 			},
-			getClose(){
-				this.type='';
-			},
-			getSure(){
-				this.type='';
-			},
 			getPhoneFn(){
 				uni.makePhoneCall({
 					phoneNumber: '114' //仅为示例
 				});
 			},
-			getPreviewImage(arr,idx){
-				var newArr=[];
-				arr.forEach(ite=>{
-					var ds=this.baseUrl+ite
-					newArr.push(ds)
-				})
-				uni.previewImage({
-					urls: newArr,
-					current:idx,
-					success: function(data) {
-						
-					},
-					fail: function(err) {
-						
+			getDetail(){
+				reservDet(this.id).then(res=>{
+					if(res.code==200){
+						this.datainfo=res.data;
+						this.chooseValue=res.data.portalId
 					}
-				});
+				})
 			},
 		}
 	}

+ 39 - 8
user_ui/work/pages/visitor/vlist.vue

@@ -2,7 +2,7 @@
 	<view class="car">
 		<!-- 列表 -->
 		<view class="carlists">
-			<box-list :datainfo="list"  :wtdt="wtdt" type='visitor' @getDetail="getDetail"></box-list>
+			<box-list :datainfo="list" :fkztList="fkztList" :wtdt="wtdt" type='visitor' @getDetail="getDetail" @getDelFn="getDelFn"></box-list>
 		</view>
 		<loading></loading>
 	</view>
@@ -13,6 +13,8 @@
 	const baseUrl = config.baseUrl
 	import boxList from "@/work/components/box/list.vue"
 	import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
+	import {reservList,reservDel} from "@/api/work/people.js"
+	import {getDictionaryFn} from "@/api/system/user.js"
 	export default{
 		components:{boxList},
 		data(){
@@ -27,10 +29,12 @@
 				pageNum: 1,
 				reachflag: true,
 				wtdt:'',
+				fkztList:[],
 			}
 		},
 		onLoad: function() {
-		
+			this.init()
+			this.getDataFn()
 		},
 		// 上拉触底加载更多触发事件
 		onReachBottom() {
@@ -41,8 +45,21 @@
 		},
 		methods:{
 			checkPermi, checkRole,
-			getDetail(){
-				this.$tab.navigateTo("/work/pages/visitor/vdetail")
+			getDetail(id){
+				this.$tab.navigateTo("/work/pages/visitor/vdetail?id="+id)
+			},
+			init(){
+				// 访客状态
+				getDictionaryFn('yuyetype').then(res=>{
+					if(res.code==200){
+						this.fkztList = res.data.map(v => {
+							return {
+								dictLabel: v.dictLabel,
+								dictValue: v.dictValue
+							}
+						})
+					}
+				})
 			},
 			getConfirm(){
 				this.getrefreshData()
@@ -65,13 +82,23 @@
 				var val=e.detail.value;
 				this.cxrq=val;
 			},
+			getDelFn(data){
+				var that=this;
+				reservDel(data).then(res=>{
+					if(res.code==200){
+						this.$toast("删除成功");
+						setTimeout(function(){
+							that.getrefreshData()
+						},1500)
+					}
+				})
+			},
 			getDataFn(){
 				var params={
 					pageSize:this.pageSize,
 					pageNum: this.pageNum,
 				}
-				params.noticeType=this.tabidx
-				getNoticeList(params).then(res=>{
+				reservList(params).then(res=>{
 					if(res.code==200){
 						if (res.rows.length < this.pageSize) {
 							this.reachflag = false
@@ -86,10 +113,14 @@
 								this.wtdt = '到底了~';
 							}
 						}
+						var newArr=JSON.parse(JSON.stringify(res.rows))
+						newArr.forEach(ite=>{
+							ite.right=0;
+						})
 						if (this.pageNum == 1) {
-							this.list = res.rows;
+							this.list = newArr;
 						} else {
-							this.list = this.list.concat(res.rows)
+							this.list = this.list.concat(newArr)
 						}
 					}else{
 						this.$toast(res.msg)