Quellcode durchsuchen

shangjiaduan page

邹能昇 vor 3 Monaten
Ursprung
Commit
7fb2fa5036
53 geänderte Dateien mit 2940 neuen und 6 gelöschten Zeilen
  1. 8 1
      app.json
  2. 78 0
      nova-tourism/components/comment-list/index.js
  3. 8 0
      nova-tourism/components/comment-list/index.json
  4. 62 0
      nova-tourism/components/comment-list/index.less
  5. 47 0
      nova-tourism/components/comment-list/index.wxml
  6. 1 0
      nova-tourism/components/comment-list/index.wxss
  7. 50 0
      nova-tourism/components/goods-list/index.js
  8. 7 0
      nova-tourism/components/goods-list/index.json
  9. 202 0
      nova-tourism/components/goods-list/index.less
  10. 75 0
      nova-tourism/components/goods-list/index.wxml
  11. 0 0
      nova-tourism/components/goods-list/index.wxss
  12. 49 0
      nova-tourism/components/select/index.js
  13. 4 0
      nova-tourism/components/select/index.json
  14. 51 0
      nova-tourism/components/select/index.less
  15. 34 0
      nova-tourism/components/select/index.wxml
  16. 1 0
      nova-tourism/components/select/index.wxss
  17. 133 0
      nova-tourism/pages/my/merchant/comments/hotel/comment-detail/index.js
  18. 7 0
      nova-tourism/pages/my/merchant/comments/hotel/comment-detail/index.json
  19. 85 0
      nova-tourism/pages/my/merchant/comments/hotel/comment-detail/index.less
  20. 37 0
      nova-tourism/pages/my/merchant/comments/hotel/comment-detail/index.wxml
  21. 0 0
      nova-tourism/pages/my/merchant/comments/hotel/comment-detail/index.wxss
  22. 130 0
      nova-tourism/pages/my/merchant/comments/hotel/index.js
  23. 9 0
      nova-tourism/pages/my/merchant/comments/hotel/index.json
  24. 82 0
      nova-tourism/pages/my/merchant/comments/hotel/index.less
  25. 102 0
      nova-tourism/pages/my/merchant/comments/hotel/index.wxml
  26. 0 0
      nova-tourism/pages/my/merchant/comments/hotel/index.wxss
  27. 256 0
      nova-tourism/pages/my/merchant/merchant-home/account/index.js
  28. 6 0
      nova-tourism/pages/my/merchant/merchant-home/account/index.json
  29. 81 0
      nova-tourism/pages/my/merchant/merchant-home/account/index.less
  30. 72 0
      nova-tourism/pages/my/merchant/merchant-home/account/index.wxml
  31. 1 0
      nova-tourism/pages/my/merchant/merchant-home/account/index.wxss
  32. 207 0
      nova-tourism/pages/my/merchant/merchant-home/account/mobile/index.js
  33. 3 0
      nova-tourism/pages/my/merchant/merchant-home/account/mobile/index.json
  34. 51 0
      nova-tourism/pages/my/merchant/merchant-home/account/mobile/index.less
  35. 15 0
      nova-tourism/pages/my/merchant/merchant-home/account/mobile/index.wxml
  36. 1 0
      nova-tourism/pages/my/merchant/merchant-home/account/mobile/index.wxss
  37. 226 0
      nova-tourism/pages/my/merchant/merchant-home/account/password/index.js
  38. 3 0
      nova-tourism/pages/my/merchant/merchant-home/account/password/index.json
  39. 46 0
      nova-tourism/pages/my/merchant/merchant-home/account/password/index.less
  40. 22 0
      nova-tourism/pages/my/merchant/merchant-home/account/password/index.wxml
  41. 1 0
      nova-tourism/pages/my/merchant/merchant-home/account/password/index.wxss
  42. 3 3
      nova-tourism/pages/my/merchant/merchant-home/index.js
  43. 2 2
      nova-tourism/pages/my/merchant/merchant-home/index.wxml
  44. 145 0
      nova-tourism/pages/my/merchant/room-manage/index.js
  45. 5 0
      nova-tourism/pages/my/merchant/room-manage/index.json
  46. 11 0
      nova-tourism/pages/my/merchant/room-manage/index.less
  47. 10 0
      nova-tourism/pages/my/merchant/room-manage/index.wxml
  48. 1 0
      nova-tourism/pages/my/merchant/room-manage/index.wxss
  49. 370 0
      nova-tourism/pages/my/merchant/room-manage/room-edit/index.js
  50. 12 0
      nova-tourism/pages/my/merchant/room-manage/room-edit/index.json
  51. 58 0
      nova-tourism/pages/my/merchant/room-manage/room-edit/index.less
  52. 69 0
      nova-tourism/pages/my/merchant/room-manage/room-edit/index.wxml
  53. 1 0
      nova-tourism/pages/my/merchant/room-manage/room-edit/index.wxss

+ 8 - 1
app.json

@@ -20,7 +20,14 @@
                 "pages/my/merchant/merchant-home/store-withdraw/index",
                 "pages/my/merchant/merchant-home/order-list/index",
                 "pages/my/merchant/merchant-home/order2-list/index",
-                "pages/my/merchant/merchant-home/order2-list/order-deils/index"
+                "pages/my/merchant/merchant-home/order2-list/order-deils/index",
+                "pages/my/merchant/merchant-home/account/index",
+                "pages/my/merchant/merchant-home/account/password/index",
+                "pages/my/merchant/merchant-home/account/mobile/index",
+                "pages/my/merchant/comments/hotel/index",
+                "pages/my/merchant/comments/hotel/comment-detail/index",
+                "pages/my/merchant/room-manage/index",
+                "pages/my/merchant/room-manage/room-edit/index"
             ]
         },
         {

+ 78 - 0
nova-tourism/components/comment-list/index.js

@@ -0,0 +1,78 @@
+
+const dateServ = require('../../../utils/date')
+Component({
+    /**
+     * 组件的属性列表
+     */
+    properties: {
+        comments:{
+            type:Array,
+            default: []
+        },
+        title: {
+            type:String,
+            default: '评价列表'
+            
+        },
+        showMore: {
+            type:Boolean,
+            default: false
+        }
+    },
+
+    /**
+     * 组件的初始数据
+     */
+    data: {
+
+    },
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        more(){
+            this.triggerEvent('more')
+        },
+        preview(event){
+            console.log(event);
+            let image = event.currentTarget.dataset.image
+            let comment = event.currentTarget.dataset.item
+            wx.previewImage({
+                current: image,
+                urls: comment.images,
+                success: function(res) {
+                  console.log(res)
+                }
+            })
+        }
+    },
+    lifetimes: {
+        async created() {},
+        async attached() {// 在组件实例进入页面节点树时执行
+            // console.log(this.comments);
+            // let isarr = Array.isArray(this.comments) 
+            // if(!isarr){
+            //     this.comments = [this.comments]
+            // }
+            // console.log(this.comments);
+        },
+        moved() {},
+        detached() {
+        },
+        ready: function () {// 在组件在视图层布局完成后执行
+            // console.log(this.data);
+            // this.data.comments.forEach(comment =>{
+            //     console.log(typeof comment.updatedAt);
+            //     if(typeof comment.updatedAt == 'date'){
+            //        return comment.updatedAt = dateServ.formatTime(comment.updatedAt,'YY-mm-dd hh:mm:ss')
+            //     }
+            //     return comment.updatedAt
+            // })
+            // this.setData({
+            //     comments:this.data.comments
+            // })
+        },
+
+    },
+
+})

+ 8 - 0
nova-tourism/components/comment-list/index.json

@@ -0,0 +1,8 @@
+{
+    "component": true,
+    "usingComponents": {
+        "van-rate": "@vant/weapp/rate/index",
+        "van-divider": "@vant/weapp/divider/index",
+        "van-image": "@vant/weapp/image/index"
+    }
+  }

+ 62 - 0
nova-tourism/components/comment-list/index.less

@@ -0,0 +1,62 @@
+@import '../../styles/base.less';
+
+.comments-header{
+    display: flex;
+    justify-content: space-between;   
+    .more {
+        width: 100rpx;
+        text-align: right;
+    }
+}
+.comment {
+    .comment-header {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .header-text {
+            flex: 1;
+            padding:0 10rpx;
+        }
+        .header-avatar {
+            width: 80rpx;
+            height: 80rpx;
+            .header-avatar-image {
+                width: 100%;
+                height: 100%;
+                margin: 0 auto;
+                border-radius: 50%;
+              }
+          }
+    }
+    .comment-content {
+        .comment-text {
+            padding: 10rpx 0;
+        }
+        .comment-images {
+            display: flex;
+            flex-wrap: wrap;
+        }
+        .comment-image {
+            width: 210rpx;
+            height: 210rpx;
+            margin: 6rpx;
+            background: #222222;
+        }
+    }
+    .merchant-reply {
+        font-size: 26rpx;
+        .reply-title {
+            color: #ffe300;
+        }
+        .reply-content {
+            text-indent: 2em;
+            padding: 10px 0;
+        }
+    }
+
+    
+      
+}
+.comments-footer {
+    text-align: center;
+}

+ 47 - 0
nova-tourism/components/comment-list/index.wxml

@@ -0,0 +1,47 @@
+<view class="comments-wrap page-section-spacing" >
+    <block wx:if="{{title}}">
+        <view class="comments-header">
+            <view class="title" >{{title}}</view>
+            <view class="more" wx:if="{{showMore}}" bind:tap="more">更多<van-icon name="arrow"></van-icon></view>
+        </view>
+        <van-divider customStyle="margin: 16rpx 0;" />
+    </block>
+    <view id="comments" wx:if="{{comments.length}}">
+        <view class="comment page-section-spacing" wx:for="{{comments}}" wx:key="index" wx:if="{{!item.hiddenComment}}">
+            <view class="comment-header">
+                <view class="header-avatar">
+                    <image class="header-avatar-image" src="{{item.user.avatar}}"></image>
+                </view>
+                <view class="header-text">
+                    <view class="comment-name text-small">{{item.user.nickname}}</view>
+                    <view class="comment-score ">
+                        <van-rate readonly allow-half value="{{ item.score }}" size="{{ 12 }}" color="#FF8936"
+                            void-icon="star" void-color="#eee" />
+                    </view>
+                </view>
+                <view class="comment-date text-small grey">{{item.time}}</view>
+            </view>
+            <view class="comment-content">
+                <view class="comment-text text">
+                    {{item.content}}
+                </view>
+                <view class="comment-images">
+                    <block wx:for="{{item.images}}" wx:key="index" wx:for-item="image">
+                        <image class="comment-image" src="{{image}}" fit="contain"  lazy-load  data-item="{{item}}" data-image="{{image}}" bind:tap="preview" />
+                    </block>
+                </view>
+            </view>
+            <view class="merchant-reply" wx:if="{{item.reply}}">
+                <view class="reply-title">商家回复:</view>
+                <view class="reply-content">{{item.reply}}</view>
+            </view>
+        </view>
+        <view class="comments-footer" wx:if="{{footer}}">
+            <view class="text" bind:tap="more">全部{{commentCount || 0}}条评价 <van-icon name="arrow"></van-icon>
+            </view>
+        </view>
+    </view>
+    <block wx:else>
+        <van-empty description="暂无评价"></van-empty>
+    </block>
+</view>

