Full Code of congwa/orderSystem for AI

master 23cf3305f7c1 cached
125 files
1.2 MB
391.4k tokens
251 symbols
1 requests
Download .txt
Showing preview only (1,347K chars total). Download the full file or copy to clipboard to get everything.
Repository: congwa/orderSystem
Branch: master
Commit: 23cf3305f7c1
Files: 125
Total size: 1.2 MB

Directory structure:
gitextract_jxxs9e2u/

├── README.md
└── client/
    ├── app.js
    ├── app.json
    ├── app.wxss
    ├── pages/
    │   ├── appointment/
    │   │   ├── appointment.js
    │   │   ├── appointment.json
    │   │   ├── appointment.wxml
    │   │   └── appointment.wxss
    │   ├── az/
    │   │   ├── az.js
    │   │   ├── az.json
    │   │   ├── az.wxml
    │   │   └── az.wxss
    │   ├── component/
    │   │   ├── all_food.wxml
    │   │   ├── coupon.wxml
    │   │   ├── date-select/
    │   │   │   ├── date-select.js
    │   │   │   ├── date-select.json
    │   │   │   ├── date-select.wxml
    │   │   │   └── date-select.wxss
    │   │   ├── index_list.wxml
    │   │   ├── key_component/
    │   │   │   ├── component.js
    │   │   │   ├── component.json
    │   │   │   ├── component.wxml
    │   │   │   └── component.wxss
    │   │   ├── multiple-rate/
    │   │   │   ├── multiple-rate.js
    │   │   │   ├── multiple-rate.json
    │   │   │   ├── multiple-rate.wxml
    │   │   │   └── multiple-rate.wxss
    │   │   ├── nearby.wxml
    │   │   ├── pocket.js
    │   │   ├── pocket.json
    │   │   ├── pocket.wxml
    │   │   ├── pocket.wxss
    │   │   └── soft_list.wxml
    │   ├── coupon/
    │   │   ├── coupon.js
    │   │   ├── coupon.json
    │   │   ├── coupon.wxml
    │   │   └── coupon.wxss
    │   ├── droppassword/
    │   │   ├── droppassword.js
    │   │   ├── droppassword.json
    │   │   ├── droppassword.wxml
    │   │   └── droppassword.wxss
    │   ├── indent/
    │   │   ├── indent.js
    │   │   ├── indent.json
    │   │   ├── indent.wxml
    │   │   └── indent.wxss
    │   ├── index/
    │   │   ├── index.js
    │   │   ├── index.json
    │   │   ├── index.wxml
    │   │   ├── index.wxss
    │   │   └── type.js
    │   ├── mycenter/
    │   │   ├── mycenter.js
    │   │   ├── mycenter.json
    │   │   ├── mycenter.wxml
    │   │   └── mycenter.wxss
    │   ├── mytalk/
    │   │   ├── mytalk.js
    │   │   ├── mytalk.json
    │   │   ├── mytalk.wxml
    │   │   └── mytalk.wxss
    │   ├── order/
    │   │   ├── order.js
    │   │   ├── order.json
    │   │   ├── order.wxml
    │   │   ├── order.wxss
    │   │   └── type.js
    │   ├── pay_input/
    │   │   ├── pay_input.js
    │   │   ├── pay_input.json
    │   │   ├── pay_input.wxml
    │   │   └── pay_input.wxss
    │   ├── pay_success/
    │   │   ├── pay_success.js
    │   │   ├── pay_success.json
    │   │   ├── pay_success.wxml
    │   │   └── pay_success.wxss
    │   ├── pocket/
    │   │   ├── pocket.js
    │   │   ├── pocket.json
    │   │   ├── pocket.wxml
    │   │   └── pocket.wxss
    │   ├── points/
    │   │   ├── points.js
    │   │   ├── points.json
    │   │   ├── points.wxml
    │   │   └── points.wxss
    │   ├── review/
    │   │   ├── index.wxss
    │   │   ├── review.js
    │   │   ├── review.json
    │   │   ├── review.wxml
    │   │   └── review.wxss
    │   ├── reviewfdetails/
    │   │   ├── reviewfdetails.js
    │   │   ├── reviewfdetails.json
    │   │   ├── reviewfdetails.wxml
    │   │   └── reviewfdetails.wxss
    │   ├── reviewlist/
    │   │   ├── reviewlist.js
    │   │   ├── reviewlist.json
    │   │   ├── reviewlist.wxml
    │   │   └── reviewlist.wxss
    │   ├── shop/
    │   │   ├── shop.js
    │   │   ├── shop.json
    │   │   ├── shop.wxml
    │   │   └── shop.wxss
    │   ├── shop_list/
    │   │   ├── shop_list.js
    │   │   ├── shop_list.json
    │   │   ├── shop_list.wxml
    │   │   ├── shop_list.wxss
    │   │   └── type.js
    │   ├── switchcity/
    │   │   ├── switchcity.js
    │   │   ├── switchcity.json
    │   │   ├── switchcity.wxml
    │   │   └── switchcity.wxss
    │   ├── talk/
    │   │   ├── talk.js
    │   │   ├── talk.json
    │   │   ├── talk.wxml
    │   │   └── talk.wxss
    │   └── topay/
    │       ├── topay.js
    │       ├── topay.json
    │       ├── topay.wxml
    │       └── topay.wxss
    ├── project.config.json
    ├── style/
    │   └── weui.wxss
    ├── utils/
    │   ├── area.js
    │   ├── area2.js
    │   ├── bmap-wx.js
    │   ├── city.js
    │   ├── httpClient.js
    │   ├── payment.js
    │   ├── qqmap-wx-jssdk.js
    │   ├── urlModel.js
    │   └── util.js
    └── weui.wxss

================================================
FILE CONTENTS
================================================

================================================
FILE: README.md
================================================
# orderSystem
微信小程序-仿照美团、大众点评做的一个点餐的小程序,内容包含登录、页面跳转、楼梯效果、点餐动画、订桌、订餐、城市定位与天气定位(使用baiduapi)、微信支付,评论等功能
### 项目结构
    "pages/az/az",   ---------- 登录页(小程序登录自己服务器)
    "pages/index/index",------- 首页
    "pages/mycenter/mycenter",- 个人中心
    "pages/indent/indent",----- 订单
    "pages/order/order",------- 点餐
    "pages/appointment/appointment",-订餐
    "pages/shop/shop",   ------- 商铺
    "pages/shop_list/shop_list",-- 商铺详情
    "pages/topay/topay",  --------点餐支付
    "pages/pay_input/pay_input",--面对面付款
    "pages/pay_success/pay_success",-支付成功
    "pages/points/points", ---------- 
    "pages/coupon/coupon", ---------优惠券(小程序中有微信自己的卡券,建议用那个)
    "pages/pocket/pocket",----------
    "pages/reviewlist/reviewlist",--
    "pages/reviewfdetails/reviewfdetails",
    "pages/review/review",----------评论(使用组件)
    "pages/component/key_component/component",-6格密码输入组件
    "pages/switchcity/switchcity",-------------城市选择器
    "pages/mytalk/mytalk", --------------------评论
    "pages/droppassword/droppassword"----------修改密码


================================================
FILE: client/app.js
================================================
//app.js
import {URL} from './utils/urlModel.js';

/**
 * 用户所用到的
 */
var scope = {
  userInfo:false,
  userLocation:false,
  address: false,
  writePhotosAlbum:false,
  camera:false
}
App({
  onLaunch: function () {
    var _this = this;
    wx.getSystemInfo({
      success: function (res) {
        console.log('手机信息', res);
        _this.globalData.systemInfo = res;
        var systemInfo = res;
        var windowHeight = (systemInfo.windowHeight * (750 / systemInfo.windowWidth)); //将高度乘以换算后的该设备的rpx与px的
        _this.globalData.windowHeight = windowHeight;
      }
    });
  },
  bezier: function (pots, amount) {
    var pot;
    var lines;
    var ret = [];
    var points;
    for (var i = 0; i <= amount; i++) {
      points = pots.slice(0);
      lines = [];
      while (pot = points.shift()) {
        if (points.length) {
          lines.push(pointLine([pot, points[0]], i / amount));
        } else if (lines.length > 1) {
          points = lines;
          lines = [];
        } else {
          break;
        }
      }
      ret.push(lines[0]);
    }
    function pointLine(points, rate) {
      var pointA, pointB, pointDistance, xDistance, yDistance, tan, radian, tmpPointDistance;
      var ret = [];
      pointA = points[0];//点击
      pointB = points[1];//中间
      xDistance = pointB.x - pointA.x;
      yDistance = pointB.y - pointA.y;
      pointDistance = Math.pow(Math.pow(xDistance, 2) + Math.pow(yDistance, 2), 1 / 2);
      tan = yDistance / xDistance;
      radian = Math.atan(tan);
      tmpPointDistance = pointDistance * rate;
      ret = {
        x: pointA.x + tmpPointDistance * Math.cos(radian),
        y: pointA.y + tmpPointDistance * Math.sin(radian)
      };
      return ret;
    }
    return {
      'bezier_points': ret
    };
  },

  /**
   * 全局变量数据
   */
  globalData: {
    userInfo: null,   // userInfo微信的
    token:null,      //登录后的token值 
    systemInfo:null, //用户当前手机信息
    area:null,         //本程序支持的所有区域的信息详情
    windowHeight:900
  },

  /**
   * 当前选择的城市信息
   */
  citySelect:{
    provriceId:110000, //省
    cityId:110100,    //市
    districtId:110101  //区
  },
  /**
   * 今天第一次打开项目吗?(第一次打开项目)
   */
  oneDayOneLogin:true,
  /**
   *当前选择的店铺ID 
   */
  currentShopId:null,
  near :{
    "id": -1,
    "name": "附近",
    "fullname": "附近",
    "py": "",
    "spy": "",
    "lat": "25.04347",
    "lng": "102.70737",
    "parent": '',
    "base":'',
    "municipality": "2"
  },

  /**
   * 桌号信息
   */
  number:{
    cid:'', //店铺id
    number:''//桌号
  },
  appid:'wxa9b73f826b3fb0c4'
  // issigned:true//首页判断是否已签到
})

================================================
FILE: client/app.json
================================================
{
  "pages": [
    "pages/az/az",
    "pages/index/index",
    "pages/mycenter/mycenter",
    "pages/indent/indent",
    "pages/order/order",
    "pages/appointment/appointment",
    "pages/shop/shop",
    "pages/shop_list/shop_list",
    "pages/topay/topay",
    "pages/pay_input/pay_input",
    "pages/pay_success/pay_success",
    "pages/points/points",
    "pages/coupon/coupon",
    "pages/pocket/pocket",
    "pages/reviewlist/reviewlist",
    "pages/reviewfdetails/reviewfdetails",
    "pages/review/review",
    "pages/component/key_component/component",
    "pages/switchcity/switchcity",
    "pages/mytalk/mytalk",
    "pages/droppassword/droppassword"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "小橘点餐",
    "navigationBarTextStyle": "black"
  },
  "tabBar": {
    "backgroundColor": "#fff",
    "color": "#888888",
    "selectedColor": "#ff6b12",
    "borderStyle": "#b7b7b7",
    "list": [
      {
        "selectedIconPath": "pages/images/6shop_65.png",
        "iconPath": "pages/images/6shop_61.png",
        "pagePath": "pages/index/index",
        "text": "首页"
      },
      {
        "selectedIconPath": "pages/images/order_15.png",
        "iconPath": "pages/images/order_14.png",
        "pagePath": "pages/indent/indent",
        "text": "订单"
      },
      {
        "selectedIconPath": "pages/images/my_04.png",
        "iconPath": "pages/images/my_03.png",
        "pagePath": "pages/mycenter/mycenter",
        "text": "我的"
      }
    ]
  }
}

================================================
FILE: client/app.wxss
================================================
/**app.wxss**/
@import 'style/weui.wxss';
.container {
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  box-sizing: border-box;
} 


================================================
FILE: client/pages/appointment/appointment.js
================================================
// pages/appointment/appointment.js

var app = getApp();

import { Http } from '../../utils/httpClient';
var httpClient = new Http();

import { timestampToTime } from '../../utils/util.js';

const date = new Date();
const nowYear = date.getFullYear();
const nowMonth = date.getMonth() + 1;
const nowDay = date.getDate();
const nowHour = date.getHours();
const nowMinute = date.getMinutes();

var date2 = new Date(date);
date2.setDate(date.getDate() + 30);
var endDate = date2.getTime();
console.log('end', endDate);

var a = timestampToTime(date.getTime() + 1000 * 60 * 30).split(' ')
console.log('time', a);
console.log('endTime', timestampToTime(endDate).split(' '));

//let daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
// 根据年月 获取当月的总天数
// let getDays = function (year, month) {
//     if (month === 2) {
//         return ((year % 4 === 0) && ((year % 100) !== 0)) || (year % 400 === 0) ? 29 : 28
//     } else {
//         return daysInMonth[month - 1]
//     }
// }
// 根据年月日设置当前月有多少天 并更新年月日数组
// let setDate = function (month, day, hour, minute, _th) {
//     // let daysNum = nowYear === nowYear && month === nowMonth ? nowDay : getDays(nowYear, month)
//     let daysNum = getDays(nowYear, month);
//     day = day > daysNum ? 1 : day
//     //let monthsNum = nowYear === nowYear ? nowMonth : 12
//     let monthsNum = 12;
//     let hourNum = 24
//     let minuteNum = 60
//     // let years = []
//     let months = []
//     let days = []
//     let hours = []
//     let minutes = []
//     // let yearIdx = 9999
//     let monthIdx = 0
//     let dayIdx = 0
//     let hourIdx = 0
//     let minuteIdx = 0

//     // 重新设置年份列表
//     // for (let i = nowYear; i <= nowYear + 20; i++) {
//     //     years.push(i)
//     // }
//     // years.map((v, idx) => {
//     //     if (v === year) {
//     //         yearIdx = idx
//     //     }
//     // })
//     // 重新设置月份列表
//     for (let i = nowMonth; i <= monthsNum; i++) {
//         months.push(i)
//     }
//     months.map((v, idx) => {
//         if (v === month) {
//             monthIdx = idx
//         }
//     })
//     // 重新设置日期列表
//     for (let i = nowDay; i <= daysNum; i++) {
//         days.push(i)
//     }
//     days.map((v, idx) => {
//         if (v === day) {
//             dayIdx = idx
//         }
//     })

//     //重新设置小时列表
//     for (let i = nowHour; i <= hourNum; i++) {
//         hours.push(i)
//     }
//     hours.map((v, idx) => {
//         if (v === hour) {
//             hourIdx = idx
//         }
//     })

//     //重新设置分钟列表
//     for (let i = nowMinute; i <= minuteNum; i++) {
//         minutes.push(i)
//     }
//     minutes.map((v, idx) => {
//         if (v === minute) {
//             minuteIdx = idx
//         }
//     })

//     _th.setData({
//         //years: years,//年份列表
//         months: months,//月份列表
//         days: days,//日期列表
//         hours: hours,
//         minutes: minutes,
//         value: [monthIdx, dayIdx, hourIdx, minuteIdx],
//         // year: year,
//         month: month,
//         day: day,
//         hour: hour,
//         minute: minute
//     })
// }


Page({
    /**
     * 组件的初始数据
     */
    data: {
        /***********时间选择器需要变量*********/
        /**
         * 时间选择器需要变量
         */
        // years: [],
        // year: date.getFullYear(),
        // canOrder: '',//可以跳转吗
        // isloop: '',//循环过吗
        // months: [],
        // month: nowMonth,
        // days: [],
        // day: nowDay,
        // hours: [],
        // hour: nowHour,
        // minutes: [],
        // minute: nowMinute,
        // value: [nowMonth, nowDay, nowHour, nowMinute],
        // dateSelectHidden: false,
        // showbak: false,

        /**
         * 旧的日期
         */
        // oldDate: {
        //     // year: nowYear,
        //     month: nowMonth,
        //     day: nowDay,
        //     hour: nowHour,
        //     minute: nowMinute
        // },


        nowYear: date.getFullYear(),
        nowMonth: date.getMonth() + 1,
        nowDay: date.getDate(),
        nowHour: date.getHours(),
        nowMinute: date.getMinutes(),

        //当前时间向后推迟半个小时的算法
        date: timestampToTime(date.getTime() + 1000 * 60 * 30).split(' ')[0],
        time: timestampToTime(date.getTime() + 1000 * 60 * 30).split(' ')[1],

        endDate: timestampToTime(endDate).split(' ')[0],
        endTime: timestampToTime(endDate).split(' ')[1],
        /**
         * 用餐时间
         */
        mealTime: '',
        /**
         * 用餐人数
         */
        mealNumber: '',

        /**
         * 用餐人姓名
         */
        mealSurname: '',
        /**
         * 性别选择
         */
        mealSex: '',

        /**
         * 电话号码
         */
        mealIphone: '',        /**
         * 备注
         */
        mealDesc: '',




    },

    /**
     * 更新时间
     * 总是获取最新的时间,总是推迟到30天后的时间
     */
    upDateDate() {
        const date = new Date();
        const nowYear = date.getFullYear();
        const nowMonth = date.getMonth() + 1;
        const nowDay = date.getDate();
        const nowHour = date.getHours();
        const nowMinute = date.getMinutes();

        var date2 = new Date(date);
        date2.setDate(date.getDate() + 30);
        var endDate = date2.getTime();
        this.setData({
            date:timestampToTime(date.getTime() + 1000 * 60 * 30).split(' ')[0],
            time: timestampToTime(date.getTime() + 1000 * 60 * 30).split(' ')[1],
            endTime:timestampToTime(endDate).split(' ')[1],
            endDate:timestampToTime(endDate).split(' ')[0]
        })
   
    },

    toOrder() {
        wx.navigateTo({
            url: "../order/order"
        })
    },
    /**
     * 时间日期改变回调
     */
    bindChange: function (e) {
        var self = this;
        const val = e.detail.value
        //setDate(this.data.months[val[0]], this.data.days[val[1]], this.data.hours[val[2]], this.data.minutes[val[3]], this)
    },
    onLoad: function () {
        //setDate(this.data.month, this.data.day, this.data.hour, this.data.minute, this)
        this.upDateDate();
    },
    /**
     * 日期选择器显示
     * @param e
     */
    // showMaskDateSelect: function (e) {

    //     this.setData({
    //         dateSelectHidden: true,
    //         showbak: true
    //     })
    //     for (var i in this.data.oldDate) {
    //         this.data.oldDate[i] = this.data[i];
    //     }
    // },
    /**
     * 日期选择器取消按钮
     * @param e
     */
    // cancleMaskDateSelect: function (e) {
    //     this.setData({
    //         dateSelectHidden: false,
    //         showbak: false
    //     })
    //     for (let i in this.data.oldDate) {
    //         this.data[i] = this.data.oldDate[i];
    //     }
    // },
    /**
     * 日期选择器确定按钮
     */
    // enterMaskDateSelect: function (e) {
    //     var time = nowYear + '-' + this.data.month + '-' + this.data.day + ' ' + this.data.hour + ':' + this.data.minute + ':00';
    //     console.log('选择当前预定时间', time)
    //     //var tTime = new Date(time).getTime() / 1000;
    //     this.setData({
    //         dateSelectHidden: false,
    //         mealTime: time,
    //         showbak: false
    //     })
    // },

    bindDateChange(e){
        console.log(e);
        this.setData({
            date:e.detail.value
        })
    },  

    bindTimeChange(e){
        console.log(e);
        this.setData({
            date:e.detail.value
        })
    },

    /**
     * 用餐人数改变选择回调
     */
    mealNumberChange(e) {
        var value = e.detail.value;
        this.data.mealNumber = value;
    },
    /**
     * 键盘输入时候改变
     */
    bindinputnumber(e) {
        this.data.mealNumber = e.detail.value;
        console.log('用餐人数改变: ', e.detail.value);
    },

    /**
     * 用餐人姓名改变回调
     * @param {} e 
     */
    mealSurnameChange(e) {
        var value = e.detail.value;
        this.data.mealSurname = value;
        console.log('姓名改变', value);
    },
    /**
     * 性别选择
     */
    radioChange(e) {
        this.data.mealSex = e.detail.value;
        console.log('性别改变回调', e.detail.value);
    },

    /**
     * 电话号码改变
     * @param {} e d
     */
    mealIphoneChange(e) {
        this.data.mealIphone = e.detail.value;
        console.log('电话号码改变', e.detail.value);
    },
    //手机号码验证
    pattern(e) {
        var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1})|(17[0-9]{1}))+\d{8})$/;
        if (e.detail.value.length == 0) {
            wx.showToast({
                title: '输入的手机号为空',
                icon: 'success',
                duration: 1500
            })
            return false;
        } else if (e.detail.value.length < 11) {
            wx.showToast({
                title: '手机号长度有误!',
                icon: 'success',
                duration: 1500
            })
            return false;
        } else if (!myreg.test(e.detail.value)) {
            wx.showToast({
                title: '手机号有误!',
                icon: 'success',
                duration: 1500
            })
            return false;
        }
        // else {
        //     wx.showToast({
        //         title: '填写正确',
        //         icon: 'success',
        //         duration: 1500
        //     })
        // }
        this.data.mealIphone = e.detail.value;
        console.log('电话号码改变', e.detail.value);
    },
    /**
     * 备注
     * @param {*} e 
     */
    mealDescChange(e) {
        this.data.mealDesc = e.detail.value;
        console.log('备注改变回调', e.detail.value);
    },



    /**
     * 预定桌位
     */
    setTable(e) {
        
        // var contacts = {
        //     number: this.data.mealNumber,
        //     uname: this.data.mealSurname,
        //     addtime: this.data.mealTime,
        //     sex: this.data.mealSex,
        //     iphone: this.data.mealIphone,
        //     desc: this.data.mealDesc
        // }
        // console.log(obj)
        // var obj=contacts;
        // delete(obj.desc);

        // for (var key in contacts) {
        //     if (!contacts[key] && key != "desc") {
        //         wx.showToast({
        //             title: '输入不能有空'
        //         })
        //         this.setData({
        //             canOrder: false
        //         })
        //         break;
        //     } else if (key == "desc") {
        //         continue;
        //     }
        //     this.setData({
        //         isloop: true,
        //         canOrder: true
        //     })
        // }
        // console.log(this.data.canOrder, this.data.isloop, contacts);
        // console.log(contacts);
        // var argu = {
        //     lid: app.currentShopId,
        //     token: app.globalData.token,
        //     contacts: JSON.stringify(contacts)
        // }    
        var argu =  {
            token: app.globalData.token,		
            lid	: this.data.shopId,
            time: this.data.date + ' ' + this.data.time,
            name: this.data.mealSurname,
            number: this.data.mealNumber,
            tel:this.date.mealIphone,
            remark:this.data.mealDesc
        }
        var type = 'onlyTable';

        if (this.data.canOrder != false && this.data.isloop) {
            httpClient.postV2AppointmentFound(argu).then((res) => {
                console.log('预定下单', res);
                if (res.code == 200) {
                    wx.navigateTo({
                        url: '../pay_success/pay_success?type=' + type
                    })
                }
                wx.showToast({
                    title: res.meg
                })
            }).catch((e) => {
                wx.showToast({
                    title: '订桌失败'
                });
            })
        }

    },

    /**
     * 预定点餐
     */
    appointmentOrderFood(e) {
        //预约 点餐 字段名
        var contacts = {
            number: this.data.mealNumber,
            uname: this.data.mealSurname,
            addtime: this.data.mealTime,
            sex: this.data.mealSex,
            iphone: this.data.mealIphone,
            desc: this.data.mealDesc
        }
        for (var key in contacts) {
            if (!contacts[key] && key != "desc") {
                wx.showToast({
                    title: '输入不能有空'
                })
                // if(key=="iphone"){             
                // }
                this.setData({
                    canOrder: false
                })
                break;
            }
            this.setData({
                isloop: true,
                canOrder: true
            })
        }
        console.log(this.data.canOrder, this.data.isloop, contacts);
        console.log('contacts', contacts);
        var type = 'appointment';
        if (this.data.canOrder != false && this.data.isloop) {
            wx.navigateTo({
                url: '../order/order?type=' + type + '&contacts=' + JSON.stringify(contacts)
            })
        }
    }





})


================================================
FILE: client/pages/appointment/appointment.json
================================================
{
    "navigationBarTitleText": "预约",
    "component": true,
    "disableScroll": true,
    "usingComponents": {}
}

================================================
FILE: client/pages/appointment/appointment.wxml
================================================
<!-- pages/appointment/appointment.wxml -->
<!-- 时间选择器 -->
<!-- <view class="mask" hidden="{{!dateSelectHidden}}">
    <view class="date-select">
        <view class="title">
            <view class="cancel" bindtap="cancleMaskDateSelect">取消</view>
            <view>{{month}}月{{day}}日{{hour}}时{{minute}}分</view>
            <view class="enter" bindtap="enterMaskDateSelect">确认</view>
        </view>
        <picker-view indicator-style="height: 50px;" style="width: 100%; height: 300px;" value="{{value}}" bindchange="bindChange">
             <picker-view-column>
                <view wx:for="{{years}}" style="line-height: 50px">{{item}}年</view>
            </picker-view-column> 
            <picker-view-column>
                <view wx:for="{{months}}" style="line-height: 50px">{{item}}月</view>
            </picker-view-column>
            <picker-view-column>
                <view wx:for="{{days}}" style="line-height: 50px">{{item}}日</view>
            </picker-view-column>
            <picker-view-column>
                <view wx:for="{{hours}}" style="line-height: 50px">{{item}}时</view>
            </picker-view-column>
            <picker-view-column>
                <view wx:for="{{minutes}}" style="line-height: 50px">{{item}}分</view>
            </picker-view-column>
        </picker-view>
    </view>
</view> -->
<view class="container">
    <view class="appoint_center">
        <view class="dinner">
           
            <view class="min_part" bindtap="showMaskDateSelect">
                <text>用餐日期</text>
                <picker mode="date" value="{{date}}" start="{{date}}" end="{{endDate}}" bindchange="bindDateChange">
                    <view class="picker"> {{date}}</view>
                </picker>
                <image src="../images/down_06.jpg"></image>
            </view>
            <view class="min_part" bindtap="showMaskDateSelect">
                <text>用餐时间</text>
                <picker mode="time" value="{{time}}" start="{{time}}" end="{{endTime}}" bindchange="bindTimeChange">
                    <view class="picker">{{time}}</view>
                </picker>
                <image src="../images/down_06.jpg"></image>
            </view>
        </view>
        <view class="dinner customer_info">
            <view class="min_part">
                <text>联系人</text>
                <input maxlength="10" placeholder="请输入姓名" type="text" adjust-position="true" bindconfirm="mealSurnameChange" bindinput="mealSurnameChange" />
            </view>
             <view class="min_part">
                <text>就餐人数</text>
                <input maxlength="10" type="number" placeholder="请输入用餐人数" adjust-position="true" bindinput="bindinputnumber" />
            </view>
            <view class="min_part">
                <text>联系电话</text>
                <input maxlength="11" type="number" type='number' bindinput="mealIphoneChange" bindconfirm="mealIphoneChange" bindblur='pattern' />
            </view>
            <view class="min_part">
               <text>备注</text>
                <textarea placeholder="请输入备注" style="{{showbak ? 'display:none' : ''}};" placeholder-style="color:#999;" bindconfirm="mealDescChange" bindinput="mealDescChange" />
            </view>
        </view>
        <view class="appoint_btn">
            <button class="order_only" bindtap="setTable">只订桌</button>
            <button class="order_advance" bindtap='appointmentOrderFood'>提前点餐</button>
        </view>
    </view>
</view>

================================================
FILE: client/pages/appointment/appointment.wxss
================================================
.container {
  width: 100%;
  padding: 2%;
  padding-bottom: 0;
  background: #f5f5f9;
}
.appoint_center {
  width: 100%;
  padding: 30rpx 2%;
  background: #fff;
}
.appoint_center .dinner {
  width: 100%;
  border-bottom: 1rpx dashed #ddd;
  padding: 20rpx 0 0;
}
.appoint_center .dinner .min_part {
  border: 1rpx solid #ddd;
  height: 80rpx;
  padding: 0 20rpx;
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-radius: 5rpx;
  margin-bottom: 30rpx;
}
.appoint_center .dinner .min_part text {
  color: #888;
  font-size: 30rpx;
}
.appoint_center .dinner .min_part input {
  width: 500rpx;
  font-size: 30rpx;
}
.appoint_center .dinner .min_part image {
  width: 18rpx;
  height: 10rpx;
}
.appoint_center .dinner .min_part:last-of-type {
  margin-top: 20rpx;
}
.appoint_center .customer_info {
  border: none;
  padding-top: 30rpx;
}
.appoint_center .customer_info .min_part:last-of-type {
  height: auto;
  flex-direction: column;
  align-items: flex-start;
}
.appoint_center .customer_info .min_part:last-of-type textarea {
  height: 230rpx;
  color: #333;
  font-size: 30rpx;
  padding: 20rpx 0;
}
.appoint_center .customer_info .sex {
  display: flex;
  justify-content: space-between;
  font-size: 30rpx;
  border: none;
  margin-bottom: 10rpx;
  margin-top: -20rpx;
}
.appoint_center .customer_info .sex text {
  color: #333;
}
.appoint_center .customer_info .sex .radio-group {
  width: 500rpx;
  margin: 20rpx 0;
  color: #333;
}
.appoint_center .customer_info .sex .radio-group label {
  margin-right: 100rpx;
}
.appoint_center .appoint_btn {
  width: 100%;
  display: flex;
  position: absolute;
  bottom: 37rpx;
  left: 0;
}
.appoint_center .appoint_btn button {
  width: 336rpx;
  height: 80rpx;
  border: none;
  color: #fff;
  line-height: 80rpx;
  font-size: 30rpx;
  box-sizing: border-box;
}
.appoint_center .appoint_btn .order_only {
  background: #47cacc;
}
.appoint_center .appoint_btn .order_advance {
  background: #ff6b12;
}
.mask {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 999;
  background: rgba(0, 0, 0, 0.5);
}
.mask .date-select {
  position: absolute;
  bottom: 0rpx;
  background: #fff;
  width: 100%;
}
.mask .date-select .title {
  width: 100%;
  display: flex;
  justify-content: space-between;
}


================================================
FILE: client/pages/az/az.js
================================================
//js

var app = getApp();
Page({
  data: {
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    show:true
  },
  onLoad: function () {
    var _this = this;
    // 查看是否授权
    wx.getSetting({
      success: function (res) {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权直接进行登录
          _this.bindGetUserInfo();
        }else{ //没有进行授权那么显示让用户进行点击授权
          _this.setData({
            show:false
          })
        }
      }
    })
  },
  bindGetUserInfo: function (event) {
    //使用
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
          wx.login({
            success: function (res) {
              var code = res.code;//登录凭证
              if (code) {
                //2、调用获取用户信息接口
                wx.getUserInfo({
                  success: function (res) {
                    console.log('userInfo:  ',res);
                    app.globalData.userInfo = res.userInfo;
                    console.log('app:  ',app);
                    console.log({ encryptedData: res.encryptedData, iv: res.iv, code: code })
                    //3.请求自己的服务器,解密用户信息 获取unionId等加密信息
                    wx.request({
                      url: 'https://www.yblcloud.com/login',//自己的服务接口地址
                      method: 'get',
                      header: {
                        'content-type': 'application/x-www-form-urlencoded'
                      },
                      data: { encryptedData: res.encryptedData, iv: res.iv, code: code },
                      success: function (data) {
                        console.log('token',data,data.data,data.data.data.token);
                        if(data && data.data && data.data.data&&  data.data.data.token){
                          app.globalData.token = data.data.data.token;
                        }
                        //4.解密成功后 获取自己服务器返回的结果
                        if (data.statusCode == 200) {
                          wx.switchTab({
                            url: '../index/index'
                          })
                        } else {
                          console.log('解密失败')
                        }

                      },
                      fail: function () {
                        console.log('系统错误')
                      }
                    })
                  },
                  fail: function () {
                    console.log('获取用户信息失败')
                  }
                })

              } else {
                console.log('获取用户登录态失败!' + r.errMsg)
              }
            },
            fail: function () {
              console.log('登陆失败')
            }
          })

        } else {
          console.log('获取用户信息失败')

        }

      }
    })

  }
})


