xiaoyuhao 4 years ago
commit
f1bc401ce8
100 changed files with 889 additions and 0 deletions
  1. 673 0
      app.js
  2. 55 0
      app.json
  3. 161 0
      app.wxss
  4. BIN
      image/action_zuo_yue.png
  5. BIN
      image/add_card_number.png
  6. BIN
      image/address.png
  7. BIN
      image/address_bg.png
  8. BIN
      image/address_red.png
  9. BIN
      image/address_white.png
  10. BIN
      image/beike_ban_ding.png
  11. BIN
      image/biao_ge_bei_jing.png
  12. BIN
      image/biao_qian_hong.png
  13. BIN
      image/biao_qian_hui.png
  14. BIN
      image/bo_fang.png
  15. BIN
      image/bu_pai.png
  16. BIN
      image/bu_pi_gai.png
  17. BIN
      image/bu_quan.png
  18. BIN
      image/camera_back.png
  19. BIN
      image/camera_sure.png
  20. BIN
      image/check.png
  21. BIN
      image/check_gray.png
  22. BIN
      image/child_no_select.png
  23. BIN
      image/child_select.png
  24. BIN
      image/chinese_photo.png
  25. BIN
      image/cuo_ti.png
  26. BIN
      image/dai_jie_da.png
  27. BIN
      image/default_headicon.png
  28. BIN
      image/default_headicon1.png
  29. BIN
      image/default_headicon2.png
  30. BIN
      image/default_headicon3.png
  31. BIN
      image/default_headicon4.png
  32. BIN
      image/default_headicon5.png
  33. BIN
      image/deng_ji.png
  34. BIN
      image/deng_lv_logo.png
  35. BIN
      image/dui_huan_ma.png
  36. BIN
      image/enghish_photo.png
  37. BIN
      image/fact_time.png
  38. BIN
      image/gd.png
  39. BIN
      image/goods.png
  40. BIN
      image/hei_hua_ping.png
  41. BIN
      image/hua_ping.png
  42. BIN
      image/huang_guan.png
  43. BIN
      image/huaxue.png
  44. BIN
      image/hui_se_zhi_yin.png
  45. BIN
      image/icon_down.png
  46. BIN
      image/icon_plus.png
  47. BIN
      image/ji_yi_zhi_shi.png
  48. BIN
      image/jia_fa.png
  49. BIN
      image/jia_zhang_xie_zhu.png
  50. BIN
      image/jian_hao.png
  51. BIN
      image/jian_tou_zhi_yin.png
  52. BIN
      image/jie_bang.png
  53. BIN
      image/jie_guo_chen_xian.png
  54. BIN
      image/jie_xi_deng.png
  55. BIN
      image/jie_xi_zhong.png
  56. BIN
      image/lao_shi_liu_yan.png
  57. BIN
      image/lao_shu_ping_yu.png
  58. BIN
      image/left-copy@2x.png
  59. BIN
      image/li_jie_zhi_shi.png
  60. BIN
      image/li_shi_ji_lu.png
  61. BIN
      image/light.png
  62. BIN
      image/math_photo.png
  63. BIN
      image/mei_you_ban_ding.png
  64. BIN
      image/memeber_success.png
  65. BIN
      image/message_bg.png
  66. BIN
      image/min_star_gay.png
  67. BIN
      image/min_star_red.png
  68. BIN
      image/min_star_red_half.png
  69. BIN
      image/minus_card_number.png
  70. BIN
      image/mohu.png
  71. BIN
      image/my_order.png
  72. BIN
      image/nan_shi.png
  73. BIN
      image/nan_ti_jie_xi.png
  74. BIN
      image/nan_ti_video.png
  75. BIN
      image/nan_yi_tu_biao.png
  76. BIN
      image/no_data_myOrder@2x.png
  77. BIN
      image/no_mistake.png
  78. BIN
      image/no_zuo_yue.png
  79. BIN
      image/nores.png
  80. BIN
      image/nv_shi.png
  81. BIN
      image/one_to_obe_guide.png
  82. BIN
      image/one_to_one.png
  83. BIN
      image/one_to_one_guide.png
  84. BIN
      image/one_to_one_report.png
  85. BIN
      image/payment_success@2x.png
  86. BIN
      image/pencil_loading.png
  87. BIN
      image/photo.png
  88. BIN
      image/position.png
  89. BIN
      image/position_red.png
  90. BIN
      image/predict_time.png
  91. BIN
      image/qie_huan.png
  92. BIN
      image/right-copy1@2x.png
  93. BIN
      image/right_zy7@2x.png
  94. BIN
      image/sao_miao@2x.png
  95. BIN
      image/search.png
  96. BIN
      image/search_taobao.png
  97. BIN
      image/select_biao_ji.png
  98. BIN
      image/select_off.png
  99. BIN
      image/select_on.png
  100. 0 0
      image/shanchu.png

