Commit 6ea9bd27a9b278b1b67734b4e143d23b3291ffd8
Merge branch 'dev' into 'test'
Dev See merge request !186
Showing
50 changed files
with
4420 additions
and
29 deletions
app.json
| 1 | 1 | { |
| 2 | 2 | "pages": [ |
| 3 | + | |
| 3 | 4 | "pages/index/index/index", |
| 4 | 5 | "pages/goods/categoryList/categoryList", |
| 5 | 6 | "pages/cart/cart/cart", |
| ... | ... | @@ -46,16 +47,12 @@ |
| 46 | 47 | "pages/team/team_ping/team_ping", |
| 47 | 48 | "pages/cart/cart2_pt/cart2_pt", |
| 48 | 49 | "pages/cart/cart_wk/cart_wk", |
| 49 | - | |
| 50 | 50 | "pages/user/member/menber", |
| 51 | 51 | "pages/user/member/bring/bring", |
| 52 | 52 | "pages/user/member/bring/msg/msg", |
| 53 | 53 | "pages/user/member/account/account", |
| 54 | 54 | "pages/user/member/account_unable/account_unable", |
| 55 | 55 | "pages/user/member/cash_record/cash_record", |
| 56 | - "pages/user/deposit/deposit", | |
| 57 | - "pages/user/deposit/prepaid/prepaid", | |
| 58 | - "pages/user/deposit/prepaid/msg/msg", | |
| 59 | 56 | "pages/user/coupons/coupons", |
| 60 | 57 | "pages/user/coupons/qr_code/qr_code", |
| 61 | 58 | "pages/user/coupons/query/index", |
| ... | ... | @@ -63,7 +60,6 @@ |
| 63 | 60 | "pages/user/integral/integral", |
| 64 | 61 | "pages/user/integral/query/index", |
| 65 | 62 | "pages/user/integral/msg/msg", |
| 66 | - | |
| 67 | 63 | "pages/user/userqy/userqy", |
| 68 | 64 | "pages/user/user_spsy/user_spsy", |
| 69 | 65 | "pages/user/user_fw/user_fw", |
| ... | ... | @@ -74,15 +70,23 @@ |
| 74 | 70 | "pages/user/plus/plus", |
| 75 | 71 | "pages/user/cardinfo/cardinfo", |
| 76 | 72 | "pages/user/Detailed/Detailed", |
| 77 | - "pages/user/Change_phone/Change_phone" | |
| 78 | - | |
| 73 | + "pages/user/Change_phone/Change_phone", | |
| 74 | + | |
| 75 | + "pages/user/my_service/appment_main", | |
| 76 | + "pages/user/my_service/i_service", | |
| 77 | + "pages/user/my_service/cosmetology_list", | |
| 78 | + "pages/user/my_service/hist_service", | |
| 79 | + "pages/user/my_service/tment_details", | |
| 80 | + "pages/user/my_service/tment_eval", | |
| 81 | + "pages/user/my_service/tment_order_list", | |
| 82 | + "pages/user/my_service/beauty_deta" | |
| 79 | 83 | ], |
| 80 | 84 | "permission": { |
| 81 | 85 | "scope.userLocation": { |
| 82 | 86 | "desc": "获取你的位置信息" |
| 83 | 87 | } |
| 84 | 88 | }, |
| 85 | - "window": { | |
| 89 | + "window": { | |
| 86 | 90 | "backgroundTextStyle": "light", |
| 87 | 91 | "navigationBarTextStyle": "black", |
| 88 | 92 | "navigationBarTitleText": "加载中...", |
| ... | ... | @@ -95,7 +99,6 @@ |
| 95 | 99 | "selectedColor": "#f23030", |
| 96 | 100 | "borderStyle": "white", |
| 97 | 101 | "backgroundColor": "#ffffff", |
| 98 | - | |
| 99 | 102 | "list": [ |
| 100 | 103 | { |
| 101 | 104 | "pagePath": "pages/index/index/index", | ... | ... |
app.wxss
| ... | ... | @@ -50,6 +50,13 @@ button { |
| 50 | 50 | -webkit-box-orient: vertical; |
| 51 | 51 | -webkit-line-clamp: 3; |
| 52 | 52 | } |
| 53 | +.ellipsis-4 { | |
| 54 | + overflow: hidden; | |
| 55 | + text-overflow: ellipsis; | |
| 56 | + display: -webkit-box; | |
| 57 | + -webkit-box-orient: vertical; | |
| 58 | + -webkit-line-clamp: 4; | |
| 59 | +} | |
| 53 | 60 | |
| 54 | 61 | .pd-bg-fff { |
| 55 | 62 | padding: 0 30rpx; | ... | ... |
components/diy_notice/diy_notice.wxml
| ... | ... | @@ -4,9 +4,9 @@ |
| 4 | 4 | <image class="image_c" src="/public/static/images/model/notice.png"></image> |
| 5 | 5 | <view class="marquee"> |
| 6 | 6 | <view class="content"> |
| 7 | - <text style="color: {{object.notice_color}}">{{object.noticetxt}}</text> <text style="display: inline-block; width: 590rpx;"></text> | |
| 8 | - <text style="color: {{object.notice_color}}">{{object.noticetxt}}</text> <text style="display: inline-block; width: 590rpx;"></text> | |
| 9 | - <text style="color: {{object.notice_color}}">{{object.noticetxt}}</text> <text style="display: inline-block; width: 590rpx;"></text> | |
| 7 | + <text style="color: {{object.notice_color}}">{{object.noticetxt}}</text> <text style="display: inline-block; width: 590rpx;line-height:30rpx;"></text> | |
| 8 | + <text style="color: {{object.notice_color}}">{{object.noticetxt}}</text> <text style="display: inline-block; width: 590rpx;line-height:30rpx;"></text> | |
| 9 | + <text style="color: {{object.notice_color}}">{{object.noticetxt}}</text> <text style="display: inline-block; width: 590rpx;line-height:30rpx;"></text> | |
| 10 | 10 | </view> |
| 11 | 11 | </view> |
| 12 | 12 | </view> | ... | ... |
components/diy_notice/diy_notice.wxss
| ... | ... | @@ -47,8 +47,10 @@ |
| 47 | 47 | display: inline-block; |
| 48 | 48 | position: relative; |
| 49 | 49 | padding-right: 0px; |
| 50 | - animation: kf-marque-animation 4.5s linear infinite; | |
| 50 | + animation: kf-marque-animation 20s linear infinite; | |
| 51 | 51 | white-space: nowrap; |
| 52 | + line-height: 2rpx;font-size: 28rpx; | |
| 53 | + | |
| 52 | 54 | } |
| 53 | 55 | |
| 54 | 56 | .pd_top10{margin: 10rpx 0} | ... | ... |
components/my_confirm/my_confirm.js
0 → 100644
| 1 | +var t = getApp(); | |
| 2 | +Component({ | |
| 3 | + /*** 页面的初始数据***/ | |
| 4 | + data: { | |
| 5 | + yu_e_show: 0, | |
| 6 | + iurl: t.globalData.setting.imghost, | |
| 7 | + width: 0, | |
| 8 | + success: null, //成功的回调 | |
| 9 | + cancle: null, //取消的回调 | |
| 10 | + title: null, //标题 | |
| 11 | + s_text: null, //确定的提示语 | |
| 12 | + c_text: null, //取消的提示语 | |
| 13 | + }, | |
| 14 | + | |
| 15 | + methods: { | |
| 16 | + open: function(title, s_text, c_text, success, cancle) { | |
| 17 | + this.setData({ | |
| 18 | + title: title, | |
| 19 | + s_text: s_text, | |
| 20 | + c_text: c_text, | |
| 21 | + yu_e_show: 1 | |
| 22 | + }) | |
| 23 | + this.data.success = success; | |
| 24 | + this.data.cancle = cancle; | |
| 25 | + }, | |
| 26 | + open_cancel: function (yu_e_show){ | |
| 27 | + this.setData({ | |
| 28 | + yu_e_show: yu_e_show | |
| 29 | + }) | |
| 30 | + }, | |
| 31 | + go_sure: function() { | |
| 32 | + this.data.success(); | |
| 33 | + }, | |
| 34 | + go_cancle: function() { | |
| 35 | + this.data.cancle(); | |
| 36 | + }, | |
| 37 | + close_yu_e: function() { | |
| 38 | + this.setData({ | |
| 39 | + yu_e_show: 0 | |
| 40 | + }) | |
| 41 | + } | |
| 42 | + } | |
| 43 | + | |
| 44 | +}) | |
| 0 | 45 | \ No newline at end of file | ... | ... |
components/my_confirm/my_confirm.json
0 → 100644
components/my_confirm/my_confirm.wxml
0 → 100644
| 1 | +<!-- 转入余额提示 --> | |
| 2 | +<view class="xc-pop-up" wx:if="{{yu_e_show}}"> | |
| 3 | + <view class="xc-obscuration" bindtap='close_yu_e' catchtouchmove="ture"></view> | |
| 4 | + <view> | |
| 5 | + <view class="xc-qr-frame"> | |
| 6 | + <view class="shut" bindtap="close_yu_e">ⅹ</view> | |
| 7 | + <view class="fs32 xc-black3 flex jc-center ai-center" style="width:100%;height:220rpx;">{{title}}</view> | |
| 8 | + <view class="flex jc-center ai_center" style="width: 100%;height: 75rpx;"> | |
| 9 | + <view bindtap="go_sure" class="fs30 white flex jc-center ai-center ck_btn color color" style="margin-right: 20rpx;">{{s_text}}</view> | |
| 10 | + <view bindtap='go_cancle' class="fs30 xc-ash flex jc-center ai-center ck_btn"style="background:#ececea;">{{c_text}}</view> | |
| 11 | + </view> | |
| 12 | + </view> | |
| 13 | + </view> | |
| 14 | +</view> | |
| 15 | + | |
| 16 | + | ... | ... |
components/my_confirm/my_confirm.wxss
0 → 100644
| 1 | + | |
| 2 | +/* 弹窗样式 */ | |
| 3 | +.xc-pop-up{ | |
| 4 | + width: 100%; | |
| 5 | + height: 100%; | |
| 6 | + position:fixed; | |
| 7 | + z-index:5; | |
| 8 | + display:flex; | |
| 9 | + justify-content:center; | |
| 10 | + align-items:center; | |
| 11 | +} | |
| 12 | +.xc-obscuration{ | |
| 13 | + position: fixed; | |
| 14 | + left: 0; | |
| 15 | + top: 0; | |
| 16 | + right: 0; | |
| 17 | + bottom: 0; | |
| 18 | + z-index: 11; | |
| 19 | + background: rgba(0,0,0,0.4); | |
| 20 | + width: 100%; | |
| 21 | + height: 100%; | |
| 22 | +} | |
| 23 | + | |
| 24 | +.shut{ | |
| 25 | + display: block; | |
| 26 | + width: 54rpx; | |
| 27 | + height: 54rpx; | |
| 28 | + font-size: 50rpx; | |
| 29 | + line-height:47rpx; | |
| 30 | + border-radius: 50%; | |
| 31 | + -moz-border-radius: 50%; | |
| 32 | + -webkit-border-radius: 50%; | |
| 33 | + color: #fff; | |
| 34 | + text-align: center; | |
| 35 | + position: fixed; | |
| 36 | + margin-top: -23rpx; | |
| 37 | + z-index: 66666; | |
| 38 | + right: 60rpx; | |
| 39 | + background: #c8162c; | |
| 40 | +} | |
| 41 | +.xc-qr-frame{ | |
| 42 | + width:560rpx; | |
| 43 | + height: 280rpx; | |
| 44 | + background: #fff; | |
| 45 | + z-index: 55; | |
| 46 | + position: fixed; | |
| 47 | + top:40%; | |
| 48 | + padding-bottom:20rpx; | |
| 49 | + left:50%; | |
| 50 | + margin-left: -280rpx; border-radius:10rpx | |
| 51 | +} | |
| 52 | + | |
| 53 | +.ck_btn{width:44%;height:52rpx;line-height:60rpx;background:#f35e73;border-radius:10rpx;} | |
| 54 | + | |
| 55 | +.fs36{ font-size: 36rpx; } | |
| 56 | +.fs30{ font-size: 30rpx; } | |
| 57 | + | |
| 58 | +.Opening_bk image { | |
| 59 | + position: absolute; width: 100%; height: 320rpx; | |
| 60 | +} | |
| 61 | +.flex {display: flex;} | |
| 62 | +.jc-center{ justify-content: center;} | |
| 63 | +.ai-center{align-items: center;} | |
| 64 | +.color{ | |
| 65 | + color: rgb(255,255,255); | |
| 66 | +} | |
| 0 | 67 | \ No newline at end of file | ... | ... |
components/nav_b/nav_b.js
0 → 100644
| 1 | +var t = getApp(), os = t.globalData.setting; | |
| 2 | +Component({ | |
| 3 | + properties: { | |
| 4 | + }, | |
| 5 | + data: { | |
| 6 | + isopen: 0, | |
| 7 | + iurl: os.imghost, | |
| 8 | + nav_left:"首页",//导航左边 | |
| 9 | + nav_center:"预约",//导航中间 | |
| 10 | + nav_right: "我的",//导航右边 | |
| 11 | + nav_left_url: "/pages/index/index/index",//导航左边地址 | |
| 12 | + nav_center_url:"/pages/user/my_service/tment_order_list",//导航中间地址 | |
| 13 | + nav_right_url:"/pages/user/index/index",//导航右边地址 | |
| 14 | + }, | |
| 15 | + | |
| 16 | + ready: function () { | |
| 17 | + }, | |
| 18 | + methods: { | |
| 19 | + //--点击打开事件-- | |
| 20 | + open_box: function () { | |
| 21 | + this.setData({ isopen: 1 }); | |
| 22 | + }, | |
| 23 | + //--关闭事件-- | |
| 24 | + close_box: function () { | |
| 25 | + this.setData({ isopen: 0 }); | |
| 26 | + }, | |
| 27 | + //--跳转-- | |
| 28 | + goto: function (e) { | |
| 29 | + var url = e.currentTarget.dataset.url; | |
| 30 | + getApp().goto(url); | |
| 31 | + this.close_box(); | |
| 32 | + } | |
| 33 | + | |
| 34 | + } | |
| 35 | + | |
| 36 | +}) | |
| 0 | 37 | \ No newline at end of file | ... | ... |
components/nav_b/nav_b.json
0 → 100644
components/nav_b/nav_b.wxml
0 → 100644
| 1 | +<view class="box_main {{isopen==1?'box_isopen':''}}" > | |
| 2 | + <view class="dian" bindtap="open_box"> | |
| 3 | + <image src="{{iurl}}/miniapp/images/sheng_lue.png" ></image> | |
| 4 | + </view> | |
| 5 | + <view class="cl_list"> | |
| 6 | + <view class="item" data-url="{{nav_left_url}}" bindtap="goto">{{nav_left}}</view> | |
| 7 | + <view class="item" data-url="{{nav_center_url}}" bindtap="goto">{{nav_center}}</view> | |
| 8 | + <view class="item" data-url="{{nav_right_url}}" bindtap="goto">{{nav_right}}</view> | |
| 9 | + <view class="item big" bindtap="close_box">×</view> | |
| 10 | + </view> | |
| 11 | +</view> | |
| 12 | + | ... | ... |
components/nav_b/nav_b.wxss
0 → 100644
| 1 | +.box_main { | |
| 2 | + width: 80rpx; | |
| 3 | + height: 80rpx; | |
| 4 | + background: #272636; | |
| 5 | + transition: width 0.8s; | |
| 6 | + -moz-transition: width 0.8s; /* Firefox 4 */ | |
| 7 | + -webkit-transition: width 0.8s; /* Safari and Chrome */ | |
| 8 | + -o-transition: width 0.8s; /* Opera */ | |
| 9 | + border-radius: 50rpx; | |
| 10 | + position: fixed; | |
| 11 | + right: 10rpx; | |
| 12 | + bottom: 350rpx; | |
| 13 | + overflow: hidden; | |
| 14 | + z-index: 4; | |
| 15 | +} | |
| 16 | + | |
| 17 | +.box_isopen { | |
| 18 | + width: 420rpx; | |
| 19 | +} | |
| 20 | + | |
| 21 | +.box_main .dian { | |
| 22 | + text-align: center; | |
| 23 | + width: 80rpx; | |
| 24 | + height: 80rpx; | |
| 25 | + color: #ffff; | |
| 26 | + font-size: 50rpx; | |
| 27 | + background: none; | |
| 28 | +} | |
| 29 | + | |
| 30 | +.box_main .dian image { | |
| 31 | + width: 60rpx; | |
| 32 | + height: 20rpx; | |
| 33 | +} | |
| 34 | + | |
| 35 | +.box_main.box_isopen .dian { | |
| 36 | + display: none; | |
| 37 | +} | |
| 38 | + | |
| 39 | +.box_main .cl_list { | |
| 40 | + display: none; | |
| 41 | +} | |
| 42 | + | |
| 43 | +.box_main.box_isopen .cl_list { | |
| 44 | + display: block; | |
| 45 | + margin-left: 20rpx; | |
| 46 | +} | |
| 47 | + | |
| 48 | +.box_main .cl_list .item { | |
| 49 | + display: inline-block; | |
| 50 | + width: 100rpx; | |
| 51 | + height: 80rpx; | |
| 52 | + text-align: center; | |
| 53 | + line-height: 80rpx; | |
| 54 | + color: #fff; | |
| 55 | + vertical-align: top; | |
| 56 | + font-size: 32rpx; | |
| 57 | +} | |
| 58 | + | |
| 59 | +.box_main .cl_list .item.big { | |
| 60 | + font-size: 70rpx; | |
| 61 | + line-height: 70rpx; | |
| 62 | +} | ... | ... |
images/gt.png deleted
1.72 KB
pages/user/index/index.wxml
| ... | ... | @@ -212,7 +212,10 @@ |
| 212 | 212 | <image class="xc-center-img " src="{{iurl}}/miniapp/images/add2.png"></image> |
| 213 | 213 | <view class="four-level-word">我的地址</view> |
| 214 | 214 | </view> |
| 215 | - | |
| 215 | + <view class="item t-c" data-url="/pages/user/my_service/i_service" bindtap="goto" > | |
| 216 | + <image class="xc-center-img " src="{{iurl}}/miniapp/images/yyservice/myservice.png"></image> | |
| 217 | + <view class="four-level-word">我的服务</view> | |
| 218 | + </view> | |
| 216 | 219 | </view> |
| 217 | 220 | |
| 218 | 221 | ... | ... |
pages/user/my_service/appment_main.js
0 → 100644
| 1 | +var e = getApp(), | |
| 2 | + a = e.globalData.setting, | |
| 3 | + os = a, | |
| 4 | + t = e.request, | |
| 5 | + d = e.globalData; | |
| 6 | +Page({ | |
| 7 | + | |
| 8 | + /** | |
| 9 | + * 页面的初始数据 | |
| 10 | + */ | |
| 11 | + data: { | |
| 12 | + inurl: a.url, //接口网址 | |
| 13 | + iurl: a.imghost, //服务器网址 | |
| 14 | + store: 0, //是否显示服务门店列表 | |
| 15 | + beautician: 0, //是否显示美容师列表 | |
| 16 | + beautician_name: "", //选中的美容师名称 | |
| 17 | + beauticianID: "", //美容师id | |
| 18 | + bea_index: "", //美容师列表下标 | |
| 19 | + placeholder: "填写备注", //备注为空的placeholder | |
| 20 | + store_list: [], //门店列表 | |
| 21 | + beautician_list: [], //美容师列表 | |
| 22 | + store_name: "", //选择的服务门店 | |
| 23 | + fir_pick_index: 0, //选择的门店下标 | |
| 24 | + curpage: 1, //当前分页数 | |
| 25 | + pageSize: 8, //页大小 | |
| 26 | + total: 0, | |
| 27 | + ismore: 0, //是否加载完毕 | |
| 28 | + itemId: "", //服务id | |
| 29 | + project_id: "", //项目id | |
| 30 | + isScroll: true, //scroll-y是否可以滑动 | |
| 31 | + key_word: "", //是否按门店文字查询 | |
| 32 | + is_service_read: 0, //是否调用过门店接口 | |
| 33 | + is_search: 0, //是否通过key_word调用接口 | |
| 34 | + is_success: 0, //是否提交成功 | |
| 35 | + remarks: "", //备注 | |
| 36 | + storageId: "", //线下门店id | |
| 37 | + url: "/pages/user/my_service/appment_main", //本页面地址路径用于选择时间页面跳转回来 | |
| 38 | + buyType: "", //项目类型 | |
| 39 | + time: "", //选择预约时间 | |
| 40 | + tment_count: "", //可预约人数 | |
| 41 | + lat: "", //纬度坐标 | |
| 42 | + lon: "", //经度坐标 | |
| 43 | + is_gps: 1, //是否开启gps | |
| 44 | + validay: "", //服务项目有效期 | |
| 45 | + is_sub: 0, //判断是否重复提交 | |
| 46 | + is_textea: 1, //备注是否是可输入 | |
| 47 | + }, | |
| 48 | + //控制备注输入 | |
| 49 | + check_text: function() { | |
| 50 | + wx.requestSubscribeMessage({ | |
| 51 | + tmplIds: ['Jg7Tj-wPlDfsairz_EHBQdoQnzLLF4nVhT1weCBEmTE'], | |
| 52 | + success(res) { | |
| 53 | + console.log("222222222222222222222222222222"); | |
| 54 | + }, | |
| 55 | + | |
| 56 | + fail(res) { | |
| 57 | + | |
| 58 | + console.log('fail 失败') | |
| 59 | + | |
| 60 | + console.log(res) | |
| 61 | + | |
| 62 | + logger.warn('订阅消息fail', res) | |
| 63 | + | |
| 64 | + } | |
| 65 | + }) | |
| 66 | + | |
| 67 | + var th = this; | |
| 68 | + var is_textea = th.data.is_textea; | |
| 69 | + th.setData({ | |
| 70 | + is_textea: 1, | |
| 71 | + beautician: 0 | |
| 72 | + }) | |
| 73 | + }, | |
| 74 | + onclickstore: function() { | |
| 75 | + var th = this; | |
| 76 | + var store = th.data.store; | |
| 77 | + if (store) { | |
| 78 | + th.setData({ | |
| 79 | + store: 0, | |
| 80 | + }) | |
| 81 | + } else { | |
| 82 | + th.setData({ | |
| 83 | + beautician: 0, | |
| 84 | + store: 1, | |
| 85 | + }) | |
| 86 | + if (th.data.store_list.length < 1) { | |
| 87 | + wx.showLoading({ | |
| 88 | + title: '加载中', | |
| 89 | + }) | |
| 90 | + th.query_store(); | |
| 91 | + } | |
| 92 | + } | |
| 93 | + }, | |
| 94 | + //输入的备注 | |
| 95 | + input_remarks: function(e) { | |
| 96 | + var remarks = e.detail.value; | |
| 97 | + this.setData({ | |
| 98 | + remarks: remarks | |
| 99 | + }) | |
| 100 | + }, | |
| 101 | + //提交成功及发送模版代码 | |
| 102 | + success: function() { | |
| 103 | + var th = this; | |
| 104 | + th.setData({ | |
| 105 | + is_textea: 0 | |
| 106 | + }) | |
| 107 | + var store = th.data.store_name; //门店名称 | |
| 108 | + var bea_name = th.data.beautician_name; //美容师名称 | |
| 109 | + var time = th.data.time; //预约时间 | |
| 110 | + var is_sub = th.data.is_sub; //是否重复提交 | |
| 111 | + //提交预约前的判断 | |
| 112 | + if (store == "") { | |
| 113 | + getApp().my_warnning("请选择服务门店", 0, th); | |
| 114 | + return false; | |
| 115 | + } else if (bea_name == "") { | |
| 116 | + getApp().my_warnning("请选择美容师", 0, th); | |
| 117 | + return false; | |
| 118 | + } else if (time == "") { | |
| 119 | + getApp().my_warnning("请选择预约时间", 0, th); | |
| 120 | + return false; | |
| 121 | + } else { | |
| 122 | + if (is_sub == 0) { | |
| 123 | + th.setData({ | |
| 124 | + is_sub: 1 | |
| 125 | + }) | |
| 126 | + var url = th.data.inurl + "/api/weshop/marketing/reservation/reservation/insert"; //接口路径 | |
| 127 | + var serviceId = th.data.itemId; //服务id | |
| 128 | + var beauticianID = th.data.beauticianID; //美容师id | |
| 129 | + var buyType = th.data.buyType; //服务项目类型 | |
| 130 | + var storeId = a.stoid; //商家id | |
| 131 | + var storageId = th.data.storageId; //门店id | |
| 132 | + var userId = d.user_id; //用户id | |
| 133 | + var remarks = th.data.remarks; //用户备注 | |
| 134 | + var project_id = th.data.project_id; //项目id | |
| 135 | + var validay = th.data.validay; | |
| 136 | + var json = { | |
| 137 | + "arrangeTime": time, | |
| 138 | + "beauticianId": beauticianID, | |
| 139 | + "buyType": buyType, | |
| 140 | + "effectiveDay": "", | |
| 141 | + "number": "", | |
| 142 | + "projectId": project_id, | |
| 143 | + "remark": remarks, | |
| 144 | + "serviceId": serviceId, | |
| 145 | + "states": 0, | |
| 146 | + "storageId": storageId, | |
| 147 | + "storeId": storeId, | |
| 148 | + "userId": userId, | |
| 149 | + "validay": validay | |
| 150 | + } | |
| 151 | + var data = JSON.stringify(json); | |
| 152 | + wx.request({ | |
| 153 | + url: url, | |
| 154 | + data: json, | |
| 155 | + method: 'post', | |
| 156 | + header: { | |
| 157 | + 'content-type': 'application/json' | |
| 158 | + }, // 设置请求的 header | |
| 159 | + success: function(res) { | |
| 160 | + th.setData({ | |
| 161 | + is_sub: 0 | |
| 162 | + }) | |
| 163 | + if (res.data.code == 0) { | |
| 164 | + getApp().my_warnning("预约成功", 1, th); | |
| 165 | + var store_name = th.data.store_name; //预约门店 | |
| 166 | + var number = res.data.data.Number; | |
| 167 | + var temp_url = "/api/wx/open/app/user/sendSubscribeMsg"; //模版接口 | |
| 168 | + var userinfo = getApp().globalData.userInfo; | |
| 169 | + var name = d.userInfo.nickname; | |
| 170 | + var json = { | |
| 171 | + // "formId": formid, | |
| 172 | + "keyWord": [{ | |
| 173 | + "keyword": res.data.data.ServiceName | |
| 174 | + }, | |
| 175 | + { | |
| 176 | + "keyword": time | |
| 177 | + }, { | |
| 178 | + "keyword": res.data.data.BeauticianName | |
| 179 | + }, { | |
| 180 | + "keyword": res.data.data.StorageName | |
| 181 | + }, { | |
| 182 | + "keyword": res.data.data.Address | |
| 183 | + } | |
| 184 | + ], | |
| 185 | + "page": "/pages/user/my_service/tment_details?number=" + number, | |
| 186 | + "storeId": a.stoid, | |
| 187 | + "typeId": "1011", | |
| 188 | + "userId": d.user_id | |
| 189 | + }; | |
| 190 | + var data = JSON.stringify(json); | |
| 191 | + //调用发送预约成功模版接口 | |
| 192 | + wx.request({ | |
| 193 | + url: th.data.inurl + temp_url, | |
| 194 | + data: data, | |
| 195 | + method: 'post', | |
| 196 | + header: { | |
| 197 | + 'content-type': 'application/json' | |
| 198 | + }, // 设置请求的 header | |
| 199 | + success: function(data) {} | |
| 200 | + }) | |
| 201 | + setTimeout(function() { | |
| 202 | + wx.redirectTo({ | |
| 203 | + url: "/pages/user/my_service/tment_details?number=" + number | |
| 204 | + }); | |
| 205 | + }, 1000); | |
| 206 | + } else { | |
| 207 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 208 | + th.setData({ | |
| 209 | + is_sub: 0 | |
| 210 | + }) | |
| 211 | + } | |
| 212 | + } | |
| 213 | + }) | |
| 214 | + } | |
| 215 | + } | |
| 216 | + }, | |
| 217 | + //提交预约 | |
| 218 | + sub_success: function(e) { | |
| 219 | + var th = this; | |
| 220 | + var temp_url = "/api/wx/weappSendlist/page"; | |
| 221 | + var template_id = ""; | |
| 222 | + //获取模版id | |
| 223 | + getApp().request.promiseGet(temp_url, { | |
| 224 | + data: { | |
| 225 | + store_id: a.stoid, | |
| 226 | + typeid: "1011" | |
| 227 | + } | |
| 228 | + }).then(res => { | |
| 229 | + if (res.data.code == 0) { | |
| 230 | + template_id = res.data.data.pageData[0].template_id; | |
| 231 | + // //授权订阅 | |
| 232 | + wx.requestSubscribeMessage({ | |
| 233 | + tmplIds: [template_id], | |
| 234 | + success(res) { | |
| 235 | + th.success(); | |
| 236 | + }, | |
| 237 | + fail(res) { | |
| 238 | + th.success(); | |
| 239 | + } | |
| 240 | + }) | |
| 241 | + }else{ | |
| 242 | + th.success(); | |
| 243 | + } | |
| 244 | + }) | |
| 245 | + | |
| 246 | + }, | |
| 247 | + goto: function(e) { | |
| 248 | + var th = this; | |
| 249 | + th.setData({ | |
| 250 | + beautician: 0, | |
| 251 | + is_textea: 0 | |
| 252 | + }) | |
| 253 | + if (th.data.store_name == "") { | |
| 254 | + getApp().my_warnning("请选择服务门店", 0, th); | |
| 255 | + } else if (th.data.beautician_name == "") { | |
| 256 | + getApp().my_warnning("请选择美容师", 0, th); | |
| 257 | + } else { | |
| 258 | + var url = e.currentTarget.dataset.url; | |
| 259 | + getApp().goto(url); | |
| 260 | + } | |
| 261 | + }, | |
| 262 | + //点击选择门店 | |
| 263 | + choose_for_store: function(e) { | |
| 264 | + var th = this; | |
| 265 | + var index_c = e.currentTarget.dataset.ind; | |
| 266 | + var fir_pick_index = th.data.fir_pick_index; | |
| 267 | + //判断是否点击选中的门店,防止重复点击重复设置选中下标 | |
| 268 | + if (index_c == fir_pick_index) { | |
| 269 | + return false; | |
| 270 | + } else { | |
| 271 | + th.setData({ | |
| 272 | + fir_pick_index: index_c, | |
| 273 | + beautician_name: "", | |
| 274 | + time: "", | |
| 275 | + tment_count: "" | |
| 276 | + }) | |
| 277 | + } | |
| 278 | + }, | |
| 279 | + //确认选择门店 | |
| 280 | + choice_store: function() { | |
| 281 | + var th = this; | |
| 282 | + var index = th.data.fir_pick_index; | |
| 283 | + var store_name = th.data.store_list[index].StorageName; | |
| 284 | + var Id = th.data.store_list[index].Id; | |
| 285 | + th.setData({ | |
| 286 | + store: 0, | |
| 287 | + store_name: store_name, | |
| 288 | + storageId: Id | |
| 289 | + }) | |
| 290 | + }, | |
| 291 | + onReachBottom: function() { | |
| 292 | + var th = this; | |
| 293 | + if (this.data.total <= th.data.pageSize) return; | |
| 294 | + if (this.data.ismore) return; | |
| 295 | + | |
| 296 | + wx.showLoading({ | |
| 297 | + title: '加载中...', | |
| 298 | + }) | |
| 299 | + th.query_store(); | |
| 300 | + }, | |
| 301 | + //分页查询门店信息 | |
| 302 | + query_store: function() { | |
| 303 | + var th = this; | |
| 304 | + th.setData({ | |
| 305 | + is_textea: 0 | |
| 306 | + }) | |
| 307 | + var itemId = th.data.itemId; //服务id | |
| 308 | + var url = "/api/weshop/marketing/reservation/storage/page"; | |
| 309 | + var key_word = th.data.key_word; | |
| 310 | + key_word = key_word.replace(/\s+/g, ""); | |
| 311 | + getApp().request.promiseGet(url, { | |
| 312 | + data: { | |
| 313 | + storeId: a.stoid, | |
| 314 | + serviceId: itemId, | |
| 315 | + latitude: th.data.lat, | |
| 316 | + longitude: th.data.lon, | |
| 317 | + page: th.data.curpage, | |
| 318 | + pageSize: th.data.pageSize, | |
| 319 | + keyWord: key_word | |
| 320 | + } | |
| 321 | + }).then(res => { | |
| 322 | + wx.hideLoading(); | |
| 323 | + if (res.data.code == 0) { | |
| 324 | + th.data.curpage++; | |
| 325 | + var arr1 = th.data.store_list; | |
| 326 | + var arr2 = res.data.data.pageData; | |
| 327 | + var arr3 = [...arr1, ...arr2]; | |
| 328 | + var ismore = 0; | |
| 329 | + if (arr3.length == res.data.data.total) ismore = 1 | |
| 330 | + th.setData({ | |
| 331 | + store_list: arr3, | |
| 332 | + total: res.data.data.total, | |
| 333 | + ismore: ismore, | |
| 334 | + is_service_read: 1, | |
| 335 | + }), wx.stopPullDownRefresh(); //停止下拉刷新 | |
| 336 | + if (key_word != "" && res.data.data.pageData.length < 1) { | |
| 337 | + th.setData({ | |
| 338 | + is_search: 1 | |
| 339 | + }) | |
| 340 | + } | |
| 341 | + } else { | |
| 342 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 343 | + } | |
| 344 | + }) | |
| 345 | + }, | |
| 346 | + //查询 | |
| 347 | + query_beautician: function() { | |
| 348 | + var th = this; | |
| 349 | + th.setData({ | |
| 350 | + is_textea: 0 | |
| 351 | + }) | |
| 352 | + if (th.data.store_name == "") { | |
| 353 | + getApp().my_warnning("请选择服务门店", 0, th); | |
| 354 | + } else { | |
| 355 | + wx.showLoading({ | |
| 356 | + title: '加载中', | |
| 357 | + }) | |
| 358 | + var itemid = th.data.itemId; //正式使用的项目id | |
| 359 | + var storageId = th.data.storageId; //正式使用的线下门店id | |
| 360 | + var url = "/api/weshop/marketing/reservation/staff/page"; //接口地址 | |
| 361 | + getApp().request.promiseGet(url, { | |
| 362 | + data: { | |
| 363 | + storeId: a.stoid, | |
| 364 | + userId: d.user_id, | |
| 365 | + serviceId: itemid, | |
| 366 | + storageId: storageId | |
| 367 | + } | |
| 368 | + }).then(res => { | |
| 369 | + wx.hideLoading(); | |
| 370 | + if (res.data.code == 0) { | |
| 371 | + th.setData({ | |
| 372 | + beautician_list: res.data.data.pageData | |
| 373 | + }) | |
| 374 | + if (res.data.data.pageData.length < 1) { | |
| 375 | + getApp().my_warnning("暂无美容师", 0, th); | |
| 376 | + } else { | |
| 377 | + if (th.data.beautician == 0) { | |
| 378 | + th.setData({ | |
| 379 | + beautician: 1, | |
| 380 | + }) | |
| 381 | + } else { | |
| 382 | + th.setData({ | |
| 383 | + beautician: 0, | |
| 384 | + }) | |
| 385 | + } | |
| 386 | + } | |
| 387 | + } else { | |
| 388 | + getApp().my_warnning("暂无美容师", 0, th); | |
| 389 | + } | |
| 390 | + }) | |
| 391 | + } | |
| 392 | + }, | |
| 393 | + choice_beautician: function(e) { | |
| 394 | + var th = this; | |
| 395 | + var bea_index = e.currentTarget.dataset.baaindex; | |
| 396 | + var bea_name = th.data.beautician_list[bea_index].StaffName; | |
| 397 | + var BeauticianID = th.data.beautician_list[bea_index].Id; | |
| 398 | + th.setData({ | |
| 399 | + beautician_name: bea_name, | |
| 400 | + beautician: 0, | |
| 401 | + bea_index: bea_index, | |
| 402 | + beauticianID: BeauticianID, | |
| 403 | + time: "", | |
| 404 | + tment_count: "", | |
| 405 | + is_textea: 0 | |
| 406 | + }) | |
| 407 | + | |
| 408 | + }, | |
| 409 | + //获取搜索门店输入的值 | |
| 410 | + input_store: function(e) { | |
| 411 | + this.setData({ | |
| 412 | + key_word: e.detail.value | |
| 413 | + }) | |
| 414 | + }, | |
| 415 | + //搜索门店 | |
| 416 | + search_store: function() { | |
| 417 | + var th = this; | |
| 418 | + var key_word = th.data.key_word; | |
| 419 | + var store_list = th.data.store_list; | |
| 420 | + th.setData({ | |
| 421 | + curpage: 1, | |
| 422 | + is_search: 0, | |
| 423 | + store_list: [] | |
| 424 | + }) | |
| 425 | + wx.showLoading({ | |
| 426 | + title: '加载中', | |
| 427 | + }) | |
| 428 | + th.query_store(); | |
| 429 | + }, | |
| 430 | + //美容师预约跳转页面 | |
| 431 | + nav_bea: function() { | |
| 432 | + var th = this; | |
| 433 | + th.setData({ | |
| 434 | + is_textea: 0, | |
| 435 | + beautician: 0 | |
| 436 | + }) | |
| 437 | + var storageId = th.data.storageId; //线下门店id | |
| 438 | + var itemId = th.data.itemId; //服务id | |
| 439 | + var project_id = th.data.project_id; | |
| 440 | + if (storageId == "") { | |
| 441 | + getApp().my_warnning("请选择服务门店", 0, th); | |
| 442 | + } else { | |
| 443 | + wx.navigateTo({ | |
| 444 | + url: "/pages/user/my_service/cosmetology_list?" + 'storageId=' + storageId + '&' + 'itemId=' + itemId + '&' + "projectId=" + project_id | |
| 445 | + }); | |
| 446 | + } | |
| 447 | + }, | |
| 448 | + /** | |
| 449 | + * 生命周期函数--监听页面加载 | |
| 450 | + */ | |
| 451 | + onLoad: function(options) { | |
| 452 | + var th = this; | |
| 453 | + th.setData({ | |
| 454 | + itemId: options.service_id, | |
| 455 | + buyType: options.BuyType, | |
| 456 | + project_id: options.ProjectID, | |
| 457 | + validay: options.Validay | |
| 458 | + }) | |
| 459 | + wx.getLocation({ | |
| 460 | + type: 'wgs84', | |
| 461 | + success: function(res) { | |
| 462 | + th.data.lat = res.latitude; | |
| 463 | + th.data.lon = res.longitude; | |
| 464 | + th.data.is_get_local_ok = 1; | |
| 465 | + th.setData({ | |
| 466 | + is_gps: 1 | |
| 467 | + }); | |
| 468 | + }, | |
| 469 | + fail: function(res) { | |
| 470 | + if (res.errCode == 2) { | |
| 471 | + th.setData({ | |
| 472 | + is_gps: 0 | |
| 473 | + }); | |
| 474 | + if (th.data.is_gps == 0) { | |
| 475 | + getApp().confirmBox("请开启GPS定位", null, 25000, !1); | |
| 476 | + } | |
| 477 | + } else { | |
| 478 | + th.setData({ | |
| 479 | + is_gps: "3" | |
| 480 | + }); | |
| 481 | + } | |
| 482 | + | |
| 483 | + th.data.is_get_local_ok = 1; | |
| 484 | + } | |
| 485 | + }) | |
| 486 | + }, | |
| 487 | + //查询剩下可预约人数 | |
| 488 | + query_more: function() { | |
| 489 | + var th = this; | |
| 490 | + var url = "/api/weshop/marketing/reservation/can/reservation/count"; | |
| 491 | + var beauticianID = th.data.beauticianID; //美容师id | |
| 492 | + var projectID = th.data.itemId; //服务id | |
| 493 | + var seekTime = th.data.time; //预约日期 | |
| 494 | + var storageId = th.data.storageId; //门店id | |
| 495 | + var storeId = a.stoid; //商家id | |
| 496 | + getApp().request.promiseGet(url, { | |
| 497 | + data: { | |
| 498 | + beauticianId: beauticianID, | |
| 499 | + seekTime: seekTime, | |
| 500 | + serviceId: projectID, | |
| 501 | + storageId: storageId, | |
| 502 | + storeId: storeId | |
| 503 | + } | |
| 504 | + }).then(res => { | |
| 505 | + if (res.data.code == 0) { | |
| 506 | + var tment_count = res.data.data.CanReservation; | |
| 507 | + th.setData({ | |
| 508 | + tment_count: tment_count | |
| 509 | + }) | |
| 510 | + } else { | |
| 511 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 512 | + } | |
| 513 | + }) | |
| 514 | + | |
| 515 | + }, | |
| 516 | + /** | |
| 517 | + * 生命周期函数--监听页面显示 | |
| 518 | + */ | |
| 519 | + onShow: function() { | |
| 520 | + var th = this; | |
| 521 | + var seekTime = th.data.time; //预约日期 | |
| 522 | + if (seekTime != "") { | |
| 523 | + th.query_more(); | |
| 524 | + } | |
| 525 | + th.query_project(); | |
| 526 | + }, | |
| 527 | + //获取单个服务项目信息 | |
| 528 | + query_project: function() { | |
| 529 | + var th = this; | |
| 530 | + var url = "/api/weshop/marketing/reservation/sm/page"; //获取服务项目接口 | |
| 531 | + var project_id = th.data.project_id; //服务项目id | |
| 532 | + getApp().request.promiseGet(url, { | |
| 533 | + data: { | |
| 534 | + storeId: a.stoid, | |
| 535 | + userId: d.user_id, | |
| 536 | + projectId: project_id | |
| 537 | + } | |
| 538 | + }).then(res => { | |
| 539 | + if (res.data.code == 0) { | |
| 540 | + th.setData({ | |
| 541 | + validay: res.data.data.pageData[0].Validay | |
| 542 | + }) | |
| 543 | + } else { | |
| 544 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 545 | + } | |
| 546 | + }) | |
| 547 | + }, | |
| 548 | + //关闭导航 | |
| 549 | + close: function() { | |
| 550 | + var th = this; | |
| 551 | + var nav_b = th.selectComponent("#nav_b"); //组件的id | |
| 552 | + nav_b.close_box(); | |
| 553 | + } | |
| 554 | +}) | |
| 0 | 555 | \ No newline at end of file | ... | ... |
pages/user/my_service/appment_main.json
0 → 100644
pages/user/my_service/appment_main.wxml
0 → 100644
| 1 | +<wxs module="filters" src="../../../utils/filter.wxs"></wxs> | |
| 2 | +<view class="container" catchtap="close"> | |
| 3 | + <image class="main" src="{{iurl}}/miniapp/images/yyservice/main.png"></image> | |
| 4 | + | |
| 5 | + <view class="Fram"> | |
| 6 | + <!-- 选择门店 --> | |
| 7 | + <view class="flex-vertical mabot"> | |
| 8 | + <!-- 门店 --> | |
| 9 | + <view class="flex-vertical-between head fs30"> | |
| 10 | + <view>门</view> | |
| 11 | + <view>店</view> | |
| 12 | + </view> | |
| 13 | + | |
| 14 | + <!-- 选择门店 --> | |
| 15 | + <view class="flex-vertical-between fs26 select" bindtap="onclickstore"> | |
| 16 | + <view class="{{store_name==''?'color':''}} value ellipsis-1">{{store_name==""?'选择服务门店':store_name}}</view> | |
| 17 | + <view class="angle">∟</view> | |
| 18 | + </view> | |
| 19 | + </view> | |
| 20 | + <!-- 选择美容师 --> | |
| 21 | + <view class="flex-vertical mabot"> | |
| 22 | + <!-- 门店 --> | |
| 23 | + <view class="flex-vertical-between head fs30"> | |
| 24 | + <view>美</view> | |
| 25 | + <view>容</view> | |
| 26 | + <view>师</view> | |
| 27 | + </view> | |
| 28 | + | |
| 29 | + <!-- 选择美容师 --> | |
| 30 | + <view class="rel fs26"> | |
| 31 | + <view class="flex-vertical-between Cosmetology" bindtap="query_beautician"> | |
| 32 | + <view class="{{beautician_name==''?'color':''}} value ellipsis-1">{{beautician_name==''?'选择美容师':beautician_name}}</view> | |
| 33 | + <view class="angle">∟</view> | |
| 34 | + </view> | |
| 35 | + <!-- 美容师下拉列表 --> | |
| 36 | + <view class="beauticians abs" wx:if="{{beautician}}"> | |
| 37 | + <!-- 到时候要做判断如果是index==循环的最后一个则把下边线去掉:(beaclone去掉的css) --> | |
| 38 | + <view class="beautician flex-vertical fs26" wx:for="{{beautician_list}}" bindtap="choice_beautician" data-baaindex="{{key}}" wx:for-index="key"> | |
| 39 | + <view>{{item.StaffName}}</view> | |
| 40 | + </view> | |
| 41 | + <view> | |
| 42 | + </view> | |
| 43 | + </view> | |
| 44 | + </view> | |
| 45 | + <view class="flex-center users" bindtap="nav_bea"> | |
| 46 | + <image class="user" src="{{iurl}}/miniapp/images/yyservice/user.png"></image> | |
| 47 | + </view> | |
| 48 | + </view> | |
| 49 | + | |
| 50 | + <!-- 选择时间 --> | |
| 51 | + <view class="flex-vertical mabot"> | |
| 52 | + <!-- 门店 --> | |
| 53 | + <view class="head fs30"> | |
| 54 | + <view>预约时间</view> | |
| 55 | + </view> | |
| 56 | + | |
| 57 | + <!-- 选择时间 --> | |
| 58 | + <view class="flex-vertical-between fs26 select" data-url="/pages/user/my_service/beauty_deta?url+{{url}}&BeauticianID={{beauticianID}}&itemId={{itemId}}&modify=0&projectId={{project_id}}" bindtap="goto"> | |
| 59 | + <view class="{{time==''?'color':''}}">{{time==""?'选择时间':time}}</view> | |
| 60 | + <view class="angle angler">∟</view> | |
| 61 | + </view> | |
| 62 | + </view> | |
| 63 | + | |
| 64 | + <!-- 备注 --> | |
| 65 | + <view class="flex Remarks"> | |
| 66 | + <!-- 门店 --> | |
| 67 | + <view class="flex-space-between head fs30"> | |
| 68 | + <view>备</view> | |
| 69 | + <view>注</view> | |
| 70 | + </view> | |
| 71 | + <view class="flex fs26"> | |
| 72 | + <block wx:if="{{is_textea==1 && store==0}}"> | |
| 73 | + <textarea class="textarea" placeholder="{{remarks==''?'填写备注':remarks}}" placeholder-class="fs26 color" value="{{remarks}}" bindinput="input_remarks" maxlength="100"> | |
| 74 | + </textarea> | |
| 75 | + </block> | |
| 76 | + <block wx:else> | |
| 77 | + <view class="textarea color" bindtap="check_text">{{remarks==''?'填写备注':remarks}} | |
| 78 | + </view> | |
| 79 | + </block> | |
| 80 | + </view> | |
| 81 | + </view> | |
| 82 | + <view wx:if="{{tment_count!=''}}" class="notes flex-level-right fs24 color"> | |
| 83 | + <view>注:剩余可预约人数{{tment_count}}人</view> | |
| 84 | + </view> | |
| 85 | + | |
| 86 | + <view class="submitMax flex-space-between fs32"> | |
| 87 | + <navigator class="appment flex-center" url="/pages/user/my_service/tment_order_list"> | |
| 88 | + <view>我的预约</view> | |
| 89 | + </navigator> | |
| 90 | + <form report-submit='true' bindtap="sub_success"> | |
| 91 | + <button form-type="submit" class="sub_appment flex-center"> | |
| 92 | + <view>提交预约</view> | |
| 93 | + </button> | |
| 94 | + </form> | |
| 95 | + </view> | |
| 96 | + </view> | |
| 97 | + | |
| 98 | +</view> | |
| 99 | + | |
| 100 | +<!-- 门店列表显示 --> | |
| 101 | +<view wx:if="{{store}}" class="storeList fixed"> | |
| 102 | + <view class="choice flex-vertical-between fs32 storeListpadd"> | |
| 103 | + <view>选择服务门店</view> | |
| 104 | + <icon bindtap="onclickstore" color="black" size="22" type="cancel"></icon> | |
| 105 | + </view> | |
| 106 | + <view class="searchbar flex-vertical-between storeListpadd"> | |
| 107 | + <input class="inputstore fs28" placeholder="{{key_word==''?'输入要搜索的门店':key_word}}" placeholder-class="fs28" maxlength="16" bindinput="input_store" bindconfirm="search_store" /> | |
| 108 | + <view class="search flex-center" bindtap="search_store"> | |
| 109 | + <view class="fs28">搜索</view> | |
| 110 | + </view> | |
| 111 | + </view> | |
| 112 | + <!-- 选择门店 --> | |
| 113 | + <scroll-view class="stores" scroll-y="{{isScroll}}" enable-back-to-top="true" bindscrolltolower="onReachBottom"> | |
| 114 | + <view class="store flex-vertical" wx:for="{{store_list}}" bindtap="choose_for_store" data-ind="{{index}}"> | |
| 115 | + <block wx:if="{{index==fir_pick_index}}"> | |
| 116 | + <icon class="icon" type="success" color="red" size="20"></icon> | |
| 117 | + </block> | |
| 118 | + <block wx:else> | |
| 119 | + <view class="circular"></view> | |
| 120 | + </block> | |
| 121 | + <view class="store_name_dis"> | |
| 122 | + <view class="name_dis flex-vertical-between"> | |
| 123 | + <view class="store_name fs28 ellipsis-1">{{item.StorageName}}</view> | |
| 124 | + <view wx:if="{{item.Distance!=1000000}}" class="store_dis flex fs22"> | |
| 125 | + <view class="ellipsis-1">距您:{{item.Distance}}km</view> | |
| 126 | + </view> | |
| 127 | + </view> | |
| 128 | + <view class="store_address fs24 ellipsis-2">{{item.Address}}</view> | |
| 129 | + </view> | |
| 130 | + </view> | |
| 131 | + <!-- 通过搜索的时候没有找到的提示语 --> | |
| 132 | + <view wx:if="{{store_list.length<1 && is_search==1}}" class="flex-center fs28 notstore"> | |
| 133 | + <view>没有找到{{key_word}}门店</view> | |
| 134 | + </view> | |
| 135 | + | |
| 136 | + <!-- 数据加载完毕 --> | |
| 137 | + <view wx:if="{{ismore && store_list.length>1}}" class="flex-center fs28 notstore"> | |
| 138 | + <view>数据加载完毕</view> | |
| 139 | + </view> | |
| 140 | + </scroll-view> | |
| 141 | + <!-- sub --> | |
| 142 | + <view class="flex-center fs32" bindtap="choice_store"> | |
| 143 | + <view class="determine flex-center"> | |
| 144 | + <view>确定</view> | |
| 145 | + </view> | |
| 146 | + </view> | |
| 147 | +</view> | |
| 148 | +<!-- 蒙尘 --> | |
| 149 | +<view wx:if="{{store}}" class="disgraceful" bindtap="onclickstore"></view> | |
| 150 | +<warn id="warn"></warn> | |
| 151 | +<!-- 制作一个圆球导航 --> | |
| 152 | +<nav_b id="nav_b"></nav_b> | |
| 0 | 153 | \ No newline at end of file | ... | ... |
pages/user/my_service/appment_main.wxss
0 → 100644
| 1 | +.container { | |
| 2 | + border-top: 7rpx solid rgb(245, 245, 245); | |
| 3 | +} | |
| 4 | + | |
| 5 | +.main { | |
| 6 | + width: 100%; | |
| 7 | + height: 305rpx; | |
| 8 | +} | |
| 9 | + | |
| 10 | +.angle { | |
| 11 | + transform: rotate(-45deg); | |
| 12 | + margin-right: 15rpx; | |
| 13 | + margin-bottom: 10rpx; | |
| 14 | + font-size: 26rpx; | |
| 15 | + color: rgb(142, 142, 142); | |
| 16 | +} | |
| 17 | + | |
| 18 | +.angler { | |
| 19 | + transform: rotate(227deg); | |
| 20 | + margin-bottom: 0rpx; | |
| 21 | +} | |
| 22 | + | |
| 23 | +.users { | |
| 24 | + background-color: rgb(255, 255, 255); | |
| 25 | +} | |
| 26 | + | |
| 27 | +.user { | |
| 28 | + width: 40rpx; | |
| 29 | + height: 40rpx; | |
| 30 | + margin-left: 15rpx; | |
| 31 | +} | |
| 32 | + | |
| 33 | +.Fram { | |
| 34 | + padding: 0rpx 60rpx; | |
| 35 | + margin-top: 60rpx; | |
| 36 | + background-color: rgb(255, 255, 255); | |
| 37 | +} | |
| 38 | + | |
| 39 | +.subSuccess { | |
| 40 | + position: fixed; | |
| 41 | + z-index: 3; | |
| 42 | + top: 420rpx; | |
| 43 | + left: 110rpx; | |
| 44 | + width: 540rpx; | |
| 45 | + height: 315rpx; | |
| 46 | + background-color: rgb(155, 155, 155); | |
| 47 | + text-align: center; | |
| 48 | + border-radius: 20rpx; | |
| 49 | + color: rgb(255, 255, 255); | |
| 50 | + font-weight: bold; | |
| 51 | +} | |
| 52 | + | |
| 53 | +.Success { | |
| 54 | + width: 110rpx; | |
| 55 | + height: 110rpx; | |
| 56 | + margin-top: 70rpx; | |
| 57 | + margin-bottom: 30rpx; | |
| 58 | +} | |
| 59 | + | |
| 60 | +.appment, .sub_appment { | |
| 61 | + width: 270rpx; | |
| 62 | + height: 60rpx; | |
| 63 | + line-height: 55rpx; | |
| 64 | + border-radius: 40rpx; | |
| 65 | +} | |
| 66 | + | |
| 67 | +button { | |
| 68 | + height: 100%; | |
| 69 | + background-color: rgb(214, 1, 33); | |
| 70 | +} | |
| 71 | + | |
| 72 | +.appment { | |
| 73 | + background-color: rgb(238, 238, 238); | |
| 74 | +} | |
| 75 | + | |
| 76 | +.sub_appment { | |
| 77 | + background-color: rgb(214, 1, 33); | |
| 78 | + color: rgb(255, 255, 255); | |
| 79 | +} | |
| 80 | + | |
| 81 | +.head { | |
| 82 | + width: 122rpx; | |
| 83 | + margin-right: 40rpx; | |
| 84 | + height: 50rpx; | |
| 85 | + line-height: 50rpx; | |
| 86 | +} | |
| 87 | + | |
| 88 | +.textarea { | |
| 89 | + width: 420rpx; | |
| 90 | + background-color: rgb(238, 238, 238); | |
| 91 | + border-radius: 6rpx; | |
| 92 | + height: 130rpx; | |
| 93 | + padding-left: 40rpx; | |
| 94 | + padding-right: 15rpx; | |
| 95 | + padding-top: 15rpx; | |
| 96 | + padding-bottom: 15rpx; | |
| 97 | +} | |
| 98 | + | |
| 99 | +.mabot { | |
| 100 | + margin-bottom: 35rpx; | |
| 101 | +} | |
| 102 | + | |
| 103 | +.select { | |
| 104 | + width: 420rpx; | |
| 105 | + height: 55rpx; | |
| 106 | + line-height: 55rpx; | |
| 107 | + background-color: rgb(238, 238, 238); | |
| 108 | + border-radius: 6rpx; | |
| 109 | + padding-left: 40rpx; | |
| 110 | + padding-right: 15rpx; | |
| 111 | +} | |
| 112 | + | |
| 113 | +.Cosmetology { | |
| 114 | + padding-left: 40rpx; | |
| 115 | + padding-right: 15rpx; | |
| 116 | + width: 365rpx; | |
| 117 | + background-color: rgb(238, 238, 238); | |
| 118 | + height: 50rpx; | |
| 119 | + line-height: 50rpx; | |
| 120 | + border-radius: 6rpx; | |
| 121 | +} | |
| 122 | + | |
| 123 | +.beauticians { | |
| 124 | + width: 407rpx; | |
| 125 | + z-index: 3; | |
| 126 | + top: 45rpx; | |
| 127 | + left: -1rpx; | |
| 128 | + padding: 0rpx 5rpx; | |
| 129 | + border: 2rpx solid rgb(238, 238, 238); | |
| 130 | + background-color: rgb(255, 255, 255); | |
| 131 | + padding-bottom: 5rpx; | |
| 132 | + height: 279rpx; | |
| 133 | + overflow-x: scroll; | |
| 134 | + overflow-y: scroll; | |
| 135 | +} | |
| 136 | + | |
| 137 | +.beautician { | |
| 138 | + height: 70rpx; | |
| 139 | + border-bottom: 2rpx solid rgb(238, 238, 238); | |
| 140 | + padding-left: 25rpx; | |
| 141 | +} | |
| 142 | + | |
| 143 | +.beaclone { | |
| 144 | + border-bottom: 0rpx; | |
| 145 | +} | |
| 146 | + | |
| 147 | +.notes { | |
| 148 | + margin-top: 15rpx; | |
| 149 | + margin-bottom: 60rpx; | |
| 150 | + margin-right: 8rpx; | |
| 151 | +} | |
| 152 | + | |
| 153 | +.color { | |
| 154 | + color: rgb(172, 172, 172); | |
| 155 | +} | |
| 156 | + | |
| 157 | +.submitMax { | |
| 158 | + margin-top: 50rpx; | |
| 159 | + padding: 0rpx 15rpx; | |
| 160 | +} | |
| 161 | + | |
| 162 | +.Remarks { | |
| 163 | + margin-top: 15rpx; | |
| 164 | +} | |
| 165 | + | |
| 166 | +/* 蒙尘 */ | |
| 167 | + | |
| 168 | +.disgraceful { | |
| 169 | + position: fixed; | |
| 170 | + z-index: 4; | |
| 171 | + width: 100%; | |
| 172 | + height: 100%; | |
| 173 | + top: 0rpx; | |
| 174 | + left: 0rpx; | |
| 175 | + background-color: rgba(0, 0, 0, 0.4); | |
| 176 | +} | |
| 177 | + | |
| 178 | +.storeList { | |
| 179 | + z-index: 5; | |
| 180 | + left: 0rpx; | |
| 181 | + border-top-left-radius: 25rpx; | |
| 182 | + border-top-right-radius: 25rpx; | |
| 183 | + background-color: rgb(255, 255, 255); | |
| 184 | + width: 100%; | |
| 185 | + padding: 45rpx 0rpx; | |
| 186 | +} | |
| 187 | + | |
| 188 | +.storeListpadd { | |
| 189 | + padding: 0rpx 31rpx; | |
| 190 | +} | |
| 191 | + | |
| 192 | +.choice { | |
| 193 | + margin-bottom: 5rpx; | |
| 194 | +} | |
| 195 | + | |
| 196 | +.inputstore { | |
| 197 | + width: 510rpx; | |
| 198 | + height: 43rpx; | |
| 199 | + line-height: 43rpx; | |
| 200 | + border-radius: 30rpx; | |
| 201 | + border: 2rpx solid rgb(238, 238, 238); | |
| 202 | + padding-left: 30rpx; | |
| 203 | +} | |
| 204 | + | |
| 205 | +.searchbar { | |
| 206 | + height: 95rpx; | |
| 207 | + border-bottom: 2rpx solid rgb(238, 238, 238); | |
| 208 | +} | |
| 209 | + | |
| 210 | +.search { | |
| 211 | + width: 125rpx; | |
| 212 | + height: 45rpx; | |
| 213 | + line-height: 45rpx; | |
| 214 | + background-color: rgb(219, 27, 52); | |
| 215 | + border-radius: 30rpx; | |
| 216 | + color: rgb(255, 255, 255); | |
| 217 | +} | |
| 218 | + | |
| 219 | +.stores { | |
| 220 | + height: 500rpx; | |
| 221 | + overflow-y: scroll; | |
| 222 | +} | |
| 223 | + | |
| 224 | +.store { | |
| 225 | + margin: 0rpx 16rpx; | |
| 226 | + padding-right: 15rpx; | |
| 227 | + border-bottom: 2rpx solid rgb(238, 238, 238); | |
| 228 | + padding: 20rpx 0rpx; | |
| 229 | +} | |
| 230 | + | |
| 231 | +.icon { | |
| 232 | + padding: 0rpx 15rpx; | |
| 233 | +} | |
| 234 | + | |
| 235 | +.circular { | |
| 236 | + width: 37rpx; | |
| 237 | + height: 37rpx; | |
| 238 | + border-radius: 50%; | |
| 239 | + border: 2rpx solid rgb(52, 52, 52); | |
| 240 | + margin: 0rpx 15rpx; | |
| 241 | +} | |
| 242 | + | |
| 243 | +.store_name_dis { | |
| 244 | + width: 90%; | |
| 245 | +} | |
| 246 | + | |
| 247 | +.name_dis { | |
| 248 | + margin-bottom: 5rpx; | |
| 249 | +} | |
| 250 | + | |
| 251 | +.store_name { | |
| 252 | + max-width: 420rpx; | |
| 253 | +} | |
| 254 | + | |
| 255 | +.store_dis { | |
| 256 | + height: 30rpx; | |
| 257 | + line-height: 30rpx; | |
| 258 | + padding: 5rpx 15rpx; | |
| 259 | + background-color: rgb(227, 227, 227); | |
| 260 | + border-radius: 25rpx; | |
| 261 | + margin-right: 20rpx; | |
| 262 | + color: rgb(159, 159, 159); | |
| 263 | + max-width: 200rpx; | |
| 264 | +} | |
| 265 | + | |
| 266 | +.store_address { | |
| 267 | + color: rgb(159, 159, 159); | |
| 268 | +} | |
| 269 | + | |
| 270 | +.determine { | |
| 271 | + background-color: rgb(196, 24, 26); | |
| 272 | + width: 500rpx; | |
| 273 | + border-radius: 35rpx; | |
| 274 | + height: 60rpx; | |
| 275 | + color: rgb(255, 255, 255); | |
| 276 | + margin: 20rpx 0rpx; | |
| 277 | +} | |
| 278 | + | |
| 279 | +.value { | |
| 280 | + max-width: 300rpx; | |
| 281 | +} | |
| 282 | + | |
| 283 | +.notstore { | |
| 284 | + height: 80rpx; | |
| 285 | + color: rgb(159, 159, 159); | |
| 286 | +} | ... | ... |
pages/user/my_service/beauty_deta.js
0 → 100644
| 1 | +var e = getApp(), | |
| 2 | + a = e.globalData.setting, | |
| 3 | + os = a, | |
| 4 | + t = e.request, | |
| 5 | + d = e.globalData; | |
| 6 | +Page({ | |
| 7 | + | |
| 8 | + /** | |
| 9 | + * 页面的初始数据 | |
| 10 | + */ | |
| 11 | + data: { | |
| 12 | + inurl: a.url, //接口网址 | |
| 13 | + iurl: a.imghost, | |
| 14 | + url: "", //选择选择时间后返回的页面 | |
| 15 | + defimgurl: "/miniapp/images/no-head.jpg", | |
| 16 | + seekTime: "", //当前服务预约选择的时间 | |
| 17 | + time_list: [], //可预约时间 | |
| 18 | + name: "", //美容师姓名 | |
| 19 | + comment: "", //美容师评价 | |
| 20 | + aweeks: [], //七天的预约时间 | |
| 21 | + head_img: "", //美容师头像 | |
| 22 | + time: ["08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00", "21:00", "22:00"], | |
| 23 | + weeks: [], //星期几数组 | |
| 24 | + time_index: -1, //选择预约时间下标 | |
| 25 | + date_id: 0, //选择日期的id | |
| 26 | + beautician_id: "", //美容师id | |
| 27 | + itemId: "", //服务id | |
| 28 | + number: "", //预约单号 | |
| 29 | + modify: 0, //是否是修改时间 | |
| 30 | + iscos: 0, //是否是从美容师列表过来的 | |
| 31 | + hours: "", //获取当前时分秒 | |
| 32 | + projectId: "", //项目id | |
| 33 | + StaffName: "", //美容师名称 | |
| 34 | + }, | |
| 35 | + | |
| 36 | + /** | |
| 37 | + * 生命周期函数--监听页面加载 | |
| 38 | + */ | |
| 39 | + onLoad: function(options) { | |
| 40 | + var th = this; | |
| 41 | + var myDate = new Date(); | |
| 42 | + var minutes = myDate.getMinutes(); //获取当前分钟数(0-59) | |
| 43 | + var hours = myDate.getHours() + ":" + minutes; //获取当前小时数(0-23) | |
| 44 | + var beautician_id = options.BeauticianID; | |
| 45 | + th.setData({ | |
| 46 | + beautician_id: beautician_id, | |
| 47 | + itemId: options.itemId, | |
| 48 | + modify: options.modify, | |
| 49 | + hours: hours, | |
| 50 | + projectId: options.projectId, | |
| 51 | + StaffName: options.StaffName | |
| 52 | + }) | |
| 53 | + if (options.url != undefined) { | |
| 54 | + th.setData({ | |
| 55 | + url: options.url | |
| 56 | + }) | |
| 57 | + } | |
| 58 | + if (options.number != undefined) { | |
| 59 | + th.setData({ | |
| 60 | + number: options.number | |
| 61 | + }) | |
| 62 | + } | |
| 63 | + if (options.iscos != undefined) { | |
| 64 | + th.setData({ | |
| 65 | + iscos: options.iscos | |
| 66 | + }) | |
| 67 | + } | |
| 68 | + th.query_beatea(); | |
| 69 | + th.query_aweek(); | |
| 70 | + }, | |
| 71 | + /** | |
| 72 | + * 生命周期函数--监听页面显示 | |
| 73 | + */ | |
| 74 | + onShow: function() { | |
| 75 | + var th = this; | |
| 76 | + //获取当前时间 | |
| 77 | + var myDate = new Date(); | |
| 78 | + // var date = myDate.getHours(); //获取当前小时数(0-23); | |
| 79 | + let str = myDate.toTimeString(); //"10:55:24 GMT+0800 (中国标准时间)" | |
| 80 | + let date = str.substring(0, 8); // '10:55:24' | |
| 81 | + | |
| 82 | + // console.log("当前时间", date); | |
| 83 | + th.setData({ | |
| 84 | + hours: date | |
| 85 | + }); | |
| 86 | + }, | |
| 87 | + | |
| 88 | + //图片失败,默认图片 | |
| 89 | + bind_bnerr1: function(e) { | |
| 90 | + var _errImg = e.target.dataset.errorimg; | |
| 91 | + var _Img = e.target.dataset.img; | |
| 92 | + if (_Img != undefined) { | |
| 93 | + var _errObj = {}; | |
| 94 | + _errObj[_errImg] = "/miniapp/images/no-head.jpg"; | |
| 95 | + this.setData(_errObj) //注意这里的赋值方式,只是将数据列表中的此项图片路径值替换掉 ; | |
| 96 | + } | |
| 97 | + }, | |
| 98 | + //选择服务日期 | |
| 99 | + check_date: function(e) { | |
| 100 | + var th = this; | |
| 101 | + var id = e.currentTarget.dataset.dateid; | |
| 102 | + var date_id = th.data.date_id; | |
| 103 | + var seekTime = th.data.aweeks[id].time; | |
| 104 | + if (id != date_id) { | |
| 105 | + th.setData({ | |
| 106 | + date_id: id, | |
| 107 | + seekTime: seekTime | |
| 108 | + }) | |
| 109 | + th.query_date(); | |
| 110 | + } | |
| 111 | + }, | |
| 112 | + //获取美容师信息 | |
| 113 | + query_beatea: function() { | |
| 114 | + var th = this; | |
| 115 | + var url = "/api/weshop/marketing/reservation/staff/get"; //接口路径 | |
| 116 | + var beautician_id = th.data.beautician_id; | |
| 117 | + getApp().request.promiseGet(url, { | |
| 118 | + data: { | |
| 119 | + beauticianId: beautician_id, | |
| 120 | + storeId: a.stoid, | |
| 121 | + } | |
| 122 | + }).then(res => { | |
| 123 | + if (res.data.code == 0) { | |
| 124 | + var data = res.data.data; | |
| 125 | + th.setData({ | |
| 126 | + name: data.StaffName, | |
| 127 | + comment: data.Remark1, | |
| 128 | + head_img: data.PhotoUrl | |
| 129 | + }) | |
| 130 | + } else { | |
| 131 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 132 | + } | |
| 133 | + }) | |
| 134 | + }, | |
| 135 | + //返回上个页面 | |
| 136 | + navigateBack: function() { | |
| 137 | + var th = this; | |
| 138 | + var modify = th.data.modify; //是否是更改时间 | |
| 139 | + var seekTime = th.data.seekTime; //选择的日期 | |
| 140 | + var time_list = th.data.time_list; | |
| 141 | + var time_index = th.data.time_index; | |
| 142 | + if (time_index == -1) { | |
| 143 | + getApp().my_warnning("请选择预约时间", 0, th); | |
| 144 | + return false; | |
| 145 | + } | |
| 146 | + var date_id = th.data.date_id; | |
| 147 | + var date = th.data.aweeks[date_id].time; | |
| 148 | + var time = date + " " + time_list[time_index] + ":00"; | |
| 149 | + if (modify == 1) { | |
| 150 | + var json = { | |
| 151 | + "arrangeTime": time, | |
| 152 | + "number": th.data.number, | |
| 153 | + "remark": "更改时间", | |
| 154 | + "states": 0, | |
| 155 | + "storeId": a.stoid | |
| 156 | + }; | |
| 157 | + var data = JSON.stringify(json); | |
| 158 | + var url = th.data.inurl + "/api/weshop/marketing/reservation/reservation/update"; //预约接口地址 | |
| 159 | + wx.request({ | |
| 160 | + url: url, | |
| 161 | + data: data, | |
| 162 | + method: 'put', | |
| 163 | + header: { | |
| 164 | + 'content-type': 'application/json' | |
| 165 | + }, // 设置请求的 header | |
| 166 | + success: function(res) { | |
| 167 | + if (res.data.code == 0) { | |
| 168 | + getApp().my_warnning(res.data.data, 1, th); | |
| 169 | + setTimeout(function() { | |
| 170 | + wx.navigateBack({ | |
| 171 | + //返回 | |
| 172 | + delta: 1 | |
| 173 | + }) | |
| 174 | + }, 1000); | |
| 175 | + } else { | |
| 176 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 177 | + } | |
| 178 | + } | |
| 179 | + }) | |
| 180 | + } else { | |
| 181 | + var pages = getCurrentPages(); //当前页面 | |
| 182 | + var iscos = th.data.iscos; | |
| 183 | + var delta = 1; | |
| 184 | + if (Number(iscos) == 1) { | |
| 185 | + delta = delta + Number(iscos); //返回哪个页面 | |
| 186 | + var prevPage = pages[pages.length - 2 - Number(iscos)]; //上一页面 | |
| 187 | + prevPage.setData({ | |
| 188 | + //直接给上一个页面赋值 | |
| 189 | + time: time, | |
| 190 | + beautician_name: th.data.StaffName, | |
| 191 | + beauticianID: th.data.beautician_id | |
| 192 | + }); | |
| 193 | + wx.navigateBack({ | |
| 194 | + //返回 | |
| 195 | + delta: 2 | |
| 196 | + }) | |
| 197 | + } else { | |
| 198 | + var prevPage = pages[pages.length - 2]; //上一页面 | |
| 199 | + prevPage.setData({ | |
| 200 | + //直接给上一个页面赋值 | |
| 201 | + time: time | |
| 202 | + }); | |
| 203 | + wx.navigateBack({ | |
| 204 | + //返回 | |
| 205 | + delta: 1 | |
| 206 | + }) | |
| 207 | + } | |
| 208 | + } | |
| 209 | + }, | |
| 210 | + //选择时间 | |
| 211 | + Selection_time: function(e) { | |
| 212 | + var th = this; | |
| 213 | + var index = e.currentTarget.dataset.index; | |
| 214 | + var time_index = th.data.time_index; | |
| 215 | + if (index == time_index) { | |
| 216 | + return false; | |
| 217 | + } else { | |
| 218 | + th.setData({ | |
| 219 | + time_index: index | |
| 220 | + }) | |
| 221 | + } | |
| 222 | + }, | |
| 223 | + //查询七天预约时间 | |
| 224 | + query_aweek: function() { | |
| 225 | + var th = this; | |
| 226 | + var beautician_id = th.data.beautician_id; //美容师id | |
| 227 | + var itemId = th.data.itemId; //服务id | |
| 228 | + var projectId = th.data.projectId; //项目id | |
| 229 | + var url = "/api/weshop/marketing/reservation/staff/seven/time/list"; //接口地址 | |
| 230 | + getApp().request.promiseGet(url, { | |
| 231 | + data: { | |
| 232 | + projectId: projectId, | |
| 233 | + beauticianId: beautician_id, | |
| 234 | + serviceId: itemId, | |
| 235 | + storeId: a.stoid, | |
| 236 | + } | |
| 237 | + }).then(res => { | |
| 238 | + if (res.data.code == 0) { | |
| 239 | + var data = res.data.data; | |
| 240 | + var arr = []; | |
| 241 | + for (var i in data) { | |
| 242 | + var em = { | |
| 243 | + "time": i, | |
| 244 | + "val": data[i] | |
| 245 | + }; | |
| 246 | + arr.push(em); | |
| 247 | + } | |
| 248 | + arr.sort(th.sort_arr); | |
| 249 | + var weeks = ["今天", "明天", "后天"]; | |
| 250 | + var week = ""; | |
| 251 | + for (var i = 3; i < arr.length; i++) { | |
| 252 | + var date = new Date(arr[i].time); | |
| 253 | + if (date.getDay() == 0) week = "周日" | |
| 254 | + if (date.getDay() == 1) week = "周一" | |
| 255 | + if (date.getDay() == 2) week = "周二" | |
| 256 | + if (date.getDay() == 3) week = "周三" | |
| 257 | + if (date.getDay() == 4) week = "周四" | |
| 258 | + if (date.getDay() == 5) week = "周五" | |
| 259 | + if (date.getDay() == 6) week = "周六" | |
| 260 | + weeks[i] = week; | |
| 261 | + } | |
| 262 | + th.setData({ | |
| 263 | + aweeks: arr, | |
| 264 | + weeks: weeks | |
| 265 | + }) | |
| 266 | + th.query_date(); | |
| 267 | + | |
| 268 | + } else { | |
| 269 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 270 | + } | |
| 271 | + }) | |
| 272 | + | |
| 273 | + }, | |
| 274 | + | |
| 275 | + query_date: function() { | |
| 276 | + var th = this; | |
| 277 | + var projectId = th.data.projectId; | |
| 278 | + var date_id = th.data.date_id; //日期下标 | |
| 279 | + var SeekTime = th.data.aweeks[date_id].time; | |
| 280 | + var val = th.data.aweeks[date_id].val; | |
| 281 | + | |
| 282 | + var url = "/api/weshop/marketing/reservation/staff/time/list"; | |
| 283 | + getApp().request.promiseGet(url, { | |
| 284 | + data: { | |
| 285 | + projectId: projectId, | |
| 286 | + beauticianId: th.data.beautician_id, | |
| 287 | + serviceId: th.data.itemId, | |
| 288 | + seekTime: SeekTime, | |
| 289 | + storeId: a.stoid, | |
| 290 | + } | |
| 291 | + }).then(res => { | |
| 292 | + if (res.data.code == 0) { | |
| 293 | + var hours = th.data.hours; | |
| 294 | + var time_list = res.data.data; | |
| 295 | + var time = th.data.time; | |
| 296 | + var date_id = th | |
| 297 | + var new_time = []; | |
| 298 | + var date = th.data.hours.substring(0,2); | |
| 299 | + | |
| 300 | + //不等于空就是有可以预约的时间 | |
| 301 | + if (time_list != null) { | |
| 302 | + if (res.data.data[0].GroupHour != undefined) { | |
| 303 | + if (res.data.data[0].GroupHour.length > 11) { | |
| 304 | + getApp().my_warnning(res.data.data[0].GroupHour, 0, th); | |
| 305 | + } | |
| 306 | + } | |
| 307 | + //循环固定和可预约的时间 | |
| 308 | + for (var i = 0; i < time.length; i++) { | |
| 309 | + for (var ii = 0; ii < time_list.length; ii++) { | |
| 310 | + //判断固定的时间和可以预约的时间 | |
| 311 | + if (time[i] == time_list[ii].GroupHour.substring(0, 5)) { | |
| 312 | + var date_id = th.data.date_id; | |
| 313 | + if (date > time_list[ii].GroupHour.substring(0, 2) && date_id == 0) { | |
| 314 | + new_time[i] = ""; | |
| 315 | + break; | |
| 316 | + } else { | |
| 317 | + new_time[i] = time_list[ii].GroupHour.substring(0, 5); | |
| 318 | + break; | |
| 319 | + } | |
| 320 | + | |
| 321 | + | |
| 322 | + } else { | |
| 323 | + new_time[i] = ""; | |
| 324 | + } | |
| 325 | + } | |
| 326 | + } | |
| 327 | + }else{ | |
| 328 | + for(var i = 0 ;i<time.length;i++){ | |
| 329 | + new_time[i]=""; | |
| 330 | + } | |
| 331 | + } | |
| 332 | + th.setData({ | |
| 333 | + time_list: new_time, | |
| 334 | + }) | |
| 335 | + } else { | |
| 336 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 337 | + } | |
| 338 | + }) | |
| 339 | + | |
| 340 | + }, | |
| 341 | + //更改预约时间 | |
| 342 | + change_time: function() { | |
| 343 | + var th = this; | |
| 344 | + var seekTime = th.data.seekTime; //选择的日期 | |
| 345 | + var time_list = th.data.time_list; | |
| 346 | + var time_index = th.data.time_index; | |
| 347 | + var time = time_list[time_index]; | |
| 348 | + var number = th.data.number; //预约单号 | |
| 349 | + var json = { | |
| 350 | + "arrangeTime": seekTime + " " + time, | |
| 351 | + "number": number, | |
| 352 | + "remark": "更改预约时间", | |
| 353 | + "states": 0, | |
| 354 | + "storeId": a.stoid | |
| 355 | + }; | |
| 356 | + var data = JSON.stringify(json); | |
| 357 | + var url = th.data.inurl + "/api/weshop/marketing/reservation/reservation/update"; //预约接口地址 | |
| 358 | + wx.request({ | |
| 359 | + url: url, | |
| 360 | + data: data, | |
| 361 | + method: 'put', | |
| 362 | + header: { | |
| 363 | + 'content-type': 'application/json' | |
| 364 | + }, // 设置请求的 header | |
| 365 | + success: function(res) { | |
| 366 | + if (res.data.code == 0) { | |
| 367 | + getApp().my_warnning("更改成功", 0, th); | |
| 368 | + } else { | |
| 369 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 370 | + } | |
| 371 | + } | |
| 372 | + }) | |
| 373 | + }, | |
| 374 | + //预览头像 | |
| 375 | + previewImage: function(e) { | |
| 376 | + var th = this; | |
| 377 | + var current = e.currentTarget.dataset.src; | |
| 378 | + wx.previewImage({ | |
| 379 | + current: current, // 当前显示图片的http链接 | |
| 380 | + urls: [th.data.head_img] // 需要预览的图片http链接列表 | |
| 381 | + }) | |
| 382 | + }, | |
| 383 | + | |
| 384 | + sort_arr: function(a, b) { | |
| 385 | + a = a['time']; | |
| 386 | + b = b['time']; | |
| 387 | + if (a < b) { | |
| 388 | + return -1; | |
| 389 | + } | |
| 390 | + if (a > b) { | |
| 391 | + return 1; | |
| 392 | + } | |
| 393 | + return 0; | |
| 394 | + } | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | +}) | |
| 0 | 399 | \ No newline at end of file | ... | ... |
pages/user/my_service/beauty_deta.json
0 → 100644
pages/user/my_service/beauty_deta.wxml
0 → 100644
| 1 | +<view class="container"> | |
| 2 | + <view class="backcolor"></view> | |
| 3 | + | |
| 4 | + <view class="comments"> | |
| 5 | + <!-- 个人信息 --> | |
| 6 | + <view class="Personal"> | |
| 7 | + | |
| 8 | + <view class="name fs36 ellipsis-1">{{name}}</view> | |
| 9 | + | |
| 10 | + <view class="ellipsis-4" style="width:100%"> | |
| 11 | + <view style="overflow:hidden;"> | |
| 12 | + <image class="head" src="{{head_img==''?iurl+defimgurl:head_img}}" data-errorimg="{{head_img}}" binderror="bind_bnerr1" data-img="{{head_img}}" data-src="{{head_img}}"></image> | |
| 13 | + <view class="introduce fs26"> | |
| 14 | + <block wx:if="{{comment!=''}}"> | |
| 15 | + {{comment}} | |
| 16 | + </block> | |
| 17 | + <block wx:else> | |
| 18 | + 暂无介绍 | |
| 19 | + </block> | |
| 20 | + </view> | |
| 21 | + <view style="clear:both"></view> | |
| 22 | + </view> | |
| 23 | + </view> | |
| 24 | + | |
| 25 | + </view> | |
| 26 | + | |
| 27 | + <view> | |
| 28 | + <view class="fs36" style="margin-bottom:35rpx;">服务预约</view> | |
| 29 | + <scroll-view class="scroll-h fs26 " scroll-x> | |
| 30 | + <view class="rel" wx:for="{{aweeks}}" style="display: inline-block;"> | |
| 31 | + <block wx:if="{{aweeks[index].val!=''}}"> | |
| 32 | + <view class="scroll-item-h bd {{index==date_id?'chbd':''}}" bindtap="check_date" data-dateid="{{index}}"> | |
| 33 | + <view>{{weeks[index]}}</view> | |
| 34 | + <view>{{item.time}}</view> | |
| 35 | + </view> | |
| 36 | + </block> | |
| 37 | + <block wx:else> | |
| 38 | + <view class="scroll-item-h bd {{index==date_id?'chbd':''}}" bindtap="check_date" data-dateid="{{index}}"> | |
| 39 | + <view>{{weeks[index]}}(约满)</view> | |
| 40 | + <view>{{item.time}}</view> | |
| 41 | + </view> | |
| 42 | + </block> | |
| 43 | + </view> | |
| 44 | + | |
| 45 | + </scroll-view> | |
| 46 | + | |
| 47 | + <!-- 选择时间 --> | |
| 48 | + <view class="Times"> | |
| 49 | + | |
| 50 | + <view class="flex-center" wx:for="{{time}}" style="display:inline-block;" wx:for-index="key" wx:for-item="it"> | |
| 51 | + <block wx:if="{{it==time_list[key]}}"> | |
| 52 | + <view class="Time flex-center {{time_index==key?'chTime':''}}" bindtap="Selection_time" data-index="{{key}}"> | |
| 53 | + <view> | |
| 54 | + <view class="fs26">{{it}}</view> | |
| 55 | + </view> | |
| 56 | + </view> | |
| 57 | + </block> | |
| 58 | + <block wx:else> | |
| 59 | + <view class="Time flex-center nochTime"> | |
| 60 | + <view> | |
| 61 | + <view class="fs26">{{it}}</view> | |
| 62 | + </view> | |
| 63 | + </view> | |
| 64 | + </block> | |
| 65 | + </view> | |
| 66 | + <view class="choice flex-center fs32" bindtap="navigateBack"> | |
| 67 | + <view>确定选择</view> | |
| 68 | + </view> | |
| 69 | + | |
| 70 | + </view> | |
| 71 | + | |
| 72 | + </view> | |
| 73 | + | |
| 74 | + </view> | |
| 75 | + | |
| 76 | +</view> | |
| 77 | +<warn id="warn"></warn> | |
| 0 | 78 | \ No newline at end of file | ... | ... |
pages/user/my_service/beauty_deta.wxss
0 → 100644
| 1 | +.container { | |
| 2 | + border-top: 7rpx solid rgb(245, 245, 245); | |
| 3 | +} | |
| 4 | + | |
| 5 | +.backcolor { | |
| 6 | + position: absolute; | |
| 7 | + top: 0rpx; | |
| 8 | + left: 0rpx; | |
| 9 | + z-index: 0; | |
| 10 | + width: 100%; | |
| 11 | + height: 270rpx; | |
| 12 | + background-color: rgb(214, 1, 33); | |
| 13 | + | |
| 14 | +} | |
| 15 | + | |
| 16 | +.comments { | |
| 17 | + position: absolute; | |
| 18 | + top: 45rpx; | |
| 19 | + left: 0rpx; | |
| 20 | + z-index: 1; | |
| 21 | + padding: 0rpx 23rpx; | |
| 22 | +} | |
| 23 | + | |
| 24 | +.name { | |
| 25 | + font-weight: bold; | |
| 26 | + float: left; | |
| 27 | + width: 250rpx; | |
| 28 | +} | |
| 29 | + | |
| 30 | +.head { | |
| 31 | + width: 130rpx; | |
| 32 | + height: 130rpx; | |
| 33 | + border-radius: 50%; | |
| 34 | + float: right; | |
| 35 | + margin: 0rpx 15rpx; | |
| 36 | + /* border: 2rpx solid red; */ | |
| 37 | +} | |
| 38 | + | |
| 39 | +.introduce { | |
| 40 | + margin-top: 90rpx; | |
| 41 | + text-indent: 2em; | |
| 42 | + color: rgb(102, 102, 102); | |
| 43 | +} | |
| 44 | + | |
| 45 | +.Personal { | |
| 46 | + width: 640rpx; | |
| 47 | + height: 300rpx; | |
| 48 | + background-color: rgb(255, 255, 255); | |
| 49 | + border-radius: 5rpx; | |
| 50 | + box-shadow: 0rpx 2rpx 2rpx 2rpx rgb(250, 228, 230); | |
| 51 | + margin-bottom: 65rpx; | |
| 52 | + padding-top: 40rpx; | |
| 53 | + padding-left: 35rpx; | |
| 54 | + padding-right: 35rpx; | |
| 55 | +} | |
| 56 | + | |
| 57 | +.choice { | |
| 58 | + height: 70rpx; | |
| 59 | + background-color: rgb(214, 1, 33); | |
| 60 | + color: rgb(255, 255, 255); | |
| 61 | + margin-top: 30rpx; | |
| 62 | +} | |
| 63 | + | |
| 64 | +.scroll-h { | |
| 65 | + white-space: nowrap; | |
| 66 | + width: 704rpx; | |
| 67 | + overflow: visible; | |
| 68 | + height: 125rpx; | |
| 69 | + color: transparent; | |
| 70 | +} | |
| 71 | + | |
| 72 | +.scroll-item-h { | |
| 73 | + display: inline-block; | |
| 74 | + width: 172rpx; | |
| 75 | + text-align: center; | |
| 76 | + overflow: visible; | |
| 77 | + height: 70rpx; | |
| 78 | + padding: 15rpx 0rpx; | |
| 79 | +} | |
| 80 | +::-webkit-scrollbar{ | |
| 81 | + width: 0; | |
| 82 | + height: 0; | |
| 83 | + color: transparent; | |
| 84 | +} | |
| 85 | +.box { | |
| 86 | + width: 0px; | |
| 87 | + height: 0px; | |
| 88 | + margin-left: 15rpx; | |
| 89 | + border-top: 21rpx solid transparent; | |
| 90 | + border-right: 21rpx solid transparent; | |
| 91 | + border-left: 21rpx solid transparent; | |
| 92 | + display: inline-block; | |
| 93 | + transform: rotate(180deg); | |
| 94 | + border-bottom: 21rpx solid rgb(214, 1, 33); | |
| 95 | +} | |
| 96 | + | |
| 97 | +.bd { | |
| 98 | + /* border: 2rpx solid rgb(238, 238, 238); */ | |
| 99 | + background-color: rgb(255, 255, 255); | |
| 100 | + color: rgb(20, 20, 20); | |
| 101 | +} | |
| 102 | + | |
| 103 | +.chbd { | |
| 104 | + border: 2rpx solid rgb(214, 1, 33); | |
| 105 | + background-color: rgb(214, 1, 33); | |
| 106 | + color: rgb(255, 255, 255); | |
| 107 | +} | |
| 108 | + | |
| 109 | +.Times { | |
| 110 | + background-color: rgb(238, 243, 247); | |
| 111 | + margin-bottom: 30rpx; | |
| 112 | + padding:34rpx 27rpx; | |
| 113 | +} | |
| 114 | + | |
| 115 | +.Time { | |
| 116 | + border: 2rpx solid rgb(238, 238, 238); | |
| 117 | + width: 160rpx; | |
| 118 | + height: 70rpx; | |
| 119 | + background-color: rgb(255, 255, 255); | |
| 120 | + text-align: center; | |
| 121 | + padding-top: 15rpx; | |
| 122 | + padding-bottom: 15rpx; | |
| 123 | +} | |
| 124 | +.chTime{ | |
| 125 | + border-color: rgb(214, 1, 33); | |
| 126 | +} | |
| 127 | +.nochTime{ | |
| 128 | + color: rgb(174,177,177); | |
| 129 | + background-color: rgb(250,250,250); | |
| 130 | +} | |
| 131 | +.abs { | |
| 132 | + left: 55rpx; | |
| 133 | + bottom: -39rpx; | |
| 134 | +} | ... | ... |
pages/user/my_service/cosmetology_list.js
0 → 100644
| 1 | +var e = getApp(), | |
| 2 | + a = e.globalData.setting, | |
| 3 | + os = a, | |
| 4 | + t = e.request, | |
| 5 | + d = e.globalData; | |
| 6 | +Page({ | |
| 7 | + | |
| 8 | + /** | |
| 9 | + * 页面的初始数据 | |
| 10 | + */ | |
| 11 | + data: { | |
| 12 | + defimgurl: "/miniapp/images/no-head.jpg", | |
| 13 | + iurl: a.imghost, | |
| 14 | + cosmetology_list: [], //美容师列表 | |
| 15 | + is_cosmetology_read: 0, //是否有读过美容师接口,该属性用在没有美容师列表的排版 | |
| 16 | + curpage: 1, //当前分页数 | |
| 17 | + pageSize: 10, //页大小 | |
| 18 | + total: 0, //总数量 | |
| 19 | + ismore: 0, //是否加载完毕 | |
| 20 | + itemId: 0, //服务id, | |
| 21 | + storageId: 0, //线下门店id | |
| 22 | + projectId:"",//项目id | |
| 23 | + }, | |
| 24 | + onReachBottom: function() { | |
| 25 | + var th = this; | |
| 26 | + if (this.data.total <= th.data.pageSize) return; | |
| 27 | + if (this.data.ismore) return; | |
| 28 | + wx.showLoading({ | |
| 29 | + title: '加载中...', | |
| 30 | + }) | |
| 31 | + th.query_cology(); | |
| 32 | + }, | |
| 33 | + query_cology: function() { | |
| 34 | + var th = this; | |
| 35 | + var url = "/api/weshop/marketing/reservation/staff/page"; | |
| 36 | + var itemId = th.data.itemId; //服务id | |
| 37 | + var storageId = th.data.storageId; | |
| 38 | + getApp().request.promiseGet(url, { | |
| 39 | + data: { | |
| 40 | + storeId: a.stoid, | |
| 41 | + userId: d.user_id, | |
| 42 | + serviceId: itemId, | |
| 43 | + storageId: storageId, | |
| 44 | + page: th.data.curpage, | |
| 45 | + pageSize: th.data.pageSize | |
| 46 | + } | |
| 47 | + }).then(res => { | |
| 48 | + wx.hideLoading(); | |
| 49 | + if (res.data.code == 0) { | |
| 50 | + th.data.curpage++; | |
| 51 | + var arr1 = th.data.cosmetology_list; | |
| 52 | + var arr2 = res.data.data.pageData; | |
| 53 | + var arr3 = [...arr1, ...arr2]; | |
| 54 | + var ismore = 0; | |
| 55 | + if (arr3.length == res.data.data.total) ismore = 1 | |
| 56 | + th.setData({ | |
| 57 | + cosmetology_list: arr3, | |
| 58 | + total: res.data.data.total, | |
| 59 | + ismore: ismore, | |
| 60 | + is_service_read: 1, | |
| 61 | + is_cosmetology_read:1 | |
| 62 | + }), wx.stopPullDownRefresh(); //停止下拉刷新 | |
| 63 | + } else { | |
| 64 | + th.setData({ | |
| 65 | + is_cosmetology_read:1 | |
| 66 | + }) | |
| 67 | + } | |
| 68 | + }) | |
| 69 | + }, | |
| 70 | + //图片失败,默认图片 | |
| 71 | + bind_bnerr1: function(e) { | |
| 72 | + var _errImg = e.target.dataset.errorimg; | |
| 73 | + var _Img = e.target.dataset.img; | |
| 74 | + if (_Img != undefined) { | |
| 75 | + var _errObj = {}; | |
| 76 | + _errObj[_errImg] = "/miniapp/images/no-head.jpg"; | |
| 77 | + this.setData(_errObj) //注意这里的赋值方式,只是将数据列表中的此项图片路径值替换掉 ; | |
| 78 | + } | |
| 79 | + }, | |
| 80 | + /** | |
| 81 | + * 生命周期函数--监听页面加载 | |
| 82 | + */ | |
| 83 | + onLoad: function(options) { | |
| 84 | + var th = this; | |
| 85 | + th.setData({ | |
| 86 | + projectId: options.projectId, | |
| 87 | + itemId: options.itemId, | |
| 88 | + storageId: options.storageId | |
| 89 | + }) | |
| 90 | + }, | |
| 91 | + | |
| 92 | + /** | |
| 93 | + * 生命周期函数--监听页面显示 | |
| 94 | + */ | |
| 95 | + onShow: function() { | |
| 96 | + var th = this; | |
| 97 | + th.query_cology(); | |
| 98 | + }, | |
| 99 | + | |
| 100 | +}) | |
| 0 | 101 | \ No newline at end of file | ... | ... |
pages/user/my_service/cosmetology_list.json
0 → 100644
pages/user/my_service/cosmetology_list.wxml
0 → 100644
| 1 | +<view class="container"> | |
| 2 | + <image class="appointment" src="{{iurl}}/miniapp/images/yyservice/Cosm_appo.png"></image> | |
| 3 | + | |
| 4 | + <!-- 总预约 --> | |
| 5 | + <view wx:if="{{true}}"> | |
| 6 | + <!-- 当个预约 --> | |
| 7 | + <view class="single" wx:for="{{cosmetology_list}}"> | |
| 8 | + <!-- 个人属性 --> | |
| 9 | + <view class="flex-vertical-between"> | |
| 10 | + <view class="flex-vertical"> | |
| 11 | + <image class="portrait" src="{{item.PhotoUrl==''?iurl+defimgurl:item.PhotoUrl}}" lazy-load="true" data-errorimg="cosmetology_list[{{index}}].PhotoUrl" binderror="bind_bnerr1" data-img="{{item.PhotoUrl}}"></image> | |
| 12 | + <view> | |
| 13 | + <!-- 用户名 --> | |
| 14 | + <view class="UserName ellipsis-1 fs32">{{item.StaffName}}</view> | |
| 15 | + <!-- 评价星数 --> | |
| 16 | + <view class="flex" style="margin-top:10rpx;"> | |
| 17 | + <image class="Stars" src="{{iurl}}{{key<item.Star || item.Star==''?'/miniapp/images/StarsredCk.png':'/miniapp/images/StarswhiteUnCk.png'}}" wx:for="{{item.Star==''?5:it.Star}}" wx:for-index="key" wx:for-item="it"></image> | |
| 18 | + <!-- images/StarswhiteUnCk.png//白色星星地址 --> | |
| 19 | + </view> | |
| 20 | + <!-- 个人标签 --> | |
| 21 | + <view class="Label fs22 flex" wx:if="{{item.EvaluationLabel!=''?true:false}} " wx:for="{{item.EvaluationLabel.split('|')}}"> | |
| 22 | + <view wx:if="{{index==0}}" class="flex-center Labelitem itone"> | |
| 23 | + <view>{{item}}</view> | |
| 24 | + </view> | |
| 25 | + <view wx:if="{{index==1}}" class="flex-center Labelitem itwo"> | |
| 26 | + <view>{{item}}</view> | |
| 27 | + </view> | |
| 28 | + <view wx:if="{{index==2}}" class="flex-center Labelitem ith"> | |
| 29 | + <view>{{item}}</view> | |
| 30 | + </view> | |
| 31 | + | |
| 32 | + </view> | |
| 33 | + </view> | |
| 34 | + </view> | |
| 35 | + | |
| 36 | + <!-- 预约状态 --> | |
| 37 | + <navigator class="flex-center gofu go" url="/pages/user/my_service/beauty_deta?BeauticianID={{item.Id}}&itemId={{itemId}}&iscos=1&modify=0&projectId={{projectId}}&StaffName={{item.StaffName}}"> | |
| 38 | + <view class="fs24">预约</view> | |
| 39 | + </navigator> | |
| 40 | + </view> | |
| 41 | + <view class="fs26 information"> | |
| 42 | + <block wx:if="{{item.Remark1!=''}}"> | |
| 43 | + <view class="ellipsis-3">{{item.Remark1}} | |
| 44 | + </view> | |
| 45 | + </block> | |
| 46 | + <block wx:else> | |
| 47 | + <view>暂无介绍</view> | |
| 48 | + </block> | |
| 49 | + </view> | |
| 50 | + </view> | |
| 51 | + <!-- 没有数据 --> | |
| 52 | + <!-- 加载完毕并且数据大于=页大小 --> | |
| 53 | + <view class="After_all flex-center" wx:if="{{ismore && service_List.length>=4}}"> | |
| 54 | + <view class="Line"></view> | |
| 55 | + <view class="end fs26 xc-black">到底了</view> | |
| 56 | + <view class="Line"></view> | |
| 57 | + </view> | |
| 58 | + </view> | |
| 59 | +</view> | |
| 60 | +<!-- 无美容师 --> | |
| 61 | +<view class="empty_order" wx:if="{{cosmetology_list.length<1 && is_cosmetology_read}}"> | |
| 62 | + <view class="flex-level"> | |
| 63 | + <image src="{{iurl}}miniapp/images/yyservice/no_beauty.png"></image> | |
| 64 | + </view> | |
| 65 | + <view class="flex-level fs30 xc-ash">暂无美容师</view> | |
| 66 | + <view class="flex-level"> | |
| 67 | + <navigator url="/pages/user/my_service/i_service" bindtap="goto"> | |
| 68 | + <view class="flex-center fs28 white">其他项目</view> | |
| 69 | + </navigator> | |
| 70 | + </view> | |
| 71 | +</view> | |
| 72 | +<warn id="warn"></warn> | |
| 0 | 73 | \ No newline at end of file | ... | ... |
pages/user/my_service/cosmetology_list.wxss
0 → 100644
| 1 | +page{ | |
| 2 | + height: 100%; | |
| 3 | +} | |
| 4 | +.container{ | |
| 5 | + background-color: rgb(255,255,255); | |
| 6 | +} | |
| 7 | +.appointment { | |
| 8 | + width: 100%; | |
| 9 | + height: 305rpx; | |
| 10 | +} | |
| 11 | + | |
| 12 | +.single { | |
| 13 | + margin-left: 10rpx; | |
| 14 | + border-bottom: 1rpx solid rgb(229, 229, 229); | |
| 15 | + padding-bottom: 30rpx; | |
| 16 | + padding-left: 20rpx; | |
| 17 | + padding-right: 35rpx; | |
| 18 | + padding-top: 30rpx; | |
| 19 | +} | |
| 20 | + | |
| 21 | +.portrait { | |
| 22 | + width: 140rpx; | |
| 23 | + height: 140rpx; | |
| 24 | + border-radius: 50%; | |
| 25 | + margin-right: 30rpx; | |
| 26 | +} | |
| 27 | +.UserName{ | |
| 28 | + max-width: 250rpx; | |
| 29 | +} | |
| 30 | +.Stars { | |
| 31 | + width: 25rpx; | |
| 32 | + height: 25rpx; | |
| 33 | + margin-right: 7rpx; | |
| 34 | +} | |
| 35 | + | |
| 36 | +.Label { | |
| 37 | + margin-top: 25rpx; | |
| 38 | +} | |
| 39 | + | |
| 40 | +.Labelitem { | |
| 41 | + width: 100rpx; | |
| 42 | + height: 30rpx; | |
| 43 | + border-radius: 20rpx; | |
| 44 | + line-height: 30rpx; | |
| 45 | + margin-right: 14rpx; | |
| 46 | +} | |
| 47 | + | |
| 48 | +.itone { | |
| 49 | + border: 2rpx solid rgb(22, 232, 131); | |
| 50 | + color: rgb(22, 232, 131); | |
| 51 | +} | |
| 52 | + | |
| 53 | +.itwo { | |
| 54 | + border: 2rpx solid rgb(92, 135, 248); | |
| 55 | + color: rgb(92, 135, 248); | |
| 56 | +} | |
| 57 | + | |
| 58 | +.ith { | |
| 59 | + border: 2rpx solid rgb(244, 143, 55); | |
| 60 | + color: rgb(244, 143, 55); | |
| 61 | +} | |
| 62 | + | |
| 63 | +.gofu { | |
| 64 | + width: 120rpx; | |
| 65 | + padding: 5rpx 0rpx; | |
| 66 | + border-radius: 25rpx; | |
| 67 | +} | |
| 68 | + | |
| 69 | +.go { | |
| 70 | + border: 1rpx solid rgb(196, 26, 46); | |
| 71 | + color: rgb(196, 26, 46); | |
| 72 | + background-color: rgb(255,255,255); | |
| 73 | +} | |
| 74 | + | |
| 75 | +.gofull { | |
| 76 | + border: 1rpx solid rgb(185, 185, 185); | |
| 77 | + color: rgb(185, 185, 185); | |
| 78 | + background-color: rgb(255,255,255); | |
| 79 | +} | |
| 80 | + | |
| 81 | +.information { | |
| 82 | + margin-top: 25rpx; | |
| 83 | + text-indent: 2em; | |
| 84 | + color: rgb(103, 103, 103); | |
| 85 | +} | |
| 86 | +/* 无订单 */ | |
| 87 | +.empty_order image { | |
| 88 | + width: 330rpx; | |
| 89 | + height: 280rpx; | |
| 90 | + margin-top: 120rpx; | |
| 91 | +} | |
| 92 | + | |
| 93 | +.empty_order .xc-ash { | |
| 94 | + margin-top: 10rpx; | |
| 95 | + font-weight: 600px; | |
| 96 | +} | |
| 97 | + | |
| 98 | +.empty_order navigator { | |
| 99 | + margin-top: 60rpx; | |
| 100 | + border-radius: 40rpx; | |
| 101 | +} | |
| 102 | + | |
| 103 | +.empty_order navigator view { | |
| 104 | + width: 247rpx; | |
| 105 | + height: 56rpx; | |
| 106 | + background-color: rgb(255, 72, 72); | |
| 107 | + border-radius: 40rpx; | |
| 108 | +} | |
| 109 | +.After_all { | |
| 110 | + height: 80rpx; | |
| 111 | +} | |
| 112 | + | |
| 113 | +.After_all .Line { | |
| 114 | + border-top: 3rpx solid rgb(0, 0, 0); | |
| 115 | + width: 130rpx; | |
| 116 | +} | |
| 117 | + | |
| 118 | +.After_all .end { | |
| 119 | + margin: 0rpx 15rpx; | |
| 120 | +} | ... | ... |
pages/user/my_service/hist_service.js
0 → 100644
| 1 | +var e = getApp(), | |
| 2 | + a = e.globalData.setting, | |
| 3 | + os = a, | |
| 4 | + t = e.request, | |
| 5 | + d = e.globalData; | |
| 6 | +Page({ | |
| 7 | + | |
| 8 | + /** | |
| 9 | + * 页面的初始数据 | |
| 10 | + */ | |
| 11 | + data: { | |
| 12 | + iurl: a.imghost, | |
| 13 | + isPickerShow: false, | |
| 14 | + isPickerRender: false, | |
| 15 | + startTime: "", | |
| 16 | + endTime: "", | |
| 17 | + pickerConfig: { | |
| 18 | + endDate: true, | |
| 19 | + column: "", | |
| 20 | + dateLimit: true, | |
| 21 | + initStartTime: "2019-01-01 12:32:44", | |
| 22 | + initEndTime: "2019-12-01 12:32:44", | |
| 23 | + limitStartTime: "1917-05-06 12:32:44", | |
| 24 | + limitEndTime: "2055-05-06 12:32:44" | |
| 25 | + }, | |
| 26 | + hist_List: [], //服务项目列表 | |
| 27 | + is_service_read: 0, | |
| 28 | + curpage: 1, //当前分页数 | |
| 29 | + pageSize: 15, //页大小 | |
| 30 | + total: 0, | |
| 31 | + ismore: 0, //是否加载完毕 | |
| 32 | + is_screen: 0, //是否通过筛选来选择历史服务 | |
| 33 | + is_reset: 0, //是否重复点击 | |
| 34 | + is_nav: 1, //是否显示导航栏 | |
| 35 | + }, | |
| 36 | + pickerShow: function() { | |
| 37 | + this.setData({ | |
| 38 | + isPickerShow: true, | |
| 39 | + isPickerRender: true, | |
| 40 | + chartHide: true | |
| 41 | + }); | |
| 42 | + }, | |
| 43 | + pickerHide: function() { | |
| 44 | + var th = this; | |
| 45 | + th.setData({ | |
| 46 | + isPickerShow: false, | |
| 47 | + chartHide: false | |
| 48 | + }); | |
| 49 | + }, | |
| 50 | + //--选择时间-- | |
| 51 | + setPickerTime: function(val) { | |
| 52 | + let data = val.detail, | |
| 53 | + gl_data = getApp().globalData, | |
| 54 | + th = this; | |
| 55 | + th.setData({ | |
| 56 | + startTime: data.startTime, | |
| 57 | + endTime: data.endTime, | |
| 58 | + val: 0, | |
| 59 | + distance: 0, | |
| 60 | + hist_List: [], | |
| 61 | + curpage: 1, | |
| 62 | + is_screen: 1, | |
| 63 | + is_nav: 1 | |
| 64 | + }); | |
| 65 | + th.query_hist(); | |
| 66 | + }, | |
| 67 | + /** | |
| 68 | + * 生命周期函数--监听页面加载 | |
| 69 | + */ | |
| 70 | + onLoad: function(options) { | |
| 71 | + var th = this; | |
| 72 | + th.query_hist(); | |
| 73 | + }, | |
| 74 | + /** | |
| 75 | + * 生命周期函数--监听页面显示 | |
| 76 | + */ | |
| 77 | + onShow: function() {}, | |
| 78 | + | |
| 79 | + /** | |
| 80 | + * 页面上拉触底事件的处理函数 | |
| 81 | + */ | |
| 82 | + onReachBottom: function() { | |
| 83 | + var th = this; | |
| 84 | + if (th.data.total <= th.data.pageSize) return false; | |
| 85 | + if (th.data.ismore) return false; | |
| 86 | + | |
| 87 | + wx.showLoading({ | |
| 88 | + title: '加载中...', | |
| 89 | + }) | |
| 90 | + th.query_hist(); | |
| 91 | + }, | |
| 92 | + //重置历史服务数据 | |
| 93 | + his_reset: function() { | |
| 94 | + var th = this; | |
| 95 | + var is_reset = th.data.is_reset; | |
| 96 | + if (is_reset == 0) { | |
| 97 | + th.setData({ | |
| 98 | + hist_List: [], | |
| 99 | + curpage: 1, | |
| 100 | + is_service_read: 0, | |
| 101 | + is_screen: 1, | |
| 102 | + is_reset: 1, | |
| 103 | + startTime: "", | |
| 104 | + endTime: "", | |
| 105 | + is_nav: 1 | |
| 106 | + }) | |
| 107 | + th.query_hist(); | |
| 108 | + } | |
| 109 | + }, | |
| 110 | + query_hist: function() { | |
| 111 | + | |
| 112 | + var th = this; | |
| 113 | + var startTime = th.data.startTime.substring(0, 10); //开始 | |
| 114 | + var endTime = th.data.endTime.substring(0, 10); //结束 | |
| 115 | + var url = "/api/weshop/marketing/reservation/history/reservation/page"; | |
| 116 | + getApp().request.promiseGet(url, { | |
| 117 | + data: { | |
| 118 | + storeId: a.stoid, | |
| 119 | + userId: d.user_id, | |
| 120 | + beginDate: startTime, | |
| 121 | + endDate: endTime, | |
| 122 | + page: th.data.curpage, | |
| 123 | + pageSize: th.data.pageSize | |
| 124 | + } | |
| 125 | + }).then(res => { | |
| 126 | + wx.hideLoading(); | |
| 127 | + th.setData({ | |
| 128 | + is_reset: 0 | |
| 129 | + }) | |
| 130 | + if (res.data.code == 0) { | |
| 131 | + th.data.curpage++; | |
| 132 | + var arr1 = th.data.hist_List; | |
| 133 | + var arr2 = res.data.data.pageData; | |
| 134 | + var arr3 = [...arr1, ...arr2]; | |
| 135 | + var ismore = 0; | |
| 136 | + if (arr3.length == res.data.total) ismore = 1 | |
| 137 | + th.setData({ | |
| 138 | + hist_List: arr3, | |
| 139 | + total: res.data.data.total, | |
| 140 | + ismore: ismore, | |
| 141 | + is_service_read: 1, | |
| 142 | + }), wx.stopPullDownRefresh(); //停止下拉刷新 | |
| 143 | + } else { | |
| 144 | + th.setData({ | |
| 145 | + is_service_read: 1, | |
| 146 | + is_screen: 0, | |
| 147 | + ismore: 1 | |
| 148 | + }) | |
| 149 | + if (startTime!="") { | |
| 150 | + th.setData({ | |
| 151 | + total:0 | |
| 152 | + }) | |
| 153 | + } | |
| 154 | + } | |
| 155 | + }) | |
| 156 | + } | |
| 157 | +}) | |
| 0 | 158 | \ No newline at end of file | ... | ... |
pages/user/my_service/hist_service.json
0 → 100644
pages/user/my_service/hist_service.wxml
0 → 100644
| 1 | +<view class="{{isPickerRender==true?'container':''}}"> | |
| 2 | + <!-- 点击方法 --> | |
| 3 | + <view class="exption flex-vertical-between fs28" wx:if="{{is_nav || hist_List.length>0}}"> | |
| 4 | + <view class="flex"> | |
| 5 | + 共使用 | |
| 6 | + <view class="count">{{total}}</view> | |
| 7 | + 次服务 | |
| 8 | + </view> | |
| 9 | + <view class="flex"> | |
| 10 | + <view class="Resetfram flex-center" bindtap="his_reset"> | |
| 11 | + <view class="Reset">重置</view> | |
| 12 | + <image class="Resetsub" src="{{iurl}}/miniapp/images/reset.png"></image> | |
| 13 | + </view> | |
| 14 | + <view class="flex-center" bindtap='pickerShow'> | |
| 15 | + <view>筛选</view> | |
| 16 | + <view wx:if="{{true}}" class="box"></view> | |
| 17 | + </view> | |
| 18 | + </view> | |
| 19 | + </view> | |
| 20 | + | |
| 21 | + <!-- 总的服务列表 --> | |
| 22 | + <view class="items"> | |
| 23 | + <!-- 单个 --> | |
| 24 | + <view class="item flex-vertical-between" wx:for="{{hist_List}}"> | |
| 25 | + <!-- left --> | |
| 26 | + <view> | |
| 27 | + <view class="flex fs28"> | |
| 28 | + <view class="itemName ellipsis-1">{{item.ServiceName==''?'匿名':item.ServiceName}}</view> | |
| 29 | + <block wx:if="{{item.State==1 || item.State==4}}"> | |
| 30 | + <view>(服务美容师:</view> | |
| 31 | + </block> | |
| 32 | + <block wx:else> | |
| 33 | + <view>(预约美容师:</view> | |
| 34 | + </block> | |
| 35 | + <view class="itemUsna ellipsis-1">{{item.BeauticianName}}</view> | |
| 36 | + ) | |
| 37 | + </view> | |
| 38 | + <view class="fs24">{{item.ArrangeTime}}</view> | |
| 39 | + </view> | |
| 40 | + <!-- right --> | |
| 41 | + <view class="serState fs32"> | |
| 42 | + <view wx:if="{{item.State==1}}">已服务</view> | |
| 43 | + <view wx:if="{{item.State==2}}">已过期</view> | |
| 44 | + <view wx:if="{{item.State==3}}">已取消</view> | |
| 45 | + <view wx:if="{{item.State==4}}">已评价</view> | |
| 46 | + </view> | |
| 47 | + </view> | |
| 48 | + <!-- 没有数据 --> | |
| 49 | + <!-- 加载完毕并且数据大于=页大小 --> | |
| 50 | + <view class="After_all flex-center" wx:if="{{ismore && hist_List.length>=pageSize}}"> | |
| 51 | + <view class="Line"></view> | |
| 52 | + <view class="end fs26 xc-black">到底了</view> | |
| 53 | + <view class="Line"></view> | |
| 54 | + </view> | |
| 55 | + </view> | |
| 56 | +</view> | |
| 57 | +<view wx:if="{{hist_List.length<1 && startTime!=''}}" class="flex-center fs26 slot"> | |
| 58 | + <view>该时间段无预约记录</view> | |
| 59 | +</view> | |
| 60 | +<!-- 无历史服务 --> | |
| 61 | +<view class="empty_order" wx:if="{{hist_List.length<1 && is_service_read && startTime==''}}"> | |
| 62 | + <view class="flex-level"> | |
| 63 | + <image src="{{iurl}}miniapp/images/yyservice/no_history.png"></image> | |
| 64 | + </view> | |
| 65 | + <view class="flex-level fs30 xc-ash">暂无服务记录</view> | |
| 66 | + <view class="flex-level"> | |
| 67 | + <navigator url="/pages/user/my_service/i_service"> | |
| 68 | + <view class="flex-center fs32 white">前往使用</view> | |
| 69 | + </navigator> | |
| 70 | + </view> | |
| 71 | +</view> | |
| 72 | + | |
| 73 | + | |
| 74 | +<!-- 引用时间主键 --> | |
| 75 | +<timePicker pickerShow="{{isPickerShow}}" id="picker" wx:if="{{isPickerRender}}" bind:hidePicker="pickerHide" bind:setPickerTime="setPickerTime" config="{{pickerConfig}}"></timePicker> | |
| 76 | +<warn id="warn"></warn> | |
| 0 | 77 | \ No newline at end of file | ... | ... |
pages/user/my_service/hist_service.wxss
0 → 100644
| 1 | +page { | |
| 2 | + height: 100%; | |
| 3 | +} | |
| 4 | + | |
| 5 | +.box { | |
| 6 | + width: 0px; | |
| 7 | + height: 0px; | |
| 8 | + margin-left: 15rpx; | |
| 9 | + border-top: 11rpx solid rgba(0, 0, 0, 0); | |
| 10 | + border-right: 10rpx solid rgba(0, 0, 0, 0); | |
| 11 | + border-left: 10rpx solid rgba(0, 0, 0, 0); | |
| 12 | + display: inline-block; | |
| 13 | + margin-bottom: 10rpx; | |
| 14 | + color: red; | |
| 15 | + transform: rotate(0deg); | |
| 16 | + border-bottom: 18rpx solid rgb(153, 153, 153); | |
| 17 | +} | |
| 18 | + | |
| 19 | +.exption { | |
| 20 | + padding: 0rpx 45rpx; | |
| 21 | + background-color: rgb(238, 238, 238); | |
| 22 | + height: 70rpx; | |
| 23 | + color: rgb(153, 153, 153); | |
| 24 | + position: fixed; | |
| 25 | + top:0rpx; | |
| 26 | + left: 0rpx; | |
| 27 | + width: 660rpx; | |
| 28 | +} | |
| 29 | + | |
| 30 | +.count { | |
| 31 | + margin: 0rpx 5rpx; | |
| 32 | +} | |
| 33 | + | |
| 34 | +.Resetfram { | |
| 35 | + margin-right: 40rpx; | |
| 36 | +} | |
| 37 | + | |
| 38 | +.Reset { | |
| 39 | + margin-right: 5rpx; | |
| 40 | +} | |
| 41 | + | |
| 42 | +.Resetsub { | |
| 43 | + width: 30rpx; | |
| 44 | + height: 30rpx; | |
| 45 | +} | |
| 46 | +.items{ | |
| 47 | + margin-top: 70rpx; | |
| 48 | +} | |
| 49 | +.item { | |
| 50 | + margin: 0rpx 25rpx; | |
| 51 | + padding: 0rpx 20rpx; | |
| 52 | + height: 100rpx; | |
| 53 | + border-bottom: 1rpx solid rgb(242, 242, 242); | |
| 54 | +} | |
| 55 | + | |
| 56 | +.itemName { | |
| 57 | + margin-right: 10rpx; | |
| 58 | + max-width: 130rpx; | |
| 59 | +} | |
| 60 | + | |
| 61 | +.itemUsna { | |
| 62 | + max-width: 150rpx; | |
| 63 | +} | |
| 64 | + | |
| 65 | +.serState { | |
| 66 | + color: rgb(255, 82, 125); | |
| 67 | +} | |
| 68 | + | |
| 69 | +.container { | |
| 70 | + position: fixed; | |
| 71 | + width: 100%; | |
| 72 | + top: 0rpx; | |
| 73 | +} | |
| 74 | + | |
| 75 | +/* 无历史服务 */ | |
| 76 | + | |
| 77 | +.empty_order { | |
| 78 | + height: 100%; | |
| 79 | + background-color: rgb(238, 238, 238); | |
| 80 | +} | |
| 81 | + | |
| 82 | +.empty_order image { | |
| 83 | + width: 329rpx; | |
| 84 | + height: 229rpx; | |
| 85 | + margin-top: 202rpx; | |
| 86 | +} | |
| 87 | + | |
| 88 | +.empty_order .xc-ash { | |
| 89 | + margin-top: 10rpx; | |
| 90 | + font-weight: 600px; | |
| 91 | +} | |
| 92 | + | |
| 93 | +.empty_order navigator { | |
| 94 | + margin-top: 65rpx; | |
| 95 | + border-radius: 40rpx; | |
| 96 | +} | |
| 97 | + | |
| 98 | +.empty_order navigator view { | |
| 99 | + width: 247rpx; | |
| 100 | + height: 65rpx; | |
| 101 | + background-color: rgb(255, 72, 72); | |
| 102 | + border-radius: 40rpx; | |
| 103 | +} | |
| 104 | + | |
| 105 | +.After_all { | |
| 106 | + height: 80rpx; | |
| 107 | +} | |
| 108 | + | |
| 109 | +.After_all .Line { | |
| 110 | + border-top: 3rpx solid rgb(0, 0, 0); | |
| 111 | + width: 130rpx; | |
| 112 | +} | |
| 113 | + | |
| 114 | +.After_all .end { | |
| 115 | + margin: 0rpx 15rpx; | |
| 116 | +} | |
| 117 | +.slot{ | |
| 118 | + color: rgb(153, 153, 153); | |
| 119 | + height:300rpx; | |
| 120 | + width:100%; | |
| 121 | +} | |
| 0 | 122 | \ No newline at end of file | ... | ... |
pages/user/my_service/i_service.js
0 → 100644
| 1 | +var e = getApp(), | |
| 2 | + a = e.globalData.setting, | |
| 3 | + os = a, | |
| 4 | + t = e.request, | |
| 5 | + d = e.globalData; | |
| 6 | +Page({ | |
| 7 | + | |
| 8 | + /** | |
| 9 | + * 页面的初始数据 | |
| 10 | + */ | |
| 11 | + data: { | |
| 12 | + qr_code_object: { | |
| 13 | + val: "12121", | |
| 14 | + content: "请将二维码展示给核销员,服务更快捷!" | |
| 15 | + }, | |
| 16 | + iurl: a.imghost, | |
| 17 | + defimgurl: "/miniapp/images/yyservice/yyxmdefault.jpg", | |
| 18 | + service_List: [], //服务项目列表 | |
| 19 | + is_service_read: 0, | |
| 20 | + curpage: 1, //当前分页数 | |
| 21 | + pageSize: 10, //页大小 | |
| 22 | + total: 0, | |
| 23 | + ismore: 0, //是否加载完毕 | |
| 24 | + userinfo: null, | |
| 25 | + is_sub: 0, //是否重复提交预约 | |
| 26 | + }, | |
| 27 | + | |
| 28 | + /** | |
| 29 | + * 生命周期函数--监听页面加载 | |
| 30 | + */ | |
| 31 | + onLoad: function(options) { | |
| 32 | + var userinfo = getApp().globalData.userInfo; | |
| 33 | + if (userinfo == null) { | |
| 34 | + //界面必须使用warn 做ID,并调用 | |
| 35 | + return false; | |
| 36 | + } | |
| 37 | + this.setData({ | |
| 38 | + userinfo: userinfo | |
| 39 | + }); | |
| 40 | + var th = this; | |
| 41 | + th.query_service(); | |
| 42 | + }, | |
| 43 | + /** | |
| 44 | + * 生命周期函数--监听页面显示 | |
| 45 | + */ | |
| 46 | + onShow: function() { | |
| 47 | + var th = this; | |
| 48 | + var my_confirm = th.selectComponent("#my_confirm"); //组件的id | |
| 49 | + my_confirm.open_cancel(0); | |
| 50 | + }, | |
| 51 | + onReachBottom: function() { | |
| 52 | + var th = this; | |
| 53 | + if (this.data.total <= th.data.pageSize) return; | |
| 54 | + if (this.data.ismore) return; | |
| 55 | + | |
| 56 | + th.query_service(); | |
| 57 | + }, | |
| 58 | + //查询服务项目列表 | |
| 59 | + query_service: function() { | |
| 60 | + wx.showLoading({ | |
| 61 | + title: '加载中', | |
| 62 | + }) | |
| 63 | + var th = this; | |
| 64 | + var url = "/api/weshop/marketing/reservation/sm/page"; | |
| 65 | + getApp().request.promiseGet(url, { | |
| 66 | + data: { | |
| 67 | + storeId: a.stoid, | |
| 68 | + userId: d.user_id, | |
| 69 | + page: th.data.curpage, | |
| 70 | + pageSize: th.data.pageSize | |
| 71 | + } | |
| 72 | + }).then(res => { | |
| 73 | + wx.hideLoading(); | |
| 74 | + if (res.data.code == 0) { | |
| 75 | + th.data.curpage++; | |
| 76 | + var arr1 = th.data.service_List; | |
| 77 | + var arr2 = res.data.data.pageData; | |
| 78 | + var arr3 = [...arr1, ...arr2]; | |
| 79 | + var ismore = 0; | |
| 80 | + if (arr3.length == res.data.data.total) ismore = 1 | |
| 81 | + th.setData({ | |
| 82 | + service_List: arr3, | |
| 83 | + total: res.data.data.total, | |
| 84 | + ismore: ismore, | |
| 85 | + is_service_read: 1, | |
| 86 | + }), | |
| 87 | + wx.stopPullDownRefresh(); //停止下拉刷新 | |
| 88 | + } else { | |
| 89 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 90 | + } | |
| 91 | + }) | |
| 92 | + }, | |
| 93 | + /*-- 打开服务项目 --*/ | |
| 94 | + open_fw: function(e) { | |
| 95 | + wx.showLoading({ | |
| 96 | + title: '加载中', | |
| 97 | + }) | |
| 98 | + var th = this; | |
| 99 | + var url = e.currentTarget.dataset.url; | |
| 100 | + var service_id = e.currentTarget.dataset.service_id; //服务id | |
| 101 | + var project_id = e.currentTarget.dataset.project_id; | |
| 102 | + var ind = e.currentTarget.dataset.ind; | |
| 103 | + var item = this.data.service_List[ind]; | |
| 104 | + var ewm = "^" + th.data.userinfo.erpvipid + "|" + item.ProjectID + "|" + item.BuyType + "|TY01|"; | |
| 105 | + var tt = th.format_time(1); | |
| 106 | + ewm = ewm + tt; | |
| 107 | + th.data.qr_code_object.val = ewm; | |
| 108 | + th.data.qr_code_object.is_fw = 1; | |
| 109 | + var qc_com = th.selectComponent("#qc_com"); //组件的id | |
| 110 | + getApp().request.promiseGet("/api/weshop/marketing/reservation/reservation/check", { | |
| 111 | + data: { | |
| 112 | + serviceId: service_id, | |
| 113 | + storeId: a.stoid, | |
| 114 | + userId: d.user_id | |
| 115 | + } | |
| 116 | + }).then(res => { | |
| 117 | + wx.hideLoading(); | |
| 118 | + th.setData({ | |
| 119 | + is_sub: 0 | |
| 120 | + }) | |
| 121 | + if (res.data.data != null) { | |
| 122 | + var my_confirm = th.selectComponent("#my_confirm"); //组件的id | |
| 123 | + my_confirm.open_cancel(1); | |
| 124 | + my_confirm.open( | |
| 125 | + "已有预约记录!", | |
| 126 | + "预约详情", | |
| 127 | + "继续使用", | |
| 128 | + function() { | |
| 129 | + my_confirm.open_cancel(0); | |
| 130 | + var deta_url = "/pages/user/my_service/tment_details?number=" + res.data.data.Number; | |
| 131 | + wx.navigateTo({ | |
| 132 | + url: deta_url | |
| 133 | + }) | |
| 134 | + }, | |
| 135 | + function() { | |
| 136 | + my_confirm.open_cancel(0); | |
| 137 | + qc_com.open(th.data.qr_code_object) | |
| 138 | + } | |
| 139 | + | |
| 140 | + ) | |
| 141 | + | |
| 142 | + } else { | |
| 143 | + qc_com.open(th.data.qr_code_object) | |
| 144 | + } | |
| 145 | + }) | |
| 146 | + | |
| 147 | + }, | |
| 148 | + //图片失败,默认图片 | |
| 149 | + bind_bnerr1: function(e) { | |
| 150 | + var _errImg = e.target.dataset.errorimg; | |
| 151 | + var _Img = e.target.dataset.img; | |
| 152 | + if (_Img != undefined) { | |
| 153 | + var _errObj = {}; | |
| 154 | + _errObj[_errImg] = "/miniapp/images/no_cate_def.png"; | |
| 155 | + this.setData(_errObj) //注意这里的赋值方式,只是将数据列表中的此项图片路径值替换掉 ; | |
| 156 | + } | |
| 157 | + }, | |
| 158 | + format_time: function(isFull) { | |
| 159 | + var d = new Date(); | |
| 160 | + var m = d.getMonth() + 1; | |
| 161 | + if (m < 10) m = "0" + m; | |
| 162 | + var dd = d.getDate(); | |
| 163 | + if (dd < 10) dd = "0" + dd; | |
| 164 | + var fm = [d.getFullYear(), m, dd].join('-'); | |
| 165 | + if (isFull == 1) | |
| 166 | + fm = fm + ' ' + [d.getHours(), d.getMinutes(), d.getSeconds()].join(':') | |
| 167 | + return fm; | |
| 168 | + }, | |
| 169 | + //跳转到首页 | |
| 170 | + goto: function(e) { | |
| 171 | + var url = e.currentTarget.dataset.url; | |
| 172 | + getApp().goto(url); | |
| 173 | + }, | |
| 174 | + //校正是否可预约 | |
| 175 | + correcting: function(e) { | |
| 176 | + var th = this; | |
| 177 | + wx.showLoading({ | |
| 178 | + title: '加载中', | |
| 179 | + }) | |
| 180 | + if (th.data.is_sub == 0) { | |
| 181 | + th.setData({ | |
| 182 | + is_sub: 1 | |
| 183 | + }) | |
| 184 | + var url = e.currentTarget.dataset.url; | |
| 185 | + var service_id = e.currentTarget.dataset.service_id; //服务id | |
| 186 | + var project_id = e.currentTarget.dataset.project_id; | |
| 187 | + getApp().request.promiseGet("/api/weshop/marketing/reservation/reservation/check", { | |
| 188 | + data: { | |
| 189 | + serviceId: service_id, | |
| 190 | + storeId: a.stoid, | |
| 191 | + userId: d.user_id | |
| 192 | + } | |
| 193 | + }).then(res => { | |
| 194 | + wx.hideLoading(); | |
| 195 | + th.setData({ | |
| 196 | + is_sub: 0 | |
| 197 | + }) | |
| 198 | + if (res.data.code == 0) { | |
| 199 | + if (res.data.data != null) { | |
| 200 | + | |
| 201 | + var number = res.data.data.Number; | |
| 202 | + var my_confirm = th.selectComponent("#my_confirm"); //组件的id | |
| 203 | + my_confirm.open_cancel(1); | |
| 204 | + my_confirm.open( | |
| 205 | + "已有预约记录!", | |
| 206 | + "预约详情", | |
| 207 | + "继续预约", | |
| 208 | + function() { | |
| 209 | + my_confirm.open_cancel(0); | |
| 210 | + var deta_url = "/pages/user/my_service/tment_details?number=" + number; | |
| 211 | + wx.navigateTo({ | |
| 212 | + url: deta_url | |
| 213 | + }) | |
| 214 | + }, | |
| 215 | + function() { | |
| 216 | + my_confirm.open_cancel(0); | |
| 217 | + getApp().request.promiseGet("/api/weshop/marketing/reservation/reservation/sm/check", { | |
| 218 | + data: { | |
| 219 | + projectId: project_id, | |
| 220 | + serviceId: service_id, | |
| 221 | + storeId: a.stoid, | |
| 222 | + userId: d.user_id | |
| 223 | + } | |
| 224 | + }).then(res => { | |
| 225 | + if (res.data.code == 0) { | |
| 226 | + wx.navigateTo({ | |
| 227 | + url: url | |
| 228 | + }) | |
| 229 | + } else { | |
| 230 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 231 | + } | |
| 232 | + }) | |
| 233 | + } | |
| 234 | + ) | |
| 235 | + } else { | |
| 236 | + wx.navigateTo({ | |
| 237 | + url: url, | |
| 238 | + }) | |
| 239 | + } | |
| 240 | + | |
| 241 | + } else { | |
| 242 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 243 | + } | |
| 244 | + }) | |
| 245 | + } | |
| 246 | + }, | |
| 247 | + //关闭导航 | |
| 248 | + close: function () { | |
| 249 | + var th = this; | |
| 250 | + var nav_b = th.selectComponent("#nav_b"); //组件的id | |
| 251 | + nav_b.close_box(); | |
| 252 | + } | |
| 253 | + | |
| 254 | +}) | |
| 0 | 255 | \ No newline at end of file | ... | ... |
pages/user/my_service/i_service.json
0 → 100644
| 1 | +{ | |
| 2 | + "navigationBarTitleText": "服务项目", | |
| 3 | + "usingComponents": { | |
| 4 | + "qr_code": "/components/qr_code/qr_code", | |
| 5 | + "warn": "/components/long_warn/long_warn", | |
| 6 | + "my_confirm": "/components/my_confirm/my_confirm", | |
| 7 | + "nav_b": "/components/nav_b/nav_b" | |
| 8 | + } | |
| 9 | +} | |
| 0 | 10 | \ No newline at end of file | ... | ... |
pages/user/my_service/i_service.wxml
0 → 100644
| 1 | +<!-- 背景图片 --> | |
| 2 | +<view catchtap="close"> | |
| 3 | + <image class="backimage" src="{{iurl}}/miniapp/images/yyservice/backimage.png" lazy-load="true"></image> | |
| 4 | + <navigator class="History fs26" url="/pages/user/my_service/hist_service">历史预约</navigator> | |
| 5 | +</view> | |
| 6 | + | |
| 7 | +<!-- 预约内容 --> | |
| 8 | +<!-- 项目框架 --> | |
| 9 | +<view class="Serviceitems" catchtap="close"> | |
| 10 | + <!-- 单个项目 --> | |
| 11 | + <view class="rel" wx:for="{{service_List}}"> | |
| 12 | + <view class="abs"> | |
| 13 | + <!-- 皇冠log --> | |
| 14 | + <block wx:if="{{item.BuyType==4}}"> | |
| 15 | + <image class="equity_money" src="{{iurl}}/miniapp/images//yyservice/equity.png" lazy-load="true"></image> | |
| 16 | + </block> | |
| 17 | + <!-- 金钱log --> | |
| 18 | + <block wx:if="{{item.BuyType==1}}"> | |
| 19 | + <image class="equity_money" src="{{iurl}}/miniapp/images/yyservice/money.png" lazy-load="true"></image> | |
| 20 | + </block> | |
| 21 | + <!-- 礼包log --> | |
| 22 | + <block wx:if="{{item.BuyType==3}}"> | |
| 23 | + <image class="equity_money" src="{{iurl}}/miniapp/images/yyservice/giftpackage.png" lazy-load="true"></image> | |
| 24 | + </block> | |
| 25 | + </view> | |
| 26 | + <view> | |
| 27 | + <view class="flex-center"> | |
| 28 | + <image class="itemimage" src="{{item.ImageUrl==''?iurl+defimgurl:item.ImageUrl}}" lazy-load="true" data-errorimg="service_List[{{index}}].ImageUrl" binderror="bind_bnerr1" data-img="{{item.ImageUrl}}"></image> | |
| 29 | + </view> | |
| 30 | + | |
| 31 | + <view class="flex-center itemName"> | |
| 32 | + <view class="fs32 Name ellipsis-1">{{item.ServiceName}}</view> | |
| 33 | + </view> | |
| 34 | + | |
| 35 | + <view class="flex-center fs24 itemCount"> | |
| 36 | + <view>剩余次数:</view> | |
| 37 | + <view>{{item.ObtainTimes}}</view> | |
| 38 | + </view> | |
| 39 | + | |
| 40 | + <view class="flex-center fs24 itemEffective"> | |
| 41 | + <view>有效期至</view> | |
| 42 | + <view class="Date">{{item.Validay==""?"长期有效":item.Validay}}</view> | |
| 43 | + </view> | |
| 44 | + | |
| 45 | + </view> | |
| 46 | + | |
| 47 | + <view class="flex-center fs28 functionMax"> | |
| 48 | + <view class="flex-level Use" bindtap="open_fw" data-ind="{{index}}" data-service_id="{{item.ServiceID}}"> | |
| 49 | + <view>立即使用</view> | |
| 50 | + </view> | |
| 51 | + <!-- 可预约 --> | |
| 52 | + <view wx:if="{{item.State>0}}" class="flex-level appointment yellow-b" data-url="/pages/user/my_service/appment_main?service_id={{item.ServiceID}}&BuyType={{item.BuyType}}&ProjectID={{item.ProjectID}}&Validay={{item.Validay}}" bindtap="correcting" data-service_id="{{item.ServiceID}}" data-project_id="{{item.ProjectID}}"> | |
| 53 | + <view>预约</view> | |
| 54 | + </view> | |
| 55 | + </view> | |
| 56 | + </view> | |
| 57 | + <!-- 没有数据 --> | |
| 58 | + <!-- 加载完毕并且数据大于=页大小 --> | |
| 59 | + <view class="After_all flex-center" wx:if="{{ismore && service_List.length>=6}}"> | |
| 60 | + <view class="Line"></view> | |
| 61 | + <view class="end fs26 xc-black">到底了</view> | |
| 62 | + <view class="Line"></view> | |
| 63 | + </view> | |
| 64 | +</view> | |
| 65 | +<!-- 无服务项目 --> | |
| 66 | +<view wx:if="{{service_List.length<1 && is_service_read}}"> | |
| 67 | + <!-- 遮住 --> | |
| 68 | + <view class="cover"></view> | |
| 69 | + <!-- 无历史服务 --> | |
| 70 | + <view class="empty_order" wx:if="{{true}}"> | |
| 71 | + <view class="flex-level"> | |
| 72 | + <image src="{{iurl}}miniapp/images/yyservice/no_history.png"></image> | |
| 73 | + </view> | |
| 74 | + <view class="flex-level fs30 xc-ash">暂无服务项目</view> | |
| 75 | + <view class="flex-level"> | |
| 76 | + <navigator data-url="/pages/user/index/index" bindtap="goto"> | |
| 77 | + <view class="flex-center fs28 white">回到首页</view> | |
| 78 | + </navigator> | |
| 79 | + </view> | |
| 80 | + </view> | |
| 81 | +</view> | |
| 82 | +<!-- 制作一个圆球导航 --> | |
| 83 | +<nav_b id="nav_b"></nav_b> | |
| 84 | +<!-- 弹出框扫描 --> | |
| 85 | +<qr_code id="qc_com"></qr_code> | |
| 86 | +<warn id="warn"></warn> | |
| 87 | +<my_confirm id="my_confirm"></my_confirm> | |
| 0 | 88 | \ No newline at end of file | ... | ... |
pages/user/my_service/i_service.wxss
0 → 100644
| 1 | +page { | |
| 2 | + overflow-x: scroll; | |
| 3 | +} | |
| 4 | + | |
| 5 | +/* 背景定位 */ | |
| 6 | + | |
| 7 | +.backimage { | |
| 8 | + position: absolute; | |
| 9 | + top: 0rpx; | |
| 10 | + left: 0rpx; | |
| 11 | + z-index: 0; | |
| 12 | + width: 100%; | |
| 13 | + /* height: 100%; */ | |
| 14 | +} | |
| 15 | + | |
| 16 | +/* 历史服务定位 */ | |
| 17 | + | |
| 18 | +.History { | |
| 19 | + position: absolute; | |
| 20 | + top: 30rpx; | |
| 21 | + right: 20rpx; | |
| 22 | + z-index: 1; | |
| 23 | + color: rgb(255, 255, 255); | |
| 24 | +} | |
| 25 | + | |
| 26 | +.rel { | |
| 27 | + background-color: rgb(255, 255, 255); | |
| 28 | + width: 350rpx; | |
| 29 | + height: 430rpx; | |
| 30 | + border-radius: 20rpx; | |
| 31 | + display: inline-block; | |
| 32 | + margin-right: 15rpx; | |
| 33 | + margin-bottom: 20rpx; | |
| 34 | + box-shadow: 0rpx 3rpx 3rpx 3rpx rgb(233, 233, 233); | |
| 35 | +} | |
| 36 | + | |
| 37 | +.abs { | |
| 38 | + left: 10rpx; | |
| 39 | + top: 10rpx; | |
| 40 | +} | |
| 41 | + | |
| 42 | +.equity_money { | |
| 43 | + width: 50rpx; | |
| 44 | + height: 55rpx; | |
| 45 | +} | |
| 46 | + | |
| 47 | +.Serviceitems { | |
| 48 | + position: absolute; | |
| 49 | + top: 370rpx; | |
| 50 | + left: 0rpx; | |
| 51 | + z-index: 2; | |
| 52 | + padding-left: 18rpx; | |
| 53 | + padding-bottom: 20rpx; | |
| 54 | +} | |
| 55 | + | |
| 56 | +.itemimage { | |
| 57 | + width: 120rpx; | |
| 58 | + height: 120rpx; | |
| 59 | + border-radius: 50%; | |
| 60 | + margin-top: 30rpx; | |
| 61 | + margin-bottom: 20rpx; | |
| 62 | +} | |
| 63 | + | |
| 64 | +.itemName { | |
| 65 | + margin-bottom: 25rpx; | |
| 66 | + color: rgb(48, 48, 48); | |
| 67 | +} | |
| 68 | + | |
| 69 | +.itemName .Name { | |
| 70 | + max-width: 250rpx; | |
| 71 | + text-align: center; | |
| 72 | +} | |
| 73 | + | |
| 74 | +.itemCount { | |
| 75 | + margin-bottom: 5rpx; | |
| 76 | + color: rgb(177, 177, 177); | |
| 77 | + align-items: baseline; | |
| 78 | +} | |
| 79 | + | |
| 80 | +.itemEffective { | |
| 81 | + margin-bottom: 30rpx; | |
| 82 | + color: rgb(177, 177, 177); | |
| 83 | + align-items: baseline; | |
| 84 | +} | |
| 85 | + | |
| 86 | +.functionMax { | |
| 87 | + padding: 0rpx 25rpx; | |
| 88 | + color: rgb(254, 255, 255); | |
| 89 | +} | |
| 90 | + | |
| 91 | +.Use { | |
| 92 | + width: 170rpx; | |
| 93 | + height: 50rpx; | |
| 94 | + line-height: 50rpx; | |
| 95 | + border-radius: 25rpx; | |
| 96 | + background-color: red; | |
| 97 | +} | |
| 98 | + | |
| 99 | +.appointment { | |
| 100 | + width: 115rpx; | |
| 101 | + height: 50rpx; | |
| 102 | + line-height: 50rpx; | |
| 103 | + border-radius: 25rpx; | |
| 104 | + margin-left: 20rpx; | |
| 105 | +} | |
| 106 | + | |
| 107 | +.Date { | |
| 108 | + margin-left: 10rpx; | |
| 109 | +} | |
| 110 | + | |
| 111 | +/* 无服务项目 */ | |
| 112 | + | |
| 113 | +.cover { | |
| 114 | + position: fixed; | |
| 115 | + z-index: 1; | |
| 116 | + left: 0rpx; | |
| 117 | + top: 390rpx; | |
| 118 | + width: 100%; | |
| 119 | + height: 200rpx; | |
| 120 | + background-color: rgb(255, 255, 255); | |
| 121 | +} | |
| 122 | + | |
| 123 | +/* 无历史服务 */ | |
| 124 | + | |
| 125 | +.empty_order { | |
| 126 | + position: fixed; | |
| 127 | + left: 0rpx; | |
| 128 | + top: 500rpx; | |
| 129 | + z-index: 2; | |
| 130 | + width: 100%; | |
| 131 | +} | |
| 132 | + | |
| 133 | +.empty_order image { | |
| 134 | + width: 329rpx; | |
| 135 | + height: 229rpx; | |
| 136 | + margin-top: 80rpx; | |
| 137 | +} | |
| 138 | + | |
| 139 | +.empty_order .xc-ash { | |
| 140 | + margin-top: 10rpx; | |
| 141 | + font-weight: 600px; | |
| 142 | +} | |
| 143 | + | |
| 144 | +.empty_order navigator { | |
| 145 | + margin-top: 60rpx; | |
| 146 | + border-radius: 40rpx; | |
| 147 | +} | |
| 148 | + | |
| 149 | +.empty_order navigator view { | |
| 150 | + width: 247rpx; | |
| 151 | + height: 56rpx; | |
| 152 | + background-color: rgb(255, 72, 72); | |
| 153 | + border-radius: 40rpx; | |
| 154 | +} | |
| 155 | + | |
| 156 | +.After_all { | |
| 157 | + height: 80rpx; | |
| 158 | +} | |
| 159 | + | |
| 160 | +.After_all .Line { | |
| 161 | + border-top: 3rpx solid rgb(0, 0, 0); | |
| 162 | + width: 130rpx; | |
| 163 | +} | |
| 164 | + | |
| 165 | +.After_all .end { | |
| 166 | + margin: 0rpx 15rpx; | |
| 167 | +} | ... | ... |
pages/user/my_service/my_service.js
0 → 100644
pages/user/my_service/my_service.wxml
0 → 100644
pages/user/my_service/tment_details.js
0 → 100644
| 1 | +var e = getApp(), | |
| 2 | + a = e.globalData.setting, | |
| 3 | + os = a, | |
| 4 | + t = e.request, | |
| 5 | + d = e.globalData; | |
| 6 | +Page({ | |
| 7 | + | |
| 8 | + /** | |
| 9 | + * 页面的初始数据 | |
| 10 | + */ | |
| 11 | + data: { | |
| 12 | + url: a.url, | |
| 13 | + iurl: a.imghost, | |
| 14 | + tment_details: [], //预约详情 | |
| 15 | + number: "", //订单号 | |
| 16 | + arrangeTime: "", //预约年月日 | |
| 17 | + day: "", //判断是上午还是下午 | |
| 18 | + states: 3, //3为取消预约 | |
| 19 | + }, | |
| 20 | + //取消预约 | |
| 21 | + cancel_tment: function(e) { | |
| 22 | + var th = this; | |
| 23 | + var my_confirm = th.selectComponent("#my_confirm"); //组件的id | |
| 24 | + my_confirm.open( | |
| 25 | + "确定取消?", | |
| 26 | + "取消", | |
| 27 | + "确定", | |
| 28 | + function() { | |
| 29 | + my_confirm.open_cancel(0); | |
| 30 | + }, | |
| 31 | + function() { | |
| 32 | + var index = e.currentTarget.dataset.index; | |
| 33 | + var states = th.data.states; | |
| 34 | + var tment_details = th.data.tment_details; | |
| 35 | + var number = th.data.number; | |
| 36 | + var json = { | |
| 37 | + "number": number, | |
| 38 | + "storeId": a.stoid, | |
| 39 | + "states": states | |
| 40 | + }; | |
| 41 | + var data = JSON.stringify(json); | |
| 42 | + var url = th.data.url + "/api/weshop/marketing/reservation/reservation/update"; //预约接口地址 | |
| 43 | + wx.request({ | |
| 44 | + url: url, | |
| 45 | + data: data, | |
| 46 | + method: 'put', | |
| 47 | + header: { | |
| 48 | + 'content-type': 'application/json' | |
| 49 | + }, // 设置请求的 header | |
| 50 | + success: function(res) { | |
| 51 | + my_confirm.open_cancel(0); | |
| 52 | + if (res.data.code == 0) { | |
| 53 | + getApp().my_warnning("取消成功", 1, th); | |
| 54 | + var start = 'tment_details[' + 0 + '].State'; | |
| 55 | + th.setData({ | |
| 56 | + [start]: 3 | |
| 57 | + }) | |
| 58 | + } else { | |
| 59 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 60 | + } | |
| 61 | + } | |
| 62 | + }) | |
| 63 | + } | |
| 64 | + ); | |
| 65 | + | |
| 66 | + }, | |
| 67 | + | |
| 68 | + /** | |
| 69 | + * 生命周期函数--监听页面加载 | |
| 70 | + */ | |
| 71 | + onLoad: function(options) { | |
| 72 | + var th = this; | |
| 73 | + th.setData({ | |
| 74 | + number: options.number | |
| 75 | + }) | |
| 76 | + }, | |
| 77 | + //查询美容师详情 | |
| 78 | + query_bea: function() { | |
| 79 | + var th = this; | |
| 80 | + var number = th.data.number; | |
| 81 | + var url = "/api/weshop/marketing/reservation/reservation/page"; | |
| 82 | + getApp().request.promiseGet(url, { | |
| 83 | + data: { | |
| 84 | + storeId: a.stoid, | |
| 85 | + userId: d.user_id, | |
| 86 | + number: number | |
| 87 | + } | |
| 88 | + }).then(res => { | |
| 89 | + wx.hideLoading(); | |
| 90 | + if (res.data.code == 0) { | |
| 91 | + var data = res.data.data.pageData; | |
| 92 | + var arrangeTime = data[0].ArrangeTime.substring(0, 11); | |
| 93 | + var day = data[0].ArrangeTime.substring(11, 16); | |
| 94 | + th.setData({ | |
| 95 | + tment_details: data, | |
| 96 | + arrangeTime: arrangeTime, | |
| 97 | + day: day | |
| 98 | + }) | |
| 99 | + | |
| 100 | + } else { | |
| 101 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 102 | + } | |
| 103 | + }) | |
| 104 | + }, | |
| 105 | + //显示核销码 | |
| 106 | + code_show: function(e) { | |
| 107 | + var th = this; | |
| 108 | + //--获取成功的时候-- | |
| 109 | + var no = e.currentTarget.dataset.order_sn; | |
| 110 | + var qc_com = th.selectComponent("#qc_com"); //组件的id | |
| 111 | + var obj = { | |
| 112 | + val: no, | |
| 113 | + content: "请将二维码展示给核销员,使用更快捷" | |
| 114 | + }; | |
| 115 | + qc_com.open(obj) | |
| 116 | + }, | |
| 117 | + //跳到首页 | |
| 118 | + goto: function(e) { | |
| 119 | + var th = this; | |
| 120 | + wx.switchTab({ | |
| 121 | + url: '/pages/index/index/index', | |
| 122 | + }) | |
| 123 | + }, | |
| 124 | + /** | |
| 125 | + * 生命周期函数--监听页面显示 | |
| 126 | + */ | |
| 127 | + onShow: function() { | |
| 128 | + var th = this; | |
| 129 | + th.query_bea(); | |
| 130 | + }, | |
| 131 | + //关闭导航 | |
| 132 | + close: function () { | |
| 133 | + var th = this; | |
| 134 | + var nav_b = th.selectComponent("#nav_b"); //组件的id | |
| 135 | + nav_b.close_box(); | |
| 136 | + } | |
| 137 | +}) | |
| 0 | 138 | \ No newline at end of file | ... | ... |
pages/user/my_service/tment_details.json
0 → 100644
| 1 | +{ | |
| 2 | + "navigationBarTitleText": "预约详情", | |
| 3 | + "usingComponents": { | |
| 4 | + "qr_code": "/components/qr_code/qr_code", | |
| 5 | + "warn": "/components/long_warn/long_warn", | |
| 6 | + "my_confirm": "/components/my_confirm/my_confirm", | |
| 7 | + "nav_b": "/components/nav_b/nav_b" | |
| 8 | + } | |
| 9 | +} | |
| 0 | 10 | \ No newline at end of file | ... | ... |
pages/user/my_service/tment_details.wxml
0 → 100644
| 1 | +<view class="container" wx:for="{{tment_details}}" wx:if="{{index<1}}" catchtap="close"> | |
| 2 | + <!-- 预约人的属性 --> | |
| 3 | + <view class="Subscriber padding"> | |
| 4 | + <!-- 状态栏 --> | |
| 5 | + <view class="statusBar fs32 flex-vertical-between lf"> | |
| 6 | + <view>预约状态:</view> | |
| 7 | + <view wx:if="{{item.State==0}}">未服务</view> | |
| 8 | + <view wx:if="{{item.State==1}}">已服务</view> | |
| 9 | + <view wx:if="{{item.State==2}}">已过期</view> | |
| 10 | + <view wx:if="{{item.State==3}}">已取消</view> | |
| 11 | + <view wx:if="{{item.State==4}}">已评价</view> | |
| 12 | + </view> | |
| 13 | + <view class="fs30"> | |
| 14 | + <view class="items lf"> | |
| 15 | + <!-- 预约订单 --> | |
| 16 | + <view class="flex-vertical bmt" bindtap="code_show" data-order_sn="{{number}}" wx:if="{{item.State==0}}"> | |
| 17 | + <view class="flex-vertical ai-bas"> | |
| 18 | + <view class="name">预约订单:</view> | |
| 19 | + <view class="ellipsis-1 value">{{number}}</view> | |
| 20 | + </view> | |
| 21 | + <image src="{{iurl}}miniapp/images/order/code.png" class="code"></image> | |
| 22 | + </view> | |
| 23 | + | |
| 24 | + <!-- 预约门店 --> | |
| 25 | + <view class="flex-vertical bmt ai-bas"> | |
| 26 | + <view class="name">预约门店:</view> | |
| 27 | + <view class="ellipsis-1 value">{{item.StorageName}}</view> | |
| 28 | + </view> | |
| 29 | + | |
| 30 | + <!-- 预约项目 --> | |
| 31 | + <view class="flex-vertical bmt ai-bas"> | |
| 32 | + <view class="name">预约项目:</view> | |
| 33 | + <view class="ellipsis-1 value">{{item.ServiceName}}</view> | |
| 34 | + </view> | |
| 35 | + | |
| 36 | + <!-- 预约时间 --> | |
| 37 | + <view class="flex-vertical bmt ai-bas"> | |
| 38 | + <view class="name">预约时间:</view> | |
| 39 | + <view class="date">{{arrangeTime}}</view> | |
| 40 | + <view>{{day}}</view> | |
| 41 | + </view> | |
| 42 | + </view> | |
| 43 | + <view class="bt"> | |
| 44 | + | |
| 45 | + <!-- 美容师 --> | |
| 46 | + <view class="flex-vertical bmt ai-bas"> | |
| 47 | + <view class="name flex-vertical-between"> | |
| 48 | + <block wx:if="{{item.State==1 || item.State==4}}"> | |
| 49 | + <view>服务美容师:</view> | |
| 50 | + </block> | |
| 51 | + <block wx:else> | |
| 52 | + <view>预约美容师:</view> | |
| 53 | + </block> | |
| 54 | + </view> | |
| 55 | + <view class="ellipsis-1 value">{{item.BeauticianName}}</view> | |
| 56 | + </view> | |
| 57 | + <!-- 预约人及联系方式 --> | |
| 58 | + <!-- 姓名 --> | |
| 59 | + <view class="flex-vertical bmt ai-bas"> | |
| 60 | + <view class="name flex-vertical-between"> | |
| 61 | + <view>预</view> | |
| 62 | + <view>约</view> | |
| 63 | + <view>人:</view> | |
| 64 | + </view> | |
| 65 | + <view class="ellipsis-1 value">{{item.VIPName}}</view> | |
| 66 | + </view> | |
| 67 | + <!-- 号码 --> | |
| 68 | + <view class="flex-vertical ai-bas"> | |
| 69 | + <view class="name flex-vertical-between"> | |
| 70 | + <view>手</view> | |
| 71 | + <view>机</view> | |
| 72 | + <view>号:</view> | |
| 73 | + </view> | |
| 74 | + <view>{{item.MobileTel}}</view> | |
| 75 | + </view> | |
| 76 | + </view> | |
| 77 | + </view> | |
| 78 | + | |
| 79 | + </view> | |
| 80 | + | |
| 81 | + <!-- 温馨提示内容 --> | |
| 82 | + <view class="Tips fs30 lf rel padding"> | |
| 83 | + <!-- 棒槌 --> | |
| 84 | + <view class="Stickl abs"></view> | |
| 85 | + <view class="Stickl Stickr abs"></view> | |
| 86 | + | |
| 87 | + <view class="Cozy flex-center" style="background-image: url({{iurl}}/miniapp/images/yyservice/icon.png);"> | |
| 88 | + <view>温馨提示</view> | |
| 89 | + </view> | |
| 90 | + <view>1.预约成功后需在指定时间前到达;</view> | |
| 91 | + <view>2.如有任何问题可致电咨询;</view> | |
| 92 | + <view>3.如需退约,需提前取消。</view> | |
| 93 | + </view> | |
| 94 | + <!-- submit栏 --> | |
| 95 | + <view class="subs flex-vertical-between fs32"> | |
| 96 | + <!-- 左边栏 --> | |
| 97 | + <view class="sub flex-center yellow-b" wx:if="{{item.State==0}}" bindtap="cancel_tment"> | |
| 98 | + <view class="yellow-b" data-index="{{index}}">取消预约</view> | |
| 99 | + </view> | |
| 100 | + <navigator wx:if="{{item.State>0}}" class="sub flex-center yellow-b" url="/pages/user/my_service/tment_order_list"> | |
| 101 | + <view class="yellow-b">我的服务</view> | |
| 102 | + </navigator> | |
| 103 | + <!-- 右边栏 --> | |
| 104 | + <navigator wx:if="{{item.State==0}}" class="sub rb flex-center" url="/pages/user/my_service/beauty_deta?BeauticianID={{item.BeauticianID}}&number={{item.Number}}&itemId={{item.ServiceID}}&modify=1&projectId={{item.ProjectID}}"> | |
| 105 | + <view>更改时间</view> | |
| 106 | + </navigator> | |
| 107 | + <navigator wx:if="{{item.State==1}}" class="sub rb flex-center" url="/pages/user/my_service/tment_eval?Number={{item.Number}}&evaluate={{0}}"> | |
| 108 | + <view>发表评价</view> | |
| 109 | + </navigator> | |
| 110 | + <navigator wx:if="{{item.State==4}}" class="sub rb flex-center" url="/pages/user/my_service/tment_eval?Number={{item.Number}}&evaluate={{1}}"> | |
| 111 | + <view>查看评价</view> | |
| 112 | + </navigator> | |
| 113 | + <navigator wx:if="{{item.State==2 || item.State==3}}" class="sub rb flex-center" url="/pages/user/my_service/appment_main?ProjectID={{item.ProjectID}}&BuyType={{item.BuyType}}&service_id={{item.ServiceID}}"> | |
| 114 | + <view>重新预约</view> | |
| 115 | + </navigator> | |
| 116 | + | |
| 117 | + </view> | |
| 118 | + | |
| 119 | +</view> | |
| 120 | + | |
| 121 | +<!-- 制作一个圆球导航 --> | |
| 122 | +<nav_b id="nav_b"></nav_b> | |
| 123 | +<my_confirm id="my_confirm"></my_confirm> | |
| 124 | +<!-- 弹出框扫描 --> | |
| 125 | +<qr_code id="qc_com"></qr_code> | |
| 126 | +<warn id="warn"></warn> | |
| 0 | 127 | \ No newline at end of file | ... | ... |
pages/user/my_service/tment_details.wxss
0 → 100644
| 1 | +page { | |
| 2 | + width: 100%; | |
| 3 | + background-color: rgb(238, 238, 238); | |
| 4 | +} | |
| 5 | + | |
| 6 | +/* 公用 */ | |
| 7 | + | |
| 8 | +.lf { | |
| 9 | + padding: 0rpx 40rpx; | |
| 10 | +} | |
| 11 | + | |
| 12 | +.bt { | |
| 13 | + margin: 0rpx 15rpx; | |
| 14 | + padding: 0rpx 25rpx; | |
| 15 | + border-top: 2rpx dashed rgb(238, 238, 238); | |
| 16 | + padding-top: 50rpx; | |
| 17 | + padding-bottom: 50rpx; | |
| 18 | +} | |
| 19 | + | |
| 20 | +.bmt { | |
| 21 | + margin-bottom: 35rpx; | |
| 22 | +} | |
| 23 | + | |
| 24 | +.name { | |
| 25 | + width: 160rpx; | |
| 26 | + margin-right: 25rpx; | |
| 27 | +} | |
| 28 | + | |
| 29 | +.value { | |
| 30 | + max-width: 390rpx; | |
| 31 | +} | |
| 32 | + | |
| 33 | +/* 公用 */ | |
| 34 | + | |
| 35 | +.container { | |
| 36 | + padding-bottom:70rpx; | |
| 37 | +} | |
| 38 | + | |
| 39 | +.padding{ | |
| 40 | + margin: 0rpx 20rpx; | |
| 41 | +} | |
| 42 | + | |
| 43 | +.Subscriber { | |
| 44 | + overflow: hidden; | |
| 45 | + margin-top: 25rpx; | |
| 46 | + background-color: rgb(255, 255, 255); | |
| 47 | + border-radius: 10rpx; | |
| 48 | +} | |
| 49 | + | |
| 50 | +.statusBar { | |
| 51 | + height: 80rpx; | |
| 52 | + background-color: rgb(214, 1, 33); | |
| 53 | + color: rgb(255, 255, 255); | |
| 54 | +} | |
| 55 | + | |
| 56 | +.date { | |
| 57 | + margin-right: 25rpx; | |
| 58 | +} | |
| 59 | + | |
| 60 | +.items { | |
| 61 | + margin: 40rpx 0rpx; | |
| 62 | +} | |
| 63 | + | |
| 64 | +.Tips { | |
| 65 | + margin-top: 20rpx; | |
| 66 | + padding-top: 35rpx; | |
| 67 | + height: 255rpx; | |
| 68 | + border-radius: 10rpx; | |
| 69 | + background-color: rgb(255, 255, 255); | |
| 70 | + margin-bottom: 50rpx; | |
| 71 | +} | |
| 72 | + | |
| 73 | +.Cozy { | |
| 74 | + width: 165rpx; | |
| 75 | + height: 43rpx; | |
| 76 | + margin-bottom: 20rpx; | |
| 77 | + color: rgb(255, 255, 255); | |
| 78 | + background-size: 100%; | |
| 79 | +} | |
| 80 | + | |
| 81 | +.subs { | |
| 82 | + width: 710rpx; | |
| 83 | + padding: 15rpx 20rpx; | |
| 84 | + position: fixed; | |
| 85 | + bottom:0rpx; | |
| 86 | + background-color: rgb(255,255,255); | |
| 87 | +} | |
| 88 | + | |
| 89 | +.sub { | |
| 90 | + width: 325rpx; | |
| 91 | + height: 65rpx; | |
| 92 | + border-radius: 30rpx; | |
| 93 | + color: rgb(255, 255, 255); | |
| 94 | +} | |
| 95 | +.code{ | |
| 96 | + margin-left: 10rpx; | |
| 97 | + width: 50rpx; | |
| 98 | + height: 50rpx; | |
| 99 | +} | |
| 100 | +.rb { | |
| 101 | + background-color: rgb(214, 1, 33); | |
| 102 | +} | |
| 103 | + | |
| 104 | +/* 棒槌 */ | |
| 105 | + | |
| 106 | +.Stickl { | |
| 107 | + width: 39rpx; | |
| 108 | + height: 10rpx; | |
| 109 | + background-color: rgb(153, 153, 153); | |
| 110 | + transform: rotate(270deg); | |
| 111 | + border-radius: 20rpx; | |
| 112 | + left: 95rpx; | |
| 113 | + top: -15rpx; | |
| 114 | +} | |
| 115 | + | |
| 116 | +.Stickr { | |
| 117 | + left: 590rpx; | |
| 118 | +} | ... | ... |
pages/user/my_service/tment_eval.js
0 → 100644
| 1 | +var e = getApp(), | |
| 2 | + a = e.globalData.setting, | |
| 3 | + os = a, | |
| 4 | + t = e.request, | |
| 5 | + d = e.globalData; | |
| 6 | +Page({ | |
| 7 | + | |
| 8 | + /** | |
| 9 | + * 页面的初始数据 | |
| 10 | + */ | |
| 11 | + data: { | |
| 12 | + url: a.url, //接口网址 | |
| 13 | + iurl: a.imghost, | |
| 14 | + defimgurl: "/miniapp/images/no-head.jpg", | |
| 15 | + stars_index: -1, //当前点击的星星下标 | |
| 16 | + labels: [], //星级标签数组 | |
| 17 | + sub_evaluate: 0, //是否评价成功 | |
| 18 | + proposal: "", //用户输入的建议 | |
| 19 | + proposal_size: 100, //评价意见和建议限定字数 | |
| 20 | + number: "", //订单单号 | |
| 21 | + beautician: "", //美容师信息 | |
| 22 | + fromType: "服务评价", //评价来源 | |
| 23 | + arrangeTime: "", //服务日期 | |
| 24 | + is_evaluate:0,//是否评价 | |
| 25 | + EvaluateDatetime:"",//评价时间 | |
| 26 | + }, | |
| 27 | + //点击星级 | |
| 28 | + check_stars: function(e) { | |
| 29 | + var th = this; | |
| 30 | + var is_evaluate = th.data.is_evaluate;//0可点击 | |
| 31 | + if (is_evaluate==0){ | |
| 32 | + var index = e.currentTarget.dataset.index; | |
| 33 | + var stars_index = th.data.stars_index; | |
| 34 | + if (index != stars_index) { | |
| 35 | + var url = "/api/weshop/marketing/reservation/star/label/list"; | |
| 36 | + getApp().request.promiseGet(url, { | |
| 37 | + data: { | |
| 38 | + Star: index+1, | |
| 39 | + storeId: a.stoid | |
| 40 | + } | |
| 41 | + }).then(res => { | |
| 42 | + if (res.data.code == 0) { | |
| 43 | + th.setData({ | |
| 44 | + labels: res.data.data | |
| 45 | + }) | |
| 46 | + } else { | |
| 47 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 48 | + return; | |
| 49 | + } | |
| 50 | + }) | |
| 51 | + th.setData({ | |
| 52 | + stars_index: index | |
| 53 | + }) | |
| 54 | + } | |
| 55 | + } | |
| 56 | + }, | |
| 57 | + //输入评价意见和建议 | |
| 58 | + input_proposal: function(e) { | |
| 59 | + var th = this; | |
| 60 | + var value = e.detail.value; | |
| 61 | + th.setData({ | |
| 62 | + proposal: value | |
| 63 | + }) | |
| 64 | + }, | |
| 65 | + //图片失败,默认图片 | |
| 66 | + bind_bnerr1: function(e) { | |
| 67 | + var _errImg = e.target.dataset.errorimg; | |
| 68 | + var _Img = e.target.dataset.img; | |
| 69 | + if (_Img != undefined) { | |
| 70 | + var _errObj = {}; | |
| 71 | + _errObj[_errImg] = "/miniapp/images/no-head.jpg"; | |
| 72 | + this.setData(_errObj) //注意这里的赋值方式,只是将数据列表中的此项图片路径值替换掉 ; | |
| 73 | + } | |
| 74 | + }, | |
| 75 | + //选择标签 | |
| 76 | + check_label: function(e) { | |
| 77 | + var th = this; | |
| 78 | + var evaluate = th.data.is_evaluate;//0为未评价,未评价才可点击标签 | |
| 79 | + if (evaluate==0){ | |
| 80 | + var index = e.currentTarget.dataset.index; | |
| 81 | + var label_id = th.data.labels[index].check; | |
| 82 | + var labels = 'labels[' + index + '].check'; | |
| 83 | + if (label_id) { | |
| 84 | + label_id = 0 | |
| 85 | + } else { | |
| 86 | + label_id = 1 | |
| 87 | + } | |
| 88 | + th.setData({ | |
| 89 | + [labels]: label_id | |
| 90 | + }) | |
| 91 | + } | |
| 92 | + }, | |
| 93 | + //查询美容师信息 | |
| 94 | + query_bea: function() { | |
| 95 | + var th = this; | |
| 96 | + var url = "/api/weshop/marketing/reservation/reservation/page"; | |
| 97 | + var number = th.data.number; //订单编号 | |
| 98 | + getApp().request.promiseGet(url, { | |
| 99 | + data: { | |
| 100 | + storeId: a.stoid, | |
| 101 | + userId: d.user_id, | |
| 102 | + number: number | |
| 103 | + } | |
| 104 | + }).then(res => { | |
| 105 | + if (res.data.code == 0) { | |
| 106 | + var data = res.data.data.pageData; | |
| 107 | + var arrangeTime = data[0].ArrangeTime; | |
| 108 | + th.setData({ | |
| 109 | + beautician: data[0], | |
| 110 | + arrangeTime: arrangeTime | |
| 111 | + }) | |
| 112 | + } else { | |
| 113 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 114 | + } | |
| 115 | + }) | |
| 116 | + }, | |
| 117 | + //获取预约评价 | |
| 118 | + evaluate_get: function() { | |
| 119 | + var th = this; | |
| 120 | + var url = "/api/weshop/evaluation/evaluate/get"; | |
| 121 | + getApp().request.promiseGet(url,{ | |
| 122 | + data: { | |
| 123 | + number: th.data.number, | |
| 124 | + storeId: a.stoid | |
| 125 | + } | |
| 126 | + }).then(res => { | |
| 127 | + if(res.data.code == 0){ | |
| 128 | + th.setData({ | |
| 129 | + stars_index: res.data.data.Star, | |
| 130 | + labels: res.data.data.EvaluationList, | |
| 131 | + proposal: res.data.data.Remark, | |
| 132 | + EvaluateDatetime: res.data.data.EvaluateDatetime.substring(0,19) | |
| 133 | + }) | |
| 134 | + }else{ | |
| 135 | + getApp().my_warnning(res.data.msg,0,th); | |
| 136 | + } | |
| 137 | + }) | |
| 138 | + }, | |
| 139 | + //提交评价 | |
| 140 | + evaluate_save: function() { | |
| 141 | + var th = this; | |
| 142 | + var stars = th.data.stars_index; //评价星级 | |
| 143 | + var proposal = th.data.proposal; | |
| 144 | + //判断是否评级 | |
| 145 | + if (stars < 0) { | |
| 146 | + getApp().my_warnning("请进行评分", 0, th); | |
| 147 | + return false; | |
| 148 | + } else if (proposal==""){ | |
| 149 | + getApp().my_warnning("给点建议呗", 0, th); | |
| 150 | + return false; | |
| 151 | + } | |
| 152 | + var labels = th.data.labels; //星级标签数组 | |
| 153 | + var evaLabList = []; //用户选择的评价标签 | |
| 154 | + // 查询评价标签 | |
| 155 | + for (var i = 0; i < labels.length; i++) { | |
| 156 | + if (labels[i].check) { | |
| 157 | + evaLabList.push(labels[i].LabelName); | |
| 158 | + } | |
| 159 | + } | |
| 160 | + var url = th.data.url + "/api/weshop/evaluation/evaluate/insert"; | |
| 161 | + var posNo = th.data.number; //收银单号 | |
| 162 | + var proposal = th.data.proposal; //用户建议内容 | |
| 163 | + var fromType = th.data.fromType; //评价来源 | |
| 164 | + var json = { | |
| 165 | + "evaLabList": evaLabList, | |
| 166 | + "fromType": 2, | |
| 167 | + "number": posNo, | |
| 168 | + "remark": proposal, | |
| 169 | + "star": stars + 1, | |
| 170 | + "storeId": a.stoid | |
| 171 | + }; | |
| 172 | + var data = JSON.stringify(json); //转换成json格式 | |
| 173 | + wx.request({ | |
| 174 | + url: url, | |
| 175 | + data: data, | |
| 176 | + method: 'POST', | |
| 177 | + header: { | |
| 178 | + 'content-type': 'application/json' | |
| 179 | + }, // 设置请求的 header | |
| 180 | + success: function(res) { | |
| 181 | + if (res.data.code == 0) { | |
| 182 | + th.setData({ | |
| 183 | + sub_evaluate: 1 | |
| 184 | + }) | |
| 185 | + setTimeout(function() { | |
| 186 | + wx.redirectTo({ | |
| 187 | + url: "/pages/user/my_service/tment_order_list" | |
| 188 | + }); | |
| 189 | + }, 1500); | |
| 190 | + } else { | |
| 191 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 192 | + } | |
| 193 | + } | |
| 194 | + }) | |
| 195 | + | |
| 196 | + }, | |
| 197 | + //图片失败,默认图片 | |
| 198 | + bind_bnerr1: function(e) { | |
| 199 | + var _errImg = e.target.dataset.errorimg; | |
| 200 | + var _Img = e.target.dataset.img; | |
| 201 | + if (_Img != undefined) { | |
| 202 | + var _errObj = {}; | |
| 203 | + _errObj[_errImg] = "/miniapp/images/no-head.jpg"; | |
| 204 | + this.setData(_errObj) //注意这里的赋值方式,只是将数据列表中的此项图片路径值替换掉 ; | |
| 205 | + } | |
| 206 | + }, | |
| 207 | + /** | |
| 208 | + * 生命周期函数--监听页面加载 | |
| 209 | + */ | |
| 210 | + onLoad: function(options) { | |
| 211 | + var th = this; | |
| 212 | + th.setData({ | |
| 213 | + number: options.Number, | |
| 214 | + is_evaluate: options.evaluate | |
| 215 | + }) | |
| 216 | + th.query_bea(); | |
| 217 | + }, | |
| 218 | + | |
| 219 | + /** | |
| 220 | + * 生命周期函数--监听页面显示 | |
| 221 | + */ | |
| 222 | + onShow: function() { | |
| 223 | + var th = this; | |
| 224 | + var is_evaluate = th.data.is_evaluate; | |
| 225 | + if (is_evaluate==1){ | |
| 226 | + th.evaluate_get(); | |
| 227 | + } | |
| 228 | + }, | |
| 229 | +}) | |
| 0 | 230 | \ No newline at end of file | ... | ... |
pages/user/my_service/tment_eval.json
0 → 100644
pages/user/my_service/tment_eval.wxml
0 → 100644
| 1 | +<view class="container"> | |
| 2 | + | |
| 3 | + <!-- 头像 --> | |
| 4 | + <view class="flex-center head"> | |
| 5 | + <image class="headimg" src="{{beautician.PhotoUrl==''?iurl+defimgurl:beautician.PhotoUrl}}" lazy-load="true" data-errorimg="beautician.PhotoUrl" binderror="bind_bnerr1" data-img="{{beautician.PhotoUrl}}"></image> | |
| 6 | + </view> | |
| 7 | + | |
| 8 | + <!-- 姓名 --> | |
| 9 | + <view class="flex-level item"> | |
| 10 | + <view class="itemlf flex-level-right"> | |
| 11 | + <view class="fs32">服务美容师:</view> | |
| 12 | + </view> | |
| 13 | + <view class="itemlr fs30 ellipsis-1">{{beautician.BeauticianName}}</view> | |
| 14 | + </view> | |
| 15 | + | |
| 16 | + <!-- 项目 --> | |
| 17 | + <view class="flex-center item"> | |
| 18 | + <view class="itemlf fs32 flex-level-right">服务项目:</view> | |
| 19 | + <view class="itemlr fs30 ellipsis-1">{{beautician.StorageName}}</view> | |
| 20 | + </view> | |
| 21 | + | |
| 22 | + <!-- 时间 --> | |
| 23 | + <view class="flex-center item"> | |
| 24 | + <view class="itemlf fs32 flex-level-right">服务时间:</view> | |
| 25 | + <view class="itemlr fs30">{{arrangeTime}}</view> | |
| 26 | + </view> | |
| 27 | + | |
| 28 | + <!-- 评价时间 --> | |
| 29 | + <view class="flex-center" wx:if="{{is_evaluate==1}}"> | |
| 30 | + <view class="itemlf fs32 flex-level-right">评价时间:</view> | |
| 31 | + <view class="itemlr fs30">{{EvaluateDatetime}}</view> | |
| 32 | + </view> | |
| 33 | + | |
| 34 | + <!-- 设置虚线 --> | |
| 35 | + | |
| 36 | + <view class="flex-center"> | |
| 37 | + <view class="starss"> | |
| 38 | + <image class="stars" src="{{iurl}}{{stars_index>=index?'/miniapp/images/StarsredCk.png':'/miniapp/images/StarswhiteUnCk.png'}}" wx:for="{{5}}" bindtap="check_stars" data-index="{{index}}"></image> | |
| 39 | + </view> | |
| 40 | + </view> | |
| 41 | + <view class="tea_labs"> | |
| 42 | + <view class="flex-center fs26"> | |
| 43 | + <block wx:if="{{is_evaluate==0}}"> | |
| 44 | + <textarea class="rel textarea" placeholder="写其他意见和建议" placeholder-class="fs24" maxlength="{{proposal_size}}" bindinput="input_proposal" value="{{proposal}}"> | |
| 45 | + <!-- 提示已输入多少数字 --> | |
| 46 | + <view if="{{is_evaluate==0}}" class="proposal abs">{{proposal.length}}/{{proposal_size}}</view> | |
| 47 | + </textarea> | |
| 48 | + </block> | |
| 49 | + <block wx:else> | |
| 50 | + <view wx:if="{{proposal!=''}}" class="textarea"> | |
| 51 | + {{proposal}} | |
| 52 | + </view> | |
| 53 | + </block> | |
| 54 | + </view> | |
| 55 | + | |
| 56 | + <view wx:if="{{labels.length>0 && is_evaluate==0}}" class="labels flex fs24 ellipsis-3"> | |
| 57 | + <view class="label {{item.check==1?'checklabel':''}} flex-center" wx:for="{{labels}}" bindtap="check_label" data-index="{{key}}" wx:for-index="key"> | |
| 58 | + <view class="ellipsis-1">{{item.LabelName}}</view> | |
| 59 | + </view> | |
| 60 | + | |
| 61 | + </view> | |
| 62 | + <view wx:if="{{labels.length>0 && is_evaluate==1}}" class="{{labels.length==1 || labels.length==2?'flex-center':''}}" style="width:100%;"> | |
| 63 | + <view class="labels flex fs24 ellipsis-3"> | |
| 64 | + <view class="label {{item.check==1?'checklabel':''}} flex-center" wx:for="{{labels}}" bindtap="check_label" data-index="{{key}}" wx:for-index="key"> | |
| 65 | + <view class="ellipsis-1">{{item.LabelName}}</view> | |
| 66 | + </view> | |
| 67 | + | |
| 68 | + </view> | |
| 69 | + </view> | |
| 70 | + | |
| 71 | + </view> | |
| 72 | + | |
| 73 | + <view wx:if="{{is_evaluate==0}}" class="feedback flex-center fs28"> | |
| 74 | + <view>满意的话请打五星噢,谢谢您的支持!</view> | |
| 75 | + </view> | |
| 76 | + | |
| 77 | + <block wx:if="{{sub_evaluate}}"> | |
| 78 | + <view class="subSuccess"> | |
| 79 | + <view class="flex-center"> | |
| 80 | + <image class="Success" src="{{iurl}}/miniapp/images/yyservice/Success.png"></image> | |
| 81 | + </view> | |
| 82 | + <view class="fs36 flex-center"> | |
| 83 | + <view>评价成功</view> | |
| 84 | + </view> | |
| 85 | + </view> | |
| 86 | + </block> | |
| 87 | +</view> | |
| 88 | +<navigator wx:if="{{is_evaluate==0}}" class="Subs fs32 flex-center" bindtap="evaluate_save"> | |
| 89 | + <view class="Submission flex-center"> | |
| 90 | + <view>确认提交</view> | |
| 91 | + </view> | |
| 92 | +</navigator> | |
| 93 | +<warn id="warn"></warn> | |
| 0 | 94 | \ No newline at end of file | ... | ... |
pages/user/my_service/tment_eval.wxss
0 → 100644
| 1 | +.container { | |
| 2 | + border-top: 7rpx solid rgb(245, 245, 245); | |
| 3 | + padding-bottom: 100rpx; | |
| 4 | + background-color: rgb(255, 255, 255); | |
| 5 | +} | |
| 6 | + | |
| 7 | +.head { | |
| 8 | + height: 270rpx; | |
| 9 | +} | |
| 10 | + | |
| 11 | +.headimg { | |
| 12 | + width: 190rpx; | |
| 13 | + height: 190rpx; | |
| 14 | + border-radius: 50%; | |
| 15 | +} | |
| 16 | + | |
| 17 | +.item { | |
| 18 | + margin-bottom: 20rpx; | |
| 19 | +} | |
| 20 | + | |
| 21 | +.itemlf { | |
| 22 | + width: 195rpx; | |
| 23 | +} | |
| 24 | + | |
| 25 | +.itemlr { | |
| 26 | + width: 360rpx; | |
| 27 | +} | |
| 28 | + | |
| 29 | +.starss { | |
| 30 | + margin-top: 15rpx; | |
| 31 | + border-top: 3rpx dashed rgb(203, 203, 203); | |
| 32 | + padding-top: 25rpx; | |
| 33 | + padding-left: 15rpx; | |
| 34 | +} | |
| 35 | + | |
| 36 | +.stars { | |
| 37 | + width: 50rpx; | |
| 38 | + height: 50rpx; | |
| 39 | + margin-right: 20rpx; | |
| 40 | +} | |
| 41 | + | |
| 42 | +.datetime { | |
| 43 | + width: 190rpx; | |
| 44 | +} | |
| 45 | + | |
| 46 | +.tea_labs { | |
| 47 | + padding: 0rpx 56rpx; | |
| 48 | + margin-top: 20rpx; | |
| 49 | +} | |
| 50 | + | |
| 51 | +.proposal { | |
| 52 | + right: 20rpx; | |
| 53 | + bottom: 20rpx; | |
| 54 | + color: rgb(152, 152, 152); | |
| 55 | +} | |
| 56 | + | |
| 57 | +.textarea { | |
| 58 | + width: 100%; | |
| 59 | + height: 200rpx; | |
| 60 | + margin-top: 70rpx; | |
| 61 | + border: 2rpx solid rgb(203, 203, 203); | |
| 62 | + border-radius: 13rpx; | |
| 63 | + padding-top: 25rpx; | |
| 64 | + padding-left: 30rpx; | |
| 65 | + margin-bottom: 30rpx; | |
| 66 | + padding-right: 15rpx; | |
| 67 | + padding-bottom: 20rpx; | |
| 68 | +} | |
| 69 | + | |
| 70 | +.labels { | |
| 71 | + display: inline-block; | |
| 72 | + max-height: 240rxp; | |
| 73 | + line-height: 50rpx; | |
| 74 | + padding-left: 15rpx; | |
| 75 | +} | |
| 76 | + | |
| 77 | +.label { | |
| 78 | + padding: 0rpx 10rpx; | |
| 79 | + height: 48rpx; | |
| 80 | + line-height: 48rpx; | |
| 81 | + border: 2rpx solid rgb(218, 218, 218); | |
| 82 | + color: rgb(152, 152, 152); | |
| 83 | + border-radius: 5rpx; | |
| 84 | + margin-right: 20rpx; | |
| 85 | + width: 165rpx; | |
| 86 | + display: inline-block; | |
| 87 | + text-align: center; | |
| 88 | + margin-bottom: 10rpx; | |
| 89 | +} | |
| 90 | + | |
| 91 | +/* 选择标签的样式 */ | |
| 92 | + | |
| 93 | +.checklabel { | |
| 94 | + border: 2rpx solid rgb(214, 1, 33); | |
| 95 | + background-color: rgb(255, 231, 235); | |
| 96 | + color: rgb(214, 1, 33); | |
| 97 | +} | |
| 98 | + | |
| 99 | +.feedback { | |
| 100 | + color: rgb(152, 152, 152); | |
| 101 | + margin-bottom: 70rpx; | |
| 102 | +} | |
| 103 | + | |
| 104 | +.Subs { | |
| 105 | + background-color: rgb(255, 255, 255); | |
| 106 | + position: fixed; | |
| 107 | + width: 100%; | |
| 108 | + bottom: 40rpx; | |
| 109 | +} | |
| 110 | + | |
| 111 | +.Submission { | |
| 112 | + width: 400rpx; | |
| 113 | + height: 65rpx; | |
| 114 | + border-radius: 60rpx; | |
| 115 | + background-color: rgb(214, 1, 33); | |
| 116 | + color: rgb(255, 255, 255); | |
| 117 | +} | |
| 118 | + | |
| 119 | +.clonri { | |
| 120 | + margin: 0rpx; | |
| 121 | +} | |
| 122 | + | |
| 123 | +.subSuccess { | |
| 124 | + position: fixed; | |
| 125 | + z-index: 3; | |
| 126 | + top: 435rpx; | |
| 127 | + left: 66rpx; | |
| 128 | + background-color: #a6a6a6a4; | |
| 129 | + width: 615rpx; | |
| 130 | + height: 315rpx; | |
| 131 | + border-radius: 20rpx; | |
| 132 | + color: rgb(255, 255, 255); | |
| 133 | +} | |
| 134 | + | |
| 135 | +.Success { | |
| 136 | + width: 110rpx; | |
| 137 | + height: 110rpx; | |
| 138 | + margin-top: 50rpx; | |
| 139 | + margin-bottom: 45rpx; | |
| 140 | +} | ... | ... |
pages/user/my_service/tment_order_list.js
0 → 100644
| 1 | +var e = getApp(), | |
| 2 | + a = e.globalData.setting, | |
| 3 | + os = a, | |
| 4 | + t = e.request, | |
| 5 | + d = e.globalData; | |
| 6 | +Page({ | |
| 7 | + | |
| 8 | + /** | |
| 9 | + * 页面的初始数据 | |
| 10 | + */ | |
| 11 | + data: { | |
| 12 | + url: a.url, //接口网址 | |
| 13 | + iurl: a.imghost, //图片网址 | |
| 14 | + activeCategoryId: 0, //类别选中下标 | |
| 15 | + defimgurl: "/miniapp/images/yyservice/yyxmdefault.jpg", | |
| 16 | + categories: [{ | |
| 17 | + name: "全部", | |
| 18 | + id: 0 | |
| 19 | + }, { | |
| 20 | + name: "未服务", | |
| 21 | + id: 1 | |
| 22 | + }, { | |
| 23 | + name: "已服务", | |
| 24 | + id: 2 | |
| 25 | + }, { | |
| 26 | + name: "已过期", | |
| 27 | + id: 3 | |
| 28 | + }], | |
| 29 | + tm_order_list: [], //我的预约订单列表 | |
| 30 | + curpage: 1, //当前分页数 | |
| 31 | + pageSize: 10, //页大小 | |
| 32 | + total: 0, | |
| 33 | + ismore: 0, //是否加载完毕 | |
| 34 | + is_read: 0, //是否加载接口 | |
| 35 | + states: 4, //4为取消预约 | |
| 36 | + }, | |
| 37 | + | |
| 38 | + /** | |
| 39 | + * 生命周期函数--监听页面加载 | |
| 40 | + */ | |
| 41 | + onLoad: function(options) { | |
| 42 | + | |
| 43 | + }, | |
| 44 | + changeTab: function(e) { | |
| 45 | + var th = this; | |
| 46 | + var id = e.currentTarget.dataset.id; | |
| 47 | + var activeCategoryId = th.data.activeCategoryId; | |
| 48 | + if (id != activeCategoryId) { | |
| 49 | + th.setData({ | |
| 50 | + activeCategoryId: id, | |
| 51 | + tm_order_list: [], | |
| 52 | + curpage: 1, | |
| 53 | + ismore: 0, | |
| 54 | + is_read: 0 | |
| 55 | + }) | |
| 56 | + th.query_orderList(); | |
| 57 | + } else { | |
| 58 | + return false; | |
| 59 | + } | |
| 60 | + }, | |
| 61 | + //显示核销码 | |
| 62 | + code_show: function(e) { | |
| 63 | + var th = this; | |
| 64 | + //--获取成功的时候-- | |
| 65 | + var no = e.currentTarget.dataset.order_sn; | |
| 66 | + var qc_com = th.selectComponent("#qc_com"); //组件的id | |
| 67 | + var obj = { | |
| 68 | + val: no, | |
| 69 | + content: "请将二维码展示给核销员,使用更快捷" | |
| 70 | + }; | |
| 71 | + qc_com.open(obj) | |
| 72 | + }, | |
| 73 | + query_orderList: function() { | |
| 74 | + wx.showLoading({ | |
| 75 | + title: '加载中', | |
| 76 | + }) | |
| 77 | + var th = this; | |
| 78 | + var url = "/api/weshop/marketing/reservation/reservation/page"; | |
| 79 | + | |
| 80 | + var state_index = th.data.activeCategoryId; | |
| 81 | + if (state_index == 0) { | |
| 82 | + state_index = ""; | |
| 83 | + } else { | |
| 84 | + --state_index; | |
| 85 | + } | |
| 86 | + th.setData({ | |
| 87 | + is_read: 0 | |
| 88 | + }) | |
| 89 | + getApp().request.promiseGet(url, { | |
| 90 | + data: { | |
| 91 | + storeId: a.stoid, | |
| 92 | + userId: d.user_id, | |
| 93 | + state: state_index, | |
| 94 | + page: th.data.curpage, | |
| 95 | + pageSize: th.data.pageSize | |
| 96 | + } | |
| 97 | + }).then(res => { | |
| 98 | + wx.hideLoading(); | |
| 99 | + if (res.data.code == 0) { | |
| 100 | + th.data.curpage++; | |
| 101 | + var arr1 = th.data.tm_order_list; | |
| 102 | + var arr2 = res.data.data.pageData; | |
| 103 | + var arr3 = [...arr1, ...arr2]; | |
| 104 | + var ismore = 0; | |
| 105 | + if (arr3.length == res.data.data.total) ismore = 1 | |
| 106 | + th.setData({ | |
| 107 | + tm_order_list: arr3, | |
| 108 | + total: res.data.data.total, | |
| 109 | + ismore: ismore, | |
| 110 | + is_read: 1 | |
| 111 | + }), wx.stopPullDownRefresh(); //停止下拉刷新 { | |
| 112 | + } else { | |
| 113 | + wx.hideLoading(); | |
| 114 | + th.setData({ | |
| 115 | + tm_order_list: [], | |
| 116 | + is_read: 1 | |
| 117 | + }) | |
| 118 | + } | |
| 119 | + }) | |
| 120 | + | |
| 121 | + }, | |
| 122 | + //取消预约 | |
| 123 | + cancel_tment: function(e) { | |
| 124 | + var th = this; | |
| 125 | + var th = this; | |
| 126 | + var my_confirm = th.selectComponent("#my_confirm"); //组件的id | |
| 127 | + my_confirm.open( | |
| 128 | + "确定取消?", | |
| 129 | + "取消", | |
| 130 | + "确定", | |
| 131 | + function() { | |
| 132 | + my_confirm.open_cancel(0); | |
| 133 | + }, | |
| 134 | + function() { | |
| 135 | + my_confirm.open_cancel(0); | |
| 136 | + var index = e.currentTarget.dataset.index; | |
| 137 | + var states = th.data.states; | |
| 138 | + var order_list = th.data.tm_order_list; | |
| 139 | + var number = order_list[index].Number; | |
| 140 | + var json = { | |
| 141 | + "number": number, | |
| 142 | + "storeId": a.stoid, | |
| 143 | + "states": 3 | |
| 144 | + }; | |
| 145 | + var data = JSON.stringify(json); | |
| 146 | + var url = th.data.url + "/api/weshop/marketing/reservation/reservation/update"; //预约接口地址 | |
| 147 | + wx.request({ | |
| 148 | + url: url, | |
| 149 | + data: data, | |
| 150 | + method: 'put', | |
| 151 | + header: { | |
| 152 | + 'content-type': 'application/json' | |
| 153 | + }, // 设置请求的 header | |
| 154 | + success: function(res) { | |
| 155 | + if (res.data.code == 0) { | |
| 156 | + getApp().my_warnning("取消成功", 1, th); | |
| 157 | + var id = th.data.activeCategoryId; | |
| 158 | + if (id == 1) { | |
| 159 | + order_list.splice(index, 1); | |
| 160 | + th.setData({ | |
| 161 | + tm_order_list: order_list | |
| 162 | + }) | |
| 163 | + } else { | |
| 164 | + var start = 'tm_order_list[' + index + '].State'; | |
| 165 | + th.setData({ | |
| 166 | + [start]: 3 | |
| 167 | + }) | |
| 168 | + } | |
| 169 | + wx.stopPullDownRefresh(); //停止下拉刷新 | |
| 170 | + } else { | |
| 171 | + getApp().my_warnning(res.data.msg, 0, th); | |
| 172 | + } | |
| 173 | + } | |
| 174 | + }) | |
| 175 | + }) | |
| 176 | + | |
| 177 | + }, | |
| 178 | + //图片失败,默认图片 | |
| 179 | + bind_bnerr1: function(e) { | |
| 180 | + var _errImg = e.target.dataset.errorimg; | |
| 181 | + var _Img = e.target.dataset.img; | |
| 182 | + if (_Img != undefined) { | |
| 183 | + var _errObj = {}; | |
| 184 | + _errObj[_errImg] = "/miniapp/images/no_cate_def.png"; | |
| 185 | + this.setData(_errObj) //注意这里的赋值方式,只是将数据列表中的此项图片路径值替换掉 ; | |
| 186 | + } | |
| 187 | + }, | |
| 188 | + /** | |
| 189 | + * 生命周期函数--监听页面显示 | |
| 190 | + */ | |
| 191 | + onShow: function() { | |
| 192 | + var th = this; | |
| 193 | + th.setData({ | |
| 194 | + curpage: 1, | |
| 195 | + total: 0, | |
| 196 | + ismore: 0, | |
| 197 | + is_read: 0, | |
| 198 | + tm_order_list: [] | |
| 199 | + }) | |
| 200 | + th.query_orderList(); | |
| 201 | + }, | |
| 202 | + | |
| 203 | + /** | |
| 204 | + * 页面上拉触底事件的处理函数 | |
| 205 | + */ | |
| 206 | + onReachBottom: function() { | |
| 207 | + var th = this; | |
| 208 | + if (th.data.total <= th.data.pageSize) return; | |
| 209 | + if (th.data.ismore) return; | |
| 210 | + | |
| 211 | + wx.showLoading({ | |
| 212 | + title: '加载中...', | |
| 213 | + }) | |
| 214 | + th.query_orderList(); | |
| 215 | + }, | |
| 216 | + //关闭导航 | |
| 217 | + close: function() { | |
| 218 | + var th = this; | |
| 219 | + var nav_b = th.selectComponent("#nav_b"); //组件的id | |
| 220 | + nav_b.close_box(); | |
| 221 | + } | |
| 222 | + | |
| 223 | +}) | |
| 0 | 224 | \ No newline at end of file | ... | ... |
pages/user/my_service/tment_order_list.json
0 → 100644
| 1 | +{ | |
| 2 | + "navigationBarTitleText": "我的预约", | |
| 3 | + "usingComponents": { | |
| 4 | + "qr_code": "/components/qr_code/qr_code", | |
| 5 | + "warn": "/components/long_warn/long_warn", | |
| 6 | + "my_confirm": "/components/my_confirm/my_confirm", | |
| 7 | + "nav_b": "/components/nav_b/nav_b" | |
| 8 | + } | |
| 9 | +} | |
| 0 | 10 | \ No newline at end of file | ... | ... |
pages/user/my_service/tment_order_list.wxml
0 → 100644
| 1 | +<view class="container" catchtap="close"> | |
| 2 | + <!-- 导航栏 --> | |
| 3 | + <view class="type-navbar padding flex-vertical fs30"> | |
| 4 | + <view class="type-box flex-center {{activeCategoryId==item.id?'chtypebox':''}}" wx:for="{{categories}}" bindtap="changeTab" data-id="{{item.id}}"> | |
| 5 | + <view>{{item.name}}</view> | |
| 6 | + </view> | |
| 7 | + </view> | |
| 8 | + <view class="itemMax"> | |
| 9 | + <!-- 预约项目 --> | |
| 10 | + <view wx:for="{{tm_order_list}}"> | |
| 11 | + <!-- 商品编号和状态 --> | |
| 12 | + <view class="Commodity_number flex-vertical-between fs26 padding"> | |
| 13 | + <!--商品编号 --> | |
| 14 | + <text class="order_number ellipsis-1" selectable='true'>订单编号:{{item.Number}}</text> | |
| 15 | + <!-- 订单状态 --> | |
| 16 | + <view class="flex-center state"> | |
| 17 | + <view wx:if="{{item.State==0}}">未服务</view> | |
| 18 | + <view wx:if="{{item.State==1}}">已服务</view> | |
| 19 | + <view wx:if="{{item.State==2}}">已过期</view> | |
| 20 | + <view wx:if="{{item.State==3}}">已取消</view> | |
| 21 | + <view wx:if="{{item.State==4}}">已评价</view> | |
| 22 | + </view> | |
| 23 | + </view> | |
| 24 | + | |
| 25 | + <!-- 项目属性 --> | |
| 26 | + <navigator class="items padding flex-vertical" url="/pages/user/my_service/tment_details?number={{item.Number}}"> | |
| 27 | + | |
| 28 | + <view class="flex-center fs26"> | |
| 29 | + <view class="itemimage"> | |
| 30 | + <image class="itemimage" src="{{item.ImageUrl==''?iurl+defimgurl:item.ImageUrl}}" lazy-load="true" data-errorimg="tm_order_list[{{index}}].ImageUrl" binderror="bind_bnerr1" data-img="{{item.ImageUrl}}"></image> | |
| 31 | + </view> | |
| 32 | + <!-- 项目内容 --> | |
| 33 | + <view class="details"> | |
| 34 | + <view class="item flex-vertical base"> | |
| 35 | + <view class="itemname flex-level-right">预约门店:</view> | |
| 36 | + <view class="itemvalue ellipsis-1">{{item.StorageName}}</view> | |
| 37 | + </view> | |
| 38 | + <view class="item flex-vertical base"> | |
| 39 | + <view class="itemname flex-level-right">预约项目:</view> | |
| 40 | + <view class="itemvalue ellipsis-1">{{item.ServiceName}}</view> | |
| 41 | + </view> | |
| 42 | + <view class="item flex-vertical base"> | |
| 43 | + <block wx:if="{{item.State==1 || item.State==4}}"> | |
| 44 | + <view class="itemname flex-level-right">服务美容师: | |
| 45 | + </view> | |
| 46 | + </block> | |
| 47 | + <block wx:else> | |
| 48 | + <view class="itemname flex-level-right">预约美容师: | |
| 49 | + </view> | |
| 50 | + </block> | |
| 51 | + <view class="itemvalue ellipsis-1">{{item.BeauticianName}}</view> | |
| 52 | + </view> | |
| 53 | + <view class="item flex-vertical base"> | |
| 54 | + <view class="itemname flex-level-right">预约时间:</view> | |
| 55 | + <view>{{item.ArrangeTime}}</view> | |
| 56 | + </view> | |
| 57 | + <view class="item flex-vertical base" wx:if="{{item.WriteTime==''?false:true}}"> | |
| 58 | + <view class="itemname flex-level-right">服务时间:</view> | |
| 59 | + <view>{{item.WriteTime}}</view> | |
| 60 | + </view> | |
| 61 | + </view> | |
| 62 | + | |
| 63 | + </view> | |
| 64 | + </navigator> | |
| 65 | + <view class="Unim flex-right-vertical fs26 padding"> | |
| 66 | + <image wx:if="{{item.State==0}}" src="{{iurl}}miniapp/images/order/code.png" class="code" bindtap="code_show" data-order_sn="{{item.Number}}"></image> | |
| 67 | + <block wx:if="{{item.State==0}}"> | |
| 68 | + <view class="Unimportance flex-level" data-index="{{index}}" bindtap="cancel_tment">取消预约</view> | |
| 69 | + </block> | |
| 70 | + <block wx:else> | |
| 71 | + <navigator url="/pages/user/my_service/tment_details?number={{item.Number}}" class="Unimportance flex-level">查看详情</navigator> | |
| 72 | + </block> | |
| 73 | + <navigator wx:if="{{item.State==0}}" class="important Unimportance flex-level" url="/pages/user/my_service/beauty_deta?BeauticianID={{item.BeauticianID}}&number={{item.Number}}&itemId={{item.ServiceID}}&modify=1&projectId={{item.ProjectID}}">更改时间</navigator> | |
| 74 | + <navigator wx:if="{{item.State==1}}" url="/pages/user/my_service/tment_eval?Number={{item.Number}}&evaluate={{0}}" class="important Unimportance flex-level">发表评价</navigator> | |
| 75 | + <navigator wx:if="{{item.State==2 || item.State==3}}" url="/pages/user/my_service/appment_main?ProjectID={{item.ProjectID}}&BuyType={{item.BuyType}}&service_id={{item.ServiceID}}" class="important Unimportance flex-level">重新预约</navigator> | |
| 76 | + <navigator wx:if="{{item.State==4}}" url="/pages/user/my_service/tment_eval?Number={{item.Number}}&evaluate={{1}}" class="important Unimportance flex-level">查看评价</navigator> | |
| 77 | + </view> | |
| 78 | + </view> | |
| 79 | + <view class="exactly flex-center fs26" wx:if="{{ismore && tm_order_list.length>=3}}"> | |
| 80 | + <view class="line"></view> | |
| 81 | + <view class="exactly_text">到底了</view> | |
| 82 | + <view class="line"></view> | |
| 83 | + </view> | |
| 84 | + </view> | |
| 85 | +</view> | |
| 86 | + | |
| 87 | +<!-- 无预约订单 --> | |
| 88 | +<view class="empty_order" wx:if="{{tm_order_list.length<1 && is_read}}" catchtap="close"> | |
| 89 | + <view class="flex-level"> | |
| 90 | + <image src="{{iurl}}miniapp/images/order/empty_order.png" lazy-load="true"></image> | |
| 91 | + </view> | |
| 92 | + <view class="flex-level fs30 xc-ash">无预约记录</view> | |
| 93 | + <view class="flex-level"> | |
| 94 | + <navigator url="/pages/user/my_service/i_service" bindtap="goto"> | |
| 95 | + <view class="flex-center fs32 white">立即预约</view> | |
| 96 | + </navigator> | |
| 97 | + </view> | |
| 98 | +</view> | |
| 99 | +<my_confirm id="my_confirm"></my_confirm> | |
| 100 | +<!-- 制作一个圆球导航 --> | |
| 101 | +<nav_b id="nav_b"></nav_b> | |
| 102 | +<!-- 弹出框扫描 --> | |
| 103 | +<qr_code id="qc_com"></qr_code> | |
| 104 | +<warn id="warn"></warn> | |
| 0 | 105 | \ No newline at end of file | ... | ... |
pages/user/my_service/tment_order_list.wxss
0 → 100644
| 1 | +page { | |
| 2 | + height: 100%; | |
| 3 | +} | |
| 4 | + | |
| 5 | +.container { | |
| 6 | + background-color: rgb(255, 255, 255); | |
| 7 | +} | |
| 8 | + | |
| 9 | +.type-navbar { | |
| 10 | + border-top: 3rpx solid rgb(221, 221, 221); | |
| 11 | + display: flex; | |
| 12 | + justify-content: space-between; | |
| 13 | + position: fixed; | |
| 14 | + background-color: rgb(255,255,255); | |
| 15 | + width:696rpx; | |
| 16 | +} | |
| 17 | +.itemMax{ | |
| 18 | + margin-top: 93rpx; | |
| 19 | +} | |
| 20 | + | |
| 21 | +.type-box { | |
| 22 | + height: 88rpx; | |
| 23 | + line-height: 88rpx; | |
| 24 | + padding: 0rpx 15rpx; | |
| 25 | + border-bottom: 5rpx solid rgb(255, 255, 255); | |
| 26 | +} | |
| 27 | + | |
| 28 | +.chtypebox { | |
| 29 | + border-bottom: 5rpx solid rgb(224, 18, 18); | |
| 30 | +} | |
| 31 | + | |
| 32 | +.Commodity_number { | |
| 33 | + height: 80rpx; | |
| 34 | + border-top: 13rpx solid rgb(245, 245, 245); | |
| 35 | +} | |
| 36 | + | |
| 37 | +.Commodity_number image { | |
| 38 | + width: 30rpx; | |
| 39 | + height: 32rpx; | |
| 40 | +} | |
| 41 | + | |
| 42 | +.padding { | |
| 43 | + padding: 0rpx 27rpx; | |
| 44 | +} | |
| 45 | + | |
| 46 | +.lin { | |
| 47 | + border-left: 2rpx solid rgb(211, 29, 54); | |
| 48 | + margin-left: 17rpx; | |
| 49 | + margin-right: 14rpx; | |
| 50 | + height: 40rpx; | |
| 51 | +} | |
| 52 | + | |
| 53 | +.order_number { | |
| 54 | + max-width: 550rpx; | |
| 55 | +} | |
| 56 | +.state{ | |
| 57 | + color: rgb(216,63,82); | |
| 58 | +} | |
| 59 | +.items { | |
| 60 | + border-top: 4rpx solid rgb(245, 245, 245); | |
| 61 | + border-bottom: 4rpx solid rgb(245, 245, 245); | |
| 62 | + height: 260rpx; | |
| 63 | +} | |
| 64 | +.code{ | |
| 65 | + width: 55rpx; | |
| 66 | + height: 55rpx; | |
| 67 | +} | |
| 68 | +.itemimage { | |
| 69 | + width: 190rpx; | |
| 70 | + height: 190rpx; | |
| 71 | + margin-right: 20rpx; | |
| 72 | +} | |
| 73 | + | |
| 74 | +.details { | |
| 75 | + height: 190rpx; | |
| 76 | +} | |
| 77 | + | |
| 78 | +.itemname { | |
| 79 | + width: 150rpx; | |
| 80 | + margin-right: 20rpx; | |
| 81 | +} | |
| 82 | + | |
| 83 | +.itemvalue { | |
| 84 | + max-width: 300rpx; | |
| 85 | +} | |
| 86 | + | |
| 87 | +.Unimportance { | |
| 88 | + width: 140rpx; | |
| 89 | + height: 40rpx; | |
| 90 | + line-height: 40rpx; | |
| 91 | + border-radius: 8rpx; | |
| 92 | + background-color: rgb(255, 255, 255); | |
| 93 | + margin-left: 20rpx; | |
| 94 | + border: 2rpx solid rgb(191, 191, 191); | |
| 95 | +} | |
| 96 | + | |
| 97 | +.important { | |
| 98 | + background-color: rgb(212, 28, 52); | |
| 99 | + border: 2rpx solid rgb(212, 28, 52); | |
| 100 | + color: rgb(255, 255, 255); | |
| 101 | +} | |
| 102 | + | |
| 103 | +.Unim { | |
| 104 | + height: 110rpx; | |
| 105 | +} | |
| 106 | + | |
| 107 | +.exactly { | |
| 108 | + height: 80rpx; | |
| 109 | + background-color: rgb(245, 245, 245); | |
| 110 | +} | |
| 111 | + | |
| 112 | +.exactly_text { | |
| 113 | + margin: 0rpx 15rpx; | |
| 114 | +} | |
| 115 | + | |
| 116 | +.line { | |
| 117 | + border-top: 2rpx solid rgb(0, 0, 0); | |
| 118 | + width: 130rpx; | |
| 119 | +} | |
| 120 | + | |
| 121 | +/* 无预约 */ | |
| 122 | + | |
| 123 | +.empty_order image { | |
| 124 | + width: 300rpx; | |
| 125 | + height: 280rpx; | |
| 126 | + margin-top: 202rpx; | |
| 127 | +} | |
| 128 | + | |
| 129 | +.empty_order .xc-ash { | |
| 130 | + margin-top: 10rpx; | |
| 131 | + font-weight: 600px; | |
| 132 | +} | |
| 133 | + | |
| 134 | +.empty_order navigator { | |
| 135 | + margin-top: 60rpx; | |
| 136 | + border-radius: 40rpx; | |
| 137 | +} | |
| 138 | + | |
| 139 | +.empty_order navigator view { | |
| 140 | + width: 247rpx; | |
| 141 | + height: 65rpx; | |
| 142 | + background-color: rgb(255, 72, 72); | |
| 143 | + border-radius: 40rpx; | |
| 144 | +} | |
| 145 | +.base{ | |
| 146 | + display: flex; | |
| 147 | + height: 38rpx; | |
| 148 | + line-height: 38rpx; | |
| 149 | + align-items: baseline; | |
| 150 | +} | |
| 0 | 151 | \ No newline at end of file | ... | ... |
pages/user/user_fw/user_fw.js
| ... | ... | @@ -66,7 +66,7 @@ Page({ |
| 66 | 66 | return false; |
| 67 | 67 | } |
| 68 | 68 | |
| 69 | - var ewm="^"+this.data.userinfo.erpvipid+"|"+item.Id+"|TY01|"; | |
| 69 | + var ewm="^"+this.data.userinfo.erpvipid+"|"+item.Id+"|4|TY01|"; | |
| 70 | 70 | var tt=this.format_time(1); |
| 71 | 71 | ewm=ewm+tt; |
| 72 | 72 | th.data.qr_code_object.val=ewm; | ... | ... |
pages/user/userinfo/userinfo.js
| ... | ... | @@ -741,26 +741,23 @@ Page({ |
| 741 | 741 | var identity_card = th.data.identity_card;//身份证 |
| 742 | 742 | console.log("身份证",identity_card); |
| 743 | 743 | |
| 744 | - if (identity_card == "" || identity_card == null ) { | |
| 745 | - getApp().my_warnning("请输入身份证", 0, th); | |
| 746 | - return false; | |
| 747 | - } else if (!(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(identity_card))){ | |
| 744 | + if (identity_card != "" && !(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(identity_card))){ | |
| 748 | 745 | getApp().my_warnning("身份证号码错误",0, th); |
| 749 | 746 | return false; |
| 750 | 747 | } |
| 751 | 748 | var address = th.data.address;//地址 |
| 752 | - console.log("地址1010101", address) | |
| 753 | - if (address == "" || address == null) { | |
| 754 | - getApp().my_warnning("请输入地址", 0, th); | |
| 755 | - return false; | |
| 756 | - } | |
| 749 | + // console.log("地址1010101", address) | |
| 750 | + // if (address == "" || address == null) { | |
| 751 | + // getApp().my_warnning("请输入地址", 0, th); | |
| 752 | + // return false; | |
| 753 | + // } | |
| 757 | 754 | //保存所属门店的id |
| 758 | 755 | var sto_sele_id=th.data.sto_sele_id; |
| 759 | - console.log("请输入所属门店的id", sto_sele_id); | |
| 760 | - if (sto_sele_id == null || sto_sele_id==""){ | |
| 761 | - getApp().my_warnning("请输入所属门店", 0, th); | |
| 762 | - return false; | |
| 763 | - } | |
| 756 | + // console.log("请输入所属门店的id", sto_sele_id); | |
| 757 | + // if (sto_sele_id == null || sto_sele_id==""){ | |
| 758 | + // getApp().my_warnning("请输入所属门店", 0, th); | |
| 759 | + // return false; | |
| 760 | + // } | |
| 764 | 761 | console.log("要保存的数据", sex, consumption, identity_card, address, user_name); |
| 765 | 762 | var datas = { |
| 766 | 763 | mobile: phone,//手机号码 | ... | ... |