xll 1 day ago
parent
commit
1d271cd924
49 changed files with 1752 additions and 858 deletions
  1. 2 1
      app.json
  2. 66 39
      nova-tourism/components/collect/index.js
  3. 2 2
      nova-tourism/components/collect/index.less
  4. 39 36
      nova-tourism/components/collect/index.wxml
  5. 0 0
      nova-tourism/components/collect/index.wxss
  6. 108 10
      nova-tourism/components/dev-route/index.js
  7. 106 94
      nova-tourism/components/dev-route/index.less
  8. 82 52
      nova-tourism/components/dev-route/index.wxml
  9. 7 0
      nova-tourism/components/dev-route/index.wxss
  10. 2 1
      nova-tourism/components/homestay/index.less
  11. 2 0
      nova-tourism/components/homestay/index.wxss
  12. 32 3
      nova-tourism/components/suggest/index.js
  13. 1 1
      nova-tourism/components/suggest/index.less
  14. 29 21
      nova-tourism/components/suggest/index.wxml
  15. 0 1
      nova-tourism/components/suggest/index.wxss
  16. 1 1
      nova-tourism/pages/collect/collect-detail/index.less
  17. 3 3
      nova-tourism/pages/collect/collect-detail/index.wxml
  18. 1 1
      nova-tourism/pages/collect/collect-detail/index.wxss
  19. 153 0
      nova-tourism/pages/collect/good-list/index.js
  20. 10 0
      nova-tourism/pages/collect/good-list/index.json
  21. 90 0
      nova-tourism/pages/collect/good-list/index.less
  22. 32 0
      nova-tourism/pages/collect/good-list/index.wxml
  23. 89 0
      nova-tourism/pages/collect/good-list/index.wxss
  24. 1 2
      nova-tourism/pages/homestay/homestay-detail/index.js
  25. 6 29
      nova-tourism/pages/homestay/homestay-detail/index.wxml
  26. 149 106
      nova-tourism/pages/my/merchant/code-verify/index.js
  27. 27 0
      nova-tourism/pages/my/merchant/code-verify/index.less
  28. 69 38
      nova-tourism/pages/my/merchant/code-verify/index.wxml
  29. 81 1
      nova-tourism/pages/my/merchant/code-verify/index.wxss
  30. 69 42
      nova-tourism/pages/my/merchant/merchant-home/account/index.js
  31. 2 1
      nova-tourism/pages/my/merchant/merchant-home/account/index.json
  32. 2 2
      nova-tourism/pages/my/merchant/merchant-home/account/index.less
  33. 16 6
      nova-tourism/pages/my/merchant/merchant-home/account/index.wxml
  34. 58 1
      nova-tourism/pages/my/merchant/merchant-home/account/index.wxss
  35. 1 1
      nova-tourism/pages/my/merchant/merchant-home/index.js
  36. 1 1
      nova-tourism/pages/my/merchant/room-manage/index.js
  37. 14 7
      nova-tourism/pages/my/merchant/room-manage/room-edit/index.js
  38. 2 1
      nova-tourism/pages/my/merchant/room-manage/room-edit/index.json
  39. 56 66
      nova-tourism/pages/my/merchant/room-manage/room-edit/index.wxml
  40. 39 11
      nova-tourism/pages/my/my-order/index.js
  41. 5 4
      nova-tourism/pages/my/my-order/index.wxml
  42. 238 180
      nova-tourism/pages/my/my-order/order-detail/index.js
  43. 4 1
      nova-tourism/pages/my/my-order/order-detail/index.json
  44. 20 0
      nova-tourism/pages/my/my-order/order-detail/index.less
  45. 23 87
      nova-tourism/pages/my/my-order/order-detail/index.wxml
  46. 0 0
      nova-tourism/pages/my/my-order/order-detail/index.wxss
  47. 1 1
      nova-tourism/pages/my/my-wallet/index.wxml
  48. 1 1
      nova-tourism/pages/my/my-wallet/loose-change/index.wxml
  49. 10 3
      project.private.config.json

+ 2 - 1
app.json

@@ -39,7 +39,8 @@
         "pages/my/my-order/order-detail-good/index",
         "pages/my/my-order/order-detail-good/index",
         "pages/my/my-order/my-refund/refund-good/index",
         "pages/my/my-order/my-refund/refund-good/index",
         "pages/my/merchant/good/good-edit/index",
         "pages/my/merchant/good/good-edit/index",