================================================
FILE: client/pages/az/az.json
================================================
{}

================================================
FILE: client/pages/az/az.wxml
================================================
<!--wxml-->
<!-- 如果只是展示用户头像昵称,可以使用 <open-data /> 组件 -->
<view hidden="{{show}}" style="width:200rpx;height:200rpx;margin:100rpx auto;">
  <open-data type="userAvatarUrl" ></open-data>
  <open-data type="userNickName" style="font-size:30rpx;"></open-data>
  <!-- 需要使用 button 来授权登录 -->
  <button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo" style="font-size:30rpx;">授权登录</button>
  <view wx:else>请升级微信版本</view>
</view>




================================================
FILE: client/pages/az/az.wxss
================================================
/* pages/az/az.wxss */


================================================
FILE: client/pages/component/all_food.wxml
================================================
<!-- 全部美食界面 -->
<template name="all_foodst">
  <view class='all-food-con'>
      <view class="all-food-con-child {{allFoodTab==index?'active':''}}"
            wx:for="{{nav_indexData}}" wx:key="*this" 
            data-type="{{index}}" 
            bindtap="clickAllFoodSelect"
            >{{item.title}} </view>
  </view>
</template>

================================================
FILE: client/pages/component/coupon.wxml
================================================
<!--
    优惠券弹窗内容
    数据: couponData[{
            reduce:'',
            from:'',
            date:'',
            shopName:'',
            Id:'',
            shopId:''
    }]
-->

<template name="coupon-st">
    <view class="cou">
        <view class="cou-container" wx:for="{{couponData}}" wx:for-item="item1"  data-cid="{{item1.id}}"  data-shopid="{{item1.lid}}" >
            <view class="left">
                <text class="icon">¥</text>
                <text class="mon">{{item1.price}}</text>
            </view>
            <view class='right-container'>
                <view class="center">
                    <view class="c-top">
                        <text class="c-t-fixed">满</text>
                        <text class="c-t-vary">{{item1.full_price}}</text>
                        <text class="c-t-fixed">即可使用</text>
                    </view>

                    <view class="c-bottom">
                        <text class="c-b-fiexed">有效期:</text>
                        <text class="c-b-vary">{{item1.end_time}}</text>
                    </view>
                </view>
                <view class="right">
                    <view class="r-con">
                        <view class="text">{{item1.title}}<text></text></view>
                        <view class="use-btn" bindtap="selectOneCoupon" data-cid="{{item1.id}}">点击使用</view>
                    </view>
                </view>
            </view>

        </view>
    </view>
</template>


================================================
FILE: client/pages/component/date-select/date-select.js
================================================
// pages/component/date-select/date-select.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {

  },

  /**
   * 组件的初始数据
   */
  data: {

  },

  /**
   * 组件的方法列表
   */
  methods: {

  }
})


================================================
FILE: client/pages/component/date-select/date-select.json
================================================
{
  "component": true,
  "usingComponents": {}
}

================================================
FILE: client/pages/component/date-select/date-select.wxml
================================================
<!--pages/component/date-select/date-select.wxml-->
<text>pages/component/date-select/date-select.wxml</text>


================================================
FILE: client/pages/component/date-select/date-select.wxss
================================================
/* pages/component/date-select/date-select.wxss */

================================================
FILE: client/pages/component/index_list.wxml
================================================
<!-- 上部分导航条 content[nearbyTab].text -->
<template name="idnex_viewst">
  <view class="select_container">
    <view class="selec_center">
      <view>
        <view bindtap='enterMarkAllFood'>{{nav_indexData[allFoodTab].title}}
          <span></span>
        </view>
        <view wx:if="{{nearbyTab == -1}}" bindtap='enterMarkNearby'>{{nearbyLeftTab==-1?'附近':cityData.children[nearbyLeftTab].fullname}}
          <span></span>
        </view>
        <view data-d="{{nearbyTab}}" wx:if="{{nearbyTab != -1}}" bindtap='enterMarkNearby'>{{nearbyTab}}
          <span></span>
        </view>
        <view bindtap='enterMarkSoftList'>{{soft_list[softListTab].text}}
          <span></span>
        </view>
      </view>
      <view class="selec_content"> 
      </view>
    </view>
  </view>
</template>

================================================
FILE: client/pages/component/key_component/component.js
================================================
// component.js
Component({

  // 组件属性
  properties: {

    //输入框密码位数
    value_length: {
      type: Number,
      value: 0,
      // 监听输入框密码变化
      observer: function (newVal, oldVal) {
        let that = this;
        let input_value = that.data.input_value
        that.triggerEvent('valueNow', input_value)
        // 当输入框的值等于6时(发起支付等...)
        if (newVal == 6) {
          // 设定延时事件处理
          setTimeout(function () {
            // 引用组件页面的自定义函数(前一个参数为函数,后一个为传递给父页面的值)
            that.triggerEvent('valueSix', input_value)
            // 当没有
            if (!that.data.isNext){
              // 回到初始样式
              that.setData({
                get_focus: false,
                value_length: 0,
                input_value: ""
              });
            }
            
          }, 100)
 
        }
      }
    },

    // 是否显示间隔输入框
    interval: {
      type: Boolean,
      value: true,
      observer: function (newVal, oldVal) {

      }
    },

    // 是否有下一步按钮(如果有则当输入6位数字时不自动清空内容)
    isNext:{
      type: Boolean,
      value: false,
      observer: function (newVal, oldVal) {

      }
    },

    //输入框聚焦状态
    get_focus: {
      type: Boolean,
      value: false,
      observer: function (newVal, oldVal) {

      }
    },
    //输入框初始内容
    input_value: {
      type: String,
      value: "",
      observer: function (newVal, oldVal) {

      }
    },
    //输入框聚焦样式 
    focus_class: {
      type: Boolean,
      value: false,
      observer: function (newVal, oldVal) {

      }
    },
    //输入框格子数
    value_num: {
      type: Array,
      value: [1, 2, 3, 4, 5, 6],
      observer: function (newVal, oldVal) {

      }
    },
    //输入框高度
    height: {
      type: String,
      value: "98rpx",
      observer: function (newVal, oldVal) {

      }
    },
    //输入框宽度
    width: {
      type: String,
      value: "604rpx",
      observer: function (newVal, oldVal) {

      }
    },
    //是否明文展示
    see: {
      type: Boolean,
      value: false,
      observer: function (newVal, oldVal) {

      }
    },
  },

  // 初始化数据
  data: {
    
  },

  // 组件方法
  methods: {

    // 获得焦点时
    get_focus() {
      let that = this;
      that.setData({
        focus_class: true
      })
    },

    // 失去焦点时
    blur() {
      let that = this;
      that.setData({
        focus_class: false
      })
    },

    // 点击聚焦
    set_focus() {
      let that = this;
      that.setData({
        get_focus: true
      })
    },

    // 获取输入框的值
    get_value(data) {
      let that = this;
      // 设置空数组用于明文展现
      let val_arr = [];
      // 获取当前输入框的值
      let now_val = data.detail.value
      // 遍历把每个数字加入数组
      for (let i = 0; i < 6; i++) {
        val_arr.push(now_val.substr(i, 1))
      }
      // 获取输入框值的长度
      let value_length = data.detail.value.length;
      // 更新数据
      that.setData({
        value_length: value_length,
        val_arr: val_arr,
        input_value: now_val
      });

    },
  }
})


================================================
FILE: client/pages/component/key_component/component.json
================================================
{
  "component": true,
  "usingComponents": {}
}

================================================
FILE: client/pages/component/key_component/component.wxml
================================================
<view class='content'>
    <!-- 输入框(表格) -->
    <view class='{{(interval?"pay_number":"pay_number_interval")}}  {{focus_class?"get_focus":""}}' catchtap="set_focus" style='width:{{width}};height:{{height}};'>
      <view class='{{focus_class?(interval?"get_focus_dot":"get_focus_dot_interval"):(interval?"password_dot":"password_dot_interval")}} {{index==0?"noBorder":""}}' wx:for="{{value_num}}" wx:key="{{index}}">
        <view wx:if="{{(value_length==item-1)&&focus_class}}" class="cursor"></view>
        <view wx:if="{{value_length>=item}}" class="{{see?'':'dot'}}">{{see?val_arr[index]:""}}</view>
      </view>
    </view>

    <!-- 输入框(隐藏) -->
    <input value="{{input_value}}" focus="{{get_focus}}" maxlength="6" type="number" class='input_container' placeholder="" bindinput="get_value" bindfocus="get_focus" bindblur="blur" />
  </view>

================================================
FILE: client/pages/component/key_component/component.wxss
================================================
/* 支付密码框 */

.pay_number {
  margin: 0 auto;
  display: flex;
  flex-direction: row;
  border: 1px solid #cfd4d3;
  /* border-radius:10rpx; */
}

.pay_number_interval {
  margin: 0 auto;
  display: flex;
  flex-direction: row;
  border-left: 1px solid #cfd4d3;
  /* border:none; */
}

/* 第一个格子输入框 */
.content .noBorder{
   border-left:none; 
}


/* 支付密码框聚焦的时候 */

.get_focus {
  border-color: orange;
}

/* 单个格式样式 */

.password_dot {
  flex: 1;
  border-left: 1px solid #cfd4d3;
  display: flex;
  align-items: center;
  justify-content: center;
}

.password_dot_interval {
  flex: 1;
  border: 1px solid #cfd4d3;
  margin-right: 5px;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* 单个格式样式(聚焦的时候) */

.get_focus_dot {
  flex: 1;
  border-left: 1px solid orange;
  display: flex;
  align-items: center;
  justify-content: center;
}

.get_focus_dot_interval {
  flex: 1;
  border: 1px solid orange;
  margin-right: 5px;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* 模拟光标 */

.cursor {
  width: 1px;
  height: 15px;
  background-color: orange;
  animation: focus 0.7s infinite;
}

/* 光标动画 */

@keyframes focus {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

/* 格式中的点 */

.dot {
  width: 10px;
  height: 10px;
  background-color: #000;
  border-radius: 50%;
}

/* 输入框 */

.input_container {
  height: 0;
  width: 0;
  min-height: 0;
  position: relative;
  text-indent: -999em;
  left: -100%;
}


================================================
FILE: client/pages/component/multiple-rate/multiple-rate.js
================================================
/*
 * Author: simsir-lin
 * Github: https://github.com/simsir-lin
 * Email: 15986907592@163.com
 */
 
Component({
  behaviors: [],
  properties: {
    rate: {
      type: String,
      value: '0'
    },
    icon: {
      type: String,
      value: 'star'
    },
    disabled: {
      type: String,
      value: false
    }
  },
  data: {
    starArr: []
  },

  attached: function () {
    this.getStarArr()
  },
  moved: function () {
  },
  detached: function () {
  },

  methods: {
    getStarArr: function () {
      let starArr = [];
      for (var i = 0; i < this.data.rate; i++) {
        starArr.push(this.data.icon);
      }
      for (let j = 0; j < 5 - this.data.rate; j++) {
        starArr.push(this.data.icon + '-o');
      }
      this.setData({
        starArr: starArr
      })
    },
    handleTap: function (e) {
      if (this.data.disabled) {
        return;
      }
      this.setData({
        rate: Number(e.currentTarget.dataset.index) + 1
      })
      this.triggerEvent('change', { value: Number(e.currentTarget.dataset.index) + 1 });
      this.getStarArr()
    }
  }
})


================================================
FILE: client/pages/component/multiple-rate/multiple-rate.json
================================================
{
  "component": true
}

================================================
FILE: client/pages/component/multiple-rate/multiple-rate.wxml
================================================
<!--
 * Author: simsir-lin
 * Github: https://github.com/simsir-lin
 * Email: 15986907592@163.com
-->

<view class="multiple-rate">
  <view>
    <view wx:for="{{starArr}}" wx:key="index" bindtap="handleTap" data-index="{{index}}" class="{{item}}"></view>
    <slot></slot>
  </view>
</view>


================================================
FILE: client/pages/component/multiple-rate/multiple-rate.wxss
================================================
/*
 * Author: simsir-lin
 * Github: https://github.com/simsir-lin
 * Email: 15986907592@163.com
 */

.multiple-rate .star, .multiple-rate .star-o {
  width: 0;
  height: 0;
  color: red;
  position: relative;
  display: inline-block;
  vertical-align: middle;
  border-left: 12px solid transparent;
  border-right: 12px solid transparent;
  border-bottom: 10px solid rgb(247, 186, 42);
  transform: rotate(180deg);
  margin: 0 5px;
}

.multiple-rate .star::after, .multiple-rate .star::before,
.multiple-rate .star-o::after, .multiple-rate .star-o::before {
  content: '';
  width: 0;
  height: 0;
  color: red;
  position: absolute;
  display: inline-block;
  border-left: 12px solid transparent;
  border-right: 12px solid transparent;
  border-bottom: 10px solid rgb(247, 186, 42);
  top: -0px;
  left: -12px;
}

.multiple-rate .star::after, .multiple-rate .star-o::after {
  content: '';
  transform: rotate(-68deg);
}

.multiple-rate .star::before, .multiple-rate .star-o::before {
  content: '';
  transform: rotate(68deg);
}

.multiple-rate .star-o {
  border-bottom: 10px solid #ccc;
}

.multiple-rate .star-o::after, .multiple-rate .star-o::before {
  border-bottom: 10px solid #ccc;
}

.heart,.heart-o {
  position: relative;
  display: inline-block;
  vertical-align: middle;
  width: 12px;
  height: 12px;
  background-color: red;
  border-radius: 2px;
  transform: rotate(45deg);
  margin: 0 10px;
}

.heart:before,.heart:after,.heart-o:before,.heart-o:after {
  content: '';
  position: absolute;
  display: inline-block;
  vertical-align: middle;
  width: 12px;
  height: 12px;
  background-color: red;
  border-radius: 50%;
  top: 0px;
  left: -6px;
}

.heart:after, .heart-o:after {
  left: 0px;
  top: -6px;
}

.heart-o {
  background: #ccc;
}
.heart-o:before,.heart-o:after {
  background: #ccc;
}


================================================
FILE: client/pages/component/nearby.wxml
================================================
<!-- 附近弹窗内容页面 -->
<template name="nearbyst">
   <view class="nearby">
     <scroll-view scroll-y  style="height: {{windowHeight-200}}rpx;" class="left">
      <view class="l-con {{(nearbyLeftTab==-1)?'active':''}}"
       data-type="-1"
       bindtap="clickNearbyLeft"
      >附近</view>
      <view class="l-con {{(nearbyLeftTab==value.id)?'active':''}}" 
          wx:for="{{cityData.children}}" 
          wx:key="*this" 
          wx:for-index="key"  
          wx:for-item="value"
          data-type="{{value.id}}"
          bindtap="clickNearbyLeft"
       >{{value.fullname}}</view>

     </scroll-view>
     <view  wx:if="{{nearbyLeftTab == -1}}" class="right">
        <view class="r-con {{nearbyTab==item?'active':''}}" 
        wx:for="{{dis_list}}" 
        wx:key="*this"
        bindtap="clickNearbySelect" 
        data-type="{{item}}"
        >{{item}}M</view>
     </view>
   </view>
</template>

================================================
FILE: client/pages/component/pocket.js
================================================
// pages/component/pocket.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
  
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
  
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
  
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
  
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
  
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
  
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
  
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
  
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
  
  }
})

================================================
FILE: client/pages/component/pocket.json
================================================
{}

================================================
FILE: client/pages/component/pocket.wxml
================================================
<!--pages/component/pocket.wxml-->
<text>pages/component/pocket.wxml</text>


================================================
FILE: client/pages/component/pocket.wxss
================================================
/* pages/component/pocket.wxss */

================================================
FILE: client/pages/component/soft_list.wxml
================================================
<!-- 距离排序页面 -->

<template name="soft_listst">
  <view class='soft-list'>
    <view class='soft-list-con'>
      <view class="soft-list-con-child {{softListTab==index?'active':''}}"
            wx:for="{{soft_list}}" wx:key="" 
            data-type="{{index}}" 
            bindtap="clickSoftListSelect"
            >{{item.text}} </view>
    </view>
  </view>
</template>

 


================================================
FILE: client/pages/coupon/coupon.js
================================================
// pages/coupon/coupon.js

var app = getApp();
import {Http} from '../../utils/httpClient';
import {formatTime} from '../../utils/util';
Page({

    /**
     * 组件的初始数据
     */
    data: {
        /**
         * 渲染界面所用数据
         */
        couponView: {
            1:{
                src: "../images/youhui_03.png",
                text: "未使用",
                type: 1
            }, 
            2:{
                src: "../images/youhui_03.png",
                text: "已使用",
                type: 2
            },
            3:{
                src: "../images/youhui_03.png",
                text: "已过期",
                type: 3
            }},
        /**
         * 当前选择的tab
         * 0未使用 1已使用 2已过期
         */
        curTab: 1,
        cur:0,
       

        /**
         * 当前页码
         *
         */    
        page:1,
        /**
         * 实际渲染数据
         */
        couponData: {}
    },

    onLoad: function (options) {
        console.log("page ---onLoad---");
        this.initData(options);
    },
    initData: function(options){
        var _this = this;
        var httpClient = new Http();
        // var argu = {
        //     token:app.globalData.token,
        //     page:this.data.page,
        //     type:this.data.curTab

        // }
        // httpClient.getuserCouponList(argu).then((res)=>{
        //     if(res){
        //         console.log('我的优惠券信息',res);
        //         _this.updateCoupon(this.data.curTab,res)
        //     }
        // })
        this.getuserCoupon();
        console.log(_this.data.couponData);
    },
    onReady: function () {
        console.log("page ---onReady---");
    },
    onShow: function () {
        console.log("page ---onShow---");
    },
    onHide: function () {
        console.log("page ---onHide---");
    },
    onUnload: function () {
        console.log("page ---onUnload---");
    },

   /**
    *   更新优惠券信息
    * @param {number} tab  1 2 3
    * @param {object} data 
    * @param {number} state 0 1 add  
    */
    updateCoupon(tab,data){
        var res = this.data.couponData[tab];
        if(data.list){
            data.list.forEach((ele,i) => {
                data.list[i].end_time = formatTime(new Date(ele.end_time*1000));
                data.list[i].start_time = formatTime(new Date(ele.start_time*1000));
            });
        }
        if(!res){
            res = {};
            this.data.couponData[tab] = res;
        }
        if(res.list){
            res.list.push(res.list,data.list)
            res.count = data.count;
        }else{
            res.list = data.list;
            res.count = data.count;
        }
        this.setData({
            couponData:this.data.couponData
        })
    },  
    /**
     * 点击切换选项卡
     * @param e
     */
    changeTab(e) {
        this.setData({
            curTab: e.target.dataset.current
        })
    },
    /**
     * 滑动切换选项卡
     * @param e
     */
    swiperTab(e) {
        this.setData({
            curTab: e.detail.current+1
        });
    },

    /**
     * 获取优惠券信息
     */
    getuserCoupon(){
        var _this = this;
        var httpClient = new Http();
        for(let i=1; i<4; i++){
            var argu = {
                token:app.globalData.token,
                page:this.data.page,
                type:i
            }
            httpClient.getuserCouponList(argu).then((res)=>{
                console.log(i);
                if(res){
                    console.log('我的优惠券信息',res);
                    _this.updateCoupon(i,res);
                }
            }).catch((e)=>{
                console.log('null')
            })
        }
    },
    /**
     * 选择了某个优惠券
     * @param e
     */
    selectOneCoupon(e) {
        console.log('选择了某个优惠券:', e);
    },
    clickUseCoupon(e) {
        console.log('确认使用优惠券: ', e);
    },

    /**
     * 滑动到底部懒加载
     * @param {} e 
     */
    bindDownLoad(e) {
        var _this = this;
        var tab = this.data.curTab;
        var page = this.data.page;
        console.log('當前頁面',tab);
        var argu = {
            token:app.globalData.token,
            page:page++,
            type:tab
        }
        httpClient.getuserCouponList(argu).then((res)=>{
            if(res){
                console.log('我的优惠券信息',res);
                _this.updateCoupon(tab,res);
            }
        }).catch((e)=>{
            wx.showToast({
                title: '到底了',
                icon: 'loading',
                duration: 700
              })
        })
    }
    


   
})


================================================
FILE: client/pages/coupon/coupon.json
================================================
{
  "component": true,
  "navigationBarTitleText": "优惠券",
  "usingComponents": {}
}

================================================
FILE: client/pages/coupon/coupon.wxml
================================================
<!-- 优惠券界面 -->
<view class='container'>
  <view class="tab-bar">
    <view class="tab-bar-con {{curTab==item.type?'active':''}}" wx:for="{{couponView}}" wx:key="*this" data-current="{{item.type}}" bindtap="changeTab">
      {{item.text}}
    </view>
  </view>
  <swiper current="{{curTab-1}}" duration="300" bindchange="swiperTab" style="height:900rpx">
    <!-- 未使用 -->
    <swiper-item wx:for="{{couponView}}" wx:key="*this" wx:for-item="oneItem" wx:for-index="oneIndex">
      <scroll-view class="cou {{'cou'+ oneIndex}}" bindscrolltolower="bindDownLoad">
        <view class="cou-container {{'cou-container'+oneIndex}}" wx:if="{{couponData[oneIndex] && couponData[oneIndex]['list']}}" wx:for="{{couponData[oneIndex].list}}" wx:for-item="item1" data-cId="{{item1.id}}" data-shopId="{{item1.lid}}" bindtap="selectOneCoupon">
          <view class="left">
            <text class="icon">¥</text>
            <text class="mon">{{item1.price/100}}</text>
          </view>
          <view class='right-container'>
            <view class="center">
              <view class="c-top">
                <text class="c-t-fixed">满</text>
                <text class="c-t-vary">{{item1.full_price/100}}</text>
                <text class="c-t-fixed">即可使用</text>
              </view>
              <view class="c-bottom">
                <text class="c-b-fiexed">有效期:</text>
                <text class="c-b-vary">{{item1.end_time}}</text>
              </view>
            </view>
            <view class="right">
              <view class="r-con {{'r-con'+curTab}}" wx:if="{{curTab==1}}">
                <view class="text">
                  {{item1.title}}
                  <text>店</text>
                </view>
                <view class="use-btn">点击使用</view>
              </view>
              <view class="r-con {{'r-con'+curTab}}" wx:if="{{curTab==2}}">
                <image class="r-con-img {{'r-con-img'+curTab}}" src="http://wangcong.fun/images/ticket_03.png"></image>
              </view>
              <view class="r-con {{'r-con'+curTab}}" wx:if="{{curTab==3}}">
                <image class="r-con-img {{'r-con-img'+curTab}}" src="http://wangcong.fun/images/ticket_08.png"></image>
              </view>
            </view>
          </view>
        </view>
        <view wx:if="{{!(couponData[oneIndex] && couponData[oneIndex]['list'])}}" class="no-coupon ">
          <image src="../images/empty4.png"></image>
          <text>没有可用优惠券</text>
        </view>
      </scroll-view>
    </swiper-item>
  </swiper>
</view>

================================================
FILE: client/pages/coupon/coupon.wxss
================================================
swiper {
  width: 100%;
}
.container .tab-bar {
  display: flex;
  justify-content: space-between;
  flex-wrap: nowrap;
  height: 90rpx;
  width: 100%;
  background-color: #f2f2f2;
  padding: 0rpx 60rpx 0rpx 60rpx;
  box-sizing: border-box;
}
.container .tab-bar .tab-bar-con {
  font-size: 26rpx;
  color: #333;
  line-height: 90rpx;
}
.container .tab-bar .active {
  color: #ff6b12;
  border-bottom: 1rpx solid #ff6b12;
}
.container .cou {
  width: 100%;
  padding: 0rpx 25rpx 0rpx 25rpx;
  margin-top: 30rpx;
  position: relative;
}
.container .cou .cou-container {
  display: flex;
  justify-content: space-between;
  width: 700rpx;
  height: 260rpx;
}
.container .cou .cou-container .left {
  flex: 1;
}
.container .cou .cou-container .left .icon {
  color: #fffefe;
  font-size: 46rpx;
  letter-spacing: -40rpx;
}
.container .cou .cou-container .left .mon {
  color: #fffefe;
  font-size: 166rpx;
  font-weight: 600;
  letter-spacing: -25rpx;
}
.container .cou .cou-container .right-container {
  flex: 2.4;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.container .cou .cou-container .right-container .center {
  flex: 1.3;
}
.container .cou .cou-container .right-container .center .c-top {
  color: #fffefe;
  font-size: 40rpx;
  margin-bottom: 10rpx;
}
.container .cou .cou-container .right-container .center .c-bottom {
  color: #fffefe;
  font-size: 26rpx;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.container .cou .cou-container .right-container .right {
  flex: 1;
}
.container .cou .cou-container .right-container .right .r-con {
  text-align: center;
}
.container .cou .cou-container .right-container .right .r-con .text {
  color: #fffefe;
  font-size: 36rpx;
}
.container .cou .cou-container .right-container .right .r-con .use-btn {
  width: 156rpx;
  height: 48rpx;
  color: #ff6b12;
  line-height: 48rpx;
  text-align: center;
  background: #fff;
  font-size: 24rpx;
  border-radius: 10rpx;
  display: inline-block;
}
.container .cou .cou-container .right-container .right .r-con2 image {
  width: 160rpx;
  height: 160rpx;
}
.container .cou .cou-container .right-container .right .r-con3 image {
  width: 160rpx;
  height: 160rpx;
}
.container .cou .cou-container1 {
  background: url("http://wangcong.fun/images/youhui_03.png") no-repeat;
  background-size: 100% 100%; 
}
.cou-container{
  margin-bottom:20rpx;
}
.container .cou .cou-container2 {
  background: url("http://wangcong.fun/images/ticket_07.png") no-repeat;
  background-size: 100% 100%;
}
.container .cou .cou-container3   {
  background: url("http://wangcong.fun/images/ticket_07.png") no-repeat;
  background-size: 100% 100%;
}
.no-coupon{
  width: 200rpx;
  height: 190rpx;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
}
.no-coupon image {
  display: block;
  width: 175rpx;
  height: 100rpx;
  margin: 30rpx auto;
}
.no-coupon text {
  display: block;
  width: 100%;
  text-align: center;
  font-size: 26rpx;
  color: #666;
}


================================================
FILE: client/pages/droppassword/droppassword.js
================================================
// pages/droppassword/drappassword.js
var app = getApp();
import {Http} from '../../utils/httpClient' ;
var httpClient = new Http();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    send: false,
    alreadySend: false,
    second: 60,
    disabled: true,
    buttonType: 'default',
    phoneNum: '',
    code: '',
    otherInfo: '',
    newPassWord:'',
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
  
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
  
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
  
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
  
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
  
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
  
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
  
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
  
  },

  inputPhonePass: function(e){
    let phoneNum = e.detail.value;
    this.setData({
      newPassWord:phoneNum
    })
    this.activeButton();
  },
  inputPhoneNum: function (e) {
    let phoneNum = e.detail.value
    if (phoneNum.length === 11) {
      let checkedNum = this.checkPhoneNum(phoneNum)
      if (checkedNum) {
        this.setData({
          phoneNum: phoneNum
        })
        console.log('phoneNum' + this.data.phoneNum)
        this.showSendMsg()
        this.activeButton()
      }
    } else {
      this.setData({
        phoneNum: ''
      })
      this.hideSendMsg()
    }
  },

  checkPhoneNum: function (phoneNum) {
    let str = /^1\d{10}$/
    if (str.test(phoneNum)) {
      return true
    } else {
      wx.showToast({
        title: '手机号不正确',
        image: '../../images/fail.png'
      })
      return false
    }
  },

  showSendMsg: function () {
    if (!this.data.alreadySend) {
      this.setData({
        send: true
      })
    }
  },

  hideSendMsg: function () {
    this.setData({
      send: false,
      disabled: true,
      buttonType: 'default'
    })
  },

  sendMsg: function () {
    httpClient.getPwdModifyCode({
      token:app.globalData.token,
      mobile:this.data.phoneNum
    }).then((res)=>{
      if(res.code ==200){
        this.setData({
          alreadySend: true,
          send: false
        })
        this.timer()
      }else{
        wx.showToast({
          title:res.msg
        })
      }
     
    }).catch((e)=>{
      if(e.msg){
        wx.showToast({
          title:e.msg?e.msg:'手机号错误',
          icon: 'loading'
        })
      }
    })
  },

  timer: function () {
    let promise = new Promise((resolve, reject) => {
      let setTimer = setInterval(
        () => {
          this.setData({
            second: this.data.second - 1
          })
          if (this.data.second <= 0) {
            this.setData({
              second: 60,
              alreadySend: false,
              send: true
            })
            resolve(setTimer)
          }
        }
        , 1000)
    })
    promise.then((setTimer) => {
      clearInterval(setTimer)
    })
  },

// 其他信息部分
  addOtherInfo: function (e) {
    this.setData({
      otherInfo: e.detail.value
    })
    this.activeButton()
    console.log('otherInfo: ' + this.data.otherInfo)
  },

// 验证码
  addCode: function (e) {
    this.setData({
      code: e.detail.value
    })
    this.activeButton()
    console.log('code' + this.data.code)
  },

 // 按钮
  activeButton: function () {
    let {phoneNum, code, newPassWord} = this.data
    console.log(code)
    if (phoneNum && code && newPassWord &&newPassWord.length == 6 ) {
      this.setData({
        disabled: false,
        buttonType: 'primary'
      })
    } else {
      this.setData({
        disabled: true,
        buttonType: 'default'
      })
    }
  },

  onSubmit: function () {
    var _this = this;
    httpClient.setUserModifyPassword({
      token:app.globalData.token,
      mobile:this.data.phoneNum,
      code:this.data.code,
      passWord:this.data.newPassWord
    }).then((res)=>{
      if(res.data.code ==200){
        _this.setData({
          control: false
        })
        wx.showToast({
          title: '修改成功',
          icon: 'succeed',
          duration: 2000
        })
        wx.switchTab({
          url: '../mycenter/mycenter'
        })
      }else{
        _this.setData({
          control: false
        })
        wx.showToast({
          title: res.data.msg,
          icon: 'filed',
          duration: 2000
        })
      }
    })
    .catch((res)=>{
      wx.showToast({
        title: res.msg,
        icon: 'filed',
        duration: 2000
      })
    })
  }
})

================================================
FILE: client/pages/droppassword/droppassword.json
================================================
{}