+ 1 - 0
nova-tourism/components/comment-list/index.wxss

@@ -0,0 +1 @@
+.red{color:#F01740}.grey{color:#666666}.black{color:#000000}.title{font-weight:Medium;font-size:36rpx;color:#222222}.text-large{font-size:36rpx}.text{font-size:30rpx}.text-left{text-align:left}.text-center{text-align:center}.text-small{font-size:24rpx}.flex{display:flex}.justify-between{justify-content:space-between}.flex-aligin-center{display:flex;align-items:center}.flex-justify-between{display:flex;justify-content:space-between}.flex-1{flex:1}.flex-grow-1{flex-grow:1}.fixed-bottom{position:fixed;bottom:0;left:0;right:0}.w-100{width:100%}.h-100{height:100%}.page-section{margin:20rpx;border-radius:20rpx;background-color:#ffffff}.page-section-spacing{padding:20rpx}.spacing-small{padding:10rpx}.border-trans{border:1px solid transparent}.ellipsis{width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.ellipsis-2{width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.comments-header{display:flex;justify-content:space-between}.comments-header .more{width:100rpx;text-align:right}.comment .comment-header{display:flex;align-items:center;justify-content:space-between}.comment .comment-header .header-text{flex:1;padding:0 10rpx}.comment .comment-header .header-avatar{width:80rpx;height:80rpx}.comment .comment-header .header-avatar .header-avatar-image{width:100%;height:100%;margin:0 auto;border-radius:50%}.comment .comment-content .comment-text{padding:10rpx 0}.comment .comment-content .comment-images{display:flex;flex-wrap:wrap}.comment .comment-content .comment-image{width:210rpx;height:210rpx;margin:6rpx;background:#222222}.comment .merchant-reply{font-size:26rpx}.comment .merchant-reply .reply-title{color:#ffe300}.comment .merchant-reply .reply-content{text-indent:2em;padding:10px 0}.comments-footer{text-align:center}

+ 50 - 0
nova-tourism/components/goods-list/index.js

@@ -0,0 +1,50 @@
+// nova-tourism/components/goods-list/index.js
+Component({
+    /**
+     * 组件的属性列表
+     */
+    properties: {
+      list: {
+        type: Array,
+        default: []
+      },
+      mode: {
+        type: String,
+        default: 'vertical'
+      },
+      navigateBtn: {
+        type: String,
+        default: '立即预订'
+      },
+      btnModel:{
+        type: String,
+        default: ''
+      },
+      activeColor:{
+        type: String,
+        value: ''
+      },
+    },
+  
+    /**
+     * 组件的初始数据
+     */
+    data: {},
+  
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+      toDetail(e) {
+        let item = e.currentTarget.dataset.item
+        console.log(item)
+        this.triggerEvent('toDetail', { id: item.objectId })
+      },
+      btnTap(e){
+        let item = e.currentTarget.dataset.item
+        console.log(item)
+        this.triggerEvent('btnTap', { id: item.objectId })
+      }
+    }
+  })
+  

+ 7 - 0
nova-tourism/components/goods-list/index.json

@@ -0,0 +1,7 @@
+{
+    "component": true,
+    "usingComponents": {
+        "van-button": "@vant/weapp/button/index",
+        "van-empty": "@vant/weapp/empty/index"
+    }
+}

+ 202 - 0
nova-tourism/components/goods-list/index.less

@@ -0,0 +1,202 @@
+@red:#F01740;
+@grey: #666666;
+.title {
+  font-weight: Medium;
+  font-size: 36rpx; 
+  color: #222222;
+}
+.text-large {
+  font-size: 36rpx; 
+}
+.text {
+  font-size: 30rpx;
+  word-break: keep-all;
+}
+.text-small {
+  font-size: 24rpx;
+  word-break: keep-all;
+}
+.grey {
+  color:#666666;
+}
+.horizontal { 
+  padding: 20rpx;
+  font-size: 24rpx;
+
+  .goods { 
+      display: flex;
+      align-items:end;
+      width: 100%; 
+      padding: 10rpx;
+      margin-top: 20rpx;
+      background: #ffffff;
+      border-radius: 20rpx;
+      .goods-image-wrapper {
+        width: 180rpx;
+        height: 180rpx;
+        .goods-image {
+            width: 100%;
+            height: 100%;
+            text-align: center;
+            border-radius: 20rpx;
+        }
+      }
+      .goods-detail {
+        flex:1;
+        padding: 0 20rpx;
+        .goods-name {
+          width: 100%;
+          margin: 10rpx 0;
+          font-size: 30rpx;
+          color:#222222; 
+          overflow: hidden; //一定要写
+          text-overflow: ellipsis; //超出省略号
+          display: -webkit-box; //一定要写
+          -webkit-line-clamp: 1; //控制行数
+          -webkit-box-orient: vertical; //一定要写
+        }
+
+        .goods-describe {
+          width: 100%;
+            margin: 10rpx 0;
+            min-height: 80rpx;
+            overflow: hidden; //一定要写
+            text-overflow: ellipsis; //超出省略号
+            display: -webkit-box; //一定要写
+            -webkit-line-clamp: 2; //控制行数
+            -webkit-box-orient: vertical; //一定要写
+
+        }
+        .goods-tags {
+          width: 100%;
+          margin:8rpx 0;
+          min-height: 60rpx;
+          overflow: hidden; //一定要写
+            text-overflow: ellipsis; //超出省略号
+            display: -webkit-box; //一定要写
+            -webkit-line-clamp: 2; //控制行数
+            -webkit-box-orient: vertical; //一定要写
+        }
+        .goods-detail-bottom {
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+          .goods-price-wrapper {
+            display: flex;
+            color: @red;
+            margin-top: 10rpx;
+            .goods-price-text {
+                margin: 0 10rpx 0 0;
+            }
+            .goods-price-num{
+              font-size: 28rpx;
+              font-weight: 600;
+            }
+          }
+          .bottom-btns {
+         
+              width: 180rpx;
+            .btn-text {
+              letter-spacing: 6rpx;
+            }
+          }
+        }
+        
+      }
+      
+
+  }
+} 
+
+
+
+
+
+
+
+
+
+.vertical { 
+  display: flex;
+  justify-content: space-between;
+  flex-wrap: wrap;
+  padding: 20rpx;
+  font-size: 24rpx;
+
+  .goods { 
+      width: 48%; 
+      // padding: 10rpx;
+      margin-top: 20rpx;
+      background: #ffffff;
+      border-radius: 20rpx;
+      .goods-image-wrapper {
+        width: 100%;
+        height: 240rpx;
+        .goods-image {
+            width: 100%;
+            height: 100%;
+            text-align: center;
+            border-radius: 20rpx;
+        }
+      }
+      .goods-detail {
+        flex:1;
+        padding: 10rpx 20rpx;
+        .goods-name {
+          margin-top: 10rpx;
+          min-height: 80rpx;
+          font-size: 30rpx;
+          color:#222222;
+          overflow: hidden; //一定要写
+          text-overflow: ellipsis; //超出省略号
+          display: -webkit-box; //一定要写
+          -webkit-line-clamp: 2; //控制行数
+          -webkit-box-orient: vertical; //一定要写
+        }
+
+        .goods-describe {
+          width: 100%;
+            margin: 10rpx 0;
+            min-height: 80rpx;
+            overflow: hidden; //一定要写
+            text-overflow: ellipsis; //超出省略号
+            display: -webkit-box; //一定要写
+            -webkit-line-clamp: 2; //控制行数
+            -webkit-box-orient: vertical; //一定要写
+
+        }
+        .goods-tags {
+          width: 100%;
+          margin:8rpx 0;
+          overflow: hidden; //一定要写
+            text-overflow: ellipsis; //超出省略号
+            display: -webkit-box; //一定要写
+            -webkit-line-clamp: 2; //控制行数
+            -webkit-box-orient: vertical; //一定要写
+        }
+        .goods-price-wrapper {
+          display: flex;
+          color: @red;
+          margin-top: 10rpx;
+          .goods-price-text {
+              margin: 0 10rpx 0 0;
+          }
+          .goods-price-num{
+            font-size: 28rpx;
+            font-weight: 600;
+          }
+        }
+        .address {
+          margin-top: 10rpx;
+          display: flex;
+
+          .hotel-address {
+            color:@grey;
+          }
+        }
+        
+      }
+      
+
+  }
+}

+ 75 - 0
nova-tourism/components/goods-list/index.wxml

@@ -0,0 +1,75 @@
+<block wx:if="{{list.length}}">
+    <view class="wrapper horizontal" wx:if="{{mode=='horizontal'}}">
+        <block wx:for="{{list}}" wx:key="index">
+            <view class="goods" data-item="{{item}}" bindtap="toDetail">
+                <view class="goods-image-wrapper">
+                    <image class="goods-image" src="{{item.images&&item.images[0]}}" />
+                </view>
+                <view class="goods-detail">
+                    <view class="goods-name title">{{item.name}}</view>
+                    <!-- <view class="goods-describe">{{item.describe}}</view> -->
+                    <view class="goods-tags text-small grey">
+                        <block wx:for="{{item.tags}}" wx:for-item="tag" wx:key="index">
+                            <text>{{tag}}\t</text>
+                        </block>
+                    </view>
+                    <view class="goods-detail-bottom">
+                        <view class="goods-price-wrapper">
+                            <view class="goods-price-text" style="color: {{activeColor}};">
+                                ¥
+                                <text class="goods-price-num">{{item.price}}</text>
+                                /每晚
+                            </view>
+                        </view>
+                        <view class="bottom-btns text-large">
+                            <van-button class="btn" color="{{activeColor}}" size="small" round plain="{{btnModel}}" data-item="{{item}}" catchtap="btnTap">
+                                <text class="btn-text">{{navigateBtn || '立即预订'}}</text>
+                            </van-button>
+                        </view>
+                    </view>
+                </view>
+                <!-- <view class="performance">
+                <van-icon name="send-gift" />
+                <view class="hotel-performance">{{item.performance}}</view>
+            </view> -->
+            </view>
+        </block>
+    </view>
+    <view class="wrapper vertical" wx:elif="{{mode=='vertical'}}">
+        <block wx:for="{{list}}" wx:key="index">
+            <view class="goods" data-item="{{item}}" bindtap="toDetail">
+                <view class="goods-image-wrapper">
+                    <image class="goods-image" src="{{item.images&&item.images[0]}}" />
+                </view>
+                <view class="goods-detail">
+                    <view class="goods-name title">{{item.name}}</view>
+                    <!-- <view class="goods-describe">{{item.describe}}</view>
+                <view class="goods-tags text-small grey">
+                    <block wx:for="{{item.tags}}" wx:for-item="tag" wx:key="index">
+                        <text>{{tag}}\t</text>
+                    </block>
+                </view> -->
+                    <view class="goods-price-wrapper">
+                        <view class="goods-price-text" style="color: {{activeColor}};">
+                            ¥
+                            <text class="goods-price-num">{{item.price}}</text>
+                            /每晚
+                        </view>
+                        <!-- <view class="hotel-price">已减价格¥{{item.reduce}}</view> -->
+                    </view>
+                    <view class="address">
+                        <!-- <van-icon name="location-o" /> -->
+                        <view class="hotel-address">{{item.address}}</view>
+                    </view>
+                </view>
+                <!-- <view class="performance">
+                <van-icon name="send-gift" />
+                <view class="hotel-performance">{{item.performance}}</view>
+            </view> -->
+            </view>
+        </block>
+    </view>
+</block>
+<block wx:else>
+    <van-empty description="暂无列表" />
+</block>

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
nova-tourism/components/goods-list/index.wxss


