Commit 6a260123b174b5e90bc4cadbe2429f3427211b4b

Authored by season
2 parents 390547d9 5bf0c2a1

我的服务合并(20191121版本)

Showing 46 changed files with 4316 additions and 10 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/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
  1 +{
  2 + "component": true,
  3 + "usingComponents": {}
  4 +}
0 5 \ No newline at end of file
... ...
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 + }
  32 +
  33 + }
  34 +
  35 +})
0 36 \ No newline at end of file
... ...
components/nav_b/nav_b.json 0 → 100644
  1 +{
  2 + "component": true,
  3 + "usingComponents": {}
  4 +}
0 5 \ No newline at end of file
... ...
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: 650rpx;
  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 + var th = this;
  51 + var is_textea = th.data.is_textea;
  52 + th.setData({
  53 + is_textea: 1,
  54 + beautician: 0
  55 + })
  56 +
  57 + },
  58 + onclickstore: function() {
  59 + var th = this;
  60 + var store = th.data.store;
  61 + if (store) {
  62 + th.setData({
  63 + store: 0,
  64 + })
  65 + } else {
  66 + th.setData({
  67 + beautician: 0,
  68 + store: 1,
  69 + })
  70 + if (th.data.store_list.length < 1) {
  71 + wx.showLoading({
  72 + title: '加载中',
  73 + })
  74 + th.query_store();
  75 + }
  76 + }
  77 + },
  78 + //输入的备注
  79 + input_remarks: function(e) {
  80 + var remarks = e.detail.value;
  81 + this.setData({
  82 + remarks: remarks
  83 + })
  84 + },
  85 + //提交预约
  86 + sub_success: function(e) {
  87 + var th = this;
  88 + th.setData({
  89 + is_textea: 0
  90 + })
  91 + var formid = e.detail.formId; //发送预约成功模版信息
  92 + var store = th.data.store_name; //门店名称
  93 + var bea_name = th.data.beautician_name; //美容师名称
  94 + var time = th.data.time; //预约时间
  95 + var is_sub = th.data.is_sub; //是否重复提交
  96 + //提交预约前的判断
  97 + if (store == "") {
  98 + getApp().my_warnning("请选择服务门店", 0, th);
  99 + return false;
  100 + } else if (bea_name == "") {
  101 + getApp().my_warnning("请选择美容师", 0, th);
  102 + return false;
  103 + } else if (time == "") {
  104 + getApp().my_warnning("请选择预约时间", 0, th);
  105 + return false;
  106 + } else {
  107 + if (is_sub == 0) {
  108 + th.setData({
  109 + is_sub: 1
  110 + })
  111 + var url = th.data.inurl + "/api/weshop/marketing/reservation/reservation/insert"; //接口路径
  112 + var serviceId = th.data.itemId; //服务id
  113 + var beauticianID = th.data.beauticianID; //美容师id
  114 + var buyType = th.data.buyType; //服务项目类型
  115 + var storeId = a.stoid; //商家id
  116 + var storageId = th.data.storageId; //门店id
  117 + var userId = d.user_id; //用户id
  118 + var remarks = th.data.remarks; //用户备注
  119 + var project_id = th.data.project_id; //项目id
  120 + var validay = th.data.validay;
  121 + var json = {
  122 + "arrangeTime": time,
  123 + "beauticianId": beauticianID,
  124 + "buyType": buyType,
  125 + "effectiveDay": "",
  126 + "number": "",
  127 + "projectId": project_id,
  128 + "remark": remarks,
  129 + "serviceId": serviceId,
  130 + "states": 0,
  131 + "storageId": storageId,
  132 + "storeId": storeId,
  133 + "userId": userId,
  134 + "validay": validay
  135 + }
  136 + var data = JSON.stringify(json);
  137 + wx.request({
  138 + url: url,
  139 + data: json,
  140 + method: 'post',
  141 + header: {
  142 + 'content-type': 'application/json'
  143 + }, // 设置请求的 header
  144 + success: function(res) {
  145 + th.setData({
  146 + is_sub: 0
  147 + })
  148 + if (res.data.code == 0) {
  149 + getApp().my_warnning("预约成功", 0, th);
  150 + var store_name = th.data.store_name; //预约门店
  151 + var number = res.data.data.Number;
  152 + var temp_url = "/api/wx/open/app/user/templatMessageSend"; //模版接口
  153 + var userinfo = getApp().globalData.userInfo;
  154 + var name = d.userInfo.nickname;
  155 + var json = {
  156 + "formId": formid,
  157 + "keyWord": [{
  158 + "keyword": res.data.data.StorageName
  159 + }, {
  160 + "keyword": name
  161 + }, {
  162 + "keyword": number
  163 + }, {
  164 + "keyword": res.data.data.Address
  165 + }, {
  166 + "keyword": time
  167 + }, {
  168 + "keyword": res.data.data.BeauticianName
  169 + }, {
  170 + "keyword": res.data.data.ServiceName
  171 + }],
  172 + "page": "/pages/user/my_service/tment_details?number=" + number,
  173 + "storeId": a.stoid,
  174 + "typeId": "1011",
  175 + "userId": d.user_id
  176 + };
  177 + var data = JSON.stringify(json);
  178 + //调用发送预约成功模版接口
  179 + wx.request({
  180 + url: th.data.inurl + temp_url,
  181 + data: data,
  182 + method: 'post',
  183 + header: {
  184 + 'content-type': 'application/json'
  185 + }, // 设置请求的 header
  186 + success: function(data) {}
  187 + })
  188 + setTimeout(function() {
  189 + wx.redirectTo({
  190 + url: "/pages/user/my_service/tment_details?number=" + number
  191 + });
  192 + }, 1000);
  193 + } else {
  194 + getApp().my_warnning(res.data.msg, 0, th);
  195 + th.setData({
  196 + is_sub: 0
  197 + })
  198 + }
  199 + }
  200 + })
  201 + }
  202 + }
  203 + },
  204 + goto: function(e) {
  205 + var th = this;
  206 + th.setData({
  207 + beautician: 0
  208 + })
  209 + if (th.data.store_name == "") {
  210 + getApp().my_warnning("请选择服务门店", 0, th);
  211 + } else if (th.data.beautician_name == "") {
  212 + getApp().my_warnning("请选择美容师", 0, th);
  213 + } else {
  214 + var url = e.currentTarget.dataset.url;
  215 + getApp().goto(url);
  216 + }
  217 + },
  218 + //点击选择门店
  219 + choose_for_store: function(e) {
  220 + var th = this;
  221 + var index_c = e.currentTarget.dataset.ind;
  222 + var fir_pick_index = th.data.fir_pick_index;
  223 + //判断是否点击选中的门店,防止重复点击重复设置选中下标
  224 + if (index_c == fir_pick_index) {
  225 + return false;
  226 + } else {
  227 + th.setData({
  228 + fir_pick_index: index_c,
  229 + beautician_name: "",
  230 + time: "",
  231 + tment_count: ""
  232 + })
  233 + }
  234 + },
  235 + //确认选择门店
  236 + choice_store: function() {
  237 + var th = this;
  238 + var index = th.data.fir_pick_index;
  239 + var store_name = th.data.store_list[index].StorageName;
  240 + var Id = th.data.store_list[index].Id;
  241 + th.setData({
  242 + store: 0,
  243 + store_name: store_name,
  244 + storageId: Id
  245 + })
  246 + },
  247 + onReachBottom: function() {
  248 + var th = this;
  249 + if (this.data.total <= th.data.pageSize) return;
  250 + if (this.data.ismore) return;
  251 +
  252 + wx.showLoading({
  253 + title: '加载中...',
  254 + })
  255 + th.query_store();
  256 + },
  257 + //分页查询门店信息
  258 + query_store: function() {
  259 + var th = this;
  260 + th.setData({
  261 + is_textea: 0
  262 + })
  263 + var itemId = th.data.itemId; //服务id
  264 + var url = "/api/weshop/marketing/reservation/storage/page";
  265 + var key_word = th.data.key_word;
  266 + key_word = key_word.replace(/\s+/g, "");
  267 + getApp().request.promiseGet(url, {
  268 + data: {
  269 + storeId: a.stoid,
  270 + serviceId: itemId,
  271 + latitude: th.data.lat,
  272 + longitude: th.data.lon,
  273 + page: th.data.curpage,
  274 + pageSize: th.data.pageSize,
  275 + keyWord: key_word
  276 + }
  277 + }).then(res => {
  278 + wx.hideLoading();
  279 + if (res.data.code == 0) {
  280 + th.data.curpage++;
  281 + var arr1 = th.data.store_list;
  282 + var arr2 = res.data.data.pageData;
  283 + var arr3 = [...arr1, ...arr2];
  284 + var ismore = 0;
  285 + if (arr3.length == res.data.data.total) ismore = 1
  286 + th.setData({
  287 + store_list: arr3,
  288 + total: res.data.data.total,
  289 + ismore: ismore,
  290 + is_service_read: 1,
  291 + }), wx.stopPullDownRefresh(); //停止下拉刷新
  292 + if (key_word != "" && res.data.data.pageData.length < 1) {
  293 + th.setData({
  294 + is_search: 1
  295 + })
  296 + }
  297 + } else {
  298 + getApp().my_warnning(res.data.msg, 0, th);
  299 + }
  300 + })
  301 + },
  302 + //查询
  303 + query_beautician: function() {
  304 + var th = this;
  305 + th.setData({
  306 + is_textea: 0
  307 + })
  308 + if (th.data.store_name == "") {
  309 + getApp().my_warnning("请选择服务门店", 0, th);
  310 + } else {
  311 + wx.showLoading({
  312 + title: '加载中',
  313 + })
  314 + var itemid = th.data.itemId; //正式使用的项目id
  315 + var storageId = th.data.storageId; //正式使用的线下门店id
  316 + var url = "/api/weshop/marketing/reservation/staff/page"; //接口地址
  317 + getApp().request.promiseGet(url, {
  318 + data: {
  319 + storeId: a.stoid,
  320 + userId: d.user_id,
  321 + serviceId: itemid,
  322 + storageId: storageId
  323 + }
  324 + }).then(res => {
  325 + wx.hideLoading();
  326 + if (res.data.code == 0) {
  327 + th.setData({
  328 + beautician_list: res.data.data.pageData
  329 + })
  330 + if (res.data.data.pageData.length < 1) {
  331 + getApp().my_warnning("暂无美容师", 0, th);
  332 + } else {
  333 + if (th.data.beautician == 0) {
  334 + th.setData({
  335 + beautician: 1,
  336 + })
  337 + } else {
  338 + th.setData({
  339 + beautician: 0,
  340 + })
  341 + }
  342 + }
  343 + } else {
  344 + getApp().my_warnning("暂无美容师", 0, th);
  345 + }
  346 + })
  347 + }
  348 + },
  349 + choice_beautician: function(e) {
  350 + var th = this;
  351 + var bea_index = e.currentTarget.dataset.baaindex;
  352 + var bea_name = th.data.beautician_list[bea_index].StaffName;
  353 + var BeauticianID = th.data.beautician_list[bea_index].Id;
  354 + th.setData({
  355 + beautician_name: bea_name,
  356 + beautician: 0,
  357 + bea_index: bea_index,
  358 + beauticianID: BeauticianID,
  359 + time: "",
  360 + tment_count: "",
  361 + is_textea: 0
  362 + })
  363 +
  364 + },
  365 + //获取搜索门店输入的值
  366 + input_store: function(e) {
  367 + this.setData({
  368 + key_word: e.detail.value
  369 + })
  370 + },
  371 + //搜索门店
  372 + search_store: function() {
  373 + var th = this;
  374 + var key_word = th.data.key_word;
  375 + var store_list = th.data.store_list;
  376 + th.setData({
  377 + curpage: 1,
  378 + is_search: 0,
  379 + store_list: []
  380 + })
  381 + wx.showLoading({
  382 + title: '加载中',
  383 + })
  384 + th.query_store();
  385 + },
  386 + //美容师预约跳转页面
  387 + nav_bea: function() {
  388 + var th = this;
  389 + th.setData({
  390 + is_textea: 0,
  391 + beautician: 0
  392 + })
  393 + var storageId = th.data.storageId; //线下门店id
  394 + var itemId = th.data.itemId; //服务id
  395 + var project_id = th.data.project_id;
  396 + if (storageId == "") {
  397 + getApp().my_warnning("请选择服务门店", 0, th);
  398 + } else {
  399 + wx.navigateTo({
  400 + url: "/pages/user/my_service/cosmetology_list?" + 'storageId=' + storageId + '&' + 'itemId=' + itemId + '&' + "projectId=" + project_id
  401 + });
  402 + }
  403 + },
  404 + /**
  405 + * 生命周期函数--监听页面加载
  406 + */
  407 + onLoad: function(options) {
  408 + var th = this;
  409 + th.setData({
  410 + itemId: options.service_id,
  411 + buyType: options.BuyType,
  412 + project_id: options.ProjectID,
  413 + validay: options.Validay
  414 + })
  415 + wx.getLocation({
  416 + type: 'wgs84',
  417 + success: function(res) {
  418 + th.data.lat = res.latitude;
  419 + th.data.lon = res.longitude;
  420 + th.data.is_get_local_ok = 1;
  421 + th.setData({
  422 + is_gps: 1
  423 + });
  424 + },
  425 + fail: function(res) {
  426 + if (res.errCode == 2) {
  427 + th.setData({
  428 + is_gps: 0
  429 + });
  430 + if (th.data.is_gps == 0) {
  431 + getApp().confirmBox("请开启GPS定位", null, 25000, !1);
  432 + }
  433 + } else {
  434 + th.setData({
  435 + is_gps: "3"
  436 + });
  437 + }
  438 +
  439 + th.data.is_get_local_ok = 1;
  440 + }
  441 + })
  442 + },
  443 + //查询剩下可预约人数
  444 + query_more: function() {
  445 + var th = this;
  446 + var url = "/api/weshop/marketing/reservation/can/reservation/count";
  447 + var beauticianID = th.data.beauticianID; //美容师id
  448 + var projectID = th.data.itemId; //服务id
  449 + var seekTime = th.data.time; //预约日期
  450 + var storageId = th.data.storageId; //门店id
  451 + var storeId = a.stoid; //商家id
  452 + getApp().request.promiseGet(url, {
  453 + data: {
  454 + beauticianId: beauticianID,
  455 + seekTime: seekTime,
  456 + serviceId: projectID,
  457 + storageId: storageId,
  458 + storeId: storeId
  459 + }
  460 + }).then(res => {
  461 + if (res.data.code == 0) {
  462 + var tment_count = res.data.data.CanReservation;
  463 + th.setData({
  464 + tment_count: tment_count
  465 + })
  466 + } else {
  467 + getApp().my_warnning(res.data.msg, 0, th);
  468 + }
  469 + })
  470 +
  471 + },
  472 + /**
  473 + * 生命周期函数--监听页面显示
  474 + */
  475 + onShow: function() {
  476 + var th = this;
  477 + var seekTime = th.data.time; //预约日期
  478 + if (seekTime != "") {
  479 + th.query_more();
  480 + }
  481 + th.query_project();
  482 + },
  483 + //获取单个服务项目信息
  484 + query_project: function() {
  485 + var th = this;
  486 + var url = "/api/weshop/marketing/reservation/sm/page"; //获取服务项目接口
  487 + var project_id = th.data.project_id; //服务项目id
  488 + getApp().request.promiseGet(url, {
  489 + data: {
  490 + storeId: a.stoid,
  491 + userId: d.user_id,
  492 + projectId: project_id
  493 + }
  494 + }).then(res => {
  495 + if (res.data.code == 0) {
  496 + th.setData({
  497 + validay: res.data.data.pageData[0].Validay
  498 + })
  499 + } else {
  500 + getApp().my_warnning(res.data.msg, 0, th);
  501 + }
  502 + })
  503 + }
  504 +})