+ 673 - 0
app.js

@@ -0,0 +1,673 @@
+//app.js
+const { formatUrl, throttle } = require('utils/util.js')
+const sys = wx.getSystemInfoSync()
+App({
+  onLaunch: function (options) {
+    this.globalData.options = options
+  },
+
+  onShow: function (options) {
+    this.globalData.options = options
+  },
+
+  onHide: function (e) {
+
+  },
+
+  onError: function (e) {
+    wx.showToast({
+      title: '程序执行失败',
+      icon: 'none'
+    })
+  },
+
+  onPageNotFound: function (res) {
+    wx.showToast({
+      title: '没有找到页面',
+      icon: 'none'
+    })
+  },
+
+  /**
+   * 初始化 
+   */
+  init: function () {
+    const accessToken = this.getGlobalAttributeValue('accessToken')
+    const userInfo = this.getGlobalAttributeValue('userInfo')
+    this.getWxUserInfoSetting((type, res) => {
+      // if (type != 1 || !userInfo) {
+      //   this.redirectCtl({ url: 'wx_authority' }, 1)
+      //   return
+      // }
+      this.globalData.userInfo = userInfo
+      wx.checkSession({
+        success: res => {
+          this.globalData.accessToken = accessToken
+          this.navigatePermissionsCtl()
+        },
+        fail: res => {
+          this.login()
+        }
+      })
+    })
+    // this.post('/api/user/checkToken').then(res => {
+    //   if (accessToken) {
+    //     this.globalData.accessToken = accessToken
+    //   }
+
+    //   if (userInfo) {
+    //     this.globalData.userInfo = userInfo
+    //   } else {
+    //     this.redirectCtl({ url: 'wx_authority' }, 1)
+    //     return
+    //   }
+
+    //   this.navigatePermissionsCtl()
+    // }).catch(res => {
+    //   this.login()
+    // })
+  },
+
+  /**
+   * 获取微信code 
+   */
+  getWxloginCode: function (cb) {
+    wx.login({
+      success: res => {
+        if (cb) cb(res.code)
+      },
+      fail: res => {
+        wx.showToast({
+          title: '获取微信code失败',
+          icon: 'none'
+        })
+      }
+    })
+  },
+
+  /**
+   * 获取微信用户信息
+   */
+  login: function () {
+    const { appType } = this.globalData
+    this.getWxloginCode(code => {
+      this.post('/api/user/tlogin', { code, appType }).then(this.handleLogin).catch(e => {
+        if (e.data.code == '888') {
+          this.redirectCtl({ url: 'wx_authority' }, 1)
+        }
+      })
+    })
+  },
+  
+  /**
+   * 获取登录数据
+   */
+  handleLogin: function (res) {
+    const { postData } = this.globalData
+    const { accessToken } = res.data
+    if (accessToken) {
+      this.globalData.accessToken = accessToken
+      wx.setStorageSync('accessToken', accessToken)
+
+      // 判断当前是否有接口报登录失效,存在失效的情况下 接着执行        
+      if (postData) {
+        const { fn, param } = postData
+        fn(...param)
+        this.globalData.postData = null
+        return
+      }
+
+      this.navigatePermissionsCtl()
+    }
+  },
+
+  /**
+   * 权限判断跳转
+   */
+  navigatePermissionsCtl: function () {
+    const { options, tempOptions } = this.globalData
+    const { query = {}, scene, path } = options || tempOptions
+    let url = ''
+    
+    if (query && query.type > 1) {
+      url = path ? path.split('/')[1] : 'homework_list'
+      const method = { ...query, url, scene }
+      this.reLaunchCtl && this.reLaunchCtl({ url, method }, true)
+      this.globalData.options = tempOptions
+    } else {
+      this.redirectCtl({ url: 'homework_list' }, 1)
+      // this.getVipList()
+    }
+  },
+
+  /**
+   * 重新获取孩子列表
+   * */
+  getVipList: function () {
+    const accessToken = this.getGlobalAttributeValue('accessToken')
+    const userIdCache = wx.getStorageSync('userId')
+    this.post({ src: '/api/parents/parents/V2/getMyInfo', method: { accessToken }, type: 1 }).then(res => {
+      const { childList, imgUrl, userId, userName, phone} = res.data
+      
+        if (userIdCache == userId) {
+          const parentVipList = wx.getStorageSync(`parentVipList-${userId}`)
+          const parentVipLiIdx = wx.getStorageSync(`parentVipLiIdx-${userId}`)
+          const parentVipId = wx.getStorageSync(`parentVipId-${userId}`)
+          const parentInfo = wx.getStorageSync(`parentInfo-${userId}`)
+          this.globalData.authority = wx.getStorageSync('authority')
+            // if (phone) {
+            //   this.redirectCtl && this.redirectCtl({ url: 'homework_list', method: { vipId: parentVipId } }, true)
+            // } else {
+            //   this.redirectCtl({ url: 'phone', method: { vipId: parentVipId,isFrist:1} }, true)
+            // }
+          
+        } else {
+          this.globalData.userId = userId
+          wx.setStorageSync('userId', userId)
+
+          this.globalData.parentInfo = res.data
+          wx.setStorageSync(`parentInfo-${userId}`, res.data)
+          if (childList.length > 0) {
+            let vipId = childList[0].vipId
+            let authority = 1
+
+            this.globalData.parentVipList = childList
+            this.globalData.parentVipLiIdx = 0
+            this.globalData.parentVipId = vipId
+            
+            wx.setStorageSync(`parentVipList-${userId}`, childList)
+            wx.setStorageSync(`parentVipLiIdx-${userId}`, 0)
+            wx.setStorageSync(`parentVipId-${userId}`, vipId)
+
+            this.globalData.authority = authority
+            wx.setStorageSync('authority', authority)
+            if (phone) {
+              this.redirectCtl && this.redirectCtl({ url: 'homework_list', method: {} }, true)
+            } else {
+              this.redirectCtl({ url: 'phone', method: {isFrist: 1 }}, true)
+            }
+          } else {
+
+            wx.removeStorageSync(`parentVipList-${userId}`)
+            wx.removeStorageSync(`parentVipLiIdx-${userId}`)
+            wx.removeStorageSync(`parentVipId-${userId}`)
+
+            let authority = 0
+            this.globalData.authority = authority
+            wx.setStorageSync('authority', authority)
+             if (phone) {
+              this.redirectCtl && this.redirectCtl({ url: 'homework_list', method: {} }, true)
+            } else {
+               this.redirectCtl({ url: 'phone', method: {isFrist: 1 }}, true)
+            }
+          }
+        }
+      
+    })
+  },
+
+  /**
+   * 首次登录并保存微信用户数据
+   * */
+  saveUserInfo: function (res, code) {
+    const { appType } = this.globalData
+    const { encryptedData, iv, signature, userInfo } = res
+    const user = Object.assign(userInfo, { encryptedData, iv, signature })
+    this.post('/api/user/newlogin', { code, appType, ...user }).then(res => {
+      this.globalData.userInfo = user
+      wx.setStorageSync('userInfo', user)
+      this.handleLogin(res)
+    })
+  },
+
+  /**
+   * 微信授权接口封装
+   */
+  wxSetting: function ({ scope, text }) {
+    const isEmptyObject = function (e) {
+      var temp;
+      for (temp in e)
+        return !1;
+      return !0
+    }
+    return new Promise((resolve, reject) => {
+      wx.getSetting({
+        success: res => {
+          if (isEmptyObject(res.authSetting)) {
+            resolve(Object.assign(res, { type: 1, text: `请手动点击${text}` }))
+          } else if (res.authSetting[scope] === true) {
+            resolve(Object.assign(res, { type: 2, text: `默认${text}成功` }))
+          } else if (res.authSetting[scope] === false) {
+            wx.showModal({
+              content: `检测到您没打开${text},是否去设置打开?`,
+              confirmText: "确认",
+              cancelText: "取消",
+              success: res => {
+                if (res.confirm) {
+                  wx.openSetting({
+                    success: res => {
+                      if (res.authSetting[scope]) {
+                        resolve(Object.assign(res, { type: 3, text: `手动设置${text}成功` }))
+                      } else {
+                        reject(Object.assign(res, { type: 5, text: `没有手动设置${text}` }))
+                      }
+                    },
+                    fail: res => {
+                      reject(Object.assign(res, { type: 4, text: `打开手动设置${text}失败` }))
+                    }
+                  })
+                } else {
+                  reject(Object.assign(res, { type: 3, text: `拒绝打开手动设置${text}` }))
+                }
+              },
+              fail: res => {
+                reject(Object.assign(res, { type: 2, text: `弹出${text}提示框失败` }))
+              }
+            })
+          } else {
+            wx.authorize({
+              scope,
+              success: res => {
+                resolve(Object.assign(res, { type: 4, text: `自动获取${text}成功` }))
+              },
+              fail: res => {
+                reject(Object.assign(res, { type: 6, text: `自动获取${text}失败` }))
+              }
+            })
+          }
+        },
+        fail: res => {
+          reject(res, { type: 1, text: `获取${text}失败` })
+        }
+      })
+    })
+  },
+
+  /**
+ * 获取微信用户信息授权
+ */
+  getWxUserInfoSetting: function (cb) {
+    this.wxSetting({ scope: 'scope.userInfo', text: '微信用户信息授权' }).then((res) => {
+      wx.setStorageSync('hasUserInfo', 1)
+      if (typeof cb === 'function') cb(1, res)
+    }).catch((res) => {
+      wx.setStorageSync('hasUserInfo', 0)
+      if (res.type != 6) {
+        wx.showToast({
+          title: res.text,
+          icon: 'none'
+        })
+      }
+      if (typeof cb === 'function') cb(0, res)
+      setTimeout(() => {
+        wx.navigateBack({
+          delta: 1
+        })
+      }, 2000)
+    })
+  },
+
+  /**
+  * 获取微信定位授权
+  */
+  getWxUserLocationSetting: function (cb) {
+    this.wxSetting({ scope: 'scope.userLocation', text: '微信用户定位授权' }).then((res) => {
+      wx.setStorageSync('isPosition', 1)
+      if (typeof cb === 'function') {
+        cb(res)
+      }
+    }).catch((res) => {
+      wx.setStorageSync('isPosition', 0)
+      wx.showToast({
+        title: res.text,
+        icon: 'none'
+      })
+      setTimeout(() => {
+        wx.navigateBack({
+          delta: 1
+        })
+      }, 1200)
+    })
+  },
+
+  /**
+   * 获取全局属性值
+   */
+  getGlobalAttributeValue: function (e1, e2 = e1) {
+    return typeof this.globalData[e1] !== 'undefined' && this.globalData[e1] !== null ? this.globalData[e1] : typeof wx.getStorageSync(e2) !== 'undefined' && wx.getStorageSync(e2) !== null ? wx.getStorageSync(e2) : null
+  },
+
+  
+  /**
+   * POST 封装
+   * @param obj{Object} {src【请求后台路径】, method【拼接在路径的参数对象】, type【判断是否需要把参数拼接在路径后面】} = obj
+   * @param data{Object} data【自定义传的参数数据】
+   * @param head{Boolean} head[true【data参数类型为json对象】,false【data参数类型为json字符串】]
+   */
+  post: function (obj, data = {}, head, postData) {
+    const { host, loginTime, wechatsys, phoneimei, phonesys, phonetype, version, platform, build } = this.globalData
+    const accessToken = this.globalData.accessToken || wx.getStorageSync('accessToken')
+    let url
+    if (typeof obj === 'object') {
+      const { src, method = {}, type } = obj
+      url = formatUrl(host + src, type == 1 ? method : Object.assign({}, method, { accessToken }))
+    } else if (typeof obj === 'string') {
+      url = formatUrl(host + obj, { accessToken })
+    } else {
+      throw new Error('请正确填写访问后台接口路径')
+      return
+    }
+    return new Promise((resolve, reject) => {
+      wx.request({
+        url,
+        data,
+        method: 'POST',
+        header: head ? {
+          wechatsys, phoneimei, phonesys, phonetype, version, platform, build,
+          "Content-Type": "application/x-www-form-urlencoded"
+        } : {
+            wechatsys, phoneimei, phonesys, phonetype, version, platform, build,
+          "Content-Type": "application/json"
+        },
+        success: e => {
+          if (e.statusCode == 200 && e.errMsg == 'request:ok') {
+            if (e.data.code == '999') {
+              resolve(e.data)
+            } else {
+              if (url.indexOf('/api/user/checkToken') == -1) {
+                wx.showToast({
+                  title: e.data.msg,
+                  icon: 'none'
+                }) 
+              }
+              reject(e.data)
+            }
+            if (loginTime > 0) {
+              this.globalData.loginTime = 0
+            }
+          } else if (e.statusCode == 401) {
+            this.globalData.loginTime = loginTime + 1
+            if (loginTime < 2) {
+              console.log('55555')
+              this.globalData.postData = postData || null
+              this.login()
+            }
+          } else {
+            reject(e)
+            wx.showToast({
+              title: '加载失败',
+              icon: 'none'
+            })
+          }
+        },
+        fail: e => {
+          reject(e)
+          wx.showToast({
+            title: '加载失败',
+            icon: 'none'
+          })
+        },
+        complete: e => {
+          console.log({ url, data })
+          console.log(e.data)
+        }
+      })
+    })
+  },
+
+  /**
+   * uploadFile 封装
+   * @param obj{Object} {src【请求后台路径】, method【拼接在路径的参数对象】, type【判断是否需要把参数拼接在路径后面】} = obj
+   * @param file{String} file【微信小程序生成的临时文件资源路径】
+   * @param data{Object} data【自定义传的参数数据】
+   * @param head{Boolean} head[true【data参数类型为json对象】,false【data参数类型为json字符串】]
+   * @param progress{Function} progress【上传文件进度条回调函数方法】
+   */
+  uploadFile: function (obj, file, data = {}, head, progress, postData) {
+    const { host, loginTime, wechatsys, phoneimei, phonesys, phonetype, version, platform, build } = this.globalData
+    const accessToken = this.globalData.accessToken || wx.getStorageSync('accessToken')
+    let url
+    if (typeof obj === 'object') {
+      const { src, method, type } = obj
+      url = formatUrl(host + src, type == 1 ? method : Object.assign(method || {}, { accessToken }))
+    } else if (typeof obj === 'string') {
+      url = formatUrl(host + obj, { accessToken })
+    } else {
+      throw new Error('请正确填写访问后台接口路径')
+      return
+    }
+    wx.showLoading({
+      title: '上传中...',
+    })
+    let uploadTask
+    return new Promise((resolve, reject) => {
+      uploadTask = wx.uploadFile({
+        url,
+        filePath: file,
+        name: 'files',
+        formData: data,
+        header: head ? {
+          wechatsys, phoneimei, phonesys, phonetype, version, platform, build,
+          "Content-Type": "application/x-www-form-urlencoded"
+        } : {
+          wechatsys, phoneimei, phonesys, phonetype, version, platform, build,
+          "Content-Type": "application/json"
+        },
+        success: e => {
+          if (e.statusCode == 200 && e.errMsg == 'uploadFile:ok') {
+            resolve(e.data)
+            if (loginTime > 0) {
+              this.globalData.loginTime = 0
+            }
+          } else if (e.statusCode == 401) {
+            this.globalData.loginTime = loginTime + 1
+            if (loginTime < 2) {
+              
+              this.globalData.postData = postData || null
+              this.login()
+            }
+          } else {
+            reject(e)
+            wx.showToast({
+              title: '加载失败',
+              icon: 'none'
+            })
+          }
+        },
+        fail(e) {
+          reject(e)
+          wx.showToast({
+            title: '加载失败',
+            icon: 'none'
+          })
+        },
+        complete(e) {
+          console.log({ url, data })
+          console.log(e.data)
+          wx.hideLoading()
+        }
+      })
+    })
+    uploadTask.onProgressUpdate((res) => {
+      progress && progress(res)
+      wx.showLoading({
+        title: ` 已上传(${res.progress}%)`
+      })
+      if (res.progress == 100) {
+        wx.hideLoading()
+      }
+    })
+  },
+
+  /**
+   * reLaunch路由跳转
+   */
+  reLaunchCtl: function (e, type) {
+    const { method, url, msg } = type ? e : e.currentTarget.dataset
+    if (!url) {
+      wx.showToast({
+        title: msg || '暂未开放',
+        icon: 'none'
+      })
+      return
+    }
+    let array = []
+    if (method) {
+      for (let i in method) {
+        if (typeof data === 'object') {
+          array.push(`${i}=${JSON.stringify(method[i])}`)
+        } else {
+          array.push(`${i}=${method[i]}`)
+        }
+      }
+    }
+    wx.reLaunch({
+      url: `${getCurrentPages().length == 0 ? 'pages' : '..'}/${url}/${url}${array.length > 0 ? '?' + array.join('&') : ''}`,
+      success: res => { },
+      fail: res => {
+        wx.showToast({
+          title: '跳转失败',
+          icon: 'none'
+        })
+      }
+    })
+  },
+
+  /**
+   * navigate路由跳转
+   */
+  navigateCtl: throttle(function (e, type) {
+    const { method, url, msg } = type ? e : e.currentTarget.dataset
+    if (!url) {
+      wx.showToast({
+        title: msg || '暂未开放',
+        icon: 'none'
+      })
+      return
+    }
+    let array = []
+    if (method) {
+      for (let i in method) {
+        // console.log(data)
+        if (typeof data === 'object') {
+          array.push(`${i}=${JSON.stringify(method[i])}`)
+        } else {
+          array.push(`${i}=${method[i]}`)
+        }
+      }
+    }
+    wx.navigateTo({
+      url: `${getCurrentPages().length == 0 ? 'pages' : '..'}/${url}/${url}${array.length > 0 ? '?' + array.join('&') : ''}`,
+      success: res => { },
+      fail: res => {
+        wx.showToast({
+          title: '跳转失败',
+          icon: 'none'
+        })
+      }
+    })
+  },500),
+
+  /**
+   * redirect路由跳转
+   */
+  redirectCtl: function (e, type) {
+    const { method, url, msg } = type ? e : e.currentTarget.dataset
+    if (!url) {
+      wx.showToast({
+        title: msg || '暂未开放',
+        icon: 'none'
+      })
+      return
+    }
+    let array = []
+    if (method) {
+      for (let i in method) {
+        if (typeof data === 'object') {
+          array.push(`${i}=${JSON.stringify(method[i])}`)
+        } else {
+          array.push(`${i}=${method[i]}`)
+        }
+      }
+    }
+    wx.redirectTo({
+      url: `${getCurrentPages().length == 0 ? 'pages' : '..'}/${url}/${url}${array.length > 0 ? '?' + array.join('&') : ''}`,
+      success: res => { },
+      fail: res => {
+        wx.showToast({
+          title: '跳转失败',
+          icon: 'none'
+        })
+      }
+    })
+  },
+
+  /**
+   * 查看图片
+   */
+  viewImageCtl: function (e) {
+    let { images, index, baseurl, url = 'img' } = e.currentTarget.dataset
+    let array = images.map((val, key) => {
+      return baseurl + val[url]
+    })
+    wx.previewImage({
+      current: baseurl + images[index][url], // 当前显示图片的http链接
+      urls: array // 需要预览的图片http链接列表
+    })
+  },
+
+  /**
+   * 分享控制层
+   */
+  sharePageDefaultCtl: function (){
+    return {
+      title: '私塾家',
+      path: 'pages/index/index?type=1',
+      success: res => {
+        wx.showToast({
+          title: '转发成功',
+          icon: 'success'
+        })
+      },
+      fail: res => {
+        wx.showToast({
+          title: '转发失败',
+          icon: 'none'
+        })
+      }
+    }
+  },
+
+  /**
+   * 全局变量
+   */
+  globalData: {
+    wechatsys: sys.version + ' ' + sys.SDKVersion,
+    phoneimei: '',
+    phonesys: sys.system,
+    phonetype: sys.brand + ' ' + sys.model,
+    version: '3.1.7',
+    platform: '3',
+    build: '3.1.7',
+    appType: 6,
+    initStatus: 0,
+    loginTime: 0,
+    // host: 'https://api.sharingschool.com/sz',
+    // baseImgUrl: 'https://img.sharingschool.com/',          
+    thumbnail: '?x-oss-process=image/resize,m_fill,h_300,w_200',
+    host: 'https://xt.sharingschool.com/sz',
+    baseImgUrl: 'https://xtimg.sharingschool.com',
+    // thumbnail: '!m300x200.png',
+    // baseImgUrl: 'https://xt.sharingschool.com/upload', 
+    accessToken: null,
+    parentVipList: null, 
+    parentVipLiIdx: null,
+    parentVipId: null,
+    parentInfo: null,
+    appid: 'wx3805cdb5bcb8646a',
+    userInfo: null,
+    options: null,
+    postData: null,
+    tempOptions: { query: {}, path: 'pages/index/index', scene: 1001 }
+  }
+})