+ 49 - 0
nova-tourism/components/select/index.js

@@ -0,0 +1,49 @@
+// nova-tourism/components/select/index.js
+Component({
+    /**
+     * 组件的属性列表
+     */
+    // properties: {
+    //     show: {//控制下拉列表的显示隐藏,false隐藏、true显示
+    //         type: Boolean,
+    //         default: false
+    //     },
+    //     options: {//下拉列表的数据 // ['15:10','15:15','15:20']
+    //         type: Array,
+    //         default: []
+    //     },
+    //     index: 0,//选择的下拉列表下标
+    // },
+
+    /**
+     * 组件的初始数据
+     */
+    data: {
+
+    },
+
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        onChange(event) {
+            let value = event.detail.value;
+            let key = event.detail.value;
+            console.log(event.detail);
+        },
+        // 点击下拉显示框
+        selectTap() {
+            this.setData({
+                selectShow: !this.data.selectShow
+            });
+        },
+        // 点击下拉列表
+        optionTap(e) {
+            let Index = e.currentTarget.dataset.index;//获取点击的下拉列表的下标
+            this.setData({
+                index: Index,
+                selectShow: !this.data.selectShow
+            });
+        }
+    }
+})

+ 4 - 0
nova-tourism/components/select/index.json

@@ -0,0 +1,4 @@
+{
+    "component": true,
+    "usingComponents": {}
+}

+ 51 - 0
nova-tourism/components/select/index.less

@@ -0,0 +1,51 @@
+//css样式
+.select_box{
+    width:45%;
+    height:70%;
+    border-radius: 14rpx;
+    position: relative;
+  }
+  .select_box .select{
+    box-sizing: border-box;
+    width: 100%;
+    height: 100%;
+    border-radius: 8rpx;
+    display: flex;
+    align-items: center;
+    padding: 0 10rpx;
+  }
+  .select_box .select .select_text{
+    font-size: 26rpx;
+    color: #777777;
+    line-height: 28rpx;
+    flex: 1;
+  }
+  .select_box .select .select_img{
+    width: 30rpx;
+    height: 30rpx;
+    display: block;
+    transition:transform 0.3s;
+  }
+  .select_box .select .select_img_rotate{
+    transform:rotate(180deg); 
+  }
+  .select_box .option_box{
+    position: absolute;
+    top: calc(100% - 1px);
+    width: 100%;
+    box-sizing: border-box;
+    height: 0;
+    overflow-y: auto;
+    background: #fff;
+    transition: height 0.3s;
+    border-left:1px solid #efefef;
+    border-right:1px solid #efefef;
+  }
+  .select_box .option_box .option{
+    display: block;
+    line-height: 30rpx; 
+    font-size: 26rpx;
+    border-top: 1px solid #efefef;
+    border-bottom: 1px solid #efefef;
+    padding: 10rpx;
+  }

+ 34 - 0
nova-tourism/components/select/index.wxml

@@ -0,0 +1,34 @@
+<view class="select-top-control">
+    <input type="text"  placeholder="Please select" bindinput="onChange"/>
+</view>
+
+<!-- <nz-option *ngFor="let item of options" [nzLabel]="item" [nzValue]="item"></nz-option> -->
+<view class='select-options' style='height:{{show?(options.length>5?325:options.length*50):0}}rpx;'>
+    <text class='select-option' wx:for='{{options}}' wx:key='this' data-index='{{index}}' catchtap='optionTap'>{{item}}</text>
+</view>
+
+
+<!-- <nz-select
+[nzMaxTagCount]="3"
+[nzMaxTagPlaceholder]="tagPlaceHolder"
+nzMode="multiple"
+nzPlaceHolder="Please select"
+[(ngModel)]="listOfSelectedValue"
+>
+<nz-option *ngFor="let item of listOfOption" [nzLabel]="item" [nzValue]="item"></nz-option>
+</nz-select>
+<ng-template #tagPlaceHolder let-selectedList>and {{ selectedList.length }} more selected</ng-template> -->
+
+
+
+<!-- 
+<view class='select_box'>
+
+    <view class='select' catchtap='selectTap'>
+        <text class='select_text'>{{selectData[index]}}</text>
+        <!-- <image class='select_img {{show&&"select_img_rotate"}}' src='../../images/b2.png'  background-size="contain"></image> 
+    </view>{{show}}
+    <view class='option_box' style='height:{{show?(selectData.length>5?325:selectData.length*50):0}}rpx;'>
+        <text class='option' wx:for='{{selectData}}' wx:key='this' data-index='{{index}}' catchtap='optionTap'>{{item}}</text>
+    </view>
+</view> -->

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

@@ -0,0 +1 @@
+.select_box{width:45%;height:70%;border-radius:14rpx;position:relative}.select_box .select{box-sizing:border-box;width:100%;height:100%;border-radius:8rpx;display:flex;align-items:center;padding:0 10rpx}.select_box .select .select_text{font-size:26rpx;color:#777777;line-height:28rpx;flex:1}.select_box .select .select_img{width:30rpx;height:30rpx;display:block;transition:transform .3s}.select_box .select .select_img_rotate{transform:rotate(180deg)}.select_box .option_box{position:absolute;top:calc(100% - 1px);width:100%;box-sizing:border-box;height:0;overflow-y:auto;background:#fff;transition:height .3s;border-left:1px solid #efefef;border-right:1px solid #efefef}.select_box .option_box .option{display:block;line-height:30rpx;font-size:26rpx;border-top:1px solid #efefef;border-bottom:1px solid #efefef;padding:10rpx}

+ 133 - 0
nova-tourism/pages/my/merchant/comments/hotel/comment-detail/index.js

@@ -0,0 +1,133 @@
+const Parse = getApp().Parse;
+const company = getApp().globalData.company;
+const dateServ = require('../../../../../../../utils/date')
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        orderId: '',
+        order: null,
+        showReplyModal: '',
+        reply:''
+    },
+
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+        let orderId = options.id
+        console.log(options.id);
+        this.setData({
+            orderId
+        })
+        this.getOrder()
+    },
+
+
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+
+    },
+    async getOrder(){
+        let Order = new Parse.Query('RoomOrder')
+        Order.include('user')
+        Order.include('room')
+        Order.get(this.data.orderId)
+        let order = await Order.first()
+        order = order.toJSON()
+        order['time'] = dateServ.formatTime('YY-mm-dd HH:MM',order.updatedAt)
+        order['day'] = parseInt((new Date(order.endTime.iso).getTime() - new Date(order.startTime.iso).getTime()) / (1000 * 60 * 60 * 24));
+        order.startTime = dateServ.formatTime('mm月dd日',order.startTime.iso)
+        order.endTime = dateServ.formatTime('mm月dd日',order.endTime.iso)
+        console.log(order)
+        this.setData({
+            order
+        })
+    },
+    showModal(){ 
+        this.setData({
+            showReplyModal: true
+        })
+    },
+    closeModal(){
+        this.setData({
+            showReplyModal: false
+        })
+    },
+    replyChange(event){
+        console.log(event.detail);
+        this.data.reply = event.detail.value;
+    },
+    async replyComment(){
+        try {
+            let Order = new Parse.Query('RoomOrder')
+            Order.get(this.data.orderId)
+            let order = await Order.first()
+            order.set("reply",this.data.reply)
+            let res = await order.save()
+            if(res && res.id){
+                this.getOrder()
+                this.setData({
+                    showReplyModal: false
+                })
+                wx.showToast({
+                  title: '回复成功',
+                  icon: 'none'
+                })
+            }  
+        } catch (error) {
+            this.setData({
+                showReplyModal: false
+            })
+            wx.showToast({
+                title: `回复失败,${error}`,
+                icon: 'none'
+            }) 
+        }
+    },
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

+ 7 - 0
nova-tourism/pages/my/merchant/comments/hotel/comment-detail/index.json

@@ -0,0 +1,7 @@
+{
+  "usingComponents": {
+    "comment-list": "../../../../../../components/comment-list/index",
+    "modal": "../../../../../../components/modal/index",
+    "van-button": "@vant/weapp/button/index"
+  }
+}

+ 85 - 0
nova-tourism/pages/my/merchant/comments/hotel/comment-detail/index.less

@@ -0,0 +1,85 @@
+@import '../../../../../../styles/base.less';
+@yellow: #46a9a4;
+page {
+    background: #f6f6f6;
+}
+
+
+.order-row {
+    display: flex;
+    align-items: center;
+    margin:10rpx 0;
+    padding: 10rpx 0;
+}
+.order-number {
+    display: flex;
+    justify-content: space-between;
+    border-bottom: 0.5px solid @yellow;
+}
+
+.order-content {
+    margin: 0;
+
+    .avatar {
+        width: 80rpx;
+        height: 80rpx;
+        margin-right: 20rpx;
+        border-radius: 50%;
+    } 
+
+    .order-shop-img{
+        width:120rpx;
+        height:90rpx;
+        margin-right: 20rpx;
+    }
+    .order-user {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .order-user-name {
+            flex:1;
+            overflow: hidden; //一定要写
+            text-overflow: ellipsis; //超出省略号
+            display: -webkit-box; //一定要写
+            -webkit-line-clamp: 2; //控制行数
+            -webkit-box-orient: vertical; //一定要写
+        } 
+    }
+    .order-info {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        width: 100%;
+        padding:10rpx 20rpx;
+        border: 1px solid #46a9a4;
+        border-radius: 40rpx;
+    }
+    .order-comment-text {
+        margin:20rpx 0;
+    }
+}
+
+.comment-detail{
+    // border-bottom: 1px solid @yellow;  
+}
+.reply {
+    margin-bottom: 80rpx;
+}
+
+.footer {
+    padding: 20rpx;
+}
+
+.reply-modal {
+    width: 100%;
+    padding: 20rpx;
+    .reply-textarea {
+        box-sizing: border-box;
+        width: 100%;
+        height: 400rpx;
+        padding: 20rpx;
+        border: 1px solid #eee;
+        border-radius: 20rpx;
+    }
+}
+ 