0 505 \ No newline at end of file
... ...
pages/user/my_service/appment_main.json 0 → 100644
  1 +{
  2 + "navigationBarTitleText": "预约服务",
  3 + "usingComponents": {
  4 + "warn": "/components/long_warn/long_warn"
  5 + }
  6 +}
0 7 \ No newline at end of file
... ...
pages/user/my_service/appment_main.wxml 0 → 100644
  1 +<wxs module="filters" src="../../../utils/filter.wxs"></wxs>
  2 +<view class="container">
  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="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="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="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" bindtap="">
  72 + <block wx:if="{{is_textea==1 && store==0}}">
  73 + <textarea class="textarea color" 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' bindsubmit="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>
0 151 \ 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 + color: rgb(172, 172, 172);
  98 +}
  99 +
  100 +.mabot {
  101 + margin-bottom: 35rpx;
  102 +}
  103 +
  104 +.select {
  105 + width: 420rpx;
  106 + height: 55rpx;
  107 + line-height: 55rpx;
  108 + background-color: rgb(238, 238, 238);
  109 + border-radius: 6rpx;
  110 + padding-left: 40rpx;
  111 + padding-right: 15rpx;
  112 +}
  113 +
  114 +.Cosmetology {
  115 + padding-left: 40rpx;
  116 + padding-right: 15rpx;
  117 + width: 365rpx;
  118 + background-color: rgb(238, 238, 238);
  119 + height: 50rpx;
  120 + line-height: 50rpx;
  121 + border-radius: 6rpx;
  122 +}
  123 +
  124 +.beauticians {
  125 + width: 407rpx;
  126 + z-index: 3;
  127 + top: 45rpx;
  128 + left: -1rpx;
  129 + padding: 0rpx 5rpx;
  130 + border: 2rpx solid rgb(238, 238, 238);
  131 + background-color: rgb(255, 255, 255);
  132 + padding-bottom: 5rpx;
  133 + height: 279rpx;
  134 + overflow-x: scroll;
  135 + overflow-y: scroll;
  136 +}
  137 +
  138 +.beautician {
  139 + height: 70rpx;
  140 + border-bottom: 2rpx solid rgb(238, 238, 238);
  141 + padding-left: 25rpx;
  142 +}
  143 +
  144 +.beaclone {
  145 + border-bottom: 0rpx;
  146 +}
  147 +
  148 +.notes {
  149 + margin-top: 15rpx;
  150 + margin-bottom: 60rpx;
  151 + margin-right: 8rpx;
  152 +}
  153 +
  154 +.color {
  155 + color: rgb(172, 172, 172);
  156 +}
  157 +
  158 +.submitMax {
  159 + margin-top: 50rpx;
  160 + padding: 0rpx 15rpx;
  161 +}
  162 +
  163 +.Remarks {
  164 + margin-top: 15rpx;
  165 +}
  166 +
  167 +/* 蒙尘 */
  168 +
  169 +.disgraceful {
  170 + position: fixed;
  171 + z-index: 3;
  172 + width: 100%;
  173 + height: 100%;
  174 + top: 0rpx;
  175 + left: 0rpx;
  176 + background-color: rgba(0, 0, 0, 0.4);
  177 +}
  178 +
  179 +.storeList {
  180 + z-index: 4;
  181 + left: 0rpx;
  182 + border-top-left-radius: 25rpx;
  183 + border-top-right-radius: 25rpx;
  184 + background-color: rgb(255, 255, 255);
  185 + width: 100%;
  186 + padding: 45rpx 0rpx;
  187 +}
  188 +
  189 +.storeListpadd {
  190 + padding: 0rpx 31rpx;
  191 +}
  192 +
  193 +.choice {
  194 + margin-bottom: 5rpx;
  195 +}
  196 +
  197 +.inputstore {
  198 + width: 510rpx;
  199 + height: 43rpx;
  200 + line-height: 43rpx;
  201 + border-radius: 30rpx;
  202 + border: 2rpx solid rgb(238, 238, 238);
  203 + padding-left: 30rpx;
  204 +}
  205 +
  206 +.searchbar {
  207 + height: 95rpx;
  208 + border-bottom: 2rpx solid rgb(238, 238, 238);
  209 +}
  210 +
  211 +.search {
  212 + width: 125rpx;
  213 + height: 45rpx;
  214 + line-height: 45rpx;
  215 + background-color: rgb(219, 27, 52);
  216 + border-radius: 30rpx;
  217 + color: rgb(255, 255, 255);
  218 +}
  219 +
  220 +.stores {
  221 + height: 500rpx;
  222 + overflow-y: scroll;
  223 +}
  224 +
  225 +.store {
  226 + margin: 0rpx 16rpx;
  227 + padding-right: 15rpx;
  228 + border-bottom: 2rpx solid rgb(238, 238, 238);
  229 + padding: 20rpx 0rpx;
  230 +}
  231 +
  232 +.icon {
  233 + padding: 0rpx 15rpx;
  234 +}
  235 +
  236 +.circular {
  237 + width: 37rpx;
  238 + height: 37rpx;
  239 + border-radius: 50%;
  240 + border: 2rpx solid rgb(52, 52, 52);
  241 + margin: 0rpx 15rpx;
  242 +}
  243 +
  244 +.store_name_dis {
  245 + width: 90%;
  246 +}
  247 +
  248 +.name_dis {
  249 + margin-bottom: 5rpx;
  250 +}
  251 +
  252 +.store_name {
  253 + max-width: 420rpx;
  254 +}
  255 +
  256 +.store_dis {
  257 + height: 30rpx;
  258 + line-height: 30rpx;
  259 + padding: 5rpx 15rpx;
  260 + background-color: rgb(227, 227, 227);
  261 + border-radius: 25rpx;
  262 + margin-right: 20rpx;
  263 + color: rgb(159, 159, 159);
  264 + max-width: 200rpx;
  265 +}
  266 +
  267 +.store_address {
  268 + color: rgb(159, 159, 159);
  269 +}
  270 +
  271 +.determine {
  272 + background-color: rgb(196, 24, 26);
  273 + width: 500rpx;
  274 + border-radius: 35rpx;
  275 + height: 60rpx;
  276 + color: rgb(255, 255, 255);
  277 + margin: 20rpx 0rpx;
  278 +}
  279 +
  280 +.value {
  281 + max-width: 300rpx;
  282 +}
  283 +
  284 +.notstore {
  285 + height: 80rpx;
  286 + color: rgb(159, 159, 159);
  287 +}