+ 55 - 0
app.json

@@ -0,0 +1,55 @@
+{
+  "pages": [
+    "pages/index/index",
+    "pages/learning_report/learning_report",
+    "pages/phone/phone",
+    "pages/homework_list/homework_list",
+    "pages/problem_list/problem_list",
+    "pages/history_record/history_record",
+    "pages/homework_report/homework_report",
+    "pages/single_subject_detail/single_subject_detail",
+    "pages/problem_report/problem_report",
+    "pages/change_course/change_course",
+    "pages/change_teacher/change_teacher",
+    "pages/kids_information/kids_information",
+    "pages/classroom_assessment/classroom_assessment",
+    "pages/add_parent/add_parent",
+    "pages/homeworkRenew/homeworkRenew",
+    "pages/initiate_refund/initiate_refund",
+    "pages/school/school",
+    "pages/outLink/outLink",
+    "pages/childList/childList",
+    "pages/remark/remark",
+    "pages/me/me",
+    "pages/promotion_code/promotion_code",
+    "pages/homework_record/homework_record",
+    "pages/homework_img_detail/homework_img_detail",
+    "pages/studyHouse/studyHouse",
+    "pages/shell_device/shell_device",
+    "templates/picker/picker",
+    "templates/finally/finally",
+    "templates/header/header",
+    "pages/wx_authority/wx_authority",
+    "pages/teaching/teaching",
+    "pages/select_teaching/select_teaching",
+    "pages/wechat_addchild/wechat_addchild"
+    
+  ],
+  "window": {
+    "backgroundTextStyle": "light",
+    "navigationBarBackgroundColor": "#fff",
+    "navigationBarTitleText": "私塾家",
+    "navigationBarTextStyle": "black"
+  },
+  "permission": {
+    "scope.userLocation": {
+      "desc": "你的位置信息将用于获取图书馆展示"
+    }
+  },
+  "networkTimeout": {
+    "request": 60000,
+    "downloadFile": 60000
+  },
+  "debug": false,
+  "sitemapLocation": "sitemap.json"
+}