+ 37 - 0
nova-tourism/pages/my/merchant/comments/hotel/comment-detail/index.wxml

@@ -0,0 +1,37 @@
+<nav type="back" background-color="#46a9a4" title="评论详情" />
+<view class="page-section border-trans">
+    <view class=" page-section-spacing" wx:if="{{order}}">
+        <view class="order-number order-row text">
+            <view class="number ">订单号:{{order.orderNum}}</view>
+        </view>
+        <view class="order-content" >
+            <view class="order-shop order-row">
+                <image class="order-shop-img " src="{{order.images[0]}}" />
+                <view class="order-shop-text">
+                    <view class="order-shop-name text">{{order.room.name}}</view>
+                    <view class="order-shop-name text-small grey ellipsis-2">{{order.room.address}}</view>
+                </view>
+            </view>
+            <view class="order-info order-row text">
+                <view class="time-area">{{order.startTime}}——{{order.endTime}}</view>
+                <view class="time-day">{{order.day}}晚</view>
+                <view class="order-price red">¥{{order.price}}</view>
+            </view>
+        </view>
+    </view>
+    <view class="comment-detail">
+        <comment-list  comments="{{[order]}}"></comment-list>
+    </view>
+    <!-- <view class="reply page-section-spacing text" wx:if="{{order.reply}}">
+        商家回复:{{order.reply}}
+    </view> -->
+    
+</view>
+<view class="footer" wx:if="{{!order.reply}}">
+    <van-button class="btn" size="large" color="#46a9a4" bindtap="showModal" round><text class="black">回复</text></van-button>
+</view> 
+<modal width="90%" height="700rpx"  show="{{showReplyModal}}" closeable title="回复评论"  bind:close="closeModal" bind:enter="replyComment">
+    <view slot="content" class="reply-modal">
+        <textarea name="" id="" cols="30" rows="12" bind:input="replyChange" class="reply-textarea">{{reply}}</textarea>
+    </view>
+</modal>

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
nova-tourism/pages/my/merchant/comments/hotel/comment-detail/index.wxss


+ 130 - 0
nova-tourism/pages/my/merchant/comments/hotel/index.js

@@ -0,0 +1,130 @@
+const Parse = getApp().Parse;
+const company = getApp().globalData.company;
+const dateServ = require('../../../../../../utils/date')
+
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        active: "noreply",
+        orders: [],
+        loadIndex:1,
+        storeId:''
+    },
+
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+        let merchant = wx.getStorageSync('merchant')
+        let merchantId = merchant.objectId;
+        let Store = new Parse.Query('ShopStore')
+        Store.notEqualTo('isDeleted', "true")
+        Store.equalTo('company', company)
+        Store.equalTo('user', merchantId)
+        Store.first().then(store =>{
+            this.setData({
+                storeId:store.id
+            })
+            this.getOrders()
+        })
+        
+    },
+
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+        
+    },
+    async getOrders(replyStatus){
+        let Order = new Parse.Query('RoomOrder')
+        Order.equalTo('company', company)
+        Order.equalTo('status', 800)
+        Order.equalTo('shopStore', this.data.storeId)
+        if(replyStatus == 'replied'){
+            Order.exists('reply')
+        }else {
+            Order.doesNotExist('reply')
+        }
+        Order.include('user')
+        Order.include('room')
+        Order.descending('updatedAt')
+        Order.skip((this.data.loadIndex - 1) * 10)
+        Order.limit(10)
+        let orders = await Order.find()
+        orders = orders.map((order) => {
+            order = order.toJSON()
+            order['time'] = dateServ.formatTime('YY-mm-dd HH:MM',order.updatedAt)
+            order['day'] = parseInt((new Date(order.endTime.iso).getTime() - new Date(order.startTime.iso).getTime()) / (1000 * 60 * 60 * 24));
+            order.startTime = dateServ.formatTime('mm月dd日',order.startTime.iso)
+            order.endTime = dateServ.formatTime('mm月dd日',order.endTime.iso)
+            return order;
+        })
+        orders = this.data.loadIndex == 1 ? orders : this.data.orders.concat(orders)
+        console.log(orders)
+        this.setData({
+            orders
+        })
+    },
+    details(event){
+        let orderId = event.currentTarget.dataset.id
+        wx.navigateTo({
+            url: `../../comments/hotel/comment-detail/index?id=${orderId}`
+          })
+    },
+    tabChange(event) {
+        this.data.active = event.detail.name
+        this.data.loadIndex = 1
+        console.log(this.data.active)
+        this.getOrders(event.detail.name)
+      },
+      loadMore() {
+        this.data.loadIndex++
+        console.log('ddddddddddddd', this.data.loadIndex)
+        this.getOrders()
+      },
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+        this.selectComponent("#tabs").resize()
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

+ 9 - 0
nova-tourism/pages/my/merchant/comments/hotel/index.json

@@ -0,0 +1,9 @@
+{
+  "usingComponents": {
+    "van-button": "@vant/weapp/button/index",
+    "van-rate": "@vant/weapp/rate/index",
+    "van-tabs": "@vant/weapp/tabs/index",
+    "van-tab": "@vant/weapp/tab/index"
+
+  }
+}

+ 82 - 0
nova-tourism/pages/my/merchant/comments/hotel/index.less

@@ -0,0 +1,82 @@
+@import '../../../../../styles/base.less';
+page {
+    background: #f6f6f6;
+}
+
+.comments-wrapper {
+    margin: 30rpx;
+    padding: 10rpx 20rpx 20rpx;
+    background: #ffffff;
+    border-radius: 30rpx;
+    .order-row {
+        display: flex;
+        align-items: center;
+        margin:10rpx 0;
+        padding: 10rpx 0;
+    }
+    .order-number {
+        display: flex;
+        justify-content: space-between;
+        border-bottom: 0.5px solid #46a9a4;
+    }
+
+    .order-content {
+        margin: 0;
+
+        .avatar {
+            width: 80rpx;
+            height: 80rpx;
+            margin-right: 20rpx;
+            border-radius: 50%;
+        } 
+
+        .order-shop-img{
+            width:120rpx;
+            height:90rpx;
+            margin-right: 20rpx;
+        }
+        .order-user {
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            .order-user-name {
+                flex:1;
+                overflow: hidden; //一定要写
+                text-overflow: ellipsis; //超出省略号
+                display: -webkit-box; //一定要写
+                -webkit-line-clamp: 2; //控制行数
+                -webkit-box-orient: vertical; //一定要写
+            }
+            .order-time {
+
+            }
+        }
+        .order-info {
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            width: 100%;
+            padding:10rpx 20rpx;
+            border: 1px solid #46a9a4;
+            border-radius: 40rpx;
+        }
+        .order-comment-text {
+            margin:20rpx 0;
+            overflow: hidden; //一定要写
+            text-overflow: ellipsis; //超出省略号
+            display: -webkit-box; //一定要写
+            -webkit-line-clamp: 2; //控制行数
+            -webkit-box-orient: vertical; //一定要写
+        }
+    }
+    .order-footer {
+        display: flex;
+        flex-direction: row-reverse;
+        .reply-btn {
+            text {
+                color:#000000;
+                letter-spacing: 4rpx;
+            }
+        }
+    }
+}

+ 102 - 0
nova-tourism/pages/my/merchant/comments/hotel/index.wxml

@@ -0,0 +1,102 @@
+<nav type="back" background-color="#46a9a4" title="评论管理" />
+<van-tabs active="{{active}}" id="tabs" bind:change="tabChange" color="#FFE300" nav-class="tab_title">
+    <van-tab title="未回复" name="noreply" >
+        <scroll-view scroll-y="true" style="height:calc(100vh - 210rpx);" bindscrolltolower="loadMore">
+            <block wx:if="{{orders.length}}">
+                <block wx:for="{{orders}}" wx:key="index">
+                    <view class="comments-wrapper">
+                        <view class="order-number order-row text">
+                            <view class="number ">订单号:{{item.orderNum}}</view>
+                        </view>
+                        <view class="order-content" data-item="{{item}}" >
+                            <view class="order-shop order-row">
+                                <image class="order-shop-img " src="{{item.images[0]}}" />
+                                <view class="order-shop-text">
+                                    <view class="order-shop-name text">{{item.room.name}}</view>
+                                    <view class="order-shop-name text-small grey ellipsis-2">{{item.room.address}}</view>
+                                </view>
+                            </view>
+                            <view class="order-info order-row text">
+                                    <view class="time-area">{{item.startTime}}——{{item.endTime}}</view>
+                                    <view class="time-day">{{item.day}}晚</view>
+                                    <view class="order-price red">¥{{item.price}}</view>
+                            </view>
+                            <view class="order-user order-row">
+                                <image class="order-user-avatar avatar" src="{{item.user.avatar}}" />
+                                <view class="order-user-name text-small">
+                                    {{item.user.nickname}}
+                                    <view class="order-score text-small">
+                                        <van-rate readonly allow-half value="{{ item.score }}" size="{{ 12 }}" color="#FF8936" void-icon="star" void-color="#eee" />{{item.score}}分
+                                    </view>
+                                </view>
+                                <view class="order-time text-small grey">{{item.time}}</view>
+                            </view>
+                            <view class="order-comment">
+                                <view class="order-comment-text text-small">{{item.content}}</view>
+                            </view>
+                        </view>
+                        <view class="order-footer">
+                            <van-button color="#46a9a4" class="btn reply-btn " round size="small"  data-id="{{item.objectId}}" bindtap="details">
+                                <text class="reply-text">查看详情</text>
+                            </van-button>
+                        </view>
+                    </view>
+                </block>
+            </block>
+            <block wx:else>
+                <van-empty description="暂无评论"></van-empty>
+            </block>
+
+        </scroll-view>
+    </van-tab>
+    <van-tab title="已回复" name="replied">
+        <scroll-view scroll-y="true" style="height:calc(100vh - 210rpx);" bindscrolltolower="loadMore">
+
+            <block wx:if="{{orders.length}}">
+                <block wx:for="{{orders}}" wx:key="index">
+                    <view class="comments-wrapper">
+                        <view class="order-number order-row text">
+                            <view class="number ">订单号:{{item.orderNum}}</view>
+                        </view>
+                        <view class="order-content" data-item="{{item}}" >
+                            <view class="order-shop order-row">
+                                <image class="order-shop-img " src="{{item.images[0]}}" />
+                                <view class="order-shop-text">
+                                    <view class="order-shop-name text">{{item.room.name}}</view>
+                                    <view class="order-shop-name text-small grey ellipsis-2">{{item.room.address}}</view>
+                                </view>
+                            </view>
+                            <view class="order-info order-row text">
+                                    <view class="time-area">{{item.startTime}}——{{item.endTime}}</view>
+                                    <view class="time-day">{{item.day}}晚</view>
+                                    <view class="order-price red">¥{{item.price}}</view>
+                            </view>
+                            <view class="order-user order-row">
+                                <image class="order-user-avatar avatar" src="{{item.user.avatar}}" />
+                                <view class="order-user-name text-small">
+                                    {{item.user.nickname}}
+                                    <view class="order-score text-small">
+                                        <van-rate readonly allow-half value="{{ item.score }}" size="{{ 12 }}" color="#FF8936" void-icon="star" void-color="#eee" />{{item.score}}分
+                                    </view>
+                                </view>
+                                <view class="order-time text-small grey">{{item.time}}</view>
+                            </view>
+                            <view class="order-comment">
+                                <view class="order-comment-text text-small">{{item.content}}</view>
+                            </view>
+                        </view>
+                
+                        <view class="order-footer">
+                            <van-button color="#46a9a4" class="btn reply-btn " round size="small"  data-id="{{item.objectId}}" bindtap="details">
+                                <text class="reply-text">查看详情</text>
+                            </van-button>
+                        </view>
+                    </view>
+                </block>
+            </block>
+            <block wx:else>
+                <van-empty description="暂无评论"></van-empty>
+            </block>
+        </scroll-view>
+    </van-tab>
+</van-tabs>

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
nova-tourism/pages/my/merchant/comments/hotel/index.wxss