... ...
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, 0, 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
  1 +{
  2 + "navigationBarTitleText": "美容师详情",
  3 + "usingComponents": {
  4 + "warn": "/components/long_warn/long_warn"
  5 + }
  6 +}
0 7 \ No newline at end of file
... ...
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
  1 +{
  2 + "navigationBarTitleText": "美容师列表",
  3 + "usingComponents": {
  4 + "warn": "/components/long_warn/long_warn"
  5 + }
  6 +}
0 7 \ No newline at end of file
... ...
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
  1 +{
  2 + "navigationBarTitleText": "历史服务",
  3 + "usingComponents": {
  4 + "timePicker": "/components/timePicker/timePicker",
  5 + "warn": "/components/long_warn/long_warn"
  6 + }
  7 +}
0 8 \ No newline at end of file
... ...
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 + <view>(美容师:</view>
  30 + <view class="itemUsna ellipsis-1">{{item.BeauticianName}}</view>
  31 + )
  32 + </view>
  33 + <view class="fs24">{{item.BillDate!=''?item.BillDate:item.ArrangeTime}}</view>
  34 + </view>
  35 + <!-- right -->
  36 + <view class="serState fs32">
  37 + <view wx:if="{{item.State==0}}">未服务</view>
  38 + <view wx:if="{{item.State==1}}">已服务</view>
  39 + <view wx:if="{{item.State==2}}">已过期</view>
  40 + <view wx:if="{{item.State==3}}">已取消</view>
  41 + <view wx:if="{{item.State==4}}">已评价</view>
  42 + </view>
  43 + </view>
  44 + <!-- 没有数据 -->
  45 + <!-- 加载完毕并且数据大于=页大小 -->
  46 + <view class="After_all flex-center" wx:if="{{ismore && hist_List.length>=pageSize}}">
  47 + <view class="Line"></view>
  48 + <view class="end fs26 xc-black">到底了</view>
  49 + <view class="Line"></view>
  50 + </view>
  51 + </view>
  52 +</view>
  53 +<view wx:if="{{hist_List.length<1 && startTime!=''}}" class="flex-center fs26 slot">
  54 +<view>该时间段无预约记录</view>
  55 +</view>
  56 +<!-- 无历史服务 -->
  57 +<view class="empty_order" wx:if="{{hist_List.length<1 && is_service_read && startTime==''}}">
  58 + <view class="flex-level">
  59 + <image src="{{iurl}}miniapp/images/yyservice/no_history.png"></image>
  60 + </view>
  61 + <view class="flex-level fs30 xc-ash">暂无服务记录</view>
  62 + <view class="flex-level">
  63 + <navigator url="/pages/user/my_service/i_service">
  64 + <view class="flex-center fs32 white">前往使用</view>
  65 + </navigator>
  66 + </view>
  67 +</view>
  68 +
  69 +
  70 +<!-- 引用时间主键 -->
  71 +<timePicker pickerShow="{{isPickerShow}}" id="picker" wx:if="{{isPickerRender}}" bind:hidePicker="pickerHide" bind:setPickerTime="setPickerTime" config="{{pickerConfig}}"></timePicker>
  72 +<warn id="warn"></warn>