+ 161 - 0
app.wxss

@@ -0,0 +1,161 @@
+/**app.wxss**/
+page {
+  font-family: PingFangSC-Regular;
+  font-size: 32rpx;
+  color: #000000;
+  background: #fff;
+}
+view {
+  word-break: break-all;
+}
+.container {
+  position: relative;
+}
+.wrapper {
+  position: absolute;
+  top: 0; 
+  left: 0;
+  width: 100%;
+  font-weight: bold;
+} 
+.input-placeholder {
+  color: #8489A3;
+  font-size: 30rpx;
+}
+.container-distance{
+  margin-top: 88rpx;
+}
+.li-footer{
+  margin-top: 140rpx;
+}
+.showModel{
+  width: 100%;
+  height: 100%;
+  position: fixed;
+  top: 0;
+  left: 0;
+  background: #000;
+  opacity: 0.5;
+  overflow: hidden;
+  z-index: 100000;
+  color: #fff;
+  
+}
+.model{
+  z-index: 1000000;
+  position: fixed;
+  top: 233rpx;
+  margin: 0 60rpx;
+  background: #fff;
+  border-radius:30rpx;
+  text-align: center;
+  width: 84%;
+}
+.li-txt{
+  font-size:34rpx;
+  color:rgba(57,57,57,1);
+  line-height:40rpx;
+  margin: 110rpx 0;
+  text-align: center;
+}
+.li-btn{
+  display: flex;
+  justify-content: space-around;
+  align-content: center;
+  text-align: center;
+  margin-bottom: 45rpx;
+}
+.li-btn-sure{
+  padding: 28rpx 70rpx;
+  border-radius: 20rpx;
+  display: inline-block;
+  background: #E45C58;
+  color: #fff;
+}
+.li-btn-url{
+  padding: 28rpx 70rpx;
+  border-radius: 20rpx;
+  display: inline-block;
+  background: #46C390;
+  color: #fff;
+}
+.tag-words{
+  width: 100%;
+  height:52rpx;
+  line-height: 52rpx;
+  text-align: center;
+  background:rgba(0,0,0,0.8);
+  color: #FFFFFF;
+  font-size: 20rpx;
+  position: absolute;
+  bottom: 0;
+  border-radius: 0 0 20rpx 20rpx;
+}
+.scroll-view-item{
+  position: relative;
+  margin-right: 19rpx;
+}
+button,
+button::after {
+  border: none;
+  border-radius: 0;
+  padding: 0;
+  margin: 0;
+  transition: all .3s;
+}
+
+.login{
+  text-align: center;
+  color: #373737;
+  font-size: 26rpx;
+  margin-top: 38%;
+}
+.login-img{
+  width: 305rpx;
+  height: 331rpx;
+  /* margin-bottom: 109rpx; */
+}
+.login-text{
+  margin: 109rpx;
+  line-height: 30rpx;
+}
+.login-btn{
+   width:346rpx;
+  height:96rpx;
+  line-height: 96rpx;
+  background:rgba(255,100,101,1);
+  border-radius:48rpx;
+  cursor: pointer;
+  margin: auto;
+  color: #FFFFFF;
+  font-size: 30rpx;
+  text-align: center;
+}
+.li-date-time-items{
+  font-size: 24rpx;
+  margin: 20rpx 0;
+  display: flex;
+  justify-content: space-between;
+  border-radius:4rpx;
+  padding:20rpx 0;
+  position: relative;
+  z-index: 1000;
+}
+.li-date-time-items-img{
+  width: 34rpx;
+  height: 29rpx;
+  margin-right: 9rpx;
+  position: relative;
+  top: 5rpx;
+}
+.li-date-time-items-tips{
+  width:100rpx;
+  height:34rpx;
+  line-height: 34rpx;
+  text-align: center;
+  background:rgba(255,241,185,1);
+  border-radius:6rpx;
+  color: #895F26;
+  font-size: 20rpx;
+  display: inline-block;
+}