================================================
FILE: client/pages/droppassword/droppassword.wxml
================================================
  <!-- 修改手机密码 -->
  <view class="telephone_container" >
    <view class="telephone">
      <view class="tel_title">找回支付密码<text bindtap=''></text></view>
      <input class="tel" adjust-position='true' cursor-spacing="10" type="number" maxlength="11" placeholder="请输入11位手机号" placeholder-style="color:#999;" bindinput="inputPhoneNum"  auto-focus/>
      <view class="code_container">
        <input class="codes" type="number" adjust-position='true' cursor-spacing="10" placeholder="请输入6位验证码" maxlength="6" placeholder-style="color:#999;" bindinput="addCode"/>
          <view wx:if="{{!send && !alreadySend}}" class="getcode" bindtap="">获取验证码</view>
         <view wx:if="{{send}}" class="getcode2" bindtap="sendMsg">获取验证码</view>
         <view wx:if="{{!send && alreadySend}}" class="getcode" bindtap="">{{second+"s"}}</view>
        <!-- <text style="font-size:25rpx" wx:if="{{alreadySend}}" class="sendMsg" bindtap="sendMsg">{{second+"s"}}</text> -->
      </view>
       <input class="tel" adjust-position='true' cursor-spacing="10" type="number" password="true" maxlength="6"  placeholder="请输入新6位支付密码" placeholder-style="color:#999;" bindinput="inputPhonePass"  auto-focus/>
      <!-- <view class='ensure' bindtap="bindIphone">确定</view> -->
      <button class='ensure {{!disabled?"active":""}}' type="{{buttonType}}" disabled="{{disabled}}" bindtap="onSubmit">确定</button>
    </view>
  </view>


================================================
FILE: client/pages/droppassword/droppassword.wxss
================================================
/* pages/droppassword/drappassword.wxss */

.telephone_container {
    width: 100%;
    height: 100%;
    position: absolute;
    background: rgba(0, 0, 0, 0.5);
  }
  .telephone_container .telephone {
    width: 92%;
    height: 720rpx;
    position: absolute;
    background: #fff;
    top: 0;
    left: 0;
    bottom:134rpx;
    right: 0;
    margin: auto;
    border-radius: 5rpx;
  }
  .telephone_container .telephone .tel_title {
    width: 97%;
    margin: 0 auto;
    height: 120rpx;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 30rpx;
    color: #333;
    font-weight: bold;
    position: relative;
    border-bottom: 1rpx solid #ddd;
    margin-bottom: 40rpx;
  }
  .telephone_container .telephone .tel_title text {
    position: absolute;
    top: 15%;
    right: 10rpx;
    color: #888;
    font-size: 40rpx;
  }
  .telephone_container .telephone .tel {
    width: 85%;
    height: 84rpx ;
    padding-left: 10rpx;
    margin:50rpx auto;
    color: #333;
    font-size: 24rpx;
    border: 1rpx solid #666;
    -webkit-border-radius: 5rpx;
    -moz-border-radius: 5rpx;
    border-radius: 5rpx;
    box-sizing: border-box;
  }
  .telephone_container .telephone .code_container{
    border: none;
    width:85%;
  height:84rpx;
    display: flex;
    justify-content: space-between;
    align-content: center;
    margin: 40rpx auto;
  }
  .telephone_container .telephone .code_container input{
    width: 367rpx;
    height: 100%;
    border: 1rpx solid #666;
    padding-left: 10rpx;
    border-radius: 5rpx;
     color: #333;
    font-size: 24rpx;
    box-sizing: border-box;
  }
  .telephone_container .telephone .code_container view{
    width: 195rpx;
    height: 100%;
    line-height: 84rpx;
    background: #42adae;
    text-align: center;
    border-radius: 5rpx;
    color: #fff;
    font-size: 24rpx;
  }
  .telephone_container .telephone .ensure{
      width:85%;
      height:80rpx;
      margin: 0 auto;
      background: #42adae;
      font-size: 30rpx;
      color: #fff;
      text-align: center;
      line-height: 80rpx;
      border-radius: 5rpx;
  }

  .telephone_container .telephone .active{
    width:85%;
    height:80rpx;
    margin: 0 auto;
    background: #ff6b12;
    font-size: 30rpx;
    color: #fff;
    text-align: center;
    line-height: 80rpx;
    border-radius: 5rpx;
}

.getcode2{
    background: #ff6b12 !important;
}

================================================
FILE: client/pages/indent/indent.js
================================================
var app = getApp();
import { URL } from '../../utils/urlModel.js';
import { Http } from '../../utils/httpClient.js';
import { formatTime, getCountDays, formatTimeTwo } from '../../utils/util';
Page({
  data: {
    URL: URL,
    page: 1,
    cancelflag: false,
    refundflag: false,
    emptyflag: false,
    indentData: [],
    // itemList: [],
    tel:'',
    toPayFailed:1,
    refundTitle: '',//退款店铺名称
    refundPrice: 0,//
    cancleOrdernum: '',//取消订桌的订单号
    reasion: '', //取消订桌原因
    canRefund: '',//是否可以取消
    currentTime: '',//当前时间
    refundOrdernum: '',//申请退款的订单号,
    conHeight:''
  },

  //去支付
  toPay(e) {
     /**
     * 获取订单信息
     */
    var httpClient=new Http();
    var _this=this;
    var argu = {
      orderNumber: e.target.dataset.ordernum,
      token: app.globalData.token
    };
    httpClient.getOrederSelected(argu).then((data) => {
      console.log(data);
      if(data.code!=200){
        wx.showToast({
          title:data.msg
        })
        this.data.indentData.forEach((ele,i)=>{
          if(ele.order_number ==  e.target.dataset.ordernum){
            this.data.indentData[i].topay = 1;
            return;
          }
        })
        this.setData({
          indentData:this.data.indentData
        })
       
      }else{
        wx.navigateTo({
          url: "../topay/topay?orderNumber=" + e.target.dataset.ordernum
        })
      }
     
    })
  },
  //去评论
  goReview(e) {
    wx.navigateTo({
      url: "../review/review?ordernum=" + e.target.dataset.ordernum + "&shopid=" + e.target.dataset.shopid
    })
  },
  //显示取消订桌的弹窗
  showcancelTable(e) {
    this.setData({
      cancelflag: !this.data.cancelflag,
      cancleOrdernum: e.target.dataset.ordernum
    })
  },
  //取消订桌,请求取消订单接口
  cancelTable: function (e) {
    var httpClient = new Http();
    var argu = {
      token: app.globalData.token,
      orderNumber: e.target.dataset.ordernum,
      content: this.data.reasion
    };
    httpClient.cancelOrder(argu).then((data) => {
      console.log(data)
      if (data.code == 200) {
        wx.showToast({
          title: '取消成功'
        });
        //  刷新页面
        this.update();
      }
      this.setData({
        cancelflag: !this.data.cancelflag
      })
    })

  },
  //放弃取消订桌,即关闭取消订桌的弹窗
  giveupTable: function () {

    this.setData({
      cancelflag: !this.data.cancelflag
    })

  },
  //申请原因输入事件
  changeText(e) {
    this.setData({
      reasion: e.detail.value
    })
    console.log(this.data.reasion);
  },
  //申请退款接口调取
  getRefun() {
    var httpClient = new Http();
    var argu = {
      token: app.globalData.token,
      orderNumber: this.data.refundOrdernum,
      content: this.data.reasion
    };
    httpClient.refundOrder(argu).then((data) => {
      console.log(data);
      if (data.code == 200) {
        wx.showToast({
          title: "退款申请成功"
        })
        this.setData({
          refundflag: false
        });
        //  刷新页面
        this.update();
      } else {
        wx.showToast({
          title: "退款申请失败"
        })
      }
    })
  },
  //申请退款弹窗出现,获取订单号,调取接口
  refundMoney: function (e) {

    this.setData({
      refundflag: !this.data.refundflag,
      refundOrdernum: e.target.dataset.ordernum,
      refundTitle: e.target.dataset.tit,
      refundPrice: e.target.dataset.price,
      reasion: ''
    })
    // this.getRefun();
  },
  //关闭退款申请弹窗
  closerefundMoney() {
    this.setData({
      refundflag: !this.data.refundflag
    })
  },
  onLoad() {
    //加载就获取所有订单
    //this.getOrder();
    var _this=this;
    wx.getSystemInfo({
      success: function (res) {
        console.log(res);
        // 可使用窗口宽度、高度
        console.log('height=' + res.windowHeight);
        // 计算主体部分高度,单位为px
        _this.setData({
          // second部分高度 = 利用窗口可使用高度 - first部分高度(这里的高度单位为px,所有利用比例将300rpx转换为px)
          conHeight: res.windowHeight*2
        })
      }
    })
  },
  //电话弹窗
  open(e) {
    // var itemList = ['13526784596', '010-8353123'];
    // this.setData({
    //   itemList: this.data.itemList.push(e.target.dataset.tel.toString()) ? this.data.itemList : []
    // })
    this.setData({
      tel: e.target.dataset.tel.toString()
    })
    var itemList=[];
    itemList = itemList.push(this.data.tel.toString()) ? itemList : [];
    wx.showActionSheet({
      itemList: itemList,
      success: function (res) {
        if (!res.cancel) {
          console.log(res)
          wx.makePhoneCall({
            phoneNumber: itemList[res.tapIndex]
          })
         
        }
      }
    });
    this.setData({
      tel:''
    })
  },
  // wx.startPullDownRefresh();
  //获取全部订单
  getOrder() {
    var time = Date.parse(new Date()) / 1000;
    // console.log('当前时间戳 ',time);
    var httpClient = new Http();
    var argu = {
      token: app.globalData.token,
      page: this.data.page
    };
    httpClient.getUserOrderList(argu).then((data) => {
      console.log(data);
      if (data.list.length == 0) {
        this.setData({
          emptyflag: true
        })
      } else {
        for (var key in data.list) {

          if (data.list[key].expand) {
            data.list[key].expand = JSON.parse(data.list[key].expand);
            if (data.list[key].expand.addtime) {
              var timegaps = Number(data.list[key].expand.addtime) - Number(time);
              // console.log(timegaps)
              if (timegaps >= 10800) { //距离预约时间超过3小时以外
                data.list[key].isRefund = true;
                // console.log("data.list[key]",data.list[key]);
              } else if (timegaps > 0 && timegaps < 10800 && data.list[key].type == 4) { //距离预约时间3小时以内,并且type4预约点餐,可以退款
                data.list[key].isRefund = true;
              } else {
                data.list[key].isRefund = false;
              }
              data.list[key].expand.addtime = formatTimeTwo(data.list[key].expand.addtime, 'Y-M-D h:m');
            }
          } else {
            data.list[key].isRefund = false;
            data.list[key].create_time=data.list[key].create_time.substring(0,16);
          }
         
        }
        this.setData({
          indentData: this.data.indentData.concat(data.list)
        })
        console.log('全部订单', this.data.indentData)
      }
    })
  },

  onShow: function () {
    //如果懒加载了多页了,我下了订单,新订单出现,但是之前加载过的老订单重新加载。  功能没问题。 多请求。
    this.update();
  },
  //刷新页面
  update() {
    this.data.page = 1;
    this.data.indentData = [];
    this.getOrder();
  },
  //分页加载更多
  loadMore() {
    var _this = this;
    this.data.page++;
    _this.setData({
      page: this.data.page
    });
    _this.getOrder();
  },
  //将时间戳转换成时间
  timestampToTime(timestamp) {
    var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
    var Y, M, D, h, m, s;
    Y = date.getFullYear() + '-';
    M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
    D = date.getDate() + ' ';
    h = date.getHours() + ':';
    m = date.getMinutes() + ':';
    s = date.getSeconds();
    return Y + M + D + h + m + s;

  }

})

================================================
FILE: client/pages/indent/indent.json
================================================
{
  "navigationBarTitleText": "订单",
  "component": true,
  "usingComponents": {}
}

================================================
FILE: client/pages/indent/indent.wxml
================================================
<view class="empty_container" wx:if="{{indentData.length==0}}">
    <view class="empty">
        <image src='../images/empty1.png'></image>
        <text style="font-size:20rpx">您还没有相关订单</text>
    </view>
</view>
<view class="container">
    <!-- <button  bindtap='refundMoney'>申请退款</button> -->
    <scroll-view class="scroll-view_H" scroll-y style="height: {{conHeight}}rpx;" bindscrolltolower='loadMore'>
        <view class="scroll_container" id="scroll_container">
            <!-- 空订单提示 -->
            <view class="empty" wx:if="{{emptyflag}}">
                <image class="empty_img" src="../images/empty1.png"></image>
                <text class="empty_text">您还没有相关订单</text>
            </view>
            <!-- 待支付 -->
            <view class="order_part" wx:for="{{indentData}}">
                <view class="shop_phone weui-btn-area" type="default" data-tel="{{item.iphones}}" bindtap='open'>
                    <image src="../images/order_03.png"></image>
                    商家电话
                </view>
                <view class="restaurant">
                    <image src="{{URL.PROJECT_ROOT+item.logo}}"></image>
                    <view class="restaurant_name">
                        <text>{{item.title}}</text>
                        <text>订单:{{item.order_number}}</text>
                    </view>
                    <view class="status">
                        <block>
                            <text wx:if="{{item.type==4}}">预约</text>
                            <text wx:if="{{item.type==3}}">点餐</text>
                            <text wx:if="{{item.type==1}}">订桌</text>
                            <text wx:if="{{item.type==2}}">付款</text>
                        </block>
                        <block>
                            <!-- 只订桌不须支付,还未取消,可以申请取消 -->
                            <view class="refund" bindtap='showcancelTable' wx:if="{{item.type==1&&item.pay_status==2&&item.status!=3&&item.isRefund}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                取消
                            </view>
                            <!-- 只订桌不须支付,还未取消,可以申请取消 -->
                            <!-- <view class="refund" bindtap='showcancelTable' wx:if="{{item.type==1&&item.pay_status==2&&item.status!=3&&!item.isRefund}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                时间将近,不可取消
                            </view> -->
                            <!-- 只订桌不须支付,已取消 -->
                            <view class="refund" wx:if="{{item.type==1&&item.pay_status==2&&item.status==3}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                已取消
                            </view>
                            <!-- 预约或点餐,去支付 -->
                            <view bindtap='toPay' wx:if="{{(item.type==4||item.type==3||item.type==2)&&item.pay_status==2&&!item.topay}}" data-status="{{item.pay_status}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                去支付
                            </view>
                            <!-- 订单关闭 ,不能支付 -->
                            <view bindtap='toPay' wx:if="{{(item.type==4||item.type==3||item.type==2)&&item.pay_status==2&&item.topay==1}}" data-status="{{item.pay_status}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                已关闭
                            </view>
                            <!-- 提前点餐,已经支付,待接单,3小时外,可以退款 -->
                            <view class="refund" bindtap='refundMoney' wx:if="{{item.type==4&&item.pay_status==1&&item.status==1&&item.reimburse==1&&item.isRefund}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}' data-tit="{{item.title}}" data-price='{{item.pay_price/100}}'>
                                申请退款
                            </view>
                            <!-- 提前点餐,已经支付,9商家退款审核中 -->
                            <view class="refund" bindtap='' wx:if="{{item.type==4&&item.pay_status==1&&item.status==9&&item.reimburse==1}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                商家审核中
                            </view>
                            <!-- 提前点餐,已经支付,10商家退款失败 -->
                            <view class="refund" bindtap='' wx:if="{{item.type==4&&item.pay_status==1&&item.status==10&&item.reimburse==1}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                商家退款失败
                            </view>
                            <!-- 提前点餐,已经支付,11 平台退款审核中 -->
                            <view class="refund" bindtap='' wx:if="{{item.type==4&&item.pay_status==1&&item.status==11&&item.reimburse==1}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                平台审核中
                            </view>
                            <!-- 提前点餐,已经支付,12 平台退款审核中 -->
                            <view class="refund" bindtap='' wx:if="{{item.type==4&&item.pay_status==1&&item.status==12&&item.reimburse==1}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                平台退款失败
                            </view>
                            <!-- 预约或点餐,已经支付,已经完成,可以评价 -->
                            <view class="goEvaluate" bindtap='goReview' wx:if="{{(item.type==4||item.type==3)&&item.status==2&&item.is_evaluate==2}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                去评价
                            </view>
                            <!-- 预约或点餐,已经支付,已经完成,评价状态为1,已经评价 -->
                            <view class="refund" bindtap='' wx:if="{{(item.type==4||item.type==3)&&item.status==2&&item.is_evaluate==1}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                已评价
                            </view>
                            <!-- 付款买单,显示已经完成 -->
                            <view class="goEvaluate" bindtap='goReview' wx:if="{{item.type==2&&item.pay_status==1}}" data-ordernum='{{item.order_number}}' data-shopid='{{item.league_id}}'>
                                已完成
                            </view>
                        </block>
                    </view>
                </view>
                <view class="order_sheet" wx:for='{{item.league_orders_goods}}' wx:for-item="v">
                    <view class="order_sheet_part">
                        <image src="{{URL.PROJECT_ROOT+v.goods_thumb}}"></image>
                        <view class="foods_name">
                            <text>{{v.goods_name}}</text>
                            <text>×{{v.goods_amount}}</text>
                        </view>
                        <text class="price">¥{{v.goods_price/100}}</text>
                    </view>
                    <!-- <view class="order_sheet_part">
                 <image src="../images/order_11.png"></image>
                 <view class="foods_name">
                     <text>宫保鸡丁</text>
                     <text>×1</text>
                 </view>
                 <text class="price">¥88</text>
             </view>
             <view class="order_sheet_part">
                 <image src="../images/order_11.png"></image>
                 <view class="foods_name">
                     <text>宫保鸡丁</text>
                     <text>×1</text>
                 </view>
                 <text class="price">¥88</text>
             </view> -->
                </view>
                <block wx:if="{{item.type==2||item.type==3||item.type==4}}">
                    <view class="discounts">
                        <view class="disct_info" wx:if='{{item.rebate/100!=0}}'>
                            <view>
                                <text>减</text>
                                满减优惠
                            </view>
                            <view>-{{item.rebate/100}}</view>
                        </view>
                        <view class="disct_info" wx:if='{{item.coupon_price/100!=0}}'>
                            <view>
                                <text>券</text>
                                代金券
                            </view>
                            <view>-{{item.coupon_price/100}}</view>
                        </view>
                    </view>
                    <view class="sum_price">
                        <span class="cheap" wx:if='{{(item. rebate+item.coupon_price)/100!=0}}'>
                            已优惠¥{{(item. rebate+item.coupon_price)/100}}
                        </span>
                        <view class="sum">
                            合计
                            <text>¥{{item.pay_price/100}}</text>
                        </view>
                    </view>
                </block>
                <view class="pay_infomation">
                    <view class="pay_part" wx:if="{{item.type!=1}}">
                        <text>支付状态</text>
                        <block>
                            <text class="pay_status" wx:if="{{item.pay_status==2}}">未支付</text>
                            <text class="pay_status" wx:if="{{item.pay_status==1&&item.status!=9}}">
                                已支付
                            </text>
                            <text class="pay_status" wx:if="{{item.pay_status==3}}">已关闭</text>
                            <text class="pay_status" wx:if="{{item.status==9&&item.pay_status==1}}">
                                已退款
                            </text>
                        </block>
                    </view>
                    <block wx:if='{{item.expand!=0}}'>
                        <view class="pay_part">
                            <text>用餐人数</text>
                            <text>{{item.expand.number}}人</text>
                        </view>
                        <view class="pay_part">
                            <text>用餐时间</text>
                            <text>{{item.expand.addtime}}</text>
                        </view>
                    </block>
                    <view class="pay_part">
                        <text>下单时间</text>
                        <text>{{item.create_time}}</text>
                    </view>
                </view>
                <view class="pay_infomation customer">
                    <view class="pay_part customer_part" wx:if='{{item.expand!=0}}'>
                        <text>姓名</text>
                        <text>{{item.expand.uname}}</text>
                    </view>
                    <view class="pay_part" wx:if='{{item.expand!=0}}'>
                        <text>电话</text>
                        <text>{{item.expand.iphone}}</text>
                    </view>
                    <view class="pay_part remark" wx:if='{{item.remarks}}'>
                        <text>备注</text>
                        <text>{{item.remarks}}</text>
                    </view>
                </view>
            </view>
            <view class="cancel_table_container" wx:if="{{cancelflag}}">
                <view class="cancel_table">
                    <view class="cancel_title">
                        取消订桌
                        <text bindtap='giveupTable'>×</text>
                    </view>
                    <view class="code_container">
                        <text class="can_tit">您是否要取消</text>
                        <textarea name="" id="" cols="30" rows="10" placeholder="请输入原因" maxlength='100' bindinput='changeText'></textarea>
                    </view>
                    <view class="btn_container">
                        <view class='cancel_btn' bindtap='cancelTable' data-ordernum='{{cancleOrdernum}}' data-text="{{reasion}}">
                            取消订桌
                        </view>
                        <view class='ensure' bindtap='giveupTable'>放弃</view>
                    </view>
                </view>
            </view>
            <view class="cancel_table_container refund_container" wx:if="{{refundflag}}">
                <view class="cancel_table">
                    <view class="cancel_title">
                        申请退款
                        <text bindtap='closerefundMoney'>×</text>
                    </view>
                    <view class="code_container">
                        <view class="refund_title">
                            <text>{{refundTitle}}</text>
                            <text>金额¥{{refundPrice}}</text>
                        </view>
                        <textarea name="" id="" cols="30" rows="10" placeholder="请输入原因" bindinput='changeText'></textarea>
                    </view>
                    <view class="btn_container">
                        <view class='cancel_btn' bindtap='getRefun'>申请退款</view>
                        <view class='ensure' bindtap='closerefundMoney'>取消</view>
                    </view>
                </view>
            </view>
        </view>
    </scroll-view>
</view>