0 73 \ 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 + getApp().my_warnning("会员为空", 0, this);
  36 + return false;
  37 + }
  38 + this.setData({
  39 + userinfo: userinfo
  40 + });
  41 + var th = this;
  42 + th.query_service();
  43 + },
  44 + /**
  45 + * 生命周期函数--监听页面显示
  46 + */
  47 + onShow: function() {
  48 + var th = this;
  49 + var nav_b = th.selectComponent("#nav_b"); //组件的id
  50 + nav_b.close_box();
  51 + var my_confirm = th.selectComponent("#my_confirm"); //组件的id
  52 + my_confirm.open_cancel(0);
  53 + },
  54 + onReachBottom: function() {
  55 + var th = this;
  56 + if (this.data.total <= th.data.pageSize) return;
  57 + if (this.data.ismore) return;
  58 +
  59 + th.query_service();
  60 + },
  61 + //查询服务项目列表
  62 + query_service: function() {
  63 + wx.showLoading({
  64 + title: '加载中',
  65 + })
  66 + var th = this;
  67 + var url = "/api/weshop/marketing/reservation/sm/page";
  68 + getApp().request.promiseGet(url, {
  69 + data: {
  70 + storeId: a.stoid,
  71 + userId: d.user_id,
  72 + page: th.data.curpage,
  73 + pageSize: th.data.pageSize
  74 + }
  75 + }).then(res => {
  76 + wx.hideLoading();
  77 + if (res.data.code == 0) {
  78 + th.data.curpage++;
  79 + var arr1 = th.data.service_List;
  80 + var arr2 = res.data.data.pageData;
  81 + var arr3 = [...arr1, ...arr2];
  82 + var ismore = 0;
  83 + if (arr3.length == res.data.data.total) ismore = 1
  84 + th.setData({
  85 + service_List: arr3,
  86 + total: res.data.data.total,
  87 + ismore: ismore,
  88 + is_service_read: 1,
  89 + }),
  90 + wx.stopPullDownRefresh(); //停止下拉刷新
  91 + } else {
  92 + getApp().my_warnning(res.data.msg, 0, th);
  93 + }
  94 + })
  95 + },
  96 + /*-- 打开服务项目 --*/
  97 + open_fw: function(e) {
  98 + wx.showLoading({
  99 + title: '加载中',
  100 + })
  101 + var th = this;
  102 + var nav_b = th.selectComponent("#nav_b"); //组件的id
  103 + nav_b.close_box();
  104 + var url = e.currentTarget.dataset.url;
  105 + var service_id = e.currentTarget.dataset.service_id; //服务id
  106 + var project_id = e.currentTarget.dataset.project_id;
  107 + var ind = e.currentTarget.dataset.ind;
  108 + var item = this.data.service_List[ind];
  109 + var ewm = "^" + th.data.userinfo.erpvipid + "|" + item.ProjectID + "|" + item.BuyType + "|TY01|";
  110 + var tt = th.format_time(1);
  111 + ewm = ewm + tt;
  112 + th.data.qr_code_object.val = ewm;
  113 + th.data.qr_code_object.is_fw = 1;
  114 + var qc_com = th.selectComponent("#qc_com"); //组件的id
  115 + getApp().request.promiseGet("/api/weshop/marketing/reservation/reservation/check", {
  116 + data: {
  117 + serviceId: service_id,
  118 + storeId: a.stoid,
  119 + userId: d.user_id
  120 + }
  121 + }).then(res => {
  122 + wx.hideLoading();
  123 + th.setData({
  124 + is_sub: 0
  125 + })
  126 + if (res.data.data != null) {
  127 + var my_confirm = th.selectComponent("#my_confirm"); //组件的id
  128 + my_confirm.open_cancel(1);
  129 + my_confirm.open(
  130 + "已有预约记录!",
  131 + "预约详情",
  132 + "继续使用",
  133 + function() {
  134 + my_confirm.open_cancel(0);
  135 + var deta_url = "/pages/user/my_service/tment_details?number=" + res.data.data.Number;
  136 + wx.navigateTo({
  137 + url: deta_url
  138 + })
  139 + },
  140 + function() {
  141 + my_confirm.open_cancel(0);
  142 + qc_com.open(th.data.qr_code_object)
  143 + }
  144 +
  145 + )
  146 +
  147 + } else {
  148 + qc_com.open(th.data.qr_code_object)
  149 + }
  150 + })
  151 +
  152 + },
  153 + //图片失败,默认图片
  154 + bind_bnerr1: function(e) {
  155 + var _errImg = e.target.dataset.errorimg;
  156 + var _Img = e.target.dataset.img;
  157 + if (_Img != undefined) {
  158 + var _errObj = {};
  159 + _errObj[_errImg] = "/miniapp/images/no_cate_def.png";
  160 + this.setData(_errObj) //注意这里的赋值方式,只是将数据列表中的此项图片路径值替换掉 ;
  161 + }
  162 + },
  163 + format_time: function(isFull) {
  164 + var d = new Date();
  165 + var m = d.getMonth() + 1;
  166 + if (m < 10) m = "0" + m;
  167 + var dd = d.getDate();
  168 + if (dd < 10) dd = "0" + dd;
  169 + var fm = [d.getFullYear(), m, dd].join('-');
  170 + if (isFull == 1)
  171 + fm = fm + ' ' + [d.getHours(), d.getMinutes(), d.getSeconds()].join(':')
  172 + return fm;
  173 + },
  174 + //跳转到首页
  175 + goto: function(e) {
  176 + var url = e.currentTarget.dataset.url;
  177 + getApp().goto(url);
  178 + },
  179 + //校正是否可预约
  180 + correcting: function(e) {
  181 + var th = this;
  182 + var nav_b = th.selectComponent("#nav_b"); //组件的id
  183 + nav_b.close_box();
  184 + wx.showLoading({
  185 + title: '加载中',
  186 + })
  187 + if (th.data.is_sub == 0) {
  188 + th.setData({
  189 + is_sub: 1
  190 + })
  191 + var url = e.currentTarget.dataset.url;
  192 + var service_id = e.currentTarget.dataset.service_id; //服务id
  193 + var project_id = e.currentTarget.dataset.project_id;
  194 + getApp().request.promiseGet("/api/weshop/marketing/reservation/reservation/check", {
  195 + data: {
  196 + serviceId: service_id,
  197 + storeId: a.stoid,
  198 + userId: d.user_id
  199 + }
  200 + }).then(res => {
  201 + wx.hideLoading();
  202 + th.setData({
  203 + is_sub: 0
  204 + })
  205 + if (res.data.code == 0) {
  206 + if (res.data.data != null) {
  207 +
  208 + var number = res.data.data.Number;
  209 + var my_confirm = th.selectComponent("#my_confirm"); //组件的id
  210 + my_confirm.open_cancel(1);
  211 + my_confirm.open(
  212 + "已有预约记录!",
  213 + "预约详情",
  214 + "继续预约",
  215 + function() {
  216 + my_confirm.open_cancel(0);
  217 + var deta_url = "/pages/user/my_service/tment_details?number=" + number;
  218 + wx.navigateTo({
  219 + url: deta_url
  220 + })
  221 + },
  222 + function() {
  223 + my_confirm.open_cancel(0);
  224 + getApp().request.promiseGet("/api/weshop/marketing/reservation/reservation/sm/check", {
  225 + data: {
  226 + projectId: project_id,
  227 + serviceId: service_id,
  228 + storeId: a.stoid,
  229 + userId: d.user_id
  230 + }
  231 + }).then(res => {
  232 + if (res.data.code == 0) {
  233 + wx.navigateTo({
  234 + url: url
  235 + })
  236 + } else {
  237 + getApp().my_warnning(res.data.msg, 0, th);
  238 + }
  239 + })
  240 + }
  241 + )
  242 + } else {
  243 + wx.navigateTo({
  244 + url: url,
  245 + })
  246 + }
  247 +
  248 + } else {
  249 + getApp().my_warnning(res.data.msg, 0, th);
  250 + }
  251 + })
  252 + }
  253 + }
  254 +
  255 +})