+ 256 - 0
nova-tourism/pages/my/merchant/merchant-home/account/index.js

@@ -0,0 +1,256 @@
+let Parse = getApp().Parse;
+const company = getApp().globalData.company
+const qiniuUploader = require("../../../../../../utils/qiniuUploader");
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+
+        imageList: [],
+        licenseList: [],
+        merchant: null,
+        store: null,
+        stores: null,
+        perCapita: null,
+        cover: [],
+        image: [],
+        storeName: null,
+        perCapita: null,
+        desc: null,
+        name: null,
+        workingTime: null,
+        uploadURL: null,
+        domain: null,
+        uptokenURL: null,
+        html: null,
+        content: null,
+        id: null,
+
+    },
+    getHtml(e) { //从组件获取值
+        let html = e.detail.content.html
+        console.log(html);
+        // this.setData({ html: html })
+        // let field = event.currentTarget.dataset.field;
+        // let html = event.detail.content.html;
+        this.setData({ html: html })
+    },
+
+    insertImage() { //图片上传插入示例
+        let that = this
+        wx.chooseImage({
+            count: 1,
+            success(res) {
+                // 本地测试图片插入
+                // this.selectComponent('#hf_editor').insertSrc(res.tempFilePaths[0]);
+                // console.log(res.tempFilePaths[0]);
+                let tempFilePaths = res.tempFilePaths[0];
+                console.log(tempFilePaths);
+
+
+                qiniuUploader.upload(
+                    tempFilePaths,
+                    (res) => {
+                        let img = res.imageURL;
+                        that.selectComponent('#hf_editor').insertSrc(img); //调用组件insertSrc方法
+                    },
+                    (error) => {
+                        console.log("error: " + error);
+                    }, {
+                        region: "SCN",
+                        uploadURL: that.data.uploadURL,
+                        domain: that.data.domain,
+                        uptoken: that.data.uptokenURL,
+                    }
+                );
+            }
+        })
+    },
+
+    changeFile(e) {
+        if (e.detail && e.detail.length > 0) {
+            this.setData({
+                cover: [e.detail[0].url]
+            })
+        } else {
+            this.setData({
+                cover: []
+            })
+        }
+    },
+    changeFiles(e) {
+        if (e.detail && e.detail.length > 0) {
+            this.setData({
+                image: e.detail
+            })
+        } else {
+            this.setData({
+                image: []
+            })
+        }
+    },
+
+    blur(e) {
+        let name = e.currentTarget.dataset.name
+        this.setData({
+            [name]: e.detail.value
+        })
+    },
+    mobile() {
+        let id = this.data.store.objectId
+        console.log(id);
+        wx.navigateTo({
+            url: '../account/mobile/index?id=' + id
+        });
+
+    },
+    password() {
+        let id = this.data.store.objectId
+        console.log(id);
+        wx.navigateTo({
+            url: '../account/password/index?id=' + id
+        });
+    },
+    async determine() {
+        let image = []
+        for (let index = 0; index < this.data.image.length; index++) {
+            let item = this.data.image[index];
+            image.push(item.url)
+        }
+        console.log(this.data.perCapita, this.data.name, image, this.data.storeName, this.data.perCapita, this.data.desc, this.data.workingTime, this.data.html);
+        let query = new Parse.Query("ShopStore")
+
+        let ShopStore = await query.get(this.data.id)
+        ShopStore.set("perCapita", this.data.perCapita)
+        ShopStore.set("name", this.data.name)
+        ShopStore.set("image", image)
+        ShopStore.set("storeName", this.data.storeName)
+        ShopStore.set("perCapita", this.data.perCapita)
+        ShopStore.set("desc", this.data.desc)
+        ShopStore.set("workingTime", this.data.workingTime)
+        ShopStore.set("content", this.data.html)
+        ShopStore.save().then(res => {
+            console.log(res)
+            wx.showToast({
+                title: '修改成功',
+                icon: 'none'
+            })
+            wx.navigateBack({
+                delta: 1
+            });
+        })
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: async function(options) {
+
+
+
+        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,
+        })
+        console.log(this.data.html);
+        this.selectComponent('#hf_editor').setHtml(this.data.html);
+        this.getQiniuOption()
+    },
+    async getQiniuOption() {
+        let uploadData = await this.getUptoken()
+        if (uploadData) {
+            this.setData({
+                uploadURL: uploadData.zoneUrl,
+                domain: uploadData.domain,
+                uptokenURL: uploadData.uptoken,
+
+            })
+        }
+        console.log(this.data.uploadURL, this.data.domain, this.data.uptokenURL);
+    },
+    getUptoken() {
+        return Parse.Cloud.run('qiniu_uptoken', { company: company })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function() {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function() {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function() {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function() {
+
+    }
+})

+ 6 - 0
nova-tourism/pages/my/merchant/merchant-home/account/index.json

@@ -0,0 +1,6 @@
+{
+  "usingComponents": {
+      "van-icon": "@vant/weapp/icon/index",
+      "diy-editor": "/components/diy-editor/index"
+  }
+}

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

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

+ 72 - 0
nova-tourism/pages/my/merchant/merchant-home/account/index.wxml

@@ -0,0 +1,72 @@
+<nav type="back" background-color="#46a9a4" title="账户管理" />
+
+
+    <view class="top">
+        <view class="top-figure">店铺首图</view>
+        <upload bind:onChangeFile="changeFile" fileList="{{imageList}}" accept="image" maxCount="1" uploadURL="{{uploadURL}}" domain="{{domain}}" uptokenURL="{{uptokenURL}}"></upload>
+        <view class="top-deails">
+            <view class="top-name">
+                <view class="name">店铺名称:</view>
+                <input bindblur="blur" type="text" class="input" data-name="storeName" value="{{storeName}}" placeholder="请输入店铺名称"></input>
+            </view>
+            <van-icon name="arrow" />
+        </view>
+        <view class="top-deails">
+            <view class="top-name">
+                <view class="name">人均消费:</view>
+                <input bindblur="blur" type="text" class="input" data-name="perCapita" value="{{perCapita}}" placeholder="请输入人均消费"></input>
+            </view>
+            <van-icon name="arrow" />
+        </view>
+        <view class="top-deails">
+            <view class="top-names">
+                <view class="name">店铺简介:</view>
+                <textarea bindblur="blur" type="text" class="input" data-name="desc" value="{{desc}}" placeholder="请输入店铺简介"></textarea>
+            </view>
+        </view>
+        <view class="top-deails">
+            <view class="top-name">
+                <view class="name">店长名称:</view>
+                <input bindblur="blur" type="text" class="input" data-name="name" value="{{name}}" placeholder="请输入店长名称"></input>
+            </view>
+            <van-icon name="arrow" />
+        </view>
+        <view class="top-deails">
+            <view class="top-name">
+                <view class="name">营业时间:</view>
+                <input bindblur="blur" type="text" class="input" data-name="workingTime" value="{{workingTime}}" placeholder="请输入营业时间"></input>
+            </view>
+            <van-icon name="arrow" />
+        </view>
+        <view class="top-deails" bindtap="mobile">
+            <view class="top-name">
+                <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>
+            <van-icon name="arrow" />
+        </view>
+        <view class="top-deails">
+            <view class="top-name">
+                <view class="name">用户账号:</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>
+            <van-icon name="arrow" />
+        </view>
+        <view class="top-deails" bindtap="password">
+            <view class="top-name">
+                <view class="name">重置密码:</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>
+            <van-icon name="arrow" />
+        </view>
+        <view class="top-figure">店铺图片</view>
+        <upload bind:onChangeFile="changeFiles" fileList="{{licenseList}}" accept="all" maxCount="9" uploadURL="{{uploadURL}}" domain="{{domain}}" uptokenURL="{{uptokenURL}}"></upload>
+    </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">
+        <view class="bommon-name" bindtap="determine">确定</view>
+    </view>

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

@@ -0,0 +1 @@
+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}.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}

+ 207 - 0
nova-tourism/pages/my/merchant/merchant-home/account/mobile/index.js