-        "pages/my/merchant/good/good-list/index"
+        "pages/my/merchant/good/good-list/index",
+        "pages/collect/good-list/index"
       ]
       ]
     },
     },
     {
     {

+ 66 - 39
nova-tourism/components/collect/index.js

@@ -17,22 +17,28 @@ Component({
    */
    */
   data: {
   data: {
     taps: [{
     taps: [{
+        id: 'gift',
+        top:900,
         url: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20241230/r1kr6b044821198.png',
         url: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20241230/r1kr6b044821198.png',
         tex: '望仙礼遇',
         tex: '望仙礼遇',
       },
       },
       {
       {
+        id: 'makeup',
         url: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20241230/r1on6t044840728.png',
         url: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20241230/r1on6t044840728.png',
         tex: '妆造旅拍',
         tex: '妆造旅拍',
       },
       },
       {
       {
+        id: 'vegetable',
         url: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20241230/v16vb1044858389.png',
         url: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20241230/v16vb1044858389.png',
         tex: '望仙果蔬',
         tex: '望仙果蔬',
       },
       },
       {
       {
+        id: 'serve',
         url: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20241230/dm2ol9044926231.png',
         url: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20241230/dm2ol9044926231.png',
         tex: '房务服务',
         tex: '房务服务',
       },
       },
       {
       {
+        id: 'school',
         url: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20241231/1pglm9032750560.png',
         url: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20241231/1pglm9032750560.png',
         tex: '商学院',
         tex: '商学院',
       },
       },
@@ -49,9 +55,9 @@ Component({
     istoday: true,
     istoday: true,
     daysBetween: 1,
     daysBetween: 1,
     currentTab: 0, // 云上风物/我的收藏
     currentTab: 0, // 云上风物/我的收藏
-    banner:[],//热门推荐
-    giftBanner:[],//望仙礼遇-轮播图
-    gift:[],//望仙礼遇-商品
+    banner: [], //热门推荐
+    giftBanner: [], //望仙礼遇-轮播图
+    gift: [], //望仙礼遇-商品
   },
   },
   lifetimes: {
   lifetimes: {
     detached: function () {},
     detached: function () {},
@@ -66,7 +72,7 @@ Component({
    * 组件的方法列表
    * 组件的方法列表
    */
    */
   methods: {
   methods: {
-    refersh(){
+    refersh() {
       this.getBanner()
       this.getBanner()
       this.getGiftBanner()
       this.getGiftBanner()
       this.getGift()
       this.getGift()
@@ -78,42 +84,53 @@ Component({
         currentTab: index
         currentTab: index
       });
       });
     },
     },
-/**获取热门推荐 */
-async getBanner(){
-  let query = new Parse.Query('Banner')
-  query.equalTo('company',company)
-  query.notEqualTo('isDeleted',true)
-  query.equalTo('isEnabled',true)
-  query.equalTo('type','season')
-  query.include('shopGoods')
-  let d = await query.find()
-  let banner = []
-  banner=d?.map(item=>{
-    let obj = {}
-    obj.image = item?.get('image')||item?.get('shopGoods')?.get('image')
-    obj.url = item?.get('url')||`/nova-tourism/pages/collect/collect-detail/index?gid=${item?.get('shopGoods')?.id}`
-    return obj
-  })
-  this.setData({banner})
-},
-/**获取望仙礼遇-轮播图 */
-async getGiftBanner(){
-  let sql = `SELECT good."objectId",good."image"
+    /**获取热门推荐 */
+    async getBanner() {
+      let query = new Parse.Query('Banner')
+      query.equalTo('company', company)
+      query.notEqualTo('isDeleted', true)
+      query.equalTo('isEnabled', true)
+      query.equalTo('type', 'season')
+      query.include('shopGoods')
+      let d = await query.find()
+      let banner = []
+      banner = d?.map(item => {
+        let obj = {}
+        obj.image = item?.get('image') || item?.get('shopGoods')?.get('image')
+        // obj.url = item?.get('url')||`/nova-tourism/pages/collect/collect-detail/index?gid=${item?.get('shopGoods')?.id}`
+        if (item?.get('url')) {
+          obj.url = item?.get('url')
+        } else if (item?.get('shopGoods')?.id) {
+          obj.url = `/nova-tourism/pages/collect/collect-detail/index?gid=${item?.get('shopGoods')?.id}`
+        } else {
+          obj.url = ''
+        }
+        return obj
+      })
+      this.setData({
+        banner
+      })
+    },
+    /**获取望仙礼遇-轮播图 */
+    async getGiftBanner() {
+      let sql = `SELECT good."objectId",good."image"
   FROM "ShopGoods" good
   FROM "ShopGoods" good
-  WHERE good."company" = 'EbxZUK5lBI'
+  WHERE good."company" = '${company}'
   AND good."isDeleted" IS NOT TRUE
   AND good."isDeleted" IS NOT TRUE
   AND good."status" IS TRUE
   AND good."status" IS TRUE
   ORDER BY COALESCE(good."isRecom", FALSE) DESC,
   ORDER BY COALESCE(good."isRecom", FALSE) DESC,
   CASE WHEN good."top"= 0 THEN 1 ELSE 0 END,
   CASE WHEN good."top"= 0 THEN 1 ELSE 0 END,
   good."top" ASC
   good."top" ASC
   LIMIT 8`
   LIMIT 8`
-  let giftBanner = await req.customSQL(sql)||[]
-  this.setData({giftBanner})
-  console.log(giftBanner)
-},
-/** 获取望仙礼遇-商品*/
-async getGift(){
-  let sql = `SELECT good."objectId",good."name",good."price",good."image"
+      let giftBanner = await req.customSQL(sql) || []
+      this.setData({
+        giftBanner
+      })
+      console.log(giftBanner)
+    },
+    /** 获取望仙礼遇-商品*/
+    async getGift() {
+      let sql = `SELECT good."objectId",good."name",good."price",good."image"
   FROM "ShopGoods" good
   FROM "ShopGoods" good
   WHERE good."company" = '${company}'
   WHERE good."company" = '${company}'
   AND good."isDeleted" IS NOT TRUE
   AND good."isDeleted" IS NOT TRUE
@@ -122,12 +139,22 @@ async getGift(){
   CASE WHEN good."top"= 0 THEN 1 ELSE 0 END,
   CASE WHEN good."top"= 0 THEN 1 ELSE 0 END,
   good."top" ASC,good."createdAt"
   good."top" ASC,good."createdAt"
   LIMIT 4`
   LIMIT 4`
-  let gift = await req.customSQL(sql)||[]
-  console.log(gift)
-  this.setData({gift})
-},
-
-
+      let gift = await req.customSQL(sql) || []
+      console.log(gift)
+      this.setData({
+        gift
+      })
+    },
+    /**锚点跳转 */
+    anchors(e) {
+      let {
+        top
+      } = e.currentTarget.dataset
+      wx.pageScrollTo({
+        scrollTop:top,
+        duration: 300
+      });
+    },
 
 
 
 
     //获取收藏店铺消息
     //获取收藏店铺消息

+ 2 - 2
nova-tourism/components/collect/index.less

@@ -54,11 +54,11 @@
         }
         }
         .picturebox{
         .picturebox{
             width: 700rpx;
             width: 700rpx;
-            height: 714rpx;
+            height: 908rpx;
             position: relative;
             position: relative;
             .img{
             .img{
                 width: 100%;
                 width: 100%;
-                height: 714rpx;
+                height: 908rpx;
                 image{
                 image{
                     width: 100%;
                     width: 100%;
                     height: 100%;
                     height: 100%;

+ 39 - 36
nova-tourism/components/collect/index.wxml

@@ -14,7 +14,7 @@
     <view class="box">
     <view class="box">
       <view class="taps">
       <view class="taps">
         <block wx:for="{{taps}}" wx:key="index">
         <block wx:for="{{taps}}" wx:key="index">
-          <view class="tap">
+          <view class="tap" data-top="{{item.top}}" bind:tap="anchors">
             <image src="{{item.url}}"></image>
             <image src="{{item.url}}"></image>
             <view class="tap-tex">{{item.tex}}</view>
             <view class="tap-tex">{{item.tex}}</view>
           </view>
           </view>
@@ -31,45 +31,48 @@
         </swiper>
         </swiper>
       </view>
       </view>
 
 
-      <view class="wangbox">
-        <view class="wang">望仙礼遇</view>
-        <view class="wang2">望日w望月w来望仙w</view>
-      </view>
-      <view class="picturebox2">
-        <swiper autoplay="{{true}}" indicator-dots='{{true}}' indicator-color='#D9D9D9' indicator-active-color='#F8DA7F' interval="{{5000}}" circular duration="{{500}}" class="img">
-          <block wx:for="{{giftBanner}}" wx:key="index" wx:for-item="gifban">
-            <swiper-item class="img">
-              <image style="border-radius: 10rpx;" src="{{gifban.image}}" mode="aspectFill"></image>
-            </swiper-item>
-          </block>
-        </swiper>
-      </view>
-
-      <view class="wang-cardbox">
-        <block wx:for="{{gift}}" wx:key="index">
-          <view class="wang-card" data-url="/nova-tourism/pages/collect/collect-detail/index?gid={{item.objectId}}" bindtap="tourl">
-            <image src="{{item.image||'https://img95.699pic.com/photo/60072/5330.jpg_wh860.jpg'}}" mode="aspectFill"></image>
-            <view class="wang-catex">{{item.name}}</view>
-            <view class="wang-numbox">
-              <view class="wang-num">
-                <view class="wang-num1">¥</view>
-                <view class="wang-num2">{{item.price||0}}</view>
+      <view id="gift">
+        <view class="wangbox">
+          <view class="wang">望仙礼遇</view>
+          <view class="wang2">望日w望月w来望仙w</view>
+        </view>
+        <view class="picturebox2">
+          <swiper autoplay="{{true}}" indicator-dots='{{true}}' indicator-color='#D9D9D9' indicator-active-color='#F8DA7F' interval="{{5000}}" circular duration="{{500}}" class="img">
+            <block wx:for="{{giftBanner}}" wx:key="index" wx:for-item="gifban">
+              <swiper-item class="img">
+                {{}}
+                <image data-url="/nova-tourism/pages/collect/collect-detail/index?gid={{gifban.objectId}}" bindtap="tourl" style="border-radius: 10rpx;" src="{{gifban.image||'https://file-cloud.fmode.cn/EbxZUK5lBI/20250411/frvr1u080411965.jpg'}}" mode="aspectFill"></image>
+              </swiper-item>
+            </block>
+          </swiper>
+        </view>
+        <view class="wang-cardbox">
+          <block wx:for="{{gift}}" wx:key="index">
+            <view class="wang-card" data-url="/nova-tourism/pages/collect/collect-detail/index?gid={{item.objectId}}" bindtap="tourl">
+              <image src="{{item.image||'https://img95.699pic.com/photo/60072/5330.jpg_wh860.jpg'}}" mode="aspectFill"></image>
+              <view class="wang-catex">{{item.name}}</view>
+              <view class="wang-numbox">
+                <view class="wang-num">
+                  <view class="wang-num1">¥</view>
+                  <view class="wang-num2">{{item.price||0}}</view>
+                </view>
+                <view class="wang-submit">购买</view>
               </view>
               </view>
-              <view class="wang-submit">购买</view>
             </view>
             </view>
-          </view>
-        </block>
-      </view>
-
-      <view class="more">
-        <view class="more-tex">查看更多 ></view>
+          </block>
+        </view>
+        <view class="more" data-url="/nova-tourism/pages/collect/good-list/index" bind:tap="tourl">
+          <view class="more-tex">查看更多 ></view>
+        </view>
       </view>
       </view>
-
-      <view class="wangbox">
-        <view class="wang">妆造旅拍</view>
+      <view id="makeup">
+        <view class="wangbox">
+          <view class="wang">妆造旅拍</view>
+        </view>
       </view>
       </view>
-
-
+      <view id="vegetable"></view>
+      <view id="serve"></view>
+      <view id="school"></view>
     </view>
     </view>
   </view>
   </view>
   <view wx:if="{{currentTab == 1}}">
   <view wx:if="{{currentTab == 1}}">

File diff suppressed because it is too large
+ 0 - 0
nova-tourism/components/collect/index.wxss


+ 108 - 10
nova-tourism/components/dev-route/index.js

@@ -4,7 +4,15 @@ const company = getApp().globalData.company
 const uid = Parse.User.current()?.id
 const uid = Parse.User.current()?.id
 const req = require('../../../utils/request')
 const req = require('../../../utils/request')
 Component({
 Component({
-
+  //字段编辑对象示例:
+  // edit_field_map: {
+  //   isRecom:{
+  //     isHide:true,//是否隐藏 - 此项非DevRouter编辑
+  //     disabled: true,//禁止编辑
+  //     required: true,//必填项
+  //     default:true,//默认值
+  //   },
+  // }, 
   /**
   /**
    * 组件的属性列表
    * 组件的属性列表
    */
    */
@@ -35,6 +43,17 @@ Component({
   lifetimes: {
   lifetimes: {
     detached: function () {},
     detached: function () {},
     attached: async function () {
     attached: async function () {
+      console.log(`
+      //字段编辑对象示例:
+      // edit_field_map: {
+      //   isRecom:{
+      //     isHide:true,//是否隐藏 - 此项非DevRouter编辑
+      //     disabled: true,//禁止编辑
+      //     required: true,//必填项
+      //     default:true,//默认值
+      //   },
+      // }, 
+      `)
       this.getToken()
       this.getToken()
       setTimeout(() => {
       setTimeout(() => {
         this.refersh()
         this.refersh()
@@ -71,7 +90,7 @@ Component({
       let editFieldsList = []
       let editFieldsList = []
       for (let i in devRoute?.editFields) {
       for (let i in devRoute?.editFields) {
         let item = devRoute?.editFields[i]
         let item = devRoute?.editFields[i]
-        if (item.key in edit_field_map) { //如果当前字段存在于父组件传递的默认编辑字段之内
+        if (edit_field_map && item.key in edit_field_map) { //如果当前字段存在于父组件传递的默认编辑字段之内
           if (('isHide' in edit_field_map[item.key]) && edit_field_map[item.key]['isHide']) {} else { //排除isHide为true的字段,其他字段使用父组件默认编辑
           if (('isHide' in edit_field_map[item.key]) && edit_field_map[item.key]['isHide']) {} else { //排除isHide为true的字段,其他字段使用父组件默认编辑
             for (let map_key in edit_field_map[item.key]) {
             for (let map_key in edit_field_map[item.key]) {
               devRoute.editFields[i][map_key] = edit_field_map[item.key][map_key]
               devRoute.editFields[i][map_key] = edit_field_map[item.key][map_key]
@@ -516,7 +535,54 @@ Component({
       })
       })
     },
     },
 
 
-    //#region ShopGoods表specMap字段编辑  ================================================
+    /**选择位置 */
+    chooseGeoPoint(e) {
+      let {
+        editMap
+      } = this.data
+      let {
+        key
+      } = e.currentTarget.dataset
+      let that = this
+      wx.chooseLocation({
+        latitude: 0,
+        longitude: 0,
+        success: (res) => {
+          console.log(res)
+          editMap[key].val = {
+            __type: 'GeoPoint',
+            latitude: res.latitude || 0,
+            longitude: res.longitude || 0
+          }
+          editMap[key].text = (res.address || '') + (res.name || '')
+          that.setData({
+            editMap
+          })
+        }
+      })
+    },
+    /** textarea改变 - Object类型内属性值改变 */
+    changeJsonTextarea(e) {
+      let {
+        editMap
+      } = this.data
+      console.log(e)
+      let {
+        key,
+        json_key
+      } = e.currentTarget.dataset
+      let {
+        value
+      } = e.detail
+      let obj = editMap[key].val||{}
+      obj[json_key] = value
+      editMap[key].val=obj
+      this.setData({
+        editMap
+      })
+    },
+
+    //#region Object类型 规格specMap编辑  ================================================
     /**添加属性 - specMap字段 */
     /**添加属性 - specMap字段 */
     addKey_ShopGoods_specMap(e) {
     addKey_ShopGoods_specMap(e) {
       console.log(e)
       console.log(e)
@@ -554,7 +620,6 @@ Component({
       console.log(key, spec_index)
       console.log(key, spec_index)
       let text = editMap[key].val.specList[spec_index]
       let text = editMap[key].val.specList[spec_index]
       console.log(text)
       console.log(text)
-
       delete editMap[key].val[text]
       delete editMap[key].val[text]
       editMap[key].val.specList.splice(spec_index, 1)
       editMap[key].val.specList.splice(spec_index, 1)
       this.setData({
       this.setData({
@@ -668,7 +733,6 @@ Component({
       }
       }
       for (let i in editFields) {
       for (let i in editFields) {
         let item = editFields[i]
         let item = editFields[i]
-
         if (item.required && ((!editMap[item.key].val) || editMap[item.key].val?.length <= 0)) {
         if (item.required && ((!editMap[item.key].val) || editMap[item.key].val?.length <= 0)) {
           wx.showToast({
           wx.showToast({
             title: `${item.name} 为必填项,请补充`,
             title: `${item.name} 为必填项,请补充`,
@@ -676,10 +740,14 @@ Component({
           })
           })
           return
           return
         }
         }
-        if((!editMap[item.key].val) || editMap[item.key].val?.length <= 0) continue
+        if ((!editMap[item.key].val) || editMap[item.key].val?.length <= 0) continue
         if (item.type == 'Number') {
         if (item.type == 'Number') {
           editMapParse[item.key] = parseFloat(editMap[item.key].val)
           editMapParse[item.key] = parseFloat(editMap[item.key].val)
-        } else if (item.type == 'String' && item.view == 'edit-image') {
+        }
+        else if(item.type == 'Pointer'){
+          editMapParse[item.key] = {__type:'Pointer',className:item?.targetClass,objectId:editMap[item.key].val?.objectId}
+        }
+        else if (item.type == 'String' && item.view == 'edit-image') {
           editMapParse[item.key] = editMap[item.key].val[0]?.url
           editMapParse[item.key] = editMap[item.key].val[0]?.url
         } else if (item.type == 'Array') {
         } else if (item.type == 'Array') {
           if (item.view == 'edit-image') {
           if (item.view == 'edit-image') {
@@ -694,6 +762,7 @@ Component({
             })
             })
           }
           }
         }
         }
+        console.log(item.key, editMapParse[item.key] || editMap[item.key].val)
         queryParamsData.set(item.key, editMapParse[item.key] || editMap[item.key].val)
         queryParamsData.set(item.key, editMapParse[item.key] || editMap[item.key].val)
       }
       }
       console.log(editMap)
       console.log(editMap)
@@ -704,8 +773,37 @@ Component({
           delta: 1
           delta: 1
         })
         })
       }, 1000);
       }, 1000);
-     
-    }
-
+    },
+    /** 复制*/
+    copyStr(e) {
+      let {
+        str
+      } = e.currentTarget.dataset
+      if (str) {
+        wx.setClipboardData({
+          data: str,
+          success: () => {
+            wx.showToast({
+              title: '复制成功',
+              icon: 'success',
+            });
+          },
+          fail: (err) => {
+            console.error('复制失败:', err);
+            wx.showToast({
+              title: '复制失败',
+              icon: 'none',
+              duration: 2000
+            });
+          }
+        });
+      } else {
+        wx.showToast({
+          title: '文本为空',
+          icon: 'none',
+          duration: 2000
+        });
+      }
+    },
   }
   }
 })
 })

+ 106 - 94
nova-tourism/components/dev-route/index.less

@@ -12,134 +12,146 @@
         font-size: @name-size;
         font-size: @name-size;
         padding-bottom: 10rpx;
         padding-bottom: 10rpx;
     }
     }
-.content{
-    padding: 0 20rpx;
-    .text {
-        display: flex;
-        align-items: flex-end;
-
-        >textarea {
-            width: 550rpx;
-            padding: 10rpx;
-            margin: 5rpx 0;
-            font-size: @text-size;
-            min-height: 100rpx;
-            background: whitesmoke;
-        }
 
 
-        .btn {
-            margin: 0 10rpx;
-            padding: 5rpx 10rpx;
-            font-size: @text-size;
-            background: @main-color;
-        }
+    .content {
+        padding: 0 20rpx;
 
 
-        .title {
-            margin-right: 20rpx;
-            font-size: @text-size;
-        }
-    }
+        .text {
+            display: flex;
+            align-items: flex-end;
 
 
-    .radioGroup {
-        .radio {
-            font-size: @text-size;
-            padding: 5rpx;
-        }
-    }
+            >textarea {
+                width: 550rpx;
+                padding: 10rpx;
+                margin: 5rpx 0;
+                font-size: @text-size;
+                min-height: 100rpx;
+                background: whitesmoke;
+            }
 
 
-    .tags {
-        margin-bottom: 10rpx;
+            .btn {
+                margin: 0 10rpx;
+                padding: 5rpx 10rpx;
+                font-size: @text-size;
+                background: @main-color;
+            }
 
 
-        van-tag {
-            margin-right: 10rpx;
+            .title {
+                margin-right: 20rpx;
+                font-size: @text-size;
+            }
         }
         }
-    }
 
 
-    .btn_Pointer {
-        width: 50vw;
-
-        button {
-            font-size: 26rpx;
-            width: 50vw;
+        .radioGroup {
+            .radio {
+                font-size: @text-size;
+                padding: 5rpx;
+            }
         }
         }
-    }
 
 
-    .specMap {
-        .tip {
-            font-size: @text-size;
-            color: red;
+        .tags {
+            margin-bottom: 10rpx;
+
+            van-tag {
+                margin-right: 10rpx;
+            }
         }
         }
 
 
-        .list {
-            .tags {
-                .title {
-                    font-weight: bold;
-                    font-size: @text-size;
-                }
+        .btn_Pointer {
+            width: 50vw;
+
+            button {
+                font-size: 26rpx;
+                width: 50vw;
             }
             }
         }
         }
 
 
-        .obj {
-            .title {
-                margin: 10rpx 0;
-                font-weight: bold;
+        .specMap {
+            .tip {
                 font-size: @text-size;
                 font-size: @text-size;
+                color: red;
             }
             }
 
 
-            .obj_item {
-                margin: 10rpx;
-                padding: 10rpx;
-                background: whitesmoke;
+            .list {
+                .tags {
+                    .title {
+                        font-weight: bold;
+                        font-size: @text-size;
+                    }
+                }
+            }
 
 
-                .key {
+            .obj {
+                .title {
+                    margin: 10rpx 0;
                     font-weight: bold;
                     font-weight: bold;
                     font-size: @text-size;
                     font-size: @text-size;
                 }
                 }
 
 
-                .info {
-                    .info_item {
-                        display: flex;
-                        padding: 10rpx 0;
-                        border-bottom: 1rpx solid white;
-                        position: relative;
+                .obj_item {
+                    margin: 10rpx;
+                    padding: 10rpx;
+                    background: whitesmoke;
 
 
-                        >view {
-                            margin: 0 3rpx;
-                            >text {
-                                font-size: @text-size;
-                            }
+                    .key {
+                        font-weight: bold;
+                        font-size: @text-size;
+                    }
 
 
-                            >input {
-                                border: 1rpx solid rgb(201, 201, 201);
-                                padding: 10rpx;
-                                font-size: @text-size;
+                    .info {
+                        .info_item {
+                            display: flex;
+                            padding: 10rpx 0;
+                            border-bottom: 1rpx solid white;
+                            position: relative;
+
+                            >view {
+                                margin: 0 3rpx;
 
 
+                                >text {
+                                    font-size: @text-size;
+                                }
+
+                                >input {
+                                    border: 1rpx solid rgb(201, 201, 201);
+                                    padding: 10rpx;
+                                    font-size: @text-size;
+
+                                }
                             }
                             }
-                        }
 
 
-                        .del {
-                            width: 40rpx;
-                            height: 40rpx;
-                            background: rgb(207, 207, 207);
-                            display: flex;
-                            justify-content: center;
-                            position: absolute;
-                            right: 0;
-                            top: 0;
+                            .del {
+                                width: 40rpx;
+                                height: 40rpx;
+                                background: rgb(207, 207, 207);
+                                display: flex;
+                                justify-content: center;
+                                position: absolute;
+                                right: 0;
+                                top: 0;
+                            }
                         }
                         }
-                    }
-                    .btn_specMap{
-                        width: 50%;
-                        >button{
-                            font-size: @text-size;
+
+                        .btn_specMap {
+                            width: 50%;
+
+                            >button {
+                                font-size: @text-size;
+                            }
                         }
                         }
                     }
                     }
                 }
                 }
             }
             }
         }
         }
+        .geoPoint{
+                margin-top: 10rpx;
+                font-size: @text-size;
+            >view{
+                margin-top: 10rpx;
+            }
+        }
     }
     }
-}
- 
+
 }
 }
 
 
 .popup {
 .popup {

+ 82 - 52
nova-tourism/components/dev-route/index.wxml

@@ -1,58 +1,7 @@
 <view class="item" wx:for="{{editFields}}" wx:key="index">
 <view class="item" wx:for="{{editFields}}" wx:key="index">
   <view class="name"> <text wx:if="{{item.required}}" style="color: red;">*</text> {{item.name}}:</view>
   <view class="name"> <text wx:if="{{item.required}}" style="color: red;">*</text> {{item.name}}:</view>
   <view class="content">
   <view class="content">
-    <block wx:if="{{className=='ShopGoods'&&item.key=='specMap'}}">
-      <view class="specMap">
-        <view class="tip">不同规格价格不同可在规格属性里面填写价格,价格一样可不填写,编辑完之后需要保存</view>
-        <view class="list">
-          <view class="tags">
-            <text class="title">属性名称:</text>
-            <block wx:for="{{editMap[item.key].val.specList}}" wx:for-item="spec_item" wx:for-index="spec_index" wx:key="spec_item">
-              <van-tag closeable="{{!item.disabled}}" type="primary" size="medium" color="{{color}}" text-color="{{text_color}}" data-key="{{item.key}}" data-spec_index="{{spec_index}}" bind:close="delKey_ShopGoods_specMap">{{spec_item}}</van-tag>
-            </block>
-          </view>
-          <view class="text">
-            <textarea disabled="{{item.disabled}}" confirm-type="点击添加" data-key="{{item.key}}" bindconfirm="addKey_ShopGoods_specMap" placeholder="请输入规格名称(可填多个)" auto-height></textarea>
-          </view>
-        </view>
-        <view class="obj">
-          <view class="title">属性对象:</view>
-          <block wx:for="{{editMap[item.key].val.specList}}" wx:for-item="spec_item" wx:for-index="spec_index" wx:key="spec_item">
-            <view class="obj_item">
-              <view class="key">{{spec_item}}:</view>
-              <view class="info">
-                <block wx:for="{{editMap[item.key].val[spec_item]}}" wx:for-item="spec_map_item" wx:for-index="spec_map_index" wx:key="spec_map_item">
-                  <view class="info_item">
-                    <view>
-                      <text>属性值:</text>
-                      <input disabled="{{item.disabled}}" data-key="{{item.key}}" data-spec="{{spec_item}}" data-spec_map_index="{{spec_map_index}}" bindinput="setValue" value="{{spec_map_item.value}}" placeholder="输入属性值" type="text" />
-                    </view>
-                    <view>
-                      <text>价格:</text>
-                      <input disabled="{{item.disabled}}" data-key="{{item.key}}" data-spec="{{spec_item}}" data-spec_map_index="{{spec_map_index}}" bindinput="setPrice" value="{{spec_map_item.price}}" placeholder="输入价格" type="digit" />
-                    </view>                                                
-                    <view>
-                      <text>会员价格:</text>
-                      <input disabled="{{item.disabled}}" data-key="{{item.key}}" data-spec="{{spec_item}}" data-spec_map_index="{{spec_map_index}}" bindinput="setVipPrice" value="{{spec_map_item.vipPrice}}" placeholder="输入会员价格" type="digit" />
-                    </view>
-                    <view wx:if="{{editMap[item.key].val[spec_item].length>1&&!item.disabled}}" class="del" data-key="{{item.key}}" data-spec="{{spec_item}}" data-spec_map_index="{{spec_map_index}}" bind:tap="delSpecMapItem">
-                      <van-icon name="cross" />
-                    </view>
-                  </view>
-                </block>
-                <view wx:if="{{!item.disabled}}" class="btn_specMap" style="border:1rpx solid {{color}};">
-                  <button data-key="{{item.key}}" data-spec="{{spec_item}}" bind:tap="addSpecMap" style="color: {{color}};">
-                    <van-icon name="plus" />添加
-                  </button>
-                </view>
-              </view>
-            </view>
-          </block>
-
-        </view>
-      </view>
-    </block>
-    <block wx:elif="{{item.type=='String'}}">
+    <block wx:if="{{item.type=='String'}}">
       <block wx:if="{{!item.view}}">
       <block wx:if="{{!item.view}}">
         <view class="text">
         <view class="text">
           <textarea value="{{editMap[item.key].val}}" data-key="{{item.key}}" bindblur="changeTextarea" placeholder="请输入{{item.name}}" auto-height disabled="{{item.disabled}}"></textarea>
           <textarea value="{{editMap[item.key].val}}" data-key="{{item.key}}" bindblur="changeTextarea" placeholder="请输入{{item.name}}" auto-height disabled="{{item.disabled}}"></textarea>
@@ -121,6 +70,87 @@
         <van-icon name="arrow" />
         <van-icon name="arrow" />
       </view>
       </view>
     </block>
     </block>
+    <block wx:elif="{{item.type=='GeoPoint'}}">
+      <view class="btn_Pointer" wx:if="{{!item.disabled}}">
+        <button data-index="{{index}}" data-key="{{item.key}}" bind:tap="chooseGeoPoint" style="background: {{color}};color: {{text_color}};">
+          选择{{item.name}}
+        </button>
+      </view>
+      <view class="geoPoint" wx:if="{{editMap[item.key].val.longitude&&editMap[item.key].val.latitude}}">
+        <block wx:if="{{editMap[item.key].val.longitude}}">
+          经:{{editMap[item.key].val.longitude}}
+        </block>
+        <block wx:if="{{editMap[item.key].val.latitude}}">
+          纬:{{editMap[item.key].val.latitude}}
+        </block>
+        <view wx:if="{{editMap[item.key].text}}" data-str="{{editMap[item.key].text}}" bind:tap="copyStr">
+          {{editMap[item.key].text}}
+          <van-icon name="orders-o" />
+        </view>
+      </view>
+    </block>
+    <block wx:elif="{{item.type=='Object'}}">
+      <block wx:if="{{item.view=='edit-spec'}}">
+        <view class="specMap">
+          <view class="tip">不同规格价格不同可在规格属性里面填写价格,价格一样可不填写,编辑完之后需要保存</view>
+          <view class="list">
+            <view class="tags">
+              <text class="title">属性名称:</text>
+              <block wx:for="{{editMap[item.key].val.specList}}" wx:for-item="spec_item" wx:for-index="spec_index" wx:key="spec_item">
+                <van-tag closeable="{{!item.disabled}}" type="primary" size="medium" color="{{color}}" text-color="{{text_color}}" data-key="{{item.key}}" data-spec_index="{{spec_index}}" bind:close="delKey_ShopGoods_specMap">{{spec_item}}</van-tag>
+              </block>
+            </view>
+            <view class="text">
+              <textarea disabled="{{item.disabled}}" confirm-type="点击添加" data-key="{{item.key}}" bindconfirm="addKey_ShopGoods_specMap" placeholder="请输入规格名称(可填多个)" auto-height></textarea>
+            </view>
+          </view>
+          <view class="obj">
+            <view class="title">属性对象:</view>
+            <block wx:for="{{editMap[item.key].val.specList}}" wx:for-item="spec_item" wx:for-index="spec_index" wx:key="spec_item">
+              <view class="obj_item">
+                <view class="key">{{spec_item}}:</view>
+                <view class="info">
+                  <block wx:for="{{editMap[item.key].val[spec_item]}}" wx:for-item="spec_map_item" wx:for-index="spec_map_index" wx:key="spec_map_item">
+                    <view class="info_item">
+                      <view>
+                        <text>属性值:</text>
+                        <input disabled="{{item.disabled}}" data-key="{{item.key}}" data-spec="{{spec_item}}" data-spec_map_index="{{spec_map_index}}" bindinput="setValue" value="{{spec_map_item.value}}" placeholder="输入属性值" type="text" />
+                      </view>
+                      <view>
+                        <text>价格:</text>
+                        <input disabled="{{item.disabled}}" data-key="{{item.key}}" data-spec="{{spec_item}}" data-spec_map_index="{{spec_map_index}}" bindinput="setPrice" value="{{spec_map_item.price}}" placeholder="输入价格" type="digit" />
+                      </view>
+                      <view>
+                        <text>会员价格:</text>
+                        <input disabled="{{item.disabled}}" data-key="{{item.key}}" data-spec="{{spec_item}}" data-spec_map_index="{{spec_map_index}}" bindinput="setVipPrice" value="{{spec_map_item.vipPrice}}" placeholder="输入会员价格" type="digit" />
+                      </view>
+                      <view wx:if="{{editMap[item.key].val[spec_item].length>1&&!item.disabled}}" class="del" data-key="{{item.key}}" data-spec="{{spec_item}}" data-spec_map_index="{{spec_map_index}}" bind:tap="delSpecMapItem">
+                        <van-icon name="cross" />
+                      </view>
+                    </view>
+                  </block>
+                  <view wx:if="{{!item.disabled}}" class="btn_specMap" style="border:1rpx solid {{color}};">
+                    <button data-key="{{item.key}}" data-spec="{{spec_item}}" bind:tap="addSpecMap" style="color: {{color}};">
+                      <van-icon name="plus" />添加
+                    </button>
+                  </view>
+                </view>
+              </view>
+            </block>
+          </view>
+        </view>
+      </block>
+      <block wx:elif="{{item.view=='json-object'}}">
+        <view class="jsonObj">
+          <block wx:for="{{item.jsonArr}}" wx:for-item="json_item" wx:for-index="json_index" wx:key="json_item">
+            <view class="">{{json_item.label}}:</view>
+            <view class="text">
+              <textarea value="{{editMap[item.key].val[json_item.key]}}" data-json_key="{{json_item.key}}" data-key="{{item.key}}" bindblur="changeJsonTextarea" placeholder="{{json_item.value}}" auto-height disabled="{{item.disabled}}"></textarea>
+            </view>
+          </block>
+        </view>
+      </block>
+    </block>
   </view>
   </view>
 </view>
 </view>
 <block wx:if="{{is_btn}}">
 <block wx:if="{{is_btn}}">

+ 7 - 0
nova-tourism/components/dev-route/index.wxss

@@ -104,6 +104,13 @@
 .item .content .specMap .obj .obj_item .info .btn_specMap > button {
 .item .content .specMap .obj .obj_item .info .btn_specMap > button {
   font-size: 26rpx;
   font-size: 26rpx;
 }
 }
+.item .content .geoPoint {
+  margin-top: 10rpx;
+  font-size: 26rpx;
+}
+.item .content .geoPoint > view {
+  margin-top: 10rpx;
+}
 .popup {
 .popup {
   width: 100%;
   width: 100%;
   height: 70vh;
   height: 70vh;

+ 2 - 1
nova-tourism/components/homestay/index.less

@@ -152,7 +152,8 @@
             display: flex;
             display: flex;
             flex-direction: column;
             flex-direction: column;
             margin-bottom: 20rpx;
             margin-bottom: 20rpx;
-
+            -webkit-column-break-inside: avoid;
+            break-inside: avoid;
             .cardbox {
             .cardbox {
                 width: 100%;
                 width: 100%;
                 background-color:whitesmoke;
                 background-color:whitesmoke;

+ 2 - 0
nova-tourism/components/homestay/index.wxss

@@ -131,6 +131,8 @@
   display: flex;
   display: flex;
   flex-direction: column;
   flex-direction: column;
   margin-bottom: 20rpx;
   margin-bottom: 20rpx;
+  -webkit-column-break-inside: avoid;
+  break-inside: avoid;
 }
 }
 .all .Legendary-Information .container .cardbox {
 .all .Legendary-Information .container .cardbox {
   width: 100%;
   width: 100%;

+ 32 - 3
nova-tourism/components/suggest/index.js

@@ -19,13 +19,18 @@ Component({
    */
    */
   data: {
   data: {
     gift: [], //望仙礼遇-商品
     gift: [], //望仙礼遇-商品
+    swiper:1,//左右滑动遍历次数
+    skip:0,
   },
   },
 
 
   lifetimes: {
   lifetimes: {
     detached: function () {},
     detached: function () {},
     attached: async function () {
     attached: async function () {
       setTimeout(() => {
       setTimeout(() => {
+        let {store_id}=this.properties
+        this.setData({store_id})
         this.getGift()
         this.getGift()
+        this.getCount()
       }, 800);
       }, 800);
    
    
     },
     },
@@ -39,6 +44,7 @@ Component({
       let {
       let {
         store_id
         store_id
       } = this.properties
       } = this.properties
+      let {skip}=this.data
       console.log(store_id)
       console.log(store_id)
       let sql = `SELECT good."objectId",good."name",good."price",good."image"
       let sql = `SELECT good."objectId",good."name",good."price",good."image"
   FROM "ShopGoods" good
   FROM "ShopGoods" good
@@ -46,16 +52,39 @@ Component({
   AND good."isDeleted" IS NOT TRUE
   AND good."isDeleted" IS NOT TRUE
   AND good."status" IS TRUE
   AND good."status" IS TRUE
   AND good."shopStore"='${store_id}'
   AND good."shopStore"='${store_id}'
-  ORDER BY COALESCE(good."isHome", FALSE) DESC,
+  ORDER BY COALESCE(good."isRecom", FALSE) DESC,
   CASE WHEN good."top"= 0 THEN 1 ELSE 0 END,
   CASE WHEN good."top"= 0 THEN 1 ELSE 0 END,
   good."top" ASC,good."createdAt"
   good."top" ASC,good."createdAt"
-  LIMIT 4`
+  LIMIT 4 OFFSET ${skip}`
       let gift = await req.customSQL(sql) || []
       let gift = await req.customSQL(sql) || []
       console.log(gift)
       console.log(gift)
       this.setData({
       this.setData({
         gift
         gift
       })
       })
-    
+    },
+
+/**获取商品总量 */
+async getCount(){
+  let {
+    store_id
+  } = this.properties
+  let query = new Parse.Query('ShopGoods')
+  query.equalTo('company',company)
+  query.notEqualTo('isDeleted',true)
+  query.equalTo('status',true)
+  query.equalTo('shopStore',store_id)
+  let count = await query.count()
+  console.log(count)
+  let swiper = Math.ceil(count / 4)||1
+  if(swiper>10) swiper = 10//最多10个内切换,40个商品
+  this.setData({swiper,count})
+},
+    /**切换Swiper */
+    changeSwiper(e){
+      let {current} = e.detail
+      let skip = current * 4
+      this.setData({skip})
+      this.getGift()
     },
     },
     /** 跳转*/
     /** 跳转*/
     tourl(e) {
     tourl(e) {

+ 1 - 1
nova-tourism/components/suggest/index.less

@@ -29,7 +29,7 @@ page{
     }
     }
 }
 }
 .wang-cardbox{
 .wang-cardbox{
-    margin-top: 40rpx;
+    // margin-top: 40rpx;
     width: 100%;
     width: 100%;
     background-color: white;
     background-color: white;
     overflow-y: hidden;
     overflow-y: hidden;

+ 29 - 21
nova-tourism/components/suggest/index.wxml

@@ -1,22 +1,30 @@
-<view class="wangbox">
-  <view class="wang">望仙礼遇</view>
-  <view class="wang2">望日w望月w来望仙w</view>
-</view>
-<view class="wang-cardbox">
-  <block wx:for="{{gift}}" wx:key="index">
-    <view class="wang-card" data-url="/nova-tourism/pages/collect/collect-detail/index?gid={{item.objectId}}" bindtap="tourl">
-      <image src="{{item.image||'https://img95.699pic.com/photo/60072/5330.jpg_wh860.jpg'}}" mode="aspectFill"></image>
-      <view class="wang-catex">{{item.name}}</view>
-      <view class="wang-numbox">
-        <view class="wang-num">
-          <view class="wang-num1">¥</view>
-          <view class="wang-num2">{{item.price||0}}</view>
+<block wx:if="{{count}}">
+  <view class="wangbox">
+    <view class="wang">望仙礼遇</view>
+    <view class="wang2">(左右滑动更换推荐)</view>
+  </view>
+  <swiper bindchange="changeSwiper" style=" height:750rpx;" autoplay="{{true}}" indicator-dots='{{false}}' interval="{{20000}}" circular duration="{{500}}">
+    <block wx:for="{{swiper}}" wx:for-item="swiper_item" wx:key="swiper_item">
+      <swiper-item>
+        <view class="wang-cardbox">
+          <block wx:for="{{gift}}" wx:key="index">
+            <view class="wang-card" data-url="/nova-tourism/pages/collect/collect-detail/index?gid={{item.objectId}}" bindtap="tourl">
+              <image src="{{item.image||'https://file-cloud.fmode.cn/EbxZUK5lBI/20250321/vdq1j1110711455.jpg'}}" mode="aspectFill"></image>
+              <view class="wang-catex">{{item.name}}</view>
+              <view class="wang-numbox">
+                <view class="wang-num">
+                  <view class="wang-num1">¥</view>
+                  <view class="wang-num2">{{item.price||0}}</view>
+                </view>
+                <view class="wang-submit">购买</view>
+              </view>
+            </view>
+          </block>
         </view>
         </view>
-        <view class="wang-submit">购买</view>
-      </view>
-    </view>
-  </block>
-</view>
-<view class="more">
-  <view class="more-tex">查看更多 ></view>
-</view>
+      </swiper-item>
+    </block>
+  </swiper>
+  <view class="more" data-url="/nova-tourism/pages/collect/good-list/index" bindtap="tourl">
+    <view class="more-tex">云上风物 ></view>
+  </view>
+</block>

+ 0 - 1
nova-tourism/components/suggest/index.wxss

@@ -29,7 +29,6 @@ page {
   color: #969696;
   color: #969696;
 }
 }
 .wang-cardbox {
 .wang-cardbox {
-  margin-top: 40rpx;
   width: 100%;
   width: 100%;
   background-color: white;
   background-color: white;
   overflow-y: hidden;
   overflow-y: hidden;

+ 1 - 1
nova-tourism/pages/collect/collect-detail/index.less

@@ -240,7 +240,7 @@
                     align-items: center;
                     align-items: center;
 
 
                     image {
                     image {
-                        width: 150rpx;
+                        width: 120rpx;
                         margin: 40rpx 10rpx;
                         margin: 40rpx 10rpx;
                     }
                     }
                 }
                 }

+ 3 - 3
nova-tourism/pages/collect/collect-detail/index.wxml

@@ -94,11 +94,11 @@
         </view>
         </view>
         <view class="qrBox">
         <view class="qrBox">
           <view class="logo">
           <view class="logo">
-            <image src="{{good.about_qr[0]}}" mode="widthFix" />
+            <image src="{{good.code}}" mode="widthFix" />
           </view>
           </view>
           <view class="qr">
           <view class="qr">
             <block wx:for="{{good.about_qr}}" wx:key="index">
             <block wx:for="{{good.about_qr}}" wx:key="index">
-              <image wx:if="{{index>0}}" src="{{item}}" mode="widthFix" />
+              <image src="{{item}}" mode="widthFix" />
             </block>
             </block>
           </view>
           </view>
         </view>
         </view>
@@ -153,7 +153,7 @@
       <view class="address">
       <view class="address">
         <view class="add">
         <view class="add">
           <image src="https://file-cloud.fmode.cn/EbxZUK5lBI/20250320/1kjb1k101141655.png" mode="" />
           <image src="https://file-cloud.fmode.cn/EbxZUK5lBI/20250320/1kjb1k101141655.png" mode="" />
-          <view>{{store.storeAddress}}</view>
+          <view>{{store.storeName}} - {{store.storeAddress}}</view>
         </view>
         </view>
         <van-icon name="arrow" />
         <van-icon name="arrow" />
       </view>
       </view>

+ 1 - 1
nova-tourism/pages/collect/collect-detail/index.wxss

@@ -205,7 +205,7 @@
   align-items: center;
   align-items: center;
 }
 }
 .bax .all .box .tipbox2 .qrBox image {
 .bax .all .box .tipbox2 .qrBox image {
-  width: 150rpx;
+  width: 120rpx;
   margin: 40rpx 10rpx;
   margin: 40rpx 10rpx;
 }
 }
 .bax .paybox {
 .bax .paybox {

+ 153 - 0
nova-tourism/pages/collect/good-list/index.js

@@ -0,0 +1,153 @@
+// nova-tourism/pages/collect/good-list/index.js
+const Parse = getApp().Parse;
+const company = getApp().globalData.company;
+const uid = Parse.User.current()?.id
+const req = require('../../../../utils/request')
+
+let {
+  statusBarHeight,
+  screenHeight,
+  screenWidth,
+  safeArea
+} = wx.getSystemInfoSync()
+let custom = wx.getMenuButtonBoundingClientRect()
+let customHeight = custom.height
+let customWidth = custom.width
+
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    goodList: [],
+    searchTimeOut: null,
+    value:'',
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+    let nav_px = statusBarHeight + customHeight + 10
+    let scroll_px = +safeArea.bottom - statusBarHeight - customHeight
+    let {store_id}=options
+    this.setData({
+      nav_px,
+      scroll_px,
+      cart_buttom: 120,
+      statusBarHeight,
+      customWidth,
+      store_id
+    })
+    this.getGood()
+  },
+
+
+  /**搜索框输入内容 */
+  searchInput() {
+    let {
+      searchTimeOut
+    } = this.data
+    if (searchTimeOut) clearTimeout(searchTimeOut)
+    let that = this
+    let timeOut = setTimeout(() => {
+      that.setData({
+        goodList: []
+      })
+      that.getGood()
+    }, 500);
+    this.setData({
+      searchTimeOut: timeOut
+    })
+  },
+
+  /**获取商品 */
+  async getGood() {
+    let {
+      goodList,
+      store_id,
+      value
+    } = this.data
+    if (value && value != '') {}
+    let sql = `SELECT good."objectId",good."name",good."price",good."image"
+    FROM "ShopGoods" good
+    WHERE good."company" = '${company}'
+    AND good."isDeleted" IS NOT TRUE
+    ${store_id?`AND good."shopStore" = '${store_id}'`:''}
+    AND good."status" IS TRUE
+    AND good."name" LIKE '%${value}%'
+    ORDER BY COALESCE(good."isRecom", FALSE) DESC,
+    CASE WHEN good."top"= 0 THEN 1 ELSE 0 END,
+    good."top" ASC
+    LIMIT 30 OFFSET ${goodList?.length||0}`
+    let list = await req.customSQL(sql)||[]
+    console.log(list)
+    this.setData({
+      goodList:[...(goodList||[]),...list]
+    })
+  },
+
+     /** 跳转*/
+     tourl(e) {
+      const url = e.currentTarget.dataset.url
+      wx.navigateTo({
+        url: `${url}` // 目标页面的路径
+      });
+    },
+  goback() {
+    wx.navigateBack({
+      delta: 1
+    });
+  },
+
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom() {
+    this.getGood()
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage() {
+
+  }
+})

+ 10 - 0
nova-tourism/pages/collect/good-list/index.json

@@ -0,0 +1,10 @@
+{
+  "usingComponents": {
+    "van-search": "@vant/weapp/search/index",
+    "van-icon": "@vant/weapp/icon/index",
+    "van-stepper": "@vant/weapp/stepper/index",
+    "van-loading": "@vant/weapp/loading/index",
+    "van-empty": "@vant/weapp/empty/index"
+  }
+  
+}

+ 90 - 0
nova-tourism/pages/collect/good-list/index.less

@@ -0,0 +1,90 @@
+.nav {
+    background: white;
+    position: fixed;
+    top: 0rpx;
+    z-index: 999;
+    // background: #7F56B2;
+    width: 100vw;
+
+    .shop {
+        display: flex;
+        align-items: center;
+        >view {
+            font-size: 33rpx;
+            font-weight: bold;
+            margin: 0 10rpx;
+        }
+    }
+
+    .search {
+        height: 60rpx;
+        overflow: hidden;
+        align-items: center;
+        background: whitesmoke;
+        padding: 5rpx 10rpx;
+        border-radius: 100rpx;
+        display: flex;
+        align-items: center;
+
+        input {
+            margin-left: 10rpx;
+            height: 100rpx;
+            font-size: 28rpx;
+        }
+    }
+}
+.wang-cardbox{
+    padding: 20rpx;
+    width: 100%;
+    background-color: white;
+    overflow-y: hidden;
+    padding-bottom: 40rpx;
+    column-count: 2; /* 设置列数 */
+    column-gap: 16rpx; /* 设置列间距 */
+    .wang-card{
+        break-inside: avoid; /* 防止卡片在列之间断裂 */
+        margin-bottom: 20rpx; /* 设置卡片底部间距 */
+        width: 100%; /* 确保卡片宽度为100% */
+        
+        image{
+            width: 100%;
+            height: 204rpx;
+            border-radius: 10rpx;
+        }
+        .wang-catex{
+            font-size: 26rpx;
+            font-weight: 400;
+            height: 76rpx;
+        }
+        .wang-numbox{
+            width: 100%;
+            display: flex;
+            align-items: center;
+            .wang-num{
+                display: flex;
+                justify-content: flex-end;
+                align-items: flex-end;
+                color: #C5262Ced;
+                font-size: 30rpx;
+                .wang-num1{
+                    font-size: 32rpx;
+                }
+                .wang-num2{
+                    font-size: 40rpx;
+                }
+            }
+            .wang-submit{
+                width: 102rpx;
+                height: 48rpx;
+                font-size: 28rpx;
+                color: white;
+                background-color: #F8DA7F;
+                border-radius: 15rpx;
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                margin-left: auto;
+            }
+        }
+    }
+}

+ 32 - 0
nova-tourism/pages/collect/good-list/index.wxml

@@ -0,0 +1,32 @@
+<!--nova-tourism/pages/collect/good-list/index.wxml-->
+<view class="nav" style="height:calc( {{nav_px+'px'}} + 20rpx );">
+  <view style="position: absolute;top: {{statusBarHeight+5+'px'}};width: 100vw;display: flex;justify-content: start;">
+    <view class="shop" bind:tap="goback">
+      <van-icon name="arrow-left" size="50rpx" />
+      <view>{{store_id?'店铺商品':'云上风物'}}</view>
+    </view>
+    <view class="search" style="width:calc( 100vw - {{customWidth +'px'}} - 240rpx );margin-left: 10rpx;">
+      <van-icon name="search" size="30rpx" />
+      <input placeholder="关键字搜索" bindinput="searchInput" model:value="{{value}}" />
+    </view>
+  </view>
+</view>
+<view style="height:calc( {{nav_px+'px'}});"></view>
+
+<view class="wang-cardbox">
+  <block wx:for="{{goodList}}" wx:key="index">
+    <view class="wang-card" data-url="/nova-tourism/pages/collect/collect-detail/index?gid={{item.objectId}}" bindtap="tourl">
+      <image src="{{item.image||'https://img95.699pic.com/photo/60072/5330.jpg_wh860.jpg'}}" mode="aspectFill"></image>
+      <view class="wang-catex">{{item.name}}</view>
+      <view class="wang-numbox">
+        <view class="wang-num">
+          <view class="wang-num1">¥</view>
+          <view class="wang-num2">{{item.price||0}}</view>
+        </view>
+        <view class="wang-submit">购买</view>
+      </view>
+    </view>
+  </block>
+</view>
+
+<van-empty wx:if="{{goodList.length<=0}}" description="商品为空" />

+ 89 - 0
nova-tourism/pages/collect/good-list/index.wxss

@@ -0,0 +1,89 @@
+.nav {
+  background: white;
+  position: fixed;
+  top: 0rpx;
+  z-index: 999;
+  width: 100vw;
+}
+.nav .shop {
+  display: flex;
+  align-items: center;
+}
+.nav .shop > view {
+  font-size: 33rpx;
+  font-weight: bold;
+  margin: 0 10rpx;
+}
+.nav .search {
+  height: 60rpx;
+  overflow: hidden;
+  background: whitesmoke;
+  padding: 5rpx 10rpx;
+  border-radius: 100rpx;
+  display: flex;
+  align-items: center;
+}
+.nav .search input {
+  margin-left: 10rpx;
+  height: 100rpx;
+  font-size: 28rpx;
+}
+.wang-cardbox {
+  padding: 20rpx;
+  width: 100%;
+  background-color: white;
+  overflow-y: hidden;
+  padding-bottom: 40rpx;
+  column-count: 2;
+  /* 设置列数 */
+  column-gap: 16rpx;
+  /* 设置列间距 */
+}
+.wang-cardbox .wang-card {
+  break-inside: avoid;
+  /* 防止卡片在列之间断裂 */
+  margin-bottom: 20rpx;
+  /* 设置卡片底部间距 */
+  width: 100%;
+  /* 确保卡片宽度为100% */
+}
+.wang-cardbox .wang-card image {
+  width: 100%;
+  height: 204rpx;
+  border-radius: 10rpx;
+}
+.wang-cardbox .wang-card .wang-catex {
+  font-size: 26rpx;
+  font-weight: 400;
+  height: 76rpx;
+}
+.wang-cardbox .wang-card .wang-numbox {
+  width: 100%;
+  display: flex;
+  align-items: center;
+}
+.wang-cardbox .wang-card .wang-numbox .wang-num {
+  display: flex;
+  justify-content: flex-end;
+  align-items: flex-end;
+  color: #C5262Ced;
+  font-size: 30rpx;
+}
+.wang-cardbox .wang-card .wang-numbox .wang-num .wang-num1 {
+  font-size: 32rpx;
+}
+.wang-cardbox .wang-card .wang-numbox .wang-num .wang-num2 {
+  font-size: 40rpx;
+}
+.wang-cardbox .wang-card .wang-numbox .wang-submit {
+  width: 102rpx;
+  height: 48rpx;
+  font-size: 28rpx;
+  color: white;
+  background-color: #F8DA7F;
+  border-radius: 15rpx;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  margin-left: auto;
+}

+ 1 - 2
nova-tourism/pages/homestay/homestay-detail/index.js

@@ -291,8 +291,7 @@ Page({
   },
   },
   /**拨打电话 */
   /**拨打电话 */
   phone() {
   phone() {
-    let phone = this.data.storeList[0].mobile
-    console.log(phone);
+    let phone = this.data.shopStore.mobile
     wx.makePhoneCall({
     wx.makePhoneCall({
       phoneNumber: phone
       phoneNumber: phone
     })
     })

+ 6 - 29
nova-tourism/pages/homestay/homestay-detail/index.wxml

@@ -65,8 +65,8 @@
               </view>
               </view>
               <view class="room-card-textbox-label">
               <view class="room-card-textbox-label">
                 <block>
                 <block>
-                  <view class="room-card-textbox-label2" wx:if="{{item.benefitMap.discount.length>0}}">
-                    {{item.benefitMap.discount}}
+                  <view class="room-card-textbox-label2" wx:if="{{item.benefitMap.discount}}">
+                    首单优惠¥{{item.benefitMap.discount}}
                   </view>
                   </view>
                   <view class="room-card-textbox-label2" wx:if="{{item.benefitMap.gift.length>0}}">
                   <view class="room-card-textbox-label2" wx:if="{{item.benefitMap.gift.length>0}}">
                     {{item.benefitMap.gift}}
                     {{item.benefitMap.gift}}
@@ -89,30 +89,7 @@
           </block>
           </block>
         </view>
         </view>
       </block>
       </block>
-
       <suggest store_id="{{objectId}}"></suggest>
       <suggest store_id="{{objectId}}"></suggest>
-      <!-- <view class="wangbox">
-        <view class="wang">望仙礼遇</view>
-        <view class="wang2">望日w望月w来望仙w</view>
-      </view>
-      <view class="wang-cardbox">
-        <block wx:for="{{gift}}" wx:key="index">
-          <view class="wang-card" data-url="/nova-tourism/pages/collect/collect-detail/index?gid={{item.objectId}}" bindtap="tourl">
-            <image src="{{item.image||'https://img95.699pic.com/photo/60072/5330.jpg_wh860.jpg'}}" mode="aspectFill"></image>
-            <view class="wang-catex">{{item.name}}</view>
-            <view class="wang-numbox">
-              <view class="wang-num">
-                <view class="wang-num1">¥</view>
-                <view class="wang-num2">{{item.price||0}}</view>
-              </view>
-              <view class="wang-submit">购买</view>
-            </view>
-          </view>
-        </block>
-      </view>
-      <view class="more">
-        <view class="more-tex">查看更多 ></view>
-      </view> -->
     </view>
     </view>
   </view>
   </view>
 </view>
 </view>
@@ -168,20 +145,20 @@
       <view class="sub_title">以下规则由房东制定,请仔细阅读并遵守</view>
       <view class="sub_title">以下规则由房东制定,请仔细阅读并遵守</view>
       <view class="list">
       <view class="list">
         <view class="key">入离</view>
         <view class="key">入离</view>
-        <view class="value">{{chickRoom.open_time||'12:00后入住,12:00前退房'}}</view>
+        <view class="value">{{chickRoom.book_rules.time||'12:00后入住,12:00前退房'}}</view>
       </view>
       </view>
       <view class="list">
       <view class="list">
         <view class="key">发票</view>
         <view class="key">发票</view>
-        <view class="value">发票由民宿经营者(房东)提供</view>
+        <view class="value">{{chickRoom.book_rules.ticket||'发票由民宿经营者(房东)提供'}}</view>
       </view>
       </view>
       <view class="list">
       <view class="list">
         <view class="key">退订</view>
         <view class="key">退订</view>
-        <view class="value" style="color: #7E9F86;">仅限30分钟内免费取消</view>
+        <view class="value" style="color: #7E9F86;">{{chickRoom.book_rules.unsubscribe||'仅限30分钟内免费取消'}}</view>
       </view>
       </view>
       <view class="list">
       <view class="list">
         <view class="key">     </view>
         <view class="key">     </view>
         <view class="value">
         <view class="value">
-          <text>订单确认30分钟后,取消订单将扣除当日全部房费(订单需\n等商家确认后生效,订单确认结果以公众号,短信为准,\n如订单不确认将全额退款至您的付款账号)</text>
+          <text>{{chickRoom.book_rules.other_1||'订单确认30分钟后,取消订单将扣除当日全部房费(订单需等商家确认后生效,订单确认结果以公众号,短信为准,如订单不确认将全额退款至您的付款账号)'}}</text>
         </view>
         </view>
       </view>
       </view>
     </view>
     </view>

+ 149 - 106
nova-tourism/pages/my/merchant/code-verify/index.js

@@ -6,113 +6,156 @@ const dateF = require('../../../../../utils/date')
 const dateServ = require('../../../../../utils/date')
 const dateServ = require('../../../../../utils/date')
 Page({
 Page({
 
 
-    /**
-     * 页面的初始数据
-     */
-    data: {
-        id: "",
-        order: null,
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    statusMap: {
+      100: '未入住',
+      200: '已入住',
+      400: '已退房',
+      500: '申请退款',
+      601: '退款审核通过',
+      602: '退款已驳回',
+      700: '退款成功',
+      800: '已完成',
+      101: '已取消支付',
+      102: '申请退房',
+      103: '退房成功',
+      104: '退房被驳回',
+      105: '未支付',
     },
     },
-    async getRoomOrder() {
-        let id = this.data.id
-        console.log(id, 12222323);
-        let RoomOrder = new Parse.Query('RoomOrder')
-        RoomOrder.include('room')
-        RoomOrder.include('shopStore')
-        let roomOrder = await RoomOrder.get(id)
-        console.log(roomOrder, 666666);
-        let Order = roomOrder.toJSON()
-        Order.createdAt = dateF.formatTime("YYYY-mm-dd HH:MM:SS", Order.createdAt)
-        Order.room.note = rechText.formatRichText(Order.room.note)
-        Order['day'] = parseInt((new Date(Order.endTime.iso).getTime() - new Date(Order.startTime.iso).getTime()) / (1000 * 60 * 60 * 24));
-        Order.startTime = dateServ.formatTime('YYYY-mm-dd', Order.startTime.iso)
-        Order.endTime = dateServ.formatTime('YYYY-mm-dd', Order.endTime.iso)
-        this.setData({
-            order: Order
+    id: "",
+    order: null,
+  },
+  async getRoomOrder() {
+    let id = this.data.id
+    console.log(id, 12222323);
+    let RoomOrder = new Parse.Query('RoomOrder')
+    RoomOrder.include('room')
+    RoomOrder.include('shopStore')
+    let roomOrder = await RoomOrder.get(id)
+    console.log(roomOrder, 666666);
+    let Order = roomOrder.toJSON()
+    Order.createdAt = dateF.formatTime("YYYY-mm-dd HH:MM:SS", Order.createdAt)
+    // Order.room.note = rechText.formatRichText(Order.room.note)
+    Order['day'] = parseInt((new Date(Order.endTime.iso).getTime() - new Date(Order.startTime.iso).getTime()) / (1000 * 60 * 60 * 24));
+    Order.startTime = dateServ.formatTime('YYYY-mm-dd HH:MM', Order.startTime.iso)
+    Order.endTime = dateServ.formatTime('mm-dd HH:MM', Order.endTime.iso)
+    this.setData({
+      order: Order
+    })
+    console.log(this.data.order);
+  },
+
+  async submit() {
+    try {
+      let id = this.data.id
+      let {order,statusMap}=this.data
+      let RoomOrder = new Parse.Query("RoomOrder")
+      let roomOrder = await RoomOrder.get(id)
+      if((order.status == 100 || order.status == 500 || order.status == 602)&&roomOrder?.get('status') == 200){
+        wx.showToast({
+          title: '已执行入住操作,无需重复',
+          icon:'none'
         })
         })
-        console.log(this.data.order);
-    },
-    async submit() {
-        try {
-            let id = this.data.id
-            let RoomOrder = new Parse.Query("RoomOrder")
-            let roomOrder = await RoomOrder.get(id)
-            roomOrder.set("status", 400)
-            await roomOrder.save()
-            console.log(res)
-            wx.showToast({
-                title: '核销成功',
-                icon: 'none'
-            })
-        } catch (error) {
-            wx.showToast({
-                title: '核销失败',
-                icon: 'none'
-            })
-        }
-
-        wx.navigateBack({
-            delta: 1,
-
-        });
-
-
-    },
-    /**
-     * 生命周期函数--监听页面加载
-     */
-    onLoad: function(options) {
-        let id = options.id
-        this.setData({ id: id })
-        this.getRoomOrder()
-    },
-
-    /**
-     * 生命周期函数--监听页面初次渲染完成
-     */
-    onReady: function() {
-
-    },
-
-    /**
-     * 生命周期函数--监听页面显示
-     */
-    onShow: function() {
-
-    },
-
-    /**
-     * 生命周期函数--监听页面隐藏
-     */
-    onHide: function() {
-
-    },
-
-    /**
-     * 生命周期函数--监听页面卸载
-     */
-    onUnload: function() {
-
-    },
-
-    /**
-     * 页面相关事件处理函数--监听用户下拉动作
-     */
-    onPullDownRefresh: function() {
-
-    },
-
-    /**
-     * 页面上拉触底事件的处理函数
-     */
-    onReachBottom: function() {
-
-    },
-
-    /**
-     * 用户点击右上角分享
-     */
-    onShareAppMessage: function() {
-
+        return
+      }
+      if (roomOrder?.get('status') == 100 || roomOrder?.get('status') == 500 || roomOrder?.get('status') == 602) {
+        roomOrder.set("status", 200)
+        await roomOrder.save()
+        wx.showToast({
+          title: '已入住',
+          icon: 'success'
+        })
+        setTimeout(() => {
+          wx.navigateBack({
+            delta: 1
+          })
+        }, 1000);
+      } else if (roomOrder?.get('status') == 200 || roomOrder?.get('status') == 102 || roomOrder?.get('status') == 104) {
+        roomOrder.set("status", 400)
+        await roomOrder.save()
+        wx.showToast({
+          title: '退房成功',
+          icon: 'success'
+        })
+        setTimeout(() => {
+          wx.navigateBack({
+            delta: 1
+          })
+        }, 1000);
+      }else{
+        wx.showToast({
+          title: `当前订单 ${statusMap[roomOrder?.get('status')]} 无法操作。`,
+          icon: 'none'
+        })
+      }
+    } catch (error) {
+      wx.showToast({
+        title: '核销失败',
+        icon: 'none'
+      })
     }
     }
+   
+  },
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    let id = options.id
+    this.setData({
+      id: id
+    })
+    this.getRoomOrder()
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
 })
 })

+ 27 - 0
nova-tourism/pages/my/merchant/code-verify/index.less

@@ -36,7 +36,27 @@ page {
         }
         }
     }
     }
 }
 }
+.ruleBox {
+    margin: 30rpx;
+    padding: 20rpx;
+    border-radius: 30rpx;
+    background: #ffffff;
+
+    .list {
+        display: flex;
+
+        .key {
+            font-size: 25rpx;
+            font-weight: bold;
+            width: 66rpx;
+            height: 53rpx;
+        }
 
 
+        .value {
+            font-size: 25rpx;
+        }
+    }
+}
 .order-prompt {
 .order-prompt {
     margin: 30rpx;
     margin: 30rpx;
     padding: 20rpx;
     padding: 20rpx;
@@ -68,4 +88,11 @@ page {
     background: #46a9a4;
     background: #46a9a4;
     padding: 30rpx 0;
     padding: 30rpx 0;
     text-align: center;
     text-align: center;
+}
+.orderBox{
+    .list{
+        .key{
+            width: 150rpx;
+        }
+    }
 }
 }

+ 69 - 38
nova-tourism/pages/my/merchant/code-verify/index.wxml

@@ -1,44 +1,75 @@
 <nav type="back" background-color="#46a9a4" title="核销" />
 <nav type="back" background-color="#46a9a4" title="核销" />
 <block wx:if="{{id}}">
 <block wx:if="{{id}}">
-    <view class="top">
-        <image class="top-image" src="{{order.images[0]}}"></image>
-        <view class="title">
-            <view class="order-name">{{order.name}}</view>
-            <view class="order-time">营业时间:{{order.shopStore.workingTime}}</view>
-            <view class="order-price">¥{{order.price}}</view>
-        </view>
-    </view>
-    <view class="order-prompt">
-        <view class="prompt-title">订房须知</view>
-        <block>
-            <rich-text nodes="{{order.room.note}}" style="width: 100%;height: 100%; margin-right: 0 auto;"></rich-text>
-        </block>
-    </view>
-    <view class="order-prompt">
-        <view class="prompt-title">订单信息</view>
-        <view class="order-number">
-            订单编号:
-            <view class="number">{{order.orderNum}}</view>
-        </view>
-        <view class="order-number">
-            下单时间:
-            <view class="number">{{order.createdAt}}</view>
-        </view>
-        <view class="order-number">
-            入住时间:
-            <view class="number">{{order.startTime}}——{{order.endTime}}</view>
-        </view>
-        <view class="order-number">
-            数量:
-            <view class="number">{{order.day}}</view>
-        </view>
-        <view class="order-number">
-            总价:
-            <view class="number">¥{{order.price}}</view>
-        </view>
+  <view class="top">
+    <image class="top-image" src="{{order.room.images[0]||'https://file-cloud.fmode.cn/EbxZUK5lBI/20250412/e1hjn1052809193.jpg'}}" mode="aspectFit"></image>
+    <view class="title">
+      <view class="order-name">{{order.room.name}}</view>
+      <view class="order-time">营业时间:{{order.room.open_time}}</view>
+      <view class="order-price">房间单价:¥{{order.room.price}}</view>
     </view>
     </view>
+  </view>
+
+  <view class="ruleBox">
+    <view style="margin-bottom: 10rpx;">订房须知</view>
+    <view class="list">
+      <view class="key">入离</view>
+      <view class="value">{{chickRoom.book_rules.time||'12:00后入住,12:00前退房'}}</view>
+    </view>
+    <view class="list">
+      <view class="key">发票</view>
+      <view class="value">{{chickRoom.book_rules.ticket||'发票由民宿经营者(房东)提供'}}</view>
+    </view>
+    <view class="list">
+      <view class="key">退订</view>
+      <view class="value" style="color: #7E9F86;">{{chickRoom.book_rules.unsubscribe||'仅限30分钟内免费取消'}}</view>
+    </view>
+    <view class="list">
+      <view class="key">     </view>
+      <view class="value">
+        <text>{{chickRoom.book_rules.other_1||'订单确认30分钟后,取消订单将扣除当日全部房费(订单需等商家确认后生效,订单确认结果以公众号,短信为准,如订单不确认将全额退款至您的付款账号)'}}</text>
+      </view>
+    </view>
+  </view>
+
+  <view class="ruleBox orderBox">
+    <view style="margin-bottom: 10rpx;">订单信息</view>
+    <view class="list">
+      <view class="key">订单编号:</view>
+      <view class="value">{{order.orderNum}}</view>
+    </view>
+    <view class="list">
+      <view class="key">订单状态:</view>
+      <view class="value">{{statusMap[order.status]}}</view>
+    </view>
+    <view class="list">
+      <view class="key">入住人姓名:</view>
+      <view class="value">{{order.name||order.mobile||order.user.nickname||order.user.mobile}}</view>
+    </view>
+    <view class="list">
+      <view class="key">下单时间:</view>
+      <view class="value">{{order.createdAt}}</view>
+    </view>
+    <view class="list">
+      <view class="key">入住时间:</view>
+      <view class="value">{{order.startTime}} - {{order.endTime}}</view>
+    </view>
+    <view class="list">
+      <view class="key">入住天数:</view>
+      <view class="value">{{order.day}}</view>
+    </view>
+    <view class="list">
+      <view class="key">订单总额:</view>
+      <view class="value">¥{{order.price}}</view>
+    </view>
+  </view>
 </block>
 </block>
 <block wx:if="{{!id}}">
 <block wx:if="{{!id}}">
-    <van-empty description="暂无" />
+  <van-empty description="暂无" />
+</block>
+
+<block wx:if="{{order.status==100||order.status==500||order.status==602}}">
+  <view class="bommon" bindtap="submit">登记入住</view>
 </block>
 </block>
-<view class="bommon" bindtap="submit">确认核销</view>
+<block wx:if="{{order.status==200||order.status==102||order.status==104}}">
+  <view class="bommon" bindtap="submit">确认核销</view>
+</block>

+ 81 - 1
nova-tourism/pages/my/merchant/code-verify/index.wxss

@@ -1 +1,81 @@
-page{background:#f6f6f6}.top{display:flex;background:#ffffff;margin:30rpx;border-radius:30rpx;padding:20rpx}.top .top-image{width:240rpx;height:180rpx;margin-right:20rpx}.top .title .order-name{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.top .title .order-time{font-size:26rpx;color:#666666;margin-top:30rpx}.top .title .order-price{color:red;margin-top:30rpx}.order-prompt{margin:30rpx;padding:20rpx;border-radius:30rpx;background:#ffffff}.order-prompt .prompt-title{font-size:30rpx}.order-prompt .prompt{margin-top:20rpx}.order-prompt .order-number{margin-top:20rpx;font-size:30rpx;color:#666666;display:flex}.order-prompt .order-number .number{color:black}.bommon{position:fixed;bottom:0;width:100%;background:#46a9a4;padding:30rpx 0;text-align:center}
+page {
+  background: #f6f6f6;
+}
+.top {
+  display: flex;
+  background: #ffffff;
+  margin: 30rpx;
+  border-radius: 30rpx;
+  padding: 20rpx;
+}
+.top .top-image {
+  width: 240rpx;
+  height: 180rpx;
+  margin-right: 20rpx;
+}
+.top .title .order-name {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-line-clamp: 1;
+  -webkit-box-orient: vertical;
+}
+.top .title .order-time {
+  font-size: 26rpx;
+  color: #666666;
+  margin-top: 30rpx;
+}
+.top .title .order-price {
+  color: red;
+  margin-top: 30rpx;
+}
+.ruleBox {
+  margin: 30rpx;
+  padding: 20rpx;
+  border-radius: 30rpx;
+  background: #ffffff;
+}
+.ruleBox .list {
+  display: flex;
+}
+.ruleBox .list .key {
+  font-size: 25rpx;
+  font-weight: bold;
+  width: 66rpx;
+  height: 53rpx;
+}
+.ruleBox .list .value {
+  font-size: 25rpx;
+}
+.order-prompt {
+  margin: 30rpx;
+  padding: 20rpx;
+  border-radius: 30rpx;
+  background: #ffffff;
+}
+.order-prompt .prompt-title {
+  font-size: 30rpx;
+}
+.order-prompt .prompt {
+  margin-top: 20rpx;
+}
+.order-prompt .order-number {
+  margin-top: 20rpx;
+  font-size: 30rpx;
+  color: #666666;
+  display: flex;
+}
+.order-prompt .order-number .number {
+  color: black;
+}
+.bommon {
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  background: #46a9a4;
+  padding: 30rpx 0;
+  text-align: center;
+}
+.orderBox .list .key {
+  width: 150rpx;
+}

+ 69 - 42
nova-tourism/pages/my/merchant/merchant-home/account/index.js

@@ -29,6 +29,17 @@ Page({
         id: null,
         id: null,
         address: '',
         address: '',
         locations: null,
         locations: null,
+
+        edit_field_map:{
+          storeAddress:{disabled:false,},
+          type:{isHide:true},
+          score:{isHide:true},
+          user:{isHide:true},
+          department:{isHide:true},
+          vrUrl:{isHide:true},
+          isShow:{isHide:true},
+          isVerified:{isHide:true},
+        }
     },
     },
     // getHtml(e) { //从组件获取值
     // getHtml(e) { //从组件获取值
     //     let html = e.detail.content.html
     //     let html = e.detail.content.html
@@ -178,52 +189,68 @@ Page({
      * 生命周期函数--监听页面加载
      * 生命周期函数--监听页面加载
      */
      */
     onLoad: async function (options) {
     onLoad: async function (options) {
+      let store = wx.getStorageSync('store')
+      this.setData({store_id:store.objectId,store})
+
+      let merchant = wx.getStorageSync('merchant')
+    if (!merchant) {
+      wx.showToast({
+        title: '商户有误',
+        icon: 'error'
+      })
+      setTimeout(() => {
+        wx.reLaunch({
+          url: `/nova-tourism/pages/index/index`
+        })
+      }, 1000);
+      return
+    }
 
 
 
 
 
 
-        let merchant = wx.getStorageSync('merchant'); //用户
-        let ShopStore = new Parse.Query('ShopStore')
-        ShopStore.notEqualTo('isDeleted', "true")
-        ShopStore.equalTo('company', company)
-        ShopStore.include('user')
-        ShopStore.equalTo('user', merchant.objectId)
-        let store = await ShopStore.first()
-        store = store.toJSON()
-        console.log(store);
-        let imageList = []
-        let licenseList = []
-        // store.cover[0].forEach(i => {
-        imageList.push({
-            url: store.cover
-        })
+        // let merchant = wx.getStorageSync('merchant'); //用户
+        // let ShopStore = new Parse.Query('ShopStore')
+        // ShopStore.notEqualTo('isDeleted', "true")
+        // ShopStore.equalTo('company', company)
+        // ShopStore.include('user')
+        // ShopStore.equalTo('user', merchant.objectId)
+        // let store = await ShopStore.first()
+        // store = store.toJSON()
+        // console.log(store);
+        // let imageList = []
+        // let licenseList = []
+        // // store.cover[0].forEach(i => {
+        // imageList.push({
+        //     url: store.cover
         // })
         // })
-        console.log(imageList);
-        store.image.forEach(i => {
-            licenseList.push({
-                url: i
-            })
-        })
-        this.setData({
-            imageList: imageList,
-            store: store,
-            cover: store.cover,
-            image: store.image,
-            // perCapita: store.perCapita,
-            storeName: store.storeName,
-            perCapita: store.perCapita,
-            desc: store.desc,
-            name: store.name,
-            workingTime: store.workingTime,
-            html: store.content,
-            id: store.objectId,
-            licenseList: licenseList,
-            locations: store.location,
-            address:store.storeAddress
-        })
-        console.log('首页', this.data.locations);
-        // this.Getlocation()
-        // this.selectComponent('#hf_editor').setHtml(this.data.html);
-        this.getQiniuOption()
+        // // })
+        // console.log(imageList);
+        // store.image.forEach(i => {
+        //     licenseList.push({
+        //         url: i
+        //     })
+        // })
+        // this.setData({
+        //     imageList: imageList,
+        //     store: store,
+        //     cover: store.cover,
+        //     image: store.image,
+        //     // perCapita: store.perCapita,
+        //     storeName: store.storeName,
+        //     perCapita: store.perCapita,
+        //     desc: store.desc,
+        //     name: store.name,
+        //     workingTime: store.workingTime,
+        //     html: store.content,
+        //     id: store.objectId,
+        //     licenseList: licenseList,
+        //     locations: store.location,
+        //     address:store.storeAddress
+        // })
+        // console.log('首页', this.data.locations);
+        // // this.Getlocation()
+        // // this.selectComponent('#hf_editor').setHtml(this.data.html);
+        // this.getQiniuOption()
     },
     },
     async getQiniuOption() {
     async getQiniuOption() {
         let uploadData = await this.getUptoken()
         let uploadData = await this.getUptoken()

+ 2 - 1
nova-tourism/pages/my/merchant/merchant-home/account/index.json

@@ -2,6 +2,7 @@
   "usingComponents": {
   "usingComponents": {
       "van-icon": "@vant/weapp/icon/index",
       "van-icon": "@vant/weapp/icon/index",
       "diy-editor": "/components/diy-editor/index",
       "diy-editor": "/components/diy-editor/index",
-      "van-button": "@vant/weapp/button/index"
+      "van-button": "@vant/weapp/button/index",
+      "dev-route":"../../../../../components/dev-route/index"
   }
   }
 }
 }

+ 2 - 2
nova-tourism/pages/my/merchant/merchant-home/account/index.less

@@ -1,7 +1,7 @@
 
 
     page {
     page {
-        background: #f6f6f6;
-        padding-bottom: 148rpx;
+        // background: #f6f6f6;
+        // padding-bottom: 148rpx;
     }
     }
     
     
     .top {
     .top {

+ 16 - 6
nova-tourism/pages/my/merchant/merchant-home/account/index.wxml

@@ -1,6 +1,17 @@
 <nav type="back" background-color="#46a9a4" title="账户管理" />
 <nav type="back" background-color="#46a9a4" title="账户管理" />
+<view class="password" bindtap="password" style="font-size: 28rpx; display: flex;justify-content: space-between;padding: 20rpx;border-bottom: 1rpx solid whitesmoke;">
+  重置密码
+  <van-icon name="arrow" />
+</view>
+
+
+
+<dev-route rid='8CVQgfbThx' object_id="{{store_id}}" edit_field_map="{{edit_field_map}}" is_btn="{{true}}"></dev-route>
 
 
 
 
+
+
+<!-- 
 <view class="top" style="color: #382E2E;">
 <view class="top" style="color: #382E2E;">
     <view class="top-figure">店铺首图</view>
     <view class="top-figure">店铺首图</view>
     <upload bind:onChangeFile="changeFile" fileList="{{imageList}}" accept="image" maxCount="1" uploadURL="{{uploadURL}}" domain="{{domain}}" uptokenURL="{{uptokenURL}}"></upload>
     <upload bind:onChangeFile="changeFile" fileList="{{imageList}}" accept="image" maxCount="1" uploadURL="{{uploadURL}}" domain="{{domain}}" uptokenURL="{{uptokenURL}}"></upload>
@@ -41,7 +52,7 @@
     <view class="top-deails" bindtap="mobile">
     <view class="top-deails" bindtap="mobile">
         <view class="top-name">
         <view class="top-name">
             <view class="name">绑定手机号:</view>
             <view class="name">绑定手机号:</view>
-            <!-- <input bindblur="blur" type="text" class="input" data-name="store.mobile" value="{{store.mobile}}" placeholder="绑定手机号"></input> -->
+          
             <view class="content">{{store.mobile}}</view>
             <view class="content">{{store.mobile}}</view>
         </view>
         </view>
         <van-icon name="arrow" />
         <van-icon name="arrow" />
@@ -50,7 +61,7 @@
         <view class="top-name">
         <view class="top-name">
             <view class="name">用户账号:</view>
             <view class="name">用户账号:</view>
             <view class="content">{{store.user.username}}</view>
             <view class="content">{{store.user.username}}</view>
-            <!-- <input bindblur="blur" type="text" class="input" data-name="store.user.username" value="{{store.user.username}}" placeholder="用户账号"></input> -->
+       
         </view>
         </view>
         <van-icon name="arrow" />
         <van-icon name="arrow" />
     </view>
     </view>
@@ -58,7 +69,7 @@
         <view class="top-name">
         <view class="top-name">
             <view class="name">重置密码:</view>
             <view class="name">重置密码:</view>
             <view class="content">{{store.user.password}}</view>
             <view class="content">{{store.user.password}}</view>
-            <!-- <input bindblur="blur" type="text" class="input" data-name="store.user.password" value="{{store.user.password}}" placeholder="登录密码"></input> -->
+       
         </view>
         </view>
         <van-icon name="arrow" />
         <van-icon name="arrow" />
     </view>
     </view>
@@ -71,8 +82,7 @@
     <view class="top-figure">店铺图片</view>
     <view class="top-figure">店铺图片</view>
     <upload bind:onChangeFile="changeFiles" fileList="{{licenseList}}" accept="image" maxCount="9" uploadURL="{{uploadURL}}" domain="{{domain}}" uptokenURL="{{uptokenURL}}"></upload>
     <upload bind:onChangeFile="changeFiles" fileList="{{licenseList}}" accept="image" maxCount="9" uploadURL="{{uploadURL}}" domain="{{domain}}" uptokenURL="{{uptokenURL}}"></upload>
 </view>
 </view>
-<!-- <diy-editor width="100%" height="600rpx" insertPicture="{{true}}" placeholder="开始输入..." bind:Content="getHtml" bind:insertImage="insertImage" id="hf_editor" uploadURL="{{uploadURL}}" domain="{{domain}}" uptokenURL="{{uptokenURL}}" /> -->
-<!-- <diy-editor width="100%" height="600rpx" insertPicture="{{true}}" placeholder="编写文章..." data-field="{{field.key}}" bind:Content="getHtml" bind:insertImage="insertImage" id="editor{{field.key}}" /> -->
+
 <view class="bommon" style="color: #382E2E;">
 <view class="bommon" style="color: #382E2E;">
     <view class="bommon-name" bindtap="determine">确定</view>
     <view class="bommon-name" bindtap="determine">确定</view>
-</view>
+</view> -->

+ 58 - 1
nova-tourism/pages/my/merchant/merchant-home/account/index.wxss

@@ -1 +1,58 @@
-page{background:#f6f6f6;padding-bottom:148rpx}.top{padding:20rpx 30rpx;background:#ffffff}.top .top-figure{margin:20rpx 0}.top .top-deails{display:flex;justify-content:space-between;border-bottom:1rpx solid #adabab}.top .top-deails .top-name{display:flex;justify-content:space-between;margin:30rpx 0 0 0;padding-bottom:30rpx;width:93%}.top .top-deails .top-name .input{width:500rpx;text-align:right;color:#382E2E}.top .top-deails .top-name .name{width:200rpx;margin:auto 0}.top .top-deails .top-name .content{text-align:right}.top .top-deails .top-names{margin:30rpx 0 0 0;padding-bottom:30rpx;width:93%}.top .top-deails .top-names .input{margin-top:20rpx}.top .top-deails .top-names .name{width:200rpx}.bommon{position:fixed;bottom:0;width:100%;background:#ffffff;text-align:center;z-index:999;padding:10rpx 0}.bommon .bommon-name{background:#46a9a4;padding:30rpx 60rpx;border-radius:30rpx;width:500rpx;margin:0 auto}
+.top {
+  padding: 20rpx 30rpx;
+  background: #ffffff;
+}
+.top .top-figure {
+  margin: 20rpx 0;
+}
+.top .top-deails {
+  display: flex;
+  justify-content: space-between;
+  border-bottom: 1rpx solid #adabab;
+}
+.top .top-deails .top-name {
+  display: flex;
+  justify-content: space-between;
+  margin: 30rpx 0 0 0;
+  padding-bottom: 30rpx;
+  width: 93%;
+}
+.top .top-deails .top-name .input {
+  width: 500rpx;
+  text-align: right;
+  color: #382E2E;
+}
+.top .top-deails .top-name .name {
+  width: 200rpx;
+  margin: auto 0;
+}
+.top .top-deails .top-name .content {
+  text-align: right;
+}
+.top .top-deails .top-names {
+  margin: 30rpx 0 0 0;
+  padding-bottom: 30rpx;
+  width: 93%;
+}
+.top .top-deails .top-names .input {
+  margin-top: 20rpx;
+}
+.top .top-deails .top-names .name {
+  width: 200rpx;
+}
+.bommon {
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  background: #ffffff;
+  text-align: center;
+  z-index: 999;
+  padding: 10rpx 0;
+}
+.bommon .bommon-name {
+  background: #46a9a4;
+  padding: 30rpx 60rpx;
+  border-radius: 30rpx;
+  width: 500rpx;
+  margin: 0 auto;
+}

+ 1 - 1
nova-tourism/pages/my/merchant/merchant-home/index.js

@@ -255,7 +255,7 @@ Page({
             success(res) {
             success(res) {
                 let content = res.result
                 let content = res.result
                 console.log(content)
                 console.log(content)
-                let code1 = content.match(/\id=(.*)/)[1]
+                let code1 =content|| content.match(/\id=(.*)/)[1]
                 console.log(code1);
                 console.log(code1);
                 switch (that.data.store.type) {
                 switch (that.data.store.type) {
                     case 'stay':
                     case 'stay':

+ 1 - 1
nova-tourism/pages/my/merchant/room-manage/index.js

@@ -20,7 +20,7 @@ Page({
     let merchant = wx.getStorageSync('merchant')
     let merchant = wx.getStorageSync('merchant')
     let store = wx.getStorageSync('store')
     let store = wx.getStorageSync('store')
     if (!merchant) {
     if (!merchant) {
-      wx.navigateTo({
+      wx.reLaunch({
         url: `/nova-tourism/pages/index/index`
         url: `/nova-tourism/pages/index/index`
       })
       })
     }
     }

+ 14 - 7
nova-tourism/pages/my/merchant/room-manage/room-edit/index.js

@@ -13,7 +13,12 @@ Page({
         routeId: 'm1D72HCXcL',
         routeId: 'm1D72HCXcL',
         roomId: null,
         roomId: null,
         storeId: null,
         storeId: null,
-        oldimages:[]
+        oldimages:[],
+        edit_field_map:{
+          tags:{default:['提供早餐','免费wifi','禁烟','宠物友好']},
+          service:{default:['冰箱','液晶电视机','免费停车位','暖气','牙具']},
+          shop:{disabled:true,default:{className:'ShopStore',__type:'Pointer',objectId:''}}
+        }
     },
     },
 
 
     /**
     /**
@@ -24,15 +29,19 @@ Page({
             roomId,
             roomId,
             storeId
             storeId
         } = options
         } = options
-        console.log(roomId);
+        console.log(options);
+        let store = wx.getStorageSync('store')
+        let {edit_field_map}=this.data
+        edit_field_map.shop.default = {className:'ShopStore',__type:'Pointer',objectId:store?.objectId}
+        this.setData({edit_field_map})
         if (!storeId && !roomId) {
         if (!storeId && !roomId) {
-            wx.navigateTo({
+            wx.reLaunch({
                 url: `/nova-tourism/pages/index/index`
                 url: `/nova-tourism/pages/index/index`
             })
             })
+            return
         }
         }
         if (!storeId && roomId) {
         if (!storeId && roomId) {
             let pageType = 'edit'
             let pageType = 'edit'
-            let store = wx.getStorageSync('store')
             this.setData({
             this.setData({
                 roomId,
                 roomId,
                 storeId: store.objectId,
                 storeId: store.objectId,
@@ -44,9 +53,7 @@ Page({
                 storeId
                 storeId
             })
             })
         }
         }
-        this.initData()
-
-
+        // this.initData()
     },
     },
     async initData() {
     async initData() {
         let store;
         let store;

+ 2 - 1
nova-tourism/pages/my/merchant/room-manage/room-edit/index.json

@@ -7,6 +7,7 @@
     "van-tag": "@vant/weapp/tag/index",
     "van-tag": "@vant/weapp/tag/index",
     "van-button": "@vant/weapp/button/index",
     "van-button": "@vant/weapp/button/index",
     "van-uploader": "@vant/weapp/uploader/index",
     "van-uploader": "@vant/weapp/uploader/index",
-    "van-switch": "@vant/weapp/switch/index"
+    "van-switch": "@vant/weapp/switch/index",
+    "dev-route":"../../../../../components/dev-route/index"
   }
   }
 }
 }

+ 56 - 66
nova-tourism/pages/my/merchant/room-manage/room-edit/index.wxml

@@ -1,69 +1,59 @@
 <nav type="back" background-color="#46a9a4" title="{{pageType == 'add'?'添加房型':'编辑详情'}}" />
 <nav type="back" background-color="#46a9a4" title="{{pageType == 'add'?'添加房型':'编辑详情'}}" />
-<view class="page-section form" style="color:#382E2E; ">
-    <block wx:for="{{route['editFields']}}" wx:key="index" wx:for-item="field">
-        <!-- <block wx:if="{{route.editTabs}} " wx:key="index" wx:for-item="tab">{{tab==field['editTab']}} -->
-            <!-- <block wx:if="{{tab==field['editTab']}}"> -->
-                <view class="form-item {{field.type == 'Number'?'col-12':''}}" wx:if="{{field.key != ( 'shop' || 'company' ||  'department')}}">
-                    <view class="form-label" >
-                        <text wx:if="{{field.required}}" class="red required">*</text>
-                        <text class="form-label-text">{{field.name}}:</text>
-                    </view>
-                    <view class="form-field">
-                        <block wx:if="{{field.type == 'String'}}">
-                            <block wx:if="{{!field.view}}">
-                                <input class="form-input" border="{{true}}"
-                                value="{{ formData[field.key] }}"
-                                placeholder="请输入{{field.name}}"  data-field="{{field.key}}" data-type="{{field.type}}"
-                                bindinput="onChange"/>
-                            </block>
-                            <!-- <block wx:if="{{field.view == 'editor-tinymce'}}">
-                                <diy-editor width="100%" height="600rpx" insertPicture="{{true}}" placeholder="编写文章..." data-field="{{field.key}}" bind:Content="getHtml" bind:insertImage="insertImage" id="editor{{field.key}}"/>
-                            </block> -->
-                        </block>
-                        <block wx:if="{{field.type == 'Number'}}">
-                            <block wx:if="{{!field.view}}">
-                                <input class="form-input form-input-num" min="0" type="number" border="{{true}}"
-                                value="{{ formData[field.key] }}" 
-                                placeholder="请输入{{field.name}}" data-field="{{field.key}}" data-type="{{field.type}}"
-                                bindinput="onChange"/>
-                            </block>
-                        </block>
-                        <block wx:if="{{field.type == 'Boolean'}}">
-                            <block wx:if="{{!field.view}}">
-                                <van-switch checked="{{ formData[field.key] }}" data-field="{{field.key}}"  data-type="{{field.type}}" active-color="#07c160"  size="24px" bind:change="onChange" />
-                            </block>
-                        </block>
-                        <block wx:if="{{field.type == 'Array'}}">
-                            <block wx:if="{{!field.view}}">
-                                <view class="tag-wrapper">
-                                    <view class="tags">
-                                        <block wx:for="{{formData[field.key]}}" wx:key="index" wx:for-item="tag">
-                                            <van-tag plain size="large" closeable data-field="{{field.key}}" data-index="{{index}}" bind:close="tagClose"  class="tag" type="primary">{{tag}}</van-tag>
-                                        </block>
-                                    </view>
-                                    <van-button plain type="primary" data-field="{{field.key}}" data-name="{{field.name}}"  bindtap="showTagEdit"  class="add-btn">添加{{field.name}}</van-button>
-        
-                                </view>
-                            </block>
-                            <block wx:if="{{field.view == 'edit-filemanager'}}">
-                                <upload data-field="{{field.key}}" bind:onChangeFile="changeFile" fileList="{{ formData[field.key] }}" accept="image" maxCount="9" uploadURL="{{uploadURL}}" domain="{{domain}}" uptokenURL="{{uptokenURL}}"></upload>
-                            </block>
-                        </block>
-                        <block wx:if="{{field.type == 'GeoPoint'}}">
-                            <block wx:if="{{!field.view}}">
-                                <van-button data-field="{{field.key}}" bind:tap="chooseGeoPoint" type="primary" size="small">选择{{field.name}}</van-button>
-                                <view>
-                                    <text class="text-small grey">{{formData['address']}}</text>
-                                </view>
-                            </block>
-                        </block>
-                    </view>
-                </view>
-            <!-- </block> -->
-        <!-- </block> -->
-    </block>
+
+<dev-route rid='m1D72HCXcL' object_id="{{roomId}}" edit_field_map="{{edit_field_map}}" is_btn="{{true}}"></dev-route>
+
+
+<!-- <view class="page-section form" style="color:#382E2E; ">
+  <block wx:for="{{route['editFields']}}" wx:key="index" wx:for-item="field">
+    <view class="form-item {{field.type == 'Number'?'col-12':''}}" wx:if="{{field.key != ( 'shop' || 'company' ||  'department')}}">
+      <view class="form-label">
+        <text wx:if="{{field.required}}" class="red required">*</text>
+        <text class="form-label-text">{{field.name}}:</text>
+      </view>
+      <view class="form-field">
+        <block wx:if="{{field.type == 'String'}}">
+          <block wx:if="{{!field.view}}">
+            <input class="form-input" border="{{true}}" value="{{ formData[field.key] }}" placeholder="请输入{{field.name}}" data-field="{{field.key}}" data-type="{{field.type}}" bindinput="onChange" />
+          </block>
+        </block>
+        <block wx:if="{{field.type == 'Number'}}">
+          <block wx:if="{{!field.view}}">
+            <input class="form-input form-input-num" min="0" type="number" border="{{true}}" value="{{ formData[field.key] }}" placeholder="请输入{{field.name}}" data-field="{{field.key}}" data-type="{{field.type}}" bindinput="onChange" />
+          </block>
+        </block>
+        <block wx:if="{{field.type == 'Boolean'}}">
+          <block wx:if="{{!field.view}}">
+            <van-switch checked="{{ formData[field.key] }}" data-field="{{field.key}}" data-type="{{field.type}}" active-color="#07c160" size="24px" bind:change="onChange" />
+          </block>
+        </block>
+        <block wx:if="{{field.type == 'Array'}}">
+          <block wx:if="{{!field.view}}">
+            <view class="tag-wrapper">
+              <view class="tags">
+                <block wx:for="{{formData[field.key]}}" wx:key="index" wx:for-item="tag">
+                  <van-tag plain size="large" closeable data-field="{{field.key}}" data-index="{{index}}" bind:close="tagClose" class="tag" type="primary">{{tag}}</van-tag>
+                </block>
+              </view>
+              <van-button plain type="primary" data-field="{{field.key}}" data-name="{{field.name}}" bindtap="showTagEdit" class="add-btn">添加{{field.name}}</van-button>
+
+            </view>
+          </block>
+          <block wx:if="{{field.view == 'edit-filemanager'}}">
+            <upload data-field="{{field.key}}" bind:onChangeFile="changeFile" fileList="{{ formData[field.key] }}" accept="image" maxCount="9" uploadURL="{{uploadURL}}" domain="{{domain}}" uptokenURL="{{uptokenURL}}"></upload>
+          </block>
+        </block>
+        <block wx:if="{{field.type == 'GeoPoint'}}">
+          <block wx:if="{{!field.view}}">
+            <van-button data-field="{{field.key}}" bind:tap="chooseGeoPoint" type="primary" size="small">选择{{field.name}}</van-button>
+            <view>
+              <text class="text-small grey">{{formData['address']}}</text>
+            </view>
+          </block>
+        </block>
+      </view>
+    </view>
+  </block>
 </view>
 </view>
-<!-- editFields -->
 <view class="footer">
 <view class="footer">
-    <van-button class="btn" size="large" color="#46a9a4" bindtap="submit">提交</van-button>
-</view>
+  <van-button class="btn" size="large" color="#46a9a4" bindtap="submit">提交</van-button>
+</view> -->

+ 39 - 11
nova-tourism/pages/my/my-order/index.js

@@ -15,6 +15,22 @@ Page({
     roomList: [],
     roomList: [],
     show: false,
     show: false,
     showid: null,
     showid: null,
+    statusMap:{
+      100:'已支付',
+      200:'已入住',
+      300:'续住',
+      400:'已退房',
+      500:'申请退款',
+      601:'退款审核通过',
+      602:'退款已驳回',
+      700:'退款成功',
+      800:'已完成',
+      101:'已取消支付',
+      102:'已完申请退房成',
+      103:'退房成功',
+      104:'退房被驳回',
+      105:'未支付',
+    },
     roomTabMap: {
     roomTabMap: {
       0: "(100,500,601,602)", //已支付,申请退款,退款审核通过,退款已驳回
       0: "(100,500,601,602)", //已支付,申请退款,退款审核通过,退款已驳回
       1: "(200,102,104)", //已入住,申请退房,退房被驳回
       1: "(200,102,104)", //已入住,申请退房,退房被驳回
@@ -33,12 +49,11 @@ Page({
     });
     });
   },
   },
   ONShow(e) {
   ONShow(e) {
-    const id = e.currentTarget.dataset.item.objectId
+    let {oid} = e.currentTarget.dataset
     this.setData({
     this.setData({
-      showid: id,
+      showid: oid,
       show: true,
       show: true,
     }); // 设置弹窗显示
     }); // 设置弹窗显示
-    console.log(this.data.showid);
   },
   },
   //订单完成
   //订单完成
   async ordercom(e) {
   async ordercom(e) {
@@ -124,9 +139,8 @@ Page({
   LIMIT 20 OFFSET ${order?.length||0}`
   LIMIT 20 OFFSET ${order?.length||0}`
     let d = await req.customSQL(sql) || []
     let d = await req.customSQL(sql) || []
     d?.map(item => {
     d?.map(item => {
-      console.log(item)
-      if(item.list){
-        item.list = JSON.parse(item.list||'[]')||[]
+      if (item.list) {
+        item.list = JSON.parse(item.list || '[]') || []
       }
       }
       if (item.startTime && item.endTime) {
       if (item.startTime && item.endTime) {
         item.fromto = `${dateF.formatTime('YYYY年mm月dd日',item.startTime)}入住 - ${dateF.formatTime('YYYY年mm月dd日',item.endTime)}离店`
         item.fromto = `${dateF.formatTime('YYYY年mm月dd日',item.startTime)}入住 - ${dateF.formatTime('YYYY年mm月dd日',item.endTime)}离店`
@@ -134,7 +148,7 @@ Page({
       return item
       return item
     })
     })
     console.log(d)
     console.log(d)
-    
+
     this.setData({
     this.setData({
       order: [...order, ...(d || [])]
       order: [...order, ...(d || [])]
     })
     })
@@ -144,18 +158,32 @@ Page({
     const index = e.currentTarget.dataset.index;
     const index = e.currentTarget.dataset.index;
     await this.setData({
     await this.setData({
       currentTab: index,
       currentTab: index,
-      order:[]
+      order: []
     });
     });
-   this.getOrder()
+    this.getOrder()
+  },
+  /**已支付订单100-退款 */
+  async checkout100(e) {
+    console.log(e)
+    let {oid} = e.currentTarget.dataset
+    let query = new Parse.Query('RoomOrder')
+    let order = await query.get(oid)
+    order.set('status',500)
+    await order.save()
+    await this.setData({
+      order: [],
+      show: false,
+    });
+    this.getOrder()
   },
   },
 
 
-  tourl(e){
+  tourl(e) {
     let url = e.currentTarget.dataset.url
     let url = e.currentTarget.dataset.url
     wx.navigateTo({
     wx.navigateTo({
       url: `${url}`,
       url: `${url}`,
     });
     });
   },
   },
- 
+
   /**
   /**
    * 生命周期函数--监听页面初次渲染完成
    * 生命周期函数--监听页面初次渲染完成
    */
    */

+ 5 - 4
nova-tourism/pages/my/my-order/index.wxml

@@ -18,8 +18,9 @@
       <!-- 民宿 -->
       <!-- 民宿 -->
       <block wx:if="{{item.table!='order'}}">
       <block wx:if="{{item.table!='order'}}">
         <view class="cardbox">
         <view class="cardbox">
-          <view class="title">{{item.table||''}}
-            <!-- <view style="margin-left: auto;">已完成</view> -->
+          <view class="title">
+            {{item.table||''}}
+            <text wx:if="{{statusMap[item.status]}}"> - {{statusMap[item.status]}}</text>
           </view>
           </view>
           <view class="roombox">
           <view class="roombox">
             <image src="{{item.image||'https://file-cloud.fmode.cn/EbxZUK5lBI/20250228/j4pbsl030249178.jpg?imageView2/1/w/200/h/200'}}"></image>
             <image src="{{item.image||'https://file-cloud.fmode.cn/EbxZUK5lBI/20250228/j4pbsl030249178.jpg?imageView2/1/w/200/h/200'}}"></image>
@@ -38,11 +39,11 @@
             <view class="price">实付款¥{{item.totalPrice||0}}</view>
             <view class="price">实付款¥{{item.totalPrice||0}}</view>
           </view>
           </view>
           <view class="sumbitbox">
           <view class="sumbitbox">
-            <view class="sumbit" bindtap="ONShow" data-item="{{item}}">申请退房</view>
+            <view wx:if="{{item.status=='100'}}" class="sumbit" bindtap="ONShow" data-oid="{{item.objectId}}">申请退款</view>
             <view wx:if="{{currentTab==0||currentTab==2}}" class="sumbit" style="margin-left: 15rpx;" bindtap="tourl" data-url="{{'/nova-tourism/pages/my/my-order/order-detail/index?value=民宿&objectId='+item.objectId}}">订单详情</view>
             <view wx:if="{{currentTab==0||currentTab==2}}" class="sumbit" style="margin-left: 15rpx;" bindtap="tourl" data-url="{{'/nova-tourism/pages/my/my-order/order-detail/index?value=民宿&objectId='+item.objectId}}">订单详情</view>
             <view wx:if="{{currentTab==1}}" class="sumbit" style="margin-left: 15rpx;" bindtap="tourl" data-url="{{'/nova-tourism/pages/my/my-order/order-detail/index?value=民宿&objectId='+item.objectId}}">变更订单</view>
             <view wx:if="{{currentTab==1}}" class="sumbit" style="margin-left: 15rpx;" bindtap="tourl" data-url="{{'/nova-tourism/pages/my/my-order/order-detail/index?value=民宿&objectId='+item.objectId}}">变更订单</view>
           </view>
           </view>
-          <van-dialog wx:if="{{showid==item.objectId}}" message='仅支持线下退款,确定退房吗?' data-item="{{item}}" show="{{ show }}" show-cancel-button bind:cancel="onClose" bind:confirm="ordercom">
+          <van-dialog message='仅支持线下退款,确认退房并提交退款申请吗?' data-oid="{{item.objectId}}" show="{{ showid==item.objectId&&show }}" show-cancel-button bind:cancel="onClose" bind:confirm="checkout100">
           </van-dialog>
           </van-dialog>
         </view>
         </view>
       </block>
       </block>

+ 238 - 180
nova-tourism/pages/my/my-order/order-detail/index.js

@@ -1,206 +1,264 @@
 // nova-tourism/pages/my/my-order/order-detail/index.js
 // nova-tourism/pages/my/my-order/order-detail/index.js
 let Parse = getApp().Parse;
 let Parse = getApp().Parse;
 const company = getApp().globalData.company
 const company = getApp().globalData.company
+const dateF = require("../../../../../utils/date")
+
+
+
 Page({
 Page({
 
 
-    /**
-     * 页面的初始数据
-     */
-    data: {
-        statusBarHeight: 0,
-        screenHeight: 0,
-        customHeight: 0,
-        bottomNavHeight: 0,
-        contentHeight: 0,
-
-        objectId:'',
-        value:'',
-        roomList:{},
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    statusBarHeight: 0,
+    screenHeight: 0,
+    customHeight: 0,
+    bottomNavHeight: 0,
+    contentHeight: 0,
+
+    objectId: '',
+    value: '',
+    roomList: {},
+    isQr: false, //二维码弹框
+    statusMap: {
+      100: '未入住',
+      200: '已入住',
+      300: '续住',
+      400: '已退房',
+      500: '申请退款',
+      601: '退款审核通过',
+      602: '退款已驳回',
+      700: '退款成功',
+      800: '已完成',
+      101: '已取消支付',
+      102: '已完申请退房成',
+      103: '退房成功',
+      104: '退房被驳回',
+      105: '未支付',
     },
     },
+  },
 
 
-    /**
-     * 生命周期函数--监听页面加载
-     */
-    onLoad: function (options) {
-        const {
-            objectId,
-            value
-        } = options;
-        const Value = decodeURIComponent(value);
-        this.setData({
-            objectId,
-            value:Value
-        })
-        console.log(this.data.value,this.data.objectId);
-
-        const systemInfo = wx.getSystemInfoSync();
-        const statusBarHeight = systemInfo.statusBarHeight || 0;
-        const screenHeight = systemInfo.screenHeight || 0;
-        const custom = wx.getMenuButtonBoundingClientRect();
-        const customHeight = custom.height + 10 + 2 || 0;
-        const bottomNavHeight = systemInfo.screenHeight - systemInfo.safeArea.bottom || 0;
-
-        const contentHeight = (screenHeight - bottomNavHeight - statusBarHeight - customHeight) * 750 / systemInfo.windowWidth;
-        this.setData({
-            statusBarHeight,
-            screenHeight,
-            customHeight,
-            bottomNavHeight,
-            contentHeight
-        });
-        if(this.data.value=='民宿'){
-            this.getRoomOrder()
-        }
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    const {
+      objectId,
+      value
+    } = options;
+    const Value = decodeURIComponent(value);
+    this.setData({
+      objectId,
+      value: Value
+    })
+    console.log(this.data.value, this.data.objectId);
 
 
-    },
-    async getRoomOrder() {
-        let Order = new Parse.Query('RoomOrder');
-        Order.equalTo('company', company);
-        Order.equalTo('objectId', this.data.objectId);
-        Order.include('room');
-        Order.equalTo('user', Parse.User.current().id);
-        Order.include('shopStore');
-        let room = await Order.find();
-        let roomList = room.map(async item => {
-            let roomItme = item.toJSON();
-            roomItme.tiem = await this.formatDate2(roomItme.startTime.iso, roomItme.endTime.iso)
-            roomItme.startTime = await this.formatDate(roomItme.startTime.iso)
-            roomItme.endTime = await this.formatDate(roomItme.endTime.iso)
-            return roomItme
-        });
-        let roomList2 = await Promise.all(roomList);
-        this.setData({
-            roomList: roomList2[0]
-        })
-        console.log(this.data.roomList);
-    },
-    formatDate2(date1, date2) {
-        date1 = new Date(date1);
-        date2 = new Date(date2);
+    const systemInfo = wx.getSystemInfoSync();
+    const statusBarHeight = systemInfo.statusBarHeight || 0;
+    const screenHeight = systemInfo.screenHeight || 0;
+    const custom = wx.getMenuButtonBoundingClientRect();
+    const customHeight = custom.height + 10 + 2 || 0;
+    const bottomNavHeight = systemInfo.screenHeight - systemInfo.safeArea.bottom || 0;
 
 
-        // 获取年份、月份和日期
-        const year1 = date1.getFullYear();
-        const month1 = date1.getMonth() + 1; // 月份从0开始,所以要加1
-        const day1 = date1.getDate();
+    const contentHeight = (screenHeight - bottomNavHeight - statusBarHeight - customHeight) * 750 / systemInfo.windowWidth;
+    this.setData({
+      statusBarHeight,
+      screenHeight,
+      customHeight,
+      bottomNavHeight,
+      contentHeight
+    });
+    if (this.data.value == '民宿') {
+      this.getRoomOrder()
+    }
+  },
+  async getRoomOrder() {
+    let Order = new Parse.Query('RoomOrder');
+    Order.equalTo('company', company);
+    Order.equalTo('objectId', this.data.objectId);
+    Order.include('room');
+    Order.equalTo('user', Parse.User.current().id);
+    Order.include('shopStore');
+    let room = await Order.find();
+    let roomList = room.map(async item => {
+      let roomItme = item.toJSON();
+      roomItme.tiem = await this.formatDate2(roomItme.startTime.iso, roomItme.endTime.iso)
+      roomItme.startTime = await this.formatDate(roomItme.startTime.iso)
+      roomItme.endTime = await this.formatDate(roomItme.endTime.iso)
+      return roomItme
+    });
+    let roomList2 = await Promise.all(roomList);
+    this.setData({
+      roomList: roomList2[0]
+    })
+    console.log(this.data.roomList);
+  },
+  formatDate2(date1, date2) {
+    date1 = new Date(date1);
+    date2 = new Date(date2);
 
 
-        const year2 = date2.getFullYear();
-        const month2 = date2.getMonth() + 1; // 月份从0开始,所以要加1
-        const day2 = date2.getDate();
+    // 获取年份、月份和日期
+    const year1 = date1.getFullYear();
+    const month1 = date1.getMonth() + 1; // 月份从0开始,所以要加1
+    const day1 = date1.getDate();
 
 
-        // 返回格式化的字符串
-        return `${year1}年${month1}月${day1}日入住 - ${year2}年${month2}月${day2}日离店`;
-    },
-     formatDate(isoString) {
-        const date = new Date(isoString);
-        const year = date.getUTCFullYear();
-        const month = String(date.getUTCMonth() + 1).padStart(2, '0'); // 月份从0开始
-        const day = String(date.getUTCDate()).padStart(2, '0');
-        const hours = String(date.getUTCHours()).padStart(2, '0');
-        const minutes = String(date.getUTCMinutes()).padStart(2, '0');
-        const seconds = String(date.getUTCSeconds()).padStart(2, '0');
-    
-        return `${year}-${month}-${day} 14:00:00`;
-    },
-    //复制
-    copyOrderNum() {
-        const orderNum = this.data.roomList.orderNum; // 获取订单编号
-        if (orderNum) {
-            wx.setClipboardData({
-                data: orderNum,
-                success: () => {
-                    wx.showToast({
-                        title: '复制成功',
-                        icon: 'success',
-                        duration: 2000
-                    });
-                },
-                fail: (err) => {
-                    console.error('复制失败:', err);
-                    wx.showToast({
-                        title: '复制失败',
-                        icon: 'none',
-                        duration: 2000
-                    });
-                }
-            });
-        } else {
-            wx.showToast({
-                title: '没有订单编号',
-                icon: 'none',
-                duration: 2000
-            });
+    const year2 = date2.getFullYear();
+    const month2 = date2.getMonth() + 1; // 月份从0开始,所以要加1
+    const day2 = date2.getDate();
+
+    // 返回格式化的字符串
+    return `${year1}年${month1}月${day1}日入住 - ${year2}年${month2}月${day2}日离店`;
+  },
+  formatDate(isoString) {
+    const date = new Date(isoString);
+    const year = date.getUTCFullYear();
+    const month = String(date.getUTCMonth() + 1).padStart(2, '0'); // 月份从0开始
+    const day = String(date.getUTCDate()).padStart(2, '0');
+    const hours = String(date.getUTCHours()).padStart(2, '0');
+    const minutes = String(date.getUTCMinutes()).padStart(2, '0');
+    const seconds = String(date.getUTCSeconds()).padStart(2, '0');
+
+    return `${year}-${month}-${day} 14:00:00`;
+  },
+  //复制
+  copyOrderNum() {
+    const orderNum = this.data.roomList.orderNum; // 获取订单编号
+    if (orderNum) {
+      wx.setClipboardData({
+        data: orderNum,
+        success: () => {
+          wx.showToast({
+            title: '复制成功',
+            icon: 'success',
+            duration: 2000
+          });
+        },
+        fail: (err) => {
+          console.error('复制失败:', err);
+          wx.showToast({
+            title: '复制失败',
+            icon: 'none',
+            duration: 2000
+          });
         }
         }
-    },
-    //续住
-    gourl() {
-        const start = new Date(this.data.roomList.endTime);
-        const end = new Date(start); // 复制 start 日期
-        end.setDate(start.getDate() + 1); // 将 end 设置为 start 的后一天
-    
-        // 构造要传递的信息
-        const info = {
-            objectId: this.data.roomList.room.objectId,
-            date_start: start.toISOString(), // 转换为 ISO 格式字符串
-            date_end: end.toISOString(), // 转换为 ISO 格式字符串
-        };
-        console.log('info', info);
-    
-        // 将信息转为查询字符串
-        var queryString = Object.keys(info)
-            .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(info[key])}`)
-            .join('&');
-        console.log(queryString);
-        
-        wx.navigateTo({
-            url: `../../../homestay/homestay-order2/index?${queryString}`
-        });
-    },
-    /**
-     * 生命周期函数--监听页面初次渲染完成
-     */
-    onReady: function () {
+      });
+    } else {
+      wx.showToast({
+        title: '没有订单编号',
+        icon: 'none',
+        duration: 2000
+      });
+    }
+  },
+  //续住
+  gourl() {
+    const start = new Date();
+    const end = new Date(start); // 复制 start 日期
+    end.setDate(start.getDate() + 1); // 将 end 设置为 start 的后一天
+    // 构造要传递的信息
+    const info = {
+      objectId: this.data.roomList.room.objectId,
+      date_start: dateF.formatTime('YYYY-mm-dd', start),
+      date_end: dateF.formatTime('YYYY-mm-dd', end),
+    };
+    console.log('info', info);
+    wx.navigateTo({
+      url: `../../../homestay/homestay-order2/index?objectId=${info.objectId}&date_start=${info.date_start}&date_end=${info.date_end}`
+    });
+  },
+  /**展开订单二维码 */
+  async openQr() {
+    let {
+      qr
+    } = this.data
+    if (qr) {
+      this.setData({
+        isQr: true
+      })
+      return
+    }
+    let that = this
+    let {
+      roomList
+    } = this.data
+    let url = 'https://server.fmode.cn/api/common/qrcode'
+    wx.request({
+      url: url,
+      data: {
+        qrCode: roomList?.objectId || '',
+        darkColor: "#000000",
+        lightColor: "#ffffff"
+      },
+      method: 'GET',
+      header: {
+        'content-type': 'application/json'
+      },
+      success: function (res) {
+        let qr = res.data.data
+        that.setData({
+          qr,
+          isQr: true,
+        })
+      },
+      fail: function () {
+        wx.showToast({
+          title: '请求二维码失败,请稍后再试',
+        })
+      }
+    })
+  },
+  closeQr() {
+    this.setData({
+      isQr: false
+    })
+  },
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
 
 
-    },
+  },
 
 
-    /**
-     * 生命周期函数--监听页面显示
-     */
-    onShow: function () {
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
 
 
-    },
+  },
 
 
-    /**
-     * 生命周期函数--监听页面隐藏
-     */
-    onHide: function () {
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
 
 
-    },
+  },
 
 
-    /**
-     * 生命周期函数--监听页面卸载
-     */
-    onUnload: function () {
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
 
 
-    },
+  },
 
 
-    /**
-     * 页面相关事件处理函数--监听用户下拉动作
-     */
-    onPullDownRefresh: function () {
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
 
 
-    },
+  },
 
 
-    /**
-     * 页面上拉触底事件的处理函数
-     */
-    onReachBottom: function () {
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
 
 
-    },
+  },
 
 
-    /**
-     * 用户点击右上角分享
-     */
-    onShareAppMessage: function () {
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
 
 
-    }
+  }
 })
 })

+ 4 - 1
nova-tourism/pages/my/my-order/order-detail/index.json

@@ -1,3 +1,6 @@
 {
 {
-  "usingComponents": {}
+  "usingComponents": {
+    "van-popup": "@vant/weapp/popup/index",
+    "van-notice-bar": "@vant/weapp/notice-bar/index"
+  }
 }
 }

+ 20 - 0
nova-tourism/pages/my/my-order/order-detail/index.less

@@ -199,4 +199,24 @@
             }
             }
         }
         }
     }
     }
+}
+.qr{
+    .title{
+        padding: 20rpx;
+        border-bottom: 1rpx solid whitesmoke;
+        text-align: center;
+        font-weight: bold;
+    }
+    .tip{
+        margin: 20rpx;
+        font-size: 25rpx;
+    }
+    .image{
+        display: flex;
+        justify-content: center;
+        image{
+            height: calc( 50vh - 200rpx );
+        }
+    }
+    
 }
 }

+ 23 - 87
nova-tourism/pages/my/my-order/order-detail/index.wxml

@@ -10,9 +10,9 @@
       <view class="roombox">
       <view class="roombox">
         <image src="{{roomList.room.images[0]}}"></image>
         <image src="{{roomList.room.images[0]}}"></image>
         <view class="room">
         <view class="room">
-          <view class="room-name">{{roomList.room.name}}</view>
+          <view class="room-name">{{roomList.room.name||''}} - {{statusMap[roomList.status]}}</view>
           <view class="room-tag">
           <view class="room-tag">
-            <block wx:for="{{roomList.room.tags}}">
+            <block wx:for="{{roomList.room.tags}}" wx:key="index">
               {{item}}
               {{item}}
             </block>
             </block>
           </view>
           </view>
@@ -25,6 +25,12 @@
           <view class="tex1">实付款</view>
           <view class="tex1">实付款</view>
           <view class="tex2">¥{{roomList.price}}</view>
           <view class="tex2">¥{{roomList.price}}</view>
         </view>
         </view>
+        <view class="text1" bind:tap="openQr" wx:if="{{roomList.status=='100'||roomList.status=='200'}}">
+          <view class="tex1">出具二维码</view>
+          <view class="tex3">
+            <van-icon name="arrow" />
+          </view>
+        </view>
         <view class="text1">
         <view class="text1">
           <view class="tex1">订单编号</view>
           <view class="tex1">订单编号</view>
           <view class="tex3">
           <view class="tex3">
@@ -33,11 +39,11 @@
           </view>
           </view>
         </view>
         </view>
         <!-- <view class="text1">
         <!-- <view class="text1">
-                    <view class="tex1">付款时间</view>
-                    <view class="tex3">
-                        2024-12-03 12:05:43
-                    </view>
-                </view> -->
+          <view class="tex1">付款时间</view>
+          <view class="tex3">
+            {{roomList.payTime}}
+          </view>
+        </view> -->
         <view class="text1">
         <view class="text1">
           <view class="tex1">入住时间</view>
           <view class="tex1">入住时间</view>
           <view class="tex3">
           <view class="tex3">
@@ -61,86 +67,16 @@
         </view>
         </view>
       </view>
       </view>
     </block>
     </block>
+  </view>
+</view>
 
 
-    <block wx:if="{{value=='物品'}}">
-      <view class="title2">{{item.shopStore.storeName}}</view>
-      <view class="roombox">
-        <image src="{{roomList.room.images[0]}}"></image>
-        <view class="room">
-          <view class="room-name">{{roomList.room.name}}</view>
-          <view class="room-tag">
-            <block wx:for="{{roomList.room.tags}}">
-              {{item}}
-            </block>
-          </view>
-          <view class="room-text">{{roomList.tiem}}</view>
-        </view>
-      </view>
-      <view class="textbox">
-        <view class="text1">
-          <view class="tex1">实付款</view>
-          <view class="tex2">¥1999.99</view>
-        </view>
-        <view class="text1">
-          <view class="tex1">订单编号</view>
-          <view class="tex3">
-            <view class="tex3-1">4150502930640735137 |</view>
-            <view class="tex3-2">复制</view>
-          </view>
-        </view>
-        <view class="text1">
-          <view class="tex1">付款时间</view>
-          <view class="tex3">
-            2024-12-03 12:05:43
-          </view>
-        </view>
-        <view class="text1">
-          <view class="tex1">发货时间</view>
-          <view class="tex3">
-            2024-12-03 12:05:43
-          </view>
-        </view>
-        <view class="text1">
-          <view class="tex1">物流单号</view>
-          <view class="tex3">
-            <view class="tex3-1">4150502930640735137 |</view>
-            <view class="tex3-2">复制</view>
-          </view>
-        </view>
-        <view class="text1">
-          <view class="tex1">申请开票</view>
-          <view class="tex3">
-            本订单由商家开具,无法显示开票
-          </view>
-        </view>
-        <view class="text2">
-          <view class="tex1">收货地址</view>
-          <view class="tex4">
-            发货地址发货地址发货地址发货地址发货地址发货地址
-          </view>
-        </view>
-
-      </view>
-    </block>
 
 
+<van-popup closeable position="bottom" round show="{{ isQr }}" bind:close="closeQr">
+  <view class="qr" style="height: 50vh;">
+    <view class="title">订单二维码</view>
+    <van-notice-bar color="#F37B40" background="#fff" left-icon="info-o" text="入住以及退房时请出示订单二维码" />
+    <view class="image">
+      <image src="{{qr||'https://file-cloud.fmode.cn/EbxZUK5lBI/20250412/6brmu4035238241.jpg'}}" mode="aspectFit" />
+    </view>
   </view>
   </view>
-
-  <!-- 望仙礼遇 -->
-  <!-- <view class="box">
-        <view class="wang-cardbox">
-            <block wx:for="{{4}}">
-                <view class="wang-card" bindtap="gourl2">
-                    <image src="https://file-cloud.fmode.cn//tmp/srFPqGFAzeT5958c828d985e451ed4c0b452e39ff57a.jpeg"></image>
-                    <view class="wang-catex">粉黛胖挑主人杯(无礼盒)·手做</view>
-                    <view class="wang-numbox">
-                        <view class="wang-num">
-                            <view class="wang-num1">¥</view>
-                            <view class="wang-num2">19900</view>
-                        </view>
-                        <view class="wang-submit">购买</view>
-                    </view>
-                </view>
-            </block>
-        </view>
-    </view> -->
-</view>
+</van-popup>

File diff suppressed because it is too large
+ 0 - 0
nova-tourism/pages/my/my-order/order-detail/index.wxss


+ 1 - 1
nova-tourism/pages/my/my-wallet/index.wxml

@@ -5,7 +5,7 @@
         <image src="https://file-cloud.fmode.cn/EbxZUK5lBI/20241212/qjtn9s104029899.png"></image>
         <image src="https://file-cloud.fmode.cn/EbxZUK5lBI/20241212/qjtn9s104029899.png"></image>
         <view class="text">
         <view class="text">
         零钱
         零钱
-        <view>¥10000000000.55 <van-icon name="arrow" /></view>
+        <view>¥0 <van-icon name="arrow" /></view>
         </view>
         </view>
     </view>
     </view>
     <view class="textbox">
     <view class="textbox">

+ 1 - 1
nova-tourism/pages/my/my-wallet/loose-change/index.wxml

@@ -4,7 +4,7 @@
 <view class="moneyBox">
 <view class="moneyBox">
   <image src="https://file-cloud.fmode.cn/EbxZUK5lBI/20241212/qjtn9s104029899.png"></image>
   <image src="https://file-cloud.fmode.cn/EbxZUK5lBI/20241212/qjtn9s104029899.png"></image>
   <view class="subTitle">我的零钱</view>
   <view class="subTitle">我的零钱</view>
-  <view class="money">¥10000000000.66</view>
+  <view class="money">¥0</view>
 </view>
 </view>
 <view class="btnBox">
 <view class="btnBox">
   <button class="top_up">充值</button>
   <button class="top_up">充值</button>

+ 10 - 3
project.private.config.json

@@ -8,9 +8,16 @@
     "miniprogram": {
     "miniprogram": {
       "list": [
       "list": [
         {
         {
-          "name": "nova-tourism/pages/my/merchant/good/good-list/index",
-          "pathName": "nova-tourism/pages/my/merchant/good/good-list/index",
-          "query": "",
+          "name": "nova-tourism/pages/my/merchant/code-verify/index",
+          "pathName": "nova-tourism/pages/my/merchant/code-verify/index",
+          "query": "id=JiwYYEE69D",
+          "launchMode": "default",
+          "scene": null
+        },
+        {
+          "name": "nova-tourism/pages/my/my-order/order-detail/index",
+          "pathName": "nova-tourism/pages/my/my-order/order-detail/index",
+          "query": "value=%E6%B0%91%E5%AE%BF&objectId=JiwYYEE69D",
           "launchMode": "default",
           "launchMode": "default",
           "scene": null
           "scene": null
         }
         }

Some files were not shown because too many files changed in this diff