0 256 \ 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>
  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">
  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("取消成功", 0, 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 + close: function() {
  106 + var th = this;
  107 + var nav_b = th.selectComponent("#nav_b"); //组件的id
  108 + nav_b.close_box();
  109 + },
  110 + //显示核销码
  111 + code_show: function(e) {
  112 + var th = this;
  113 + th.close();
  114 + var nav_b = th.selectComponent("#nav_b"); //组件的id
  115 + nav_b.close_box();
  116 + //--获取成功的时候--
  117 + var no = e.currentTarget.dataset.order_sn;
  118 + var qc_com = th.selectComponent("#qc_com"); //组件的id
  119 + var obj = {
  120 + val: no,
  121 + content: "请将二维码展示给核销员,使用更快捷"
  122 + };
  123 + qc_com.open(obj)
  124 + },
  125 + //跳到首页
  126 + goto: function(e) {
  127 + var th = this;
  128 + th.close();
  129 + wx.switchTab({
  130 + url: '/pages/index/index/index',
  131 + })
  132 + },
  133 + /**
  134 + * 生命周期函数--监听页面显示
  135 + */
  136 + onShow: function() {
  137 + var th = this;
  138 + th.query_bea();
  139 + th.close();
  140 + },
  141 +})
0 142 \ 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}}">
  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 + <view>美</view>
  49 + <view>容</view>
  50 + <view>师:</view>
  51 + </view>
  52 + <view class="ellipsis-1 value">{{item.BeauticianName}}</view>
  53 + </view>
  54 + <!-- 预约人及联系方式 -->
  55 + <!-- 姓名 -->
  56 + <view class="flex-vertical bmt ai-bas">
  57 + <view class="name flex-vertical-between">
  58 + <view>预</view>
  59 + <view>约</view>
  60 + <view>人:</view>
  61 + </view>
  62 + <view class="ellipsis-1 value">{{item.VIPName}}</view>
  63 + </view>
  64 + <!-- 号码 -->
  65 + <view class="flex-vertical ai-bas">
  66 + <view class="name flex-vertical-between">
  67 + <view>手</view>
  68 + <view>机</view>
  69 + <view>号:</view>
  70 + </view>
  71 + <view>{{item.MobileTel}}</view>
  72 + </view>
  73 + </view>
  74 + </view>
  75 +
  76 + </view>
  77 +
  78 + <!-- 温馨提示内容 -->
  79 + <view class="Tips fs30 lf rel padding">
  80 + <!-- 棒槌 -->
  81 + <view class="Stickl abs"></view>
  82 + <view class="Stickl Stickr abs"></view>
  83 +
  84 + <view class="Cozy flex-center" style="background-image: url({{iurl}}/miniapp/images/yyservice/icon.png);">
  85 + <view>温馨提示</view>
  86 + </view>
  87 + <view>1.预约成功后需在指定时间前到达;</view>
  88 + <view>2.如有任何问题可致电咨询;</view>
  89 + <view>3.如需退约,需提前取消。</view>
  90 + </view>
  91 + <!-- submit栏 -->
  92 + <view class="subs flex-vertical-between fs32">
  93 + <!-- 左边栏 -->
  94 + <view class="sub flex-center yellow-b" wx:if="{{item.State==0}}" bindtap="cancel_tment">
  95 + <view class="yellow-b" data-index="{{index}}">取消预约</view>
  96 + </view>
  97 + <navigator wx:if="{{item.State>0}}" class="sub flex-center yellow-b" url="/pages/user/my_service/tment_order_list">
  98 + <view class="yellow-b">我的服务</view>
  99 + </navigator>
  100 + <!-- 右边栏 -->
  101 + <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}}">
  102 + <view>更改时间</view>
  103 + </navigator>
  104 + <navigator wx:if="{{item.State==1}}" class="sub rb flex-center" url="/pages/user/my_service/tment_eval?Number={{item.Number}}&evaluate={{0}}">
  105 + <view>发表评价</view>
  106 + </navigator>
  107 + <navigator wx:if="{{item.State==4}}" class="sub rb flex-center" url="/pages/user/my_service/tment_eval?Number={{item.Number}}&evaluate={{1}}">
  108 + <view>查看评价</view>
  109 + </navigator>
  110 + <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}}">
  111 + <view>重新预约</view>
  112 + </navigator>
  113 +
  114 + </view>
  115 +
  116 +</view>
  117 +
  118 +<!-- 制作一个圆球导航 -->
  119 +<nav_b id="nav_b"></nav_b>
  120 +<my_confirm id="my_confirm"></my_confirm>
  121 +<!-- 弹出框扫描 -->
  122 +<qr_code id="qc_com"></qr_code>
  123 +<warn id="warn"></warn>
