LAPTOP-FO2T5SIU\35838 10 months ago
parent
commit
f1d848c6d4

+ 8 - 0
js_sdk/http.js

@@ -536,6 +536,14 @@ export function findRoomByCondition(params) {
         '/wx/SaleController/findRoomByCondition', params, {})
 
 }
+
+export function findRoomByConditionExcel(params) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/SaleController/findRoomByConditionExcel', params, {})
+
+}
+
 export function getCompanyAll(qymc) {
     return $http.post(
         '/wx/company/listAll', {

+ 309 - 97
pages/subPackages/housingResources/components/houseList.vue

@@ -4,48 +4,57 @@
       <div class="selectRow">
         <span class="rowTitle">园区</span>
         <div class="selectItemBox">
-          <span class="unSelectItem" :class="parkSelect?'selectItem':''">科教产业园</span>
+          <span class="unSelectItem" v-for="item in yuanqu_loacldata"
+                :class="item.select?'selectItem':''"
+                @click="clickGroupItem(item)"
+          >{{ item.name }}</span>
         </div>
       </div>
-      <van-icon name="arrow-down" class="arrowDown" style="font-size: 40rpx;margin-top: 40rpx;font-weight: 600" @tap="closeSelectBody" v-if="height<200"/>
-      <div class="selectRow">
+      <van-icon name="arrow-down" class="arrowDown" style="font-size: 40rpx;margin-top: 40rpx;font-weight: 600"
+                @tap="closeSelectBody" v-if="height<200"/>
+      <div class="selectRow" v-if="form.groupIds != null">
         <span class="rowTitle">楼盘</span>
         <div class="selectItemBox">
-          <span class="unSelectItem" v-for="item in properties" :class="item.select?'selectItem':''" @click="clickItem(item)">{{ item.name }}</span>
+          <span class="unSelectItem"
+                v-for="item in loupan_loacldata"
+                :class="item.select?'selectItem':''"
+                @click="clickItem(item)">{{ item.name }}
+          </span>
         </div>
       </div>
       <div class="selectRow">
         <span class="rowTitle">状态</span>
         <div class="selectItemBox">
-          <van-checkbox-group :value="avaStatus" @change="avaChange" >
-            <van-checkbox name="空置" shape="square">空置</van-checkbox>
-            <van-checkbox name="合同临期" shape="square">合同临期</van-checkbox>
+          <van-checkbox-group :value="avaStatus" @change="avaChange">
+            <van-checkbox name="1" shape="square">空置</van-checkbox>
+            <van-checkbox name="4" shape="square">合同临期</van-checkbox>
           </van-checkbox-group>
         </div>
       </div>
       <div class="selectRow">
         <span class="rowTitle">装修情况</span>
         <div class="selectItemBox selectItemBoxMoreItem">
-          <van-checkbox-group :value="rentalStatus" @change="rentalChange" >
-            <van-checkbox name="毛坯" shape="square">毛坯</van-checkbox>
-            <van-checkbox name="简装" shape="square">简装</van-checkbox>
-            <van-checkbox name="精装" shape="square">精装</van-checkbox>
+          <van-checkbox-group :value="rentalStatus" @change="rentalChange">
+            <van-checkbox name="3" shape="square">毛坯</van-checkbox>
+            <van-checkbox name="2" shape="square">简装</van-checkbox>
+            <van-checkbox name="1" shape="square">精装</van-checkbox>
           </van-checkbox-group>
         </div>
       </div>
-      <div class="selectRow" >
+      <div class="selectRow">
         <span class="rowTitle">用途</span>
         <div class="selectItemBox">
-          <van-checkbox-group :value="useTo" @change="useToChange" >
-            <van-checkbox name="研发办公" shape="square">办公</van-checkbox>
-            <van-checkbox name="生活配套" shape="square">商铺</van-checkbox>
+          <van-checkbox-group :value="useTo" @change="useToChange">
+            <van-checkbox name="1" shape="square">研发办公</van-checkbox>
+            <van-checkbox name="2" shape="square">生活配套</van-checkbox>
+            <van-checkbox name="3" shape="square">生产用房</van-checkbox>
           </van-checkbox-group>
         </div>
       </div>
       <div class="selectRow">
         <span class="rowTitle">朝向</span>
         <div class="selectItemBox">
-          <van-checkbox-group :value="toward" @change="onChange" >
+          <van-checkbox-group :value="toward" @change="onChange">
             <van-checkbox name="东" shape="square">东</van-checkbox>
             <van-checkbox name="南" shape="square">南</van-checkbox>
             <van-checkbox name="西" shape="square">西</van-checkbox>
@@ -56,54 +65,66 @@
       <div class="selectRow">
         <span class="rowTitle">指导价</span>
         <div class="selectItemBox">
-          <input placeholder="元/㎡/月" class="myIpt"/>
+          <input placeholder="元/㎡/月" class="myIpt" v-model="form.guidePrice1"/>
           <span style="margin: 0 18rpx">—</span>
-          <input placeholder="元/㎡/月" class="myIpt"/>
+          <input placeholder="元/㎡/月" class="myIpt" v-model="form.guidePrice2"/>
         </div>
       </div>
       <div class="selectRow">
         <span class="rowTitle">面积</span>
         <div class="selectItemBox">
-          <input placeholder="㎡" class="myIpt" />
+          <input placeholder="㎡" class="myIpt" v-model="form.roomSize1"/>
           <span style="margin: 0 18rpx">—</span>
-          <input placeholder="㎡" class="myIpt" />
+          <input placeholder="㎡" class="myIpt" v-model="form.roomSize2"/>
         </div>
       </div>
       <div class="btnBox">
-        <button class="czBtn">重置</button>
-        <button class="ssBtn">搜索</button>
+        <button class="czBtn" @tap="reset()">重置</button>
+        <button class="ssBtn" @tap="search()">搜索</button>
       </div>
       <van-icon name="arrow-up" style="font-size: 40rpx;margin-top: 40rpx;font-weight: 600" @tap="closeSelectBody"/>
     </div>
-    <div class="bottomBody">
-      <van-tabs :active="active" @change="onChange">
-        <van-tab title="全部" :name="0"></van-tab>
-        <van-tab title="A" :name="1"></van-tab>
-        <van-tab title="B1" :name="2"></van-tab>
-        <van-tab title="B2" :name="3"></van-tab>
-        <van-tab title="B3" :name="4"></van-tab>
-        <van-tab title="C" :name="5"></van-tab>
+    <div class="bottomBody" v-if="vamTabStatus">
+      <van-tabs :active="form.mnpBuildingIds" @change="buildChange">
+        <van-tab
+            v-for="(item, index) in loudongList"
+            :title="item.ldmc"
+            :name="item.id"
+            :key="index"
+        >
+        </van-tab>
       </van-tabs>
       <div class="sumBox">
-        共 <span style="color: rgba(3, 101, 249, 1);margin: 0 5rpx">20</span> 间
+        共 <span style="color: rgba(3, 101, 249, 1);margin: 0 5rpx">{{ form.total }}</span> 间
       </div>
       <div class="listBody">
-        <div class="listItem" v-for="item in 5" @tap="toDetail(item)">
+        <div class="listItem" v-for="item in roomList" @tap="toDetail(item)">
           <div class="firstRow">
-            <span class="itemTitle">中国物联网国际创新园一期A1101</span>
-            <span class="tag">正常</span>
+            <span class="itemTitle">
+              {{
+                item.yuanquName + item.quyuName + item.loudongName + item.roomNo
+              }}</span>
+            <span class="tag">{{getDicType("currentState", item.currentState)}}</span>
           </div>
           <div class="midRow">
-            <span style="width: 300rpx">用途:研发办公</span>
-            <span>装修情况:未知</span>
+            <span style="width: 300rpx">用途:{{
+                getDicType("roomUse", item.roomUse) == undefined
+                    ? "未知"
+                    : getDicType("roomUse", item.roomUse)
+              }}</span>
+            <span>装修情况:{{
+                !item.decorationSituation ? "未知" : item.decorationSituation
+              }}</span>
           </div>
           <div class="midRow">
-            <span style="width: 300rpx">面积(㎡):356㎡</span>
-            <span>朝向:未知</span>
+            <span style="width: 300rpx">面积(㎡):{{ item.roomSize }}㎡</span>
+            <span>朝向:{{ item.roomDirection ? item.roomDirection : "未知" }}</span>
           </div>
           <div class="bottomRow">
             <span>出租指导价(元/㎡/月):</span>
-            <span class="money">30~35</span>
+            <span class="money">{{
+                !item.guidePrice ? "未知" : item.guidePrice
+              }}</span>
           </div>
         </div>
       </div>
@@ -112,55 +133,220 @@
 </template>
 
 <script>
+import {
+  findYuanQuList,
+  findLongPanList,
+  findLouDongList,
+  findRoomByCondition,
+  findRoomByConditionExcel,
+  getByCodes,
+} from "@/js_sdk/http";
+import handle from "../../modifyHandle/handle.vue";
+
 export default {
   name: "maintenance",
-  data(){
-    return{
-      parkSelect:true,
-      properties: [
-        {name:'一期', select:true},
-        {name:'二期', select:false},
-        {name:'三期', select:false},
-        {name:'四期', select:false},
-      ],
-      toward: ['东', '北'],
-      avaStatus:['空置'],
-      rentalStatus:[],
-      useTo:[],
-      propertyNature:[],
+  computed: {
+    handle() {
+      return handle
+    }
+  },
+  created() {
+    this.findYuanQuList();
+    this.getByCodes();
+  },
+  data() {
+    return {
+      dic_key: ["PROPERTY_NATURE", "HOUSE_USAGE", "INVESTMENT_STATUS"],
+      dic_SelectList: {},
+      toward: [],
+      avaStatus: [],
+      rentalStatus: [],
+      useTo: [],
+      propertyNature: [],
       height: 890,
-      active: 0
+      active: 0,
+      groupIds: [],
+      discIds: [],
+      buildId: '',
+      yuanqu_loacldata: [],
+      loupan_loacldata: [],
+      loudongList: [],
+      roomList: [],
+      form: {
+        // currentState: this.avaStatus.join(','),
+        // roomDirection: this.toward.join(',')
+      },
+      vamTabStatus: false,
     }
   },
-  methods:{
-    clickItem(item){
+  methods: {
+    clickGroupItem(item) {
       item.select = !item.select
+      if (this.groupIds.includes(item.value)) {
+        // includes()方法判断是否包含某一元素,返回true或false表示是否包含元素,对NaN一样有效
+        // filter()方法用于把Array的某些元素过滤掉,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素:生成新的数组
+        this.groupIds = this.groupIds.filter(function (ele) {
+          return ele !== item.value
+        })
+      } else {
+        this.groupIds.push(item.value)
+      }
+      this.form.groupIds = this.groupIds.join(',')
+      if (this.form.groupIds) {
+        this.yuanQuChange()
+      }
     },
-    onChange(e){
+    clickItem(item) {
+      item.select = !item.select
+      if (this.discIds.includes(item.value)) {
+        // includes()方法判断是否包含某一元素,返回true或false表示是否包含元素,对NaN一样有效
+        // filter()方法用于把Array的某些元素过滤掉,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素:生成新的数组
+        this.discIds = this.discIds.filter(function (ele) {
+          return ele !== item.value
+        })
+      } else {
+        this.discIds.push(item.value)
+      }
+      this.form.discIds = this.discIds.join(',')
+      if (this.form.discIds) {
+        this.louPanChange()
+      }
+    },
+    onChange(e) {
       this.toward = e.detail
+      this.form.roomDirection = this.toward.join(',')
     },
-    avaChange(e){
+    avaChange(e) {
       this.avaStatus = e.detail
+      this.form.currentState = this.avaStatus.join(',')
     },
-    rentalChange(e){
+    rentalChange(e) {
       this.rentalStatus = e.detail
+      this.form.decorationSituation = this.rentalStatus.join(',')
     },
-    useToChange(e){
+    useToChange(e) {
       this.useTo = e.detail
+      this.form.roomUse = this.useTo.join(',')
     },
-    natureChange(e){
+    natureChange(e) {
       this.propertyNature = e.detail
     },
-    closeSelectBody(){
-      if (this.height > 800){
+    async buildChange(e) {
+      this.form.mnpBuildingIds = e.detail.name
+      let data = await findRoomByConditionExcel(this.form);
+      this.roomList = data;
+      this.form.total = data.length;
+    },
+    closeSelectBody() {
+      if (this.height > 800) {
         this.height = 130
-      }else{
+      } else {
         this.height = 890
       }
     },
+    findYuanQuList() {
+      findYuanQuList().then((data) => {
+        let yuanqu_list = [...data];
+        let yuanqu_loacldata = yuanqu_list.map((e) => {
+          return {
+            value: e.id,
+            name: e.groupName,
+            select: false
+          };
+        });
+        this.yuanqu_loacldata = yuanqu_loacldata;
+      });
+    },
+    async yuanQuChange() {
+      let data = await findLongPanList(this.form.groupIds);
+      this.roomList = [];
+      this.loudongList = [];
+      if (data.length > 0) {
+        this.loupan_loacldata = data.map((e) => {
+          return {
+            value: e.id,
+            name: e.name,
+            select: false
+          };
+        });
+      } else {
+        this.loupan_loacldata = [{value: null, name: "暂无", select: false}];
+      }
+    },
+    async louPanChange() {
+      try {
+        let data = await findLouDongList(this.form.discIds);
+        if (data.length == 0) {
+          this.loudongList = [];
+          this.roomList = [];
+          return;
+        } else {
+          this.loudongList = [...data];
+          this.form.mnpBuildingIds = data[0].id;
+          this.roomList = [];
+        }
+
+        let row = await findRoomByConditionExcel(this.form);
+        this.roomList = row;
+        this.form.total = row.length;
+        this.vamTabStatus = true;
+      } catch (e) {
+      }
+    },
+    async search() {
+      console.log('this.form', this.form)
+      if (!this.form.groupIds && !this.form.discIds) {
+        return this.$showToast("请选择园区和楼盘后重试");
+      }
+      if (!this.form.groupIds) {
+        return this.$showToast("请选择园区后重试");
+      }
+      if (!this.form.discIds) {
+        return this.$showToast("请选择楼盘后重试");
+      }
+      let data = await findRoomByConditionExcel(this.form);
+      this.roomList = data;
+      this.form.total = data.length;
+    },
+    reset() {
+      this.groupIds = []
+      this.discIds = []
+      this.toward = []
+      this.avaStatus = []
+      this.rentalStatus = []
+      this.useTo = []
+      this.loudongList = [];
+      this.roomList = [];
+      this.form = {};
+      this.findYuanQuList();
+      this.getByCodes();
+    },
+    getDicType(type, value) {
+      if (!value) return;
+      if (type == "zaiti") {
+        let PROPERTY_NATURE = this.dic_SelectList.PROPERTY_NATURE;
+
+        let index = PROPERTY_NATURE.findIndex((e) => e.value == value);
+        return PROPERTY_NATURE[index].label;
+      }
+      if (type == "roomUse") {
+        let HOUSE_USAGE = this.dic_SelectList.HOUSE_USAGE;
+        let index = HOUSE_USAGE.findIndex((e) => e.value == value);
+        return HOUSE_USAGE[index].label;
+      }
+      if (type == "currentState") {
+        let INVESTMENT_STATUS = this.dic_SelectList.INVESTMENT_STATUS;
+        let index = INVESTMENT_STATUS.findIndex((e) => e.value == value);
+        return INVESTMENT_STATUS[index].label;
+      }
+    },
+    async getByCodes() {
+      let data = await getByCodes(JSON.stringify(this.dic_key));
+      this.dic_SelectList = this.$common.handleDicList(data);
+    },
     toDetail(item) {
       uni.navigateTo({
-        url:'/pages/subPackages/housingResources/detail'
+        url: '/pages/subPackages/housingResources/detail?id=' + item.id
       })
     }
   }
@@ -169,25 +355,29 @@ export default {
 </script>
 
 <style lang="scss">
-.houseList{
+.houseList {
   padding-bottom: 150rpx;
-  .topSearchBox{
+
+  .topformBox {
     background: white;
-    padding:16rpx 32rpx;
-    .van-cell{
+    padding: 16rpx 32rpx;
+
+    .van-cell {
       background: rgba(245, 247, 250, 1);
       width: 686rpx;
-      border: 1px solid rgba(234, 237, 242, 1) ;
+      border: 1px solid rgba(234, 237, 242, 1);
       border-radius: 8rpx;
       box-sizing: border-box;
       padding: 12rpx 32rpx;
     }
-    .van-icon{
+
+    .van-icon {
       color: rgba(3, 101, 249, 1);
       font-size: 40rpx;
     }
   }
-  .selectBody{
+
+  .selectBody {
     background: white;
     display: flex;
     flex-direction: column;
@@ -196,21 +386,25 @@ export default {
     box-sizing: border-box;
     overflow: hidden;
     position: relative;
-    .selectRow{
+
+    .selectRow {
       display: flex;
       align-items: center;
       margin-top: 38rpx;
-      .rowTitle{
+
+      .rowTitle {
         min-width: 120rpx;
         color: rgba(51, 51, 51, 1);
         font-size: 30rpx;
         text-align: right;
       }
-      .selectItemBox{
+
+      .selectItemBox {
         display: flex;
         align-items: center;
         margin-left: 24rpx;
-        .unSelectItem{
+
+        .unSelectItem {
           display: flex;
           align-items: center;
           justify-content: center;
@@ -221,7 +415,8 @@ export default {
           border-radius: 8rpx;
           margin-right: 24rpx;
         }
-        .selectItem{
+
+        .selectItem {
           display: flex;
           align-items: center;
           justify-content: center;
@@ -232,7 +427,8 @@ export default {
           border-radius: 8rpx;
           margin-right: 24rpx;
         }
-        .myIpt{
+
+        .myIpt {
           width: 240rpx;
           height: 64rpx;
           text-align: center;
@@ -241,18 +437,21 @@ export default {
           font-size: 26rpx;
         }
       }
-      .selectItemBoxMoreItem{
-        .van-checkbox{
-          margin:0 24rpx 24rpx 0;
+
+      .selectItemBoxMoreItem {
+        .van-checkbox {
+          margin: 0 24rpx 24rpx 0;
         }
       }
     }
-    .btnBox{
+
+    .btnBox {
       display: flex;
       align-items: center;
       justify-content: center;
       margin-top: 48rpx;
-      .czBtn{
+
+      .czBtn {
         background: rgba(3, 101, 249, 0.10);
         border-radius: 8rpx;
         width: 240rpx;
@@ -264,7 +463,8 @@ export default {
         font-size: 34rpx;
         letter-spacing: 2rpx;
       }
-      .ssBtn{
+
+      .ssBtn {
         background: rgba(3, 101, 249, 1);
         border-radius: 8rpx;
         width: 300rpx;
@@ -278,42 +478,51 @@ export default {
         margin-left: 32rpx;
       }
     }
-    .arrowDown{
+
+    .arrowDown {
       position: absolute;
       left: 50%;
       margin-left: -20rpx;
       top: 50rpx;
     }
   }
-  .bottomBody{
+
+  .bottomBody {
     padding: 32rpx;
     background: white;
     width: 100%;
     box-sizing: border-box;
-    .sumBox{
+
+    .sumBox {
       color: rgba(51, 51, 51, 1);
       font-size: 28rpx;
       margin: 24rpx 0;
     }
-    .listBody{
+
+    .listBody {
       display: flex;
       flex-direction: column;
-      :last-child{
+
+      :last-child {
         border-bottom: none !important;
       }
-      .listItem{
+
+      .listItem {
         padding: 24rpx 0;
         border-bottom: 1px solid rgba(230, 230, 230, 1);
-        .firstRow{
+
+        .firstRow {
           display: flex;
           align-items: center;
           justify-content: space-between;
-          .itemTitle{
+
+          .itemTitle {
             font-size: 32rpx;
             color: rgba(51, 51, 51, 1);
             font-weight: 600;
           }
-          .tag{
+
+          .tag {
             width: 120rpx;
             height: 48rpx;
             display: flex;
@@ -321,24 +530,27 @@ export default {
             justify-content: center;
             font-size: 26rpx;
             color: rgba(3, 101, 249, 1);
-            background: linear-gradient( 316deg, #d1e4ff 0%, #adceff 100%);
+            background: linear-gradient(316deg, #d1e4ff 0%, #adceff 100%);
             border-radius: 8rpx;
           }
         }
-        .midRow{
+
+        .midRow {
           display: flex;
           align-items: center;
           color: rgba(136, 136, 136, 1);
           font-size: 28rpx;
           margin: 12rpx 0;
         }
-        .bottomRow{
+
+        .bottomRow {
           display: flex;
           align-items: center;
           color: rgba(51, 51, 51, 1);
           font-size: 28rpx;
           margin-top: 8rpx;
-          .money{
+
+          .money {
             color: rgba(226, 81, 0, 1);
             font-size: 40rpx;
           }

+ 67 - 17
pages/subPackages/housingResources/detail.vue

@@ -27,17 +27,17 @@
         </div>
       </div>
       <div class="housingInfoBody">
-        <div class="housingName">科创园一期A栋1305</div>
+        <div class="housingName">{{ form.groupName + form.floorDiscName + form.buildName + form.roomNo }}</div>
         <div class="housingImportBox">
           <div class="housingImportItem">
             <span class="housingImportInfo">
-              <span style="font-size: 40rpx;font-weight: 600">2899</span>
+              <span style="font-size: 40rpx;font-weight: 600">{{form.guidePrice}}</span>
               元/㎡/月</span>
             <span class="housingInportName">出租指导价</span>
           </div>
           <div class="housingImportItem">
             <span class="housingImportInfo">
-               <span style="font-size: 40rpx;font-weight: 600">355</span>
+               <span style="font-size: 40rpx;font-weight: 600">{{ form.size }}</span>
             </span>
             <span class="housingInportName">
@@ -46,68 +46,68 @@
           </div>
           <div class="housingImportItem">
             <span class="housingImportInfo">
-              <span style="font-size: 40rpx;font-weight: 600">精装</span>
+              <span style="font-size: 40rpx;font-weight: 600">{{ form.decorationSituation }}</span>
             </span>
             <span class="housingInportName">装修情况</span>
           </div>
         </div>
         <div class="placeBox">
           <span class="placeTit">位置</span>
-          <div class="placeInfo">XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</div>
+          <div class="placeInfo">{{ form.address }}</div>
           <img src="../parkActivity/image/dhIcon.png" class="dhIcon">
         </div>
         <div class="housingInfoBox">
           <div class="housingInfoItem">
             <span style="color: red">*</span>
             <span class="infoTitle">区域</span>
-            <span class="infoMsg">科教产业园</span>
+            <span class="infoMsg">{{ form.region }}</span>
           </div>
           <div class="housingInfoItem">
             <span style="color: red">*</span>
             <span class="infoTitle">楼层</span>
-            <span class="infoMsg">19/28</span>
+            <span class="infoMsg">{{ form.floor }}</span>
           </div>
           <div class="housingInfoItem">
             <span style="color: red">*</span>
             <span class="infoTitle">出租单元号</span>
-            <span class="infoMsg">1904号</span>
+            <span class="infoMsg">{{ form.roomNo }}</span>
           </div>
           <div class="housingInfoItem">
             <span style="color: red;visibility: hidden">*</span>
             <span class="infoTitle">平面图单元号</span>
-            <span class="infoMsg">1904号</span>
+            <span class="infoMsg">{{ form.imgNo }}</span>
           </div>
           <div class="housingInfoItem">
             <span style="color: red;">*</span>
             <span class="infoTitle">用途</span>
-            <span class="infoMsg">研发办公</span>
+            <span class="infoMsg">{{ form.roomUse }}</span>
           </div>
           <div class="housingInfoItem">
             <span style="color: red;">*</span>
             <span class="infoTitle">朝向</span>
-            <span class="infoMsg"></span>
+            <span class="infoMsg">{{ form.direction }}</span>
           </div>
           <div class="housingInfoItem">
             <span style="color: red;visibility: hidden">*</span>
-            <span class="infoTitle">重情况(kg/㎡)</span>
-            <span class="infoMsg"></span>
+            <span class="infoTitle">重情况(kg/㎡)</span>
+            <span class="infoMsg">{{ form.bearing }}</span>
           </div>
           <div class="housingInfoItem">
             <span style="color: red;visibility: hidden">*</span>
             <span class="infoTitle">层高(m)</span>
-            <span class="infoMsg">4.5m</span>
+            <span class="infoMsg">{{ form.floorHeight }}</span>
           </div>
           <div class="housingInfoItem">
             <span style="color: red;visibility: hidden">*</span>
             <span class="infoTitle">用电说明</span>
-            <span class="infoMsg"></span>
+            <span class="infoMsg">{{ form.electricity }}</span>
           </div>
           <div class="housingInfoItem" style="margin-top: 12rpx">
             <span style="color: red;visibility: hidden">*</span>
             <span class="infoTitle">备注</span>
           </div>
           <div class="bzInfo">
-            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+            {{ form.remark }}
           </div>
         </div>
         <button class="submitBtn" @click="toPredetermine">去预定</button>
@@ -116,8 +116,16 @@
 </template>
 
 <script>
+import {
+  getRoomInfo,
+} from "@/js_sdk/http";
+import constant from "../../utils/constant";
 export default {
   name: "detail",
+  onLoad(options){
+    this.form.id = options.id
+    this.getById()
+  },
   data() {
     return {
       selectImgType:true,
@@ -132,10 +140,52 @@ export default {
       layOutList:[
         {url:require('./testImg.png')},
         {url:require('./testImg.png')},
-      ]
+      ],
+      form:{
+
+      }
     };
   },
   methods:{
+    getById() {
+      const _this = this
+      getRoomInfo(this.form.id).then(res=>{
+          if(res){
+            this.form = res
+            this.form.imgNo = res.imgNo == null ? '' : this.form.imgNo
+            this.form.bearing = res.bearing == null ? '' : this.form.bearing
+            this.form.floorHeight = res.floorHeight == null ? '' : this.form.floorHeight
+            this.form.electricity = res.electricity == null ? '' : this.form.electricity
+            this.form.remark  = res.remark == null ? '' : this.form.remark
+            // 房型图
+            if(res.planPicture){
+              const layOutList = []
+              res.planPicture.split(',').forEach(v => {
+                if (v) {
+                  layOutList.push({
+                    url: constant.BASE_URI + '/FileController/download/' + v,
+                    id: v
+                  })
+                }
+              })
+              _this.layOutList = layOutList
+            }
+            // 室内外环境
+            if(res.environmentPicture){
+              const envList = []
+              res.environmentPicture.split(',').forEach(v => {
+                if (v) {
+                  envList.push({
+                    url: constant.BASE_URI + '/FileController/download/' + v,
+                    id: v
+                  })
+                }
+              })
+              _this.envList = envList
+            }
+          }
+      })
+    },
     changeType(){
       this.selectImgType = !this.selectImgType
       this.current = 1

+ 1 - 1
pages/subPackages/housingResources/index.vue

@@ -27,7 +27,7 @@ export default {
   },
   methods:{
     onChange(){
-
+      this.active = e.detail.name;
     }
   }
 }

+ 47 - 19
pages/subPackages/propertyNotice/detail.vue

@@ -9,7 +9,7 @@
         <div class="file">
           附件:
           <div style="width: 100%;height: 100%" class="img-list" v-if="imgUrlList.length>0">
-            <img style="width: 100%;height: 100%" v-for="item in imgUrlList" :src="item.url" alt="" />
+            <img style="width: 200rpx;height: 200rpx" v-for="item in imgUrlList" :src="item.url" alt="" />
           </div>
           <div v-for="item in fileUrlList" style=" font-size: 16px; margin: 10px;color: #0000FF" @click="jumpFile(item)">
             {{item.name}}
@@ -21,6 +21,7 @@
 
 <script>
 import { userNoticeAdd,getUserLocalStorageInfo,getParkNoticeById,getPropertyNoticeById } from "@/js_sdk/http";
+import constant from "../../utils/constant";
 export default {
   name: "detail",
   data(){
@@ -77,7 +78,7 @@ export default {
           _this.releaseTime = _this.$common.transServDate(data.releaseTime)
           if (data.fileUrl && data.fileUrl.length > 2) {
             const themeUrlList = []
-            const imgUrlList = []
+            // const imgUrlList = []
             const files = JSON.parse(data.fileUrl)
             files.forEach(item => {
               if (item.url) {
@@ -85,18 +86,31 @@ export default {
                   name: item.name,
                   url: item.url.replace('server', 'smartParkH5Server')
                 }
-                if (item.name.indexOf('png') > -1 || item.name.indexOf('jpg') > -1 || item.name.indexOf('jpeg') > -1) {
-                  imgUrlList.push(ul)
-                } else {
-                  themeUrlList.push(ul)
-                }
+                // if (item.name.indexOf('png') > -1 || item.name.indexOf('jpg') > -1 || item.name.indexOf('jpeg') > -1) {
+                //   imgUrlList.push(ul)
+                // } else {
+                //   themeUrlList.push(ul)
+                // }
+                themeUrlList.push(ul)
               }
             })
-            if (imgUrlList.length > 0) {
-              _this.imgUrlList = imgUrlList
-            }
+            // if (imgUrlList.length > 0) {
+            //   _this.imgUrlList = imgUrlList
+            // }
             _this.fileUrlList = themeUrlList
           }
+          if (data.picture) {
+            const imgUrlList = []
+            data.picture.split(',').forEach(v => {
+              if (v) {
+                imgUrlList.push({
+                  url: constant.BASE_URI + '/FileController/download/' + v,
+                  id: v
+                })
+              }
+            })
+            _this.imgUrlList = imgUrlList
+          }
         })
       } else {
         getPropertyNoticeById({ id: _this.id }).then((res) => {
@@ -113,7 +127,7 @@ export default {
           _this.releaseTime = _this.$common.transServDate(data.releaseTime)
           if (data.fileUrl && data.fileUrl.length > 2) {
             const themeUrlList = []
-            const imgUrlList = []
+            // const imgUrlList = []
             const files = JSON.parse(data.fileUrl)
             files.forEach(item => {
               if (item.url) {
@@ -121,18 +135,32 @@ export default {
                   name: item.name,
                   url: item.url.replace('server', 'smartParkH5Server')
                 }
-                if (item.name.indexOf('png') > -1 || item.name.indexOf('jpg') > -1 || item.name.indexOf('jpeg') > -1) {
-                  imgUrlList.push(ul)
-                } else {
-                  themeUrlList.push(ul)
-                }
+                // if (item.name.indexOf('png') > -1 || item.name.indexOf('jpg') > -1 || item.name.indexOf('jpeg') > -1) {
+                //   imgUrlList.push(ul)
+                // } else {
+                //   themeUrlList.push(ul)
+                // }
+                themeUrlList.push(ul)
               }
             })
-            if (imgUrlList.length > 0) {
-              _this.imgUrlList = imgUrlList
-            }
+            // if (imgUrlList.length > 0) {
+            //   _this.imgUrlList = imgUrlList
+            // }
             _this.fileUrlList = themeUrlList
           }
+          if (data.picture) {
+            const imgUrlList = []
+            data.picture.split(',').forEach(v => {
+              if (v) {
+                imgUrlList.push({
+                  url: constant.BASE_URI + '/FileController/download/' + v,
+                  id: v
+                })
+              }
+            })
+            _this.imgUrlList = imgUrlList
+          }
+
         })
       }
     }

+ 428 - 0
pages/subPackages/resourceReservation_manage/edit.vue

@@ -0,0 +1,428 @@
+<template>
+  <div class="resourceAdd">
+    <div class="topBox">
+      <div class="topTitle">资源预约</div>
+      <div class="choosTimeBox">
+        <span class="msg">使用时间</span>
+        <span class="choosIpt" @click="showTime('startTime')">{{ startTime }} </span>
+        <span class="choosIpt" @click="showTimeList('startTime')">{{ timeListStr }} </span>
+        <!--            <input placeholder="请选择时间段" class="choosIpt" disabled>-->
+      </div>
+    </div>
+    <ul class="predetermineUl">
+      <li class="detailLi">
+        <span class="liName">主题</span>
+        <span>
+               <input class="liInfo" placeholder="请填写" v-model="form.subject">
+          </span>
+      </li>
+      <li class="detailLi">
+        <span class="liName">容纳人数</span>
+        <span>
+               <input class="liInfo" placeholder="请填写整数" v-model="form.peopleNumber">
+          </span>
+      </li>
+      <li class="detailLi">
+        <span class="liName">联系人</span>
+        <span>
+               <input class="liInfo" placeholder="请填写" v-model="form.contacts">
+          </span>
+      </li>
+      <li class="detailLi">
+        <span class="liName">联系电话</span>
+        <span>
+               <input class="liInfo" placeholder="请填写" v-model="form.phone">
+          </span>
+      </li>
+      <li class="detailLi2" style="border-bottom: none">
+        <div class="titleBox">
+          <span class="liName">备注</span>
+        </div>
+        <van-field
+            :value="form.remarks"
+            autosize
+            type="textarea"
+            placeholder="请输入"
+            class="myField"
+            maxlength="2000"
+            show-word-limit
+            @change="changeMsg"
+        />
+      </li>
+    </ul>
+    <ul class="predetermineUl">
+      <li class="detailLi">
+        <span class="liName">预约单位</span>
+        <span>
+               <input class="liInfo" placeholder="" v-model="form.unit">
+          </span>
+      </li>
+      <li class="detailLi">
+        <span class="liName">预约人</span>
+        <span>
+               <input class="liInfo" placeholder="请填写" v-model="form.appointUserName">
+          </span>
+      </li>
+      <li class="detailLi">
+        <span class="liName">预约时间</span>
+        <span>
+               <input class="liInfo" placeholder="请填写" v-model="form.appointTime" disabled>
+          </span>
+      </li>
+    </ul>
+    <div class="buttonBox">
+      <button class="btn zcBtn" @click="meetingAppointSubmit('1')">暂存</button>
+      <button class="btn tjBtn" @click="meetingAppointSubmit('6')">提交</button>
+    </div>
+    <van-popup
+        :show="timeShow"
+        position="bottom"
+        custom-style="height: 50%;"
+    >
+      <van-datetime-picker
+          type="date"
+          :value="currentDate"
+          :formatter="formatter"
+          @cancel="timeShow=false"
+          @confirm="selectTime"
+      />
+    </van-popup>
+    <van-popup
+        :show="timeListShow"
+        position="bottom"
+        custom-style="height: 50%;"
+    >
+      <van-picker
+          show-toolbar
+          :columns="timeList"
+          value-key="label"
+          @confirm="selectTimeList"
+          @cancel="timeListShow = false"
+      />
+
+    </van-popup>
+  </div>
+</template>
+
+<script>
+import {getByCodes, getUserDept, getUserLocalStorageInfo, meetingAppointDetail, meetingAppointCheck, meetingAppointEdit} from "@/js_sdk/http";
+import dayjs from "dayjs";
+export default {
+  name: "add",
+  data() {
+    return {
+      dc_key: ['timeSlot'],
+      getUserLocalStorageInfo: getUserLocalStorageInfo(),
+      theme: '',
+      unit: '',
+      postData: {},
+      form: {
+        // createdId: getUserLocalStorageInfo().userId,
+        // appointTime: dayjs().format('YYYY-MM-DD HH:mm'),
+        // userType: getUserLocalStorageInfo().userType
+      },
+      id: '',
+      startTime: '请选择使用时间',
+      timeShow: false,
+      timePickerType: '',
+      currentDate: new Date().getTime(),
+      timeList: [], //  时间段列表
+      timeListStr: '请选择时间段',
+      timeListShow: false,
+      dic_SelectList: [],
+    }
+  },
+  created() {
+    this.getByCodes()
+  },
+  onLoad(options) {
+    this.id = options.id
+    this.getById()
+  },
+  onShow() {
+
+  },
+  methods: {
+    async getByCodes() {
+      let data = await getByCodes(JSON.stringify(this.dc_key));
+      this.dic_SelectList = this.$common.handleDicList(data);
+      this.timeList = this.dic_SelectList.timeSlot
+      console.log('this.timeList', this.timeList)
+    },
+    showTime(e) {
+      this.timePickerType = e
+      this.timeShow = true
+    },
+    showTimeList(e) {
+      this.timePickerType = e
+      this.timeListShow = true
+    },
+    // 时间戳转换方法
+    timestampToDate(timestamp) {
+      const date = new Date(timestamp); // 如果timestamp是字符串,确保它是整数:parseInt(timestamp)
+      const year = date.getFullYear();
+      const month = (date.getMonth() + 1).toString().padStart(2, '0');
+      const day = date.getDate().toString().padStart(2, '0');
+      const hours = date.getHours().toString().padStart(2, '0');
+      const minutes = date.getMinutes().toString().padStart(2, '0');
+      const seconds = date.getSeconds().toString().padStart(2, '0');
+      return `${year}-${month}-${day}`;
+    },
+    // 时间选择单位
+    formatter(type, val) {
+      if (type === 'year') {
+        return `${val}年`;
+      } else if (type === 'month') {
+        return `${val}月`;
+      } else if (type === 'day') {
+        return `${val}日`;
+      } else if (type === 'hour') {
+        return `${val}时`;
+      } else if (type === 'minute') {
+        return `${val}分`;
+      }
+      return val;
+    },
+    selectTime(e) {
+      const dateString = this.timestampToDate(e.detail);
+      this.startTime = dateString
+      this.timeShow = false
+      // this.getRoomTime(this.startTime)
+    },
+    selectTimeList(e) {
+      const data = {
+        id: this.meetingRoomId,
+        dateStr: this.startTime,
+        timeSlot: e.detail.value.value
+      }
+      meetingAppointCheck(data).then((res) => {
+        if (res.code == '200') {
+          this.timeListStr = e.detail.value.label
+          this.form.timeSlot = e.detail.value.value
+          this.timeListShow = false
+        } else {
+          this.$showToast("时间段已占用或已冻结,请重新选择");
+        }
+      }).catch(err => {
+        this.$showToast(err);
+      })
+
+    },
+    changeMsg(e){
+      this.form.remarks = e.detail
+    },
+    getById(){
+      const data = {
+        id: this.id
+      }
+      meetingAppointDetail(data).then(res=>{
+        if(res.code == '200'){
+          this.form = res.data.oderDetial
+          this.startTime = this.form.useTime
+          let index = this.timeList.findIndex((e) => e.value == this.form.timeSlot)
+          this.timeListStr = this.timeList[index].label
+          console.log('form.appointTime', this.form.appointTime)
+        }
+      })
+    },
+    // 编辑预约
+    meetingAppointSubmit(e) {
+      if (this.startTime !== '' && this.startTime !== null && this.startTime !== undefined &&
+          this.endTime !== '' && this.endTime !== null && this.endTime !== undefined) {
+        uni.showToast({
+          title: "请选择使用时间",
+        });
+        return false
+      }
+      this.form.state = e
+      this.form.useTime = this.startTime
+      console.log('提交预约_:', this.form)
+      meetingAppointEdit(this.form).then((res) => {
+        console.log('提交预约_:', res)
+        if (res.code == '200') {
+          uni.showToast({
+            title: '预约成功',
+            icon: 'success',
+            mask: true,
+            duration: 1000
+          });
+          let pages = getCurrentPages(); // 获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。
+          let nowPage = pages[pages.length - 1]; //当前页页面实例
+          let prevPage = pages[pages.length - 2]; //上一页页面实例
+          prevPage.$vm.otherFun("back")// 給上一頁綁定方法otherFun,傳參object
+          uni.navigateBack({
+            delta:1 // 可以不傳delta值,默認為1
+          })
+        } else {
+          uni.showToast({
+            title: res.msg,
+            icon: 'success',
+            mask: true,
+            duration: 1000
+          });
+        }
+      })
+    },
+
+
+  }
+}
+</script>
+
+<style lang="scss">
+.resourceAdd {
+  .topBox {
+    padding: 24rpx 32rpx;
+    background: white;
+    margin: 24rpx 0;
+
+    .topTitle {
+      color: rgba(34, 34, 34, 1);
+      font-size: 36rpx;
+      font-weight: 600;
+    }
+
+    .choosTimeBox {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+
+      .msg {
+        color: rgba(51, 51, 51, 1);
+        font-size: 32rpx;
+        white-space: nowrap;
+      }
+
+      .choosIpt {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        width: 260rpx;
+        height: 96rpx;
+        font-size: 32rpx;
+        background: rgba(245, 247, 250, 1);
+        box-sizing: border-box;
+      }
+    }
+  }
+
+  .predetermineUl {
+    margin: 24rpx 0;
+    background: white;
+    box-sizing: border-box;
+    padding: 0 32rpx;
+
+    .predetermineLi {
+      padding: 32rpx 0;
+      border-bottom: 1px solid rgba(230, 230, 230, 1);
+      display: flex;
+      justify-content: space-between;
+    }
+
+    .predetermineLi2 {
+      padding: 32rpx 0;
+      border-bottom: 1px solid rgba(230, 230, 230, 1);
+      display: flex;
+      flex-direction: column;
+    }
+
+    .van-cell {
+      background: #F5F7FA !important;
+      border-radius: 8rpx;
+      font-size: 28rpx;
+      margin-top: 16rpx;
+    }
+
+    .liName {
+      color: rgba(51, 51, 51, 1);
+      font-size: 32rpx;
+    }
+
+    .liIpt {
+      color: rgba(102, 102, 102, 1);
+      font-size: 32rpx;
+      text-align: right;
+    }
+
+    .detailLi {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 32rpx 0;
+      border-bottom: 2rpx solid #E6E6E6;
+
+      .liInfo {
+        display: inline-block;
+        text-align: right;
+        max-width: 488rpx;
+        width: 488rpx;
+        color: rgba(102, 102, 102, 1);
+        font-size: 32rpx;
+        line-height: 38rpx;
+
+        .radio {
+          margin-left: 64rpx;
+        }
+      }
+    }
+
+    .detailLi2 {
+      display: flex;
+      flex-direction: column;
+      padding: 32rpx 0;
+      border-bottom: 2rpx solid #E6E6E6;
+
+      .detailLi2BoxTop {
+        display: flex;
+        flex-wrap: wrap;
+        justify-content: space-between;
+        margin: 12rpx 0;
+
+        .checkItem {
+          width: 128rpx;
+          height: 64rpx;
+          font-size: 28rpx;
+          color: #666666;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          background: #F5F7FA;
+          border-radius: 8rpx;
+          margin: 12rpx 0;
+        }
+
+        .checked {
+          background: #0365F9;
+          color: white;
+        }
+      }
+    }
+  }
+
+  .buttonBox {
+    display: flex;
+    justify-content: center;
+
+    .btn {
+      width: 240rpx;
+      height: 80rpx;
+      display: flex;
+      border-radius: 8rpx;
+      align-items: center;
+      justify-content: center;
+      margin: 48rpx 16rpx 150rpx 16rpx;
+      color: white;
+      letter-spacing: 2rpx;
+      text-indent: 2rpx;
+    }
+
+    .zcBtn {
+      background: #FE8643;
+    }
+
+    .tjBtn {
+      background: #0365F9;
+    }
+  }
+}
+</style>