Commit 4870598bc23cba971b6a2fa14fdbbe389eef0edd

Authored by wangfan
1 parent d6cb58c4

fenbao

Too many changes to show.

To preserve performance only 35 of 35+ files are displayed.

1 { 1 {
2 "pages": [ 2 "pages": [
3 "pages/customer/index", 3 "pages/customer/index",
4 - "pages/book/b_index",  
5 - "pages/book/b_detail",  
6 - "pages/book/b_invitation",  
7 - "pages/book/b_desk",  
8 "pages/customer/detail_owner", 4 "pages/customer/detail_owner",
9 "pages/customer/detail_owner_part", 5 "pages/customer/detail_owner_part",
10 "pages/customer/detail_customer", 6 "pages/customer/detail_customer",
@@ -17,19 +13,6 @@ @@ -17,19 +13,6 @@
17 "pages/me/index", 13 "pages/me/index",
18 "pages/me/setting", 14 "pages/me/setting",
19 "pages/me/list", 15 "pages/me/list",
20 - "pages/book/b_addnew",  
21 - "pages/book/b_sms",  
22 - "pages/book/b_setting",  
23 - "pages/book/setting/index",  
24 - "pages/book/setting/sms",  
25 - "pages/book/setting/sms_buy",  
26 - "pages/book/crm/index",  
27 - "pages/book/remark/index",  
28 - "pages/book/smsbatch/index",  
29 - "pages/book/smsbatch/update",  
30 - "pages/book/smsbatch/detail",  
31 - "pages/book/smsbatch/list",  
32 - "pages/book/smsbatch/result",  
33 "pages/reserve/search", 16 "pages/reserve/search",
34 "pages/reserve/detail", 17 "pages/reserve/detail",
35 "pages/me/follow", 18 "pages/me/follow",
@@ -54,6 +37,29 @@ @@ -54,6 +37,29 @@
54 "pages/success", 37 "pages/success",
55 "pages/remark" 38 "pages/remark"
56 ] 39 ]
  40 + },
  41 + {
  42 + "root": "pack-book",
  43 + "name": "商家端",
  44 + "pages": [
  45 + "pages/book/b_index",
  46 + "pages/book/b_detail",
  47 + "pages/book/b_invitation",
  48 + "pages/book/b_desk",
  49 + "pages/book/b_addnew",
  50 + "pages/book/b_sms",
  51 + "pages/book/b_setting",
  52 + "pages/book/setting/index",
  53 + "pages/book/setting/sms",
  54 + "pages/book/setting/sms_buy",
  55 + "pages/book/crm/index",
  56 + "pages/book/remark/index",
  57 + "pages/book/smsbatch/index",
  58 + "pages/book/smsbatch/update",
  59 + "pages/book/smsbatch/detail",
  60 + "pages/book/smsbatch/list",
  61 + "pages/book/smsbatch/result"
  62 + ]
57 } 63 }
58 ], 64 ],
59 "preloadRule": { 65 "preloadRule": {
  1 +/**app.wxss**/
  2 +@import "icon.wxss";
  3 +
  4 +
  5 +.hidden {
  6 + display: none;
  7 +}
  8 +
  9 +page {
  10 + font-size: 16px;
  11 + line-height: 150%;
  12 + font-family: 'PingFang SC','sans-serif','Helvetica Neue','Helvetica','Arial';
  13 + height: 100%;
  14 +}
  15 +.section{ margin-left:4%;margin-right:4%; width:92%;}
  16 +.sectionA{ margin-left:8%;margin-right:8%; width:84%; overflow: hidden; }
  17 +.sectionW{margin-left:2%;margin-right:2%;width:96%;overflow: hidden;}
  18 +.section_p{ padding-left:4%;padding-right:4%; width:92%; overflow: hidden; }
  19 +.white{
  20 + color: #fff;
  21 +}
  22 +.green{
  23 + color: #22ab39;
  24 +}
  25 +.black{
  26 + color: #000;
  27 +}
  28 +.gray{
  29 + color:#666;
  30 +}
  31 +.liggray{
  32 + color:#9E9A9A;
  33 +}
  34 +.bg{
  35 + background-color:#efeef3;
  36 +}
  37 +.bg_green{
  38 + background-color: #1AAD19;
  39 +}
  40 +.bg_liggreen{
  41 + background-color: #ECF8EE;
  42 +}
  43 +.bg_red{
  44 + background-color: #E14553;
  45 +}
  46 +.bg_gray{
  47 + background-color: #f3f3f3;
  48 +}
  49 +.bg_white{
  50 + background-color: white;
  51 +}
  52 +.bg_blue{
  53 + background-color: #EEF2FB;
  54 +}
  55 +.bg_pink{
  56 + background-color: #FEEFF0;
  57 +}
  58 +.bg_ligblack{
  59 + background-color: #4C4E4F;
  60 +}
  61 +.mtop10{
  62 + margin-top: 10px;
  63 +}
  64 +.mtop12{
  65 + margin-top: 12px;
  66 +}
  67 +.mtop15{
  68 + margin-top: 15px;
  69 +}
  70 +.mtop20{
  71 + margin-top: 20px;
  72 +}
  73 +.mtop25{
  74 + margin-top: 25px;
  75 +}
  76 +.mtop30{
  77 + margin-top: 30px;
  78 +}
  79 +.mbottom5{
  80 + margin-bottom:5px;
  81 +}
  82 +.mbottom10{
  83 + margin-bottom: 10px;
  84 +}
  85 +.mbottom15{
  86 + margin-bottom: 15px;
  87 +}
  88 +.mbottom20{
  89 + margin-bottom: 20px;
  90 +}
  91 +.mbottom30{
  92 + margin-bottom: 30px;
  93 +}
  94 +.ptop5{
  95 + padding-top:5px;
  96 +}
  97 +.pbottom5{
  98 + padding-bottom:5px;
  99 +}
  100 +.ptop8{
  101 + padding-top:8px;
  102 +}
  103 +.pbottom8{
  104 + padding-bottom:8px;
  105 +}
  106 +.ptop10{
  107 + padding-top:10px;
  108 +}
  109 +.pbottom10{
  110 + padding-bottom:10px;
  111 +}
  112 +.ptop12{
  113 + padding-top:12px;
  114 +}
  115 +.pbottom12{
  116 + padding-bottom:12px;
  117 +}
  118 +.ptop13{
  119 + padding-top:13px;
  120 +}
  121 +.pbottom13{
  122 + padding-bottom:13px;
  123 +}
  124 +.ptop15{
  125 + padding-top:15px;
  126 +}
  127 +.pbottom15{
  128 + padding-bottom:15px;
  129 +}
  130 +.ptop18{
  131 + padding-top:18px;
  132 +}
  133 +.pbottom18{
  134 + padding-bottom:18px;
  135 +}
  136 +.ptop20{
  137 + padding-top:20px;
  138 +}
  139 +.pbottom20{
  140 + padding-bottom:20px;
  141 +}
  142 +.mleft{
  143 + margin-left:4%;
  144 +}
  145 +.mleft6{
  146 + margin-left:6px;
  147 +}
  148 +.mleft10{
  149 + margin-left: 10px;
  150 +}
  151 +.mleft14{
  152 + margin-left: 14px;
  153 + height: 60px;
  154 +}
  155 +.mleft16{
  156 + margin-left: 16px;
  157 +}
  158 +.mright20{
  159 + margin-right: 20px;
  160 +}
  161 +.strong,.bold{
  162 + font-weight: bold;
  163 +}
  164 +.overflow{
  165 + overflow:hidden;
  166 +}
  167 +.textoverflow{
  168 + display: block;
  169 + overflow: hidden;
  170 + white-space: nowrap;
  171 + text-overflow: ellipsis;
  172 +}
  173 +.fsize11{
  174 + font-size: 22rpx;
  175 + height:11px;
  176 + line-height:11px;
  177 +}
  178 +.fsize12{
  179 + font-size: 24rpx;
  180 +}
  181 +.fsize13{
  182 + font-size: 26rpx;
  183 +}
  184 +.fsize14{
  185 + font-size: 28rpx;
  186 +}
  187 +.fsize15{
  188 + font-size: 30rpx;
  189 +}
  190 +.fsize16{
  191 + font-size: 32rpx;
  192 +}
  193 +.fsize17{
  194 + font-size: 34rpx;
  195 +}
  196 +.fsize18{
  197 + font-size: 36rpx;
  198 +}
  199 +.fsize20{
  200 + font-size: 40rpx;
  201 +}
  202 +.fsize24{
  203 + font-size: 48rpx;
  204 +}
  205 +.black-font{
  206 + color:#353535;
  207 +}
  208 +.white-font{
  209 + color:#fff;
  210 +}
  211 +.gray-light-font{
  212 + color:#999;
  213 +}
  214 +.gray-deenpen-font{
  215 + color:#666;
  216 +}
  217 +
  218 +.hr-one{
  219 + background: #efeef3;
  220 + height: 2rpx;
  221 + width:auto;
  222 +}
  223 +.nowrap{white-space:nowrap;}
  224 +
  225 +/*水平方向左右分布*/
  226 +.flex-lr{
  227 + display: flex;
  228 + display: -webkit-flex;
  229 + justify-content: space-between;
  230 + align-items:center;
  231 + flex-direction: row;
  232 + -webkit-flex-direction: row;
  233 +}
  234 +.flex-ll{
  235 +
  236 + display: flex;
  237 + display: -webkit-flex;
  238 + flex-direction:row;
  239 + justfy-content: flex-start;
  240 + align-items: center;
  241 + -webkit-flex-direction: row;
  242 +}
  243 +.flex-ll-top{
  244 + display: flex;
  245 + display: -webkit-flex;
  246 + flex-direction:row;
  247 + -webkit-flex-direction: row;
  248 +}
  249 +.flex-ll-bottom{
  250 + display: flex;
  251 + display: -webkit-flex;
  252 + flex-direction:row;
  253 + -webkit-flex-direction: row;
  254 + justfy-content: flex-end;
  255 + align-items: flex-end;
  256 +}
  257 +
  258 +.flex-rr{
  259 + display: flex;
  260 + display: -webkit-flex;
  261 + justify-content: flex-end;
  262 + align-items: center;
  263 + flex-direction: row;
  264 + -webkit-flex-direction: row;
  265 +}
  266 +/*垂直方向居中分布*/
  267 +.flex-vc{
  268 + display: flex;
  269 + display: -webkit-flex;
  270 + justify-content: center;
  271 + align-items: center;
  272 + flex-direction: column;
  273 + -webkit-flex-direction: column;
  274 +}
  275 +/*垂直方向居左分布*/
  276 +.flex-vl{
  277 + display: flex;
  278 + display: -webkit-flex;
  279 + justify-content: flex-start;
  280 + align-items: left;
  281 + flex-direction: column;
  282 + -webkit-flex-direction: column;
  283 +}
  284 +/*垂直方向居右分布*/
  285 +.flex-vr{
  286 + display: flex;
  287 + display: -webkit-flex;
  288 + justify-content: flex-end;
  289 + align-items: center;
  290 + flex-direction: column;
  291 + -webkit-flex-direction: column;
  292 + }
  293 +/*水平方向居中分布*/
  294 +.flex-cc{
  295 + display: flex;
  296 + display: -webkit-flex;
  297 + justify-content: center;
  298 + align-items: center;
  299 + flex-direction: row;
  300 + -webkit-flex-direction: row;
  301 +}
  302 +/*基准线对齐*/
  303 +.flex-bc{
  304 + display: flex;
  305 + display: -webkit-flex;
  306 + justify-content: center;
  307 + align-items: baseline;
  308 + flex-direction: row;
  309 + -webkit-flex-direction: row;
  310 +}
  311 +/*流式布局*/
  312 +.flex-auto{
  313 + display: flex;
  314 + display: -webkit-flex;
  315 + justify-content: space-around;
  316 + align-content: flex-start;
  317 + flex-flow:wrap;
  318 +}
  319 +.div-v-center {
  320 + -webkit-transform: translateY(-50%);
  321 + -moz-transform: translateY(-50%);
  322 + -ms-transform: translateY(-50%);
  323 + -o-transform: translateY(-50%);
  324 + transform: translateY(-50%);
  325 +}
  326 +.div-h-center {
  327 + -webkit-transform: translateX(-50%);
  328 + -moz-transform: translateX(-50%);
  329 + -ms-transform: translateX(-50%);
  330 + -o-transform: translateX(-50%);
  331 + transform: translateX(-50%);
  332 +}
  333 +.t-align-c{
  334 + text-align: center;
  335 +}
  336 +.t-align-r{
  337 + text-align: right;
  338 +}
  339 +.t-align-j{
  340 + text-align: justify;
  341 +}
  342 +.displaysan{
  343 + word-break:break-all;
  344 + text-overflow:ellipsis;
  345 + display:-webkit-box;
  346 + -webkit-box-orient:vertical;
  347 + -webkit-line-clamp:2;
  348 + overflow:hidden;
  349 +}
  350 +.linethrough{
  351 + text-decoration:line-through
  352 +}
  353 +image{
  354 + background-color: #f4f4f4;
  355 + background-repeat: no-repeat;
  356 + background-size: 68px 24px;
  357 + background-position: center;
  358 +}
  359 +.opacity{
  360 + opacity: 0.4;
  361 +}
  362 +.opacity2{
  363 + opacity: 0.2;
  364 +}
  365 +.avater{width:50px;height:50px;border-radius:50%;}
  366 +.fixed{position:fixed}
  367 +.inline{
  368 + display:inline-block;
  369 +}
  370 +.width{
  371 + width:50%;
  372 +}
  373 +.width100{
  374 + width:100%;
  375 +}
  376 +.height100{
  377 + height:100px;
  378 +}
  379 +/*点餐人数 选择口味*/
  380 +.choose{
  381 + height:32px;
  382 +}
  383 +.choose .normal{
  384 + width:76px;
  385 + height:30px;
  386 + line-height:30px;
  387 + text-align:center;
  388 + color:#E14553;
  389 + border:1px solid #FB848F;
  390 + border-radius:15px;
  391 +}
  392 +.mleft30{
  393 + margin-left:30px;
  394 +}
  395 +.mleft50{
  396 + margin-left:50px;
  397 +}
  398 +.choose .active{
  399 + background-color:#F93E85;
  400 + color:#fff;
  401 +}
  402 +.beginorder{
  403 + width:67%;
  404 + margin:0 16.5%;
  405 + height:40px;
  406 + line-height:40px;
  407 + border-radius:8px;
  408 + bottom:40px;
  409 +}
  410 +/* 会员卡样式调整 */
  411 +
  412 +.cardSection{ margin: 0 auto; width:84%; overflow: hidden; }
  413 +.cardBox {
  414 + width: 100%;
  415 + background: #EFEEF3;
  416 + padding: 30rpx 0;
  417 +}
  418 +.innerBox {
  419 + position: relative;
  420 + width: 84%; height: 0;
  421 + padding-top: 48%;
  422 +}
  423 +.cardTitle {
  424 + position: absolute;
  425 + top:15rpx;
  426 +}
  427 +.cardInfo {
  428 + position: absolute;
  429 + bottom:26rpx;
  430 +}
  431 +.fsizeTitle{
  432 + font-size: 30rpx;
  433 +}
  434 +.fsizeInfo {
  435 + font-size: 26rpx;
  436 +}
  437 +.rightsArea {
  438 + padding-top: 25rpx;
  439 +}
  440 +.imageSize {
  441 + width: 44rpx;
  442 + height: 44rpx;
  443 + overflow: hidden;
  444 + margin-right: 15rpx;
  445 + float: left;
  446 +}
  447 +.rightsTitle {
  448 + margin: 0 5%;
  449 + margin-bottom: 50rpx;
  450 +}
  451 +.infoSize {
  452 + color: #060606;
  453 + font-size: 30rpx;
  454 +}
  455 +.rightsItem {
  456 + margin-bottom: 35rpx;
  457 + height: 100%;
  458 +}
  459 +.itemInfo {
  460 + flex: 1;
  461 +}
  462 +.orderSize {
  463 + width: 222rpx;
  464 + height: 71rpx;
  465 + line-height: 71rpx;
  466 + font-size: 30rpx;
  467 +}
  468 +.disabledSize {
  469 + bottom: 80rpx;
  470 + margin: 0 100rpx;
  471 +}
  472 +.btnArea {
  473 + width: 100%;
  474 + display: flex;
  475 + justify-content: center;
  476 + position: absolute;
  477 + bottom: 80rpx;
  478 +}
  479 +.page {
  480 + height: 100%;
  481 +}
  482 +.fwhite {
  483 + color: #fff;
  484 +}
  485 +.fgray {
  486 + color: #efedec;
  487 +}
  488 +.b-radius{border-radius:6px;}
  489 +.bradius8{border-radius:8px;}
  490 +.bradius50{border-radius:50%;}
  491 +.smooth{
  492 + -webkit-font-smoothing: antialiased;
  493 + -moz-osx-font-smoothing: grayscale;
  494 +}
  495 +image{
  496 + display:block;
  497 + background:transparent;
  498 +}
  499 +button:after{
  500 + border:0;
  501 +}
  502 +button{
  503 + background:transparent;
  504 +}
  505 +.button-hover {
  506 + background-color: transparent;
  507 +}
  508 +.food-clear-num{
  509 + height:20px;
  510 + position:absolute;
  511 + right:0;
  512 +}
  513 +.food-clear-content{
  514 + height:100%;
  515 + font-size:22rpx;
  516 + padding:0 10rpx;
  517 + background:rgba(216,30,6,.9);
  518 + line-height:40rpx;
  519 +}
  520 +.food-clear-angel{
  521 + width:14rpx;
  522 + height:36rpx;
  523 + position:relative;
  524 + left:1rpx;
  525 +}
  526 +.angel-reat{
  527 + width:12px;
  528 + height:100%;
  529 + overflow:hidden;
  530 + position:relative;
  531 +}
  532 +.common-angle {
  533 + width: 0;
  534 + height: 0;
  535 + border-top: 12px solid transparent;
  536 + border-right: 12px solid rgba(216,30,6,.9);
  537 + border-bottom: 12px solid transparent;
  538 + position:absolute;
  539 +}
  540 +.top-angel{
  541 + top:-12px;
  542 + left:2px;
  543 +}
  544 +.bottom-angel{
  545 + bottom:-12px;
  546 + left:2px;
  547 +}
  548 +.font-bold,.Semibold{
  549 + font-weight:bold;
  550 +}
  551 +
  552 +.Medium{
  553 + font-weight: 400;
  554 +}
  1 +.icon,.icon-s,.icon-m,.icon-l{
  2 + background-repeat: no-repeat;
  3 + height: 16px;
  4 + width:16px;
  5 + display: block;
  6 + margin: 5px;
  7 + background-size: 100%; background-repeat: no-repeat;
  8 +}
  9 +.icon-jiantou{
  10 + width:8px;
  11 + height:13px;
  12 + margin:0;
  13 + margin-left:5px;
  14 +}
  15 +.icon-12{
  16 + height: 12px;
  17 + width: 12px;
  18 +}
  19 +.icon14{
  20 + height: 14px;
  21 + width: 14px;
  22 +}
  23 +.icon15{
  24 + height: 15px;
  25 + width: 15px;
  26 +}
  27 +.subtractCook{
  28 + height: 3px;
  29 + width: 15px;
  30 +}
  31 +.icon-s{
  32 + height: 18px;
  33 + width:18px;
  34 +}
  35 +.icon24{
  36 + height: 24px;
  37 + width:24px;
  38 +}
  39 +.icon28{
  40 + height: 28px;
  41 + width:28px;
  42 +}
  43 +.icon-ml{
  44 + height: 26px;
  45 + width:26px;
  46 +}
  47 +.icon-l{
  48 + height: 32px;
  49 + width:32px;
  50 +}
  51 +.icon64{
  52 + height: 64px;
  53 + width:64px;
  54 +}
  55 +.icon-membercard{
  56 + background: url(http://qn.colorcun.com/wechat/app/images/icon_card.jpg);
  57 + background-size: 100%; background-repeat: no-repeat;
  58 + height:100%;
  59 +}
  1 +var util = require('../../utils/util.js')
  2 +var uri=require('../../utils/uri.js')
  3 +var bookOrder=require('../../utils/bookCommon.js')
  4 +Page({
  5 + data:{
  6 + },
  7 + onLoad:function(){
  8 + util.setBarTitle('选择用餐时间');
  9 + this.getdatelist()
  10 + this.getimelist();
  11 + wx.removeStorage({
  12 + key:'order_pnum',
  13 + })
  14 + wx.removeStorage({
  15 + key:'tabletype',
  16 + })
  17 + },
  18 + onShow:function(){
  19 +
  20 + },
  21 + changelist:function(e){
  22 + console.log('xxxx',e)
  23 + var timelist=this.data.timeList;
  24 + timelist.forEach(function(v,i){
  25 + v.list.forEach(function(r,n){
  26 + r.isselect=false
  27 + })
  28 + })
  29 + this.setData({
  30 + timeList:timelist,
  31 + time_dur:e.detail
  32 + })
  33 + },
  34 + //日期选择
  35 + selectdate:function(e){
  36 + var title=e.currentTarget.dataset.title;
  37 + var datelist=this.data.dateList;
  38 + var selectdate=''
  39 + datelist.forEach(function(v,i){
  40 + v.isActive=false
  41 + if(v.title==title){
  42 + v.isActive=true;
  43 + selectdate=v.date
  44 + }
  45 + })
  46 + this.setData({
  47 + dateList:datelist,
  48 + selectdate:selectdate,
  49 + time_dur:null
  50 + })
  51 + this.getimelist();
  52 + },
  53 + selectOther:function(){
  54 + var currentTime=Date.parse(new Date());
  55 + var timeobj=bookOrder.changedate(currentTime)
  56 + console.log(this.data.selectdate,this.data.time_dur)
  57 + wx.navigateTo({
  58 + url:'b_info?year='+timeobj.year+'&date='+this.data.selectdate+'&time='+this.data.time_dur
  59 + })
  60 + },
  61 + //获取日期列表
  62 + getdatelist:function(){
  63 + var currentTime=Date.parse(new Date());
  64 + var dur=24*60*60*1000;
  65 + var list=[currentTime,currentTime+dur,currentTime+2*dur];
  66 + var desklist=[];
  67 + for(var i=0;i<list.length;i++){
  68 + var dd=bookOrder.changedate(list[i]);
  69 + if(i==0){
  70 + var title='今天';
  71 + var isselect=true
  72 + }
  73 + if(i==1){
  74 + var title='明天';
  75 + var isselect=false
  76 + }
  77 + if(i==2){
  78 + var myDate = new Date(list[2]);
  79 + var title=bookOrder.getweek(myDate.getDay());
  80 + var isselect=false
  81 + }
  82 + desklist.push({
  83 + title:title,
  84 + date:'0'+dd.month+(dd.day<10 ? '-0'+dd.day : '-'+dd.day),
  85 + isActive:isselect,
  86 + year:dd.year
  87 + })
  88 + }
  89 + this.setData({
  90 + dateList:desklist,
  91 + selectdate:desklist[0].date
  92 + })
  93 + console.log(this.data.selectdate)
  94 + },
  95 + //获取时间列表
  96 + getimelist:function(){
  97 + var currentTime=Date.parse(new Date());
  98 + var timeobj=bookOrder.changedate(currentTime)
  99 + var timelist=[
  100 + {
  101 + title:'早市',
  102 + time_dur:'6:00-10:00',
  103 + list:[
  104 + {
  105 + time_dur:'6:00',
  106 + isselect:false,
  107 + time_mask:6
  108 + }
  109 + ],
  110 + starttime:6,
  111 + endtime:10
  112 + },
  113 + {
  114 + title:'午市',
  115 + time_dur:'11:00-15:00',
  116 + list:[
  117 + {
  118 + time_dur:'11:00',
  119 + isselect:false,
  120 + time_mask:11
  121 + }
  122 + ],
  123 + starttime:11,
  124 + endtime:15
  125 + },
  126 + {
  127 + title:'晚市',
  128 + time_dur:'17:00-22:00',
  129 + list:[
  130 + {
  131 + time_dur:'17:00',
  132 + isselect:false,
  133 + time_mask:17
  134 + }
  135 + ],
  136 + starttime:17,
  137 + endtime:22
  138 + },
  139 + ];
  140 + var that=this;
  141 + timelist.forEach(function(v,i){
  142 + var len=(v.endtime-v.starttime)/0.5;
  143 + var time=v.starttime;
  144 + console.log(len)
  145 + for(var j=0;j<len;j++){
  146 + time+=0.5;
  147 + if(bookOrder.isInteger(time)==true){
  148 + v.list.push(
  149 + {
  150 + time_dur:time+':00',
  151 + isselect:false,
  152 + time_mask:time
  153 + }
  154 + )
  155 + }else{
  156 + v.list.push(
  157 + {
  158 + time_dur:Math.floor(time)+':30',
  159 + isselect:false,
  160 + time_mask:time
  161 + }
  162 + )
  163 + }
  164 + }
  165 + })
  166 + var thisdate=0;
  167 + if(that.data.selectdate.split('-')[1].length>1){
  168 + thisdate=parseInt(that.data.selectdate.split('-')[1][0]=='0' ? that.data.selectdate.split('-')[1].slice(1,2) : that.data.selectdate.split('-')[1])
  169 + }else{
  170 + thisdate=parseInt(that.data.selectdate.split('-')[1])
  171 + }
  172 + if(thisdate==timeobj.day){
  173 + var thistime=timeobj.hour+timeobj.minute/60;
  174 + var dd=[]
  175 + timelist.forEach(function(v,i){
  176 + if(thistime<v.endtime){
  177 + dd.push(v)
  178 + }
  179 + })
  180 + timelist=dd;
  181 + timelist.forEach(function(v,i){
  182 + if(thistime>=v.starttime && thistime<=v.endtime){
  183 + var list=[]
  184 + v.list.forEach(function(r,n){
  185 + if(thistime<r.time_mask){
  186 + list.push(r)
  187 + }
  188 + })
  189 + v.list=list
  190 + }
  191 + })
  192 +
  193 + }
  194 +
  195 + this.setData({
  196 + timeList:timelist
  197 + })
  198 +
  199 + },
  200 +})
  1 +{
  2 + "backgroundTextStyle":"light",
  3 + "navigationBarBackgroundColor": "#fff",
  4 + "navigationBarTextStyle":"black",
  5 + "usingComponents": {
  6 + "timeDuration":"/components/book/time/time",
  7 + "nav":"/components/nav/nav"
  8 + }
  9 +
  10 +}
  1 +<nav>点餐商户端</nav>
  2 +<!--日期-->
  3 +<view style="padding-bottom:160rpx;">
  4 + <view class="select-date flex-lr smooth">
  5 + <block wx:for="{{dateList}}">
  6 + <view class="single-date gray-deep-font flex-vc" bindtap="selectdate" data-title="{{item.title}}">
  7 + <view class="font30r {{item.isActive==true ? 'black-font' : ''}}">{{item.title}}</view>
  8 + <view class="font34r date-num flex-cc {{item.isActive==true ? 'select-date-active black-font' : ''}}">{{item.date}}</view>
  9 + </view>
  10 + </block>
  11 + <view class="single-date gray-deep-font flex-vc">
  12 + <view class="font30r">更多</view>
  13 + <view class="date-num flex-vc">
  14 + <image src="http://qn.colorcun.com/custom/lite-yd/image/more-dot.png" class="more-dot"></image>
  15 + </view>
  16 + </view>
  17 + </view>
  18 + <block wx:for="{{timeList}}">
  19 + <timeDuration item="{{item}}" bind:changelist="changelist"></timeDuration>
  20 + </block>
  21 +</view>
  22 +<view class="confirm-button white-font flex-vc font34r {{time_dur ? 'confirm-button-active' : ''}}" bindtap="{{time_dur ? 'selectOther' : ''}}">确定</view>
  23 +
  24 +
  25 +<date-picker
  26 + startTime="{{startTime}}"
  27 + endTime="{{endTime}}"
  28 + unit="{{unit}}"
  29 + reserveUnit="{{reserveUnit}}"
  30 + unreserveTime="{{unreserveTime}}"
  31 + activedConst="{{activedConst}}"
  32 + disabledConst="{{disabledConst}}"
  33 + themeColor="#1f78d1"
  34 + bind:selectTime="onSelectTime"
  35 +/>
  1 +.select-date{
  2 + width:680rpx;
  3 + height:180rpx;
  4 + margin:0 auto;
  5 +}
  6 +.more-dot{
  7 + width:50rpx;
  8 + height:10rpx;
  9 +}
  10 +.date-num{
  11 + padding:0 10rpx;
  12 + height:70rpx;
  13 +}
  14 +.select-date-active{
  15 + border-bottom:2px solid #199095;
  16 + box-sizing:border-box;
  17 +}
  18 +.confirm-button{
  19 + width:680rpx;
  20 + height:85rpx;
  21 + background:#74BBBE;
  22 + position:fixed;
  23 + left:0;
  24 + right:0;
  25 + bottom:60rpx;
  26 + margin:0 auto;
  27 + border-radius:10rpx;
  28 +}
  29 +.confirm-button-active{
  30 + background:#199095;
  31 +}
  1 +// pages/book/b_addnew.js
  2 +import util from '../../utils/util';
  3 +import comm from '../../utils/bookCommon';
  4 +import App from '../../utils/api';
  5 +const {regeneratorRuntime} = global
  6 +const formTpl = {
  7 + rid: '',
  8 + date: 0,
  9 + time: 0,
  10 + //pnum_str:'1-4',
  11 + pnum: 6,
  12 + tabid: 0,
  13 +
  14 + rname: '',
  15 + phone: '',
  16 + sex: 1,
  17 + cusdem: '',
  18 +
  19 + tid: [],
  20 +
  21 +}
  22 +Page({
  23 +
  24 + /**
  25 + * 页面的初始数据
  26 + */
  27 + data: {
  28 + dateStr: [],
  29 + form: JSON.parse(JSON.stringify(formTpl)),
  30 + tables: [],
  31 + grand: [
  32 + {
  33 + sex: 1,
  34 + grand_title: '先生',
  35 + isselect: true
  36 + },
  37 + {
  38 + sex: 2,
  39 + grand_title: '女士',
  40 + isselect: false
  41 + },
  42 + {
  43 + sex: 3,
  44 + grand_title: '公司',
  45 + isselect: false
  46 + }
  47 + ],
  48 + buttonhide: true,
  49 +
  50 + calendarMaskLoad: false,
  51 + calendarMask: false,
  52 + dayStyle: [
  53 + {month: 'current', day: new Date().getDate(), color: 'white', background: '#AAD4F5'},
  54 + {month: 'current', day: new Date().getDate(), color: 'white', background: '#AAD4F5'}
  55 + ],
  56 + timePickerArray: [
  57 + [],
  58 + [],
  59 + [],
  60 + ],
  61 + timePickerIndex: [0, 0, 0],
  62 + tablesLength: 0,
  63 +
  64 + timePickerMask: false,
  65 + pnumInputFocus: false,
  66 + pageMarginBottom: 0,
  67 + speciallist: [],
  68 + calendar: {
  69 + nextNum: 0,
  70 + },
  71 + defDtime: ['', '12:00', '18:30'],
  72 + hasUseDefDtime: true,
  73 + CustomRemark:[],
  74 + CustomRemarkMoreMask:false,
  75 + },
  76 + /**
  77 + * 生命周期函数--监听页面加载
  78 + */
  79 + reserve_id: '',
  80 + checkedTables:{},//已选中的桌子集合
  81 + onLoad: async function (options) {
  82 + this.initLoad(options)
  83 + this.getCustomRemark();
  84 + },
  85 + async initLoad(options = {}){
  86 + let nt = new Date() / 1000;
  87 + let speciallist = [
  88 + {date: util.unixtoTime(nt, 'YYYY-MM-DD'), background: '', text: '今 天'},
  89 + {date: util.unixtoTime(nt + 86400, 'YYYY-MM-DD'), background: '', text: '明 天'},
  90 + {date: util.unixtoTime(nt + 86400 * 2, 'YYYY-MM-DD'), background: '', text: '后 天'},
  91 + ];
  92 + this.reserve_id = options.id || '';
  93 + await this.setDateStr();
  94 + this.sellerid = util.cache('enter_params')['seller_id'];
  95 + let timePickerArray = await comm.getDayTimeSpace();
  96 + //判断hasUseDefDtime
  97 + let hasUseDefDtime = true;
  98 + let mmii = util.unixtoTime(new Date() / 1000, 'HH:II');
  99 + if (mmii > this.data.defDtime[this.data.form.time]) {
  100 + hasUseDefDtime = false;
  101 + }
  102 +
  103 + this.setData({
  104 + timePickerArray: timePickerArray,
  105 + speciallist: speciallist,
  106 + hasUseDefDtime: hasUseDefDtime,
  107 + })
  108 + if (this.reserve_id > 0) {
  109 + this.initModify(this.reserve_id);
  110 + } else if(options.hasQuick==1){
  111 + this.initQuick(options);
  112 + } else {
  113 + this.getTables();
  114 + }
  115 + },
  116 + /**
  117 + *
  118 + * @param d
  119 + *
  120 + */
  121 + async setDateStr(d = new Date() / 1000){
  122 + let ns = new Date() / 1000;
  123 + let dateStr = [
  124 + util.unixtoTime(ns, 'MM-DD `DAY/周WW`'),
  125 + util.unixtoTime(parseInt(ns) + 86400, 'MM-DD `DAY/周WW`'),
  126 + ];
  127 + //let dateStr=this.data.dateStr;
  128 + let nowStr = util.unixtoTime(d, 'MM-DD `DAY/周WW`')
  129 + let form = this.data.form;
  130 +
  131 + let timeObj = await comm.getTimeSpaceIndexData(d);
  132 + //form.time=await comm.getTimeSpaceIndex(d);
  133 + form.time = timeObj.timeIndex;
  134 +
  135 + let ind = dateStr._indexOf(nowStr);
  136 + if (ind > -1) {
  137 + form.date = ind
  138 + } else {
  139 + dateStr.push(nowStr.substr(0, 5));
  140 + form.date = 2;
  141 + }
  142 + let timePickerIndex = this.data.timePickerIndex;
  143 + timePickerIndex[timeObj.timeIndex] = timeObj.timeMatchIndex;
  144 + let obj = {
  145 + dateStr: dateStr,
  146 + form: form,
  147 + timePickerIndex: timePickerIndex,
  148 + timeOpt: timeObj.timeOpt,
  149 + };
  150 + this.setData(obj)
  151 + return obj;
  152 +
  153 + },
  154 +
  155 + /**
  156 + * 生命周期函数--监听页面初次渲染完成
  157 + */
  158 + onReady: function () {
  159 +
  160 + },
  161 +
  162 + /**
  163 + * 生命周期函数--监听页面显示
  164 + */
  165 + onShow: function () {
  166 + //if(!this.reserve_id || util.cache('tableid').length>0){
  167 + //if (util.cache('tableid').length > 0) {
  168 + this.getTables();
  169 + //}
  170 + setTimeout(() => {
  171 + this.setData({
  172 + calendarMaskLoad: true,
  173 + })
  174 + }, 1000);
  175 + this.conditionInfo()
  176 + },
  177 +
  178 + /**
  179 + * 生命周期函数--监听页面隐藏
  180 + */
  181 + onHide: function () {
  182 +
  183 + },
  184 +
  185 + /**
  186 + * 生命周期函数--监听页面卸载
  187 + */
  188 + onUnload: function () {
  189 +
  190 + },
  191 +
  192 + /**
  193 + * 页面相关事件处理函数--监听用户下拉动作
  194 + */
  195 + onPullDownRefresh: function () {
  196 +
  197 + },
  198 +
  199 + /**
  200 + * 页面上拉触底事件的处理函数
  201 + */
  202 + onReachBottom: function () {
  203 +
  204 + },
  205 +
  206 + /**
  207 + * 用户点击右上角分享
  208 + */
  209 + onShareAppMessage: function () {
  210 +
  211 + },
  212 + selectedValue(e){
  213 + console.log(e);
  214 + let key = util.attr(e, 'key');
  215 + let val;
  216 + let sobj = {};
  217 + if (e.type == 'input' || e.type == 'confirm') {
  218 + val = util.val(e);
  219 + if (key == 'phone') {
  220 + var that = this;
  221 + if (e.detail.value != '' && e.detail.value.length >= 3) {
  222 + App.Reserve.GetReserveUser(
  223 + {
  224 + keywords: e.detail.value,
  225 + sid: this.sellerid
  226 + }
  227 + ).then(function (json) {
  228 + if (json.ret == 200 && json.data.length > 0) {
  229 + that.setData({
  230 + searchlist: json.data
  231 + })
  232 + } else {
  233 + that.setData({
  234 + searchlist: null
  235 + })
  236 + }
  237 + })
  238 + } else {
  239 + this.setData({
  240 + searchlist: null
  241 + })
  242 + }
  243 + }
  244 + if (key == 'pnum') {
  245 + sobj.pnumInputFocus = true;
  246 + }
  247 + } else {
  248 + val = util.attr(e, 'value');
  249 + }
  250 + if (key == 'time') {
  251 + if (this.data.timeOpt[val]) return;
  252 + }
  253 + if ((key == 'time' && this.data.form.time == val) || (key == 'date' && this.data.form.date == val)) {
  254 + if (util.attr(e, 'display') != 'block') {
  255 + return;
  256 + }
  257 + }
  258 + let form = this.data.form;
  259 +
  260 + if (key == 'tid') {
  261 + let ts = this.data.tables;
  262 + if (ts[val].isselect) {
  263 + ts[val].isselect = false;
  264 + form.tid.remove(ts[val].id);
  265 + delete this.checkedTables[ts[val].id]
  266 + } else {
  267 + ts[val].isselect = true;
  268 + form.tid.push(ts[val].id);
  269 + this.checkedTables[ts[val].id]=ts[val].name
  270 + }
  271 + sobj.tables = ts;
  272 + } else {
  273 + form[key] = val;
  274 + }
  275 + console.log('ts', sobj.tables,this.checkedTables);
  276 + //console.log(e.type,key,val,form);
  277 + sobj.form = form;
  278 + sobj.buttonhide = this.data.buttonhide;
  279 + if (form.tid.length > 0 && form.rname.length > 0) {
  280 + sobj.buttonhide = false;
  281 + }else{
  282 + sobj.buttonhide = true;
  283 + }
  284 + let displayTimes = false;
  285 + if (key == 'time') {
  286 + if (util.attr(e, 'display') == 'block') {
  287 + displayTimes = true;
  288 + sobj.timePickerMask = true;
  289 + }
  290 + }
  291 + if ('date,time,pnum,pnum_str,tabid'.indexOf(key) > -1) {
  292 + if (!displayTimes) {
  293 + //sobj.form.tid = []; //切换日期时间清空桌位
  294 + //sobj.buttonhide = true;
  295 + this.getTables();
  296 + }
  297 + if (key == 'date') {
  298 + let xtime = util.unixtoTime(new Date() / 1000, 'YYYY-' + (this.data.dateStr[val].substr(0, 5)) + ' HH:II:SS');
  299 + this.setDateStr(util.timetouUnix(xtime));
  300 + }
  301 + }
  302 + //判断hasUseDefDtime
  303 + if ((key == 'time' || key == 'date') && !sobj.timePickerMask) {
  304 + sobj.hasUseDefDtime = true
  305 + }
  306 + if (this.data.form.date == 0) {//
  307 + let mmii = util.unixtoTime(new Date() / 1000, 'HH:II');
  308 + if (mmii > this.data.defDtime[key == 'time' ? val : this.data.form.time]) {
  309 + sobj.hasUseDefDtime = false;
  310 + }
  311 + }
  312 + this.setData(sobj)
  313 + },
  314 + async getTables(){
  315 + let form = this.data.form;
  316 + let tableid = util.cache('tableid');
  317 + console.log('getTables-tableid', tableid.length, this.reserve_id);
  318 + //if (tableid.length < 1 && this.reserve_id) {
  319 + if (tableid.length < 1) {
  320 + tableid = this.data.form.tid;
  321 + }
  322 + console.log('getTables-tableid', tableid, tableid.length);
  323 + try {
  324 + let rdate = await comm.getTimeSpace(this.data.dateStr[this.data.form.date], this.data.form.time);
  325 + console.log('rdate', this.data.dateStr[this.data.form.date], rdate);
  326 + App.Reserve.GetTableList({
  327 + sid: util.cache('enter_params')['seller_id'],
  328 + //pnum_str:form.pnum_str,
  329 + pnum: form.pnum,
  330 + rdate: rdate,
  331 + tid: form.tabid,
  332 + rid: this.reserve_id,
  333 + }).then(res => {
  334 + let tables = [];
  335 + let tablesLength = 0;
  336 + if (tableid.length > 0) {
  337 + let toastTables={...this.checkedTables}
  338 + let resData=res.data.slice(1,res.data.length);
  339 + console.log('resData',resData)
  340 + resData.forEach(p => {
  341 + //if(tables.length>=3) return true;
  342 + p.list.forEach(t => {
  343 + delete toastTables[t.id]
  344 + tablesLength++;
  345 + if (tables.length >= 3) return true;
  346 + if (tableid._indexOf(t.id) > -1) {
  347 + t.isselect = true;
  348 + tables.push(t);
  349 + }
  350 + })
  351 + })
  352 + console.log('toastTables',toastTables,this.data.form.tid,this.checkedTables);
  353 + //清理已选中的桌位
  354 + let toastTablesInfo=[];
  355 + let tid=this.data.form.tid
  356 + Object.keys(this.checkedTables).forEach(ckid=>{
  357 + if(toastTables[ckid]){
  358 + delete this.checkedTables[ckid]
  359 + tid.remove(ckid);
  360 + toastTablesInfo.push(toastTables[ckid]);
  361 + }
  362 + })
  363 + if(toastTablesInfo.length>0){
  364 + this.setData({
  365 + [`form.tid`]:tid,
  366 + })
  367 + util.toast(toastTablesInfo.toString()+'已被占用啦','none');
  368 + }
  369 + wx.removeStorage({key: 'tableid'})
  370 + }
  371 + console.log('tables-first',tables);
  372 + if(tables.length<1){
  373 + tablesLength=0;
  374 + let fortids=[];
  375 + res.data.forEach((p,ri) => {
  376 + p.list.forEach(t => {
  377 + if(fortids._indexOf(t.id)<0) {
  378 + tablesLength++;
  379 + tables.push(t);
  380 + fortids.push(t.id);
  381 + }
  382 + })
  383 + })
  384 + if (tables.length >= 3) {
  385 + tables = tables.slice(0, 3);
  386 + }
  387 + }
  388 + this.tablesLength = tablesLength;
  389 + this.setData({
  390 + tables: tables,
  391 + tablesLength: tablesLength
  392 + })
  393 + })
  394 + } catch (e) {
  395 + this.setData({
  396 + tables: []
  397 + })
  398 + }
  399 + },
  400 + async formsubmit(){
  401 + if (this.data.buttonhide) return;
  402 + try {
  403 + let d_stimestr = this.data.timePickerArray[this.data.form.time][this.data.timePickerIndex[this.data.form.time]];
  404 + let d_rdate = await comm.getTimeSpace(this.data.dateStr[this.data.form.date],
  405 + this.data.form.time, d_stimestr);
  406 + let stimestr = this.data.timePickerArray[this.data.form.time][this.data.timePickerIndex[0]];
  407 + let rdate = await comm.getTimeSpace(this.data.dateStr[this.data.form.date],
  408 + this.data.form.time, stimestr);
  409 + console.log('stimestr', stimestr, this.data.form.time, this.data.timePickerIndex);
  410 + console.log('rdate', rdate);
  411 + this.setData({
  412 + buttonhide: true,
  413 + })
  414 + let form = JSON.parse(JSON.stringify(this.data.form));
  415 + console.log('typeof form.tid', typeof form.tid);
  416 + if (typeof form.tid == 'object') {
  417 + let tid = new Set(form.tid);//tid 去重
  418 + form.tid = [...tid].toString();
  419 + }
  420 + if (!form.tid) {
  421 + return util.toast('请选择桌子', 'none');
  422 + }
  423 + if (!form.rname) {
  424 + return util.toast('请填写预订人', 'none');
  425 + }
  426 + form.sid = this.sellerid;
  427 + form.rdate = rdate
  428 +
  429 + try {
  430 + let enter_params = util.cache('enter_params');
  431 + let sc = (await App.Reserve.SellerInfo(enter_params)).data
  432 + let note_openid = enter_params.seller_openid;
  433 + let note_name = sc.seller_user.nick_name || sc.seller_user.nickname;
  434 + form.note_openid = note_openid || '';
  435 + if (form.rid) {//修改时传递uid
  436 + form.note_openid = enter_params.manager_id || '';
  437 + }
  438 + form.note_name = note_name || '';
  439 + } catch (e) {}
  440 +
  441 + form.ddate = d_rdate.substr(0, 10);
  442 + if (this.data.hasUseDefDtime && this.data.form.time > 0) {//转为默认时间
  443 + let ddateStr = util.unixtoTime(form.ddate, "YYYY-MM-DD " + this.data.defDtime[this.data.form.time] + ":00");
  444 + form.ddate = util.timetouUnix(ddateStr);
  445 + }
  446 + App.Reserve.SetReserveInfo(form).then(res => {
  447 + if (res.ret == 200) {
  448 + this.getCustomRemark()
  449 + let _id = (res.data.id || res.data)
  450 + this.setData({
  451 + form: JSON.parse(JSON.stringify(formTpl)),
  452 + tables: [],
  453 + timePickerIndex: [0, 0, 0],
  454 + })
  455 + this.initLoad();
  456 + this.checkedTables={};
  457 + App.Reserve.Detail({rid: _id, openid: ''}, 'clear')
  458 + wx.navigateTo({
  459 + url: util.http_build_query({id:_id,tplid:1},'b_invitation'),
  460 + });
  461 + } else {
  462 + util.toast(res.msg, 'none')
  463 + }
  464 + })
  465 + } catch (e) {
  466 + }
  467 + },
  468 + selectphone: function (e) {
  469 + this.data.form.phone = e.detail.phone;
  470 + this.data.form.rname = e.detail.rname;
  471 + this.data.form.cusdem = e.detail.cusdem;
  472 + var form = this.data.form
  473 + this.data.form.sex = e.detail.sex;
  474 + this.setData({
  475 + form: this.data.form,
  476 + searchlist: null
  477 + })
  478 + this.conditionInfo();
  479 + },
  480 + calendarShow(){
  481 + this.setData({
  482 + calendarMask: true
  483 + })
  484 + },
  485 + dateChange(event){
  486 + console.log(event);
  487 + //let cktime=util.timetouUnix(event.detail.year+'/'+event.detail.month+'/'+event.detail.day)
  488 + let cktime = util.timetouUnix(event.detail.date)
  489 + let day0 = parseInt(new Date(new Date().setHours(0, 0, 0, 0)) / 1000);
  490 + // if (cktime < day0) {
  491 + // util.toast('请选择有效日期', 'none');
  492 + // return;
  493 + // }
  494 + let clickDay = event.detail.date.substr(8, 2);
  495 + let changeDay = `dayStyle[1].day`;
  496 + let changeBg = `dayStyle[1].background`;
  497 + this.setData({
  498 + [changeDay]: clickDay,
  499 + [changeBg]: "#84e7d0",
  500 + //[`form.tid`]: [], //切换日期时间清空桌位
  501 + //buttonhide: true,
  502 + })
  503 + console.log('cktime',cktime,util.unixtoTime(cktime,'YYYY-MM-DD'))
  504 + this.setDateStr(cktime == day0 ? new Date() / 1000 : cktime)
  505 + this.calendarClose();
  506 + setTimeout(res=>{
  507 + this.getTables();
  508 + },10)
  509 +
  510 + },
  511 + calendarClose(){
  512 + this.setData({
  513 + calendarMask: false,
  514 + timePickerMask: false,
  515 + })
  516 + },
  517 + async selectdesk(){
  518 + let rdate = await comm.getTimeSpace(this.data.dateStr[this.data.form.date], this.data.form.time);
  519 + console.log(this.data.form)
  520 + wx.navigateTo({
  521 + url: 'b_desk?rdate=' + rdate + '&tid=' + this.data.form.tabid
  522 + //+'&pnum_str='+this.data.form.pnum_str
  523 + + '&pnum=' + this.data.form.pnum
  524 + + '&checked_tids=' + this.data.form.tid
  525 + + '&rid=' + this.reserve_id
  526 + })
  527 + },
  528 + conditionInfo: function () {
  529 + var form = this.data.form
  530 + if (form.tid.length > 0 && form.rname.length > 0) {
  531 + this.data.buttonhide = false;
  532 + }
  533 + this.setData({
  534 + buttonhide: this.data.buttonhide
  535 + })
  536 + },
  537 + /**
  538 + * 选中时间区域
  539 + */
  540 + bindTimePickerChange(e){
  541 + let timeIndex = util.attr(e, 'timeIndex');
  542 + if (timeIndex < 0) return;
  543 + let timePickerIndex = this.data.timePickerIndex;
  544 + //timePickerIndex[timeIndex]=util.val(e);
  545 + timePickerIndex[timeIndex] = util.attr(e, 'val');
  546 +
  547 + console.log(e, timeIndex, util.attr(e, 'val'));
  548 + this.setData({
  549 + timePickerIndex: timePickerIndex,
  550 + hasUseDefDtime: false,
  551 + })
  552 + },
  553 + /**
  554 + * 修改初始化
  555 + */
  556 + async initModify(id){
  557 + try {
  558 + let res = await App.Reserve.Detail({rid: id, openid: ''});
  559 +
  560 + console.log('initModify', res);
  561 + //设置日期
  562 + let obj = await this.setDateStr(res.data.ddate);
  563 + //设置时间
  564 + let nd = util.unixtoTime(res.data.ddate, 'HH:II');
  565 + let timePickerIndex = this.data.timePickerIndex
  566 + console.log('initModify-', this.data.timePickerArray, obj.form.time, nd)
  567 + this.data.timePickerArray[obj.form.time].forEach((dd, ii) => {
  568 + console.log('initModify-', nd, dd)
  569 + if (nd == dd) {
  570 + timePickerIndex[obj.form.time] = ii;
  571 + return true;
  572 + }
  573 + })
  574 +
  575 + console.log('initModify-timePickerIndex', timePickerIndex);
  576 + //obj.form.pnum_str=res.data.pnum_str;
  577 + obj.form.pnum = res.data.pnum || 6;
  578 + obj.form.rname = res.data.rname;
  579 + obj.form.phone = res.data.phone || "";
  580 + obj.form.sex = res.data.sex;
  581 + obj.form.cusdem = res.data.cusdem;
  582 + obj.form.rid = id;
  583 + obj.form.tid = [];
  584 + let tablesed = [];
  585 + res.data.tables.forEach((t, ti) => {
  586 + obj.form.tid.push(t.id)
  587 + if (ti >= 3) return;
  588 + t.isselect = true
  589 + t["isselected"] = 1
  590 + tablesed.push(t);
  591 + this.checkedTables[t.id]=t.name;
  592 + })
  593 + this.setData({
  594 + timePickerIndex: timePickerIndex,
  595 + form: obj.form,
  596 + //tablesed:tablesed,
  597 + hasUseDefDtime: false,
  598 + })
  599 + setTimeout(() => {
  600 + this.getTables();
  601 + }, 300)
  602 +
  603 + } catch (e) {
  604 + console.log('initModify', e)
  605 + }
  606 + },
  607 + pnumInputFocusEvent(e){
  608 + console.log(e);
  609 + this.setData({
  610 + pnumInputFocus: 'focus' == e.type
  611 + })
  612 + },
  613 + inputFocusTime: 0,
  614 + blurTime: 0,
  615 + inputFocus(e){
  616 + console.log(e, this.inputFocusTime);
  617 + return;
  618 + if (e.timeStamp > this.inputFocusTime) {
  619 + this.inputFocusTime = e.timeStamp;
  620 + if (e.type == 'focus' && this.data.pageMarginBottom == 0) {
  621 + this.setData({
  622 + pageMarginBottom: 300
  623 + })
  624 + setTimeout(res => {
  625 + this.pageScrollToBottom();
  626 + }, 100)
  627 + } else {
  628 + if (this.blurTime > 5) {
  629 + this.blurTime = 0;
  630 + this.setData({
  631 + pageMarginBottom: 0
  632 + })
  633 + } else {
  634 + setTimeout(res => {
  635 + this.blurTime += 1;
  636 + this.inputFocus(e);
  637 + }, 300)
  638 + }
  639 +
  640 + }
  641 +
  642 + }
  643 + },
  644 + pageScrollToBottom: function () {
  645 + wx.createSelectorQuery().select('#j_page').boundingClientRect(function (rect) {
  646 + // 使页面滚动到底部
  647 + wx.pageScrollTo({
  648 + scrollTop: rect.bottom
  649 + })
  650 + }).exec()
  651 + },
  652 + gotoday(e){
  653 + this.setData({
  654 + [`calendar.nextNum`]: 0
  655 + })
  656 + },
  657 + nextMonth(e){
  658 + this.setData({
  659 + [`calendar.nextNum`]: this.data.calendar.nextNum + 1
  660 + })
  661 + },
  662 + prevMonth(e){
  663 + this.setData({
  664 + [`calendar.nextNum`]: this.data.calendar.nextNum - 1
  665 + })
  666 + },
  667 + /**
  668 + * 快速预定初始化
  669 + * tid
  670 + * tname
  671 + * ddate
  672 + * pnum
  673 + */
  674 + async initQuick(options){
  675 + try {
  676 + console.log('initQuick', options);
  677 + this.checkedTables[options.tid]=options.tname
  678 + options.ddate=options.ddate.substr(0,10);
  679 + //设置日期
  680 + let obj = await this.setDateStr(options.ddate);
  681 + //设置时间
  682 + let nd = util.unixtoTime(options.ddate, 'HH:II');
  683 + let timePickerIndex = this.data.timePickerIndex
  684 + console.log('initQuick-', this.data.timePickerArray, obj.form.time, nd)
  685 + this.data.timePickerArray[obj.form.time].forEach((dd, ii) => {
  686 + console.log('initQuick-', nd, dd)
  687 + if (nd == dd) {
  688 + timePickerIndex[obj.form.time] = ii;
  689 + return true;
  690 + }
  691 + })
  692 +
  693 + console.log('initQuick-timePickerIndex', timePickerIndex);
  694 + obj.form.pnum = options.pnum || 6;
  695 + obj.form.rname = "";
  696 + obj.form.phone = "";
  697 + obj.form.sex = 1;
  698 + obj.form.cusdem = "";
  699 + obj.form.rid = "";
  700 + obj.form.tid = [options.tid];
  701 + this.setData({
  702 + timePickerIndex: timePickerIndex,
  703 + form: obj.form,
  704 + hasUseDefDtime: false,
  705 + })
  706 + setTimeout(() => {
  707 + this.getTables();
  708 + }, 300)
  709 +
  710 + } catch (e) {
  711 + console.log('initQuick', e)
  712 + }
  713 + },
  714 + getCustomRemark(){
  715 + App.User.GetCustomRemark({
  716 + uid:util.cache('enter_params')['manager_id'],
  717 + }).then(res=>{
  718 + let CustomRemark=[];
  719 + res.data.forEach(r=>{
  720 + if(r.often_use){
  721 + CustomRemark.push(r);
  722 + }
  723 + })
  724 + this.setData({
  725 + CustomRemark:CustomRemark,
  726 + })
  727 + })
  728 + },
  729 + oftenUse(e){
  730 + let id=util.attr(e,'id');
  731 + let val=util.attr(e,'value');
  732 + let CustomRemark=this.data.CustomRemark;
  733 + let form=this.data.form;
  734 + CustomRemark.forEach(r=>{
  735 + if(id==r.id){
  736 + if(r.active){
  737 + form.cusdem=form.cusdem.replace(val+'、','')
  738 + }
  739 + r.active=!r.active
  740 + if(r.active){
  741 + form.cusdem+=val+'、'
  742 + }
  743 + }
  744 + })
  745 + this.setData({
  746 + CustomRemark:CustomRemark,
  747 + form:form,
  748 + })
  749 + this.conditionInfo()
  750 + },
  751 + CustomRemarkMore(){
  752 + this.setData({
  753 + CustomRemarkMoreMask:!this.data.CustomRemarkMoreMask
  754 + })
  755 + }
  756 +})
  1 +{
  2 + "backgroundTextStyle":"light",
  3 + "navigationBarBackgroundColor": "#fff",
  4 + "navigationBarTextStyle":"black",
  5 + "usingComponents": {
  6 + "nothingBook":"/components/book/nothing/nothing",
  7 + "bookList":"/components/book/list/list",
  8 + "nav":"/components/nav/nav",
  9 + "tabBar":"/components/book/tabBar/tabBar",
  10 + "searchList":"/components/searchlist/searchlist",
  11 + "calendar": "plugin://bmCalendar/calendar",
  12 + "board":"/components/book/board/board",
  13 + "formids":"/components/formids/formids",
  14 + "a2l":"/components/tips/add-to-lite"
  15 + }
  16 +}
  1 +<!--pages/book/b_addnew.wxml-->
  2 +<nav>录入订座信息</nav>
  3 +<view class="page" style="margin-bottom: {{pageMarginBottom}}rpx;" id="j_page">
  4 + <view class="base-info">
  5 + <!--
  6 + <view class="section flex-lr date">
  7 + <view class="flex-rr" style="width:100%;">
  8 + <item class="date-item {{form.date==0?'checked':''}}"
  9 + bindtap="selectedValue" data-key="date" data-value="0">
  10 + <view class="date-item-text">{{dateStr[0]}}</view>
  11 + </item>
  12 + <item class="date-item {{form.date==1?'checked':''}}"
  13 + bindtap="selectedValue" data-key="date" data-value="1">
  14 + <view class="date-item-text">{{dateStr[1]}}</view>
  15 + </item>
  16 + </view>
  17 + <view class="more flex-ll" bindtap="calendarShow">
  18 + <view></view>
  19 + <view></view>
  20 + <view></view>
  21 + </view>
  22 + </view>
  23 + -->
  24 + <view class="section">
  25 + <view class="tab flex-ll">
  26 + <formids class="item {{form.date==0?'checked':''}}"
  27 + bindtap="selectedValue" data-key="date" data-value="0">
  28 + {{dateStr[0]}}
  29 + </formids>
  30 + <formids class="item {{form.date==1?'checked':''}}"
  31 + bindtap="selectedValue" data-key="date" data-value="1">
  32 + {{dateStr[1]}}
  33 + </formids>
  34 + <view class="item {{form.date==2?'checked':''}} flex-lr"
  35 + bindtap="selectedValue" data-key="date" data-value="2" bindtap="calendarShow">
  36 + <view style="width: 80%" class="item-text">{{dateStr[2]||'其他'}}</view>
  37 + <image
  38 + src="http://qn.colorcun.com/custom/lite-yd/image/date{{dateStr[2]?'.selected':''}}.png"
  39 + style="min-width: 36rpx;width: 36rpx;height: 36rpx; margin-right: 22rpx;"></image>
  40 + </view>
  41 + </view>
  42 + </view>
  43 + <view class="section ">
  44 + <view class="tab flex-ll">
  45 + <formids class="item {{form.time==0?'checked':''}} {{timeOpt[0]}}"
  46 + wx:if="{{timePickerArray[0].length>0}}"
  47 + bindtap="selectedValue" data-key="time" data-value="0">
  48 + <view class="picker">早市</view>
  49 + </formids>
  50 + <formids class="item {{form.time==1?'checked':''}} {{timeOpt[1]}}"
  51 + wx:if="{{timePickerArray[1].length>0}}"
  52 + bindtap="selectedValue" data-key="time" data-value="1">
  53 + <view class="picker">午市</view>
  54 + </formids>
  55 + <formids class="item {{form.time==2?'checked':''}} {{timeOpt[2]}}"
  56 + wx:if="{{timePickerArray[2].length>0}}"
  57 + bindtap="selectedValue" data-key="time" data-value="2">
  58 + <view class="picker">晚市</view>
  59 + </formids>
  60 + </view>
  61 + </view>
  62 + <view class="section" style="height: 90rpx;">
  63 + <view class="tab flex-lr">
  64 + <view class="tab flex-ll">
  65 + <formids class="item-pnum {{form.pnum==item?'checked':''}}" wx:for="{{[6,7,8,9,10]}}" wx:key="pnum.key"
  66 + bindtap="selectedValue" data-key="pnum" data-value="{{item}}">
  67 + <view class="pnum">{{item}}</view>
  68 + </formids>
  69 + </view>
  70 + <view class="tab" style="margin-left: 20rpx;">
  71 + <view class="item {{form.pnum<6 || form.pnum>10?'checked':''}} flex-lr"
  72 + data-key="pnum" data-value="{{form.pnum}}">
  73 + <view style="width: 80%" class="pnum">
  74 + <input
  75 + bindinput="selectedValue" bindconfirm="selectedValue"
  76 + bindblur="pnumInputFocusEvent"
  77 + data-key="pnum" value="{{(form.pnum<6 || form.pnum>10) || pnumInputFocus?form.pnum:''}}"
  78 + placeholder-class="placeholder-class-pnum"
  79 + maxlength="3" type="number"
  80 + placeholder="{{form.pnum<6 || form.pnum>10?form.pnum:''}} 更多"/>
  81 +
  82 + </view>
  83 + <image
  84 + src="http://qn.colorcun.com/custom/lite-yd/image/pnum{{form.pnum<6 || form.pnum>10?'.selected':''}}.png"
  85 + style="min-width: 36rpx;width: 36rpx;height: 36rpx; margin-right: 22rpx;"></image>
  86 + </view>
  87 + </view>
  88 + </view>
  89 + </view>
  90 + <!--
  91 + <view class="section ">
  92 + <view class="tab flex-ll">
  93 + <view class="item {{form.pnum_str=='1-4'?'checked':''}}"
  94 + bindtap="selectedValue" data-key="pnum_str" data-value="1-4">
  95 + 4人以下
  96 + </view>
  97 + <view class="item {{form.pnum_str=='5-9'?'checked':''}}"
  98 + bindtap="selectedValue" data-key="pnum_str" data-value="5-9">
  99 + 5~9人
  100 + </view>
  101 + <view class="item {{form.pnum_str=='10-99'?'checked':''}}"
  102 + bindtap="selectedValue" data-key="pnum_str" data-value="10-99">
  103 + 10人以上
  104 + </view>
  105 + </view>
  106 + </view>
  107 + <view class="section ">
  108 + <view class="tab flex-ll">
  109 + <view class="item {{form.tabid=='2'?'checked':''}}"
  110 + bindtap="selectedValue" data-key="tabid" data-value="2">
  111 + 包间
  112 + </view>
  113 + <view class="item {{form.tabid=='1'?'checked':''}}"
  114 + bindtap="selectedValue" data-key="tabid" data-value="1">
  115 + 散座
  116 + </view>
  117 + </view>
  118 + </view>
  119 + -->
  120 + </view>
  121 +
  122 + <view class="page-full tables">
  123 + <view class="page" style="margin-top: 0">
  124 + <view class="title flex-lr">
  125 + <view>可订桌位<text wx:if="{{tables.length>0}}"> ({{tablesLength}})</text></view>
  126 + <view class="flex-rr advice-more" bindtap="selectdesk" wx:if="{{tablesLength>1}}">
  127 + <view style="padding-right:20rpx;" class="gray-deep-font font26r">更多</view>
  128 + <image src="http://qn.colorcun.com/custom/lite-yd/image/click.png" class="icon12-22"></image>
  129 + </view>
  130 + </view>
  131 + <view class="advice-desk-detail flex-rr" wx:if="{{tables.length>0}}">
  132 + <block wx:for="{{tablesed||tables}}" wx:key="tables.key">
  133 + <board width="160" height="180" board="{{item}}"
  134 + style="margin: 20rpx 0 0 20rpx"
  135 + event="boardChoose" className="noBottom"
  136 + data-value="{{index}}"
  137 + bindtap="selectedValue"
  138 + data-key="tid"></board>
  139 + </block>
  140 + </view>
  141 + <view class="advice-desk-detail flex-cc" wx:else="">
  142 + 没有符合条件的桌位!
  143 + </view>
  144 + </view>
  145 + </view>
  146 + <view class="book-info">
  147 + <view class="book-info-single flex-lr" style="align-items:flex-start;position:relative;z-index:10;">
  148 + <input placeholder="客户电话" placeholder-class="gray-font font34r" class="black-font font34r" type="number" maxlength="11"
  149 + bindinput="selectedValue"
  150 + bindconfirm="selectedValue"
  151 + data-key="phone"
  152 + value="{{form.phone}}" style="color:{{reminder ? '#E14553' : '#353535'}};width:{{reminder ? 400 : 680}}rpx;" cursor-spacing="260"/>
  153 + <view bindtap="selectedValue" data-key="time" data-value="{{form.time}}" data-display="block" style="color:#199095">
  154 + <view style="font-size: 34rpx;height: 100rpx;line-height: 100rpx;" wx:if="{{hasUseDefDtime && form.time>0}}">{{defDtime[form.time]}}</view>
  155 + <view style="font-size: 34rpx;height: 100rpx;line-height: 100rpx;" wx:else="">{{timePickerArray[form.time][timePickerIndex[form.time]]}}</view>
  156 + </view>
  157 + <block wx:if="{{searchlist}}">
  158 + <searchList searchlist="{{searchlist}}" bind:selectphone="selectphone"></searchList>
  159 + </block>
  160 + </view>
  161 + <view class="book-info-single flex-lr" style="align-items:flex-start;">
  162 + <input placeholder="客户姓名(必填)" placeholder-class="gray-font font34r" class="black-font font34r"
  163 + maxlength="12" style="width:450rpx;" value="{{form.rname}}"
  164 + bindinput="selectedValue"
  165 + bindconfirm="selectedValue"
  166 + bindfocus="inputFocus"
  167 + bindblur="inputFocus"
  168 + data-key="rname"/>
  169 + <view class="book-info-grand flex-rr font28r gray-deep-font">
  170 + <block wx:for="{{grand}}" wx:key="grand.key">
  171 + <view class="book-grand flex-cc book-grand-border {{form.sex==item.sex ? 'book-grand-active white-font' : ''}}"
  172 + bindtap="selectedValue"
  173 + data-value="{{item.sex}}"
  174 + data-key="sex">{{item.grand_title}}</view>
  175 + </block>
  176 + </view>
  177 + </view>
  178 +
  179 + <view class="book-info-single flex-lr">
  180 + <input placeholder="客户要求(25字以内,选填)" placeholder-class="gray-font font34r" class="black-font font34r" maxlength="25" value="{{form.cusdem}}"
  181 + bindinput="selectedValue"
  182 + bindconfirm="selectedValue"
  183 + bindfocus="inputFocus"
  184 + bindblur="inputFocus"
  185 + data-key="cusdem"/>
  186 + <view class="CustomRemarkMore flex-rr">
  187 + <view bindtap="CustomRemarkMore">快速备注</view>
  188 + </view>
  189 + </view>
  190 + <view wx:if="{{CustomRemark.length>0}}" class="book-info-single last" style="padding-top: 14rpx; height: 60rpx;">
  191 + <view class="flex-lr CustomRemark">
  192 + <view class="CustomRemarks">
  193 + <view class="CustomRemarksView">
  194 + <view class="CustomRemarkItem {{item.active?'active':''}}" wx:for="{{CustomRemark}}"
  195 + bindtap="oftenUse"
  196 + data-id="{{item.id}}"
  197 + data-value="{{item.often_use}}">{{item.often_use}}</view>
  198 + </view>
  199 + </view>
  200 + </view>
  201 + </view>
  202 + </view>
  203 + <view class="page-full submit">
  204 + <view class="confirm-button white-font flex-vc font34r {{buttonhide==false ? 'confirm-button-active' : ''}}" bindtap="{{buttonhide==false ? 'formsubmit' : ''}}">完成预订</view>
  205 + </view>
  206 +</view>
  207 +<tabBar></tabBar>
  208 +<view class="calendar-mask" bindtap="calendarClose"
  209 + style="height:{{calendarMask?'100%':0}};" wx:if="{{calendarMaskLoad}}">
  210 + <view style="width: 100%; height:{{calendarMask?'100%':0}};overflow: hidden;position: relative;">
  211 + <calendar catchtap="catchtap"
  212 + isTodaybtn="{{true}}" todaybtn_txt="回到今天"
  213 + custom="{{false}}"
  214 + switchover="{{['上一月','下个月']}}"
  215 + active-coloro="active-coloro"
  216 + active-colort="active-colort"
  217 + speciallist="{{speciallist}}"
  218 + txt_style="txt-style"
  219 + calendar-style="calendar"
  220 + header-style="calendar-header"
  221 + weektitle-style="weektitle-style"
  222 + restcolor-style="restcolor-style"
  223 + txt_type="cn-d"
  224 +
  225 + datefont-style="datefont-style"
  226 + todaybtn-style="todaybtn-style"
  227 +
  228 + bindnextMonth="nextMonth"
  229 + bindprevMonth="prevMonth"
  230 + bindselectDate="dateChange"
  231 + bindgotoday="gotoday"
  232 +
  233 + prev="{{true||calendar.nextNum>0}}"
  234 + circle_show="{{false}}"
  235 + closelaststyle="{{true}}"
  236 + ></calendar>
  237 + </view>
  238 +</view>
  239 +<view class="calendar-mask" bindtap="calendarClose"
  240 + style="height:100%;" wx:if="{{timePickerMask}}">
  241 + <view class="timePicker">
  242 + <view class="flex-rr">
  243 + <image class="close" src="http://qn.colorcun.com/custom/lite-yd/image/add-act.png" bindtap="calendarClose"></image>
  244 + </view>
  245 + <view class="flex-cc" style="margin-bottom: 56rpx; font-size: 30rpx;">
  246 + <view bindtap="calendarClose">{{form.time==1?'午市':form.time==2?'晚市':'早市'}}</view>
  247 + </view>
  248 + <view class="flex-ll" style="flex-wrap:wrap">
  249 + <view class="time-item {{timePickerIndex[form.time]==index?'checked':''}}"
  250 + style="{{(index+1)%3==0?'margin-right:0;':''}}"
  251 + wx:for="{{timePickerArray[form.time]}}" wx:key=""
  252 + bindtap="bindTimePickerChange"
  253 + data-time-index="{{form.time}}"
  254 + data-val="{{index}}"
  255 + >{{item}}</view>
  256 + </view>
  257 + </view>
  258 +</view>
  259 +
  260 +<view class="calendar-mask" bindtap="CustomRemarkMore"
  261 + style="height:100%;" wx:if="{{CustomRemarkMoreMask}}">
  262 + <view class="timePicker" catchtap="catchtap">
  263 + <view class="flex-rr">
  264 + <image class="close" src="http://qn.colorcun.com/custom/lite-yd/image/add-act.png" bindtap="CustomRemarkMore"></image>
  265 + </view>
  266 + <view class="flex-cc" style="margin-bottom: 56rpx; font-size: 30rpx;">
  267 + <view bindtap="calendarClose">更多标签</view>
  268 + </view>
  269 + <view class="flex-ll" style="flex-wrap:wrap;width: 110%; margin-left: -5%; max-height: 700rpx;overflow-y: auto;">
  270 + <view class="CustomRemarkItem {{item.active?'active':''}}" wx:for="{{CustomRemark}}"
  271 + wx:if="{{item.often_use}}" bindtap="oftenUse"
  272 + data-id="{{item.id}}"
  273 + data-value="{{item.often_use}}">{{item.often_use}}</view>
  274 + </view>
  275 + </view>
  276 +</view>
  277 +<a2l bgColor="#199095"></a2l>
  1 +/* pages/book/b_addnew.wxss */
  2 +.page{
  3 + width: 90%;
  4 + margin: 20rpx 4% 0;
  5 +
  6 +}
  7 +.base-info{
  8 +
  9 +}
  10 +.section{
  11 + height: 110rpx;
  12 +}
  13 +.section .label{
  14 + width: 60rpx;
  15 + font-size: 30rpx;
  16 + margin-right: 38rpx;
  17 +}
  18 +.date{
  19 + color:#199095;
  20 + width: 100%;
  21 + font-size: 38rpx;
  22 + font-weight: bold;
  23 +}
  24 +.date-item{
  25 + width: 50%;
  26 +}
  27 +.date-item-text{
  28 + height: 60rpx;
  29 + line-height: 60rpx;
  30 + border-bottom: 4rpx solid rgba(0,0,0,0);
  31 + width: 200rpx;
  32 + text-align: center;
  33 + color: #666666;
  34 +}
  35 +.checked .date-item-text{
  36 + border-bottom: 4rpx solid #199095;
  37 + color: #199095;
  38 +}
  39 +.date .more{
  40 + width: 65rpx;
  41 + min-width: 65rpx;
  42 + height: 60rpx;
  43 +}
  44 +.date .more view{
  45 + width: 12rpx;
  46 + height: 12rpx;
  47 + border-radius: 50%;
  48 + margin-right: 12rpx;
  49 + background-color: #999;
  50 +}
  51 +.section .tab{
  52 + font-size: 34rpx;
  53 + color: #199095;
  54 +}
  55 +.section .tab .item{
  56 + height: 50rpx;
  57 + line-height: 49rpx;
  58 + width: 210rpx !important;
  59 + min-width: 210rpx !important;
  60 + border-radius: 10rpx;
  61 + border: 2rpx solid #199095;
  62 + margin-right: 20rpx;
  63 + text-align: center;
  64 +}
  65 +.section .tab .item .item-text,.section .tab .item .picker{
  66 + height: 46rpx;
  67 + line-height: 46rpx;
  68 +}
  69 +.section .tab .item .picker{
  70 + width:210rpx;
  71 + text-align: center;
  72 +}
  73 +.section .tab .item-pnum{
  74 + height: 50rpx;
  75 + line-height: 50rpx;
  76 + width: 60rpx !important;
  77 + min-width: 60rpx !important;
  78 + border-radius: 10rpx;
  79 + border: 2rpx solid #199095;
  80 + margin-right: 32rpx;
  81 + text-align: center;
  82 +}
  83 +.section .tab .item-pnum .pnum,.section .tab .item .pnum input{
  84 + height: 46rpx;
  85 + line-height: 46rpx;
  86 + font-size: 34rpx;
  87 +}
  88 +.section .tab .item:last-child{
  89 + margin-right: 0;
  90 +}
  91 +.section .tab .item-pnum:last-child{
  92 + margin-right: 0;
  93 +}
  94 +.section .tab .checked{
  95 + background-color:#199095;
  96 + color: #FEFEFE;
  97 + border: 2rpx solid #199095;
  98 +}
  99 +.section .tab .disabled{
  100 + background-color:#999999;
  101 + color: #efefef;
  102 + border: 2rpx solid #999999;
  103 +}
  104 +
  105 +/**
  106 +可定桌位
  107 + */
  108 +.page-full{
  109 + width: 112%;
  110 + margin-left: -6%;
  111 + background-color: #F5F5F5;
  112 +}
  113 +.tables{
  114 + height: 314rpx;
  115 + font-size: 30rpx;
  116 +}
  117 +.tables .title{
  118 + padding-top: 36rpx;
  119 + height: 42rpx;
  120 + line-height: 42rpx;
  121 +}
  122 +.advice-desk-detail{
  123 + height: 220rpx;
  124 + width:100%;
  125 +}
  126 +.order-desk-info{
  127 + width:160rpx;
  128 + min-width: 160rpx;
  129 + height:160rpx;
  130 + background:#A9E3E6;
  131 + border:1px solid #A9E3E6;
  132 + border-radius:10rpx;
  133 + position:relative;
  134 + overflow:hidden;
  135 + margin-left:22rpx;
  136 +}
  137 +.desk-checked{
  138 + border:1px solid #199095;
  139 +}
  140 +.advice-desk-detail .order-desk-info:first-child{
  141 + margin-left:0;
  142 +}
  143 +.desk-active{
  144 + position: absolute;
  145 + top: -2rpx;
  146 + right: -2rpx;
  147 +}
  148 +.order-desk-type{
  149 + height:30rpx;
  150 + line-height: 30rpx;
  151 + background:#61A5D1;
  152 + position:absolute;
  153 + left:0;
  154 + top:0;
  155 + font-size: 26rpx;
  156 + padding: 0 12rpx 4rpx 8rpx;
  157 + border-radius: 0 16rpx 16rpx 0;
  158 +}
  159 +.advice-more{
  160 + padding:20rpx 0;
  161 + padding-left:30rpx;
  162 +}
  163 +.cut{
  164 + width:100%;
  165 + height:4px;
  166 + background:#efeef3;
  167 +}
  168 +
  169 +
  170 +
  171 +/**
  172 +预定人信息
  173 + */
  174 +.book-info{
  175 + width:100%;
  176 + padding-top:20rpx;
  177 + margin:0 auto;
  178 + padding-bottom: 300rpx;
  179 +}
  180 +.book-info-single{
  181 + width:100%;
  182 + height:120rpx;
  183 + padding-top:40rpx;
  184 + border-bottom:1px solid #efeef3;
  185 +}
  186 +.book-info-single>input{
  187 + width:100%;
  188 + height:100rpx;
  189 +}
  190 +.book-info-grand{
  191 + height:50rpx;
  192 + border:1px solid #199095;
  193 + margin-top:20rpx;
  194 +}
  195 +.book-grand{
  196 + width:90rpx;
  197 + height:100%;
  198 + box-sizing:border-box;
  199 +}
  200 +.book-grand-active{
  201 + background:rgba(25,153,149,.8);
  202 +}
  203 +.book-grand-border{
  204 + border-right:1px solid #199095;
  205 +}
  206 +.book-grand-border:last-child{
  207 + border-width: 0;
  208 +}
  209 +.phone-reminder{
  210 + width:32rpx;
  211 + height:32rpx;
  212 + margin-left:20rpx;
  213 +}
  214 +
  215 +
  216 +/**
  217 +提交按钮
  218 + */
  219 +.submit{
  220 + position: fixed;
  221 + bottom: 120rpx;
  222 + left: 0;
  223 + right: 0;
  224 + height: 150rpx;
  225 + background-color: #fefefe;
  226 + z-index: 9;
  227 +}
  228 +.confirm-button{
  229 + width:680rpx;
  230 + height:85rpx;
  231 + background:#199095;
  232 + margin:42rpx auto 0;
  233 + border-radius:10rpx;
  234 + opacity:.6;
  235 +}
  236 +.confirm-button-active{
  237 + opacity:1;
  238 +}
  239 +
  240 +
  241 +@import "common/calendar.wxss";
  242 +
  243 +
  244 +
  245 +
  246 +.placeholder-class-pnum{
  247 + color:#199095;
  248 + font-size: 34rpx;
  249 +}
  250 +
  251 +.timePicker{
  252 + width: 80%;
  253 + overflow: hidden;
  254 + position: absolute;
  255 + bottom: 0;
  256 + border-top: 2rpx solid #ccc;
  257 + background-color: #FEFEFE;
  258 + padding: 20rpx 10% 80rpx;
  259 +}
  260 +.timePicker .time-item{
  261 + width: 150rpx;
  262 + height: 60rpx;
  263 + line-height: 60rpx;
  264 + font-size: 40rpx;
  265 + font-weight: bold;
  266 + color:#199095;
  267 + border: 2rpx solid #199095;
  268 + border-radius: 10rpx;
  269 + text-align: center;
  270 + margin-right: 66rpx;
  271 + margin-bottom: 60rpx;
  272 +}
  273 +.timePicker .time-item.checked{
  274 + background-color: #199095;
  275 + color:#fefefe;
  276 +}
  277 +.timePicker .close{
  278 + width: 50rpx;
  279 + height: 50rpx;
  280 + transform:rotate(45deg);
  281 + margin-top: -10rpx;
  282 + margin-right: -10%;
  283 +}
  284 +
  285 +.CustomRemark{
  286 + line-height: 60rpx;
  287 + overflow: hidden;
  288 +}
  289 +.CustomRemarks{
  290 + width: 100%;
  291 +}
  292 +.CustomRemarksView{
  293 + height: 60rpx;
  294 + overflow: hidden;
  295 +}
  296 +.CustomRemarkMore{
  297 + width: 200rpx;
  298 + min-width: 200rpx;
  299 + color:#199095;
  300 + font-size: 30rpx;
  301 +}
  302 +.CustomRemarkItem{
  303 + height: 48rpx;
  304 + line-height: 48rpx;
  305 + padding: 4rpx 14rpx;
  306 + background-color: #F5F5F5;
  307 + font-size: 30rpx;
  308 + color: #999999;
  309 + border-radius: 10rpx;
  310 + margin-right: 20rpx;
  311 + float: left;
  312 + margin-bottom: 40rpx;
  313 +}
  314 +.CustomRemarkItem:last-child{
  315 + margin-right: 0;
  316 +}
  317 +.CustomRemarkMore .CustomRemarkItem{
  318 + padding: 4rpx 24rpx;
  319 +}
  320 +.book-info-single.last{
  321 + border-width: 0;
  322 +}
  323 +.CustomRemarkItem.active{
  324 + background-color: #6AB6B9;
  325 + color: #FFFFFF;
  326 +}
  1 +import util from '../../utils/util';
  2 +import comm from '../../utils/bookCommon';
  3 +import App from '../../utils/api';
  4 +const {regeneratorRuntime} = global
  5 +Page({
  6 + data:{
  7 + menu_active_id:''
  8 + },
  9 + checked_tids:[],
  10 + desks:[],
  11 + onLoad:function(opt){
  12 + console.log('onLoad',opt)
  13 + util.setBarTitle('选择桌位');
  14 + var radio=750/util.getsystem().windowWidth;
  15 + var contentHeight=util.getsystem().windowHeight-Math.ceil(350/radio);
  16 + if(opt.tid==0){
  17 + delete opt.tid
  18 + }
  19 + if(opt.checked_tids){
  20 + this.checked_tids=opt.checked_tids.split(',')
  21 + util.cache('tableid',this.checked_tids)
  22 + }
  23 + this.setData({
  24 + sellerid:util.cache('sellerid'),
  25 + opt:opt,
  26 + hasCheckedTable:this.checked_tids.length>0
  27 + })
  28 + this.getdesklist();
  29 + },
  30 + onShow:function(){
  31 + this.setData({
  32 + height:getApp().system.windowHeight-55
  33 + })
  34 + },
  35 + changedesk:function(e){
  36 + let tableid=util.cache('tableid');
  37 + this.checked_tids= tableid && tableid.length>0?tableid:[];
  38 + this.setData({
  39 + hasCheckedTable:this.checked_tids.length>0
  40 + })
  41 + },
  42 + back:function(){
  43 + this.setData({
  44 + buttonClick:true
  45 + })
  46 + //wx.removeStorage({key:'tableid'})
  47 + wx.navigateBack();
  48 + },
  49 + getdesklist:function(){
  50 + var formdata=this.data.opt;
  51 + formdata.sid=this.data.sellerid;
  52 + var that=this;
  53 + App.Reserve.GetTableList(formdata).then(function (json) {
  54 + if(json.ret==200){
  55 + console.log('this.checked_tids',that.checked_tids);
  56 + that.desks=json.data
  57 + that.formatDesklist(true)
  58 + }
  59 + })
  60 + },
  61 + formatDesklist(hasFirst=true){
  62 + let desks=this.desks;
  63 + if(desks.length>0){
  64 + desks.forEach((v,i)=>{
  65 + v.list.forEach((r,n)=>{
  66 + r.isselect=false
  67 + if(this.checked_tids._indexOf(r.id)>-1){
  68 + r.isselect=true;
  69 + }
  70 + })
  71 + })
  72 + let param={
  73 + desklist:desks,
  74 + }
  75 + if(hasFirst){
  76 + param.menu_active_id=desks[0].name
  77 + }
  78 + this.setData(param)
  79 + }
  80 + return desks;
  81 + },
  82 + switchMenu(e){
  83 +
  84 + this.formatDesklist(false)
  85 + this.setData({
  86 + menu_active_id:util.attr(e,'id')
  87 + })
  88 + },
  89 +})
  1 +{
  2 + "backgroundTextStyle":"light",
  3 + "navigationBarBackgroundColor": "#fff",
  4 + "navigationBarTextStyle":"black",
  5 + "usingComponents": {
  6 + "selectPeople":"/components/book/people/people",
  7 + "orderDesk":"/components/book/desk/desk",
  8 + "nav":"/components/nav/nav"
  9 + }
  10 +}
  1 +<nav>选择桌位</nav>
  2 +<!--桌位状态-->
  3 +<view class="flex-lr" style="border-top:1rpx solid #E0E0E0">
  4 + <view class="menus" style="height: {{height}}px; overflow-y: auto;overflow-x: hidden;align-self:flex-start ">
  5 + <view class="menus-item flex-cc {{item.name==menu_active_id?'active':''}}"
  6 + wx:for="{{desklist}}" wx:key="desklist.key"
  7 + bindtap="switchMenu" data-id="{{item.name}}">
  8 + <view class="name">{{item.name}}</view>
  9 + <view class="hip" wx:if="{{item.chenkNum>0}}">{{item.chenkNum}}</view>
  10 + </view>
  11 + </view>
  12 + <view style="height: {{height-80}}px;overflow-y: auto;padding-bottom: 160rpx;overflow-x: hidden;width: 100%;">
  13 + <block wx:for="{{desklist}}" wx:key="desklist.key">
  14 + <orderDesk list="{{item.list}}" bind:changedesk="changedesk" wx:if="{{item.name==menu_active_id}}"></orderDesk>
  15 + </block>
  16 +
  17 + </view>
  18 +</view>
  19 +<view class="confirm-button white-font flex-vc font34r {{hasCheckedTable ? 'confirm-button-active' : ''}}" bindtap="back">确定</view>
  20 +
  21 +
  1 +view{
  2 + line-height:1.2;
  3 +}
  4 +.other-info{
  5 + width:100%;
  6 + height:220rpx;
  7 + padding:20rpx 0;
  8 + box-sizing:border-box;
  9 +}
  10 +.selected-time{
  11 + width:375rpx;
  12 + height:100%;
  13 + border-right:1px solid #efeef3;
  14 + box-sizing:border-box;
  15 +}
  16 +.actual-time{
  17 + margin-top:10rpx;
  18 +}
  19 +.cut{
  20 + width:100%;
  21 + height:4px;
  22 + background:#efeef3;
  23 +}
  24 +
  25 +
  26 +
  27 +.desk-type{
  28 + width:680rpx;
  29 + padding:40rpx 0 20rpx;
  30 + margin:0 auto;
  31 +}
  32 +.desk-type-single{
  33 + width:160rpx;
  34 + height:60rpx;
  35 + border:1px solid #199095;
  36 + border-radius:30rpx;
  37 + background:#EBF8F8;
  38 +}
  39 +.desk-type-single-active{
  40 + background:#199095;
  41 +}
  42 +
  43 +.desk-list{
  44 + width:100%;
  45 +}
  46 +.desk-region{
  47 + width:680rpx;
  48 + padding-top:40rpx;
  49 + margin:0 auto;
  50 +}
  51 +
  52 +.confirm-button{
  53 + width:460rpx;
  54 + height:85rpx;
  55 + background:#74BBBE;
  56 + position:fixed;
  57 + left:250rpx;
  58 + bottom:40rpx;
  59 + margin:0 auto;
  60 + border-radius:10rpx;
  61 +}
  62 +.confirm-button-active{
  63 + background:#199095;
  64 +}
  65 +
  66 +.menus{
  67 + width: 168rpx;
  68 + min-width: 168rpx;
  69 + background-color: #F5F5F5;
  70 +}
  71 +.menus-item{
  72 + width: 168rpx;
  73 + height: 158rpx;
  74 + line-height: 158rpx;
  75 + font-size: 34rpx;
  76 + border: 1rpx solid #E0E0E0;
  77 + border-top-width: 0;
  78 + border-left-width: 0;
  79 + position: relative;
  80 +}
  81 +.menus-item.active{
  82 + background-color: #FEFEFE;
  83 +}
  84 +.menus-item .name{
  85 + width: 140rpx;
  86 + max-height: 96rpx;
  87 + line-height: 48rpx;
  88 + overflow: hidden;
  89 + text-align: center;
  90 +}
  91 +.menus-item .hip{
  92 + background-color: #f00;
  93 + width: 40rpx;
  94 + height: 40rpx;
  95 + position: absolute;
  96 + border-radius: 50%;
  97 + color: #fefefe;
  98 + text-align: center;
  99 + line-height: 40rpx;
  100 + font-size: 22rpx;
  101 + top:10rpx;
  102 + right: 10rpx;
  103 +}
  1 +var util = require('../../utils/util.js')
  2 +var uri=require('../../utils/uri.js')
  3 +import App from '../../utils/api';
  4 +const {regeneratorRuntime} = global
  5 +import TP from '../../utils/tpls';
  6 +Page({
  7 + data:{
  8 + actionSheetHidden:true,
  9 + actionSheetItems:['客户取消','客户行程改变']
  10 + },
  11 + sc:{},
  12 + tpls:TP.tpls(),
  13 + enter_params:{},
  14 + onLoad:async function (opt) {
  15 + util.setBarTitle('预定详情');
  16 + console.log(opt)
  17 + this.getDetail(opt.id);
  18 + wx.showShareMenu({
  19 + withShareTicket: true,
  20 + success:function(res){
  21 + console.log(res)
  22 + }
  23 + })
  24 + this.enter_params=util.cache('enter_params');
  25 + this.sc=(await App.Reserve.SellerInfo(this.enter_params)).data;
  26 + console.log('this.sc',this.sc);
  27 + this.chooseManagerInit();
  28 + },
  29 + onShow:function(){
  30 + this.notice=this.selectComponent('#notice');
  31 + },
  32 + noticeCall:function(){
  33 + this.selectComponent('#notice').show();
  34 + },
  35 + onShareAppMessage: function () {
  36 + this.selectComponent('#notice').close();
  37 + var obj=this.data.bookInfo;
  38 + let path=util.http_build_query({
  39 + id:this.data.bookInfo.id,
  40 + fromid:getApp().openid,
  41 + hasSellerShare:1,
  42 + hasInvitation:1,
  43 + tplid:1
  44 + },'/pages/customer/index')
  45 + return {
  46 + //title: (nickname||'')+'给你发送了一个订座信息,点击查看详情',
  47 + title: this.tpls[0].shareFirstTitle,
  48 + path: path,
  49 + imageUrl:this.tpls[0].shareFirstImage,
  50 + success: function (res) {
  51 + console.log(res,666666)
  52 + },
  53 + fail:function(){
  54 + console.log('ccccc')
  55 + },
  56 + complete:function(){
  57 + console.log('ccccc')
  58 + }
  59 + };
  60 + },
  61 + getcall:function(){
  62 + if(!this.detailData.hasOwner){
  63 + return util.toast('只有记录人可以拨打','none');
  64 + }
  65 + if(this.data.bookInfo.phone.length<3){
  66 + return util.toast('号码错误','none');
  67 + }
  68 + wx.makePhoneCall({
  69 + phoneNumber: this.data.bookInfo.phone, //仅为示例,并非真实的电话号码
  70 + complete:()=>{
  71 + this.selectComponent('#notice').close();
  72 + }
  73 + })
  74 + },
  75 + chooseManagerInit(){
  76 + try{
  77 + let managers=this.sc.manager;
  78 + let mans=[];
  79 + let mans_role=[];
  80 + // let space='';
  81 + // for(let i=0;i<50;i++){
  82 + // space+=' ';
  83 + // }
  84 + if(managers.length>0){
  85 + managers.forEach(man=>{
  86 + let nickname=man.nick_name||man.user_name;
  87 + mans.push(nickname);
  88 + //mans_role.push('     ['+man.role_name+'] -- '+man.user_name+space);
  89 + mans_role.push('['+man.role_name+'] -- '+nickname);
  90 + })
  91 + }
  92 + this.setData({mans:mans,mans_role:mans_role})
  93 + }catch(e){
  94 + wx.showToast({
  95 + title:'无客户经理',
  96 + icon:'none'
  97 + });
  98 + }
  99 + },
  100 + chooseManager(e){
  101 + let mansIndex=util.val(e);
  102 + this.setData({mansIndex:mansIndex});
  103 + try{
  104 + let managers=this.sc.manager;
  105 + let man=managers[mansIndex];
  106 + if(man){
  107 + App.Reserve.SetReserveCusman({
  108 + rid:this.data.bookInfo.id,
  109 + cusman_id:man.id,
  110 + cusman:man.nick_name||man.user_name,
  111 + cusman_phone:man.user_phone?man.user_phone:'',
  112 + cusman_account:man.user_wechat?man.user_wechat:'',
  113 + cusman_openid:man.seat_openid?man.seat_openid:''
  114 + }).then(()=>{
  115 + this.getDetail(this.data.bookInfo.id,true);
  116 + });
  117 + }
  118 + }catch(e){
  119 + console.log(e);
  120 + }
  121 +
  122 + },
  123 + flushSellerInfo(){
  124 + App.Reserve.SellerInfo(util.cache('enter_params'),true);
  125 + },
  126 + detailData:null,
  127 + async getDetail(id,force=false){
  128 + let res=await App.Reserve.Detail({rid:id,openid:''},force);
  129 + res.data.rdateStr=util.unixtoTime(res.data.ddate,"MM月DD日 HH:II")
  130 + res.data.phoneStr=res.data.phone||'';
  131 + let enter_params=util.cache('enter_params');
  132 + let sc=(await App.Reserve.SellerInfo(enter_params)).data
  133 + let note_openid=enter_params.seller_openid;
  134 + res.data.hasOwner=false;
  135 + if(note_openid==res.data.note_openid || sc.seller_user.role_name=='管理员'){
  136 + res.data.hasOwner=true;
  137 + }
  138 + if(!res.data.hasOwner){
  139 + res.data.phoneStr=res.data.phoneStr.replace(/(\d{2})(.{5})(\d{3})/,function($0,$1,$2,$3){
  140 + return $1+'**'+$3;
  141 + })
  142 + }
  143 + if(res.data.status==4 && res.data.cancel){
  144 + res.data.cancel.cdateStr=util.unixtoTime(res.data.cancel.cdate,"YYYY.MM.DD HH:II")
  145 + }
  146 + this.detailData=res.data;
  147 +
  148 + this.setData({
  149 + tables:res.data.tables,
  150 + bookInfo:res.data,
  151 + })
  152 + },
  153 + gotoModify(){
  154 + wx.redirectTo({
  155 + url:'./b_addnew?id='+this.data.bookInfo.id
  156 + })
  157 + },
  158 + cancelReserve(){
  159 + this.selectComponent('#cancel').show();
  160 + },
  161 + reserveCancel(e){
  162 + console.log('reserveCancel',e.detail);
  163 + this.getDetail(this.data.bookInfo.id,true);
  164 + },
  165 + actionSheetChange(e){
  166 + this.setData({
  167 + actionSheetHidden:true
  168 + })
  169 + },
  170 + async startDinner(e){
  171 + let cause={};
  172 + let enter_params=util.cache('enter_params');
  173 + let sc=(await App.Reserve.SellerInfo(enter_params)).data
  174 + cause={desc:""}
  175 + if(enter_params){
  176 + cause.uid=enter_params.manager_id;
  177 + }
  178 + if(sc.seller_user){
  179 + cause.uname=(sc.seller_user.nick_name||sc.seller_user.nickname)
  180 + }
  181 + App.Reserve.SetReserveStatus({
  182 + rid:this.data.bookInfo.id,
  183 + status:util.attr(e,'status'),
  184 + cause:JSON.stringify(cause),
  185 + }).then(()=>{
  186 + this.getDetail(this.data.bookInfo.id,true);
  187 + });
  188 + },
  189 + showOrder(){
  190 + wx.navigateTo({
  191 + url:util.http_build_query({rid:this.data.bookInfo.id,oid:this.data.bookInfo.orderid,identity:2},'/pack-cookbook/pages/success')
  192 + });
  193 + },
  194 +})
  1 +{
  2 + "backgroundTextStyle":"light",
  3 + "navigationBarBackgroundColor": "#fff",
  4 + "navigationBarTextStyle":"black",
  5 + "usingComponents": {
  6 + "noticeCall":"/components/book/notice/notice",
  7 + "step":"/components/book/step/step",
  8 + "board":"/components/book/board/board",
  9 + "cancel":"/components/book/reserveCancel/cancel",
  10 + "nav":"/components/nav/nav",
  11 + "formids":"/components/formids/formids"
  12 + }
  13 +}
  1 +<nav hasHome>订座详情</nav>
  2 +<!--订单信息-->
  3 +<view class="order-info">
  4 + <view class="flex-lr order-detail">
  5 + <view class="gray-deep-font font30r">到店时间</view>
  6 + <view class="black-font font34r">{{bookInfo.rdateStr}}</view>
  7 + </view>
  8 + <view class="flex-lr order-detail">
  9 + <view class="gray-deep-font font30r">用餐人数</view>
  10 + <view class="black-font font34r">{{bookInfo.pnum_str||bookInfo.pnum}}人</view>
  11 + </view>
  12 + <view class="reserve-status-tip" wx:if="{{bookInfo.status!=null}}">
  13 + <image src="http://qn.colorcun.com/custom/lite-yd/image/reserve-status-{{bookInfo.status}}.png"></image>
  14 + </view>
  15 + <view class="flex-lr order-detail">
  16 + <view class="gray-deep-font font30r">预订座位</view>
  17 + <view class="black-font font34r">{{tables.length}}个</view>
  18 + </view>
  19 + <view class="flex-lr order-desk">
  20 + <view class="gray-deep-font font30r"></view>
  21 + <view class="flex-re" style="width:100%;flex-wrap:wrap;">
  22 + <block wx:for="{{tables}}" wx:key="tables.key">
  23 + <board width="160" height="180" board="{{item}}" className="noBottom"
  24 + style="margin-left:20rpx;zoom: 0.8; margin-bottom: 20rpx;"></board>
  25 + </block>
  26 + </view>
  27 + </view>
  28 + <view class="flex-lr order-detail">
  29 + <text class="gray-deep-font font30r" space="true" decode="true">客户姓名</text>
  30 + <view class="black-font font34r">{{bookInfo.rname}} {{bookInfo.sex==1?'先生':(bookInfo.sex==2?'女士':'')}}</view>
  31 + </view>
  32 + <view class="flex-lr order-detail">
  33 + <view class="gray-deep-font font30r">客户电话</view>
  34 + <view class="black-font font34r" bindtap="getcall">{{bookInfo.phoneStr||''}}</view>
  35 + </view>
  36 + <block wx:if="{{bookInfo.cusdem!='' && bookInfo.cusdem!='null'}}">
  37 + <view class="flex-lr order-detail">
  38 + <view class="gray-deep-font font30r">备注信息</view>
  39 + <view class="black-font font34r">{{bookInfo.cusdem}}</view>
  40 + </view>
  41 + </block>
  42 +</view>
  43 +<view class="order-info">
  44 + <view class="flex-lr order-detail">
  45 + <view class="gray-deep-font font30r">客户经理</view>
  46 + <view class="flex-lr black-font font34r" style=" border-bottom: 2rpx solid #999;">
  47 + <picker bindchange="chooseManager" catchtap="flushSellerInfo" value="{{mansIndex}}" range="{{mans_role}}">
  48 + <view class="picker">
  49 + {{mans[mansIndex]?mans[mansIndex]:bookInfo.cusman?bookInfo.cusman:'请选择'}}
  50 + </view>
  51 + </picker>
  52 + </view>
  53 + </view>
  54 + <view class="flex-lr order-detail">
  55 + <view class="gray-deep-font font30r">记录人</view>
  56 + <view class="black-font font34r">{{bookInfo.note_name}}</view>
  57 + </view>
  58 +</view>
  59 +<view class="order-info" wx:if="{{bookInfo.status==4 && bookInfo.cancel}}">
  60 + <view class="flex-lr order-detail">
  61 + <view class="gray-deep-font font30r">取消原因</view>
  62 + <view class="flex-lr black-font font34r">
  63 + {{bookInfo.cancel.desc}}
  64 + </view>
  65 + </view>
  66 + <view class="flex-lr order-detail">
  67 + <view class="gray-deep-font font30r">取消时间</view>
  68 + <view class="black-font font34r">{{bookInfo.cancel.cdateStr}}</view>
  69 + </view>
  70 + <view class="flex-lr order-detail">
  71 + <view class="gray-deep-font font30r">操作人</view>
  72 + <view class="black-font font34r">{{bookInfo.cancel.uname}}</view>
  73 + </view>
  74 +</view>
  75 +
  76 +<view style="height: 250rpx;"></view>
  77 +
  78 +<!--通知预订人-->
  79 +<view class="notice-opt" wx:if="{{bookInfo.status==1}}">
  80 + <view class="notice-button-border font34r flex-lr">
  81 + <view>
  82 + <formids bindclick="noticeCall">通知客户</formids>
  83 + </view>
  84 + <view wx:if="{{bookInfo.order && bookInfo.order.cookbooklist.length>0}}">
  85 + <formids bindclick="showOrder">查看菜品</formids>
  86 + </view>
  87 + </view>
  88 + <view class="notice-button-border font34r flex-lr">
  89 + <view>
  90 + <formids bindclick="gotoModify">变更预订</formids>
  91 + </view>
  92 + <view >
  93 + <formids bindclick="cancelReserve">取消预订</formids>
  94 + </view>
  95 + <view>
  96 + <formids bindclick="startDinner" data-status="2">确认到店</formids>
  97 + </view>
  98 + </view>
  99 +</view>
  100 +<view class="notice-opt" wx:if="{{bookInfo.status==2}}">
  101 + <formids class="notice-button white-font font34r flex-cc" bindclick="startDinner" data-status="3">客户就餐完毕</formids>
  102 +</view>
  103 +<noticeCall id="notice" bookInfo="{{bookInfo}}"></noticeCall>
  104 +<action-sheet hidden="{{actionSheetHidden}}" bindchange="actionSheetChange" class="flex-ll">
  105 + <block wx:for-items="{{actionSheetItems}}" wx:key="actionSheetItems.key">
  106 + <action-sheet-item>{{item}}</action-sheet-item>
  107 + </block>
  108 + <action-sheet-item>
  109 + <input placeholder="请输入" style="width:100%"/>
  110 + </action-sheet-item>
  111 + <action-sheet-cancel >取消</action-sheet-cancel>
  112 +
  113 +</action-sheet>
  114 +<cancel id="cancel" bindreserveCancel="reserveCancel" bookInfo="{{bookInfo}}"></cancel>
  1 +view{
  2 + line-height:1.2;
  3 +}
  4 +
  5 +
  6 +/*商家信息*/
  7 +.seller-info{
  8 + width:680rpx;
  9 + height:auto;
  10 + padding:40rpx 0;
  11 + margin:0 auto;
  12 + border-bottom:1px solid #efeef3;
  13 +}
  14 +.seller-image{
  15 + width:60rpx;
  16 + height:60rpx;
  17 + border-radius:50%;
  18 + margin-right:20rpx;
  19 +}
  20 +.seller-address{
  21 + margin-top:10rpx;
  22 +}
  23 +.seller-location{
  24 + width:32rpx;
  25 + height:34rpx;
  26 +}
  27 +
  28 +
  29 +/*订单信息*/
  30 +.order-info{
  31 + width:680rpx;
  32 + height:auto;
  33 + padding:0 20rpx;
  34 + margin:0 auto;
  35 + border-bottom:1px solid #efeef3;
  36 + box-sizing:border-box;
  37 +}
  38 +.order-detail{
  39 + width:100%;
  40 + padding:40rpx 0;
  41 +}
  42 +.order-desk{
  43 + width:100%;
  44 + height:auto;
  45 + position:relative;
  46 +}
  47 +.order-status{
  48 + width:172rpx;
  49 + height:100rpx;
  50 + position:absolute;
  51 + left:0;
  52 + right:0;
  53 + top:0;
  54 + bottom:0;
  55 + margin:auto;
  56 + z-index:2;
  57 +}
  58 +.order-desk-info{
  59 + width:120rpx;
  60 + height:120rpx;
  61 + background:#A9E3E6;
  62 + border:1px solid #199095;
  63 + border-radius:10rpx;
  64 + position:relative;
  65 + overflow:hidden;
  66 + margin-left:20rpx;
  67 + margin-top:20rpx;
  68 +}
  69 +.order-desk-detail{
  70 + width:100%;
  71 + height:90rpx;
  72 +}
  73 +.order-desk-type{
  74 + width:100%;
  75 + height:30rpx;
  76 + background:#199095;
  77 + position:absolute;
  78 + left:0;
  79 + bottom:0;
  80 +}
  81 +
  82 +
  83 +
  84 +.seller-staff{
  85 + width:680rpx;
  86 + padding:40rpx 20rpx;
  87 + box-sizing:border-box;
  88 + margin:0 auto;
  89 +}
  90 +
  91 +.notice-opt{
  92 + position:fixed;
  93 + left:0;
  94 + right:0;
  95 + bottom: 0;
  96 + padding-bottom: 50rpx;
  97 + background-color: #fefefe;
  98 +}
  99 +.notice-button{
  100 + height:85rpx;
  101 + width:90%;
  102 + background:#199095;
  103 + border-radius:0;
  104 + margin:20rpx auto 0;
  105 +}
  106 +.notice-button-border{
  107 + height:85rpx;
  108 + width:90%;
  109 + border:solid 2rpx #199095;
  110 + border-radius:0;
  111 + margin:20rpx auto 0;
  112 + color: #199095;
  113 +}
  114 +.notice-button-border view{
  115 + width: 100%;
  116 + border-right: 2rpx solid #199095;
  117 + text-align: center;
  118 + height: 50rpx;
  119 + line-height: 50rpx;
  120 +}
  121 +.notice-button-border view:last-child{
  122 + border-right-width: 0;
  123 +}
  124 +.reserve-status-tip{
  125 + position: absolute;
  126 + top:300rpx;
  127 + right:200rpx;
  128 + width: 82rpx;
  129 + height: 52rpx;
  130 +}
  131 +.reserve-status-tip image{
  132 + width: 100%;
  133 + height: 100%;
  134 +}
  1 +var mta=require('mta-wechat-analysis')
  2 +var util = require('../../utils/util.js')
  3 +var uri=require('../../utils/uri.js')
  4 +var bookOrder=require('../../utils/bookCommon.js')
  5 +import App from '../../utils/api';
  6 +const {regeneratorRuntime} = global
  7 +Page({
  8 + data:{
  9 + isloading:false,
  10 + pagex:1,
  11 + pagey:10,
  12 + sort:null,
  13 + dateStr:'',
  14 + calendarMaskLoad:false,
  15 + calendarMask:false,
  16 + dayStyle:[
  17 + { month: 'current', day: new Date().getDate(), color: 'white', background: '#AAD4F5' },
  18 + { month: 'current', day: new Date().getDate(), color: 'white', background: '#AAD4F5' }
  19 + ],
  20 + keywords:'',
  21 + sort:'',
  22 + form:{
  23 + time:-1,
  24 + },
  25 + timePickerArray:[
  26 + [],
  27 + [],
  28 + [],
  29 + ],
  30 + speciallist:[],
  31 + ReservesCountMonth:[],
  32 + ReservesTotal:0,
  33 + timeStrLabel:bookOrder.timeStrLabel
  34 + },
  35 + sellerid:0,
  36 + indexOpt:null,
  37 + YYYY:'YYYY',
  38 + onLoad:async function(opt){
  39 + this.indexOpt=opt;
  40 + mta.Page.init({
  41 + "appID":"500667280",
  42 + "eventID":"500667287",
  43 + "statPullDownFresh":true,
  44 + "statShareApp":true,
  45 + "statReachBottom":true,
  46 + "lauchOpts":opt, //渠道分析
  47 + });
  48 + let d=new Date()/1000;
  49 + let dateStr=util.unixtoTime(d,'MM-DD DAY');
  50 + var radio=750/util.getsystem().windowWidth;
  51 + var contentHeight=util.getsystem().windowHeight-Math.ceil(120/radio)
  52 + if(opt.seller_id){
  53 + this.sellerid=opt.seller_id;
  54 + util.cache('sellerid',opt.seller_id)
  55 + util.cache('enter_params',opt)
  56 + App.Reserve.SellerInfo(opt)
  57 + }else{
  58 + this.sellerid=util.cache('sellerid');
  59 + }
  60 + //this.sellerid=opt.seller_id ? opt.seller_id : util.cache('sellerid');
  61 + let timePickerArray= await bookOrder.getDayTimeSpace();
  62 + let speciallist=[
  63 + { date: util.unixtoTime(d,'YYYY-MM-DD'), background: '', text:'今 天' },
  64 + { date: util.unixtoTime(d+86400,'YYYY-MM-DD'), background: '', text: '明 天' },
  65 + { date: util.unixtoTime(d+86400*2,'YYYY-MM-DD'), background: '', text: '后 天' },
  66 + ];
  67 + this.setData({
  68 + sellerid:this.sellerid,
  69 + listHeight:contentHeight-Math.ceil(210/radio),
  70 + dateStr:dateStr,
  71 + timePickerArray: timePickerArray,
  72 + speciallist:speciallist,
  73 + })
  74 + //util.setBarTitle('预定本');
  75 + this.indexOpt=opt;
  76 + this.ReservesCountDay(util.unixtoTime(d,'YYYY-MM-DD'));
  77 + this.ReservesCountMonth(util.unixtoTime(d,'YYYY-MM'));
  78 + },
  79 + onShow:function(){
  80 + this.setData({
  81 + isloading:false,
  82 + })
  83 + this.getbooklist();
  84 + this.selectComponent('#nav').init();
  85 + setTimeout(()=>{
  86 + this.setData({
  87 + calendarMaskLoad:true,
  88 + })
  89 + let openid=getApp().openid;
  90 + if(openid && this.indexOpt.seller_id){
  91 + App.Reserve.SellerForOpenid({openid:openid,sedata:JSON.stringify(this.indexOpt)})
  92 + //客户经理=>人人都是客户经理
  93 + //if(this.indexOpt.manager_id){
  94 + App.Reserve.UpdateSellerUser({seat_openid:openid,kid:this.indexOpt.manager_id});
  95 + //}
  96 + }else{
  97 + console.log('index-opt',openid,this.indexOpt);
  98 + }
  99 +
  100 + },1000);
  101 + },
  102 + async getbooklist(isExport=false){
  103 + let time=0;
  104 + if(this.data.form.time<0){
  105 + let sid=await bookOrder.getTimeSpaceIndexData();
  106 + time=sid.timeIndex
  107 + }else{
  108 + time=this.data.form.time;
  109 + }
  110 + var formdata={};
  111 + if(this.data.sort!=''){
  112 + formdata.sort=this.data.sort
  113 + }
  114 + if(this.data.keywords!=''){
  115 + formdata.keywords=this.data.keywords
  116 + }
  117 + formdata.sid=this.sellerid;
  118 + formdata.x=1;
  119 + formdata.y=200;
  120 + let rdate=await bookOrder.getTimeSpace(this.data.dateStr,time,null,null,this.YYYY);
  121 + formdata.rdate=rdate;
  122 + if(isExport){
  123 + this.__exportFile(formdata);
  124 + }else{
  125 + var that=this;
  126 + App.Reserve.GetReserveList(formdata).then(function(json){
  127 + console.log(json)
  128 + if(json.ret==200){
  129 + that.setData({
  130 + isloading:true,
  131 + bookList:json.data.length==0 ? null : json.data,
  132 + form:{time:time},
  133 + })
  134 + that.boolists=that.selectAllComponents('.orderbook');
  135 + that.boolists.forEach(function(v,i){
  136 + v.changeitem();
  137 + })
  138 + }
  139 + }).catch(e=>{})
  140 + }
  141 + },
  142 + timeorder:function(){
  143 + if(this.data.sort==''){
  144 + this.data.sort=1;
  145 + }else{
  146 + this.data.sort='';
  147 + }
  148 +
  149 + this.setData({
  150 + sort:this.data.sort
  151 + })
  152 + this.getbooklist();
  153 + },
  154 + searchinput:function(e){
  155 + this.data.keywords=e.detail.value;
  156 + this.setData({
  157 + keywords:this.data.keywords
  158 + })
  159 + if(e.detail.value==''){
  160 + this.getbooklist();
  161 + }
  162 + },
  163 + calendarShow(){
  164 + console.log('xxxxx')
  165 + this.setData({
  166 + calendarMask:true
  167 + })
  168 + console.log(this.data.calendarMask)
  169 + },
  170 + dateChange(event){
  171 + this.YYYY=event.detail.date.substr(0,4);
  172 + let cktime=util.timetouUnix(event.detail.date)
  173 + console.log('cktime',cktime,this.YYYY)
  174 + let clickDay = event.detail.date.substr(8,2);
  175 + let changeDay = `dayStyle[1].day`;
  176 + let changeBg = `dayStyle[1].background`;
  177 + this.setData({
  178 + dateStr:util.unixtoTime(cktime,'MM-DD `DAY/周WW`'),
  179 + [changeDay]: clickDay,
  180 + [changeBg]: "#84e7d0"
  181 + })
  182 + this.getbooklist();
  183 + this.calendarClose();
  184 + this.ReservesCountDay(event.detail.date);
  185 + },
  186 + calendarClose(){
  187 + this.setData({
  188 + calendarMask:false
  189 + })
  190 + },
  191 + selectedValue:function (e) {
  192 + this.setData({
  193 + form:{time:e.currentTarget.dataset.value}
  194 + })
  195 + this.getbooklist();
  196 + },
  197 + searchbook:function(e){
  198 + console.log(this.data.form)
  199 + this.getbooklist();
  200 + },
  201 + __exportFile(formdata){
  202 + App.Reserve.ExportReserve(formdata).then(res=>{
  203 + let url=res.data;
  204 + if(!url){
  205 + return util.toast('没有预订数据','none')
  206 + }
  207 + wx.downloadFile({
  208 + url: url,
  209 + success: function(res) {
  210 + const filePath = res.tempFilePath;
  211 + console.log('filePath',filePath);
  212 + wx.previewImage({
  213 + current: filePath,
  214 + urls: [filePath]
  215 + })
  216 + wx.saveImageToPhotosAlbum({
  217 + filePath:filePath,
  218 + fail (res) {
  219 + util.toast('保存失败','none')
  220 + }
  221 + })
  222 + }
  223 + })
  224 + });
  225 +
  226 + },
  227 + exportFile(){
  228 + this.getbooklist(true);
  229 + },
  230 + ReservesCountDay(day){
  231 + App.Reserve.ReservesCountDay({
  232 + sid:this.sellerid,
  233 + day:day
  234 + }).then(res=>{
  235 +
  236 + let ReservesTotal=0;
  237 + let ReservesCountDay={};
  238 + if(res.ret==200){
  239 + ReservesCountDay=res.data;
  240 + Object.keys(res.data).forEach(k=>{
  241 + if(res.data[k]!=-1){
  242 + ReservesTotal+=parseInt(res.data[k])
  243 + }
  244 + })
  245 + }
  246 + this.setData({
  247 + ReservesTotal:ReservesTotal,
  248 + ReservesCountDay:ReservesCountDay,
  249 + })
  250 + })
  251 + },
  252 + ReservesCountMonth(month){
  253 + App.Reserve.ReservesCountMonth({
  254 + sid:this.sellerid,
  255 + month:month
  256 + }).then(res=>{
  257 + let ReservesCountMonth=[];
  258 + if(res.ret==200){
  259 + res.data.forEach(v=>{
  260 + ReservesCountMonth.push(v>=1?1:0)
  261 + })
  262 + }
  263 + this.setData({
  264 + ReservesCountMonth:ReservesCountMonth,
  265 + })
  266 + })
  267 + },
  268 + clickMonth(e){
  269 + this.ReservesCountMonth(e.detail.currentYear+'-'+e.detail.currentMonth);
  270 + },
  271 + gotoday(e){
  272 + this.ReservesCountMonth(e.detail.date.substr(0,7));
  273 + }
  274 +})
  1 +{
  2 + "backgroundTextStyle":"light",
  3 + "navigationBarBackgroundColor": "#fff",
  4 + "navigationBarTextStyle":"black",
  5 + "usingComponents": {
  6 + "nothingBook":"/components/book/nothing/nothing",
  7 + "bookList":"/components/book/list/list",
  8 + "nav":"/components/nav/nav",
  9 + "tabBar":"/components/book/tabBar/tabBar",
  10 + "calendar": "plugin://bmCalendar/calendar",
  11 + "formids":"/components/formids/formids"
  12 + }
  13 +}
  1 +<nav id="nav">订座</nav>
  2 +<view class="page">
  3 +<block wx:if="{{isloading==true}}">
  4 + <view class="book-page bg_white">
  5 + <view class="book-search flex-lr">
  6 + <view class="flex-ll book-search-left">
  7 + <image src="http://qn.colorcun.com/custom/lite-yd/image/search.png" class="search-icon"></image>
  8 + <input placeholder="桌位/客户姓名/手机号" placeholder-class="font30r gray-font smooth" class="font30r black-font smooth search-input" value="{{keywords}}" bindinput="searchinput" confirm-type="search" bindconfirm="searchbook"/>
  9 + </view>
  10 + <view bindtap="exportFile" class="exportFile flex-vc">
  11 + <image src="http://qn.colorcun.com/custom/lite-yd/image/export.png" class="search-icon"></image>
  12 + <view>导出</view>
  13 + </view>
  14 + </view>
  15 + <view class="search-easy flex-lr">
  16 + <formids class="block flex-vc" bindtap="calendarShow">
  17 + <view class="flex-vc" >
  18 + <view class="green-font font34r font-bold flex-cc">{{dateStr}}</view>
  19 + </view>
  20 + </formids>
  21 + <view class="block section flex-vc">
  22 + <view class="tab flex-cc">
  23 + <formids class="item flex-vc {{form.time==0?'checked':''}}"
  24 + wx:if="{{timePickerArray[0].length>0}}"
  25 + bindtap="selectedValue" data-key="time" data-value="0">早市</formids>
  26 + <formids class="item flex-cc {{form.time==1?'checked':''}}"
  27 + wx:if="{{timePickerArray[1].length>0}}"
  28 + bindtap="selectedValue" data-key="time" data-value="1">午市</formids>
  29 + <formids class="item flex-cc {{form.time==2?'checked':''}}"
  30 + wx:if="{{timePickerArray[2].length>0}}"
  31 + bindtap="selectedValue" data-key="time" data-value="2">晚市</formids>
  32 + </view>
  33 + </view>
  34 + </view>
  35 + </view>
  36 + <view class="book-list-cut flex-ll font26r black-font">
  37 + <text>已订 {{ReservesTotal}}</text>
  38 + <text wx:for="{{ReservesCountDay}}" wx:if="{{item>-1}}" wx:key="ReservesCountDay.key">{{timeStrLabel[index]}} {{item}}</text>
  39 + </view>
  40 + <block wx:if="{{!bookList}}">
  41 + <nothingBook height="{{listHeight}}"></nothingBook>
  42 + </block>
  43 + <block wx:else>
  44 +
  45 + <view bindcsroll="onPullDownRefresh" class="bg_white">
  46 +
  47 + <view class="book-list-thead flex-lr font34r black-font">
  48 + <view>桌号</view>
  49 + <view class="flex-cc">客户姓名</view>
  50 + <view class="flex-cc" bindtap="timeorder">时间<image src="http://qn.colorcun.com/custom/lite-yd/image/direction.png" class="icon22-26" background-size="cover"></image></view>
  51 + <view class="flex-rr">操作</view>
  52 + </view>
  53 + <view class="book-list" style="padding-bottom:118rpx;">
  54 + <view class="book-list-body">
  55 + <block wx:for="{{bookList}}" wx:key="bookList.key">
  56 + <bookList item="{{item}}" class="orderbook"></bookList>
  57 + </block>
  58 + </view>
  59 + </view>
  60 + </view>
  61 + </block>
  62 +</block>
  63 +</view>
  64 +<tabBar></tabBar>
  65 +
  66 +<view class="calendar-mask" bindtap="calendarClose"
  67 + style="height:{{calendarMask?'100%':0}};" wx:if="{{calendarMaskLoad}}">
  68 + <view style="width: 100%; height:{{calendarMask?'100%':0}};overflow: hidden;position: relative;">
  69 + <calendar catchtap="catchtap"
  70 + isTodaybtn="{{true}}" todaybtn_txt="回到今天"
  71 + custom="{{false}}"
  72 + switchover="{{['上一月','下个月']}}"
  73 + active-coloro="active-coloro"
  74 + active-colort="active-colort"
  75 + speciallist="{{speciallist}}"
  76 + txt_style="txt-style"
  77 + calendar-style="calendar"
  78 + header-style="calendar-header"
  79 + weektitle-style="weektitle-style"
  80 + restcolor-style="restcolor-style"
  81 + txt_type="cn-d"
  82 +
  83 + datefont-style="datefont-style"
  84 + todaybtn-style="todaybtn-style"
  85 +
  86 + bindnextMonth="clickMonth"
  87 + bindprevMonth="clickMonth"
  88 + bindselectDate="dateChange"
  89 + bindgotoday="gotoday"
  90 +
  91 + colored="#199095"
  92 + circle_show="{{true}}"
  93 + mystatus="{{ReservesCountMonth}}"
  94 + dotcolor-o="dotcolor-o"
  95 + dotcolor-t="dotcolor-t"
  96 + allshow="{{true}}"
  97 + ></calendar>
  98 + </view>
  99 +</view>
  1 +page{
  2 + background:#efeef3;
  3 +}
  4 +.page{
  5 + width: 100%;
  6 + margin: 0;
  7 + overflow: hidden;
  8 +}
  9 +.book-page{
  10 + width:100%;
  11 + padding-top:20rpx;
  12 +}
  13 +.book-search{
  14 + width:675rpx;
  15 + height:80rpx;
  16 + margin:0 auto;
  17 +}
  18 +.book-search-left{
  19 + width:590rpx;
  20 + height:80rpx;
  21 + border-radius:40rpx;
  22 + box-shadow: 0 0 8px #ccc;
  23 + margin:0 auto;
  24 + margin-bottom:10rpx;
  25 +}
  26 +.search-icon{
  27 + width:40rpx;
  28 + height:40rpx;
  29 + margin-left:30rpx;
  30 +}
  31 +.search-input{
  32 + width:520rpx;
  33 + height:100%;
  34 + padding:10rpx;
  35 + box-sizing:border-box;
  36 +}
  37 +.book-list-thead{
  38 + width:100%;
  39 + height:120rpx;
  40 + padding:0 40rpx;
  41 + box-sizing:border-box;
  42 + font-weight:400;
  43 + border-bottom: 2rpx solid #F1F0F4;
  44 +}
  45 +.book-list-thead>view{
  46 + width:25%;
  47 +}
  48 +.icon22-26{
  49 + width:22rpx;
  50 + height:26rpx;
  51 + margin-left:8rpx;
  52 +}
  53 +.book-list-body{
  54 + width:100%;
  55 + height:auto;
  56 + box-sizing:border-box;
  57 +}
  58 +.book-list-cut{
  59 + height:66rpx;
  60 + background:#F5F5F5;
  61 + padding-left:44rpx;
  62 + font-size: 26rpx;
  63 + line-height: 66rpx;
  64 +}
  65 +.book-list-cut text{
  66 + margin-right: 50rpx;
  67 +}
  68 +.border-line{
  69 + width:670rpx;
  70 + height:1px;
  71 + background:#efeef3;
  72 + margin:0 auto;
  73 +}
  74 +
  75 +.search-easy{
  76 + height:80rpx;
  77 + padding:20rpx 0;
  78 +}
  79 +.search-easy .block{
  80 + width: 50%;
  81 + min-width: 50%;
  82 + height: 100%;
  83 +}
  84 +.search-easy .block:first-child{
  85 + border-right: 1px solid #E0E0E0;
  86 +}
  87 +.section .tab{
  88 + font-size: 34rpx;
  89 + color: #199095;
  90 + height: 50rpx;
  91 +}
  92 +.section .tab .item{
  93 + height: 50rpx;
  94 + line-height: 49rpx;
  95 + width: 94rpx !important;
  96 + min-width: 94rpx !important;
  97 + border-radius: 10rpx;
  98 + border: 2rpx solid #199095;
  99 + margin-right: 16rpx;
  100 + text-align: center;
  101 + display: block;
  102 +}
  103 +.section .tab .item:after{
  104 + padding-right: 5rpx;
  105 +}
  106 +.section .tab .checked{
  107 + background-color:#199095;
  108 + color: #FEFEFE;
  109 +}
  110 +.exportFile{
  111 + font-size: 26rpx;
  112 + color:#353535;
  113 +}
  114 +.exportFile image{
  115 + width: 32rpx;
  116 + height: 32rpx;
  117 + margin: 0 auto 8rpx;
  118 +}
  119 +
  120 +
  121 +@import "common/calendar.wxss";
  1 +var util = require('../../utils/util.js')
  2 +var uri=require('../../utils/uri.js')
  3 +var bookOrder=require('../../utils/bookCommon.js')
  4 +const {regeneratorRuntime} = global
  5 +Page({
  6 + data:{
  7 + grand:[
  8 + {
  9 + sex:1,
  10 + grand_title:'先生',
  11 + isselect:true
  12 + },
  13 + {
  14 + sex:2,
  15 + grand_title:'女士',
  16 + isselect:false
  17 + }
  18 + ],
  19 + name:'',
  20 + sex:1,
  21 + phone:'',
  22 + remark:'',
  23 + buttonhide:true,
  24 + pnum:'6'
  25 + },
  26 + onLoad:function(opt){
  27 + wx.removeStorage({
  28 + key:'tableid',
  29 + })
  30 + wx.removeStorage({
  31 + key:'tabletype',
  32 + })
  33 + util.setBarTitle('录入订座信息');
  34 + var selectmonth=opt.date.split('-')[0][0]=='0' ? opt.date.split('-')[0][1] : opt.date.split('-')[0];
  35 + var selectday=opt.date.split('-')[1][0]=='0' ? opt.date.split('-')[1][1] : opt.date.split('-')[1];
  36 + console.log(opt)
  37 + var stringTime =opt.year+'-'+opt.date+' ' +opt.time+':00';
  38 + console.log(stringTime)
  39 + var time=bookOrder.gettimestamp(stringTime);
  40 + console.log(time)
  41 + this.setData({
  42 + thisyear:opt.year,
  43 + selectdate:selectmonth+'月'+selectday+'日',
  44 + time_dur:opt.time,
  45 + sellerid:util.cache('sellerid'),
  46 + time:time,
  47 + pnum:util.cache('order_pnum') ? util.cache('order_pnum') : this.data.pnum,
  48 + })
  49 + this.getdesklist();
  50 + },
  51 + onShow:function(){
  52 + var that=this;
  53 + if(util.cache('tableid')){
  54 + var tables=util.cache('tableid');
  55 + var templist=this.data.templist;
  56 + var showdesk=[];
  57 + for(var i=0;i<tables.length;i++){
  58 + templist.forEach(function(r,n){
  59 + if(tables[i]==r.id){
  60 + r.isselect=true;
  61 + if(r.tid==2){
  62 + r.name=r.name.length>4 ? r.name.slice(0,3)+'...' : r.name;
  63 + showdesk.unshift(r);
  64 + }else {
  65 + r.name=r.name.length>4 ? r.name.slice(0,3)+'...' : r.name;
  66 + showdesk.push(r);
  67 + }
  68 + }
  69 + })
  70 + }
  71 + this.setData({
  72 + showdesk:showdesk.slice(0,2)
  73 + })
  74 + }
  75 + if(util.cache('tableid') && util.cache('tableid').length>0){
  76 + if(this.data.name!='' && this.data.phone!='' && !this.data.reminder){
  77 + this.setData({
  78 + buttonhide:false
  79 + })
  80 + }
  81 + }
  82 + util.postSuccessFun=function(json,uri_code){
  83 + switch (uri_code) {
  84 + case uri.CGI_USER_SETRESERVEINFO__CODE:
  85 + wx.hideLoading()
  86 + if(json.ret==200){
  87 + wx.reLaunch({
  88 + url:util.http_build_query(json.data,'b_detail')
  89 + })
  90 + }
  91 + break;
  92 + case uri.CGI_USER_GETTABLELIST__CODE:
  93 + console.log('xxxx',json.data);
  94 + var list=json.data;
  95 + var templist=[];
  96 + for(var key in list){
  97 + if(key!='typex' && key!='typey'){
  98 + list[key].list.forEach(function(v,i){
  99 + templist.push(v)
  100 + })
  101 +
  102 + }
  103 + }
  104 + var tempsan=[];
  105 + var tempbao=[];
  106 + var showdesk=[];
  107 + var temp={};
  108 + templist.forEach(function(v,i){
  109 + v.name=v.name.length>4 ? v.name.slice(0,3)+'...' : v.name;
  110 + if(!v.r_status){
  111 + if(v.tid==2){
  112 + tempbao.push(v);
  113 + v.isselect=false;
  114 + showdesk.unshift(v);
  115 + }else{
  116 + tempsan.push(v);
  117 + v.isselect=false;
  118 + showdesk.push(v);
  119 + }
  120 + }
  121 + if(v.tid==2){
  122 + if(!temp.hasOwnProperty("tabletype_2")){
  123 + temp['tabletype_2']=true
  124 + }
  125 +
  126 + }else{
  127 + if(!temp.hasOwnProperty("tabletype_1")){
  128 + temp['tabletype_1']=true
  129 + }
  130 + }
  131 + })
  132 + util.cache('tabletype',temp);
  133 + console.log(showdesk)
  134 + that.setData({
  135 + sancount:list.typex, //typex散座
  136 + baocount:list.typey, //typey包间
  137 + showdesk:showdesk.slice(0,2),
  138 + templist:templist
  139 +
  140 + })
  141 + break;
  142 + }
  143 + }
  144 + },
  145 + changetime:function(){
  146 + wx.navigateBack()
  147 + },
  148 + selectgrand:function(e){
  149 + var sex=e.currentTarget.dataset.sex;
  150 + console.log(sex)
  151 + var grandlist=this.data.grand;
  152 + grandlist.forEach(function(v,i){
  153 + v.isselect=false;
  154 + if(v.sex==sex){
  155 + v.isselect=true;
  156 + }
  157 + })
  158 + this.setData({
  159 + grand:grandlist,
  160 + sex:sex
  161 + })
  162 + },
  163 + condition:function(e){
  164 + var name=this.data.name;
  165 + var phone=e.detail.value;
  166 + var regExp = /^(86)?((13\d{9})|(15[0,1,2,3,5,6,7,8,9]\d{8})|(18[0,5,6,7,8,9]\d{8}))$/
  167 + if(!(regExp.test(phone))){
  168 + this.setData({
  169 + reminder:'手机格式不正确'
  170 + })
  171 + }else{
  172 + this.setData({
  173 + reminder:null
  174 + })
  175 + }
  176 + if(name!='' && !this.data.reminder && phone!='' && util.cache('tableid')){
  177 + this.setData({
  178 + buttonhide:false
  179 + })
  180 + }
  181 + },
  182 + changename:function(e){
  183 + this.setData({
  184 + name:e.detail.value
  185 + })
  186 + },
  187 + changephone:function(e){
  188 + this.setData({
  189 + phone:e.detail.value
  190 + })
  191 + },
  192 + changeremark:function(e){
  193 + this.setData({
  194 + remark:e.detail.value
  195 + })
  196 + },
  197 + ifAll:function(){
  198 + var name=this.data.name;
  199 + var phone=this.data.phone;
  200 + if(name!='' && !this.data.reminder && phone!='' && util.cache('tableid')){
  201 + this.setData({
  202 + buttonhide:false
  203 + })
  204 + }
  205 + },
  206 + formsubmit:async function(){
  207 + wx.showLoading({
  208 + title:'正在预定',
  209 + mask:true
  210 + });
  211 + console.log(this.data.time)
  212 + var formData={
  213 + sid:this.data.sellerid,
  214 + tid:util.cache('tableid').toString(),
  215 + rname:this.data.name, //姓名
  216 + phone:this.data.phone, //手机号
  217 + sex:this.data.sex, //性别
  218 + pnum:this.data.pnum, //人数
  219 + rdate:this.data.time, //时间
  220 + cusdem:this.data.remark //备注
  221 + }
  222 + try{
  223 + let enter_params=util.cache('enter_params');
  224 + let manager_id=enter_params.manager_id;
  225 + if(manager_id){
  226 + let sc=(await App.Reserve.SellerInfo(enter_params)).data
  227 + let managers=sc.manager;
  228 + managers.forEach(man=>{
  229 + if(manager_id==man.id){
  230 + formData.cusman_id=man.id;
  231 + formData.cusman=man.user_name;
  232 + formData.cusman_phone=man.user_phone?man.user_phone:'';
  233 + formData.cusman_account=man.user_wechat?man.user_wechat:'';
  234 + }
  235 + })
  236 + }
  237 +
  238 +
  239 + let man=managers[mansIndex];
  240 + if(man){
  241 + App.Reserve.SetReserveCusman({
  242 + rid:this.data.bookInfo.id,
  243 + cusman_id:man.id,
  244 + cusman:man.user_name,
  245 + cusman_phone:man.user_phone?man.user_phone:'158777556369',
  246 + cusman_account:man.user_wechat?man.user_wechat:'',
  247 + });
  248 + }
  249 + }catch (e){}
  250 + console.log(formData)
  251 + util.post(uri.CGI_USER_SETRESERVEINFO,formData,uri.CGI_USER_SETRESERVEINFO__CODE)
  252 + },
  253 + changepnum:function(e){
  254 + console.log(e)
  255 + this.setData({
  256 + pnum:e.detail
  257 + })
  258 + this.getdesklist();
  259 + },
  260 + selectdesk:function(){
  261 + wx.navigateTo({
  262 + url:'b_desk?pnum='+this.data.pnum+'&year='+this.data.thisyear+'&date='+this.data.selectdate+'&time_dur='+this.data.time_dur
  263 + })
  264 + },
  265 + getdesklist:function(){
  266 + util.post(uri.CGI_USER_GETTABLELIST,{sid:this.data.sellerid,pnum:parseInt(this.data.pnum),rdate:this.data.time},uri.CGI_USER_GETTABLELIST__CODE)
  267 + },
  268 + binddesk:function(e){
  269 + var id=e.currentTarget.dataset.id;
  270 + var tables=util.cache('tableid') ? util.cache('tableid') : [];
  271 + var showdesk=this.data.showdesk;
  272 + showdesk.forEach(function(v,i){
  273 + if(v.id==id){
  274 + if(v.isselect==true){
  275 + var thisindex=tables.indexOf(id);
  276 + tables.splice(thisindex,1)
  277 + }else{
  278 + tables.push(id)
  279 + }
  280 + v.isselect=!v.isselect
  281 + }
  282 + })
  283 + util.cache('tableid',tables);
  284 + this.setData({
  285 + showdesk:showdesk
  286 + })
  287 + var name=this.data.name;
  288 + var phone=this.data.phone;
  289 + if(name!='' && !this.data.reminder && phone!='' && util.cache('tableid')){
  290 + this.setData({
  291 + buttonhide:false
  292 + })
  293 + }
  294 + }
  295 +})
  1 +{
  2 + "backgroundTextStyle":"light",
  3 + "navigationBarBackgroundColor": "#fff",
  4 + "navigationBarTextStyle":"black",
  5 + "usingComponents": {
  6 + "selectPeople":"/components/book/people/people",
  7 + "step":"/components/book/step/step",
  8 + "nav":"/components/nav/nav"
  9 + }
  10 +}
  1 +<nav>点餐商户端</nav>
  2 +<step step="1"></step>
  3 +<view class="other-info flex-lr">
  4 + <view class="selected-time flex-vc" bindtap="changetime">
  5 + <view class="font30r black-font">时间</view>
  6 + <view class="actual-time green-font font34r">{{selectdate}} {{time_dur}}</view>
  7 + </view>
  8 + <selectPeople bind:changepnum="changepnum" pnum="{{pnum}}"></selectPeople>
  9 +</view>
  10 +<view class="border-line"></view>
  11 +
  12 +<view class="advice-desk flex-lr">
  13 + <view class="black-font font30r">桌位</view>
  14 + <view>
  15 + <view class="font26r gray-deep-font flex-rr">(包间余{{baocount}}个,散座余{{sancount}}个)</view>
  16 + <view class="advice-desk-detail flex-rr">
  17 + <block wx:for="{{showdesk}}">
  18 + <block wx:if="{{item.tid==2}}">
  19 + <view class="order-desk-info {{item.isselect==true ? 'desk-active' : ''}}" bindtap="binddesk" data-id="{{item.id}}" data-type="{{item.tid}}">
  20 + <view class="flex-vc order-desk-detail">
  21 + <view class="font28r black-font smooth">{{item.name}}</view>
  22 + <view class="font26r black-font" style="margin-top:6rpx;">{{item.table_pnum}}人</view>
  23 + </view>
  24 + <view class="order-desk-type flex-cc white-font font20r">包间</view>
  25 + </view>
  26 + </block>
  27 + <block wx:else>
  28 + <view class="order-desk-info {{item.isselect==true ? 'desk-active' : ''}}" bindtap="binddesk" data-id="{{item.id}}" data-type="{{item.tid}}">
  29 + <view class="flex-vc order-desk-detail" style="height:100%;">
  30 + <view class="font28r black-font smooth">{{item.name}}</view>
  31 + <view class="font26r black-font" style="margin-top:6rpx;">6人</view>
  32 + </view>
  33 + </view>
  34 + </block>
  35 + </block>
  36 + <view class="flex-rr advice-more" bindtap="selectdesk">
  37 + <view style="padding-right:30rpx;" class="gray-deep-font font26r">更多</view>
  38 + <image src="http://qn.colorcun.com/custom/lite-yd/image/click.png" class="icon12-22"></image>
  39 + </view>
  40 + </view>
  41 + </view>
  42 +</view>
  43 +<view class="cut"></view>
  44 +
  45 +
  46 +<view class="book-info" style="margin-bottom: 205rpx;">
  47 + <view class="book-info-single flex-lr" style="align-items:flex-start;">
  48 + <input placeholder="请输入预订人姓名(必填)" placeholder-class="gray-font font34r" class="black-font font34r" maxlength="5" style="width:450rpx;" value="{{name}}" bindinput="changename" bindblur="ifAll"/>
  49 + <view class="book-info-grand flex-rr font28r gray-deep-font">
  50 + <block wx:for="{{grand}}">
  51 + <view class="book-grand flex-cc {{index==0 ? 'book-grand-border' : ''}} {{item.isselect==true ? 'book-grand-active white-font' : ''}}" bindtap="selectgrand" data-sex="{{item.sex}}">{{item.grand_title}}</view>
  52 + </block>
  53 + </view>
  54 + </view>
  55 + <view class="book-info-single flex-lr" style="align-items:flex-start;">
  56 + <input placeholder="请输入预订人手机号码(必填)" placeholder-class="gray-font font34r" class="black-font font34r" type="number" maxlength="11" bindblur="condition" bindinput="changephone" value="{{phone}}" style="color:{{reminder ? '#E14553' : '#353535'}};width:{{reminder ? 400 : 680}}rpx;"/>
  57 + <block wx:if="{{reminder}}">
  58 + <view class="flex-rr" style="height:100rpx;">
  59 + <view style="color:#E14553;" class="font28r">{{reminder}}</view>
  60 + <image src="http://qn.colorcun.com/custom/lite-yd/image/name-have.png" class="phone-reminder"></image>
  61 + </view>
  62 + </block>
  63 + </view>
  64 + <view class="book-info-single">
  65 + <input placeholder="请输入顾客要求(25字以内,选填)" placeholder-class="gray-font font34r" class="black-font font34r" maxlength="25" value="{{remark}}" bindinput="changeremark"/>
  66 + </view>
  67 +</view>
  68 +<view class="zhanwei">
  69 + <view class="confirm-button white-font flex-vc font34r {{buttonhide==false ? 'confirm-button-active' : ''}}" bindtap="{{buttonhide==false ? 'formsubmit' : ''}}">确定</view>
  70 +</view>
  1 +view{
  2 + line-height:1.2;
  3 +}
  4 +.other-info{
  5 + width:100%;
  6 + height:220rpx;
  7 + padding:20rpx 0;
  8 + box-sizing:border-box;
  9 +}
  10 +.selected-time{
  11 + width:375rpx;
  12 + height:100%;
  13 + border-right:1px solid #efeef3;
  14 + box-sizing:border-box;
  15 +}
  16 +.actual-time{
  17 + margin-top:30rpx;
  18 +}
  19 +.border-line{
  20 + width:680rpx;
  21 + height:1px;
  22 + background:#efeef3;
  23 + margin:0 auto;
  24 +}
  25 +.advice-desk{
  26 + width:680rpx;
  27 + height:auto;
  28 + padding:40rpx 0;
  29 + margin:0 auto;
  30 +}
  31 +.advice-desk-detail{
  32 + margin-top:30rpx;
  33 +}
  34 +.order-desk-info{
  35 + width:120rpx;
  36 + height:120rpx;
  37 + background:#EBF8F8;
  38 + border:1px solid #199095;
  39 + border-radius:10rpx;
  40 + position:relative;
  41 + overflow:hidden;
  42 + margin-right:40rpx;
  43 +}
  44 +.desk-active{
  45 + background:#A9E3E6;
  46 +}
  47 +.order-desk-detail{
  48 + width:100%;
  49 + height:90rpx;
  50 +}
  51 +.order-desk-type{
  52 + width:100%;
  53 + height:30rpx;
  54 + background:#199095;
  55 + position:absolute;
  56 + left:0;
  57 + bottom:0;
  58 +}
  59 +.advice-more{
  60 + padding:20rpx 0;
  61 + padding-left:30rpx;
  62 +}
  63 +.cut{
  64 + width:100%;
  65 + height:4px;
  66 + background:#efeef3;
  67 +}
  68 +
  69 +
  70 +
  71 +.book-info{
  72 + width:680rpx;
  73 + padding-top:20rpx;
  74 + margin:0 auto;
  75 +}
  76 +.book-info-single{
  77 + width:100%;
  78 + height:120rpx;
  79 + padding-top:80rpx;
  80 + border-bottom:1px solid #efeef3;
  81 +}
  82 +.book-info-single>input{
  83 + width:100%;
  84 + height:100rpx;
  85 +}
  86 +.book-info-grand{
  87 + height:50rpx;
  88 + border:1px solid #199095;
  89 + margin-top:20rpx;
  90 +}
  91 +.book-grand{
  92 + width:90rpx;
  93 + height:100%;
  94 + box-sizing:border-box;
  95 +}
  96 +.book-grand-active{
  97 + background:rgba(25,153,149,.8);
  98 +}
  99 +.book-grand-border{
  100 + border-right:1px solid #199095;
  101 +}
  102 +.phone-reminder{
  103 + width:32rpx;
  104 + height:32rpx;
  105 + margin-left:20rpx;
  106 +}
  107 +
  108 +.zhanwei{
  109 + width:100%;
  110 + height:170rpx;
  111 + background:#efeef3;
  112 + position:fixed;
  113 + left:0;
  114 + right:0;
  115 + bottom:0;
  116 + z-index: 99;
  117 +}
  118 +
  119 +
  120 +.confirm-button{
  121 + width:680rpx;
  122 + height:85rpx;
  123 + background:#199095;
  124 + margin:42rpx auto 0;
  125 + border-radius:10rpx;
  126 + opacity:.6;
  127 +}
  128 +.confirm-button-active{
  129 + opacity:1;
  130 +}
  1 +// pages/manager-invitation/review.js
  2 +import util from '../../utils/util';
  3 +import App from '../../utils/api';
  4 +import TP from '../../utils/tpls';
  5 +const {regeneratorRuntime} = global
  6 +Page({
  7 +
  8 + /**
  9 + * 页面的初始数据
  10 + */
  11 + data: {
  12 + height: 667,
  13 + current: 0,
  14 + tpls: TP.tpls(),
  15 + seller:{
  16 + name:'',
  17 + room:'',
  18 + date:util.unixtoTime(new Date()/1000,'YYYY/MM/DD 星期WW HH:II'),
  19 + addr:'',
  20 + hasOwner:true,
  21 + },
  22 + options:{},
  23 + },
  24 + detail:{},
  25 +
  26 + /**
  27 + * 生命周期函数--监听页面加载
  28 + */
  29 + onLoad: function (options) {
  30 + options.tplid=options.tplid||1;
  31 + let param={
  32 + options:options,
  33 + }
  34 + if(true){
  35 + param.tpls=[TP.tpls(options.tplid)]
  36 + }
  37 + this.setData(param)
  38 + this.initData(options);
  39 + },
  40 + initData(options){
  41 + App.Reserve.Detail({rid:options.id,openid:''}).then(res=>{
  42 + this.detail=res.data;
  43 + let tables=[];
  44 + res.data.tables.forEach(t=>{
  45 + tables.push(t.name);
  46 + })
  47 + this.setData({
  48 + seller:{
  49 + name:res.data.seller.sellername,
  50 + room:tables.join('、'),
  51 + date:util.unixtoTime(res.data.ddate,this.data.tpls[this.data.current].timeStr),
  52 + addr:res.data.seller.real_address||res.data.seller.map_address,
  53 + image:res.data.image_url,
  54 + hasOwner:true,
  55 + }
  56 + })
  57 + })
  58 + },
  59 + /**
  60 + * 生命周期函数--监听页面初次渲染完成
  61 + */
  62 + onReady: function () {
  63 +
  64 + },
  65 +
  66 + /**
  67 + * 生命周期函数--监听页面显示
  68 + */
  69 + onShow: function () {
  70 + //导航栏自适应
  71 + let systemInfo = wx.getSystemInfoSync();
  72 + let reg = /ios/i;
  73 + let pt = 20;//导航状态栏上内边距
  74 + let h = 44;//导航状态栏高度
  75 + if (reg.test(systemInfo.system)) {
  76 + pt = systemInfo.statusBarHeight;
  77 + h = 44;
  78 + } else {
  79 + pt = systemInfo.statusBarHeight;
  80 + h = 48;
  81 + }
  82 + this.setData({
  83 + statusBarHeight: pt,
  84 + titleBarHeight: h,
  85 + height: systemInfo.windowHeight
  86 + })
  87 + },
  88 +
  89 + /**
  90 + * 生命周期函数--监听页面隐藏
  91 + */
  92 + onHide: function () {
  93 +
  94 + },
  95 +
  96 + /**
  97 + * 生命周期函数--监听页面卸载
  98 + */
  99 + onUnload: function () {
  100 +
  101 + },
  102 +
  103 + /**
  104 + * 页面相关事件处理函数--监听用户下拉动作
  105 + */
  106 + onPullDownRefresh: function () {
  107 +
  108 + },
  109 +
  110 + /**
  111 + * 页面上拉触底事件的处理函数
  112 + */
  113 + onReachBottom: function () {
  114 +
  115 + },
  116 +
  117 + /**
  118 + * 用户点击右上角分享
  119 + */
  120 + onShareAppMessage: function () {
  121 + let path=util.http_build_query({
  122 + ...this.data.options,
  123 + fromid:getApp().openid,
  124 + hasSellerShare:1,
  125 + hasInvitation:1,
  126 + },'/pages/customer/index')
  127 + return {
  128 + title: this.data.tpls[this.data.current].shareFirstTitle,
  129 + path: path,
  130 + imageUrl:this.data.tpls[this.data.current].shareFirstImage,
  131 + }
  132 + },
  133 + swiperChange(e){
  134 + let current=e.detail.current
  135 + this.setData({
  136 + current:current,
  137 + [`seller.date`]:util.unixtoTime(new Date()/1000,this.data.tpls[current].timeStr)
  138 + })
  139 + },
  140 + switchTabs(e){
  141 + let current=util.attr(e,'current')
  142 + this.setData({
  143 + current:current,
  144 + [`seller.date`]:util.unixtoTime(new Date()/1000,this.data.tpls[current].timeStr)
  145 + })
  146 + },
  147 + sendmsg(){
  148 + if (!this.detail.phone) {
  149 + util.toast('未填写手机号码', 'none')
  150 + return;
  151 + } else if (!/^1\d{10}$/.test(this.detail.phone)) {
  152 + util.toast('手机号码错误', 'none')
  153 + return;
  154 + }
  155 + wx.navigateTo({
  156 + url: '/pages/book/b_sms?id=' + this.detail.id
  157 + });
  158 + },
  159 + gotoDetail(){
  160 + wx.redirectTo({
  161 + url: '/pages/book/b_detail?id=' + this.detail.id
  162 + });
  163 + }
  164 +})
  1 +{
  2 + "backgroundTextStyle":"light",
  3 + "navigationBarBackgroundColor": "#fff",
  4 + "navigationBarTextStyle":"white",
  5 + "usingComponents": {
  6 + "nav":"/components/nav/nav",
  7 + "formids":"/components/formids/formids",
  8 + "userinfo-share": "/components/userinfo/share"
  9 + }
  10 +}
  1 +<import src="../tpl/invitation"></import>
  2 +<swiper
  3 + indicator-dots="{{false}}"
  4 + autoplay="{{false}}"
  5 + duration="{{500}}"
  6 + bindchange="swiperChange"
  7 + current="{{current}}"
  8 + style="height:{{height}}px;"
  9 +>
  10 + <block wx:for="{{tpls}}" wx:key="tpls.key">
  11 + <swiper-item>
  12 + <view class="pages bg-{{item.id}} flex-vc" style="height:{{height}}px;width:100%;">
  13 + <template is="tpl-{{item.id}}" data="{{seller,options}}"></template>
  14 + </view>
  15 + </swiper-item>
  16 + </block>
  17 +</swiper>
  18 +<view class="flex-vc"
  19 + style="position:fixed;top:{{statusBarHeight}}px;left:0;height: {{titleBarHeight}}px; line-height: {{titleBarHeight}}px;">
  20 + <view class="tabs flex-ll">
  21 + <formids class="back" bindclick="gotoDetail" >
  22 + <view style="min-width: 100rpx;" class="flex-ll">
  23 + <image class="back-image"
  24 + src="http://qn.colorcun.com/custom/lite-yd/image/back-light.png"></image>
  25 + </view>
  26 + </formids>
  27 + <block wx:if="{{false}}" wx:for="{{tpls}}" wx:key="tpls.key">
  28 + <view class="item {{index==current?'active':''}}" bindtap="switchTabs" data-current="{{index}}">{{item.name}}</view>
  29 + </block>
  30 + </view>
  31 +</view>
  32 +<view class="bottom flex-lr">
  33 + <formids bindclick="sendmsg" class="sendmsg">
  34 + 发短信
  35 + </formids>
  36 + <userinfo-share binduserinfo="share" class="share Semibold">
  37 + 通知客户
  38 + </userinfo-share>
  39 +</view>
  40 +<!--//商务-->
  41 +<template name="tpl-1">
  42 + <view class="flex-vc shangwu" bindtap="{{options.rid?'goEditor':''}}">
  43 + <template is="tpl-shangwu" data="{{...seller,options}}"></template>
  44 + </view>
  45 +</template>
  46 +
  47 +<!--//温馨-->
  48 +<template name="tpl-2">
  49 + <template is="tpl-wenxin" data="{{...seller,options}}"></template>
  50 +</template>
  1 +@import "../manager-invitation/tpls.wxss";
  2 +.pages{
  3 + background-size: 100%;
  4 + font-size: 34rpx;
  5 +}
  6 +.tabs{
  7 +}
  8 +.tabs .item{
  9 + font-size: 32rpx;
  10 + color:#999999;
  11 + margin-left: 20rpx;
  12 + padding: 0 10rpx;
  13 + height: 66rpx;
  14 + line-height: 66rpx;
  15 +}
  16 +.tabs .item.active{
  17 + font-size: 36rpx;
  18 + font-weight: bold;
  19 + color: #E9D9B7;
  20 + border-bottom: 2rpx solid #E9D9B7;
  21 +}
  22 +image{
  23 + width: 100%;
  24 + height: 100%;
  25 +}
  26 +
  27 +.buts-share{
  28 + background-image: url("http://qn.colorcun.com/manager-invitation/wx2/%E5%8F%91%E9%82%80%E8%AF%B7%E5%87%BD.png");
  29 +}
  30 +.buts-share.customer{
  31 + background-image: url("http://qn.colorcun.com/manager-invitation/wx/%E7%A1%AE%E8%AE%A4%E6%94%B6%E5%88%B0.png");
  32 +}
  33 +
  34 +.shangwu{
  35 + margin-top: 52rpx;
  36 +}
  37 +.shangwu .seller{
  38 + margin-bottom: 42rpx;
  39 +}
  40 +.shangwu .invit-logo.owner{
  41 + width: 380rpx;
  42 + height: 200rpx;
  43 + background-image: url("http://qn.colorcun.com/manager-invitation/wx2/%E9%A2%84%E8%AE%A2%E5%AE%89%E6%8E%92.png");
  44 +}
  45 +.shangwu .invit-logo.customer{
  46 + width: 352rpx;
  47 + height: 164rpx;
  48 + background-image: url("http://qn.colorcun.com/custom/lite-yd/image/invit-logo.png");
  49 +}
  50 +
  51 +
  52 +.wenxin-mask{
  53 + margin-top: 20rpx;
  54 +}
  55 +.wenxin-baitou{
  56 + margin-top: 20rpx;
  57 +}
  58 +.wenxin .seller{
  59 + margin-bottom: 22rpx;
  60 +}
  61 +.wenxin .invit-logo.owner{
  62 + width: 340rpx;
  63 + height: 184rpx;
  64 + background-image: url("http://qn.colorcun.com/manager-invitation/wx2/%E9%A2%84%E8%AE%A2%E5%AE%89%E6%8E%92-%E6%B8%A9%E9%A6%A8.png");
  65 +}
  66 +.wenxin .invit-logo.customer{
  67 + width: 344rpx;
  68 + height: 198rpx;
  69 + background-image: url("http://qn.colorcun.com/manager-invitation/wx/%E9%82%80%E8%AF%B7%E5%87%BD.png");
  70 +}
  71 +
  72 +.back{
  73 + margin-left: 40rpx;
  74 +}
  75 +.back-image{
  76 + height: 32rpx;
  77 + width: 18rpx;
  78 +}
  79 +.bottom{
  80 + position: fixed;
  81 + bottom: 0;
  82 + height: 98rpx;
  83 + line-height: 98rpx;
  84 + border-top: 2rpx solid #ECD9B7;
  85 + background-color: #ECD9B7;
  86 + width: 100%;
  87 +}
  88 +.bottom .sendmsg{
  89 + background-color: #262628;
  90 + width: 30%;
  91 + min-width: 30%;
  92 + color: #ECD9B7;
  93 + font-size: 30rpx;
  94 +}
  95 +.bottom .share{
  96 + text-align: center;
  97 + width: 70%;
  98 + font-size: 36rpx;
  99 + color: #794F28;
  100 +}
  1 +// pages/book/b_setting.js
  2 +var util = require('../../utils/util.js')
  3 +var bookOrder=require('../../utils/bookCommon.js')
  4 +import App from '../../utils/api';
  5 +const {regeneratorRuntime} = global
  6 +
  7 +Page({
  8 +
  9 + /**
  10 + * 页面的初始数据
  11 + */
  12 + data: {
  13 + dateStr:'',
  14 + calendarMaskLoad:false,
  15 + calendarMask:false,
  16 + dayStyle:[
  17 + { month: 'current', day: new Date().getDate(), color: 'white', background: '#AAD4F5' },
  18 + { month: 'current', day: new Date().getDate(), color: 'white', background: '#AAD4F5' }
  19 + ],
  20 + regions:[],
  21 + regions_active:'',
  22 + time:-1,
  23 + speciallist:[],
  24 + calendar:{
  25 + nextNum:0,
  26 + },
  27 + rdate:'',
  28 + },
  29 + regions:[],
  30 + sellerid:0,
  31 + timePickerArray:[
  32 + [],
  33 + [],
  34 + [],
  35 + ],
  36 + /**
  37 + * 生命周期函数--监听页面加载
  38 + */
  39 + onLoad: async function (options) {
  40 + let d=new Date()/1000;
  41 + let dateStr=util.unixtoTime(d,'MM-DD DAY');
  42 + let timePickerArray= await bookOrder.getDayTimeSpace();
  43 + let speciallist=[
  44 + { date: util.unixtoTime(d,'YYYY-MM-DD'), background: '', text:'今 天' },
  45 + { date: util.unixtoTime(d+86400,'YYYY-MM-DD'), background: '', text: '明 天' },
  46 + { date: util.unixtoTime(d+86400*2,'YYYY-MM-DD'), background: '', text: '后 天' },
  47 + ];
  48 + this.setData({
  49 + dateStr:dateStr,
  50 + timePickerArray:timePickerArray,
  51 + speciallist:speciallist,
  52 + })
  53 + },
  54 +
  55 + /**
  56 + * 生命周期函数--监听页面初次渲染完成
  57 + */
  58 + onReady: function () {
  59 +
  60 + },
  61 +
  62 + /**
  63 + * 生命周期函数--监听页面显示
  64 + */
  65 + onShow: async function () {
  66 + this.setData({
  67 + height:getApp().system.windowHeight-170,
  68 + })
  69 + setTimeout(()=>{
  70 + this.setData({
  71 + calendarMaskLoad:true,
  72 + })
  73 + },1000);
  74 + this.selectComponent('#nav').init();
  75 + this.sellerid=util.cache('sellerid');
  76 + App.Tables.GetTableListsBySellerId({
  77 + sellerid:this.sellerid
  78 + }).then((res)=>{
  79 + this.regions=res.data[0];
  80 + this.getbooklist();
  81 + })
  82 + },
  83 +
  84 + /**
  85 + * 生命周期函数--监听页面隐藏
  86 + */
  87 + onHide: function () {
  88 +
  89 + },
  90 +
  91 + /**
  92 + * 生命周期函数--监听页面卸载
  93 + */
  94 + onUnload: function () {
  95 +
  96 + },
  97 + calendarShow(){
  98 + console.log('xxxxx')
  99 + this.setData({
  100 + calendarMask:true
  101 + })
  102 + console.log(this.data.calendarMask)
  103 + },
  104 + dateChange(event){
  105 + let cktime=util.timetouUnix(event.detail.date)
  106 + let day0=parseInt(new Date(new Date().setHours(0, 0, 0, 0)) / 1000);
  107 + // if(cktime<day0){
  108 + // util.toast('请选择今天之后的日期','none');
  109 + // return;
  110 + // }
  111 + let clickDay = event.detail.date.substr(8,2);
  112 + let changeDay = `dayStyle[1].day`;
  113 + let changeBg = `dayStyle[1].background`;
  114 + this.setData({
  115 + dateStr:util.unixtoTime(cktime,'MM-DD `DAY/周WW`'),
  116 + [changeDay]: clickDay,
  117 + [changeBg]: "#84e7d0",
  118 + })
  119 +
  120 + this.getbooklist();
  121 + this.calendarClose();
  122 + },
  123 + calendarClose(){
  124 + this.setData({
  125 + calendarMask:false
  126 + })
  127 + },
  128 + async getbooklist(){
  129 + let obj={};
  130 +
  131 + let formdata={};
  132 + formdata.sid=this.sellerid;
  133 + formdata.x=1;
  134 + formdata.y=200;
  135 + let time=0;
  136 + if(this.data.time<0){
  137 + let sid=await bookOrder.getTimeSpaceIndexData();
  138 + time=sid.timeIndex
  139 + obj.time=time;
  140 + }else{
  141 + time=this.data.time;
  142 + }
  143 + let rdate=await bookOrder.getTimeSpace(this.data.dateStr,time);
  144 + formdata.rdate=rdate;
  145 + formdata.status='1,2';
  146 + obj.rdate=rdate;
  147 + let tids={};
  148 + let reserves=await App.Reserve.GetReserveList(formdata);
  149 + if(reserves.data.length>0){
  150 + reserves.data.forEach(r=>{
  151 + let ts=r.tid.split(',');
  152 + ts.forEach(tid=>{
  153 + let rname='';
  154 + if(r.sex==3){
  155 + rname=r.rname.substr(0,10)
  156 + }else{
  157 + rname=r.rname.substr(0,1)+(r.sex==1?'先生':'女士')
  158 + }
  159 + tids[tid]={
  160 + rdate:r.rdate,
  161 + id:r.id,
  162 + status:r.status,
  163 + rname:rname,
  164 + }
  165 + })
  166 + })
  167 + }
  168 + console.log('tids',tids);
  169 + let regions=[];
  170 + this.regions.forEach(region=>{
  171 + if(region.list.length>0){
  172 + let list_num=0;
  173 + region.list.forEach(tb=>{
  174 + tb.status_str='';
  175 + tb.status_classname='enabled'
  176 + tb.reserve_name=''
  177 + tb.reserve_id=''
  178 + if(tb.status!=0 && tb.status!=""){
  179 + tb.status_str='用餐中';
  180 + tb.status_classname='highlight';
  181 + tb.reserve_name=tb.spell==1?'拼桌':'堂食';
  182 + }else if(tids[tb.id]){
  183 + console.log('tids',region.name,tb.name);
  184 + tb.status_str=tids[tb.id].status==2?'用餐中':'已预订';
  185 + tb.status_classname='highlight';
  186 + tb.reserve_id=tids[tb.id].id;
  187 + tb.reserve_name=tids[tb.id].rname;
  188 + }
  189 + if(tb.enable!=1){
  190 + if(tb.status_str){
  191 + tb.status_classname='disabled-highlight';
  192 + }else{
  193 + tb.status_str='已停用';
  194 + tb.status_classname='disabled';
  195 + }
  196 + }
  197 + if(!tb.status_str){
  198 + list_num++;
  199 + }
  200 + region.list_num=list_num;
  201 + })
  202 + regions.push(region);
  203 + }
  204 + })
  205 + obj.regions=regions
  206 + if(!this.data.regions_active){
  207 + obj.regions_active=this.regions[0].name
  208 + }
  209 + this.setData(obj)
  210 + },
  211 + chooseRegion(e){
  212 + this.setData({
  213 + regions_active:util.attr(e,'name')
  214 + })
  215 + },
  216 + selectedValue(e){
  217 + this.setData({
  218 + time:util.attr(e,'value')
  219 + })
  220 + this.getbooklist();
  221 + },
  222 + boardEvent(e){
  223 + console.log(e);
  224 + App.Tables.GetTableListsBySellerId({
  225 + sellerid:this.sellerid
  226 + },true).then((res)=>{
  227 + this.regions=res.data[0];
  228 + this.getbooklist();
  229 + })
  230 + },
  231 + gotoday(e){
  232 + this.setData({
  233 + [`calendar.nextNum`]:0
  234 + })
  235 + },
  236 + nextMonth(e){
  237 + this.setData({
  238 + [`calendar.nextNum`]:this.data.calendar.nextNum+1
  239 + })
  240 + },
  241 + prevMonth(e){
  242 + this.setData({
  243 + [`calendar.nextNum`]:this.data.calendar.nextNum-1
  244 + })
  245 + },
  246 +})
  1 +{
  2 + "backgroundTextStyle":"light",
  3 + "navigationBarBackgroundColor": "#fff",
  4 + "navigationBarTextStyle":"black",
  5 + "usingComponents": {
  6 + "nav":"/components/nav/nav",
  7 + "tabBar":"/components/book/tabBar/tabBar",
  8 + "calendar": "plugin://bmCalendar/calendar",
  9 + "board":"/components/book/board/board",
  10 + "formids":"/components/formids/formids"
  11 + }
  12 +}
  1 +<!--pages/book/b_setting.wxml-->
  2 +<nav id="nav">桌位</nav>
  3 +<view class="page">
  4 + <view class="search-easy flex-lr">
  5 + <formids class="block flex-vc" bindtap="calendarShow">
  6 + <view class="flex-vc">
  7 + <view class="green-font font34r font-bold flex-cc">{{dateStr}}</view>
  8 + </view>
  9 + </formids>
  10 + <view class="block section flex-vc">
  11 + <view class="tab flex-cc">
  12 + <formids class="item {{time==0?'checked':''}} flex-cc"
  13 + wx:if="{{timePickerArray[0].length>0}}"
  14 + bindtap="selectedValue" data-key="time" data-value="0">早市</formids>
  15 + <formids class="item {{time==1?'checked':''}} flex-cc"
  16 + wx:if="{{timePickerArray[1].length>0}}"
  17 + bindtap="selectedValue" data-key="time" data-value="1">午市</formids>
  18 + <formids class="item {{time==2?'checked':''}} flex-cc"
  19 + wx:if="{{timePickerArray[2].length>0}}"
  20 + bindtap="selectedValue" data-key="time" data-value="2">晚市</formids>
  21 + </view>
  22 + </view>
  23 + </view>
  24 + <view class="flex-lr disks">
  25 + <view class="menus Medium" style="height: {{height}}px;">
  26 + <view class="menu flex-cc {{regions_active==item.name?'active':''}}"
  27 + wx:for="{{regions}}" wx:key="regions.key"
  28 + bindtap="chooseRegion" data-name="{{item.name}}">
  29 + <view class="menu-text">{{item.name}}</view>
  30 + <view class="last-num {{item.list_num>0?'':'full'}}">{{item.list_num>0?'余'+item.list_num:'满座'}}</view>
  31 + </view>
  32 + </view>
  33 + <view class="items" style="height: {{height}}px;">
  34 + <block wx:for="{{regions}}" wx:key="regions.key">
  35 + <view class="items-disks flex-ll" style="flex-wrap: wrap"
  36 + wx:if="{{regions_active==item.name}}">
  37 + <board width="160" height="180" board="{{item}}"
  38 + ddate="{{rdate}}"
  39 + style="margin: 20rpx 0 0 20rpx"
  40 + bindboardEvent="boardEvent"
  41 + event="boardOpt"
  42 + wx:for="{{item.list}}" wx:key="item.key" ></board>
  43 + </view>
  44 + </block>
  45 + </view>
  46 + </view>
  47 +</view>
  48 +<tabBar></tabBar>
  49 +<view class="calendar-mask" bindtap="calendarClose"
  50 + style="height:{{calendarMask?'100%':0}};" wx:if="{{calendarMaskLoad}}">
  51 + <view style="width: 100%; height:{{calendarMask?'100%':0}};overflow: hidden;position: relative;">
  52 + <calendar catchtap="catchtap"
  53 + isTodaybtn="{{true}}" todaybtn_txt="回到今天"
  54 + custom="{{false}}"
  55 + switchover="{{['上一月','下个月']}}"
  56 + active-coloro="active-coloro"
  57 + active-colort="active-colort"
  58 + speciallist="{{speciallist}}"
  59 + txt_style="txt-style"
  60 + calendar-style="calendar"
  61 + header-style="calendar-header"
  62 + weektitle-style="weektitle-style"
  63 + restcolor-style="restcolor-style"
  64 + txt_type="cn-d"
  65 +
  66 + datefont-style="datefont-style"
  67 + todaybtn-style="todaybtn-style"
  68 +
  69 + bindnextMonth="nextMonth"
  70 + bindprevMonth="prevMonth"
  71 + bindselectDate="dateChange"
  72 + bindgotoday="gotoday"
  73 +
  74 + prev="{{true||calendar.nextNum>0}}"
  75 + circle_show="{{false}}"
  76 + closelaststyle="{{true}}"
  77 + ></calendar>
  78 + </view>
  79 +</view>
  1 +/* pages/book/b_setting.wxss */
  2 +.page{
  3 + width: 100%;
  4 + margin: 20rpx 0 0;
  5 + overflow: hidden;
  6 +}
  7 +.search-easy{
  8 + height:80rpx;
  9 +}
  10 +.search-easy .block{
  11 + width: 50%;
  12 + min-width: 50%;
  13 + height: 100%;
  14 +}
  15 +
  16 +.search-easy .block:first-child{
  17 + border-right: 1px solid #E0E0E0;
  18 +}
  19 +.section .tab{
  20 + font-size: 34rpx;
  21 + color: #199095;
  22 + height: 50rpx;
  23 +}
  24 +.section .tab .item{
  25 + height: 50rpx;
  26 + line-height: 49rpx;
  27 + width: 94rpx !important;
  28 + min-width: 94rpx !important;
  29 + border-radius: 10rpx;
  30 + border: 2rpx solid #199095;
  31 + margin-right: 16rpx;
  32 + text-align: center;
  33 + display: block;
  34 +}
  35 +.section .tab .checked{
  36 + background-color:#199095;
  37 + color: #FEFEFE;
  38 +}
  39 +
  40 +
  41 +@import "common/calendar.wxss";
  42 +
  43 +
  44 +
  45 +.disks{
  46 + width: 100%;
  47 + border-top: 1rpx solid #E0E0E0;
  48 + margin-top: 14rpx;
  49 + background-color: #F5F5F5;
  50 +}
  51 +.disks .menus,.disks .items{
  52 + overflow-y: auto;
  53 +}
  54 +.disks .menus{
  55 + background-color: #fefefe;
  56 + width: 168rpx;
  57 + min-width: 168rpx;
  58 + color: #999999;
  59 +}
  60 +.disks .menu{
  61 + height: 160rpx;
  62 + overflow: hidden;
  63 + border-left: 4rpx solid #fefefe;
  64 + border-bottom: 1rpx solid #F5F5F5;
  65 + position: relative;
  66 +}
  67 +.disks .menu.active{
  68 + background-color: #F5F5F5;
  69 + border-left: 4rpx solid #199095;
  70 + color: #199095;
  71 +}
  72 +.disks .menu-text{
  73 + font-size: 30rpx;
  74 + width: 120rpx;
  75 + margin: 0 auto;
  76 + max-height: 84rpx;
  77 + line-height: 42rpx;
  78 + overflow: hidden;
  79 +}
  80 +
  81 +.disks .items{
  82 + width: 100%;
  83 +}
  84 +.disks .items-disks{
  85 + margin: 0 auto;
  86 + width: 570rpx;
  87 + padding-bottom: 80rpx;
  88 +}
  89 +.disks .menu .last-num{
  90 + position: absolute;
  91 + right: 0rpx;
  92 + top:0rpx;
  93 + width: 78rpx;
  94 + height: 30rpx;
  95 + line-height: 30rpx;
  96 + font-size: 24rpx;
  97 + color: #FEFEFE;
  98 + background-color: #61A5D1;
  99 + text-align: center;
  100 +}
  101 +.disks .menu .last-num.full{
  102 + background-color: #999999;
  103 +}