... ...
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: 130rpx;
  26 + margin-right: 25rpx;
  27 +}
  28 +
  29 +.value {
  30 + max-width: 400rpx;
  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,
  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
  1 +{
  2 + "navigationBarTitleText": "预约评价",
  3 + "usingComponents": {
  4 + "qr_code": "/components/qr_code/qr_code",
  5 + "warn": "/components/long_warn/long_warn"
  6 + }
  7 +}
0 8 \ No newline at end of file
... ...
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.ImageUrl==''?iurl+defimgurl:beautician.ImageUrl}}" lazy-load="true" data-errorimg="beautician.ImageUrl" binderror="bind_bnerr1" data-img="{{beautician.ImageUrl}}"></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">服务项目:</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">服务时间:</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">评价时间:</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: 160rpx;
  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 index = e.currentTarget.dataset.index;
  126 + var states = th.data.states;
  127 + var order_list = th.data.tm_order_list;
  128 + var number = order_list[index].Number;
  129 + var json = {
  130 + "number": number,
  131 + "storeId": a.stoid,
  132 + "states": 3
  133 + };
  134 + var data = JSON.stringify(json);
  135 + var url = th.data.url + "/api/weshop/marketing/reservation/reservation/update"; //预约接口地址
  136 + wx.request({
  137 + url: url,
  138 + data: data,
  139 + method: 'put',
  140 + header: {
  141 + 'content-type': 'application/json'
  142 + }, // 设置请求的 header
  143 + success: function(res) {
  144 + if (res.data.code == 0) {
  145 + getApp().my_warnning("取消成功", 0, th);
  146 + var id = th.data.activeCategoryId;
  147 + if (id == 1) {
  148 + order_list.splice(index, 1);
  149 + th.setData({
  150 + tm_order_list: order_list
  151 + })
  152 + } else {
  153 + var start = 'tm_order_list[' + index + '].State';
  154 + th.setData({
  155 + [start]: 3
  156 + })
  157 + }
  158 + wx.stopPullDownRefresh(); //停止下拉刷新
  159 + } else {
  160 + getApp().my_warnning(res.data.msg, 0, th);
  161 + }
  162 + }
  163 + })
  164 +
  165 + },
  166 + //图片失败,默认图片
  167 + bind_bnerr1: function(e) {
  168 + var _errImg = e.target.dataset.errorimg;
  169 + var _Img = e.target.dataset.img;
  170 + if (_Img != undefined) {
  171 + var _errObj = {};
  172 + _errObj[_errImg] = "/miniapp/images/no_cate_def.png";
  173 + this.setData(_errObj) //注意这里的赋值方式,只是将数据列表中的此项图片路径值替换掉 ;
  174 + }
  175 + },
  176 + /**
  177 + * 生命周期函数--监听页面显示
  178 + */
  179 + onShow: function() {
  180 + var th = this;
  181 + th.setData({
  182 + curpage:1,
  183 + total:0,
  184 + ismore:0,
  185 + is_read:0,
  186 + tm_order_list:[]
  187 + })
  188 + th.query_orderList();
  189 + },
  190 +
  191 + /**
  192 + * 页面上拉触底事件的处理函数
  193 + */
  194 + onReachBottom: function() {
  195 + var th = this;
  196 + if (th.data.total <= th.data.pageSize) return;
  197 + if (th.data.ismore) return;
  198 +
  199 + wx.showLoading({
  200 + title: '加载中...',
  201 + })
  202 + th.query_orderList();
  203 + },
  204 +
  205 +})