BIN
image/action_zuo_yue.png


BIN
image/add_card_number.png


BIN
image/address.png


BIN
image/address_bg.png


BIN
image/address_red.png


BIN
image/address_white.png


BIN
image/beike_ban_ding.png


BIN
image/biao_ge_bei_jing.png


BIN
image/biao_qian_hong.png


BIN
image/biao_qian_hui.png


BIN
image/bo_fang.png


BIN
image/bu_pai.png


BIN
image/bu_pi_gai.png


BIN
image/bu_quan.png


BIN
image/camera_back.png


BIN
image/camera_sure.png


BIN
image/check.png


BIN
image/check_gray.png


BIN
image/child_no_select.png


BIN
image/child_select.png


BIN
image/chinese_photo.png


BIN
image/cuo_ti.png


BIN
image/dai_jie_da.png


BIN
image/default_headicon.png


BIN
image/default_headicon1.png


BIN
image/default_headicon2.png


BIN
image/default_headicon3.png


BIN
image/default_headicon4.png


BIN
image/default_headicon5.png


BIN
image/deng_ji.png


BIN
image/deng_lv_logo.png


BIN
image/dui_huan_ma.png


BIN
image/enghish_photo.png


BIN
image/fact_time.png


BIN
image/gd.png


BIN
image/goods.png