================================================
FILE: client/pages/indent/indent.wxss
================================================
.container {
  background: #f5f5f9;
  width: 100%;
  padding: 2%;
  font-size: 30rpx;
  color: #333333;
}
.scroll_container{
  height: auto;
}
.container .order_part {
  width: 96%;
  margin-bottom: 20rpx;
  background: #fff;
  padding: 0 2% 10rpx;
}
.container .order_part .shop_phone {
  width: 100%;
  height: 77rpx;
  line-height: 77rpx;
  border-bottom: 1rpx dashed #dddddd;
  text-align: center;
  position: relative;
  margin: 0 !important;
}
.container .order_part .shop_phone image {
  width: 25rpx;
  height: 25rpx;
}
.container .order_part .shop_phone::before,
.container .order_part .shop_phone::after {
  display: block;
  content: "";
  width: 28rpx;
  height: 28rpx;
  background: #f5f5f9;
  -webkit-border-radius: 28rpx;
  -moz-border-radius: 28rpx;
  border-radius: 28rpx;
  position: absolute;
  bottom: -14rpx;
}
.container .order_part .shop_phone::before {
  left: -28rpx;
}
.container .order_part .shop_phone::after {
  right: -28rpx;
}
.container .order_part .restaurant {
  width: 96%;
  padding: 30rpx 2% 20rpx;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.container .order_part .restaurant image {
  display: block;
  width: 100rpx;
  height: 100rpx;
  border-radius: 5rpx;
}
.container .order_part .restaurant .restaurant_name {
  width: 380rpx;
  height: 100rpx;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.container .order_part .restaurant .restaurant_name text {
  display: block;
  width: 100%;
  font-size: 30rpx;
}
.container .order_part .restaurant .restaurant_name text:last-of-type {
  color: #888888;
  font-size: 24rpx;
}
.container .order_part .restaurant .status {
  width: 160rpx;
  height: 100rpx;
}
.container .order_part .restaurant .status text {
  color: #ff6b12;
  text-align: center;
  display: block;
}
.container .order_part .restaurant .status view {
  width: 160rpx;
  height: 48rpx;
  color: #fff;
  line-height: 48rpx;
  font-size: 30rpx;
  background: #ff6b12;
  -webkit-border-radius: 5rpx;
  -moz-border-radius: 5rpx;
  border-radius: 5rpx;
  text-align: center;
}
.container .order_part .restaurant .status view.goEvaluate {
  background: #47cacc;
}
.container .order_part .restaurant .status view.evaluated {
  color: #47cacc;
  background: #fff;
  border: 1rpx solid #47cacc;
  box-sizing: border-box;
}
.container .order_part .restaurant .status view.refund {
  width: 160rpx;
  font-size: 25rpx;
  border-color: #ddd ;
  background: #f8f8f8;
  color: #888;
}
.container .order_part .order_sheet {
  width: 96%;
  padding: 0rpx 2% ;
}
.container .order_part .order_sheet .order_sheet_part {
  width: 96%;
  padding: 25rpx 2% 0;
  height: 80rpx;
  background: #f8f8f8;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.container .order_part .order_sheet .order_sheet_part image {
  display: block;
  width: 80rpx;
  height: 80rpx;
  border-radius: 5rpx;
}
.container .order_part .order_sheet .order_sheet_part .foods_name {
  width: 463rpx;
  height: 100%;
}
.container .order_part .order_sheet .order_sheet_part .foods_name text {
  display: block;
  font-size: 26rpx;
  color: #333333;
}
.container .order_part .order_sheet .order_sheet_part .foods_name text:last-of-type {
  color: #888888;
}
.container .order_part .order_sheet .order_sheet_part:last-of-type {
  padding-bottom: 25rpx;
}
.container .order_part .discounts {
  border-bottom: 1rpx dashed #ddd;
  width: 92%;
  padding: 30rpx 4% 26rpx;
}
.container .order_part .discounts .disct_info {
  width: 100%;
  height: 50rpx;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.container .order_part .discounts .disct_info view {
  font-size: 26rpx ;
  color: #888;
}
.container .order_part .discounts .disct_info view text {
  display: inline-block;
  width: 30rpx;
  height: 30rpx;
  line-height: 30rpx;
  border-radius: 30rpx;
  background: #ff6b12;
  color: #fff;
  margin-right: 20rpx ;
  font-size: 22rpx;
  text-align: center;
}
.container .order_part .discounts .disct_info view:last-of-type {
  color: #ff2b4d;
}
.container .order_part .sum_price {
  width: 92%;
  padding: 0 4%;
  height: 90rpx;
  border-bottom: 1rpx dashed #ddd;
  display: flex;
  justify-content: flex-end;
  align-items: center;
}
.container .order_part .sum_price .cheap {
  display: block;
  color: #888;
  font-size: 26rpx ;
  margin-right: 40rpx;
}
.container .order_part .sum_price .sum {
  color: #333;
  font-size: 26rpx;
}
.container .order_part .sum_price .sum text {
  color: #ff2b4d;
}
.container .order_part .pay_infomation {
  width: 92%;
  border-bottom: 1rpx dashed #ddd;
  padding: 25rpx 4%;
}
.container .order_part .pay_infomation .pay_part {
  width: 100%;
  padding: 15rpx 0;
  color: #888;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.container .order_part .pay_infomation .pay_part text {
  display: block;
  font-size: 26rpx;
}
.container .order_part .pay_infomation .pay_part text:first-of-type {
  width: 151rpx;
}
.container .order_part .pay_infomation .pay_part text:last-of-type {
  color: #333;
}
.container .order_part .pay_infomation .pay_part text.pay_status {
  color: #47cacc ;
}
.container .order_part .customer {
  border: none;
}
.container .order_part .customer .remark {
  align-items: flex-start;
}
.cancel_table_container {
  width: 100%;
  height: 100%;
  position: fixed;
  background: rgba(0, 0, 0, 0.5);
  top: 0;
  left: 0;
}
.cancel_table_container .cancel_table {
  width: 92%;
  height: 575rpx;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
  background: #fff;
}
.cancel_table_container .cancel_table .cancel_title {
  width: 92%;
  margin: 0 auto;
  height: 120rpx;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 30rpx;
  color: #333;
  font-weight: bold;
  position: relative;
}
.cancel_table_container .cancel_table .cancel_title text {
  position: absolute;
  top: 15%;
  right: 10rpx;
  color: #888;
  font-size: 40rpx;
}
.cancel_table_container .cancel_table .code_container {
  width: 92%;
  margin: 30rpx auto;
}
.cancel_table_container .cancel_table .code_container .refund_title,
.cancel_table_container .cancel_table .code_container .can_tit {
  color: #666;
  font-size: 30rpx;
}
.cancel_table_container .cancel_table .code_container .refund_title {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.cancel_table_container .cancel_table .code_container .refund_title text:last-of-type {
  color: #ff6b12;
}
.cancel_table_container .cancel_table .code_container textarea {
  width: 100%;
  height: 196rpx;
  padding: 10rpx 4%;
  box-sizing: border-box;
  border: 1rpx solid #ddd;
  margin-top: 30rpx;
}
.cancel_table_container .cancel_table .btn_container {
  width: 92%;
  margin: 40rpx auto;
  height: 80rpx;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.cancel_table_container .cancel_table .btn_container view {
  width: 280rpx;
  height: 80rpx;
  color: #333;
  font-size: 30rpx;
  border-radius: 5rpx;
  line-height: 80rpx;
  text-align: center;
  box-sizing: border-box;
}
.cancel_table_container .cancel_table .btn_container view.cancel_btn {
  border: 1rpx solid #ddd;
}
.cancel_table_container .cancel_table .btn_container view.ensure {
  background: #ff6b12;
  color: #fff;
}
.empty_container{
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  background: #fff;
}
.empty_container .empty{
  width: 300rpx;
  height: 400rpx;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
  text-align: center;
}
.empty_container .empty image{
  display:block;
  width: 110rpx;
  height: 100rpx;
  margin: 20rpx auto;
}
.empty_container .empty text{
  display: block;
  width: 100%;
  text-align: center;
  color: #666;
  font-size: 26rpx;
}

================================================
FILE: client/pages/index/index.js
================================================
//index.js
//获取应用实例
const app = getApp()



import {URL} from '../../utils/urlModel.js';
import {Http}  from '../../utils/httpClient.js';

import {nearby,nav_data_0} from './type.js'; 

import {area} from '../../utils/area.js';
import {area2} from '../../utils/area2.js';
app.globalData.area = {...area,...area2};

var httpClient = new Http();



Page({
  data: {
    windowHeight:app.globalData.windowHeight,
    URL:URL,
    // issign:false,
    near:app.near,
    imgUrls: [
      '../images/index_06.jpg',
      'http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg',
      'http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg'
    ],
    indicatorDots: false,
    autoplay: false,
    interval: 5000,
    duration: 1000,
    idx:0,
    /**
     * 是否在搜索状态
     */
    searchBool:false,

    /**
     * 当前城市名字
     */
    cityName:'北京市',

    /**
     * 当前温度
     */
    temperature:'28',

    /**
     * 当前城市街道信息
     */
    cityData:area[app.citySelect.provriceId].children[app.citySelect.cityId],


    /**
     * 首页bnner数据
     */
    banner_indexData:[],
    /**
     * 首页店铺分类
     * 真实数据
     */
    nav_indexData:[],


    /**
     * 商铺展示信息
     */
    shop_List:[],

    /**
     * 距离假数据
     */
    dis_list:['500','800','1000','1500','2000'],

    /**
     * 距离排序
     */
    soft_list: [
      { 
        text:"距离排序"
      },{
        text:"口味排序"
      },{
        text:"环境排序"
      },{
        text:"服务排序"
      }
    ],

    /**
     * 附近遮罩层是否显示
     */
    markNearby:false,
    /**
     * 全部美食弹窗
     */
    markAllFood:false,
    /**
     * 距离排序弹窗
     */
    markSoft:false,
    /**
     * 当前选择Tab
     * 0:全部美食 1:附近 2:距离排序
     */
    curTab:1,

    /**
     * 选中结果 附近弹窗左侧选中结果 city字段
     */
    nearbyLeftTab:-1,

    // /**
    //  * 附近弹窗 左侧临时选中
    //  */
    // nearbyMockLeftTab:0,

    /**
     * 附近弹窗  是否进行了选中 
     */
    isNearbySelect:false,

    /** 
     *当前选中结果 附近弹窗中选项卡 对应county字段
     * 
     */
    nearbyTab:-1,


    /**
     * 当前选中结果 全部美食选项卡 对应字段type 
     */
    allFoodTab:0,
    /**
     * 当前选中结果 距离排序选项卡
     */
    softListTab:0,
    /**
     * 图片选择
     */
    pics:[],

    /**
     * 当前页码
     */
    page:1,

    /**
     * 总条数
     */
    count:1,
  },
  onShow(){
    // 查看是否授权
    var that = this;
    that.initData();
  },
  

  /**
   * 初始化数据
   */
  initData(){
    // this.setData({
    //   issign:app.issigned
    // })
    //获取积分余额及是否已经签到过
    // this.getUserIters();
    var httpClient = new Http();
    var _this = this;
    /**
     * 获取首页导航栏接口
     */
    httpClient.getNavIndex()
      .then((data)=>{
        data.splice(0,0,nav_data_0);
        _this.setData({
          nav_indexData:data
        });
        console.log('nav_indexData: ',_this.data.nav_indexData);
      })
      .catch(e =>console.log(e));
    /**
     * 获取banner接口
     */
    httpClient.getBannerIndex()
      .then((data) => {
        // _this.setData({
        //   nav_indexData: data
        // });
        console.log('banner: ',data);
        _this.setData({
          banner_indexData:data
        });
    })
    .catch(e =>console.log(e));

    if(app.oneDayOneLogin){
      httpClient.getCity().then((res)=>{
        console.log('城市信息',res);
        var code = res.addressComponent.adcode;
        var cityName = res.addressComponent.city;
        app.citySelect.provriceId = parseInt(code/10000)*10000;
        app.citySelect.cityId = parseInt(code/100)*100;
        app.citySelect.districtId = code;
        app.near.lat = res.location.lat;
        app.near.lng = res.location.lng;
        app.near.parent = app.citySelect.cityId;
        app.near.base = app.citySelect.provriceId;
        console.log('第一次进入',res);
        _this.setData({
          cityName:cityName,
          nearbyLeftTab:code,
          near:app.near
        })
        var provriceId = app.citySelect.provriceId;
        var cityId = app.citySelect.cityId;
        var cityData = area[provriceId].children[cityId];
        _this.setData({
          cityData:cityData
        })
        var argu = {
          lat:app.near.lat,
          lng:app.near.lng,
          type:-1, //店铺分类
          city: app.citySelect.cityId,
          county: app.citySelect.districtId,
          sort:-1,
          page:1
        }
        return httpClient.getListIndex(argu)
      }).then((data)=>{
        console.log('ListIndex: ',data);
        _this.setData({
          shop_List:data?data.list || [] : [],
          count:data?data.count || 1:1
        })
      }).catch(e => console.log(e));
      app.oneDayOneLogin = false;
    }else{
      var cityName = area[app.citySelect.provriceId].children[app.citySelect.cityId].name;
      _this.setData({
        cityName:cityName,
        nearbyLeftTab:app.citySelect.districtId
      })
      /**
       * 获取首页商铺列表
       */
      var provriceId = app.citySelect.provriceId;
      var cityId = app.citySelect.cityId;
      var cityData = area[provriceId].children[cityId];
      _this.setData({
        cityData:cityData,
        allFoodTab:0,
        nearbyTab:-1,
        nearbyLeftTab:-1,
        softListTab:0
      })
      var argu = {
        lat:cityData.lat,
        lng:cityData.lng,
        type:(_this.data.allFoodTab == 0?-1:_this.data.all_food), //店铺分类
        city:app.citySelect.cityId,
        county:app.citySelect.districtId,
        sort:(_this.data.softListTab == 0?-1:_this.data.softListTab),
        page:1
      }
      httpClient.getListIndex(argu).then((data)=>{
        console.log('ListIndex: ',data);
        if(data){
          _this.setData({
            shop_List:data?data.list || []:[],
            count:data.count || 1
          })
        }else{
          _this.setData({
            shop_List:[],
            count: 1
          })
        }
      }).catch((res)=>{

      })
    }
    
    
   
   
    /**
     * 获取天气
     */
    httpClient.getWeather().then((res)=>{
      var data = res.currentWeather[0].date;
      var weatherDesc = res.currentWeather[0].weatherDesc;
      console.log(data);
      var str = parseInt(data.split(':')[1]);
      console.log(str);
      _this.setData({
        temperature:str
      })
    }).catch(()=>{

    })

  
  
    /**
     * 获取店铺信息
     */
    httpClient.getStoreDetail().then((data)=>{
      console.log('店铺信息为:', data);
    }).then((e)=>{
      console.log('店铺信息为:', e);
    }).catch(e => console.log(e))

  },

  /**
   * 重新获取店铺数据
   */
  getListIndex() {
    var httpClient = new Http();
    var _this = this;
    var provriceId = app.citySelect.provriceId;
    var cityId = app.citySelect.cityId;
    var cityData = area[provriceId].children[cityId];
    var argu = {
      lat: this.data.nearbyLeftTab ==-1?app.near.lat:cityData.lat,
      lng: this.data.nearbyLeftTab ==-1?app.near.lng:cityData.lng,
      type: (_this.data.allFoodTab == 0 ? -1 : _this.data.allFoodTab), //店铺分类
      city: this.data.nearbyLeftTab ==-1?-1:app.citySelect.cityId,
      county:this.data.nearbyLeftTab ==-1?this.data.nearbyTab:app.citySelect.districtId,
      sort: (_this.data.softListTab == 0 ? -1 : _this.data.softListTab),
      page: 1
    }
    httpClient.getListIndex(argu).then((data) => {
      console.log('ListIndex: ', data);
      _this.setData({
        shop_List: data?data.list || []:[],
        count: 1
      })
    })
  },
  /**
   * 页面下拉触底事件
   */
  onReachBottom() {
    console.log('下拉触底');
    this.nextPage();
  },
  /**
   * 导航到shop页面
   */
  toShop(e) {
    app.currentShopId = e.currentTarget.dataset.shopid;
    console.log('全局shopId改变:', app.currentShopId );
    wx.navigateTo({
      url: "../shop/shop?shopId="+e.currentTarget.dataset.shopid
    })
  },
  toSwichtcity(){
    wx.navigateTo({
      url: '../switchcity/switchcity'
    })
  },
  //店铺列表
  toshopList(e) {
    var index = e.currentTarget.dataset.index;
    wx.navigateTo({
      url: '../shop_list/shop_list?foodType='+index
    })
    this.setData({
      idx:e.currentTarget.dataset.index
    })
  },
  /**
   * 
   */
  changeIndicatorDots: function (e) {
    this.setData({
      indicatorDots: !this.data.indicatorDots
    })
  },
  /**
   * 
   */
  changeAutoplay: function (e) {
    this.setData({
      autoplay: !this.data.autoplay
    })
  },
  /**
   * 
   */
  intervalChange: function (e) {
    this.setData({
      interval: e.detail.value
    })
  },
  //我的积分页面签到
  gosign(){
   wx.navigateTo({
    url:'../points/points'
   })
  },
  // //获取用户积分
  // getUserIters(){
  //   var httpClient = new Http();
  //   httpClient.getUserIntegral({token:app.globalData.token}).then((data)=>{
  //     console.log("我的积分余额",data);
  //     if(data.is_sign==1){
  //       app.issigned= false;
  //       this.setData({    
  //         issign:false
  //       })
  //     }else if(data.is_sign==2){
  //       app.issigned= true;
  //       this.setData({
  //         issign:true
  //       })
  //     }
  //   })
  //  },
  /**
   * 
   */
  durationChange: function (e) {
    this.setData({
      duration: e.detail.value
    })
  },
  /**
   * 点击->附近选项卡左侧回调(没选择真实数据以假数据为准)
   */
  clickNearbyLeft: function(e){
    this.setData({
      nearbyLeftTab: e.target.dataset.type
    })
    app.citySelect.districtId = e.target.dataset.type;
    console.log(this.data.nearbyLeftTab);
    if(e.target.dataset.type != -1){
      this.closeAllMark();
      this.getListIndex();
      this.setData({
        nearbyTab:-1
      })
    }
  },
  /**
   * 全部美食 选中结果回调
   */
  clickAllFoodSelect: function(e){
    console.log('选中了全部美食 选项卡选中结果: ', e);
    this.setData({
      allFoodTab: e.target.dataset.type
    })
    this.closeAllMark();
    this.getListIndex();
  },
  /**
   * 附近选项卡 选中结果回调
   */
  clickNearbySelect: function(e){
    console.log('选中了附近 选项卡选中结果: ',e);

    this.setData({
      nearbyTab: e.target.dataset.type,
    })
    this.closeAllMark();
    this.getListIndex();
  },
  /**
   * 距离排序选项卡  选中结果回调
   */
  clickSoftListSelect: function(e){
    console.log('选中了 距离排序 选项卡选中结果: ', e);
    this.setData({
      softListTab: e.target.dataset.type
    })
    this.closeAllMark();
    this.getListIndex();
  },
  /**
   * 附近弹出层
   */
  markNearbyCancle: function(e){
    this.setData({
      markNearby: false
    })
  },
  /**
   * 全部美食弹出层
   */
  markAllFoodCancle: function(e){
    this.setData({
      markAllFood: false
    })
  },

  /**
   *距离排序弹出层 
   */
  markSoftCancle: function(e){
    this.setData({
      markSoft: false
    })
  },
  /**
   * 进入全部美食弹出层
   */
  enterMarkAllFood: function(e){
    this.setData({
      markNearby:false,
      markAllFood: true,
      markSoft: false
    })
    console.log("进入全部美食弹出层");
  },
  /**
   * 关闭所有弹出层
   */
   closeAllMark: function(e){
     this.setData({
       markNearby: false,
       markAllFood: false,
       markSoft: false
     })
     console.log('关闭所有弹出层');
   },
  /**
   * 进入附近弹出层
   */
  enterMarkNearby: function(e){
    this.setData({
      markNearby: true,
      markAllFood: false,
      markSoft: false
    })
    console.log("进入附近弹出层");
  },

  /**
   * 进入距离排序弹出层
   */
  enterMarkSoftList: function(e){
    this.setData({
      markNearby: false,
      markAllFood: false,
      markSoft: true
    })
    console.log("进入距离排序弹出层");
  },

  next(){
    if(this.data.searchBool){
      this.nextSearchPage();
    }else{
      this.nextPage();
    }
  },
  /**
   * 下一頁
   */
  nextPage(){
     /**
       * 获取首页商铺列表
       */
      var _this = this;
      var provriceId = app.citySelect.provriceId;
      var cityId = app.citySelect.cityId;
      var cityData = area[provriceId].children[cityId];
      var page = _this.data.page;
      var argu = {
        lat:cityData.lat,
        lng:cityData.lng,
        type:(_this.data.allFoodTab == 0?-1:_this.data.all_food), //店铺分类
        city:app.citySelect.cityId,
        county:app.citySelect.districtId,
        sort:(_this.data.softListTab == 0?-1:_this.data.softListTab),
        page:++page
      }
      httpClient.getListIndex(argu).then((data)=>{
        console.log('ListIndex: ',data);
        if(data){
          _this.setData({
            shop_List:data?data.list || []:[],
            count:data.count || 1,
            page:page
          })
        }else{
          wx.showToast({
            title: '已经触底',
            icon: 'loading',
            duration: 500
          })
        }
      })
  },

  /**
   * 搜索下一页
   */
  nextSearchPage(){
    var _this = this;
    var page = this.data.page;
    var provriceId = app.citySelect.provriceId;
    var cityId = app.citySelect.cityId;
    var cityData = area[provriceId].children[cityId];
    httpClient.search({
      page:++page,
      keyword:e.detail.value,
      lat:cityData.lat,
      lng:cityData.lng,
      type:(_this.data.allFoodTab == 0 ? -1 : _this.data.allFoodTab),
      city:app.citySelect.cityId,
      county:app.citySelect.districtId,
      sort:(_this.data.softListTab == 0 ? -1 : _this.data.softListTab)
    }).then((data)=>{
      if(data && data.list){
        _this.setData({
          shop_List:data?data.list || []:[],
          count:data.count || 1,
          page:page
        })
      }else{
        wx.showToast({
          title: '搜索触底',
          icon: 'loading',
          duration: 500
        })
      }
    }).catch((res)=>{
      wx.showToast({
        title: '搜索触底',
        icon: 'loading',
        duration: 500
      })
    })
  },
  /**
   * 搜索
   * var provriceId = app.citySelect.provriceId;
    var cityId = app.citySelect.cityId;
    var cityData = area[provriceId].children[cityId];
    var argu = {
      lat: cityData.lat,
      lng: cityData.lng,
      type: (_this.data.allFoodTab == 0 ? -1 : _this.data.allFoodTab), //店铺分类
      city: app.citySelect.cityId,
      county:app.citySelect.districtId,
      sort: (_this.data.softListTab == 0 ? -1 : _this.data.softListTab),
      page: 1
    }
   */
  searchShop(e){
    var _this = this;
    if(e.detail.value.length <=0){
      _this.setData({
        page:1,
        searchBool:false
      })
      this.getListIndex();
      return;
    }
    var provriceId = app.citySelect.provriceId;
    var cityId = app.citySelect.cityId;
    var cityData = area[provriceId].children[cityId];
    httpClient.search({
      page:1,
      keyword:e.detail.value,
      lat:cityData.lat,
      lng:cityData.lng,
      type:(_this.data.allFoodTab == 0 ? -1 : _this.data.allFoodTab),
      city:app.citySelect.cityId,
      county:app.citySelect.districtId,
      sort:(_this.data.softListTab == 0 ? -1 : _this.data.softListTab)
    }).then((data)=>{
      _this.setData({
        shop_List:data?data.list || []:[],
        count:data.count || 1,
        searchBool:true
      })
    }).catch((res)=>{
      wx.showToast({
        title: '正在搜索',
        icon: 'loading',
        duration: 500
      })
    })
  },
  /**
   * 清空输入框的数据
   * @param {*} e 
   */
  searchEnd(e){
    
  }
})
 

================================================
FILE: client/pages/index/index.json
================================================
{
    "navigationBarBackgroundColor": "#ffffff",
    "navigationBarTextStyle": "black",
    "backgroundColor": "#eeeeee",
    "backgroundTextStyle": "light"
}

================================================
FILE: client/pages/index/index.wxml
================================================
<!-- index.wxml -->
<!-- <view hidden='{{canuse}}' >
  <open-data type="userAvatarUrl"></open-data>
  <open-data type="userNickName"></open-data>

  
  <button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权登录</button>
  <view wx:else>请升级微信版本</view>
</view> -->
<!-- 附近 -->
<import src="../component/nearby.wxml" />
<!-- 显示下拉框tabbar -->
<import src="../component/index_list.wxml" />
<!-- 全部食品 -->
<import src="../component/all_food.wxml" />
<!-- 排序 -->
<import src="../component/soft_list.wxml" />
<!-- 全部美食弹窗 bindtap="markAllFoodCancle"  bindtap='closeAllMark' -->
<view class="mask" hidden="{{!markAllFood}}">
  <template is="idnex_viewst" data="{{nav_indexData,cityData,soft_list,allFoodTab,nearbyLeftTab,isNearbySelect,nearbyTab,softListTab,curTab,near}}" />
  <template is="all_foodst" data="{{nav_indexData,allFoodTab}}"></template>
</view>
<!-- 附近弹窗  bindtap="markNearbyCancle" bindtap='closeAllMark' -->
<view class="mask" hidden="{{!markNearby}}">
  <template is="idnex_viewst" data="{{nav_indexData,cityData,soft_list,allFoodTab,nearbyLeftTab,isNearbySelect,nearbyTab,softListTab,curTab,dis_list,near}}" />
  <template is="nearbyst" data="{{cityData,nearbyLeftTab,nearbyTab,dis_list,windowHeight,near}}"></template>
</view>
<!-- 距离排序弹窗  bindtap="markSoftCancle"  bindtap='closeAllMark' -->
<view class="mask" hidden="{{!markSoft}}">
  <template is="idnex_viewst" data="{{nav_indexData,cityData,soft_list,allFoodTab,nearbyLeftTab,isNearbySelect,nearbyTab,softListTab,curTab,near}}" />
  <template is="soft_listst" data="{{soft_list,softListTab}}"></template>
</view>
<view class="container">
  <view class='header'>
    <view class='weather'>
      <image src="../images/index_03.jpg"></image>
      <text>{{temperature}}</text>
    </view>
    <view class='position' bindtap='toSwichtcity'>
      <text>{{cityName}}</text>
      <image src='../images/down_06.jpg'></image>
    </view>
    <view class='search_box'>
      <input type='text' class='weui-input search' placeholder='请输入店铺名' placeholder-style="color:#cccbcb;" bindconfirm="searchShop" bindinput="searchEnd" />
      <icon type='search' size="14"></icon>
    </view>
  </view>
  <!-- banner -->
  <swiper indicator-dots="true" autoplay="true" interval="5000" duration="500" width="100%" indicator-color="#c9d4d4" indicator-active-color="#ff6b12" circviewar="true">
    <swiper-item wx:for="{{banner_indexData}}" wx:key="*this">
      <image src="{{URL.PROJECT_ROOT+item.img}}" data-bannerId="{{item.id}}" data-target="{{item.target}}" data-type="{{item.type}}" title="{{item.title}}" class="sviewde-image"></image>
    </swiper-item>
  </swiper>
  <!-- icon列表 -->
  <view class="icon" style="display:flex;width:100%">
    <!-- <view style="width:17%">
        <swiper interval="5000" duration="500" width="100%" class='iconviewst' display-multiple-items="1" >
          <swiper-item  bindtap='toshopList'  data-shopTypeId='{{nav_indexData[0].id}}' data-index="0">
            <view  class="{{idx==0?'active':' '}}">
              <image src="{{URL.PROJECT_ROOT+nav_indexData[0].icon}}" class="sviewde-image"></image>
              <text>{{nav_indexData[0].title}}</text>
            </view>
          </swiper-item>
      </swiper>
    </view> -->
    <view class="sw-right" style="width:100%">
      <swiper interval="5000" duration="500" width="100%" autoplay="{{false}}"  class='iconviewst' display-multiple-items="5" >
        <swiper-item  bindtap='toshopList'  wx:for="{{nav_indexData}}" wx:key="*this" data-index="{{index}}" data-shopTypeId='{{item.id}}'>
          <view  class="{{index==idx?'active':' '}}">
            <image src="{{URL.PROJECT_ROOT+item.icon}}" class="sviewde-image"></image>
            <text>{{item.title}}</text>
          </view>
        </swiper-item>
      </swiper>
    </view>
  </view>

  <view class="line"></view>
  <!-- 筛选 -->
  <template is="idnex_viewst" data="{{nav_indexData,cityData,soft_list,allFoodTab,nearbyLeftTab,isNearbySelect,nearbyTab,softListTab,curTab,dis_list,near}}" />
  <view class="shop_contain">
    <view class="shop_center">
      <dl bindtap='toShop' wx:for="{{shop_List}}" wx:key="*this" data-shopid="{{item.id}}">
        <dt>
          <image src="{{URL.PROJECT_ROOT + item.logo}}"></image>
        </dt>
        <dd>
          <view class="shop_right_top">
            <view class='title'>{{item.title}}</view>
            <view class="star_price">
              <view class="star">
                <image src='../images/6shop_21.png' wx:for="{{item.score}}" wx:key=""></image>
                <text wx:if='{{item.score==0}}'>暂无评分</text>
              </view>
              <view class="price">
                人均
                <text>¥{{item.price/100}}</text>
                /人
              </view>
            </view>
            <view class="more">
              <view class='more_left'>
                <text>{{item.name}}</text>
                <text>{{item.type}}</text>
              </view>
              <view class='more_right'>{{item.distance}}</view>
            </view>
          </view>
          <view class="shop_right_bottom" wx:if="{{item.preferential.decrease}}">
            <view wx:if="{{item.preferential.decrease}}" wx:key="*this" hidden="{{i>1}}" data-index="{{i}}" wx:for="{{item.preferential.decrease}}" wx:for-item="k" wx:for-index="i">
              <text>满减</text>
              满{{k[0]}}减{{k[1]}}
            </view>
            <!-- <view wx:if="{{item.preferential.send}}" hidden="{{i>1}}" data-index="{{i}}" wx:for="{{item.preferential.send}}" wx:for-item="k" wx:for-index="i">
              <text >优惠</text>
                满{{k[0]}}送代金券{{k[1]}}元
            </view> -->
          </view>
        </dd>
      </dl>
    </view>
    <view class="empty" wx:if="{{searchBool && shop_List.length==0 }}">
      <image src="../images/empty3.png"></image>
      <text>亲,没搜索到东西呢</text>
    </view>
    <view class="empty" wx:if="{{!searchBool && shop_List.length==0 }}">
      <image src="../images/empty_shop.png"></image>
      <text>亲,这个地区没有店铺呢</text>
    </view>
  </view>
  <!-- <image src="../images/sign.png" class='sign_btn' wx:if="{{issign}}" bindtap='gosign'></image> -->
</view>

================================================
FILE: client/pages/index/index.wxss
================================================
/**index.wxss**/
.container {
  background: #f5f5f9;
}
.header {
  width: 88%;
  height: 84rpx;
  padding: 5rpx 6%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: #fff;
}
.header .weather {
  width: 46rpx;
  height: 60rpx;
  /* height: 140rpx; */
}
.header .weather image {
  width: 46rpx;
  height: 42rpx;
  display: block;
}
.header .weather text {
  width: 100%;
  height: 16rpx;
  display: block;
  font-size: 20rpx;
  text-align: center;
}
.header .position {
  width: 136rpx;
  height: 100%;
  /* viewne-height: 30rpx; */
  display: flex;
  align-items: center;
  justify-content: center;
}
.header .position text {
  font-size: 26rpx;
}
.header .position image {
  width: 18rpx;
  height: 10rpx;
  margin-left: 10rpx;
}
.header .search_box {
  width:450rpx;
  /* height:62rpx; */
  position: relative;
  display: flex;
  align-items: center;
}
.header .search_box .search {
  width: 100%;
  height: 60rpx;
  font-size: 24rpx;
  background: #f4f4f4;
  border-radius:60rpx;
  padding-left: 50rpx;
}
.header .search_box icon {
  position: absolute;
  left: 18rpx;
  /* top: 28rpx; */
}
swiper {
  width: 100%;
  height: 300rpx;
}
swiper swiper-item image {
  display: block;
  width: 100%;
  height: 100%;
}
.iconviewst {
  width: 94%;
  height: 145rpx;
  padding: 26rpx 3% ;
  background: #fff;
}
.iconviewst swiper-item {
  height: 110rpx;
  display: flex;
  justify-content: center;
  align-items: center;
}
.sw-item{
  height: 110rpx;
  display: flex;
  justify-content: center;
  align-items: center;
}
.iconviewst swiper-item view {
  width: 92rpx;
  height: 100%;
}
.iconviewst swiper-item view image {
  display: block;
  width: 100%;
  height: 92rpx;
}
.iconviewst swiper-item view text {
  font-size: 24rpx;
}
.iconviewst swiper-item view.active image {
  border: 4rpx solid #ffb182;
  padding: 3rpx;
  border-radius: 50%;
  box-sizing: border-box;
}
.iconviewst swiper-item view.active text {
  color: #ff6b12;
}
.iconviewst swiper-item view text {
  display: block;
  text-align: center;
  margin-top: 10rpx;
  color: #333;
  font-size: 23rpx;
}
.line {
  width: 96%;
  margin-left: 4%;
  background: #ddd;
  height: 1rpx;
}
.select_container {
  width: 100%;
  background: #fff;
  height: 90rpx;
}
.select_container .selec_center {
  width: 96%;
  height: 100%;
  background: #fff;
  margin-left: 4%;
  box-sizing: border-box;
}
.select_container .selec_center view {
  width: 98%;
  height: 100%;
  padding-right: 2%;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.select_container .selec_center view view {
  font-size: 26rpx;
  color: #333;
  display: flex;
  align-items: center;
  justify-content: center;
}
.select_container .selec_center view view:first-of-type {
  justify-content: flex-start;
}
.select_container .selec_center view view:last-of-type {
  justify-content: flex-end;
}
.select_container .selec_center view view span {
  display: inline-block;
  width: 0;
  height: 0;
  border-left: 8rpx solid transparent;
  border-right: 8rpx solid transparent;
  border-top: 8rpx solid #888888;
  margin-left: 10rpx;
}
.nearby {
  width: 100%;
  background: #fff;
}
.shop_contain {
  width: 100%;
  box-sizing: border-box;
  background: #fff;
  margin-top: 20rpx;
}
.shop_contain .shop_center {
  width: 92%;
  padding: 0 4%;
}
.shop_contain dl {
  width: 100%;
  padding: 20rpx 0rpx 18rpx;
  border-bottom: 1rpx solid #DDDDDD;
  display: flex;
}
.shop_contain dl dt {
  width: 178rpx;
  height: 178rpx;
  margin-right: 33rpx;
}
.shop_contain dl dt image {
  display: block;
  width: 100%;
  height: 100%;
}
.shop_contain dl dd {
  width: 500rpx;
}
.shop_contain dl dd .shop_right_top {
  /* padding: 36rpx 4% 36rpx 36rpx; */
  /*2px*/
  /* border-bottom: 1rpx dashed #DDDDDD; */
  box-sizing: border-box;
  color: #333333;
}
.shop_contain dl dd .shop_right_top .title {
  font-size: 30rpx;
  font-weight: bold;
  color: #333;
  margin-bottom: 24rpx;
}
.shop_contain dl dd .shop_right_top .star_price {
  display: flex;
  justify-content: space-between;
  margin-bottom: 25rpx ;
}
.shop_contain dl dd .shop_right_top .star_price .star {
  width: 180rpx;
  display: flex;
  align-items: center;
}
.shop_contain dl dd .shop_right_top .star_price .star image {
  display: inline-block;
  width: 24rpx;
  height: 22rpx;
}
.shop_contain dl dd .shop_right_top .star_price .star text {
  /*10px*/
  font-size: 24rpx;
  margin-left: 10rpx;
}
.shop_contain dl dd .shop_right_top .star_price .price {
  font-size: 24rpx;
  color: #333;
}
.shop_contain dl dd .shop_right_top .star_price .price text {
  color: #ff2b4d;
}
.shop_contain dl dd .shop_right_top .more {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 28rpx;
}
.shop_contain dl dd .shop_right_top .more .more_left {
  /*23px*/
  font-size: 24rpx;
  font-weight: bold;
}
.shop_contain dl dd .shop_right_top .more .more_left text {
  display: inviewne-block;
  /*4px 15px*/
  padding: 0rpx 15rpx;
  
  background: #f5f5f9;
  /*3px*/
  border-radius: 5rpx;
  /*10px*/
  margin-right: 10rpx;
  height: 32rpx;
  line-height: 32rpx;
  text-align: center;
}
.shop_contain dl dd .shop_right_top .more .more_right {
  /*18px*/
  font-size: 24rpx;
  font-weight: normal;
}
.shop_contain dl dd .shop_right_bottom {
  padding-top: 19rpx;
  /*2px*/
  box-sizing: border-box;
  font-weight: normal;
  border-top:1rpx dashed #DDDDDD;
}
.shop_contain dl dd .shop_right_bottom view {
  /*23px*/
  font-size: 24rpx;
  color: #888;
}
.shop_contain dl dd .shop_right_bottom view:first-of-type {
  /*10px*/
  margin-bottom: 10rpx;
}
.shop_contain dl dd .shop_right_bottom view text {
  display: inline-block;
  /*3px 13px*/
  /* padding: 3rpx  13rpx; */
  /*2px*/
  border: 2rpx solid #ff6b12;
  /*5px*/
  border-radius: 5rpx;
  /*10px*/
  margin-right: 10rpx;
  color: #ff6b12;
  width:100rpx;
height:32rpx;
text-align:center;
line-height:32rpx;

}
.mask {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 999;
  background-color: #fff;
}
.all-food-con,
.nearby,
.soft-list {
  border-top: 1rpx solid #ddd;
  padding: 43rpx 4%;
  position: relative;
}
.all-food-con::before,
.nearby::before,
.soft-list::before {
  content: "";
  display: block;
  width: 103rpx;
  height: 2rpx;
  background: #ff6b12;
  position: absolute;
  top: 0;
}
.nearby::before {
  left: 42%;
}
.all-food-con::before {
  left: 4%;
}
.soft-list::before {
  right: 4%;
}
.all-food-con-child,
.soft-list-con-child {
  font-size: 26rpx;
  color: #666;
  margin-bottom: 62rpx;
}
.all-food-con-child.active,
.soft-list-con-child.active {
  color: #ff6b12;
}
.nearby {
  display: flex;
  height: 6000rpx;
  overflow: scroll;
}
.left,
.right {
  flex: 1;
  font-size: 26rpx;
  color: #666;
  text-align: center;
  height: 100%;
  overflow: scroll;
}
.nearby {
  padding: 0;
}
.l-con,
.r-con {
  height: 90rpx;
  line-height: 90rpx;
}
.l-con {
  background: #f4f4ff;
}
.l-con.active {
  background: #fff;
}
.right {
  text-align: left;
  padding-left: 24rpx;
  box-sizing: border-box;
}
.right .r-con {
  color: #888;
  border-bottom: 1rpx solid #ddd;
}
.right .r-con.active {
  color: #ff6b12;
}
/* .l-con:first-of-type {
  background: #fff;
} */
.r-con:first-of-type {
  /* color: #ff6b12; */
}
.empty{
  width: 100%;
  height: 300rpx;
  padding: 50rpx 0;
}
.empty image{
  display: block;
  width: 105rpx;
  height: 90rpx;
  margin: 20rpx auto;
}
.empty text{
  display: block;
  width: 100%;
  text-align: center;
  font-size: 26rpx;
  color: #666;
}

.sign_btn{
  display: block;
  width: 130rpx;
  height: 130rpx;
  position: fixed;
  bottom: 167rpx;
  right: 9rpx;
}

================================================
FILE: client/pages/index/type.js
================================================


export var nearby = [
    {
        text: '附近1',
        content: [
            {
                text: '500米',
            },
            {
                text: '800米',
            },
            {
                text: '1000米',
            },
            {
                text: '2000米',
            },
            {
                text: '5000米',
            }
        ]
    }, {
        text: '热门商区',

        content: [
            {
                text: '500米',
            },
            {
                text: '800米',
            },
            {
                text: '1000米',
            },
            {
                text: '2000米',
            },
            {
                text: '5000米',
            }
        ]
    }, {
        text: '丰台',

    }, {
        text: '东城',

    }, {
        text: '西城',

    }, {
        text: '石景山',

    }, {
        text: '朝阳区',

    }, {
        text: '海淀区',

    }, {
        text: '某个区',

    }, {
        text: '第二区',

    }, {
        text: '第三区',

    }
]

export var nav_data_0  = {
    icon:"upload/imgs/20180810/1533880146258802.png",
    id:-1,
    title:"全部"
}

================================================
FILE: client/pages/mycenter/mycenter.js
================================================
// pages/mycenter/mycenter.js
var app = getApp();
import {Http} from '../../utils/httpClient' ;
var httpClient = new Http();
Page({

  /**
   * 页面的初始数据
   */
  data: {
 
      userName:' ',
      userAvatarUrl:'',
      issign:1,
      /**
       * 当前金钱
       */
      remaind:'98.00',
      /**
       * 当前积分
       */
      points:'98',
      maskInputPassed:false,
      maskRevisePassed:false,
      /**
       * 是否已经设置密码
       */
      isOnePassed:false,
   

      /**
       * 输入框数据
       */
      inputData: {
        input_value: "",//输入框的初始内容
        value_length: 0,//输入框密码位数
        isNext: false,//是否有下一步的按钮
        get_focus: true,//输入框的聚焦状态
        focus_class: true,//输入框聚焦样式
        value_num: [1, 2, 3, 4, 5, 6],//输入框格子数
        height: "98rpx",//输入框高度
        width: "604rpx",//输入框宽度
        see: false,//是否明文展示
        interval: true,//是否显示间隔格子
      },
      inputData2:{
        input_value: "",//输入框的初始内容
        value_length: 0,//输入框密码位数
        isNext: true,//是否有下一步的按钮
        get_focus: false,//输入框的聚焦状态
        focus_class: false,//输入框聚焦样式
        value_num: [1, 2, 3, 4, 5, 6],//输入框格子数
        height: "98rpx",//输入框高度
        width: "604rpx",//输入框宽度
        see: false,//是否明文展示
        interval: true,//是否显示间隔格子
      },
      inputData3:{
        input_value: "",//输入框的初始内容
        value_length: 0,//输入框密码位数
        isNext: true,//是否有下一步的按钮
        get_focus: false,//输入框的聚焦状态
        focus_class: false,//输入框聚焦样式
        value_num: [1, 2, 3, 4, 5, 6],//输入框格子数
        height: "98rpx",//输入框高度
        width: "604rpx",//输入框宽度
        see: false,//是否明文展示
        interval: true,//是否显示间隔格子
      },
      /**
       * 绑定手机号
       */
      // bindIphoneNumber:0,
      // bindIphoneCodeNumber:0,
      // codeBool:false,
      // codetime:60,

      send: false,
      alreadySend: false,
      second: 60,
      disabled: true,
      buttonType: 'default',
      phoneNum: '',
      code: '',
      otherInfo: '',
      /**
       * 是否绑定了手机
       * 2是没有绑定 1是已经绑定
       */
      is_mobile:2
  },
  //获取积分余额数据
  getUserIters(){
    var httpClient = new Http();
    httpClient.getUserIntegral({token:app.globalData.token}).then((data)=>{
      console.log("我的积分余额",data);
      if(data.is_sign==1){
        this.setData({
          issign:2
        })        
      }else if(data.is_sign==2){
        this.setData({
          issign:1
        })
      }
    })
   },
   //去签到
   goSign(){
    var httpClient=new Http();
    //当前时间戳
   //  if(this.data.isSign == '已签到'){
   //    return;
   //  }
    var timestamp = Date.parse(new Date());
    timestamp = timestamp / 1000;
   //  console.log("当前时间戳为:" + timestamp);
    httpClient.clickSign({token:app.globalData.token,time:timestamp}).then((data)=>{
       console.log("点击签到",data);
       if(data.msg=="已签到"&&data.code==20001){
         wx.showToast({
           title: '已签到过了'        
         });                         
       } 
        this.setData({
          issign:2
        })
       
         
       
       //签到之后,数据改变,调取积分列表,更改弹窗里面的积分+7的值
      //  this.getIntegralList();
       //获取积分余额数据
      //  this.getUserIters();
      //  this.getSignLists();//调取签到列表,更改弹窗里面连续签到的值,signData.count
    })
  },

  showKey(e){
    if (!this.data.isOnePassed){
      this.showInputPassed();
    }else{
      // this.showRevisePassed();
      wx.showToast({
        title:'已设置支付密码'
      })
    }
  },
  
  closeKey(){
    if (!this.data.isOnePassed){
      this.showInputPassed();
    }else{
      this.showRevisePassed();
    }
  },
  // 当组件输入数字6位数时的自定义函数
  valueSix(e) {
    var httpClient = new Http();
    httpClient.getUserSetPassword({
      token:app.globalData.token,
      passWord:e.detail
    }).then((res)=>{
      if(res.code==200){
        wx.showToast({
          title: '支付成功',
          icon: 'success',
          duration: 2000
        })
        this.closeKey();
      }else{
        wx.showToast({
          title: res.msg,
          icon: 'filed',
          duration: 2000
        })
       
      }
    })
    console.log("1");
    // 模态交互效果

   
    console.log(this.data.inputData);
  },
  valueSixRe(e){
    //输入完成第一个了
    this.data.inputData2.input_value = e.detail;
  },
  valueSixRe2(e){
    var httpClient = new Http();
    //第二个输入完成
      httpClient.setUserModifyPassword({
        token:app.globalData.token,
        passWord:this.data.inputData2.input_value,
        newPassWord:e.detail
      }).then((res)=>{
        if(res.code==200){
          wx.showToast({
            title: res.msg,
            icon: 'success',
            duration: 2000
          })
          this.closeKey();
        }else{
          wx.showToast({
            title: res.msg,
            icon: 'filed',
            duration: 2000
          })
          
        }
      })
      .catch((e)=>{
        wx.showToast({
          title: e.msg,
          icon: 'filed',
          duration: 2000
        })
        this.data.inputData2.input_value = '';
          this.data.inputData3.input_value = '';
          this.setData({
            inputData2:this.data.inputData2,
            inputData3:this.data.inputData3
          })
      })
  },
  /**
   * 初始化数据函数 
   * 调用接口
   */
  initData(){
    var _this = this;
    var httpClient = new Http();
    wx.getUserInfo({
      success: function (res) {
        console.log(res);
        _this.setData({
          userName: res.userInfo.nickName,
          userAvatarUrl: res.userInfo.avatarUrl
        })
      }
    })

    httpClient.getUserInfo({token:app.globalData.token}).then((res)=>{
      if(res){
        this.setData({
          remaind:(res.amount/100).toFixed(2),
          points:res.score,
          is_mobile:res.is_mobile
        })
      }
    })

    /**
     * 检测是否已经设置密码
     */
    httpClient.getUserCheckPassword({
      token:app.globalData.token
    }).then((res)=>{
      if(res.status == 1){
        this.setData({
          isOnePassed:true
        })
      }else if(res.status == 2){
        this.setData({
          isOnePassed:false
        })
      }
    })
    this.getUserIters();

  },

  /**
   * 显示隐藏输入密码
   */
  showInputPassed(){
    this.setData({
      maskInputPassed:!this.data.maskInputPassed
    })
  },

  /**
   *显示隐藏修改密码 
   */
  showRevisePassed(){
    this.setData({
      maskRevisePassed: !this.data.maskRevisePassed
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.initData();
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    
  },
  
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    this.initData();
  },
  showTel:function(){
    if(this.data.is_mobile == 1){
      wx.showToast({
        title:'已经绑定手机'
      })
    }else{
      this.setData({
        control: !this.data.control
      })
    }
     
  },

  toPassWord(){
    if(this.data.is_mobile == 1){
      wx.navigateTo({
        url:'../droppassword/droppassword'
      })
    }else{
      wx.showToast({
        title:'您还没有绑定手机'
      })
    }
   
  },
  checkOrder() {
    wx.switchTab({
      url: '../indent/indent'
    })
  },
  droppassword(){
    wx.navigateTo({
      url: '../droppassword/droppassword'
    })
  },
  // bindIphoneChange(e) {
  //   this.setData({
  //     bindIphoneNumber:e.detail.value
  //   })
  // },
  // bindIphoneCodeChange(e) {
  //   this.setData({
  //     bindIphoneCodeNumber:e.detail.value
  //   })
  // },
  /**
   * 获取验证码
   */
  // getCode(){
  //   var httpClient = new Http();
  //   var _this = this;
  //   if(this.data.codeBool && this.data.codetime>0){

  //   }else if(this.data.codeBool && this.data.codetime<=0){
  //     _this.setData({
  //       codetime:60,
  //     })
  //     clearInterval(_this.data.codeBool);
  //     _this.setData({
  //       codeBool:false
  //     })
  //   }else if(!this.data.codeBool && this.data.codetime==60){
      
  //     httpClient.getBindingVerificationCode({
  //       token:app.globalData.token,
  //       mobile:this.data.bindIphoneNumber
  //     }).then((res)=>{
  //       if(res.code == 200){
  //         this.data.codeBool = setInterval("CountDown()", 1000);
  //         function CountDown(){
  //           _this.data.codetime--;
  //           _this.setData({
  //             codetime:this.data.codetime
  //           })
  //         }
  //         wx.showToast({
  //           title: res.msg,
  //           icon: 'succeed',
  //           duration: 2000
  //         })
  //       }else{
  //         wx.showToast({
  //           title: res.msg,
  //           icon: 'filed',
  //           duration: 2000
  //         })
  //       }
  //     })
  //     .catch((res)=>{
  //       wx.showToast({
  //         title: res.msg,
  //         icon: 'filed',
  //         duration: 2000
  //       })
        
  //     })
  //   }
  // },

  // bindIphone(){
  //   var _this = this;
  //   var httpClient = new Http();
  //   httpClient.getUserBindingMobile({
  //     token:app.globalData.token,
  //     mobile:this.data.bindIphoneNumber,
  //     code:this.data.bindIphoneCodeNumber
  //   }).then((res)=>{
  //     if(res.code ==200){
  //       _this.setData({
  //         control: false
  //       })
  //       wx.showToast({
  //         title: res.msg,
  //         icon: 'succeed',
  //         duration: 2000
  //       })
  //     }else{
  //       _this.setData({
  //         control: false
  //       })
  //       wx.showToast({
  //         title: res.msg,
  //         icon: 'filed',
  //         duration: 2000
  //       })
  //     }
  //   })
  //   .catch((res)=>{
  //     wx.showToast({
  //       title: res.msg,
  //       icon: 'filed',
  //       duration: 2000
  //     })
  //   })
  // },
 toamount(){
    wx.navigateTo({
      url: "../pocket/pocket"
    })
  },
  points(){
    wx.navigateTo({
      url: "../points/points"
    })
  },  
  closetelephoneMask(){
    this.setData({
      control:false
    })
  },  
  inputPhoneNum: function (e) {
    let phoneNum = e.detail.value
    if (phoneNum.length === 11) {
      let checkedNum = this.checkPhoneNum(phoneNum)
      if (checkedNum) {
        this.setData({
          phoneNum: phoneNum
        })
        console.log('phoneNum' + this.data.phoneNum)
        this.showSendMsg()
        this.activeButton()
      }
    } else {
      this.setData({
        phoneNum: ''
      })
      this.hideSendMsg()
    }
  },

  checkPhoneNum: function (phoneNum) {
    let str = /^1\d{10}$/
    if (str.test(phoneNum)) {
      return true
    } else {
      wx.showToast({
        title: '手机号不正确',
        image: '../../images/fail.png'
      })
      return false
    }
  },

  showSendMsg: function () {
    if (!this.data.alreadySend) {
      this.setData({
        send: true
      })
    }
  },

  hideSendMsg: function () {
    this.setData({
      send: false,
      disabled: true,
      buttonType: 'default'
    })
  },

  sendMsg: function () {
    httpClient.getBindingVerificationCode({
      token:app.globalData.token,
      mobile:this.data.phoneNum
    }).then((res)=>{
      if(res.code ==200){
        this.setData({
          alreadySend: true,
          send: false
        })
        this.timer()
      }else{
        wx.showToast({
          title:res.msg
        })
      }
    
    }).catch((e)=>{
      wx.showToast({
        title:e.msg?e.msg:'手机号错误',
        icon: 'loading'
      })
    })
  },

  timer: function () {
    let promise = new Promise((resolve, reject) => {
      let setTimer = setInterval(
        () => {
          this.setData({
            second: this.data.second - 1
          })
          if (this.data.second <= 0) {
            this.setData({
              second: 60,
              alreadySend: false,
              send: true
            })
            resolve(setTimer)
          }
        }
        , 1000)
    })
    promise.then((setTimer) => {
      clearInterval(setTimer)
    })
  },

// 其他信息部分
  addOtherInfo: function (e) {
    this.setData({
      otherInfo: e.detail.value
    })
    this.activeButton()
    console.log('otherInfo: ' + this.data.otherInfo)
  },

// 验证码
  addCode: function (e) {
    this.setData({
      code: e.detail.value
    })
    this.activeButton()
    console.log('code' + this.data.code)
  },

 // 按钮
  activeButton: function () {
    let {phoneNum, code, otherInfo} = this.data
    console.log(code)
    if (phoneNum && code ) {
      this.setData({
        disabled: false,
        buttonType: 'primary'
      })
    } else {
      this.setData({
        disabled: true,
        buttonType: 'default'
      })
    }
  },

  onSubmit: function () {
    var _this = this;
    httpClient.getUserBindingMobile({
      token:app.globalData.token,
      mobile:this.data.phoneNum,
      code:this.data.code
    }).then((res)=>{
      if(res.data.code ==200){
        _this.setData({
          control: false,
          is_mobile:1
        })
        wx.showToast({
          title: '绑定成功',
          icon: 'succeed',
          duration: 2000
        })
      }else{
        wx.showToast({
          title: res.data.msg,
          icon: 'filed',
          duration: 2000
        })
      }
    })
    .catch((res)=>{
      wx.showToast({
        title: res.msg,
        icon: 'filed',
        duration: 2000
      })
    })
  }
})

================================================
FILE: client/pages/mycenter/mycenter.json
================================================
{
  "navigationBarBackgroundColor": "#f4823e",
  "navigationBarTitleText": "我的",
  "component": true,
  "usingComponents": { 
    "paySix": "../component/key_component/component"   
  }
}

================================================
FILE: client/pages/mycenter/mycenter.wxml
================================================
<!--pages/mycenter/mycenter.wxml-->

<view class="mask" wx:if="{{maskInputPassed}}" style='text-align:center;' catchtap='showInputPassed'>
  <view class="content">
      <view style='margin-bottom:50rpx;font-size:30rpx;color:#333;'>设置支付密码</view>
      <paySix 
      bindvalueSix="valueSix" 
      input_value="{{inputData.input_value}}" 
      value_length="{{inputData.value_length}}" 
      isNext="{{inputData.isNext}}" 
      get_focus="{{inputData.get_focus}}" 
      focus_class="{{inputData.focus_class}}" 
      value_num="{{inputData.value_num}}"
      height="{{inputData.height}}" 
      width="{{inputData.width}}" 
      see="{{inputData.see}}" 
      interval="{{inputData.interval}}">
      </paySix>
    </view>
  </view>
  <view class="mask" wx:if="{{maskRevisePassed}}" style='text-align:center;' catchtap='showRevisePassed'>
    <view class="content">
      <view style='margin:30rpx;font-size:30rpx;color:#333;'>修改支付密码 
        
      </view>
      <view style='margin:30rpx;font-size:26rpx;color:#666;'>原密码
        <span bindtap='droppassword' style="float:right;">找回密码</span>
      </view>
      <paySix 
      bindvalueSix="valueSixRe" 
      input_value="{{inputData2.input_value}}" 
      value_length="{{inputData2.value_length}}" 
      isNext="{{inputData2.isNext}}" 
      get_focus="{{inputData2.get_focus}}" 
      focus_class="{{inputData2.focus_class}}" 
      value_num="{{inputData2.value_num}}"
      height="{{inputData2.height}}" 
      width="{{inputData2.width}}" 
      see="{{inputData2.see}}" 
      interval="{{inputData2.interval}}">
      </paySix>
      <view style='margin:30rpx;font-size:26rpx;color:#666;'>新密码</view>
      <paySix 
      bindvalueSix="valueSixRe2" 
      input_value="{{inputData3.input_value}}" 
      value_length="{{inputData3.value_length}}" 
      isNext="{{inputData3.isNext}}" 
      get_focus="{{inputData3.get_focus}}" 
      focus_class="{{inputData3.focus_class}}" 
      value_num="{{inputData3.value_num}}"
      height="{{inputData3.height}}" 
      width="{{inputData3.width}}" 
      see="{{inputData3.see}}" 
      interval="{{inputData3.interval}}">
      </paySix>
    </view>
</view>
<view class='container'>
  <view class='top'>
    <image src='{{userAvatarUrl}}'></image>
    <view class='preson_infomation'>
      <text class='name'>{{userName}}</text>
      <text wx:if="{{issign==1}}" class='sign' style='margin-left:10rpx;' bindtap='goSign'>签到</text>
      <text wx:if="{{issign==2}}" class='sign signed' style='margin-left:10rpx;'>已签到</text>
      <view class='num'>
        <text bindtap='toamount'>余额:{{remaind}}</text>
        <text bindtap='points' >积分:{{points}}</text>
      </view>
    </view>
  </view>
  <view class='insert_img'>
    <image src="../images/my_07.jpg" class='prop' mode='widthFix'></image>
  </view>

  <view class='my_list'>
    <navigator url='../mytalk/mytalk'>
      <view class='list_part'>
        <text>我的点评</text>
        <image src='../images/right_10.png'></image>
      </view>
    </navigator>
    <navigator url='../pocket/pocket'>
      <view class='list_part'>
        <text>我的钱包</text>
        <image src='../images/right_10.png'></image>
      </view>
    </navigator>
    <navigator url='../points/points'>
      <view class='list_part'>
        <text>我的积分</text>
        <image src='../images/right_10.png'></image>
      </view>
    </navigator>
    <navigator url='../coupon/coupon'>
      <view class='list_part'>
        <text>我的优惠券</text>
        <image src='../images/right_10.png'></image>
      </view>
    </navigator>
    <view class='cortlTel' bindtap='showKey'>
      <view class='list_part'>
        <text>支付密码</text>
        <image src='../images/right_10.png'></image>
      </view>
    </view>
   
     <view class='cortlTel' bindtap='showTel'>
      <view class='list_part'>
        <text>绑定手机</text>
        <image src='../images/right_10.png'></image>
      </view>
     </view>

     <view class='cortlTel' bindtap='toPassWord'>
      <view class='list_part'>
        <text>修改找回密码</text>
        <image src='../images/right_10.png'></image>
      </view>
     </view>

     <view class='cortlTel' bindtap='checkOrder'>
         <view class='list_part'>
        <text>我的订单</text>
        <image src='../images/right_10.png'></image>
      </view>
     </view>
  </view>
  <!-- <view class='bottom_box'>
    <image src='../images/mybottom_pic_09.jpg' class='bot_img' mode=''></image>
  </view> -->

  <!-- 绑定手机弹窗 -->
  <view class="telephone_container" wx:if='{{control}}' bintap="closetelephoneMask">
    <view class="telephone">
      <view class="tel_title">手机验证 <text bindtap='showTel'>×</text></view>
      <input class="tel" adjust-position='true' cursor-spacing="10" type="number" maxlength="11" placeholder="请输入11位手机号" placeholder-style="color:#999;" bindinput="inputPhoneNum"  auto-focus/>
      <view class="code_container">
        <input class="codes" type="number" adjust-position='true' cursor-spacing="10" placeholder="请输入6位验证码" maxlength="6" placeholder-style="color:#999;" bindinput="addCode"/>
         <view wx:if="{{!send && !alreadySend}}" class="getcode" bindtap="">获取验证码</view>
         <view wx:if="{{send}}" class="getcode2" bindtap="sendMsg">获取验证码</view>
         <view wx:if="{{!send && alreadySend}}" class="getcode" bindtap="">{{second+"s"}}</view>
        <!-- <text style="font-size:25rpx" wx:if="{{alreadySend}}" class="sendMsg" bindtap="sendMsg">{{second+"s"}}</text> -->
      </view>
      <!-- <view class='ensure' bindtap="bindIphone">确定</view> -->
      <button class='ensure {{!disabled?"active":""}}' type="{{buttonType}}" disabled="{{disabled}}" bindtap="onSubmit">确定</button>
    </view>
  </view>
</view>


================================================
FILE: client/pages/mycenter/mycenter.wxss
================================================
/* pages/mycenter/mycenter.wxss */
.container {
  position: relative;
}
.top {
  width: 80%;
  height: 200rpx;
  background: url('../images/7my_02.jpg');
  background-size: cover;
  background: #f4823e;
  display: flex;
  justify-content: space-around;
  align-items: center;
  padding: 0 10%;
}
.top image {
  width: 136rpx;
  height: 136rpx;
  border-radius: 50%;
  margin-right: 20rpx;
}
.top .preson_infomation {
  color: #fff;
  font-size: 30rpx;
}
.top .preson_infomation .num {
  margin-top: 10rpx;
}
.top .preson_infomation .sign{
  display: inline-block;
  text-align: center;
  width: 150rpx;
  height: 36rpx;
  line-height: 34rpx;
  font-size: 24rpx;
  color: #fff;
  background: #ff2b4d;
  border-radius: 36rpx;
}
.top .preson_infomation .sign.signed{
  background: #eee;
  color: #999;
}
.top .preson_infomation .num text:first-of-type {
  border-right: 1rpx solid #fff;
  padding-right: 30rpx;
  margin-right: 30rpx;
}
.insert_img {
  width: 100%;
}
.prop {
  display: block;
  width: 100%;
  height: 68rpx;
}

.getcode2{
  background: #ff6b12 !important;
}
.my_list {
  width: 100%;
  border-bottom: 20rpx solid #f5f5f9;
}
.my_list navigator,.my_list .cortlTel {
  width: 95%;
  height: 92rpx;
  line-height: 92rpx;
  margin-left: 5%;
  padding-right: 5%;
  box-sizing: border-box;
  border-bottom: 1rpx solid #ccc;
}
.cortlTel:last-of-type {
  border: none;
}

.my_list navigator .list_part,.my_list .cortlTel .list_part{
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.my_list .list_part:last-of-type {
  border: none;
}
.my_list .list_part text {
  color: #333333;
  font-size: 28rpx;
}
.my_list .list_part image {
  width: 15rpx;
  height: 30rpx;
}
.bottom_box {
  width: 100%;
  height: 290rpx;
}
.bottom_box image {
  display: block;
  width: 100%;
  height: 100%;
}
.telephone_container {
  width: 100%;
  height: 100%;
  position: absolute;
  background: rgba(0, 0, 0, 0.5);
}
.telephone_container .telephone {
  width: 92%;
  height: 545rpx;
  position: absolute;
  background: #fff;
  top: 0;
  left: 0;
  bottom:134rpx;
  right: 0;
  margin: auto;
  border-radius: 5rpx;
}
.telephone_container .telephone .tel_title {
  width: 97%;
  margin: 0 auto;
  height: 120rpx;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 30rpx;
  color: #333;
  font-weight: bold;
  position: relative;
  border-bottom: 1rpx solid #ddd;
  margin-bottom: 40rpx;
}
.telephone_container .telephone .tel_title text {
  position: absolute;
  top: 15%;
  right: 10rpx;
  color: #888;
  font-size: 40rpx;
}
.telephone_container .telephone .tel {
  width: 85%;
  height: 84rpx ;
  padding-left: 10rpx;
  margin:30rpx auto;
  color: #333;
  font-size: 24rpx;
  border: 1rpx solid #666;
  -webkit-border-radius: 5rpx;
  -moz-border-radius: 5rpx;
  border-radius: 5rpx;
  box-sizing: border-box;
}
.telephone_container .telephone .code_container{
  border: none;
  width:85%;
height:84rpx;
  display: flex;
  justify-content: space-between;
  align-content: center;
  margin: 40rpx auto;
}
.telephone_container .telephone .code_container input{
  width: 367rpx;
  height: 100%;
  border: 1rpx solid #666;
  padding-left: 10rpx;
  border-radius: 5rpx;
   color: #333;
  font-size: 24rpx;
  box-sizing: border-box;
}
.telephone_container .telephone .code_container view{
  width: 195rpx;
  height: 100%;
  line-height: 84rpx;
  background: #42adae;
  text-align: center;
  border-radius: 5rpx;
  color: #fff;
  font-size: 24rpx;
}
.telephone_container .telephone .ensure{
    width:85%;
    height:80rpx;
    margin: 0 auto;
    background: #42adae;
    font-size: 30rpx;
    color: #fff;
    text-align: center;
    line-height: 80rpx;
    border-radius: 5rpx;
}
.telephone_container .telephone .active{
  width:85%;
  height:80rpx;
  margin: 0 auto;
  background: #ff6b12 !important;
  font-size: 30rpx;
  color: #fff;
  text-align: center;
  line-height: 80rpx;
  border-radius: 5rpx;
}
.key_container{
  display: block;
}

.mask {
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  z-index: 999;
  background: rgba(0, 0, 0, 0.5);
}

.mask .content{
  width:95%;
  height:50%; 
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
  display:inline-block;
  background-color: #fff;
}

================================================
FILE: client/pages/mytalk/mytalk.js
================================================
// pages/mytalk/mytalk.js 我的点评页面

var app = getApp();
import { Http } from '../../utils/httpClient';
var httpClient = new Http();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    showflag:false,//显示空页面
      /**
    * 我的评价的页码
    * 
    */
    page: 1,
    /**
     * 我的评价的数量
     */
    count: 0,
    /**
     * 我的评价的数据
     */
    commitList: [],
  },

  onLoad(options) {
    this.initData(options);
  },
  initData(options) {
    var _this = this;
    var httpClient = new Http();

    /**
     * 获取用户评价列表
     */
    var argu = {
      token: app.globalData.token,
      page: this.data.page
    }
    httpClient.getUserCommitList(argu).then((res) => {
      console.log('我的评论列表', res);
      if (res) {
        _this.setData({
          commitList: res.list, 
          count: res.count
        })
      }
      if(!res.data){
        _this.setData({
          showflag:true
        })
      }

    }).catch((e) =>{
      console.log(e);
    }    
    )
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
  
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
  
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
  
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
  
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
  
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    this.nextPage();
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
  
  },
  /**
   * 下一页
   */
  nextPage(){
    var _this = this;
    var page = this.data.page;
    var argu = {
      token: app.globalData.token,
      page: ++page
    }
    httpClient.getUserCommitList(argu).then((res) => {
      console.log('我的评论列表', res);
      if (res) {
        _this.setData({
          commitList: _this.data.commitList.push.apply(_this.data.commitList,res.list), 
          count: res.count,
          page:page
        })
      }else{
        wx.showToast({
          title: '已经触底',
          icon: 'loading',
          duration: 500
        })
      }
    }).catch((res)=>{
      wx.showToast({
        title: '已经触底',
        icon: 'loading',
        duration: 500
      })
    })
  }
})

================================================
FILE: client/pages/mytalk/mytalk.json
================================================
{
  "navigationBarTitleText": "我的评论",
  "component": true,
  "usingComponents": {
    "component-talk": "../talk/talk"
  }
}

================================================
FILE: client/pages/mytalk/mytalk.wxml
================================================
<!-- pages/mytalk/mytalk.wxml -->
<!-- pages/reviewlist/reviewlist.wxml -->
<view class='containers'>
  <view class='review_content_container'>
    <view wx:for="{{commitList}}" class='review_content' bindtap='reviewDetails'>
      <component-talk t-type="0" t-list="{{item}}"></component-talk>
    </view>
  </view>
</view>
<view class="empty" wx:if="{{!showflag}}">
  <image src="../images/empty2.png"></image>
  <text>亲,您暂时没有评价呢</text>
</view>

================================================
FILE: client/pages/mytalk/mytalk.wxss
================================================
/* pages/mytalk/mytalk.wxss */
.review_title{
  width: 100%;
  padding: 0 4%;
  box-sizing: border-box;
  display: flex;
  justify-content: space-around;
  align-content: center;
  height: 76rpx;
  border-top:1rpx solid #ddd; 
  font-size: 26rpx;
  color: #333;
}
.review_title text{
  display: block;
  height: 100%;
  line-height: 76rpx;
  text-align: center;
}
.review_title text.active{
   color: #ff6b12;
   border-bottom: 1rpx solid #ff6b12;
}
.review_content_container{
  width: 92%;
  margin: 0 4%;
 


}
.review_content_container .review_catagery{
   display: flex;
   flex-wrap: wrap;
  justify-content: flex-start;
  border-bottom: 1rpx solid #ddd;
  padding: 10rpx 0;
}
  
.review_content_container  .review_catagery  text{
  display: block;
  padding: 11rpx 45rpx;
  font-size: 24rpx;
  background: #f5f5f5;
  border-radius: 5rpx;
  text-align: center;
  height: 44rpx;
  line-height: 44rpx;
  margin:10rpx;
}
.review_content_container .review_catagery text.active{
  background: #ffe1d0;
  color: #ff6b12
}
.review_content{
  width: 100%;
  padding: 20rpx 0 0;
}

.review_content_container .review_content .container .right text.date{
  background: #fff;
}
.empty{
  width:300rpx;
  height:300rpx;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
 text-align: center;
}
.empty image{
  display: block;
  width: 110rpx;
  height: 100rpx;
  margin: 30rpx auto;
}
.empty text{
  display: block;
  text-align: center;
  color: #666;
  font-size: 26rpx;
}

================================================
FILE: client/pages/order/order.js
================================================
// pages/order/order.js

/**
 * 当前点餐状态值
 */
var ownOrderType = {
  appointment: 'appointment' //预定的
}

var app = getApp();
import {
  orderTab,
  coupon,
  couponType,
  tasteMaskData
} from "./type";

import {
  Http
} from '../../utils/httpClient.js';
import { URL } from '../../utils/urlModel.js';
import {formatTime ,accAdd,accMul} from '../../utils/util';
Page({


  /**
   * 组件的初始数据
   */
  data: {
    /**
     * 订单类型 
     * 1.预约点餐  2.
     */
    orderType: null,
    URL: URL,
    /**------------店铺信息--------------- */
    title: '',  //店铺名称
    address: '', //店铺地址
    telephone: '',  //店铺电话
    opentimes: "",  //营业时间
    affiche: '', //公告
    tel:'',//电话
    decrease: [], //满减
    send: [],     //满送
    discount: '', //折扣
    comm_info: [], //商品信息
    logo: '',   //logo

    /**------------适配信息--------------- */
    windowHeight: 1500,
    titleHeight: 125,
    couponHeight: 40,
    body_titleHeight: 35,
    bottomHeight: 75,
    conentHeight: 1000, /**
     * 规格属性弹窗是否显示
     * true:显示 false不显示
     */
    specbox: false,    // 当前选中 选中组件
    curSelect: 0,
    // 选项卡数据
    tabSelect: {},
    //点餐类别选项卡当前选中
    curOrderSelect: 0,
    couponData: coupon,
    couponType: couponType,


    /**
     * 滑动窗滑动的位置
     * value:按照数组下标进行排序列
     */
    toView: 0,
    /**
     * 商品总价格
     */
    numPrice: 298,
    /**
     * 商品数量
     */
    shopNumber: 0,
    // 总价格
    sumPrice: 0,
    /**
     * 商品规格数据(用于渲染界面)
     */
    tasteMaskData: tasteMaskData,

    /**
     * 当前选择商品数据Id + '_'+name
     */
    currentComData: '',

    /**
     * 规格属性弹窗是否显示
     * true:显示 false不显示
     */
    // maskSpecSelect: false,

    /**
     * 购物车弹窗是否显示
     * true:显示 false不显示
     */
    maskShopCar: false,

    /**
     * 口味规格弹窗  口味
     * 0默认 1微辣 2中辣  3特辣 根据后端数据来定 
     */
    curTaste: 0,

    /**--------------------------分割线:实际数据------------------------------------------------------------------------ */
    /**
     * 店铺Id
     */
    shopId: 9,
    /**
     * 当前页码
     */
    page: 1,

    /**
     * 是否有图
     * 1:无图评价 2:有图评价
     */
    type: 1,

    /**
     * 评分
     */
    score: 5,

    /**
     * 购物车商品数量
     */
    shopCarNumber: 0,

    /**
     * 购物车实际数据
     */
    shopCarData: {},

    /**
     * 订桌信息数据
     */
    appointmentData: {},

    /**
     * 评价数据
     * {
     * list:[],
     * count:1
     * }
     */
    commitData:{},

    /**
     * 桌号
     */
    number:'',
    hide_good_box:true,
    
    /**
     * 规格弹窗之前的e缓存
     */
    eventDetail:null,

  },

  /**
   * 初始化
   */

  initData(options) {
    var _this = this;
    var shopId = JSON.parse(options.shopId || this.data.shopId) || app.currentShopId;
    console.log(options);
    this.setData({
      shopId: shopId
    })
    var type = options.type;
    if (type && ownOrderType.appointment == type) {
      var appointmentData = JSON.parse(options.contacts || '{}') || '{}';
      this.setData({
        appointmentData: appointmentData,
        orderType: type
      })  
    }

   

    var httpClient = new Http();

    /**
     * 初始化屏幕高度
     *  windowHeight:1500,
        titleHeight:125,
        couponHeight:40,  购物车高度
        body_titleHeight:35, 
        bottomHeight:75,   
        conentHeight:1000,
     */
    var systemInfo = app.globalData.systemInfo;
    var windowHeight = (systemInfo.windowHeight * (750 / systemInfo.windowWidth)); //将高度乘以换算后的该设备的rpx与px的比例
    this.setData({
      windowHeight: windowHeight,
      conentHeight: windowHeight - this.data.titleHeight - this.data.couponHeight - this.data.body_titleHeight - this.data.bottomHeight-210
    })
    console.log('屏幕高度和内容高度', this.data.windowHeight, this.data.conentHeight);

    /**
     * 获取商品详情列表
     */
    var argu = {
      id: this.data.shopId
    }
    httpClient.getStoreList(argu).then((res) => {
      
      var temp = [];
      for (let i in res) {
        let data = res[i];
        let name = i.split('_')[0];
        let cid = i.split('_')[1];
        temp.push({
          name: name,
          cid: cid,
          data: data
        });
      }
      this.setData({
        tabSelect: temp,
        curOrderSelect:temp[0].cid
        
      })
      console.log('商品列表: ', temp);
    });
    /**
    * 获取店铺信息
    */
    var argu = {
      id: this.data.shopId
    }
    var _this=this;
    httpClient.getStoreDetail(argu).then((data) => {
      console.log('店铺信息为:', data);
      this.setData({
        title: data.title,
        address:data.address,
        telephone: data.iphones,
        // itemList: new Array.push(data.iphones),
        opentimes: data.open_times[0].startTime + '-' + data.open_times[0].endTime,
        affiche: data.affiche,
        decrease: data.preferential.decrease || [],
        send: data.preferential.send || [],
        discount: data.preferential.discount || '',
        logo: data.logo,
        tel:data.iphones
      })
      console.log(this.data.opentimes)
    })
   
    /**
     * 获取店铺评价信息
     */
    var arguCommit = {
      id: this.data.shopId,
      page: this.data.page,
      type: this.data.type,
      score: this.data.score
    }
    httpClient.getStoreCommit(arguCommit).then((res) => {
      console.log('店铺评价信息: ', res);
      res.list.forEach((ele, i) => {
        res.list[i].addtime = formatTime(new Date(ele.addtime * 1000));
      })
      if(res){
        this.setData({
          commitData:res
        })
      }
    });

    /**
    * 获取当前用户购物车数据
    */
    var argu = {
      lid: this.data.shopId,
      token: app.globalData.token
    }
    httpClient.getStoreShopping(argu).then((data) => {
      console.log('购物车内容', data);

      if (data) {
        for(var i in data){
          var d = data[i];
          d.price = (d.price/100).toFixed(2);
        }
        _this.setData({
          shopCarData: data,
        })
        _this.culSum(); 
      }
    })

  },
  onLoad: function (options) {
    if(options.number){
      app.number.number = options.number;
      app.number.cid = options.shopId;
    }
    this.initData(options);
    this.busPos = {};
    this.busPos['x'] = 45;//购物车的位置
    this.busPos['y'] = app.globalData.systemInfo.windowHeight - 56;
  },

  touchOnGood: function(e){
    var _this = this;
    var expand= e.target.dataset.expand;
    // var cIndex = e.target.dataset.cindex;
    // var index = e.target.dataset.index;
    //商品规格存在
    if(expand){
      let gId = e.target.dataset.comid;
      let name = e.target.dataset.name;
      let price = e.target.dataset.price;
      let img = e.target.dataset.img;
      var data = {
        id: gId,
        title: name,
        price: price,
        img: img,
        num: 0,
        spec: ''
      }
      this.setData({
        tasteMaskData:expand
      })
      this.setData({
        specbox: !this.data.specbox,
        currentComData: data,
        eventDetail:e
      });
    }else{ //不存在商品规格
      let gId = e.target.dataset.comid;
      let name = e.target.dataset.name;
      let price = e.target.dataset.price;
      let img = e.target.dataset.img;
      var data = {
        id: gId,
        title: name,
        price: price,
        img: img,
        num: 0,
        spec: ''
      }
      this.setData({
        currentComData: data
      });
      this.touchOnGoods(e);
    } 
  },

  touchOnGoods: function (e,target) {
    this.finger = {}; var topPoint = {};
    this.finger['x'] = e.touches["0"].clientX -30;//点击的位置
    this.finger['y'] = e.touches["0"].clientY -30;

    if (this.finger['y'] < this.busPos['y']) {
      topPoint['y'] = this.finger['y'];
    } else {
      topPoint['y'] = this.busPos['y'];
    }
    topPoint['x'] = Math.abs(this.finger['x'] - this.busPos['x']) / 2;

    if (this.finger['x'] > this.busPos['x']) {
      topPoint['x'] = (this.finger['x'] - this.busPos['x']) / 2 + this.busPos['x'];
    } else {//
      topPoint['x'] = (this.busPos['x'] - this.finger['x']) / 2 + this.finger['x'];
    }

    //topPoint['x'] = this.busPos['x'] + 80
    //this.linePos = app.bezier([this.finger, topPoint, this.busPos], 30);
    this.linePos = app.bezier([this.busPos, topPoint, this.finger], 30);
    this.startAnimation(e,target);
  },
  startAnimation: function (e,target) {
    var index = 0, that = this,
      bezier_points = that.linePos['bezier_points'];

    this.setData({
      hide_good_box: false,
      bus_x: that.finger['x'],
      bus_y: that.finger['y']
    })
    var len = bezier_points.length;
    index = len;
    if(this.timer){
      clearInterval(this.timer);
    }
    this.timer = setInterval(function () {
      index--;
      if(bezier_points[index]){
        that.setData({
          bus_x: bezier_points[index]['x'],
          bus_y: bezier_points[index]['y']
        })
      }
     
      if (index < 1) {
        clearInterval(that.timer);
        //是否传了这个参数 代表是否有规格弹窗
        if(!target){
          that.noSpecboxs(e);
        }else{
          //有规格弹窗
          that.showSpecboxs();
        }
       
        that.setData({
          hide_good_box: true
        })
      }
    }, 22);
  },

  bindScroll(e){
    var _this = this;
    var height;
    wx.createSelectorQuery().select('.des_type').fields({size:true},(res)=>{
      height = res.height;
    }).exec();
    wx.createSelectorQuery().selectAll('.right_tab').fields({
      dataset: true,
      size: true,
      scrollOffset: true,
      properties: ['scrollX', 'scrollY'],
      computedStyle: ['margin', 'backgroundColor']
    },function(res){
      res.reduce((value,curValue,i)=>{
        var sum = value + curValue.height;
        var curTop = height?e.detail.scrollTop+height+5:e.detail.scrollTop+25;
        if(curTop<sum  &&curTop>value){
          if(res[i]){
            _this.setData({
              curOrderSelect:res[i].dataset.cid
            })
          }
        }
        return sum;
      },0)
    }).exec()
  },
  previewImg(e){
    wx.previewImage({
      current: URL.PROJECT_ROOT + e.target.dataset.src, // 当前显示图片的http链接
      urls: [URL.PROJECT_ROOT + e.target.dataset.src] // 需要预览的图片http链接列表
    })
  },
  onReady: function () {
    console.log("page ---onReady---");
  },
  onShow: function () {
    console.log("page ---onShow---");
  },
  onHide: function () {
    console.log("page ---onHide---");
  },
  onUnload: function () {
    console.log("page ---onUnload---");
  },

  //切换标签选项卡
  changeSelect(e) {
    var that = this;
    if (this.data.curSelect === e.currentTarget.dataset.current) {
      return false;
    } else {
      that.setData({
        curSelect: e.currentTarget.dataset.current
      })
    }
  },

  /**
   * 点击打电话
   */
  open: function () {
    var itemList = [];
    itemList=itemList.push(this.data.tel.toString())?itemList:[];
    wx.showActionSheet({
      itemList: itemList,
      success: function (res) {
        if (!res.cancel) {
          console.log(res)

          wx.makePhoneCall({
            phoneNumber: itemList[res.tapIndex]
          })


        }
      }
    });
  },

  // 滑动切换
  swiperTab: function (e) {
    var that = this;
    that.setData({
      curSelect: e.detail.current
    });
  },
  /**
   * 点击标签选项卡 点击了左侧选项卡
   *
   * @param e
   */
  clickTab: function (e) {
    var self = this;
    self.setData({
      curOrderSelect: e.target.dataset.cid,
      toView: e.target.dataset.scrollid
    });
  },
  /**
   * 添加或减少购物车
   */
  submitShopCar(argus) {
    var _this = this;
    var httpClient = new Http();
    return new Promise((resolve, reject) => {
      /**
       * 更新购物车
      */
      var argu = {
        gid: argus.id, // 商品Id
        lid: this.data.shopId, //店铺Id
        number: argus.num, // 商品数量
        spec: argus.spec, //规格
        token: app.globalData.token
      }
      httpClient.postStoreShopping(argu).then((data) => {
        console.log('刷新购物车数据成功: ', data);
        resolve();
      })
    })
  },

  /**
   * 清空购物车
   */
  clearShopCar(callback) {
    var _this = this;
    var httpClient = new Http();

    /**
     * 清空购物车
     */
    var argu = {
      lid: this.data.shopId,
      token: app.globalData.token
    }
    httpClient.clearStoreShopping(argu).then((data) => {
      console.log(data);
      if (data.code == 200) {
        console.log('清空了购物车');
        _this.data.shopCarData = {};
        _this.setData({
          shopCarData: _this.data.shopCarData
        })
        if(typeof callback == 'function'){
          callback();
        }
        _this.culSum();
      }
    })
  },

  // 点击下单跳转付款页面,同时生成订单
  toPay() {
    var _this = this;
    var httpclient = new Http();

    var argu;
    // 是否是预定桌位
    if (this.data.orderType == ownOrderType.appointment) {
       argu = {
        lid: this.data.shopId,
        token: app.globalData.token,
        contacts: JSON.stringify(this.data.appointmentData),
        number:app.number.number
      }
      console.log(argu.contacts);
    } else {
      argu = {
        lid: this.data.shopId,
        token: app.globalData.token,
        number:app.number.number
      }
    }
    httpclient.getOrderFound(argu).then((data) => {
      //console.log(data, data.data.orderNumber);
      if (data.code == 200) {  
        _this.clearShopCar(()=>{
         
          wx.navigateTo({
            url: "../topay/topay?orderNumber=" + data.data.orderNumber +'&shopId='+_this.data.shopId +'&price='+_this.data.sumPrice
          })
          _this.setData({
            shopNumber: 0,
            sumPrice: 0
          })
        });   
      }else{
        wx.showToast({
          title:data.msg
        })
      }
    })
  },
  // 评论列表跳转
  reviewList() {
    wx.navigateTo({
      url: '../reviewlist/reviewlist'
    })
  },
  /**
   * 选择口味回调方法(点击特辣 微辣 等4个口味按钮) 没有选中就是空 选中了就是当前选的中文
   */
  clickSelectSpec(e) {
    var tab = e.target.dataset.tab;
    this.data.currentComData.spec = tab;
    this.setData({
      currentComData: this.data.currentComData,
      curTaste:tab
    })
    console.log(this.data.currentComData);
  
  },
  // 点击加号显示规格弹窗
  showSpecbox(e) {
    this.touchOnGoods(this.data.eventDetail,1);
    this.closeSpecBoxs();
  },

  /**
   * 关闭规格弹窗
   * @param {*} e 
   */
  closeSpecBoxs(e){
    this.setData({
      specbox: false
    });
  },
  /**
   * 没有规格(选好了)
   */
  noSpecboxs(e) {
    var _this = this;
   
    var spec = this.data.tasteMaskData[this.data.curTaste];
    var keyName = this.data.currentComData.id + '_' + this.data.currentComData.spec;
  
    if(this.data.shopCarData[keyName]){
      this.data.shopCarData[keyName].num++;
      this.data.currentComData = this.data.shopCarData[keyName];
    }else{
      this.data.currentComData.num++;
      this.data.shopCarData[keyName] = this.data.currentComData;
    }
    this.submitShopCar(this.data.shopCarData[keyName]).then((data) => {
      _this.setData({
        shopNumber: this.data.shopNumber++,
        shopCarData: this.data.shopCarData
      });
      this.culSum();
    })

  },


  /**
   * 隐藏规格弹窗(选好了)
   * @param {*} e 
   */
  showSpecboxs(e) {
    var _this = this;

    var keyName = this.data.currentComData.id + '_' + this.data.currentComData.spec;
    //判断是否存在
    if(this.data.shopCarData[keyName]){
      this.data.shopCarData[keyName].num++;
      this.data.currentComData = this.data.shopCarData[keyName];
    }else{
      this.data.currentComData.num++;
      this.data.shopCarData[keyName] = this.data.currentComData;
    }
    this.submitShopCar(this.data.shopCarData[keyName]).then((data) => {
      _this.setData({
       
        shopNumber: this.data.shopNumber++,
        shopCarData: this.data.shopCarData
      });
      this.culSum();
      this.setData({
        curTaste:''
      })
    })

  },
  /**
   * 打开购物车弹窗
   */
  showcar(e) {
    this.setData({
      maskShopCar: !this.data.maskShopCar
    })
  },
  maskCar(e){
    if(e.target.dataset.ty){
      this.setData({
        maskShopCar: !this.data.maskShopCar
      })
    }
  },

  //点击购物车底部的加号
  addNum(e) {
    var _this = this;
    //商品key
    let gkey = e.target.dataset.gkey;
    let gValue = this.data.shopCarData[gkey];
    if (gValue) {
      gValue.num++;
      this.submitShopCar(gValue).then((data) => {
        _this.setData({
          shopCarData: _this.data.shopCarData
        })
      });
      this.culSum();
    }
  },

  //计算购物车总价格和总数量
  culSum() {
    var sumCount = 0, sumMoney = 0;
    for (var key in this.data.shopCarData) {
      sumCount += parseInt(this.data.shopCarData[key].num);
      sumMoney += accMul(this.data.shopCarData[key].num , this.data.shopCarData[key].price);
    }
    console.log(sumCount, sumMoney);
    var len;
    try {
       len = sumMoney.toString().split('.')[1].length; 
    } catch (error) {
      len = 0;
    }
    sumMoney = Number(sumMoney);
    if(len != 0 ){
        sumMoney =  Number(sumMoney.toFixed(2));
        if(sumMoney.toString().split('.')[1] *100 == 0){
          sumMoney = Number(sumMoney.toFixed(0));
        }else if(sumMoney.toString().split('.')[1] *100 >=1000 ||  sumMoney.toString().split('.')[1] *100 <10000){
          sumMoney = Number(sumMoney.toFixed(1))
        }
        // var str = sumMoney.toString().split('.')[1];
        // for( var i = len; i >0; i-- ){
        //    if(str[i] == 0){
        //     sumMoney =  Number(sumMoney).toFixed[i-1];
        //    }else{
        //      break;
        //    }
        // }
    }
    this.setData({
      shopNumber: sumCount,
      sumPrice: sumMoney
    })
  },
  //点击购物车底部的减号
  decreaseNum(e) {
    var _this = this;
    let gkey = e.target.dataset.gkey;
    let gValue = this.data.shopCarData[gkey];
    if (gValue) {
      gValue.num--;
      this.submitShopCar(gValue).then((data) => {
        if (gValue.num <= 0) {
          delete _this.data.shopCarData[gkey];
        }
        _this.setData({
          shopCarData: _this.data.shopCarData
        })
        this.culSum();
      })
    }
  },
  /**
   * 滚动条滚动到下方(需要设置高度)
   * @param {*} e 
   */
  commitScrollBottom(e){
    var page = this.data.page;
    var arguCommit = {
      id: this.data.shopId,
      page: ++page,
      type: this.data.type,
      score: this.data.score
    }
    httpClient.getStoreCommit(arguCommit).then((res) => {
      console.log('店铺评价信息: ', res);
      if(res && res.list){
        res.list.forEach((ele, i) => {
          res.list[i].addtime = formatTime(new Date(ele.addtime * 1000));
        })
        this.data.commitData.list.push.apply(this.data.commitData.list,res.list)
        this.setData({
          commitData:this.data.commitData,
          page:page
        })
      }else{
        wx.showToast({
          title: '已经触底',
          icon: 'loading',
          duration: 500
        })
      }
    }).catch((res)=>{
      wx.showToast({
        title: '已经触底',
        icon: 'loading',
        duration: 500
      })
    });
  }


})

================================================
FILE: client/pages/order/order.json
================================================
{
  "navigationBarTitleText": "点餐",
  "component": true,
  "disableScroll": true,
  "usingComponents": {
    "component-talk": "../talk/talk"
  }
}

================================================
FILE: client/pages/order/order.wxml
================================================
  <view class="good_box" hidden="{{hide_good_box}}"  style="left: {{bus_x}}px; top: {{bus_y}}px;"></view>
<!-- 商品规格弹窗 -->
<view class="cancel_table_container" wx:if="{{specbox}}">
  <view class="cancel_table">
    <view class="cancel_title">
      <image src='{{URL.PROJECT_ROOT+currentComData.img}}'></image>
      <view class='seclet_text'>
        <view>{{currentComData.title}}</view>
        <view>已选:{{currentComData.spec?currentComData.spec:'默认'}}</view>
        <view>¥{{currentComData.price}}</view>
      </view>
      <text bindtap='closeSpecBoxs' class='close'>×</text>
    </view>
    <!-- <view class='spec_container'>
      <view class='spec_title'>规格</view>
      <view class='spec_content'>
         <text class="spec-btn {{curSpec==index?'active':''}}" wx:for="{{tasteMaskData.spec}}">{{item.text}}</text>
      </view>
    </view> -->
    <view class='spec_container taste'>
      <view class='spec_title'>口味</view>
      <view class='spec_content'>
        <span class="taste-btn {{curTaste==item?'active':''}}" wx:for="{{tasteMaskData}}" wx:key="*this" data-tab="{{item}}" bindtap="clickSelectSpec">
          {{item}}
        </span>
      </view>
    </view>
    <view class='ensure' bindtap='showSpecbox'>选好了</view>
  </view>
</view>
<!-- 购物车弹窗 -->
<view class="mask" wx:if="{{shopNumber>0}}" hidden="{{!maskShopCar}}" data-ty="1" bindtap='maskCar'>
  <view class="shop-car-con">
    <view wx:if="{{shopNumber>0}}" class='clear_car' bindtap='clearShopCar'>
      <image src='../images/car_04.png'></image>
      <text>清空购物车</text>
    </view>
    <view wx:if="{{shopNumber==0}}" class='clear_car' bindtap=''>
      <image src='../images/car_04.png'></image>
      <text>购物车无商品</text>
    </view>
    <view class="car_scroll" style="height:{{windowHeight/2}}rpx">
      <view class='car_content' wx:for="{{shopCarData}}" wx:for-index="gkey" wx:for-item="ginfo" wx:key="*this">
        <view class='order_name'>
          <text>{{ginfo.title}}</text>
          <text>【{{ginfo.spec==''?'默认':ginfo.spec}}】</text>
        </view>
        <view class='order_right'>
          <text class='order_price'>¥{{ginfo.price}}</text>
          <view class='order_btn'>
            <text bindtap='decreaseNum' data-commid="{{ginfo.id}}" data-gkey="{{gkey}}" class="cantap">
              -
            </text>
            <text>{{ginfo.num}}</text>
            <image src='../images/order-add.png' data-gkey="{{gkey}}" data-commid="{{ginfo.id}}" bindtap='addNum'></image>
            <!-- <image src='../images/order-add.png' data-gkey="{{gkey}}" bindtap='addNum'></image> -->
          </view>
        </view>
      </view>
    </view>
  </view>
</view>
<!-- 购物车 -->
<view class="order-info">
  <view class='car_left' bindtap='showcar'>
    <!-- <view class="o-left">¥{{tasteData.price*shopNumber}}</view> -->
    <view wx:if="{{shopNumber>0}}" class="o-left">¥{{sumPrice}}</view>
    <image class="shop-cart" src="../images/car_26.png"></image>
    <view wx:if="{{shopNumber>0}}" class="shop-number">
      <text>{{shopNumber<0?0:shopNumber}}</text>
    </view>
  </view>
  <view class="o-right" bindtap='toPay'>下单</view>
</view>
<!-- 页面主内容 -->
<view class='container'>
  <view class="title">
    <view class="sign">{{title}}</view>
    <view class="des">
      <image class="img_con" src="{{URL.PROJECT_ROOT+logo}}" data-src="{{logo}}"></image>
      <view class="text_con">
        <view class="text">
          <view class="open_time">
            营业时间:
            <text style="margin-left: 15rpx">{{opentimes}}</text>
          </view>
          <view class="weui-btn-area" type="default" bindtap="open" data-tel="{{}}">
            <image class="sign_btn" src="../images/car_13.png"></image>
          </view>
        </view>
        <view class="text">
          详细地址:
          <text style="margin-left: 15rpx">{{address}}</text>
        </view>
        <view class="text" wx:if='{{affiche}}'>
          公告:
          <text style="margin-left: 15rpx">{{affiche}}</text>
        </view>
      </view>
    </view>
  </view>
  <view class="coupon">
    <text class="ticket">减</text>
    <view class="discount_info">
      <text wx:for='{{decrease}}' wx:key="*this">满{{item[0]}}减{{item[1]}}元;</text>
    </view>
  </view>
  <view class="body">
    <view class="b_title">
      <view class="order" data-current="0" bindtap="changeSelect">
        <view class="com {{curSelect==0?'active':''}}">点餐</view>
      </view>
      <view class="comment" data-current="1" bindtap="changeSelect">
        <view class="com {{curSelect==1?'active':''}}">评论</view>
      </view>
    </view>
    <swiper current="{{curSelect}}" duration="300" bindchange="swiperTab" style="height:{{conentHeight}}rpx;">
      <swiper-item>
        <view class="o_con" style="height:{{conentHeight}}rpx;">
          <view class="o-center">
            <view class="left">
              <view class="tab {{curOrderSelect==item.cid?'active':''}}" wx:for="{{tabSelect}}" wx:for-index="indx" wx:key="" data-scrollid="{{'scroll'+indx}}" data-cid="{{item.cid}}" bindtap="clickTab">
                {{item.name}}
              </view>
            </view>
            <view class="right">
              <scroll-view scroll-into-view="{{toView}}" scroll-y="true" scroll-with-animation="true" class="scr" style="height:{{conentHeight}}rpx;" bindscroll='bindScroll'>
                <view class="right_tab" wx:for="{{tabSelect}}" wx:for-index="indx" wx:key="*this" id="{{'scroll'+indx}}" data-cid="{{item.cid}}" data-gid="{{item.gid}}">
                  <view class="des_type">{{item.name}}</view>
                  <view class="des" wx:for="{{tabSelect[indx].data}}" wx:key="*this" data-comid='{{item.gid}}'>
                    <image class="img_con" src="{{URL.PROJECT_ROOT+item.thumb}}" data-src="{{item.thumb}}" bindtap="previewImg"></image>
                    <view class="text_con">
                      <text class="text name">{{item.goodsName}}</text>
                      <text class="text desc">{{item.summary}}</text>
                      <text class="text price">¥{{item.price/100}}</text>
                    </view>                    
                    <image class="add_btn" bindtap='touchOnGood' data-comid='{{item.gid}}' data-name='{{item.goodsName}}' data-img="{{item.thumb}}" data-cindex="{{indx}}" data-index="{{index}}" data-expand="{{item.expand}}" data-price='{{item.price/100}}' src="../images/order-add.png"></image>
                  </view>
                </view>
              </scroll-view>
            </view>
          </view>
          <!-- 优惠信息 -->
          <!-- <view class="info">
            <text wx:for="{{couponData}}" wx:key="">
                        <text class="tx">满</text>
            <text class="from">{{item.from}}</text>
            <text class="tx">送</text>
            <text class="to tx">{{item.to}}</text>
            <text class="tx" wx:if="{{couponData.length != index+1}}">,</text>
            </text>
          </view> -->
          <!-- <view class="info"> 已减{{}}元</view> -->
          <!-- 购物车 -->
        </view>
      </swiper-item>
      <swiper-item>
        <!-- 评论界面 -->
        <view class="c-con">
          <view class="com-container">
            <text class="comment">相关评论</text>
            <text class="com-more" bindtap='reviewList'>查看更多评价></text>
          </view>
          <view wx:if="{{!commitData || !commitData.list || commitData.list==0}}" class="empty">
            <image src='../images/empty2.png'></image>
            <text style="font-size:20rpx">此店铺没有相关评论</text>
          </view>
          <scroll-view scroll-y bindscrolltolower="commitScrollBottom" style="height:{{windowHeight}}rpx">
            <view wx:for="{{commitData.list}}" wx:key="*this">
              <component-talk t-type="0" t-list="{{item}}"></component-talk>
            </view>
          </scroll-view>
        </view>
      </swiper-item>
    </swiper>
  </view>
  <view class="bottom"></view>
</view>

================================================
FILE: client/pages/order/order.wxss
================================================
view {
  width: 100%;
  padding: 0rpx 0rpx;
  margin: 0rpx 0rpx;
  font-size: 0rpx;
}

/*抛物线动画*/

.good_box {
  width: 18px;
  height: 18px;
  position: fixed;
  border-radius: 50%;
  overflow: hidden;
  left: 50%;
  top: 50%;
  z-index: +99;
  background: #ff6b12;
}

.container .title {
  width: 92%;
  background: url("http://wangcong.fun/images/car1_02.jpg") no-repeat;
  background-size: 100% 100%;
  padding: 20rpx 4% 0;
  height: 230rpx;
}

.container .title .sign {
  font-size: 30rpx;
  color: #fff;
  font-weight: bold;
  margin-bottom: 20rpx;
}

.container .title .des {
  font-size: 24rpx;
  color: #fff;
  display: flex;
  justify-content: space-between;
  align-content: center;
}

.container .title .des .img_con {
  width: 172rpx;
  height: 172rpx;
  border-radius: 5rpx;
}

.container .title .des .text_con {
  width: 495rpx;
}

.container .title .des .text_con .text {
  font-size: 24rpx;
  display: block;
  line-height: 53rpx;
}

.container .title .des .text_con .text:first-of-type {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.container .title .des .text_con .text:first-of-type .weui-btn-area {
  display: inline-block;
  width: 48rpx;
  height: 29rpx;
  border-left: 1rpx solid #fff;
}

.container .title .des .text_con .text .open_time {
  font-size: 26rpx;
}

.container .title .des .text_con .text:first-of-type view .sign_btn {
  width: 22rpx;
  height: 31rpx;
  margin-left: 15rpx;
}

.container .title .des .text_con .text:last-of-type {
  width: 100%;
  height: 55rpx;
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}

.container .coupon {
  width: 92%;
  padding: 30rpx 4% 20rpx;
  font-size: 24rpx;
  color: #888;
  line-height: 26rpx;
  display: flex;
  justify-content: start;
  align-items: center;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.container .coupon .ticket {
  width: 30rpx;
  height: 30rpx;
  background: #ff6b12;
  color: #fff;
  font-size: 22rpx;
  line-height: 28rpx;
  text-align: center;
  border-radius: 30rpx;
  margin-right: 10rpx;
}

.container .body .b_title {
  height: 66rpx;
  display: flex;
  justify-content: space-between;
  border-bottom: 1rpx solid;
  border-color: #ddd;
  box-sizing: border-box;
}

.container .body .b_title .order {
  display: inline-block;
  text-align: center;
  font-size: 26rpx;
  color: #ff6b12;
}

.container .body .b_title .comment {
  display: inline-block;
  text-align: center;
  font-size: 26rpx;
  color: #333;
}

.container .body .b_title .com {
  display: inline-block;
  height: 100%;
  line-height: 66rpx;
  font-size: 30rpx;
  width: auto;
  padding-bottom: 5rpx;
  box-sizing: border-box;
}

.container .body .b_title .active {
  color: #ff6b12;
  position: relative;
}

.container .body .b_title .active::after {
  content: "";
  display: block;
  position: absolute;
  left: -5rpx;
  bottom: 0;
  width: 70rpx;
  height: 2rpx;
  background: #ff6b12;
}

.container .body .o_con {
  width: 100%;
  height: 100%;
  position: relative;
}

.container .body .o_con .o-center {
  height: auto;
  font-size: 24rpx;
  display: flex;
}

.container .body .o_con .o-center .left {
  width: 166rpx;
}

.container .body .o_con .o-center .left .tab {
  height: 108rpx;
  width: 166rpx;
  color: #333;
  text-align: center;
  line-height: 108rpx;
  font-size: 26rpx;
  background-color: #f5f5f9;
  border-top: 1rpx solid;
  border-color: #ddd;
  display: block;
}

.container .body .o_con .o-center .left .tab:first-of-type {
  border-top: none;
}

.container .body .o_con .o-center .left .active {
  color: #ff6b12;
  background-color: #fff;
  font-size: 30rpx;
}

.container .body .o_con .o-center .right .scr {
  height: 100%;
}

.container .body .o_con .o-center .right .right_tab {
  margin-left: 20rpx;
  position: relative;
}

.container .body .o_con .o-center .right .right_tab .des_type {
  color: #666;
  font-size: 24rpx;
  line-height: 60rpx;
}

.container .body .o_con .o-center .right .right_tab .des {
  padding-bottom: 50rpx;
  font-size: 24rpx;
  color: #fff;
  display: flex;
  justify-content: space-between;
  align-content: center;
  position: relative;
}

.container .body .o_con .o-center .right .right_tab .des .img_con {
  width: 150rpx;
  height: 150rpx;
  border-radius: 5rpx;
  /* flex: 1; */
}

.container .body .o_con .o-center .right .right_tab .des .text_con {
  font-size: 24rpx;
  height: auto;
  flex: 2.4;
}

.container .body .o_con .o-center .right .right_tab .des .text_con .text {
  display: block;
  line-height: 40rpx;
  margin-left: 20rpx;
}

.container .body .o_con .o-center .right .right_tab .des .text_con .name {
  font-size: 28rpx;
  color: #333;
}

.container .body .o_con .o-center .right .right_tab .des .text_con .desc {
  font-size: 24rpx;
  color: #888;
  width: 365rpx;
  height: 83rpx;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}

.container .body .o_con .o-center .right .right_tab .des .text_con .price {
  font-size: 34rpx;
  color: #ff2b4d;
}

.container .body .o_con .o-center .right .right_tab .add_btn {
  position: absolute;
  right: 40rpx;
  bottom: 50rpx;
  width: 45rpx;
  height: 45rpx;
  padding: 40rpx 0 0 40rpx;
}

.container .body .o_con .info {
  width: 100%;
  height: 50rpx;
  position: absolute;
  background-color: #fff0e7;
  line-height: 50rpx;
  font-size: 20rpx;
  text-align: center;
  bottom: 130rpx;
  z-index: 1000;
}

.container .body .o_con .info .from {
  color: #ff6b12;
}

.container .body .o_con .info .tx {
  color: #888;
}

.order-info {
  width: 100%;
  height: 106rpx;
  position: absolute;
  left: 0;
  z-index: 10000;
  bottom: -6rpx;
  line-height: 106rpx;
  font-size: 0;
  text-align: center;
  background-color: #3cc51f;
  display: flex;
}

.car_left {
  width: 77%;
  background-color: #393939;
}

.cantap {
  border-color: #ff6b12;
}

.order-info .o-left {
  width: 23%;
  background-color: #393939;
  padding-left: 25%;
  text-align: left;
  font-size: 38rpx;
  color: #fff;
  line-height: 100rpx;
}

.order-info .o-right {
  flex: 1;
  background-color: #ff6b12;
  text-align: center;
  font-size: 30rpx;
  color: #fff;
  line-height: 100rpx;
}

.order-info .shop-cart {
  width: 100rpx;
  height: 100rpx;
  position: absolute;
  bottom: 10%;
  left: 3%;
  z-index: 999;
}

.order-info .shop-number {
  width: 30rpx;
  height: 30rpx;
  border-radius: 30rpx;
  border: 1rpx solid #fff;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  position: absolute;
  left: 90rpx;
  bottom: 90rpx;
  background-color: #ff2b4d;
  text-align: center;
  line-height: 30rpx;
  font-size: 20rpx;
  color: #fff;
  z-index: 1000;
}

.car_scroll {
  overflow: scroll;
}

.container .body .c-con {
  box-sizing: border-box;
  padding: 0rpx 30rpx 0rpx 30rpx;
}

.container .body .c-con .com-container {
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  margin: 20rpx 0;
}

.container .body .c-con .com-container .comment {
  font-size: 28rpx;
  color: #333;
}

.container .body .c-con .com-container .com-more {
  font-size: 22rpx;
  color: #888;
}

.mask {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 999;
  background: rgba(0, 0, 0, 0.5);
  bottom: 98rpx;
}

.mask .shop-car-con {
  width: 100%;
  height: auto;
  position: absolute;
  bottom: 0rpx;
  left: 0;
  /* padding-bottom:98rpx; */
  background: #fff;
  z-index: 1000;
  max-height: 60%;
  /* overflow: scroll; */
}

.mask .shop-car-con .clear_car {
  width: 100%;
  height: 78rpx;
  display: flex;
  justify-content: flex-end;
  align-items: center;
  padding: 0 4%;
  box-sizing: border-box;
  background: #ddd;
}

.mask .shop-car-con .clear_car image {
  display: block;
  width: 15rpx;
  height: 17rpx;
  margin-right: 10rpx;
}

.mask .shop-car-con .clear_car text {
  color: #888;
  font-size: 24rpx;
}

.mask .shop-car-con  .car_content {
  width: 100%;
  padding: 0 4%;
  box-sizing: border-box;
  height: 100rpx;
  border-top: 1rpx solid #ddd;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: nowrap;
}

.mask .shop-car-con  .car_content .order_name {
  width: 350rpx;
  font-size: 26rpx;
  color: #333;
}

.mask .shop-car-con  .car_content .order_name text:last-of-type {
  font-size: 24rpx;
  color: #888;
  margin-left: 20prx;
}

.mask .shop-car-con  .car_content .order_right {
  width: 260rpx;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.mask .shop-car-con  .car_content .order_right .order_price {
  color: #ff6b12;
  font-size: 26rpx;
}

.mask .shop-car-con  .car_content .order_right .order_btn {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 154rpx;
}

.mask .shop-car-con  .car_content .order_right .order_btn text {
  font-size: 38rpx;
  color: #333;
  display: block;
  width: 45rpx;
  height: 45rpx;
  line-height: 45rpx;
  box-sizing: border-box;
  text-align: center;
}

.mask .shop-car-con  .car_content .order_right .order_btn text:first-of-type {
  color: #888;
  font-size: 40rpx;
  line-height: 12rpx;
  font-weight: bold;
  border-radius: 100%;
  border: 3rpx solid #ddd;
}

.mask .shop-car-con  .car_content .order_right .order_btn image {
  display: block;
  width: 45rpx;
  height: 45rpx;
}

.cancel_table_container {
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 100;
}

.cancel_table_container .cancel_table {
  width: 100%;
  height: auto;
  padding: 30rpx 4%;
  box-sizing: border-box;
  position: absolute;
  background: #fff;
  bottom: 102rpx;
  right: 0;
  border-radius: 5rpx;
}

.cancel_table_container .cancel_table .cancel_title {
  width: 100%;
  margin: 0 auto;
  height: 150rpx;
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  font-size: 30rpx;
  color: #333;
  font-weight: bold;
  position: relative;
  margin-bottom: 40rpx;
}

.cancel_table_container .cancel_table .cancel_title image {
  display: block;
  width: 150rpx;
  height: 150rpx;
  border-radius: 5rpx;
}

.cancel_table_container .cancel_table .cancel_title  .seclet_text {
  width: 435rpx;
}

.discount_info {
  display: flex;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.discount_info text {
  display: block;
  font-size: 24rpx;
  color: #888;
}

.cancel_table_container .cancel_table .cancel_title  .seclet_text view {
  font-size: 24rpx;
  color: #888;
}

.cancel_table_container .cancel_table .cancel_title  .seclet_text view:first-of-type {
  color: #333;
  font-size: 28rpx;
}

.cancel_table_container .cancel_table .cancel_title  .seclet_text view:last-of-type {
  font-size: 34rpx;
  color: #ff2b4d;
}

.cancel_table_container .cancel_table .cancel_title .close {
  color: #888;
  font-size: 50rpx;
}

.cancel_table_container .cancel_table .spec_container {
  width: 100%;
  font-size: 26rpx;
}

.cancel_table_container .cancel_table .spec_container .spec_title {
  font-size: 26rpx;
  color: #333;
  font-weight: bold;
  margin: 20rpx;
}

.cancel_table_container .cancel_table .spec_container .spec_content {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  justify-content: flex-start;
  /* font-size: 26rpx; */
}

.cancel_table_container .cancel_table .spec_container .spec_content span {
  font-size: 26rpx;
  padding: 20rpx;
  text-align: center;
  box-sizing: border-box;
  margin: 12rpx;
  border-radius: 5rpx;
  background: #f5f5f5;
  color: #666;
}

.cancel_table_container .cancel_table .spec_container .spec_content span.active {
  color: #ff6b12;
  background: #ffe1d0;
}

.cancel_table_container .cancel_table .ensure {
  width: 100%;
  height: 80rpx;
  margin: 0 auto;
  margin-top: 30rpx;
  background: #ff6b12;
  font-size: 30rpx;
  color: #fff;
  text-align: center;
  line-height: 80rpx;
  border-radius: 5rpx;
}

.empty {
  width: 100%;
  height: 300rpx;
  padding: 100rpx 0;
  text-align: center;
}

.empty image {
  display: block;
  width: 110rpx;
  height: 90rpx;
  margin: 30rpx auto;
}

.empty text {
  display: block;
  width: 100%;
  text-align: center;
}


================================================
FILE: client/pages/order/type.js
================================================


export var tasteMaskData = ['不辣','超辣']
export var orderTab = [
    {
        name:"优惠",
        type:0,
        data:[{
            name:'紫曙光家常菜',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },
            {
                name:'紫曙光家常菜',
                src:'../images/car_10.png',
                des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
                price:'298'
            },{
                name:'紫曙光家常菜',
                src:'../images/car_10.png',
                des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
                price:'298'
            },
            {
                name:'紫曙光家常菜',
                src:'../images/car_10.png',
                des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
                price:'298'
            },
            {
                name:'紫曙光家常菜',
                src:'../images/car_10.png',
                des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
                price:'298'
            }
            ]
    },

    {
        name:"主食",
        type:1,
        data:[{
            name:'主食',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },
        {
            name:'主食',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },
        {
            name:'主食',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },
        {
            name:'主食',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },
        {
            name:'主食',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        }

    ]
    },
    {
        name:"炒菜",
        type:2,
        data:[{
            name:'炒菜',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },
        {
            name:'炒菜',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },{
            name:'炒菜',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },{
            name:'炒菜',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        }]
    },

    {
        name:"烧烤",
        type:3,
        data:[{
            name:'烧烤',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },{
            name:'烧烤',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },{
            name:'烧烤',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        }]
    },
    {
        name:"推荐",
        type:4,
        data:[{
            name:'推荐',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },{
            name:'推荐',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },{
            name:'推荐',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        }]
    },

    {
        name:"凉菜",
        type:5,
        data:[{
            name:'凉菜',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },{
            name:'凉菜',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        },{
            name:'凉菜',
            src:'../images/car_10.png',
            des:'主料荷兰豆,沙拉酱,新鲜牛肉,等。价格便宜,好吃不贵...',
            price:'298'
        }]
    }
];

/**
 * 当前满足优惠券信息假数据
 */
export var coupon = [
    {
        'from':'20',
        'to':'10'
},
{
        'from':'100',
        'to':'667799'  //奖励商品编号
}
]

/**
 * 优惠券套用模板类型
 * @type {{}}
 */
export var couponType ={
    'mony':0, //满足 某些数字 奖励满减
    'box':1   //满足 某些数字 奖励商品
}






================================================
FILE: client/pages/pay_input/pay_input.js
================================================
// pages/topay/topay.js
var app = getApp();
import {
  Http
} from '../../utils/httpClient.js';
import { URL } from '../../utils/urlModel.js';
// import{payment} from '../../utils/payment.js';
import { formatTime } from '../../utils/util';
var httpClient = new Http();
Page({
  /**
   * 组件的属性列表
   */
  properties: {

  },

  /**
   * 组件的初始数据
   */
  data: {
    code: '',
    shopId: '',
    price: '',
    chargeMoney: 0,
    rechargeConf: [],//充值满送配置
    idx:'',//控制选中状态
    iptvalue:'',//充值输入框的值
    shopname:'',
    /**
    /**
     * 选择支付状态
     * 1 余额支付 2微信支付 
     */
    tab:1,
    /**
     * 弹窗优惠券内容
     */
    couponData: [],
    /**
     * 优惠券数量
     */
    count: 1,

    /**
     * 优惠券弹窗是否显示
     * false: 否
     */
    markCoupon: false,

    /**
     * 当前选择优惠券
     * -1 可查看是否可用优惠券 0没有可用优惠券 {}选择的优惠券内容
     */
    curSelectCoupon: -1,

    /**
     * 输入密码弹窗
     */
    maskInputPassed:false,
    /**
     * 输入框数据
     */
    inputData: {
      input_value: "",//输入框的初始内容
      value_length: 0,//输入框密码位数
      isNext: false,//是否有下一步的按钮
      get_focus: true,//输入框的聚焦状态
      focus_class: true,//输入框聚焦样式
      value_num: [1, 2, 3, 4, 5, 6],//输入框格子数
      height: "98rpx",//输入框高度
      width: "604rpx",//输入框宽度
      see: false,//是否明文展示
      interval: true,//是否显示间隔格子
    },


  },
  // 密码输入完成验证
  valueSix(e){
     var cid = Object.prototype.toString.call(this.data.curSelectCoupon).slice(8, -1) == 'object' && this.data.curSelectCoupon ? this.data.curSelectCoupon.id : '';
        var argu = {
          token: app.globalData.token,
          lid: this.data.shopId,
          money: this.data.price,
          cid: cid,
          passWord:e.detail
        }
        httpClient.payAmountPaymnet(argu)
        .then((res)=>{
          console.log('支付成功');
          wx.showToast({
            title: '支付成功'
          });
          this.closeMarkPassword();
          wx.navigateTo({
            url: "../pay_success/pay_success?price="+_this.data.chargeMoney
          })
        })
        .catch((e)=>{
          console.log('支付失败');
          var str = e.msg?e.msg:'支付失败';
        
          wx.showToast({
            title: str
          });
          //重新开启弹窗
          this.closeMarkPassword();
          this.openMarkPassword();
        })
  },
  initData(options) {
    var httpClient = new Http();
    console.log(options);
    this.setData({
      shopId: options.lid,
      shopname:options.shopname
    })
    //获取充值满送配置接口,传空参
    httpClient.getChargeConf("").then((data) => {
      this.setData({
        rechargeConf: data
      })
      console.log(this.data.rechargeConf);
    })

  },
Download .txt
gitextract_jxxs9e2u/

├── README.md
└── client/
    ├── app.js
    ├── app.json
    ├── app.wxss
    ├── pages/
    │   ├── appointment/
    │   │   ├── appointment.js
    │   │   ├── appointment.json
    │   │   ├── appointment.wxml
    │   │   └── appointment.wxss
    │   ├── az/
    │   │   ├── az.js
    │   │   ├── az.json
    │   │   ├── az.wxml
    │   │   └── az.wxss
    │   ├── component/
    │   │   ├── all_food.wxml
    │   │   ├── coupon.wxml
    │   │   ├── date-select/
    │   │   │   ├── date-select.js
    │   │   │   ├── date-select.json
    │   │   │   ├── date-select.wxml
    │   │   │   └── date-select.wxss
    │   │   ├── index_list.wxml
    │   │   ├── key_component/
    │   │   │   ├── component.js
    │   │   │   ├── component.json
    │   │   │   ├── component.wxml
    │   │   │   └── component.wxss
    │   │   ├── multiple-rate/
    │   │   │   ├── multiple-rate.js
    │   │   │   ├── multiple-rate.json
    │   │   │   ├── multiple-rate.wxml
    │   │   │   └── multiple-rate.wxss
    │   │   ├── nearby.wxml
    │   │   ├── pocket.js
    │   │   ├── pocket.json
    │   │   ├── pocket.wxml
    │   │   ├── pocket.wxss
    │   │   └── soft_list.wxml
    │   ├── coupon/
    │   │   ├── coupon.js
    │   │   ├── coupon.json
    │   │   ├── coupon.wxml
    │   │   └── coupon.wxss
    │   ├── droppassword/
    │   │   ├── droppassword.js
    │   │   ├── droppassword.json
    │   │   ├── droppassword.wxml
    │   │   └── droppassword.wxss
    │   ├── indent/
    │   │   ├── indent.js
    │   │   ├── indent.json
    │   │   ├── indent.wxml
    │   │   └── indent.wxss
    │   ├── index/
    │   │   ├── index.js
    │   │   ├── index.json
    │   │   ├── index.wxml
    │   │   ├── index.wxss
    │   │   └── type.js
    │   ├── mycenter/
    │   │   ├── mycenter.js
    │   │   ├── mycenter.json
    │   │   ├── mycenter.wxml
    │   │   └── mycenter.wxss
    │   ├── mytalk/
    │   │   ├── mytalk.js
    │   │   ├── mytalk.json
    │   │   ├── mytalk.wxml
    │   │   └── mytalk.wxss
    │   ├── order/
    │   │   ├── order.js
    │   │   ├── order.json
    │   │   ├── order.wxml
    │   │   ├── order.wxss
    │   │   └── type.js
    │   ├── pay_input/
    │   │   ├── pay_input.js
    │   │   ├── pay_input.json
    │   │   ├── pay_input.wxml
    │   │   └── pay_input.wxss
    │   ├── pay_success/
    │   │   ├── pay_success.js
    │   │   ├── pay_success.json
    │   │   ├── pay_success.wxml
    │   │   └── pay_success.wxss
    │   ├── pocket/
    │   │   ├── pocket.js
    │   │   ├── pocket.json
    │   │   ├── pocket.wxml
    │   │   └── pocket.wxss
    │   ├── points/
    │   │   ├── points.js
    │   │   ├── points.json
    │   │   ├── points.wxml
    │   │   └── points.wxss
    │   ├── review/
    │   │   ├── index.wxss
    │   │   ├── review.js
    │   │   ├── review.json
    │   │   ├── review.wxml
    │   │   └── review.wxss
    │   ├── reviewfdetails/
    │   │   ├── reviewfdetails.js
    │   │   ├── reviewfdetails.json
    │   │   ├── reviewfdetails.wxml
    │   │   └── reviewfdetails.wxss
    │   ├── reviewlist/
    │   │   ├── reviewlist.js
    │   │   ├── reviewlist.json
    │   │   ├── reviewlist.wxml
    │   │   └── reviewlist.wxss
    │   ├── shop/
    │   │   ├── shop.js
    │   │   ├── shop.json
    │   │   ├── shop.wxml
    │   │   └── shop.wxss
    │   ├── shop_list/
    │   │   ├── shop_list.js
    │   │   ├── shop_list.json
    │   │   ├── shop_list.wxml
    │   │   ├── shop_list.wxss
    │   │   └── type.js
    │   ├── switchcity/
    │   │   ├── switchcity.js
    │   │   ├── switchcity.json
    │   │   ├── switchcity.wxml
    │   │   └── switchcity.wxss
    │   ├── talk/
    │   │   ├── talk.js
    │   │   ├── talk.json
    │   │   ├── talk.wxml
    │   │   └── talk.wxss
    │   └── topay/
    │       ├── topay.js
    │       ├── topay.json
    │       ├── topay.wxml
    │       └── topay.wxss
    ├── project.config.json
    ├── style/
    │   └── weui.wxss
    ├── utils/
    │   ├── area.js
    │   ├── area2.js
    │   ├── bmap-wx.js
    │   ├── city.js
    │   ├── httpClient.js
    │   ├── payment.js
    │   ├── qqmap-wx-jssdk.js
    │   ├── urlModel.js
    │   └── util.js
    └── weui.wxss
Download .txt
SYMBOL INDEX (251 symbols across 26 files)

FILE: client/app.js
  function pointLine (line 47) | function pointLine(points, rate) {

FILE: client/pages/appointment/appointment.js
  method upDateDate (line 203) | upDateDate() {
  method toOrder (line 223) | toOrder() {
  method bindDateChange (line 281) | bindDateChange(e){
  method bindTimeChange (line 288) | bindTimeChange(e){
  method mealNumberChange (line 298) | mealNumberChange(e) {
  method bindinputnumber (line 305) | bindinputnumber(e) {
  method mealSurnameChange (line 314) | mealSurnameChange(e) {
  method radioChange (line 322) | radioChange(e) {
  method mealIphoneChange (line 331) | mealIphoneChange(e) {
  method pattern (line 336) | pattern(e) {
  method mealDescChange (line 374) | mealDescChange(e) {
  method setTable (line 384) | setTable(e) {
  method appointmentOrderFood (line 456) | appointmentOrderFood(e) {

FILE: client/pages/component/key_component/component.js
  method get_focus (line 123) | get_focus() {
  method blur (line 131) | blur() {
  method set_focus (line 139) | set_focus() {
  method get_value (line 147) | get_value(data) {

FILE: client/pages/coupon/coupon.js
  method updateCoupon (line 91) | updateCoupon(tab,data){
  method changeTab (line 118) | changeTab(e) {
  method swiperTab (line 127) | swiperTab(e) {
  method getuserCoupon (line 136) | getuserCoupon(){
  method selectOneCoupon (line 160) | selectOneCoupon(e) {
  method clickUseCoupon (line 163) | clickUseCoupon(e) {
  method bindDownLoad (line 171) | bindDownLoad(e) {

FILE: client/pages/indent/indent.js
  method toPay (line 27) | toPay(e) {
  method goReview (line 62) | goReview(e) {
  method showcancelTable (line 68) | showcancelTable(e) {
  method changeText (line 106) | changeText(e) {
  method getRefun (line 113) | getRefun() {
  method closerefundMoney (line 151) | closerefundMoney() {
  method onLoad (line 156) | onLoad() {
  method open (line 174) | open(e) {
  method getOrder (line 202) | getOrder() {
  method update (line 253) | update() {
  method loadMore (line 259) | loadMore() {
  method timestampToTime (line 268) | timestampToTime(timestamp) {

FILE: client/pages/index/index.js
  method onShow (line 156) | onShow(){
  method initData (line 166) | initData(){
  method getListIndex (line 324) | getListIndex() {
  method onReachBottom (line 350) | onReachBottom() {
  method toShop (line 357) | toShop(e) {
  method toSwichtcity (line 364) | toSwichtcity(){
  method toshopList (line 370) | toshopList(e) {
  method gosign (line 404) | gosign(){
  method next (line 557) | next(){
  method nextPage (line 567) | nextPage(){
  method nextSearchPage (line 606) | nextSearchPage(){
  method searchShop (line 658) | searchShop(e){
  method searchEnd (line 698) | searchEnd(e){

FILE: client/pages/mycenter/mycenter.js
  method getUserIters (line 93) | getUserIters(){
  method goSign (line 109) | goSign(){
  method showKey (line 139) | showKey(e){
  method closeKey (line 150) | closeKey(){
  method valueSix (line 158) | valueSix(e) {
  method valueSixRe (line 186) | valueSixRe(e){
  method valueSixRe2 (line 190) | valueSixRe2(e){
  method initData (line 232) | initData(){
  method showInputPassed (line 278) | showInputPassed(){
  method showRevisePassed (line 287) | showRevisePassed(){
  method toPassWord (line 325) | toPassWord(){
  method checkOrder (line 337) | checkOrder() {
  method droppassword (line 342) | droppassword(){
  method toamount (line 447) | toamount(){
  method points (line 452) | points(){
  method closetelephoneMask (line 457) | closetelephoneMask(){

FILE: client/pages/mytalk/mytalk.js
  method onLoad (line 28) | onLoad(options) {
  method initData (line 31) | initData(options) {
  method nextPage (line 113) | nextPage(){

FILE: client/pages/order/order.js
  method initData (line 174) | initData(options) {
  method bindScroll (line 427) | bindScroll(e){
  method previewImg (line 454) | previewImg(e){
  method changeSelect (line 474) | changeSelect(e) {
  method submitShopCar (line 529) | submitShopCar(argus) {
  method clearShopCar (line 553) | clearShopCar(callback) {
  method toPay (line 581) | toPay() {
  method reviewList (line 623) | reviewList() {
  method clickSelectSpec (line 631) | clickSelectSpec(e) {
  method showSpecbox (line 642) | showSpecbox(e) {
  method closeSpecBoxs (line 651) | closeSpecBoxs(e){
  method noSpecboxs (line 659) | noSpecboxs(e) {
  method showSpecboxs (line 687) | showSpecboxs(e) {
  method showcar (line 715) | showcar(e) {
  method maskCar (line 720) | maskCar(e){
  method addNum (line 729) | addNum(e) {
  method culSum (line 746) | culSum() {
  method decreaseNum (line 782) | decreaseNum(e) {
  method commitScrollBottom (line 803) | commitScrollBottom(e){

FILE: client/pages/pay_input/pay_input.js
  method valueSix (line 80) | valueSix(e){
  method initData (line 112) | initData(options) {
  method selectOneCoupon (line 136) | selectOneCoupon(e) {
  method getValue (line 190) | getValue(e) {
  method changeValue (line 196) | changeValue(e) {
  method tabChange (line 203) | tabChange(e){
  method payBalancePassword (line 210) | payBalancePassword(){
  method openMarkPassword (line 245) | openMarkPassword(){
  method closeMarkPassword (line 253) | closeMarkPassword(){
  method pay (line 264) | pay(){
  method paySuccess (line 279) | paySuccess() {
  method gocharge (line 358) | gocharge() {
  method getMoney (line 377) | getMoney(e) {
  method payment (line 385) | payment(data) {

FILE: client/pages/pay_success/pay_success.js
  method onLoad (line 23) | onLoad(options){
  method checkOrder (line 35) | checkOrder(){
  method propell (line 44) | propell(){

FILE: client/pages/pocket/pocket.js
  method changeValue (line 82) | changeValue(e) {
  method gocharge (line 90) | gocharge() {
  method getMoney (line 112) | getMoney(e) {
  method payment (line 121) | payment(data) {

FILE: client/pages/points/points.js
  method onLoad (line 21) | onLoad(options) {
  method onShow (line 28) | onShow() {
  method getUserIters (line 39) | getUserIters() {
  method showcalendar (line 56) | showcalendar() {
  method showcalendarClose (line 64) | showcalendarClose() {
  method goSign (line 70) | goSign() {
  method getIntegralList (line 101) | getIntegralList() {
  method getSignLists (line 117) | getSignLists() {

FILE: client/pages/review/review.js
  method initData (line 88) | initData(options){
  method changeText (line 116) | changeText(e){
  method clickIssue (line 248) | clickIssue(e){

FILE: client/pages/reviewfdetails/reviewfdetails.js
  method onLoad (line 26) | onLoad(options){

FILE: client/pages/reviewlist/reviewlist.js
  method reviewDetails (line 31) | reviewDetails() {
  method onLoad (line 37) | onLoad(options){
  method onReachBottom (line 43) | onReachBottom(){
  method initData (line 47) | initData(options){
  method scoreChange (line 76) | scoreChange(e){
  method typeChange (line 86) | typeChange(e){
  method upDateData (line 92) | upDateData(){

FILE: client/pages/shop/shop.js
  method initData (line 29) | initData(options){
  method toOrder (line 99) | toOrder() {
  method appoint (line 105) | appoint(){
  method toPay (line 111) | toPay() {
  method preivewImag (line 117) | preivewImag(e){
  method previewSDetail (line 128) | previewSDetail(e){
  method scanCode (line 156) | scanCode(){

FILE: client/pages/shop_list/shop_list.js
  method onLoad (line 155) | onLoad(options){
  method initData (line 169) | initData(){
  method getListIndex (line 320) | getListIndex() {
  method toShop (line 347) | toShop(e) {
  method toSwichtcity (line 354) | toSwichtcity(){
  method toshopList (line 359) | toshopList() {
  method next (line 514) | next(){
  method nextPage (line 524) | nextPage(){
  method nextSearchPage (line 563) | nextSearchPage(){
  method searchShop (line 615) | searchShop(e){

FILE: client/pages/switchcity/switchcity.js
  method updateAppCity (line 161) | updateAppCity(cityId){

FILE: client/pages/talk/talk.js
  method created (line 119) | created(){
  method onReachBottom (line 145) | onReachBottom(){
  method clickLookMore (line 166) | clickLookMore(e){

FILE: client/pages/topay/topay.js
  method initData (line 86) | initData(options) {
  method valueSix (line 124) | valueSix(e){
  method getOrderInfo (line 164) | getOrderInfo(){
  method selectOneCoupon (line 184) | selectOneCoupon(e) {
  method getValue (line 258) | getValue(e) {
  method changeValue (line 264) | changeValue(e) {
  method descChange (line 271) | descChange(e){
  method tabChange (line 277) | tabChange(e){
  method payBalancePassword (line 285) | payBalancePassword(){
  method openMarkPassword (line 316) | openMarkPassword(){
  method closeMarkPassword (line 325) | closeMarkPassword(){
  method pay (line 336) | pay(){
  method paySuccess (line 352) | paySuccess() {
  method gocharge (line 436) | gocharge() {
  method getMoney (line 456) | getMoney(e){
  method payment (line 464) | payment(data) {
  method showKey (line 506) | showKey(e) {

FILE: client/utils/bmap-wx.js
  class BMapWX (line 11) | class BMapWX {
    method constructor (line 18) | constructor(param) {
    method getWXLocation (line 30) | getWXLocation(type, success, fail, complete) {
    method search (line 50) | search(param) {
    method suggestion (line 151) | suggestion(param) {
    method regeocoding (line 199) | regeocoding(param) {
    method weather (line 291) | weather(param) {

FILE: client/utils/city.js
  function searchLetter (line 10) | function searchLetter() {
  function cityList (line 15) | function cityList() {
  function pushCity (line 34) | function pushCity() {

FILE: client/utils/httpClient.js
  function PromiseFun (line 6) | function PromiseFun(argu,url,num){
  class Http (line 39) | class Http{
    method constructor (line 40) | constructor(){
    method getNavIndex (line 47) | getNavIndex(){
    method getBannerIndex (line 64) | getBannerIndex(){
    method getMap (line 81) | getMap(){
    method getCity (line 92) | getCity(){
    method getWeather (line 115) | getWeather(){
    method getListIndex (line 132) | getListIndex(argu){
    method getShopDetail (line 159) | getShopDetail(argu){
    method getShopDetailList (line 179) | getShopDetailList(argu){
    method getStoreList (line 187) | getStoreList(argu){
    method getStoreDetail (line 194) | getStoreDetail(argu){
    method getStoreCommit (line 201) | getStoreCommit(argu){
    method postPutEvaluate (line 209) | postPutEvaluate(argu){
    method postStoreShopping (line 216) | postStoreShopping(argu){
    method getStoreShopping (line 235) | getStoreShopping(argu){
    method clearStoreShopping (line 242) | clearStoreShopping(argu){
    method getChargeMoney (line 258) | getChargeMoney(argu){
    method getPayment (line 262) | getPayment(argu){
    method getOrderFound (line 266) | getOrderFound(argu){
    method getOrederSelect (line 270) | getOrederSelect(argu){
    method getOrederSelected (line 274) | getOrederSelected(argu){
    method clickSign (line 278) | clickSign(argu){
    method postOrderAppointmentFound (line 285) | postOrderAppointmentFound(argu){
    method getChargeConf (line 289) | getChargeConf(argu){
    method postWxPayOrder (line 294) | postWxPayOrder(argu){
    method getUserCommitList (line 298) | getUserCommitList(argu){
    method postWxPayment (line 302) | postWxPayment(argu){
    method getUserOrderList (line 306) | getUserOrderList(argu){
    method getuserCouponList (line 310) | getuserCouponList(argu){
    method isOrderChooseCoupon (line 314) | isOrderChooseCoupon(argu){
    method getUserWalletList (line 318) | getUserWalletList(argu){
    method getUserAmount (line 323) | getUserAmount(argu){
    method getPaymentSelectCoupon (line 329) | getPaymentSelectCoupon(argu){
    method payWxPayPayment (line 336) | payWxPayPayment(argu){
    method refundOrder (line 340) | refundOrder(argu){
    method payAmountPaymnet (line 347) | payAmountPaymnet(argu){
    method getUserInfo (line 354) | getUserInfo(argu){
    method getUserIntegralList (line 360) | getUserIntegralList(argu){
    method getUserIntegral (line 367) | getUserIntegral(argu){
    method getSignList (line 374) | getSignList(argu){
    method setSign (line 382) | setSign(argu){
    method cancelOrder (line 386) | cancelOrder(argu){
    method getUserCheckPassword (line 393) | getUserCheckPassword(argu){
    method getUserSetPassword (line 401) | getUserSetPassword(argu){
    method setUserModifyPassword (line 409) | setUserModifyPassword(argu){
    method getPwdModifyCode (line 417) | getPwdModifyCode(argu){
    method getBindingVerificationCode (line 424) | getBindingVerificationCode(argu){
    method getUserBindingMobile (line 432) | getUserBindingMobile(argu){
    method getOrderSelectCoupon (line 438) | getOrderSelectCoupon(argu){
    method setOrderSelectCoupon (line 444) | setOrderSelectCoupon(argu){
    method search (line 451) | search(argu){
    method postAmountOrder (line 459) | postAmountOrder(argu){
    method postV2AppointmentFound (line 467) | postV2AppointmentFound(argu){

FILE: client/utils/qqmap-wx-jssdk.js
  method location2query (line 31) | location2query(data) {
  method getWXLocation (line 54) | getWXLocation(success, fail, complete) {
  method getLocationParam (line 66) | getLocationParam(location) {
  method polyfillParam (line 84) | polyfillParam(param) {
  method checkParamKeyEmpty (line 96) | checkParamKeyEmpty(param, key) {
  method checkKeyword (line 111) | checkKeyword(param){
  method checkLocation (line 120) | checkLocation(param) {
  method buildErrorConfig (line 136) | buildErrorConfig(errCode, errMsg) {
  method buildWxRequestConfig (line 149) | buildWxRequestConfig(param, options) {
  method locationProcess (line 193) | locationProcess(param, locationsuccess, locationfail, locationcomplete) {
  class QQMapWX (line 214) | class QQMapWX {
    method constructor (line 221) | constructor(options) {
    method search (line 236) | search(options) {
    method getSuggestion (line 284) | getSuggestion(options) {
    method reverseGeocoder (line 315) | reverseGeocoder(options) {
    method geocoder (line 347) | geocoder(options) {
    method getCityList (line 377) | getCityList(options) {
    method getDistrictByCityId (line 400) | getDistrictByCityId(options) {
    method calculateDistance (line 431) | calculateDistance(options) {

FILE: client/utils/util.js
  function formatTimeTwo (line 49) | function formatTimeTwo(number, format) {
Condensed preview — 125 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,512K chars).
[
  {
    "path": "README.md",
    "chars": 1009,
    "preview": "# orderSystem\n微信小程序-仿照美团、大众点评做的一个点餐的小程序,内容包含登录、页面跳转、楼梯效果、点餐动画、订桌、订餐、城市定位与天气定位(使用baiduapi)、微信支付,评论等功能\n### 项目结构\n    \"pages"
  },
  {
    "path": "client/app.js",
    "chars": 2568,
    "preview": "//app.js\nimport {URL} from './utils/urlModel.js';\n\n/**\n * 用户所用到的\n */\nvar scope = {\n  userInfo:false,\n  userLocation:fals"
  },
  {
    "path": "client/app.json",
    "chars": 1555,
    "preview": "{\n  \"pages\": [\n    \"pages/az/az\",\n    \"pages/index/index\",\n    \"pages/mycenter/mycenter\",\n    \"pages/indent/indent\",\n   "
  },
  {
    "path": "client/app.wxss",
    "chars": 200,
    "preview": "/**app.wxss**/\n@import 'style/weui.wxss';\n.container {\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n  alig"
  },
  {
    "path": "client/pages/appointment/appointment.js",
    "chars": 12871,
    "preview": "// pages/appointment/appointment.js\n\nvar app = getApp();\n\nimport { Http } from '../../utils/httpClient';\nvar httpClient "
  },
  {
    "path": "client/pages/appointment/appointment.json",
    "chars": 115,
    "preview": "{\n    \"navigationBarTitleText\": \"预约\",\n    \"component\": true,\n    \"disableScroll\": true,\n    \"usingComponents\": {}\n}"
  },
  {
    "path": "client/pages/appointment/appointment.wxml",
    "chars": 3474,
    "preview": "<!-- pages/appointment/appointment.wxml -->\n<!-- 时间选择器 -->\n<!-- <view class=\"mask\" hidden=\"{{!dateSelectHidden}}\">\n    <"
  },
  {
    "path": "client/pages/appointment/appointment.wxss",
    "chars": 2285,
    "preview": ".container {\n  width: 100%;\n  padding: 2%;\n  padding-bottom: 0;\n  background: #f5f5f9;\n}\n.appoint_center {\n  width: 100%"
  },
  {
    "path": "client/pages/az/az.js",
    "chars": 2796,
    "preview": "//js\n\nvar app = getApp();\nPage({\n  data: {\n    canIUse: wx.canIUse('button.open-type.getUserInfo'),\n    show:true\n  },\n "
  },
  {
    "path": "client/pages/az/az.json",
    "chars": 2,
    "preview": "{}"
  },
  {
    "path": "client/pages/az/az.wxml",
    "chars": 452,
    "preview": "<!--wxml-->\n<!-- 如果只是展示用户头像昵称,可以使用 <open-data /> 组件 -->\n<view hidden=\"{{show}}\" style=\"width:200rpx;height:200rpx;margin"
  },
  {
    "path": "client/pages/az/az.wxss",
    "chars": 23,
    "preview": "/* pages/az/az.wxss */\n"
  },
  {
    "path": "client/pages/component/all_food.wxml",
    "chars": 336,
    "preview": "<!-- 全部美食界面 -->\n<template name=\"all_foodst\">\n  <view class='all-food-con'>\n      <view class=\"all-food-con-child {{allFo"
  },
  {
    "path": "client/pages/component/coupon.wxml",
    "chars": 1472,
    "preview": "<!--\n    优惠券弹窗内容\n    数据: couponData[{\n            reduce:'',\n            from:'',\n            date:'',\n            shopN"
  },
  {
    "path": "client/pages/component/date-select/date-select.js",
    "chars": 194,
    "preview": "// pages/component/date-select/date-select.js\nComponent({\n  /**\n   * 组件的属性列表\n   */\n  properties: {\n\n  },\n\n  /**\n   * 组件的"
  },
  {
    "path": "client/pages/component/date-select/date-select.json",
    "chars": 48,
    "preview": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "client/pages/component/date-select/date-select.wxml",
    "chars": 110,
    "preview": "<!--pages/component/date-select/date-select.wxml-->\n<text>pages/component/date-select/date-select.wxml</text>\n"
  },
  {
    "path": "client/pages/component/date-select/date-select.wxss",
    "chars": 50,
    "preview": "/* pages/component/date-select/date-select.wxss */"
  },
  {
    "path": "client/pages/component/index_list.wxml",
    "chars": 800,
    "preview": "<!-- 上部分导航条 content[nearbyTab].text -->\n<template name=\"idnex_viewst\">\n  <view class=\"select_container\">\n    <view class"
  },
  {
    "path": "client/pages/component/key_component/component.js",
    "chars": 2939,
    "preview": "// component.js\nComponent({\n\n  // 组件属性\n  properties: {\n\n    //输入框密码位数\n    value_length: {\n      type: Number,\n      valu"
  },
  {
    "path": "client/pages/component/key_component/component.json",
    "chars": 48,
    "preview": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "client/pages/component/key_component/component.wxml",
    "chars": 849,
    "preview": "<view class='content'>\n    <!-- 输入框(表格) -->\n    <view class='{{(interval?\"pay_number\":\"pay_number_interval\")}}  {{focus_"
  },
  {
    "path": "client/pages/component/key_component/component.wxss",
    "chars": 1457,
    "preview": "/* 支付密码框 */\n\n.pay_number {\n  margin: 0 auto;\n  display: flex;\n  flex-direction: row;\n  border: 1px solid #cfd4d3;\n  /* b"
  },
  {
    "path": "client/pages/component/multiple-rate/multiple-rate.js",
    "chars": 1101,
    "preview": "/*\n * Author: simsir-lin\n * Github: https://github.com/simsir-lin\n * Email: 15986907592@163.com\n */\n \nComponent({\n  beha"
  },
  {
    "path": "client/pages/component/multiple-rate/multiple-rate.json",
    "chars": 23,
    "preview": "{\n  \"component\": true\n}"
  },
  {
    "path": "client/pages/component/multiple-rate/multiple-rate.wxml",
    "chars": 291,
    "preview": "<!--\n * Author: simsir-lin\n * Github: https://github.com/simsir-lin\n * Email: 15986907592@163.com\n-->\n\n<view class=\"mult"
  },
  {
    "path": "client/pages/component/multiple-rate/multiple-rate.wxss",
    "chars": 1817,
    "preview": "/*\n * Author: simsir-lin\n * Github: https://github.com/simsir-lin\n * Email: 15986907592@163.com\n */\n\n.multiple-rate .sta"
  },
  {
    "path": "client/pages/component/nearby.wxml",
    "chars": 912,
    "preview": "<!-- 附近弹窗内容页面 -->\n<template name=\"nearbyst\">\n   <view class=\"nearby\">\n     <scroll-view scroll-y  style=\"height: {{windo"
  },
  {
    "path": "client/pages/component/pocket.js",
    "chars": 644,
    "preview": "// pages/component/pocket.js\nPage({\n\n  /**\n   * 页面的初始数据\n   */\n  data: {\n  \n  },\n\n  /**\n   * 生命周期函数--监听页面加载\n   */\n  onLoa"
  },
  {
    "path": "client/pages/component/pocket.json",
    "chars": 2,
    "preview": "{}"
  },
  {
    "path": "client/pages/component/pocket.wxml",
    "chars": 76,
    "preview": "<!--pages/component/pocket.wxml-->\n<text>pages/component/pocket.wxml</text>\n"
  },
  {
    "path": "client/pages/component/pocket.wxss",
    "chars": 33,
    "preview": "/* pages/component/pocket.wxss */"
  },
  {
    "path": "client/pages/component/soft_list.wxml",
    "chars": 377,
    "preview": "<!-- 距离排序页面 -->\n\n<template name=\"soft_listst\">\n  <view class='soft-list'>\n    <view class='soft-list-con'>\n      <view c"
  },
  {
    "path": "client/pages/coupon/coupon.js",
    "chars": 4521,
    "preview": "// pages/coupon/coupon.js\n\nvar app = getApp();\nimport {Http} from '../../utils/httpClient';\nimport {formatTime} from '.."
  },
  {
    "path": "client/pages/coupon/coupon.json",
    "chars": 83,
    "preview": "{\n  \"component\": true,\n  \"navigationBarTitleText\": \"优惠券\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "client/pages/coupon/coupon.wxml",
    "chars": 2533,
    "preview": "<!-- 优惠券界面 -->\n<view class='container'>\n  <view class=\"tab-bar\">\n    <view class=\"tab-bar-con {{curTab==item.type?'activ"
  },
  {
    "path": "client/pages/coupon/coupon.wxss",
    "chars": 2992,
    "preview": "swiper {\n  width: 100%;\n}\n.container .tab-bar {\n  display: flex;\n  justify-content: space-between;\n  flex-wrap: nowrap;\n"
  },
  {
    "path": "client/pages/droppassword/droppassword.js",
    "chars": 4631,
    "preview": "// pages/droppassword/drappassword.js\nvar app = getApp();\nimport {Http} from '../../utils/httpClient' ;\nvar httpClient ="
  },
  {
    "path": "client/pages/droppassword/droppassword.json",
    "chars": 2,
    "preview": "{}"
  },
  {
    "path": "client/pages/droppassword/droppassword.wxml",
    "chars": 1400,
    "preview": "  <!-- 修改手机密码 -->\n  <view class=\"telephone_container\" >\n    <view class=\"telephone\">\n      <view class=\"tel_title\">找回支付密"
  },
  {
    "path": "client/pages/droppassword/droppassword.wxss",
    "chars": 2410,
    "preview": "/* pages/droppassword/drappassword.wxss */\n\n.telephone_container {\n    width: 100%;\n    height: 100%;\n    position: abso"
  },
  {
    "path": "client/pages/indent/indent.js",
    "chars": 7018,
    "preview": "var app = getApp();\nimport { URL } from '../../utils/urlModel.js';\nimport { Http } from '../../utils/httpClient.js';\nimp"
  },
  {
    "path": "client/pages/indent/indent.json",
    "chars": 82,
    "preview": "{\n  \"navigationBarTitleText\": \"订单\",\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "client/pages/indent/indent.wxml",
    "chars": 13048,
    "preview": "<view class=\"empty_container\" wx:if=\"{{indentData.length==0}}\">\n    <view class=\"empty\">\n        <image src='../images/e"
  },
  {
    "path": "client/pages/indent/indent.wxss",
    "chars": 7824,
    "preview": ".container {\n  background: #f5f5f9;\n  width: 100%;\n  padding: 2%;\n  font-size: 30rpx;\n  color: #333333;\n}\n.scroll_contai"
  },
  {
    "path": "client/pages/index/index.js",
    "chars": 14833,
    "preview": "//index.js\n//获取应用实例\nconst app = getApp()\n\n\n\nimport {URL} from '../../utils/urlModel.js';\nimport {Http}  from '../../util"
  },
  {
    "path": "client/pages/index/index.json",
    "chars": 158,
    "preview": "{\n    \"navigationBarBackgroundColor\": \"#ffffff\",\n    \"navigationBarTextStyle\": \"black\",\n    \"backgroundColor\": \"#eeeeee\""
  },
  {
    "path": "client/pages/index/index.wxml",
    "chars": 6191,
    "preview": "<!-- index.wxml -->\n<!-- <view hidden='{{canuse}}' >\n  <open-data type=\"userAvatarUrl\"></open-data>\n  <open-data type=\"u"
  },
  {
    "path": "client/pages/index/index.wxss",
    "chars": 7620,
    "preview": "/**index.wxss**/\n.container {\n  background: #f5f5f9;\n}\n.header {\n  width: 88%;\n  height: 84rpx;\n  padding: 5rpx 6%;\n  di"
  },
  {
    "path": "client/pages/index/type.js",
    "chars": 1128,
    "preview": "\n\nexport var nearby = [\n    {\n        text: '附近1',\n        content: [\n            {\n                text: '500米',\n      "
  },
  {
    "path": "client/pages/mycenter/mycenter.js",
    "chars": 13230,
    "preview": "// pages/mycenter/mycenter.js\nvar app = getApp();\nimport {Http} from '../../utils/httpClient' ;\nvar httpClient = new Htt"
  },
  {
    "path": "client/pages/mycenter/mycenter.json",
    "chars": 187,
    "preview": "{\n  \"navigationBarBackgroundColor\": \"#f4823e\",\n  \"navigationBarTitleText\": \"我的\",\n  \"component\": true,\n  \"usingComponents"
  },
  {
    "path": "client/pages/mycenter/mycenter.wxml",
    "chars": 5704,
    "preview": "<!--pages/mycenter/mycenter.wxml-->\n\n<view class=\"mask\" wx:if=\"{{maskInputPassed}}\" style='text-align:center;' catchtap="
  },
  {
    "path": "client/pages/mycenter/mycenter.wxss",
    "chars": 4290,
    "preview": "/* pages/mycenter/mycenter.wxss */\n.container {\n  position: relative;\n}\n.top {\n  width: 80%;\n  height: 200rpx;\n  backgro"
  },
  {
    "path": "client/pages/mytalk/mytalk.js",
    "chars": 2181,
    "preview": "// pages/mytalk/mytalk.js 我的点评页面\n\nvar app = getApp();\nimport { Http } from '../../utils/httpClient';\nvar httpClient = ne"
  },
  {
    "path": "client/pages/mytalk/mytalk.json",
    "chars": 124,
    "preview": "{\n  \"navigationBarTitleText\": \"我的评论\",\n  \"component\": true,\n  \"usingComponents\": {\n    \"component-talk\": \"../talk/talk\"\n "
  },
  {
    "path": "client/pages/mytalk/mytalk.wxml",
    "chars": 446,
    "preview": "<!-- pages/mytalk/mytalk.wxml -->\n<!-- pages/reviewlist/reviewlist.wxml -->\n<view class='containers'>\n  <view class='rev"
  },
  {
    "path": "client/pages/mytalk/mytalk.wxss",
    "chars": 1499,
    "preview": "/* pages/mytalk/mytalk.wxss */\n.review_title{\n  width: 100%;\n  padding: 0 4%;\n  box-sizing: border-box;\n  display: flex;"
  },
  {
    "path": "client/pages/order/order.js",
    "chars": 18703,
    "preview": "// pages/order/order.js\n\n/**\n * 当前点餐状态值\n */\nvar ownOrderType = {\n  appointment: 'appointment' //预定的\n}\n\nvar app = getApp("
  },
  {
    "path": "client/pages/order/order.json",
    "chars": 147,
    "preview": "{\n  \"navigationBarTitleText\": \"点餐\",\n  \"component\": true,\n  \"disableScroll\": true,\n  \"usingComponents\": {\n    \"component-"
  },
  {
    "path": "client/pages/order/order.wxml",
    "chars": 7942,
    "preview": "  <view class=\"good_box\" hidden=\"{{hide_good_box}}\"  style=\"left: {{bus_x}}px; top: {{bus_y}}px;\"></view>\n<!-- 商品规格弹窗 --"
  },
  {
    "path": "client/pages/order/order.wxss",
    "chars": 12117,
    "preview": "view {\n  width: 100%;\n  padding: 0rpx 0rpx;\n  margin: 0rpx 0rpx;\n  font-size: 0rpx;\n}\n\n/*抛物线动画*/\n\n.good_box {\n  width: 1"
  },
  {
    "path": "client/pages/order/type.js",
    "chars": 4335,
    "preview": "\n\nexport var tasteMaskData = ['不辣','超辣']\nexport var orderTab = [\n    {\n        name:\"优惠\",\n        type:0,\n        data:["
  },
  {
    "path": "client/pages/pay_input/pay_input.js",
    "chars": 9545,
    "preview": "// pages/topay/topay.js\nvar app = getApp();\nimport {\n  Http\n} from '../../utils/httpClient.js';\nimport { URL } from '../"
  },
  {
    "path": "client/pages/pay_input/pay_input.json",
    "chars": 132,
    "preview": "{\n  \"component\": true,\n  \"disableScroll\": true,\n  \"usingComponents\": {\n    \"paySix\": \"../component/key_component/compone"
  },
  {
    "path": "client/pages/pay_input/pay_input.wxml",
    "chars": 4650,
    "preview": "<!-- pages/topay/topay.wxml -->\n<!-- 优惠券弹窗 -->\n<import src=\"../component/coupon.wxml\" />\n<view class=\"mark\" hidden=\"{{!m"
  },
  {
    "path": "client/pages/pay_input/pay_input.wxss",
    "chars": 9081,
    "preview": ".container {\n  width: 100%;\n  background: #f5f5f9;\n}\n.add{\n  width: 100%;\n  height: 200rpx;\n}\n.add image{\n  display: blo"
  },
  {
    "path": "client/pages/pay_success/pay_success.js",
    "chars": 1195,
    "preview": "// pages/pay_success/pay_success.js\n\nvar ownType= {\n  onlyTable:'onlyTable',//仅仅订桌\n}\n\nvar app = getApp();\n\nPage({\n\n  /**"
  },
  {
    "path": "client/pages/pay_success/pay_success.json",
    "chars": 48,
    "preview": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "client/pages/pay_success/pay_success.wxml",
    "chars": 604,
    "preview": "<view class=\"container\">\n    <block>\n        <icon type=\"success\" size=\"90\"></icon>\n    </block>\n    <view  wx:if=\"{{typ"
  },
  {
    "path": "client/pages/pay_success/pay_success.wxss",
    "chars": 543,
    "preview": "/* pages/pay_success/pay_success.wxss */\n@import '../../style/weui.wxss';\n\n.container icon{\nmargin-top:136rpx;\n}\n.tip_tx"
  },
  {
    "path": "client/pages/pocket/pocket.js",
    "chars": 2993,
    "preview": "// pages/pocket/pocket.js 我的钱包\nvar app = getApp();\nimport { Http } from '../../utils/httpClient.js';\nimport { URL } from"
  },
  {
    "path": "client/pages/pocket/pocket.json",
    "chars": 82,
    "preview": "{\n  \"navigationBarTitleText\": \"钱包\",\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "client/pages/pocket/pocket.wxml",
    "chars": 2083,
    "preview": "<!--pages/pocket/pocket.wxml-->\n<view class=\"container\">\n     <!-- <view class=\"ad_img\">\n       <image src=\"../images/po"
  },
  {
    "path": "client/pages/pocket/pocket.wxss",
    "chars": 3645,
    "preview": ".ad_img {\n  width: 100%;\n  height: 180rpx;\n}\n.ad_img image {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.recharg"
  },
  {
    "path": "client/pages/points/points.js",
    "chars": 3265,
    "preview": "var app = getApp();\nimport { Http } from '../../utils/httpClient';\nimport { formatTime, getCountDays, getCountWeek } fro"
  },
  {
    "path": "client/pages/points/points.json",
    "chars": 82,
    "preview": "{\n  \"navigationBarTitleText\": \"积分\",\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "client/pages/points/points.wxml",
    "chars": 2182,
    "preview": "<!-- pages/points/points.wxml -->\n<view class=\"container\">\n   <!-- <view class=\"ad_img\">\n         <image src=\"../images/"
  },
  {
    "path": "client/pages/points/points.wxss",
    "chars": 4622,
    "preview": ".ad_img {\n  width: 100%;\n  height: 180rpx;\n}\n.ad_img image {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n.points_"
  },
  {
    "path": "client/pages/review/index.wxss",
    "chars": 3553,
    "preview": ".container {\n  width: 100%;\n  background: #f5f5f9;\n}\n.store_info {\n  width: 92%;\n  padding: 40rpx 4%;\n  margin-top: 20rp"
  },
  {
    "path": "client/pages/review/review.js",
    "chars": 5339,
    "preview": "// pages/review/review.js\nimport {Http}  from '../../utils/httpClient.js';\nvar app = getApp();\nimport {\n  URL\n} from '.."
  },
  {
    "path": "client/pages/review/review.json",
    "chars": 150,
    "preview": "{\n  \"navigationBarTitleText\": \"写评价\",\n  \"component\": true,\n  \"usingComponents\": {\n    \"multiple-rate\": \"../component/mult"
  },
  {
    "path": "client/pages/review/review.wxml",
    "chars": 4285,
    "preview": "<!--pages/review/review.wxml-->\n<view class=\"container\">\n    <view class=\"store_info\">\n      <image src=\"../images/write"
  },
  {
    "path": "client/pages/review/review.wxss",
    "chars": 3553,
    "preview": ".container {\n  width: 100%;\n  background: #f5f5f9;\n}\n.store_info {\n  width: 92%;\n  padding: 40rpx 4%;\n  margin-top: 20rp"
  },
  {
    "path": "client/pages/reviewfdetails/reviewfdetails.js",
    "chars": 485,
    "preview": "// pages/reviewfdetails/reviewfdetails.js\nPage({\n  \n\n  /**\n   * 组件的初始数据\n   */\n  data: {\n         /**\n     * 我的评价的页码\n    "
  },
  {
    "path": "client/pages/reviewfdetails/reviewfdetails.json",
    "chars": 124,
    "preview": "{\n  \"component\": true,\n  \"navigationBarTitleText\": \"评论详情\",\n  \"usingComponents\": {\n    \"component-talk\": \"../talk/talk\"\n "
  },
  {
    "path": "client/pages/reviewfdetails/reviewfdetails.wxml",
    "chars": 161,
    "preview": "<!--pages/reviewfdetails/reviewfdetails.wxml-->\n<view class='details_container'>\n   <component-talk t-type=\"2\" t-list=\"{"
  },
  {
    "path": "client/pages/reviewfdetails/reviewfdetails.wxss",
    "chars": 232,
    "preview": "/* pages/reviewfdetails/reviewfdetails.wxss */\n.details_container{\n  width: 100%;\n  padding: 10rpx 4%;\n  box-sizing: bor"
  },
  {
    "path": "client/pages/reviewlist/reviewlist.js",
    "chars": 1937,
    "preview": "// pages/reviewlist/reviewlist.js\nvar app = getApp();\nimport {Http} from '../../utils/httpClient';\nPage({\n\n\n  /**\n   * 组"
  },
  {
    "path": "client/pages/reviewlist/reviewlist.json",
    "chars": 122,
    "preview": "{\n  \"navigationBarTitleText\": \"评论\",\n  \"component\": true,\n  \"usingComponents\": {\n    \"component-talk\": \"../talk/talk\"\n  }"
  },
  {
    "path": "client/pages/reviewlist/reviewlist.wxml",
    "chars": 937,
    "preview": "<!--pages/reviewlist/reviewlist.wxml-->\n<view class='containers'>\n  <view class='review_title'>\n     <text class=\"{{type"
  },
  {
    "path": "client/pages/reviewlist/reviewlist.wxss",
    "chars": 1386,
    "preview": ".review_title{\n  width: 100%;\n  padding: 0 4%;\n  box-sizing: border-box;\n  display: flex;\n  justify-content: space-aroun"
  },
  {
    "path": "client/pages/shop/shop.js",
    "chars": 3791,
    "preview": "import {Http}  from '../../utils/httpClient.js';\nimport { URL } from '../../utils/urlModel.js';\n\nPage({\n  data: {\n    UR"
  },
  {
    "path": "client/pages/shop/shop.json",
    "chars": 85,
    "preview": "{\n  \"navigationBarTitleText\": \"商铺\",\n  \"component\": true,\n  \n  \"usingComponents\": {}\n}"
  },
  {
    "path": "client/pages/shop/shop.wxml",
    "chars": 3885,
    "preview": "<!--pages/shop/shop.wxml-->\n<view class='container'>\n    <swiper  autoplay=\"true\" interval=\"5000\" duration=\"500\" width=\""
  },
  {
    "path": "client/pages/shop/shop.wxss",
    "chars": 3145,
    "preview": ".container {\n  background: #f5f5f9;\n}\nswiper{\n  width: 100%;\n\n}\nswiper swiper-item image{\n  display: block;\n  width: 100"
  },
  {
    "path": "client/pages/shop_list/shop_list.js",
    "chars": 13706,
    "preview": "//index.js\n//获取应用实例\nconst app = getApp()\n\n\nimport {URL} from '../../utils/urlModel.js';\nimport {Http}  from '../../utils"
  },
  {
    "path": "client/pages/shop_list/shop_list.json",
    "chars": 50,
    "preview": "{\n  \"component\": true,\n \n  \"usingComponents\": {}\n}"
  },
  {
    "path": "client/pages/shop_list/shop_list.wxml",
    "chars": 4000,
    "preview": "<!-- index.wxml -->\n<!-- <view hidden='{{canuse}}' >\n  <open-data type=\"userAvatarUrl\"></open-data>\n  <open-data type=\"u"
  },
  {
    "path": "client/pages/shop_list/shop_list.wxss",
    "chars": 7169,
    "preview": "/* pages/shop_list/shop_list.wxss */\n/**index.wxss**/\n.container {\n  background: #f5f5f9;\n}\n.header {\n  width: 90%;\n  he"
  },
  {
    "path": "client/pages/shop_list/type.js",
    "chars": 1128,
    "preview": "\n\nexport var nearby = [\n    {\n        text: '附近1',\n        content: [\n            {\n                text: '500米',\n      "
  },
  {
    "path": "client/pages/switchcity/switchcity.js",
    "chars": 6056,
    "preview": "var city = require('../../utils/city.js');\nvar cityObjs = require('../../utils/city.js');\nvar QQMapWX = require('../../u"
  },
  {
    "path": "client/pages/switchcity/switchcity.json",
    "chars": 40,
    "preview": "{\n    \"navigationBarTitleText\": \"切换城市\"\n}"
  },
  {
    "path": "client/pages/switchcity/switchcity.wxml",
    "chars": 4497,
    "preview": "<view class=\"page__bd\">\n    <view class=\"weui-search-bar\">\n        <view class=\"weui-search-bar__form\">\n            <vie"
  },
  {
    "path": "client/pages/switchcity/switchcity.wxss",
    "chars": 2615,
    "preview": ".searchLetter {\n  position: fixed;\n  right: 0;\n  width: 50rpx;\n  text-align: center;\n  justify-content: center;\n  displa"
  },
  {
    "path": "client/pages/talk/talk.js",
    "chars": 3795,
    "preview": "// pages/talk/talk.js\nimport {URL} from '../../utils/urlModel';\nvar talkType = {\n  'myTalk': 0, //我的点评    多个人均价格   最多三个图"
  },
  {
    "path": "client/pages/talk/talk.json",
    "chars": 48,
    "preview": "{\n  \"component\": true,\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "client/pages/talk/talk.wxml",
    "chars": 2047,
    "preview": "<view class='container' data-talkid=\"{{tList.id}}\" data-type=\"{{tType}}\">\n  <view class=\"left\">\n    <image class='img-ti"
  },
  {
    "path": "client/pages/talk/talk.wxss",
    "chars": 1929,
    "preview": ".container {\n  display: flex;\n  justify-content: space-between;\n  flex-direction: row;\n  align-items: start;\n  border-bo"
  },
  {
    "path": "client/pages/topay/topay.js",
    "chars": 12014,
    "preview": "// pages/topay/topay.js\nvar app = getApp();\nimport {\n  Http\n} from '../../utils/httpClient.js';\nimport { URL } from '../"
  },
  {
    "path": "client/pages/topay/topay.json",
    "chars": 131,
    "preview": "{\n  \"component\": true,\n  \"disableScroll\":true,\n  \"usingComponents\": {\n    \"paySix\": \"../component/key_component/componen"
  },
  {
    "path": "client/pages/topay/topay.wxml",
    "chars": 3944,
    "preview": "<!-- pages/topay/topay.wxml -->\n<!-- 优惠券弹窗 -->\n<import src=\"../component/coupon.wxml\" />\n<view class=\"mark\" hidden=\"{{!m"
  },
  {
    "path": "client/pages/topay/topay.wxss",
    "chars": 8906,
    "preview": ".container {\n  width: 100%;\n  background: #f5f5f9;\n}\n.getPrice {\n  width: 100%;\n  height: 230rpx;\n  background: #fff;\n  "
  },
  {
    "path": "client/project.config.json",
    "chars": 734,
    "preview": "{\n\t\"description\": \"项目配置文件。\",\n\t\"packOptions\": {\n\t\t\"ignore\": []\n\t},\n\t\"setting\": {\n\t\t\"urlCheck\": true,\n\t\t\"es6\": true,\n\t\t\"po"
  },
  {
    "path": "client/style/weui.wxss",
    "chars": 18872,
    "preview": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license"
  },
  {
    "path": "client/utils/area.js",
    "chars": 404794,
    "preview": "export var area = {\"110000\":{\"id\":110000,\"name\":\"北京\",\"fullname\":\"北京市\",\"py\":\"beijing\",\"spy\":\"bj\",\"lat\":\"39.90469\",\"lng\":\""
  },
  {
    "path": "client/utils/area2.js",
    "chars": 360027,
    "preview": "export var area2 = {\n    \"530000\": {\n      \"id\": 530000,\n      \"name\": \"云南\",\n      \"fullname\": \"云南省\",\n      \"py\": \"yunna"
  },
  {
    "path": "client/utils/bmap-wx.js",
    "chars": 13041,
    "preview": "/**\n * @file 微信小程序JSAPI\n * @author 崔健 cuijian03@baidu.com 2017.01.10\n */\n\n/**\n * 百度地图微信小程序API类\n *\n * @class\n */\nclass BM"
  },
  {
    "path": "client/utils/city.js",
    "chars": 71102,
    "preview": "var cityObj = [{ \"id\": \"35\", \"provincecode\": \"150000\", \"city\": \"\\u963f\\u62c9\\u5584\\u76df\", \"code\": \"152900\", \"initial\": "
  },
  {
    "path": "client/utils/httpClient.js",
    "chars": 8555,
    "preview": "\nimport {URL} from './urlModel.js';\n\nvar bmap = require('.//bmap-wx.js'); \n\nfunction PromiseFun(argu,url,num){\n  return "
  },
  {
    "path": "client/utils/payment.js",
    "chars": 632,
    "preview": " //调取微信自带支付方法\nexport var payment = function(data){\n    var response=data;\n    wx.requestPayment({\n      'appId':response"
  },
  {
    "path": "client/utils/qqmap-wx-jssdk.js",
    "chars": 12248,
    "preview": "/**\n * 微信小程序JavaScriptSDK\n * \n * @version 1.0\n * @date 2017-01-10\n * @author jaysonzhou@tencent.com\n */\n\nvar ERROR_CONF "
  },
  {
    "path": "client/utils/urlModel.js",
    "chars": 2533,
    "preview": "const base = 'http://127.0.0.1:8080';\nexport var URL = { \n  PROJECT_ROOT: base,\n  USER_ORDER_LIST: base + 'user-order-li"
  },
  {
    "path": "client/utils/util.js",
    "chars": 3218,
    "preview": "\nconst formatTime = date => {\n  const year = date.getFullYear()\n  const month = date.getMonth() + 1\n  const day = date.g"
  },
  {
    "path": "client/weui.wxss",
    "chars": 18872,
    "preview": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license"
  }
]

About this extraction

This page contains the full source code of the congwa/orderSystem GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 125 files (1.2 MB), approximately 391.4k tokens, and a symbol index with 251 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!