0 206 \ 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 + }
  7 +}
0 8 \ No newline at end of file
... ...
pages/user/my_service/tment_order_list.wxml 0 → 100644
  1 +<view class="container">
  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">预约门店:</view>
  36 + <view class="itemvalue ellipsis-1">{{item.StorageName}}</view>
  37 + </view>
  38 + <view class="item flex-vertical base">
  39 + <view class="itemname">预约项目:</view>
  40 + <view class="itemvalue ellipsis-1">{{item.ServiceName}}</view>
  41 + </view>
  42 + <view class="item flex-vertical base">
  43 + <view class="itemname">美容师:</view>
  44 + <view class="itemvalue ellipsis-1">{{item.BeauticianName}}</view>
  45 + </view>
  46 + <view class="item flex-vertical base">
  47 + <view class="itemname">预约时间:</view>
  48 + <view>{{item.ArrangeTime}}</view>
  49 + </view>
  50 + <view class="item flex-vertical base" wx:if="{{item.WriteTime==''?false:true}}">
  51 + <view class="itemname">服务时间:</view>
  52 + <view>{{item.WriteTime}}</view>
  53 + </view>
  54 + </view>
  55 +
  56 + </view>
  57 + </navigator>
  58 + <view class="Unim flex-right-vertical fs26 padding">
  59 + <image wx:if="{{item.State==0}}" src="{{iurl}}miniapp/images/order/code.png" class="code" bindtap="code_show" data-order_sn="{{item.Number}}"></image>
  60 + <block wx:if="{{item.State==0}}">
  61 + <view class="Unimportance flex-level" data-index="{{index}}" bindtap="cancel_tment">取消预约</view>
  62 + </block>
  63 + <block wx:else>
  64 + <navigator url="/pages/user/my_service/tment_details?number={{item.Number}}" class="Unimportance flex-level">查看详情</navigator>
  65 + </block>
  66 + <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>
  67 + <navigator wx:if="{{item.State==1}}" url="/pages/user/my_service/tment_eval?Number={{item.Number}}&evaluate={{0}}" class="important Unimportance flex-level">发表评价</navigator>
  68 + <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>
  69 + <navigator wx:if="{{item.State==4}}" url="/pages/user/my_service/tment_eval?Number={{item.Number}}&evaluate={{1}}" class="important Unimportance flex-level">查看评价</navigator>
  70 + </view>
  71 + </view>
  72 + <view class="exactly flex-center fs26" wx:if="{{ismore && tm_order_list.length>=3}}">
  73 + <view class="line"></view>
  74 + <view class="exactly_text">到底了</view>
  75 + <view class="line"></view>
  76 + </view>
  77 + </view>
  78 +</view>
  79 +
  80 +<!-- 无预约订单 -->
  81 +<view class="empty_order" wx:if="{{tm_order_list.length<1 && is_read}}">
  82 + <view class="flex-level">
  83 + <image src="{{iurl}}miniapp/images/order/empty_order.png" lazy-load="true"></image>
  84 + </view>
  85 + <view class="flex-level fs30 xc-ash">无预约记录</view>
  86 + <view class="flex-level">
  87 + <navigator url="/pages/user/my_service/i_service" bindtap="goto">
  88 + <view class="flex-center fs32 white">立即预约</view>
  89 + </navigator>
  90 + </view>
  91 +</view>
  92 +<!-- 弹出框扫描 -->
  93 +<qr_code id="qc_com"></qr_code>
  94 +<warn id="warn"></warn>