BIN
image/hei_hua_ping.png


BIN
image/hua_ping.png


BIN
image/huang_guan.png


BIN
image/huaxue.png


BIN
image/hui_se_zhi_yin.png


BIN
image/icon_down.png


BIN
image/icon_plus.png


BIN
image/ji_yi_zhi_shi.png


BIN
image/jia_fa.png


BIN
image/jia_zhang_xie_zhu.png


BIN
image/jian_hao.png


BIN
image/jian_tou_zhi_yin.png


BIN
image/jie_bang.png


BIN
image/jie_guo_chen_xian.png


BIN
image/jie_xi_deng.png


BIN
image/jie_xi_zhong.png


BIN
image/lao_shi_liu_yan.png


BIN
image/lao_shu_ping_yu.png


BIN
image/left-copy@2x.png


BIN
image/li_jie_zhi_shi.png


BIN
image/li_shi_ji_lu.png


BIN
image/light.png


BIN
image/math_photo.png


BIN
image/mei_you_ban_ding.png


BIN
image/memeber_success.png


BIN
image/message_bg.png


BIN
image/min_star_gay.png


BIN
image/min_star_red.png


BIN
image/min_star_red_half.png


BIN
image/minus_card_number.png


BIN
image/mohu.png


BIN
image/my_order.png


BIN
image/nan_shi.png


BIN
image/nan_ti_jie_xi.png


BIN
image/nan_ti_video.png


BIN
image/nan_yi_tu_biao.png


BIN
image/no_data_myOrder@2x.png


BIN
image/no_mistake.png


BIN
image/no_zuo_yue.png


BIN
image/nores.png


BIN
image/nv_shi.png


BIN
image/one_to_obe_guide.png


BIN
image/one_to_one.png


BIN
image/one_to_one_guide.png


BIN
image/one_to_one_report.png


BIN
image/payment_success@2x.png


BIN
image/pencil_loading.png


BIN
image/photo.png


BIN
image/position.png


BIN
image/position_red.png


BIN
image/predict_time.png


BIN
image/qie_huan.png


BIN
image/right-copy1@2x.png


BIN
image/right_zy7@2x.png


BIN
image/sao_miao@2x.png


BIN
image/search.png


BIN
image/search_taobao.png


BIN
image/select_biao_ji.png


BIN
image/select_off.png


BIN
image/select_on.png


+ 0 - 0
image/shanchu.png


Some files were not shown because too many files changed in this diff