@@ -0,0 +1,207 @@
+const company = getApp().globalData.company
+let Parse = getApp().Parse;
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        // 验证手机号
+        loginPhone: false,
+        loginPwd: false,
+        loveChange: true,
+        hongyzphone: '',
+        // 验证码是否正确
+        zhengLove: true,
+        huoLove: '',
+        getText2: '获取验证码',
+        id: null,
+    },
+    // 手机验证
+    lovePhone: function(e) {
+        let phone = e.detail.value;
+        this.setData({ hongyzphone: phone })
+        if (!(/^1[34578]\d{9}$/.test(phone))) {
+            this.setData({
+                lovePhone: false
+            })
+            console.log(phone.length)
+            if (phone.length >= 11) {
+                wx.showToast({
+                    title: '手机号有误',
+                    icon: 'none',
+                    duration: 1000
+                })
+            }
+        } else {
+            this.setData({
+                lovePhone: true
+
+            })
+        }
+    },
+    // 验证码输入
+    yanLoveInput: function(e) {
+        let that = this;
+        let yanLove = e.detail.value;
+        let huoLove = this.data.huoLove;
+        that.setData({
+            yanLove: yanLove,
+            zhengLove: false,
+        })
+        if (yanLove.length >= 7) {
+            if (yanLove == huoLove) {
+                that.setData({
+                    zhengLove: true,
+                })
+            } else {
+                that.setData({
+                    zhengLove: false,
+                })
+                wx.showModal({
+                    content: '输入验证码有误',
+                    showCancel: false,
+                    success: function(res) {}
+                })
+            }
+        }
+
+    },
+    // 验证码按钮
+    yanLoveBtn: function() {
+        let loveChange = this.data.loveChange;
+        console.log(loveChange)
+        let lovePhone = this.data.lovePhone;
+        console.log(lovePhone)
+        let phone = this.data.hongyzphone;
+        console.log(phone)
+        let n = 59;
+        let that = this;
+        if (!lovePhone) {
+            wx.showToast({
+                title: '手机号有误',
+                icon: 'success',
+                duration: 1000
+            })
+        } else {
+            if (loveChange) {
+                this.setData({
+                    loveChange: false
+                })
+                let lovetime = setInterval(function() {
+                    let str = '(' + n + ')' + '重新获取'
+                    that.setData({
+                        getText2: str
+                    })
+                    if (n <= 0) {
+                        that.setData({
+                            loveChange: true,
+                            getText2: '重新获取'
+                        })
+                        clearInterval(lovetime);
+                    }
+                    n--;
+                }, 1000);
+                console.log(phone)
+                wx.request({
+                    url: "https://server.fmode.cn/api/apig/message",
+                    method: "post", //请求方式
+                    data: { mobile: phone, company: company, },
+                    success(res) {
+                        console.log(res)
+                    }
+                })
+            }
+        }
+    },
+    //form表单提交
+    formSubmit(e) {
+        let that = this
+        let val = e.detail.value
+            // console.log('val', val)
+        var phone = val.phone //电话
+        var phoneCode = val.phoneCode //验证码
+        var openid = wx.getStorageSync('userInfo').openid
+        console.log(openid)
+        wx.request({
+            url: 'https://server.fmode.cn/api/apig/verifyCode',
+            method: "post", //请求方式
+            data: { mobile: phone, code: phoneCode, openid: openid },
+            success() {
+                that.getuser(phone)
+            }
+        })
+    },
+    async getuser(phone) {
+        let query = new Parse.Query("ShopStore")
+        let ShopStore = await query.get(this.data.id)
+        ShopStore.set("mobile", phone)
+        ShopStore.save().then(res => {
+            console.log(res)
+            wx.showToast({
+                title: '绑定成功',
+                icon: 'none'
+            })
+            wx.navigateBack({
+                delta: 1
+            });
+        })
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function(options) {
+        console.log(options.id);
+        let id = options.id
+        this.setData({ id: id })
+    },
+
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function() {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function() {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function() {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function() {
+
+    }
+})

+ 3 - 0
nova-tourism/pages/my/merchant/merchant-home/account/mobile/index.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 51 - 0
nova-tourism/pages/my/merchant/merchant-home/account/mobile/index.less

@@ -0,0 +1,51 @@
+.content {
+    width: 100%;
+    height: auto;
+    padding: 0 50rpx;
+    box-sizing: border-box;
+}
+
+.phone-box {
+    width: 100%;
+    height: 89rpx;
+    border-bottom: 1rpx solid #efefef;
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+    align-items: center;
+}
+
+.phone {
+    color: #333;
+    margin-right: 60rpx;
+    font-size: 28rpx;
+}
+
+.number {
+    color: #333;
+    font-size: 28rpx;
+    width: 200rpx;
+}
+
+.getNum {
+    width: 210rpx;
+    height: 48rpx;
+    background: rgba(248, 112, 57, 1);
+    border-radius: 8rpx;
+    font-size: 28rpx;
+    font-family: PingFang-SC-Medium;
+    color: rgba(255, 255, 255, 1);
+    line-height: 48rpx;
+    margin-right: 36rpx;
+    text-align: center;
+}
+
+.submit {
+    width: 480rpx;
+    height: 80rpx;
+    background: rgba(248, 112, 57, 1);
+    border-radius: 8rpx;
+    margin-top: 80rpx;
+    color: #fff;
+    font-size: 32rpx;
+}

+ 15 - 0
nova-tourism/pages/my/merchant/merchant-home/account/mobile/index.wxml

@@ -0,0 +1,15 @@
+<nav type="back" background-color="#46a9a4" title="更改手机号" />
+<view class='content'>
+  <form bindsubmit="formSubmit">
+    <view class='phone-box'>
+      <text class='phone'>手机号</text>
+      <input name="phone" type='number' placeholder="请输入手机号" maxlength='11' name="phone" class='number' bindinput='lovePhone' />
+    </view>
+    <view class='phone-box'>
+      <text class='phone'>验证码</text>
+      <input name="phoneCode" placeholder="请输入验证码" class='number' placeholder-style='color:#bbb' bindinput="yanLoveInput" />
+      <view bindtap='yanLoveBtn' class='getNum'>{{getText2}}</view>
+    </view>
+    <button formType="submit" class='submit'>绑定</button>
+  </form>
+</view>

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

@@ -0,0 +1 @@
+.content{width:100%;height:auto;padding:0 50rpx;box-sizing:border-box}.phone-box{width:100%;height:89rpx;border-bottom:1rpx solid #efefef;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.phone{color:#333;margin-right:60rpx;font-size:28rpx}.number{color:#333;font-size:28rpx;width:200rpx}.getNum{width:210rpx;height:48rpx;background:#f87039;border-radius:8rpx;font-size:28rpx;font-family:PingFang-SC-Medium;color:#fff;line-height:48rpx;margin-right:36rpx;text-align:center}.submit{width:480rpx;height:80rpx;background:#f87039;border-radius:8rpx;margin-top:80rpx;color:#fff;font-size:32rpx}

+ 226 - 0
nova-tourism/pages/my/merchant/merchant-home/account/password/index.js

@@ -0,0 +1,226 @@
+const company = getApp().globalData.company
+let Parse = getApp().Parse;
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        status: 0,
+        password: null,
+        passwords: null,
+        id: null,
+        store: null,
+        getText2: '获取验证码',
+        loveChange: true,
+        hongyzphone: '',
+        // 验证码是否正确
+        zhengLove: true,
+        huoLove: '',
+    },
+    async getShopStore() {
+        let ShopOrder = new Parse.Query('ShopStore')
+        ShopOrder.notEqualTo('isDeleted', "true")
+        ShopOrder.equalTo('company', company)
+        ShopOrder.include('user')
+        ShopOrder.equalTo('objectId', this.data.id)
+        let shopOrder = await ShopOrder.first()
+        if (shopOrder && shopOrder.id) {
+            this.setData({
+                store: shopOrder.toJSON()
+            })
+            console.log(this.data.store);
+        }
+
+
+    },
+    yanLoveBtn: function () {
+        let loveChange = this.data.loveChange;
+        let phone = this.data.store.mobile;
+        console.log(phone)
+        let n = 59;
+        let that = this;
+        if (!phone) {
+            wx.showToast({
+                title: '手机号有误',
+                icon: 'success',
+                duration: 1000
+            })
+        } else {
+            if (loveChange) {
+                this.setData({
+                    loveChange: false
+                })
+                let lovetime = setInterval(function () {
+                    let str = '(' + n + ')' + '重新获取'
+                    that.setData({
+                        getText2: str
+                    })
+                    if (n <= 0) {
+                        that.setData({
+                            loveChange: true,
+                            getText2: '重新获取'
+                        })
+                        clearInterval(lovetime);
+                    }
+                    n--;
+                }, 1000);
+                console.log(phone)
+                wx.request({
+                    url: "https://server.fmode.cn/api/apig/message",
+                    method: "post", //请求方式
+                    data: { mobile: phone, company: company, },
+                    success(res) {
+                        console.log(res)
+                    }
+                })
+            }
+        }
+    },
+    formSubmit(e) {
+        let that = this
+        let val = e.detail.value
+        console.log('val', val)
+        var phone = this.data.store.mobile //电话
+        var phoneCode = val.phoneCode //验证码
+        var openid = wx.getStorageSync('userInfo').openid
+        console.log(openid)
+        wx.request({
+            url: 'https://server.fmode.cn/api/apig/verifyCode',
+            method: "post", //请求方式
+            data: { mobile: phone, code: phoneCode, openid: openid },
+            success(res) {
+                console.log(res);
+                if (res.data.code != 200) {
+                    wx.showToast({
+                        title: res.data.mess,
+                        icon: 'none'
+                    })
+                    return
+                }
+                that.setData({ status: 1 })
+            }
+        })
+        console.log(this.data.status);
+    },
+    blur(e) {
+        let name = e.currentTarget.dataset.name
+        this.setData({
+            [name]: e.detail.value
+        })
+    },
+    async getuser() {
+        if (this.data.password.length < 6) {
+            wx.showToast({
+                title: '密码长度不得小于6位数',
+                icon: 'none'
+            })
+            return
+        }
+        if (this.data.password != this.data.passwords) {
+            wx.showToast({
+                title: '两次密码输入不同',
+                icon: 'none'
+            })
+            return
+        }
+        let query = new Parse.Query("_User")
+        console.log(this.data.store.user.objectId);
+        let user = await query.get(this.data.store.user.objectId)
+        user.set("password", this.data.password)
+        user.save().then(res => {
+            console.log(res)
+            wx.showToast({
+                title: '重置成功',
+                icon: 'none'
+            })
+            wx.navigateBack({
+                delta: 1
+            });
+        })
+
+    },
+    yanLoveInput: function (e) {
+        let that = this;
+        let yanLove = e.detail.value;
+        let huoLove = this.data.huoLove;
+        that.setData({
+            yanLove: yanLove,
+            zhengLove: false,
+        })
+        if (yanLove.length >= 7) {
+            if (yanLove == huoLove) {
+                that.setData({
+                    zhengLove: true,
+                })
+            } else {
+                that.setData({
+                    zhengLove: false,
+                })
+                wx.showModal({
+                    content: '输入验证码有误',
+                    showCancel: false,
+                    success: function (res) { }
+                })
+            }
+        }
+
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+        let id = options.id
+        this.setData({ id: id })
+        this.getShopStore()
+    },
+
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

+ 3 - 0
nova-tourism/pages/my/merchant/merchant-home/account/password/index.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 46 - 0
nova-tourism/pages/my/merchant/merchant-home/account/password/index.less

@@ -0,0 +1,46 @@
+.phone-box {
+    // width: 100%;
+    height: 89rpx;
+    border-bottom: 1rpx solid #efefef;
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+    align-items: center;
+    margin: 30rpx;
+}
+
+.phone {
+    color: #333;
+    margin-right: 60rpx;
+    font-size: 28rpx;
+    width: 200rpx;
+    text-align: right;
+}
+
+.number {
+    color: #333;
+    font-size: 28rpx;
+    width: 200rpx;
+}
+
+.getNum {
+    width: 210rpx;
+    height: 48rpx;
+    background: rgba(248, 112, 57, 1);
+    border-radius: 8rpx;
+    font-size: 28rpx;
+    font-family: PingFang-SC-Medium;
+    color: rgba(255, 255, 255, 1);
+    line-height: 48rpx;
+    margin-right: 36rpx;
+    text-align: center;
+}
+.submit {
+    width: 480rpx;
+    height: 80rpx;
+    background: rgba(248, 112, 57, 1);
+    border-radius: 8rpx;
+    margin-top: 80rpx;
+    color: #fff;
+    font-size: 32rpx;
+}

+ 22 - 0
nova-tourism/pages/my/merchant/merchant-home/account/password/index.wxml

@@ -0,0 +1,22 @@
+<nav type="back" background-color="#46a9a4" title="修改密码" />
+<form bindsubmit="formSubmit">
+    <view class='phone-box'>
+        <text class='phone'>验证码</text>
+        <input name="phoneCode" placeholder="请输入验证码" class='number' placeholder-style='color:#bbb' bindinput="yanLoveInput" />
+        <view bindtap='yanLoveBtn' class='getNum'>{{getText2}}</view>
+    </view>
+    <button formType="submit" class='submit'>提交</button>
+</form>
+<block wx:if="{{status==1}}">
+    <view class='phone-box'>
+        <text class='phone'>新密码:</text>
+        <input bindblur="blur" type="text" class="string" data-name="password" value="{{password}}" placeholder="请输入新密码"></input>
+    </view>
+    <view class='phone-box'>
+        <text class='phone'>再次输入密码:</text>
+        <input bindblur="blur" type="text" class="string" data-name="passwords" value="{{passwords}}" placeholder="再次输入密码"></input>
+    </view>
+</block>
+<block wx:if="{{status==1}}">
+    <button bindtap="getuser" class='submit'>确认重置</button>
+</block>

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

@@ -0,0 +1 @@
+.phone-box{height:89rpx;border-bottom:1rpx solid #efefef;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin:30rpx}.phone{color:#333;margin-right:60rpx;font-size:28rpx;width:200rpx;text-align:right}.number{color:#333;font-size:28rpx;width:200rpx}.getNum{width:210rpx;height:48rpx;background:#f87039;border-radius:8rpx;font-size:28rpx;font-family:PingFang-SC-Medium;color:#fff;line-height:48rpx;margin-right:36rpx;text-align:center}.submit{width:480rpx;height:80rpx;background:#f87039;border-radius:8rpx;margin-top:80rpx;color:#fff;font-size:32rpx}

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

@@ -203,13 +203,13 @@ Page({
     },
     roommanage() {
         wx.navigateTo({
-            url: '/nova-tourism/pages/my/merchant/room-manage/index'
+            url: '../room-manage/index'
         });
 
     },
     account() {
         wx.navigateTo({
-            url: '/nova-tourism/pages/my/merchant/merchant-home/account/index'
+            url: '../merchant-home/account/index'
         });
 
     },
@@ -218,7 +218,7 @@ Page({
         switch (this.data.store.type) {
             case 'stay':
                 wx.navigateTo({
-                    url: '/nova-tourism/pages/my/merchant/comments/hotel/index'
+                    url: '../../merchant/comments/hotel/index'
                 });
                 break;
             case 'catering':

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

@@ -87,7 +87,7 @@
             <van-icon name="arrow" />
         </view>
 
-        <block wx:if="{{store.type=='catering'}}">
+        <!-- <block wx:if="{{store.type=='catering'}}">
             <view class="box-title" bindtap="package">
                 <view class="box-details">
                     <van-icon name="https://file-cloud.fmode.cn/sHNeVwSaAg/20230705/mujk1h112500264.png" size="20"/>
@@ -117,7 +117,7 @@
                 <van-icon name="arrow" />
             </view>
 
-        </block>
+        </block> -->
         <block wx:if="{{store.type=='stay'}}">
    
             <view class="box-title" bindtap="roommanage">

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

@@ -0,0 +1,145 @@
+const Parse = getApp().Parse;
+const app = getApp();
+const company = getApp().globalData.company;
+let navigationBarHeight = getApp().globalData.statusBarHeight + 44;
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    storeId: null,
+    loadIndex: 1,
+    rooms: []
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    let merchant = wx.getStorageSync('merchant')
+    let store = wx.getStorageSync('store')
+    if (!merchant) {
+      wx.navigateTo({
+        url: `/nova-tourism/pages/index/index`
+      })
+    }
+
+
+    this.setData({
+      storeId: store.objectId,
+      store: store,
+      merchant: merchant
+    })
+    this.getRooms()
+
+  },
+  
+  async getStore() {
+    let Store = new Parse.Query('ShopStore')
+    let hotel = await Store.get(this.data.hotelId)
+    hotel = hotel.toJSON()
+    if (hotel.content) {
+      hotel.content = rechText.formatRichText(hotel.content)
+    }
+    console.log(hotel)
+    this.setData({
+      hotel
+    })
+  },
+  async getRooms() {
+    let Room = new Parse.Query('ShopRoom')
+    Room.equalTo('company', company)
+    Room.equalTo("shop", this.data.storeId)
+    Room.select(
+      'name',
+      'images',
+      'price',
+      'total',
+      'remaining',
+      'merber',
+      'type',
+      'area',
+      'tags'
+    )
+    Room.skip((this.data.loadIndex - 1) * 10)
+    Room.limit(10)
+    let rooms = await Room.find()
+    rooms = rooms.map((room) => {
+      room = room.toJSON()
+      room.tags.slice(0, 5)
+      return room
+    })
+    console.log(rooms)
+    if (this.data.loadIndex != 1) {
+      rooms = this.data.rooms.concat(rooms)
+    }
+    this.setData({
+      rooms
+    })
+  },
+  loadMore() {
+    this.data.loadIndex++;
+    this.getRooms()
+  },
+  edit(event) {
+    console.log(event);
+    let id = event.detail.id;
+    wx.navigateTo({
+      url: `/nova-tourism/pages/my/merchant/room-manage/room-edit/index?roomId=${id}`
+    })
+  },
+  addRoom() {
+    wx.navigateTo({
+      url: `/nova-tourism/pages/my/merchant/room-manage/room-edit/index?storeId=${this.data.storeId}`
+    })
+  },
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+    this.getRooms()
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
+})

+ 5 - 0
nova-tourism/pages/my/merchant/room-manage/index.json

@@ -0,0 +1,5 @@
+{
+  "usingComponents": {
+    "goods-list":"../../../../components/goods-list/index"
+  }
+}

+ 11 - 0
nova-tourism/pages/my/merchant/room-manage/index.less

@@ -0,0 +1,11 @@
+@import '../../../../styles/base.less';
+.add-customer {
+    padding: 20rpx 0;
+    text-align: center;
+    color: blue;
+    background-color: #eee;
+    border-radius: 40rpx;
+}
+.add-icon {
+    margin-right: 10rpx; 
+}

+ 10 - 0
nova-tourism/pages/my/merchant/room-manage/index.wxml

@@ -0,0 +1,10 @@
+<nav type="back" background-color="#46a9a4" title="房型管理" />
+<view class="page-section">
+    <view class="add-customer" bind:tap="addRoom">
+        <van-icon class="add-icon" name="https://file-cloud.fmode.cn/sHNeVwSaAg/20220418/qn1d5i021341.png?imageView2/1/w/200/h/200" color="#3d88ff" />
+        <text class="text" style="color:#3d88ff;">添加房型</text>
+    </view>
+</view>
+<scroll-view scroll-y="true" style="height:calc(100% - {{navigationBarHeight}}rpx);" bindscrolltolower="loadMore">
+    <goods-list list="{{rooms}}" mode="horizontal" navigateBtn="编辑详情" btnModel="plain" bind:btnTap="edit"></goods-list>
+</scroll-view>

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

@@ -0,0 +1 @@
+.red{color:#F01740}.grey{color:#666666}.black{color:#000000}.title{font-weight:Medium;font-size:36rpx;color:#222222}.text-large{font-size:36rpx}.text{font-size:30rpx}.text-left{text-align:left}.text-center{text-align:center}.text-small{font-size:24rpx}.flex{display:flex}.justify-between{justify-content:space-between}.flex-aligin-center{display:flex;align-items:center}.flex-justify-between{display:flex;justify-content:space-between}.flex-1{flex:1}.flex-grow-1{flex-grow:1}.fixed-bottom{position:fixed;bottom:0;left:0;right:0}.w-100{width:100%}.h-100{height:100%}.page-section{margin:20rpx;border-radius:20rpx;background-color:#ffffff}.page-section-spacing{padding:20rpx}.spacing-small{padding:10rpx}.border-trans{border:1px solid transparent}.ellipsis{width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.ellipsis-2{width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.add-customer{padding:20rpx 0;text-align:center;color:blue;background-color:#eee;border-radius:40rpx}.add-icon{margin-right:10rpx}

+ 370 - 0
nova-tourism/pages/my/merchant/room-manage/room-edit/index.js

@@ -0,0 +1,370 @@
+const Parse = getApp().Parse;
+const app = getApp();
+const company = getApp().globalData.company;
+let navigationBarHeight = getApp().globalData.statusBarHeight + 44;
+const qiniuUploader = require("../../../../../../utils/qiniuUploader");
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        pageType: 'add',
+        routeId: '0ePMS1OGU7',
+        roomId: null,
+        storeId: null,
+    },
+
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+        let {roomId,storeId} = options
+        if(!storeId && !roomId){
+            wx.navigateTo({
+                url: `/nova-tourism/pages/index/index`
+              })
+        }
+        if(!storeId && roomId){
+            let pageType = 'edit'
+            this.setData({
+                roomId,
+                storeId,
+                pageType
+            })
+        }else {
+            this.setData({
+                roomId,
+                storeId
+            })
+        }
+        this.initData()  
+        
+        
+    },
+    async initData(){
+        let store;
+        let room;
+        let formData;
+        let route = await this.getRoute()
+        if(this.data.pageType == 'add'){
+            store = await this.getStore()
+        }else if(this.data.pageType == 'edit') {
+            room = await this.getRoom()
+        }
+        if(!store && !room){
+            wx.showToast({
+              title: '该店铺/房型不存在',
+              icon:'none'
+            })
+            setTimeout(()=>{
+                wx.navigateTo({
+                    url: `/nova-tourism/pages/my/merchant/room-manage/room-edit/index`
+                  })
+            },1000)
+        }
+        this.setData({
+            store,
+            route,
+            room,
+        })
+        formData = route['editFields'].reduce((obj, cur, index) => {
+            // obj[cur["key"]] = cur;
+            switch (cur["type"]) {
+                case 'String':
+                    obj[cur["key"]] = room?room[cur["key"]] : '';     
+                    break;
+                    case 'Number':
+                        obj[cur["key"]] = room?room[cur["key"]] : 0;     
+                        break;
+                        case 'Boolean':
+                            obj[cur["key"]] = room?room[cur["key"]] : false;     
+                            break;
+                        case 'Array':
+                    obj[cur["key"]] = room?room[cur["key"]] : [];     
+                    if(cur["view"] == 'edit-filemanager'){
+                        obj[cur["key"]] = [];   
+                        if(room){
+                            room[cur["key"]].forEach(item => {
+                                obj[cur["key"]].push({"url":item})
+                            })
+                        }
+                    }
+                    break;
+                    case 'GeoPoint':
+                    obj[cur["key"]] = room?room[cur["key"]] : null;     
+                    break;
+                    case 'Pointer':
+                            obj[cur["key"]] = room?room[cur["key"]] : null;  
+                       
+                    break;
+                default:
+                    break;
+            }
+            
+            return obj;
+          }, {});
+        this.setData({
+            formData
+        })
+        // 富文本回显
+        if(this.data.room ){
+            this.data.route['editFields'].forEach(field =>{
+                if(field["view"] == 'editor-tinymce'){
+                        this.selectComponent(`#editor${field["key"]}`).setHtml(room[field["key"]] || '');
+                }
+            })
+        }
+        // 获取七牛参数
+        this.getQiniuOption()
+       
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+    },
+    async getQiniuOption(){
+        let uploadData = await this.getUptoken()
+        if (uploadData) {
+            this.setData({
+                uploadURL: uploadData.zoneUrl,
+                domain: uploadData.domain,
+                uptokenURL: uploadData.uptoken,
+            })
+        }
+    },
+    getUptoken() {
+        return Parse.Cloud.run('qiniu_uptoken', { company: company })
+    },
+    async getStore(){
+        let Store = new Parse.Query('ShopStore')
+        let store = await Store.get(this.data.storeId)
+        if(store&&store.id){
+            store = store.toJSON()
+            return store;
+        }else {
+            return false;
+        }
+    },
+    async getRoom(){
+        let Room = new Parse.Query('ShopRoom')
+        let room = await Room.get(this.data.roomId)
+        if(room&&room.id){
+            room = room.toJSON()
+            return room;
+        }else {
+            return false;
+        }
+    },
+    async getRoute(){
+        let DevRoute = new Parse.Query('DevRoute')
+        let route = await DevRoute.get(this.data.routeId)
+        if(route&&route.id){
+            route = route.toJSON()
+        return route;
+        }else {
+            return false;
+        }
+    },
+    onChange(event){
+        let field = event.currentTarget.dataset.field;
+        let type = event.currentTarget.dataset.type;
+        let value = event.detail.value;
+        switch (type) {
+            case 'String':
+            this.data.formData[field] = value;
+                break;
+            case 'Number':
+            this.data.formData[field] = +value;
+                break;
+            case 'Boolean':
+            this.data.formData[field] = event.detail;
+                this.setData({
+                    formData:this.data.formData
+                });
+                break;
+            default:
+                break;
+        }
+    },
+    showTagEdit(event){
+        let field = event.currentTarget.dataset.field;
+        let name = event.currentTarget.dataset.name;
+        let that = this;
+        wx.showModal({
+            title: `添加${name}`,
+            content: ``,
+            editable:true,
+            success (res) {
+            if (res.confirm) {
+                that.data.formData[field].push(res.content)
+                that.setData({
+                    formData: that.data.formData
+                })
+            console.log('用户点击确定')
+            } else if (res.cancel) {
+            console.log('用户点击取消')
+            }
+            }
+        })
+    },
+    tagClose(event){
+        let field = event.currentTarget.dataset.field;
+        let index = event.currentTarget.dataset.index;
+        this.data.formData[field].splice(index,1)
+        this.setData({
+            formData:this.data.formData
+        })
+    },
+    changeFile(event) {
+        let field = event.currentTarget.dataset.field;
+        let fileList = event.detail
+        fileList = fileList.map(file =>  file.url)
+        this.data.formData[field] = fileList;
+    },
+    chooseGeoPoint(event){
+        let field = event.currentTarget.dataset.field;
+        wx.chooseLocation({
+            latitude: 0,
+            longitude: 0,
+            success: (res)=>{
+              let {latitude,longitude,address,name} = res;
+              let locations = new Parse.GeoPoint(latitude,longitude)
+              this.data.formData[field] = locations
+              this.data.formData['address'] = address + name
+            //   this.data.formData['address'] = address
+                this.setData({
+                    formData:this.data.formData,
+                })
+            }
+          })
+    },
+    getHtml(event){
+        let field = event.currentTarget.dataset.field;
+        let html = event.detail.content.html;
+        this.data.formData[field] = html;
+    },
+    insertImage(event){
+        let field = event.currentTarget.dataset.field;
+        let that = this;
+        wx.chooseImage({
+            count: 1,
+            success (res) {
+                // 本地测试图片插入
+                // this.selectComponent('#hf_editor').insertSrc(res.tempFilePaths[0]);
+                // that.selectComponent(`#editor${field}`).insertSrc(res.tempFilePaths[0])
+                let tempFilePaths = res.tempFilePaths[0];
+                qiniuUploader.upload(
+                    tempFilePaths,
+                    (res) => {
+                        let img = res.imageURL;
+                        that.selectComponent(`#editor${field}`).insertSrc(img); //调用组件insertSrc方法
+                    },
+                    (error) => {
+                        console.log("error: " + error);
+                    }, {
+                        region: "SCN",
+                        uploadURL: that.data.uploadURL,
+                        domain: that.data.domain,
+                        uptoken: that.data.uptokenURL,
+                    }
+                );
+            }
+        })
+    },
+    async submit(){
+        let checked = await this.checkForm()
+        if(!checked){
+            return
+        }
+        let room = await this.setRoom()
+        console.log(room);
+        if(room&&room.id){
+            wx.showToast({
+              title: '操作成功',
+              icon:'none'
+            })
+            setTimeout(()=>{
+                wx.navigateTo({
+                    url: `/nova-tourism/pages/my/merchant/room-manage/index`
+                  })
+            },1000)
+        }
+    },
+    async checkForm(){
+        let formData = this.data.formData;
+        let editFields = this.data.route.editFields;
+        for (let index = 0; index < editFields.length; index++) {
+            const field = editFields[index];
+            if(field.required && (!formData[field.key] || formData[field.key]== '' ||  formData[field.key]== []) ){
+                wx.showToast({
+                  title: `请填写${field.name}`,
+                  icon:'none'
+                })
+                return false;
+            }
+        }
+      
+        return true;
+    },
+    async setRoom(){
+        let ShopRoom =  Parse.Object.extend("ShopRoom");
+        let Room = new ShopRoom()
+        Room.set(this.data.formData)
+        Room.set("shop",{
+            "__type":"Pointer",
+            "className":"ShopStore",
+            "objectId":this.data.storeId
+        })
+        Room.set("company",{
+            "__type":"Pointer",
+            "className":"Company",
+            "objectId":company
+        })
+        return await Room.save()
+    },
+
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

+ 12 - 0
nova-tourism/pages/my/merchant/room-manage/room-edit/index.json

@@ -0,0 +1,12 @@
+{
+  "usingComponents": {
+    "van-field": "@vant/weapp/field/index",
+    "van-cell-group": "@vant/weapp/cell-group/index",
+    "diy-editor": "/components/diy-editor/index",
+    "select": "../../../../../components/select/index",
+    "van-tag": "@vant/weapp/tag/index",
+    "van-button": "@vant/weapp/button/index",
+    "van-uploader": "@vant/weapp/uploader/index",
+    "van-switch": "@vant/weapp/switch/index"
+  }
+}

+ 58 - 0
nova-tourism/pages/my/merchant/room-manage/room-edit/index.less

@@ -0,0 +1,58 @@
+@import '../../../../../styles/base.less';
+page {
+    // background: #f6f6f6;
+}
+.form {
+    display: flex;
+    flex-wrap: wrap;
+.col-12 {
+    width: 50%;
+}
+}
+.form-item {
+    width: 100%;
+    margin: 20rpx 0;
+    .form-label {
+        font-size: 28rpx;
+        margin:20rpx;
+        color: @grey;
+        .required {
+            font-size: 40rpx;
+            vertical-align: middle;
+        }
+    }
+    .form-field {
+        padding: 10rpx;
+        // background: #ffffff;
+        .form-input {
+            padding: 10rpx;
+            border: 0.5px solid #eee;
+            border-radius: 10rpx;
+        }
+        .form-input-num {
+            width: 200rpx;
+        }
+    }
+}
+
+
+.tag-wrapper{
+    display: flex;
+    align-items: center;
+    .add-btn {
+        width: auto;
+    }
+    .tags {
+        flex: 1;
+        display: flex;
+        flex-wrap: wrap;
+        .tag {
+            margin:10rpx;
+        }
+    }
+    
+}
+.footer {
+    margin-bottom: 100rpx;
+    padding: 20rpx;
+}

+ 69 - 0
nova-tourism/pages/my/merchant/room-manage/room-edit/index.wxml

@@ -0,0 +1,69 @@
+<nav type="back" background-color="#46a9a4" title="{{pageType == 'add'?'添加房型':'编辑详情'}}" />
+<view class="page-section form">
+    <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>
+</view>
+<!-- editFields -->
+<view class="footer">
+    <van-button class="btn" size="large" color="#46a9a4" bindtap="submit">提交</van-button>
+</view>

+ 1 - 0
nova-tourism/pages/my/merchant/room-manage/room-edit/index.wxss

@@ -0,0 +1 @@
+.red{color:#F01740}.grey{color:#666666}.black{color:#000000}.title{font-weight:Medium;font-size:36rpx;color:#222222}.text-large{font-size:36rpx}.text{font-size:30rpx}.text-left{text-align:left}.text-center{text-align:center}.text-small{font-size:24rpx}.flex{display:flex}.justify-between{justify-content:space-between}.flex-aligin-center{display:flex;align-items:center}.flex-justify-between{display:flex;justify-content:space-between}.flex-1{flex:1}.flex-grow-1{flex-grow:1}.fixed-bottom{position:fixed;bottom:0;left:0;right:0}.w-100{width:100%}.h-100{height:100%}.page-section{margin:20rpx;border-radius:20rpx;background-color:#ffffff}.page-section-spacing{padding:20rpx}.spacing-small{padding:10rpx}.border-trans{border:1px solid transparent}.ellipsis{width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.ellipsis-2{width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.form{display:flex;flex-wrap:wrap}.form .col-12{width:50%}.form-item{width:100%;margin:20rpx 0}.form-item .form-label{font-size:28rpx;margin:20rpx;color:#666666}.form-item .form-label .required{font-size:40rpx;vertical-align:middle}.form-item .form-field{padding:10rpx}.form-item .form-field .form-input{padding:10rpx;border:.5px solid #eee;border-radius:10rpx}.form-item .form-field .form-input-num{width:200rpx}.tag-wrapper{display:flex;align-items:center}.tag-wrapper .add-btn{width:auto}.tag-wrapper .tags{flex:1;display:flex;flex-wrap:wrap}.tag-wrapper .tags .tag{margin:10rpx}.footer{margin-bottom:100rpx;padding:20rpx}

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.