0 95 \ 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: 130rpx;
  80 +}
  81 +
  82 +.itemvalue {
  83 + max-width: 300rpx;
  84 +}
  85 +
  86 +.Unimportance {
  87 + width: 140rpx;
  88 + height: 40rpx;
  89 + line-height: 40rpx;
  90 + border-radius: 8rpx;
  91 + background-color: rgb(255, 255, 255);
  92 + margin-left: 20rpx;
  93 + border: 2rpx solid rgb(191, 191, 191);
  94 +}
  95 +
  96 +.important {
  97 + background-color: rgb(212, 28, 52);
  98 + border: 2rpx solid rgb(212, 28, 52);
  99 + color: rgb(255, 255, 255);
  100 +}
  101 +
  102 +.Unim {
  103 + height: 110rpx;
  104 +}
  105 +
  106 +.exactly {
  107 + height: 80rpx;
  108 + background-color: rgb(245, 245, 245);
  109 +}
  110 +
  111 +.exactly_text {
  112 + margin: 0rpx 15rpx;
  113 +}
  114 +
  115 +.line {
  116 + border-top: 2rpx solid rgb(0, 0, 0);
  117 + width: 130rpx;
  118 +}
  119 +
  120 +/* 无预约 */
  121 +
  122 +.empty_order image {
  123 + width: 300rpx;
  124 + height: 280rpx;
  125 + margin-top: 202rpx;
  126 +}
  127 +
  128 +.empty_order .xc-ash {
  129 + margin-top: 10rpx;
  130 + font-weight: 600px;
  131 +}
  132 +
  133 +.empty_order navigator {
  134 + margin-top: 60rpx;
  135 + border-radius: 40rpx;
  136 +}
  137 +
  138 +.empty_order navigator view {
  139 + width: 247rpx;
  140 + height: 65rpx;
  141 + background-color: rgb(255, 72, 72);
  142 + border-radius: 40rpx;
  143 +}
  144 +.base{
  145 + display: flex;
  146 + height: 38rpx;
  147 + line-height: 38rpx;
  148 + align-items: baseline;
  149 +}
0 150 \ No newline at end of file
... ...