| @@ -0,0 +1,22 @@ | |||
| App({ | |||
| data:{}, | |||
| globalData:{ | |||
| token: "", | |||
| // "token": "0b272d7d-d669-401a-8d4b-a9eef9340dc1:1027:tt-cuser", | |||
| imgHttps: 'https://formall.oss-accelerate.aliyuncs.com/douyin/drawable-xhdpi/', | |||
| platform:null,//手机型号 | |||
| }, | |||
| onLaunch: function () { | |||
| let that = this | |||
| // this.logn(); | |||
| try { | |||
| var res = tt.getSystemInfoSync(); | |||
| that.statusBarHeight = res.statusBarHeight | |||
| console.log(`手机型号为 ${res.platform}`); | |||
| this.globalData.platform = res.platform | |||
| } catch (error) { | |||
| console.log(`获取系统信息失败`); | |||
| } | |||
| }, | |||
| statusBarHeight: 0, | |||
| }) | |||
| @@ -0,0 +1,48 @@ | |||
| { | |||
| "pages": [ | |||
| "pages/index/index", | |||
| "pages/main/main", | |||
| "pages/user/user", | |||
| "pages/scan/scan", | |||
| "pages/writeoffPage/writeoffPage", | |||
| "pages/errorPage/errorPage", | |||
| "pages/write0ff/write0ff", | |||
| "pages/marktingsettlement/marktingsettlement", | |||
| "pages/forgetpwd/forgetpwd", | |||
| "pages/setpwd/setpwd", | |||
| "pages/success/success", | |||
| "pages/transaction/transaction", | |||
| "pages/creditSelect/index", | |||
| "pages/memberPhone/index", | |||
| "pages/Add/index", | |||
| "pages/operation/index", | |||
| "pages/getMerchant/index", | |||
| "pages/editSuccess/index", | |||
| "pages/exchange/index", | |||
| "pages/creditOperate/index", | |||
| "pages/goHtml/goHtml" | |||
| ], | |||
| "window": { | |||
| "backgroundTextStyle": "light", | |||
| "navigationBarBackgroundColor": "#52A0FD" | |||
| }, | |||
| "tabBar": { | |||
| "color": "#9F9F9F", | |||
| "selectedColor": "#52a0fd", | |||
| "backgroundColor": "#fff", | |||
| "list": [ | |||
| { | |||
| "pagePath": "pages/main/main", | |||
| "text": "首页", | |||
| "iconPath": "assets/images/home-n.png", | |||
| "selectedIconPath": "assets/images/home-y.png" | |||
| }, | |||
| { | |||
| "pagePath": "pages/user/user", | |||
| "text": "我的", | |||
| "iconPath": "assets/images/user-n.png", | |||
| "selectedIconPath": "assets/images/user-y.png" | |||
| } | |||
| ] | |||
| } | |||
| } | |||
| @@ -0,0 +1,29 @@ | |||
| .container { | |||
| height: 100%; | |||
| display: flex; | |||
| flex-direction: column; | |||
| align-items: center; | |||
| justify-content: space-between; | |||
| box-sizing: border-box; | |||
| } | |||
| text{ | |||
| font-size: 34rpx; | |||
| } | |||
| .fl{ | |||
| float: left; | |||
| } | |||
| .fr{ | |||
| float: right; | |||
| } | |||
| .clearfix:after { | |||
| content: "."; | |||
| display: block; | |||
| height: 0; | |||
| clear: both; | |||
| visibility: hidden; | |||
| } | |||
| view, | |||
| text { | |||
| font-family: PingFangSC-Regular; | |||
| } | |||
| @@ -0,0 +1,358 @@ | |||
| let config = require("../config/config.js"); | |||
| var app = getApp(); | |||
| const func = { | |||
| getMallIcon: function () { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.getMallIcon, | |||
| data: { | |||
| appId: config.weapp.appId, | |||
| }, | |||
| success: function (res) { | |||
| resolve(res.data) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| //console.log("getMallIcon complete:" + res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| userLogin: function (phone, password, latitude, longitude) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.login, | |||
| data: { | |||
| appId: config.weapp.appId, | |||
| phone: phone, | |||
| password: password, | |||
| latitude: latitude, | |||
| longitude: longitude | |||
| }, | |||
| method: "POST", | |||
| success: function (res) { | |||
| resolve(res.data) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| //console.log("userLogin complete:" + res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| getUserInfo: function (phone, password, latitude, longitude) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.userDetail, | |||
| header: { | |||
| "content-type": "application/json;charset=UTF-8", | |||
| "token": app.globalData.token | |||
| }, | |||
| data: { | |||
| appId: config.weapp.appId, | |||
| phone: phone, | |||
| password: password, | |||
| latitude: latitude, | |||
| longitude: longitude | |||
| }, | |||
| method: "POST", | |||
| success: function (res) { | |||
| resolve(res) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| //console.log("userLogin complete:" + res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| /** | |||
| * 优惠券查询 | |||
| */ | |||
| getCouponList: function (pageNum, pageSize) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.couponList, | |||
| header: { | |||
| "content-type": "application/json;charset=UTF-8", | |||
| "token": app.globalData.token | |||
| }, | |||
| method: "get", | |||
| data: { | |||
| pageNum: pageNum, | |||
| pageSize: pageSize | |||
| }, | |||
| success: function (res) { | |||
| resolve(res) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| console.log(res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| /** | |||
| * 优惠券详情 | |||
| */ | |||
| getCouponOrderDetail: function (couponOrderId) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.couponOrderDetail, | |||
| header: { | |||
| "content-type": "application/json;charset=UTF-8", | |||
| "token": app.globalData.token | |||
| }, | |||
| method: "get", | |||
| data: { | |||
| couponOrderId: couponOrderId | |||
| }, | |||
| success: function (res) { | |||
| resolve(res.data) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| console.log(res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| /** | |||
| * 获取图文详情html | |||
| */ | |||
| getHtml: function (couponOrderId) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.couponHtmlDetail, | |||
| header: { | |||
| "content-type": "application/json;charset=UTF-8", | |||
| "token": app.globalData.token | |||
| }, | |||
| method: "get", | |||
| data: { | |||
| couponOrderId: couponOrderId | |||
| }, | |||
| success: function (res) { | |||
| resolve(res.data) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| console.log(res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| /** | |||
| * 更新密码 | |||
| */ | |||
| updateUserPassword: function (phone, yzm, newPwd) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.userUpdatePwd, | |||
| header: { | |||
| "content-type": "application/json;charset=UTF-8", | |||
| }, | |||
| method: "POST", | |||
| data: { | |||
| phone: phone, | |||
| code: yzm, | |||
| pwd: newPwd, | |||
| appId: config.weapp.appId | |||
| }, | |||
| success: function (res) { | |||
| resolve(res.data) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| console.log(res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| /** | |||
| * 验证码验证 | |||
| */ | |||
| hasValidationCode: function (phone, yzm) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.hasValidationCode, | |||
| header: { | |||
| "content-type": "application/json;charset=UTF-8", | |||
| }, | |||
| method: "get", | |||
| data: { | |||
| phone: phone, | |||
| code: yzm, | |||
| type: 1, | |||
| appid: config.weapp.appId | |||
| }, | |||
| success: function (res) { | |||
| resolve(res.data) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| console.log(res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| /** | |||
| * 发送验证码 | |||
| */ | |||
| sendValidationCode: function (phone) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.sendValidationCode, | |||
| header: { | |||
| "content-type": "application/json;charset=UTF-8", | |||
| }, | |||
| method: "get", | |||
| data: { | |||
| phone: phone, | |||
| type: 1, | |||
| appid: config.weapp.appId | |||
| }, | |||
| success: function (res) { | |||
| resolve(res.data) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| console.log(res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| /** | |||
| * 券核销 | |||
| */ | |||
| couponOrderVerify: function (couponOrderId, verifyRemark) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.couponOrderVerify, | |||
| header: { | |||
| "content-type": "application/json;charset=UTF-8", | |||
| "token": app.globalData.token, | |||
| }, | |||
| data: { | |||
| couponOrderId: couponOrderId, | |||
| verifyRemark: verifyRemark, | |||
| }, | |||
| method: "POST", | |||
| success: function (res) { | |||
| resolve(res.data) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| //console.log("userLogin complete:" + res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| /** | |||
| * | |||
| * @param {*换取openId} code | |||
| */ | |||
| getOpenId: function (code,bUserId) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.getOpenId, | |||
| header: { | |||
| "content-type": "application/json;charset=UTF-8", | |||
| "token": app.globalData.token, | |||
| }, | |||
| data: { | |||
| appId: config.weapp.appId, | |||
| code: code, | |||
| bUserId:bUserId | |||
| }, | |||
| method: "POST", | |||
| success: function (res) { | |||
| resolve(res) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| //console.log("userLogin complete:" + res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| /** | |||
| * 获得超级管理员openId | |||
| */ | |||
| getSuperOpenId: function (code) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.getSuperOpenId, | |||
| header: { | |||
| "content-type": "application/json;charset=UTF-8", | |||
| }, | |||
| data: { | |||
| appId: config.weapp.appId, | |||
| code: code, | |||
| }, | |||
| method: "POST", | |||
| success: function (res) { | |||
| resolve(res) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| /** | |||
| * 获得手机号 | |||
| */ | |||
| getUserPhone: function (encryptedData, iv, superopenId, session_key) { | |||
| return new Promise((resolve, reject) => { | |||
| tt.request({ | |||
| url: config.api.getUserPhone, | |||
| header: { | |||
| "content-type": "application/json;charset=UTF-8", | |||
| }, | |||
| data: { | |||
| appId: config.weapp.appId, | |||
| encryptedData: encryptedData, | |||
| iv: iv, | |||
| openId: superopenId, | |||
| session_key: session_key, | |||
| }, | |||
| method: "POST", | |||
| success: function (res) { | |||
| resolve(res) | |||
| }, | |||
| fail: function (err) { | |||
| reject(err) | |||
| }, | |||
| complete: function (res) { | |||
| //console.log("userLogin complete:" + res) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| } | |||
| module.exports = func; | |||
| @@ -0,0 +1 @@ | |||
| <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="128px" height="128.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#202020" d="M962.986667 480.426667l-422.4-379.733334a42.666667 42.666667 0 0 0-57.173334 0l-422.4 379.733334a42.666667 42.666667 0 0 0 57.173334 63.146666l9.813333-8.533333V896a42.666667 42.666667 0 0 0 42.666667 42.666667h682.666666a42.666667 42.666667 0 0 0 42.666667-42.666667v-360.96l9.813333 8.533333a42.666667 42.666667 0 0 0 28.586667 11.093334 42.666667 42.666667 0 0 0 31.573333-14.08 42.666667 42.666667 0 0 0-2.986666-60.16zM469.333333 853.333333v-170.666666h85.333334v170.666666z m341.333334-384v384h-170.666667v-213.333333a42.666667 42.666667 0 0 0-42.666667-42.666667h-170.666666a42.666667 42.666667 0 0 0-42.666667 42.666667v213.333333H213.333333v-384a61.013333 61.013333 0 0 0 0-9.386666l298.666667-270.08 298.666667 270.08a61.013333 61.013333 0 0 0 0 9.386666z" /></svg> | |||
| @@ -0,0 +1,71 @@ | |||
| const app = getApp() | |||
| Component({ | |||
| properties: { | |||
| background: { | |||
| type: String, | |||
| value: '#F4F5F9' | |||
| }, | |||
| color: { | |||
| type: String, | |||
| value: '#000' | |||
| }, | |||
| text: { | |||
| type: String, | |||
| value: 'Wechat' | |||
| }, | |||
| showLocationIf: { | |||
| type: Boolean, | |||
| value: false | |||
| }, | |||
| back: { | |||
| type: Boolean, | |||
| value: false | |||
| }, | |||
| home: { | |||
| type: Boolean, | |||
| value: false | |||
| } | |||
| }, | |||
| data: { | |||
| array: ['A广场', 'B广场-北京西单'], | |||
| index: 1, | |||
| statusBarHeight: app.statusBarHeight + 'px', | |||
| navigationBarHeight: (app.statusBarHeight + 44) + 'px', | |||
| imgHttps: app.globalData.imgHttps, | |||
| }, | |||
| methods: { | |||
| backHome: function () { | |||
| tt.switchTab({ | |||
| url: `/pages/main/main`, | |||
| success(res) { | |||
| console.log(`${res}`); | |||
| }, | |||
| fail(res) { | |||
| console.log(`switchTab调用失败`); | |||
| }, | |||
| }); | |||
| }, | |||
| bindPickerChange: function (e) { | |||
| console.log('picker发送选择改变,携带值为', e.detail.value) | |||
| this.setData({ | |||
| index: e.detail.value | |||
| }) | |||
| }, | |||
| back: function () { | |||
| tt.navigateBack({ | |||
| delta: 1 | |||
| }) | |||
| } | |||
| }, | |||
| attached: function(){ | |||
| let pages = getCurrentPages(); | |||
| if (pages.length <= 1) { | |||
| this.setData({ | |||
| back: false | |||
| }) | |||
| } | |||
| } | |||
| }) | |||
| @@ -0,0 +1,3 @@ | |||
| { | |||
| "component": true | |||
| } | |||
| @@ -0,0 +1,21 @@ | |||
| <view class="navbar" style="background:{{background}}!important;"> | |||
| <view style="{{'height: ' + statusBarHeight}}"></view> | |||
| <view class='title-container'> | |||
| <view class='capsule' tt:if="{{ back || home}}"> | |||
| <view bindtap='back' tt:if="{{back}}"> | |||
| <image style="left:36%;" src='./img/back.png'></image> | |||
| </view> | |||
| <view bindtap='backHome' tt:if="{{home}}"> | |||
| <image src='img/home.png' style="width:60%;"></image> | |||
| </view> | |||
| </view> | |||
| <view class='title' style="color:{{color}}!important">{{text}}</view> | |||
| <picker bindchange="bindPickerChange" tt:if="{{showLocationIf}}" class="pick-box" value="{{index}}" range="{{array}}"> | |||
| <icon class='iconfont icon-daohangdizhiweizhi'></icon> | |||
| <view class="picker locations"> | |||
| {{array[index]}} | |||
| </view> | |||
| </picker> | |||
| </view> | |||
| </view> | |||
| @@ -0,0 +1,91 @@ | |||
| .navbar { | |||
| width: 100vw; | |||
| background-color: #F4F5F9; | |||
| position: fixed; | |||
| left: 0; | |||
| top: 0; | |||
| overflow: hidden; | |||
| z-index: 400000000; | |||
| } | |||
| .title-container { | |||
| height: 44px; | |||
| display: flex; | |||
| align-items: center; | |||
| position: relative; | |||
| } | |||
| .capsule { | |||
| margin-left: 10px; | |||
| height: 32px; | |||
| /* border: 1px solid #e1e1e3; */ | |||
| border-radius: 60px; | |||
| display: flex; | |||
| align-items: center; | |||
| padding: 0 20rpx; | |||
| /* background: #fff!important; */ | |||
| } | |||
| .capsule > view { | |||
| width: 35px; | |||
| height: 60%; | |||
| position: relative; | |||
| } | |||
| .capsule > view:nth-child(2) { | |||
| border-left: 1px solid #777; | |||
| } | |||
| .capsule image { | |||
| width: 70%; | |||
| height: 100%; | |||
| position: absolute; | |||
| left: 50%; | |||
| top: 50%; | |||
| transform: translate(-50%,-50%); | |||
| } | |||
| .title { | |||
| color: #000; | |||
| position: absolute; | |||
| left: 104px; | |||
| right: 104px; | |||
| font-weight: 600; | |||
| font-size: 32rpx; | |||
| text-align: center; | |||
| overflow: hidden; | |||
| text-overflow: ellipsis; | |||
| white-space: nowrap; | |||
| } | |||
| @font-face { | |||
| font-family: 'iconfont'; /* project id 1353695 */ | |||
| src: url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.eot'); | |||
| src: url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.eot?#iefix') format('embedded-opentype'), | |||
| url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.woff2') format('woff2'), | |||
| url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.woff') format('woff'), | |||
| url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.ttf') format('truetype'), | |||
| url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.svg#iconfont') format('svg'); | |||
| } | |||
| .iconfont { | |||
| font-family: "iconfont" !important; | |||
| font-size: 16px; | |||
| font-style: normal; | |||
| -webkit-font-smoothing: antialiased; | |||
| -moz-osx-font-smoothing: grayscale; | |||
| } | |||
| .icon-daohangdizhiweizhi:before { | |||
| content: "\e787"; | |||
| } | |||
| .locations{ | |||
| font-size: 28rpx; | |||
| display: inline-block; | |||
| width: 200rpx; | |||
| overflow: hidden; | |||
| text-overflow:ellipsis; | |||
| white-space: nowrap; | |||
| } | |||
| .pick-box{ | |||
| width: 260rpx; | |||
| padding-left: 20rpx; | |||
| } | |||
| @@ -0,0 +1,345 @@ | |||
| const extConfig = wx.getExtConfigSync ? wx.getExtConfigSync().extConfig : {} | |||
| let weappId = extConfig.weappId; | |||
| let dataTowerUrl = extConfig.attr.datatowerurl; | |||
| let url = extConfig.attr.configUrl; | |||
| var apiPrefix = url + '/B'; | |||
| let config = { | |||
| api: { | |||
| // 获取进件 页面地址 | |||
| findTt: "/api/merchant/getTtReceiverUrl", | |||
| /** | |||
| * 接口用途:login | |||
| */ | |||
| login: '/api/user/login', | |||
| /** | |||
| * B端用户详情 | |||
| */ | |||
| userDetail: '/api/user/detail', | |||
| getMallIcon: '/api/mall/getAppIcon', | |||
| //提现列表 | |||
| withdrawLsit: "/api/cashout/list", | |||
| //账户余额 | |||
| balance: "/api/cashout/getCurrentCashOutData", | |||
| // 商户提现 | |||
| userWithdraw: "/api/cashout/cashout", | |||
| /** | |||
| * 修改密码 | |||
| */ | |||
| userUpdatePwd: '/api/user/updatepwd', | |||
| /** | |||
| * 券包详情 | |||
| */ | |||
| couponOrderDetail: '/api/couponOrder/detail', | |||
| /** | |||
| * 购买须知图文详情 | |||
| */ | |||
| couponHtmlDetail: '/api/couponOrder/html', | |||
| /** | |||
| * 退款 | |||
| */ | |||
| refundOrderCreate: '/api/refund/create', | |||
| /** | |||
| * 券核销 | |||
| */ | |||
| couponOrderVerify: '/api/couponOrder/verify', | |||
| /** | |||
| * 发送验证码 | |||
| */ | |||
| sendValidationCode: '/wxMsgValidationcode/sendvalidationcode', | |||
| /** | |||
| * 验证验证码 | |||
| */ | |||
| hasValidationCode: '/wxMsgValidationcode/hasvalidationcode', | |||
| /** | |||
| * 已被核销的券包 | |||
| */ | |||
| couponOrderListVerified: '/api/couponOrder/listVerified', | |||
| /** | |||
| * 未核销的券包 | |||
| */ | |||
| couponOrderListUnVerified: '/api/couponOrder/listUnverified', | |||
| /** | |||
| * 上报解单 | |||
| */ | |||
| reportDailyVolume: '/api/wxMerchantTradeDaily/reportDailyVolume', | |||
| /** | |||
| * 获取当日解单 | |||
| */ | |||
| getVolume: '/api/wxMerchantTradeDaily/getVolume', | |||
| /** | |||
| * 获取周解单 | |||
| */ | |||
| getVolumeOfWeek: '/api/wxMerchantTradeDaily/getVolumeOfWeek', | |||
| /** | |||
| * 交易记录list | |||
| */ | |||
| dateAmountRecordListOrder: '/api/wxDateAmountRecord/listOrder', | |||
| /** | |||
| * 交易记录list | |||
| */ | |||
| dateAmountRecordListVerified: '/api/wxDateAmountRecord/listVerified', | |||
| /** | |||
| * 某日期交易总流水 | |||
| */ | |||
| getUnverifiedAmountOnDate: '/api/couponOrder/getUnverifiedAmountOnDate', | |||
| /** | |||
| * 某日期核销总流水 | |||
| */ | |||
| getVerifiedAmountOnDate: '/api/couponOrder/getVerifiedAmountOnDate', | |||
| /** | |||
| *刷卡支付订单 | |||
| */ | |||
| orderCreate: '/api/micropay/order_create', | |||
| /** | |||
| *查询刷卡支付订单 | |||
| */ | |||
| orderQuery: '/api/micropay/order_query', | |||
| /** | |||
| *撤销刷卡支付订单 | |||
| */ | |||
| orderReverse: '/api/micropay/order_reverse', | |||
| /** | |||
| *首页查询刷卡金额记录接口 | |||
| */ | |||
| listMicropay: '/api/wxDateAmountRecord/listMicropay', | |||
| /** | |||
| *刷卡支付交易流水分页列表接口 | |||
| */ | |||
| micropayListMicroPay: '/api/micropay/listMicroPay', | |||
| /** | |||
| *刷卡支付退款 | |||
| */ | |||
| // microPayRefund: '/api/micropay/microPayRefund', | |||
| /** | |||
| *刷卡支付某日期交易总流水 | |||
| */ | |||
| getMicroPayAmountOnDate: '/api/micropay/getMicroPayAmountOnDate', | |||
| /** | |||
| * 首页账单列表 | |||
| */ | |||
| listBillOweAndWaitPay: "/api/bill/listBillOweAndWaitPay", | |||
| /** | |||
| * 账单 | |||
| */ | |||
| listBill: "/api/bill/listBill", | |||
| /** | |||
| * 获得openId | |||
| */ | |||
| getOpenId: "/api/wx/getOpenId", | |||
| /** | |||
| * 获得超级管理员openid | |||
| */ | |||
| getSuperOpenId: "/api/wx/getSuperOpenId", | |||
| /** | |||
| * 获得手机号 | |||
| */ | |||
| getUserPhone: "/api/wx/getUserPhone", | |||
| /** | |||
| * | |||
| */ | |||
| getUserPhoneForBuser: "/api/wx/getUserPhoneForBuser", | |||
| /** | |||
| * 发起微信小程序支付订单 | |||
| */ | |||
| createorder: "/api/pay/create", | |||
| /** | |||
| * 更新支付订单状态 | |||
| */ | |||
| updatePayBill: '/api/pay/updatePayBill', | |||
| /** | |||
| * 获取用户等级及在此商户的折扣率及折扣后的金额 | |||
| */ | |||
| getUserInfo: "/api/user/getUserInfo", | |||
| /** | |||
| * 扫C端会员码返回会员信息 | |||
| */ | |||
| memScan: "/api/mem/mem_scan", | |||
| /** | |||
| * 补充会员信息 | |||
| */ | |||
| cMemberAdd: "/api/cuser/updateUserInfo", | |||
| /** | |||
| * | |||
| */ | |||
| findUserInfo: '/api/cuser/findUserInfo', | |||
| /** | |||
| *b端来源会员信息分页列表接口 | |||
| */ | |||
| listCUser: '/api/cuser/listCUser', | |||
| /** | |||
| *C端扫B端储值卡交易流水(消费记录 + 补贴)列表接口 | |||
| */ | |||
| cardPayList: "/api/cardPay/list", | |||
| /** | |||
| *C端扫B端储值卡交易流水SUM | |||
| */ | |||
| payMum: "/api/cardPay/sum", | |||
| /** | |||
| 补贴记录 | |||
| */ | |||
| subsidyList: "/api/subsidy/list", | |||
| /** | |||
| * 补贴记录汇总 | |||
| */ | |||
| subsidySum: "/api/subsidy/sum", | |||
| /** | |||
| * 图片上传 | |||
| */ | |||
| imgUpload: '/api/upload/awsFileUpload', | |||
| /** | |||
| * 获取商户列表 | |||
| */ | |||
| getMerchentList: "/api/merchant/name_list", | |||
| /** | |||
| * 获取消费金额对应积分 | |||
| */ | |||
| getCreditNum: "/api/credit/findByMerchantIdAndSpend", | |||
| /** | |||
| * 积分新增 | |||
| */ | |||
| addCredit: "/api/credit/add", | |||
| /** | |||
| * 根据手机号查询C端会员信息 | |||
| */ | |||
| findByPhone: "/api/credit/findByPhone", | |||
| /** | |||
| * 获取积分操作记录 | |||
| */ | |||
| getCreditList: "/api/credit/list", | |||
| /** | |||
| * 查询账户信息 | |||
| */ | |||
| findAccountById: "/api/merchant/findAccountById", | |||
| /** | |||
| * 更新收款账户信息 | |||
| */ | |||
| updateAccount: "/api/merchant/updateAccount", | |||
| /** | |||
| * 删除分账账户 | |||
| */ | |||
| deleteByReceiverId: "/api/merchant/deleteByReceiverId", | |||
| /** | |||
| * 获得解单的list | |||
| */ | |||
| tradeDailyList: "/api/wxMerchantTradeDaily/list", | |||
| /** | |||
| *保存或编辑 | |||
| */ | |||
| saveOrUpdate: "/api/wxMerchantTradeDaily/saveOrUpdate", | |||
| /** | |||
| * 解单详情详情 | |||
| */ | |||
| wxMerchantTradeDailyfindById: "/api/wxMerchantTradeDaily/findById", | |||
| /** | |||
| * 获取会员可赠送的券列表 | |||
| */ | |||
| wxMerchantcouponSend: "/api/couponSend/list", | |||
| /** | |||
| * 商户注券操作 | |||
| */ | |||
| wxMerchantcouponhandSel: "/api/couponSend/handSel", | |||
| /** | |||
| * 商户注券记录 | |||
| */ | |||
| wxMerchantcouponStory: "/api/couponSend/actionLog", | |||
| /** | |||
| * 获取结算单详情接口 | |||
| */ | |||
| findSettleById: "/api/bill/findSettleById", | |||
| /** | |||
| * 检查用户手机授权状态 | |||
| */ | |||
| checkPhoneStatus: "/api/wx/checkPhoneStatus", | |||
| /** | |||
| * 检查用户是否有权限修改收款账户 | |||
| */ | |||
| permitModifiy: "/api/merchant/permitModifiy", | |||
| /** | |||
| * 查询服装tag | |||
| */ | |||
| getTag: "/api/tag/getData", | |||
| /** | |||
| * 收银满减券 | |||
| */ | |||
| getManjian: "/api/micropay/order_create_v2", | |||
| /** | |||
| * 获取营销结算列表 | |||
| */ | |||
| getSubsidyList: "/api/subsidy/list", | |||
| /** | |||
| * 获取营销结算汇总 | |||
| */ | |||
| getSubsidySummary: "/api/subsidy/summary", | |||
| /** | |||
| *刷卡支付订单 | |||
| */ | |||
| orderCreate2: '/api/micropay/pay_order_create_v2', | |||
| /** | |||
| * 查询商户授权状态 | |||
| */ | |||
| getOpenIdByPhone: "/api/merchant/getOpenIdByPhone", | |||
| /** | |||
| * B端发卷-查询 | |||
| */ | |||
| getCouponlist: "/api/coupon/list", | |||
| /** | |||
| * B端发卷-已上架 | |||
| */ | |||
| getShelf: "/api/wxCouponChannel/list", | |||
| /** | |||
| * B端发卷-添加通用卷 | |||
| */ | |||
| addCoupon: "/api/coupon/add", | |||
| /** | |||
| * B端发卷-修改通用券 | |||
| */ | |||
| updataCoupon: "/api/coupon/update", | |||
| /** | |||
| *B端发卷- 提交审批 | |||
| */ | |||
| submitExamine: "/api/coupon/apply", | |||
| /** | |||
| * B端发卷-投放 | |||
| */ | |||
| addbatch: "/api/wxCouponChannel/addbatch", | |||
| /** | |||
| * B端发卷-下架 | |||
| */ | |||
| soldOut: "/api/wxCouponChannel/update", | |||
| /** | |||
| * B端发卷-作废 | |||
| */ | |||
| cancellation: "/api/coupon/update", | |||
| /** | |||
| * B端发卷-查询审批历史记录 | |||
| */ | |||
| lookHistory: "/api/coupon/flowHistory", | |||
| /** | |||
| * 配送列表 | |||
| */ | |||
| goodsList: '/api/couponOrder/goodsList', | |||
| /** | |||
| * 查询配送详情 | |||
| */ | |||
| ouponOrderId: "/api/couponOrder/detail", | |||
| /** | |||
| * 发货 | |||
| */ | |||
| sendGoods: "/api/couponOrder/sendGoods", | |||
| }, | |||
| weapp: { | |||
| appId: weappId, | |||
| dataTowerUrl: dataTowerUrl, | |||
| // appId: "tt7af40c49e5cd8d5001", | |||
| // dataTowerUrl: "https://mobiletest.malls.iformall.com", | |||
| } | |||
| } | |||
| for (var key in config.api) { | |||
| config.api[key] = apiPrefix + config.api[key]; | |||
| } | |||
| console.log(config,"config"); | |||
| module.exports = config; | |||
| @@ -0,0 +1,118 @@ | |||
| import WxCanvas from './tt-canvas'; | |||
| import * as echarts from './echarts'; | |||
| let ctx; | |||
| Component({ | |||
| properties: { | |||
| canvasId: { | |||
| type: String, | |||
| value: 'ec-canvas' | |||
| }, | |||
| ec: { | |||
| type: Object | |||
| } | |||
| }, | |||
| data: { | |||
| }, | |||
| ready: function () { | |||
| if (!this.data.ec) { | |||
| console.warn('组件需绑定 ec 变量,例:<ec-canvas id="mychart-dom-bar" ' | |||
| + 'canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>'); | |||
| return; | |||
| } | |||
| if (!this.data.ec.lazyLoad) { | |||
| this.init(); | |||
| } | |||
| }, | |||
| methods: { | |||
| init: function (callback) { | |||
| const version = tt.version.version.split('.').map(n => parseInt(n, 10)); | |||
| const isValid = version[0] > 1 || (version[0] === 1 && version[1] > 9) | |||
| || (version[0] === 1 && version[1] === 9 && version[2] >= 91); | |||
| if (!isValid) { | |||
| console.error('微信基础库版本过低,需大于等于 1.9.91。' | |||
| + '参见:https://github.com/ecomfe/echarts-for-weixin' | |||
| + '#%E5%BE%AE%E4%BF%A1%E7%89%88%E6%9C%AC%E8%A6%81%E6%B1%82'); | |||
| return; | |||
| } | |||
| ctx = tt.createCanvasContext(this.data.canvasId, this); | |||
| const canvas = new WxCanvas(ctx, this.data.canvasId); | |||
| echarts.setCanvasCreator(() => { | |||
| return canvas; | |||
| }); | |||
| var query = tt.createSelectorQuery().in(this); | |||
| query.select('.ec-canvas').boundingClientRect(res => { | |||
| if (typeof callback === 'function') { | |||
| this.chart = callback(canvas, res.width, res.height); | |||
| } | |||
| else if (this.data.ec && typeof this.data.ec.onInit === 'function') { | |||
| this.chart = this.data.ec.onInit(canvas, res.width, res.height); | |||
| } | |||
| else { | |||
| this.triggerEvent('init', { | |||
| canvas: canvas, | |||
| width: res.width, | |||
| height: res.height | |||
| }); | |||
| } | |||
| }).exec(); | |||
| }, | |||
| canvasToTempFilePath(opt) { | |||
| if (!opt.canvasId) { | |||
| opt.canvasId = this.data.canvasId; | |||
| } | |||
| ctx.draw(true, () => { | |||
| tt.canvasToTempFilePath(opt, this); | |||
| }); | |||
| }, | |||
| touchStart(e) { | |||
| if (this.chart && e.touches.length > 0) { | |||
| var touch = e.touches[0]; | |||
| this.chart._zr.handler.dispatch('mousedown', { | |||
| zrX: touch.x, | |||
| zrY: touch.y | |||
| }); | |||
| this.chart._zr.handler.dispatch('mousemove', { | |||
| zrX: touch.x, | |||
| zrY: touch.y | |||
| }); | |||
| } | |||
| }, | |||
| touchMove(e) { | |||
| if (this.chart && e.touches.length > 0) { | |||
| var touch = e.touches[0]; | |||
| this.chart._zr.handler.dispatch('mousemove', { | |||
| zrX: touch.x, | |||
| zrY: touch.y | |||
| }); | |||
| } | |||
| }, | |||
| touchEnd(e) { | |||
| if (this.chart) { | |||
| const touch = e.changedTouches ? e.changedTouches[0] : {}; | |||
| this.chart._zr.handler.dispatch('mouseup', { | |||
| zrX: touch.x, | |||
| zrY: touch.y | |||
| }); | |||
| this.chart._zr.handler.dispatch('click', { | |||
| zrX: touch.x, | |||
| zrY: touch.y | |||
| }); | |||
| } | |||
| } | |||
| } | |||
| }); | |||
| @@ -0,0 +1,4 @@ | |||
| { | |||
| "component": true, | |||
| "usingComponents": {} | |||
| } | |||
| @@ -0,0 +1,4 @@ | |||
| <canvas class="ec-canvas" canvas-id="{{ canvasId }}" | |||
| bindinit="init" | |||
| bindtouchstart="{{ ec.disableTouch ? '' : 'touchStart' }}" bindtouchmove="{{ ec.disableTouch ? '' : 'touchMove' }}" bindtouchend="{{ ec.disableTouch ? '' : 'touchEnd' }}"> | |||
| </canvas> | |||
| @@ -0,0 +1,4 @@ | |||
| .ec-canvas { | |||
| width: 100%; | |||
| height: 100%; | |||
| } | |||
| @@ -0,0 +1,96 @@ | |||
| export default class WxCanvas { | |||
| constructor(ctx, canvasId) { | |||
| this.ctx = ctx; | |||
| this.canvasId = canvasId; | |||
| this.chart = null; | |||
| // this._initCanvas(zrender, ctx); | |||
| this._initStyle(ctx); | |||
| this._initEvent(); | |||
| } | |||
| getContext(contextType) { | |||
| if (contextType === '2d') { | |||
| return this.ctx; | |||
| } | |||
| } | |||
| // canvasToTempFilePath(opt) { | |||
| // if (!opt.canvasId) { | |||
| // opt.canvasId = this.canvasId; | |||
| // } | |||
| setChart(chart) { | |||
| this.chart = chart; | |||
| } | |||
| attachEvent () { | |||
| // noop | |||
| } | |||
| detachEvent() { | |||
| // noop | |||
| } | |||
| _initCanvas(zrender, ctx) { | |||
| zrender.util.getContext = function () { | |||
| return ctx; | |||
| }; | |||
| zrender.util.$override('measureText', function (text, font) { | |||
| ctx.font = font || '12px sans-serif'; | |||
| return ctx.measureText(text); | |||
| }); | |||
| } | |||
| _initStyle(ctx) { | |||
| var styles = ['fillStyle', 'strokeStyle', 'globalAlpha', | |||
| 'textAlign', 'textBaseAlign', 'shadow', 'lineWidth', | |||
| 'lineCap', 'lineJoin', 'lineDash', 'miterLimit', 'fontSize']; | |||
| styles.forEach(style => { | |||
| Object.defineProperty(ctx, style, { | |||
| set: value => { | |||
| if (style !== 'fillStyle' && style !== 'strokeStyle' | |||
| || value !== 'none' && value !== null | |||
| ) { | |||
| ctx['set' + style.charAt(0).toUpperCase() + style.slice(1)](value); | |||
| } | |||
| } | |||
| }); | |||
| }); | |||
| ctx.createRadialGradient = () => { | |||
| return ctx.createCircularGradient(arguments); | |||
| }; | |||
| } | |||
| _initEvent() { | |||
| this.event = {}; | |||
| const eventNames = [{ | |||
| wxName: 'touchStart', | |||
| ecName: 'mousedown' | |||
| }, { | |||
| wxName: 'touchMove', | |||
| ecName: 'mousemove' | |||
| }, { | |||
| wxName: 'touchEnd', | |||
| ecName: 'mouseup' | |||
| }, { | |||
| wxName: 'touchEnd', | |||
| ecName: 'click' | |||
| }]; | |||
| eventNames.forEach(name => { | |||
| this.event[name.wxName] = e => { | |||
| const touch = e.touches[0]; | |||
| this.chart._zr.handler.dispatch(name.ecName, { | |||
| zrX: name.wxName === 'tap' ? touch.clientX : touch.x, | |||
| zrY: name.wxName === 'tap' ? touch.clientY : touch.y | |||
| }); | |||
| }; | |||
| }); | |||
| } | |||
| } | |||
| @@ -0,0 +1,47 @@ | |||
| { | |||
| "ext": { | |||
| "attr": { | |||
| "configUrl": "https://btest.malls.iformall.com", | |||
| "datatowerurl": "https://mobile.malls.iformall.com" | |||
| }, | |||
| "name": "富茂券商户端模板", | |||
| "weappId": "tt7af40c49e5cd8d5001", | |||
| "appVersion": "Btest.5.1.0" | |||
| }, | |||
| "debug": false, | |||
| "tabBar": { | |||
| "color": "#9F9F9F", | |||
| "selectedColor": "#52a0fd", | |||
| "backgroundColor": "#fff", | |||
| "list": [ | |||
| { | |||
| "pagePath": "pages/main/main", | |||
| "text": "首页", | |||
| "iconPath": "assets/images/home-n.png", | |||
| "selectedIconPath": "assets/images/home-y.png" | |||
| }, | |||
| { | |||
| "pagePath": "pages/user/user", | |||
| "text": "我的", | |||
| "iconPath": "assets/images/user-n.png", | |||
| "selectedIconPath": "assets/images/user-y.png" | |||
| } | |||
| ] | |||
| }, | |||
| "window": { | |||
| "backgroundTextStyle": "light", | |||
| "navigationBarBackgroundColor": "#52A0FD" | |||
| }, | |||
| "extAppid": "tt7af40c49e5cd8d5001", | |||
| "extEnable": true, | |||
| "permission": { | |||
| "scope.userLocation": { | |||
| "desc": "你的位置信息将用于小程序位置接口的效果展示" | |||
| } | |||
| }, | |||
| "directCommit": false, | |||
| "networkTimeout": { | |||
| "request": 30000, | |||
| "downloadFile": 10000 | |||
| } | |||
| } | |||
| @@ -0,0 +1,74 @@ | |||
| @font-face { | |||
| font-family: "iconfont"; /* Project id 1353693 */ | |||
| src: url('//at.alicdn.com/t/font_1353693_dinubmjfutg.woff2?t=1631098323868') format('woff2'), | |||
| url('//at.alicdn.com/t/font_1353693_dinubmjfutg.woff?t=1631098323868') format('woff'), | |||
| url('//at.alicdn.com/t/font_1353693_dinubmjfutg.ttf?t=1631098323868') format('truetype'); | |||
| } | |||
| .iconfont { | |||
| font-family: "iconfont" !important; | |||
| font-size: 16px; | |||
| font-style: normal; | |||
| -webkit-font-smoothing: antialiased; | |||
| -moz-osx-font-smoothing: grayscale; | |||
| } | |||
| .icon-lingquanzhongxin:before { | |||
| content: "\e8e7"; | |||
| } | |||
| .icon-wuliu:before { | |||
| content: "\e808"; | |||
| } | |||
| .icon-youhuiquan:before { | |||
| content: "\e76d"; | |||
| } | |||
| .icon-zhijiandan-:before { | |||
| content: "\e611"; | |||
| } | |||
| .icon-jiesuan:before { | |||
| content: "\e682"; | |||
| } | |||
| .icon-hexiao:before { | |||
| content: "\e687"; | |||
| } | |||
| .icon-shouyintai:before { | |||
| content: "\e683"; | |||
| } | |||
| .icon-jifen:before { | |||
| content: "\e61c"; | |||
| } | |||
| .icon-icon-riliriqi:before { | |||
| content: "\e807"; | |||
| } | |||
| .icon-shouye1:before { | |||
| content: "\e64e"; | |||
| } | |||
| .icon-shouyintai1:before { | |||
| content: "\e64f"; | |||
| } | |||
| .icon-quan:before { | |||
| content: "\e651"; | |||
| } | |||
| .icon-shoufukuan:before { | |||
| content: "\e647"; | |||
| } | |||
| .icon-jiantou-copy-copy:before { | |||
| content: "\e668"; | |||
| } | |||
| .icon-jiantou-copy-copy-copy:before { | |||
| content: "\e669"; | |||
| } | |||
| @@ -0,0 +1,115 @@ | |||
| // pages/Add/index.js | |||
| const config = require('../../config/config.js') | |||
| const Http = require('../../utils/http.js') | |||
| const HttpBasics = require('../../utils/HttpBasics.js') | |||
| const util = require('../../utils/util.js') | |||
| var app = getApp() | |||
| Page({ | |||
| /** | |||
| * 页面的初始数据 | |||
| */ | |||
| data: { | |||
| paramData:null, | |||
| isAdmin:null, | |||
| userData:null, | |||
| phoneIf:false, | |||
| businessId:'' | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面加载 | |||
| */ | |||
| onLoad: function (options) { | |||
| console.log(options,88888888888888888) | |||
| let phoneIf = options.phone != 'undefined' ? true : false | |||
| options.phone = (options.phone != 'undefined' ? options.phone:'未绑定') | |||
| this.setData({ | |||
| paramData:options, | |||
| phoneIf | |||
| }); | |||
| console.log(options,"options") | |||
| this.getUserInfo() | |||
| }, | |||
| getUserInfo(){ | |||
| let _this=this; | |||
| app.globalData.userInfo().then(res => { | |||
| console.log(res) | |||
| if (res.businessId == 3){ | |||
| _this.setData({ | |||
| businessId:3 | |||
| }) | |||
| } | |||
| _this.setData({ | |||
| userData:res | |||
| }) | |||
| }).catch(err=>{ | |||
| tt.showToast({ | |||
| title: '商户信息获取出错', | |||
| icon: 'none', | |||
| duration: 2000, | |||
| mask: false | |||
| }); | |||
| }) | |||
| }, | |||
| gotoScore(e){ | |||
| // console.log(e.currentTarget.id,6666666666) | |||
| if (e.currentTarget.id == '1') { | |||
| tt.navigateTo({ | |||
| url: `/pages/operation/index?address=${this.data.paramData.address}&id=${this.data.paramData.id}&levelName=${this.data.paramData.levelName}&name=${this.data.paramData.name}&nickName=${this.data.paramData.nickName}&phone=${this.data.paramData.phone}&score=${this.data.paramData.score}&credit=${this.data.paramData.credit}&type=${e.currentTarget.id}&isAdmin=${this.data.userData.is_admin}&merchant_id=${this.data.userData.merchant_id}&businessId=${this.data.businessId}` | |||
| }) | |||
| } else { | |||
| tt.navigateTo({ | |||
| url: `/pages/exchange/index?address=${this.data.paramData.address}&id=${this.data.paramData.id}&levelName=${this.data.paramData.levelName}&name=${this.data.paramData.name}&nickName=${this.data.paramData.nickName}&phone=${this.data.paramData.phone}&score=${this.data.paramData.score}&credit=${this.data.paramData.credit}&type=${e.currentTarget.id}&merchant_id=${this.data.userData.merchant_id}` | |||
| }) | |||
| } | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面初次渲染完成 | |||
| */ | |||
| onReady: function () { | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面显示 | |||
| */ | |||
| onShow: function () { | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面隐藏 | |||
| */ | |||
| onHide: function () { | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面卸载 | |||
| */ | |||
| onUnload: function () { | |||
| }, | |||
| /** | |||
| * 页面相关事件处理函数--监听用户下拉动作 | |||
| */ | |||
| onPullDownRefresh: function () { | |||
| }, | |||
| /** | |||
| * 页面上拉触底事件的处理函数 | |||
| */ | |||
| onReachBottom: function () { | |||
| }, | |||
| /** | |||
| * 用户点击右上角分享 | |||
| */ | |||
| onShareAppMessage: function () { | |||
| } | |||
| }) | |||
| @@ -0,0 +1,4 @@ | |||
| { | |||
| "navigationBarTitleText": "会员积分", | |||
| "navigationBarTextStyle": "white" | |||
| } | |||
| @@ -0,0 +1,28 @@ | |||
| <!--pages/Add/index.wxml--> | |||
| <view> | |||
| <view class='exchange'> | |||
| <image class='img' src='./../../static/images/bannerbg.png' mode="widthFix"></image> | |||
| <view class='exchangeBox'> | |||
| <view class='section'> | |||
| <view> | |||
| <text>会员姓名(昵称):</text> | |||
| <text>{{paramData.name!='undefined'?paramData.name:paramData.nickName!='undefined'?paramData.nickName:''}}</text> | |||
| </view> | |||
| <view> | |||
| <text>会员等级:</text> | |||
| <text>{{paramData.levelName!='undefined'?paramData.levelName:''}}</text> | |||
| </view> | |||
| <view> | |||
| <text>手机号码:</text> | |||
| <text>{{paramData.phone}}</text> | |||
| </view> | |||
| </view> | |||
| <view class='phoneDes' tt:if="{{!phoneIf}}">会员未授权手机号,请用户先去授权手机号!</view> | |||
| <view class='butBox'> | |||
| <button id='1' bindtap='gotoScore' tt:if="{{phoneIf}}" style='{{"width:"+(userData.is_admin==1?"":"690rpx")}}'>新增积分</button> | |||
| <button id='2' bindtap='gotoScore' tt:if="{{phoneIf&&userData.is_admin=='1'}}">消费积分</button> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| @@ -0,0 +1,92 @@ | |||
| /* pages/Add/index.wxss */ | |||
| page{ | |||
| background: #f8f8fa; | |||
| } | |||
| .exchange { | |||
| width: 100%; | |||
| height: 100%; | |||
| background: #f8f8fa; | |||
| } | |||
| .exchangeBox{ | |||
| margin-top: -45rpx; | |||
| } | |||
| .radian{ | |||
| width: 100%; | |||
| height: 100rpx; | |||
| border-radius: 0 0 100rpx 100rpx; | |||
| background-color: #52A0FD; | |||
| } | |||
| .section { | |||
| width: 710rpx; | |||
| /* height: 176rpx; */ | |||
| margin-top: 8%; | |||
| background: #fff; | |||
| display: flex; | |||
| flex-direction: column; | |||
| border: 1px solid #eaeaea; | |||
| border-radius: 18rpx; | |||
| margin: auto; | |||
| } | |||
| .section view { | |||
| position: relative; | |||
| width: 92%; | |||
| height: 88rpx; | |||
| line-height: 88rpx; | |||
| display: flex; | |||
| justify-content: space-between; | |||
| padding: 0 4%; | |||
| /* border-bottom: 1px solid #f5f5f5; */ | |||
| } | |||
| .section view text { | |||
| font-size: 30rpx; | |||
| color: #999999; | |||
| letter-spacing: 1.16rpx; | |||
| } | |||
| .section view text:nth-child(2) { | |||
| font-size: 28rpx; | |||
| color: #000; | |||
| letter-spacing: 1.16rpx; | |||
| text-align: right; | |||
| } | |||
| button{ | |||
| width: 710rpx; | |||
| height: 94rpx; | |||
| margin-top: 88rpx; | |||
| color: #FFF; | |||
| font-size: 36rpx; | |||
| background-color: #52A0FD; | |||
| box-shadow:0px 10px 22px 2px rgba(82,160,253,0.51); | |||
| } | |||
| .img { | |||
| margin-top: -60rpx; | |||
| display: block; | |||
| width: 100%; | |||
| } | |||
| .butBox{ | |||
| display: flex; | |||
| } | |||
| .butBox button{ | |||
| width: 344rpx; | |||
| height: 130rpx; | |||
| line-height: 130rpx; | |||
| border-radius: 30rpx; | |||
| } | |||
| .butBox :nth-child(1){ | |||
| background-color: #52A0FD; | |||
| box-shadow:0px 10px 22px 2px rgba(82,160,253,0.51); | |||
| } | |||
| .butBox :nth-child(2){ | |||
| background-color: #FF6A6B; | |||
| box-shadow:0px 10px 22px 2px rgba(255,106,107,0.51); | |||
| } | |||
| .phoneDes{ | |||
| font-size: 26rpx; | |||
| color: rgb(175, 168, 168); | |||
| text-align: center; | |||
| margin-top: 30rpx; | |||
| } | |||
| @@ -0,0 +1,199 @@ | |||
| // pages/creditOperate/index.js | |||
| const config = require('../../config/config.js') | |||
| const Http = require('../../utils/HttpBasics.js') | |||
| const util = require('../../utils/util.js') | |||
| const app = getApp(); | |||
| Page({ | |||
| /** | |||
| * 页面的初始数据 | |||
| */ | |||
| data: { | |||
| date: util.formatTime(new Date(), 'yyyy-MM-dddd'), //默认起始时间 | |||
| date2: util.formatTime(new Date(), 'yyyy-MM-dddd'), //默认结束时间 | |||
| endDate: util.formatTime(new Date(), 'yyyy-MM-dddd'), | |||
| list: [], | |||
| showNocontent: false, | |||
| todayDate: null, | |||
| pageNum: 1, | |||
| length: 0, | |||
| userInfo:null, | |||
| listData:[], | |||
| loading:false, | |||
| content:'正在加载中', | |||
| pages:null | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面加载 | |||
| */ | |||
| onLoad: function (options) { | |||
| this.getUser() | |||
| }, | |||
| bindDateChange(e) { | |||
| let that = this; | |||
| that.setData({ | |||
| date: e.detail.value, | |||
| }) | |||
| console.log(that.data.date) | |||
| }, | |||
| bindDateChange2(e) { | |||
| let that = this; | |||
| that.setData({ | |||
| date2: e.detail.value, | |||
| }) | |||
| console.log(that.data.date2) | |||
| }, | |||
| search(){ | |||
| this.getList(this.data.pageNum) | |||
| }, | |||
| getUser(){ | |||
| let _this=this; | |||
| app.globalData.userInfo().then(res => { | |||
| this.setData({ | |||
| userInfo: res | |||
| }) | |||
| _this.getList(1); | |||
| console.log(res); | |||
| }) | |||
| }, | |||
| formatData(data){ | |||
| let arr=[]; | |||
| data.map((item,index)=>{ | |||
| let a = {}; | |||
| a.value = [item]; | |||
| a.dateR = item.createDate01; | |||
| let indexSt=0; | |||
| let haveIf=false; | |||
| arr.map((item01,index01)=>{ | |||
| if (item.createDate01 == item01.dateR){ | |||
| indexSt = index01; | |||
| haveIf=true; | |||
| } | |||
| }) | |||
| if (haveIf && (new Date(item.createDate)).valueOf() >= (new Date((this.data.date + ' 00:00:00').replace(/-/g, "/"))).getTime() && (new Date(item.createDate)).valueOf() <= (new Date((this.data.date2 + ' 23:59:59').replace(/-/g, "/"))).getTime()){ | |||
| arr[indexSt].value.push(item) | |||
| } else if ((new Date(item.createDate)).valueOf() >= (new Date((this.data.date + ' 00:00:00').replace(/-/g, "/"))).getTime() && (new Date(item.createDate)).valueOf() <= (new Date((this.data.date2 + ' 23:59:59').replace(/-/g, "/"))).getTime()){ | |||
| arr.push(a) | |||
| } | |||
| }) | |||
| this.setData({ | |||
| list:arr | |||
| }) | |||
| }, | |||
| getList(page){ | |||
| let _this=this; | |||
| Http.get({ | |||
| url: config.api.getCreditList, | |||
| data: { | |||
| pageNum: page, | |||
| pageSize: 10, | |||
| startTime: this.data.date + " 00:00:00", | |||
| endTime: this.data.date2 + " 23:59:59", | |||
| merchantId: _this.data.userInfo.merchant_id | |||
| } | |||
| }) | |||
| .then(res => { | |||
| tt.stopPullDownRefresh(); | |||
| let data=res.data.list; | |||
| let listData = []; | |||
| if(page==1){ | |||
| listData = res.data.list; | |||
| }else{ | |||
| listData = _this.data.listData; | |||
| } | |||
| console.log(data) | |||
| data.map((item, index) => { | |||
| let haveIf = false; | |||
| item.createDate01 = util.formatTime(item.createDate, 'yyyy-MM-dddd') | |||
| listData.map((item02, index02) => { | |||
| if (item02.creditId == item.creditId) { | |||
| haveIf = true; | |||
| } | |||
| }) | |||
| if (!haveIf) { | |||
| listData.push(item) | |||
| } | |||
| }) | |||
| _this.formatData(listData) | |||
| if (res.data.pages <= page) { | |||
| _this.setData({ | |||
| listData, | |||
| pageNum: res.data.pages-1, | |||
| content: '已经加载全部数据!' | |||
| }) | |||
| } else { | |||
| _this.setData({ | |||
| listData, | |||
| loading: false, | |||
| content:'小主,我在玩命加载中...' | |||
| }) | |||
| } | |||
| }) | |||
| .catch(err => { | |||
| tt.stopPullDownRefresh(); | |||
| tt.showToast({ | |||
| title: err.message, | |||
| icon: 'none', | |||
| duration: 2000, | |||
| mask: false | |||
| }); | |||
| }); | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面初次渲染完成 | |||
| */ | |||
| onReady: function () { | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面显示 | |||
| */ | |||
| onShow: function () { | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面隐藏 | |||
| */ | |||
| onHide: function () { | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面卸载 | |||
| */ | |||
| onUnload: function () { | |||
| }, | |||
| /** | |||
| * 刷新 | |||
| */ | |||
| onPullDownRefresh: function (e) { | |||
| let that = this; | |||
| that.setData({ | |||
| pageNum: 1, | |||
| list: [] | |||
| }); | |||
| that.getList(1); | |||
| }, | |||
| onReachBottom: function () { | |||
| var that = this; | |||
| that.data.pageNum++; | |||
| that.setData({ | |||
| pageNum: that.data.pageNum, | |||
| loading: true | |||
| }); | |||
| that.getList(that.data.pageNum); | |||
| }, | |||
| /** | |||
| * 用户点击右上角分享 | |||
| */ | |||
| onShareAppMessage: function () { | |||
| } | |||
| }) | |||
| @@ -0,0 +1,6 @@ | |||
| { | |||
| "navigationBarTitleText": "积分操作记录", | |||
| "enablePullDownRefresh": true, | |||
| "backgroundTextStyle": "dark", | |||
| "navigationBarTextStyle": "white" | |||
| } | |||
| @@ -0,0 +1,48 @@ | |||
| <image class='img' src='./../../static/images/bg.png' mode='widthFix'></image> | |||
| <view class='head'> | |||
| <image src='./../../static/images/reviveimg.png' mode='widthFix'></image> | |||
| <view class='time'> | |||
| <view> | |||
| <text>开始日期</text> | |||
| <picker mode="date" value="{{date}}" start="1970-01-01" end="{{endDate}}" bindchange="bindDateChange"> | |||
| <view class="picker"> | |||
| {{date}} | |||
| </view> | |||
| </picker> | |||
| </view> | |||
| <view> | |||
| <text></text> | |||
| <text>至</text> | |||
| </view> | |||
| <view> | |||
| <text>结束日期</text> | |||
| <picker mode="date" value="{{date2}}" start="1970-01-01" end="{{endDate}}" bindchange="bindDateChange2"> | |||
| <view class="picker"> | |||
| {{date2}} | |||
| </view> | |||
| </picker> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <button class='btn' hover-class='active' bindtap='search'>查询</button> | |||
| <view class="contents"> | |||
| <view tt:for="{{list}}" tt:key="{{index}}"> | |||
| <view class='date-t'>{{item.dateR}}</view> | |||
| <view class='content clearfix' tt:for="{{item.value}}" tt:for-item="item01" tt:key="{{index01}}"> | |||
| <view class='le'> | |||
| <text>{{item01.name}}</text> | |||
| <text>{{item01.createDate01}}</text> | |||
| </view> | |||
| <view class='fr'> | |||
| <text>{{item01.creditNum>0?('+'+item01.creditNum):(item01.creditNum)}}</text> | |||
| <text>{{'操作人:'+item01.operator}}</text> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <view class="loading" tt:if="{{loading}}"> | |||
| {{content}} | |||
| </view> | |||
| <view class='nocontent' tt:if="{{showNocontent}}"> | |||
| 暂无数据 | |||
| </view> | |||
| @@ -0,0 +1,235 @@ | |||
| page { | |||
| background: #f6f6f6; | |||
| } | |||
| .head { | |||
| height: 227rpx; | |||
| width: 681rpx; | |||
| margin: -45rpx auto 0; | |||
| position: relative; | |||
| } | |||
| picker { | |||
| width: 180rpx; | |||
| text-align:center; | |||
| height: 45rpx; | |||
| font-size: 30rpx; | |||
| overflow: hidden; | |||
| color: rgba(85, 85, 85, 1); | |||
| margin: 0 auto; | |||
| } | |||
| .head image { | |||
| position: absolute; | |||
| width: 100%; | |||
| height: 100% !important; | |||
| left: 0; | |||
| right: 0; | |||
| top: 0; | |||
| bottom: 0; | |||
| z-index: 1; | |||
| } | |||
| .time { | |||
| position: relative; | |||
| display: flex; | |||
| flex: 2.5; | |||
| text-align: center; | |||
| z-index: 10; | |||
| align-items: center; | |||
| } | |||
| .time >view:nth-of-type(1), .time >view:nth-of-type(3) { | |||
| flex: 1; | |||
| } | |||
| .time >view:nth-of-type(2) { | |||
| flex: 0.5; | |||
| } | |||
| .time >view text { | |||
| display: block; | |||
| } | |||
| .time >view text:nth-of-type(2n+1) { | |||
| margin-top: 69rpx; | |||
| } | |||
| .time >view text:nth-of-type(2n+1) { | |||
| color: #999; | |||
| font-size: 26rpx; | |||
| margin-bottom: 24rpx; | |||
| } | |||
| .time >view text:nth-of-type(2n) { | |||
| color: rgba(153, 153, 153, 1); | |||
| font-size: 32rpx; | |||
| margin-top: 34rpx; | |||
| } | |||
| .btn { | |||
| background: #51a0fc; | |||
| height: 76rpx; | |||
| line-height: 76rpx; | |||
| display: block; | |||
| width: 681rpx; | |||
| margin: 0 auto; | |||
| border-top-left-radius: 0 !important; | |||
| border-top-right-radius: 0 !important; | |||
| border-bottom-left-radius: 16rpx; | |||
| border-bottom-right-radius: 16rpx; | |||
| color: #fff; | |||
| font-size: 30rpx; | |||
| box-shadow: 0 9rpx 16rpx 0 rgba(81, 160, 252, 0.57); | |||
| } | |||
| button::after { | |||
| border: none; | |||
| } | |||
| .active { | |||
| opacity: 0.6; | |||
| } | |||
| .acount { | |||
| width: 630rpx; | |||
| display: flex; | |||
| margin: 30rpx auto 0; | |||
| padding: 35rpx 0; | |||
| flex: 2; | |||
| text-align: center; | |||
| border-top: 1px solid #e3f0ff; | |||
| } | |||
| .acount>view { | |||
| flex: 1; | |||
| } | |||
| .acount>view text { | |||
| display: block; | |||
| color: #999; | |||
| font-size: 26rpx; | |||
| } | |||
| .acount>view text:nth-of-type(2n) { | |||
| color: #333; | |||
| font-size: 40rpx; | |||
| margin-top: 20rpx; | |||
| } | |||
| .content { | |||
| position: relative; | |||
| padding: 0 35rpx; | |||
| height: 145rpx; | |||
| background: #fff; | |||
| border-bottom: 1px solid #eaeaea; | |||
| } | |||
| .content>view:nth-of-type(2n+1) text { | |||
| display: block; | |||
| } | |||
| .content>view:nth-of-type(2n+1) text:nth-of-type(1) { | |||
| margin-top: 27rpx; | |||
| } | |||
| .content>view:nth-of-type(2n+1) text:nth-of-type(2) { | |||
| margin-top: 10rpx; | |||
| font-size: 26rpx; | |||
| font-family: PingFang-SC-Bold; | |||
| color: rgba(153, 153, 153, 1); | |||
| } | |||
| .content>view:nth-of-type(2n+1) { | |||
| float: left; | |||
| width: 40%; | |||
| } | |||
| .content>view:nth-of-type(2n) { | |||
| width: 55%; | |||
| float: right; | |||
| text-align: right; | |||
| } | |||
| .nocontent { | |||
| text-align: center; | |||
| font-size: 30rpx; | |||
| padding: 30rpx 0; | |||
| } | |||
| .contents { | |||
| margin-top: 20rpx; | |||
| } | |||
| .content .fr text:nth-of-type(1) { | |||
| margin-top: 36rpx; | |||
| } | |||
| .content .fr text:nth-of-type(1), .content .fr text:nth-of-type(3) { | |||
| color:rgba(51,51,51,1); | |||
| display: block; | |||
| font-size: 28rpx; | |||
| } | |||
| .content .fr text:nth-of-type(2) { | |||
| display: block; | |||
| color:rgba(153,153,153,1); | |||
| font-size: 26rpx; | |||
| } | |||
| .img { | |||
| display: block; | |||
| width: 100%; | |||
| } | |||
| .title { | |||
| display: block; | |||
| text-align: center; | |||
| color: rgba(153, 153, 153, 1); | |||
| font-size: 26rpx; | |||
| } | |||
| .total { | |||
| display: block; | |||
| text-align: center; | |||
| font-size: 70rpx; | |||
| margin: 36rpx 0; | |||
| font-family: PingFang-SC-Bold; | |||
| font-weight: bold; | |||
| color: rgba(51, 51, 51, 1); | |||
| } | |||
| .acounts { | |||
| width: 680rpx; | |||
| margin: 48rpx auto 48rpx; | |||
| border: 1px solid #51a0fc; | |||
| border-radius: 16rpx; | |||
| padding: 40rpx 0 0; | |||
| background: #fff; | |||
| } | |||
| .daishou{ | |||
| width: 133rpx; | |||
| height: 79rpx; | |||
| position: absolute; | |||
| top: 0; | |||
| bottom: 0; | |||
| right:264rpx; | |||
| margin: auto; | |||
| } | |||
| .date-t{ | |||
| font-size:26rpx; | |||
| font-family:PingFang-SC-Regular; | |||
| font-weight:400; | |||
| color:rgba(153,153,153,1); | |||
| line-height:44rpx; | |||
| padding:0 35rpx; | |||
| margin: 10rpx 0; | |||
| } | |||
| .loading{ | |||
| color:rgba(51,51,51,1); | |||
| font-size:28rpx; | |||
| line-height: 40rpx; | |||
| margin:30rpx 0; | |||
| text-align: center; | |||
| } | |||
| @@ -0,0 +1,73 @@ | |||
| const config = require('../../config/config.js') | |||
| const Http = require('../../utils/http.js') | |||
| const HttpBasics = require('../../utils/HttpBasics.js') | |||
| const util = require('../../utils/util.js') | |||
| import * as echarts from '../../ec-canvas/echarts'; | |||
| var app = getApp() | |||
| Page({ | |||
| /** | |||
| * 页面的初始数据 | |||
| */ | |||
| data: { | |||
| }, | |||
| gotoSaoyiSao: function () { | |||
| tt.scanCode({ | |||
| success: function (val) { | |||
| console.log(val.result); | |||
| if (util.isJSON(val.result)) { | |||
| let value = JSON.parse(val.result); | |||
| if (value.END == 'C' && value.TYPE == 'memberCode' && value.ID.length >= 18) { | |||
| Http.postRequest(config.api.memScan, app.globalData.token, '加载中', { | |||
| memCode: value.ID | |||
| }, (res) => { | |||
| console.log(res, 9999999999) | |||
| if (res.code == 200) { | |||
| if (res.data.discountRate != 100) { | |||
| var discountRate = res.data.discountRate / 10; | |||
| } else { | |||
| var discountRate = "暂无折扣"; | |||
| } | |||
| tt.navigateTo({ | |||
| url: `/pages/Add/index?address=${res.data.address}&id=${res.data.id}&levelName=${res.data.levelName}&nickName=${res.data.nickName}&name=${res.data.name}&phone=${res.data.phone}&score=${res.data.score}&discountRate=${discountRate}&credit=${res.data.credit}` | |||
| }) | |||
| } else { | |||
| tt.showModal({ | |||
| title: "抱歉", | |||
| content: res.message, | |||
| showCancel: false | |||
| }) | |||
| } | |||
| }) | |||
| } else { | |||
| tt.showToast({ | |||
| title: '请扫描正确的二维码', | |||
| icon: 'none', | |||
| duration: 1300 | |||
| }) | |||
| } | |||
| } else { | |||
| tt.showToast({ | |||
| title: '请扫描正确的二维码', | |||
| icon: 'none', | |||
| duration: 1300 | |||
| }) | |||
| } | |||
| }, | |||
| fail: function () { | |||
| tt.showToast({ | |||
| title: '请扫描正确的二维码', | |||
| icon: 'none', | |||
| duration: 1300 | |||
| }) | |||
| } | |||
| }) | |||
| }, | |||
| // 跳转到手动核销 | |||
| aoto: function () { | |||
| tt.navigateTo({ | |||
| url: '/pages/memberPhone/index?a=1', | |||
| }) | |||
| }, | |||
| }) | |||
| @@ -0,0 +1,4 @@ | |||
| { | |||
| "navigationBarTitleText": "积分操作形式", | |||
| "navigationBarTextStyle": "white" | |||
| } | |||
| @@ -0,0 +1,6 @@ | |||
| <view class='content'> | |||
| <image src='./../../static/images/scan.png' mode='widthFix'></image> | |||
| <button class='btn1' hover-class='active' bindtap='gotoSaoyiSao'>识别会员码</button> | |||
| <button class='btn2' hover-class='active' bindtap='aoto'>手机号查询</button> | |||
| </view> | |||
| @@ -0,0 +1,41 @@ | |||
| /* pages/scan/scan.wxss */ | |||
| page{ | |||
| background: #52A0FD; | |||
| } | |||
| .content{ | |||
| width: 588rpx; | |||
| margin: 0 auto; | |||
| background: #fff; | |||
| border-radius:10rpx; | |||
| padding-bottom: 100rpx; | |||
| padding: 0 46rpx 46rpx; | |||
| } | |||
| .content image{ | |||
| width: 603rpx; | |||
| margin: 48rpx auto 0; | |||
| } | |||
| button::after{ border: none; } | |||
| .btn1{ | |||
| width: 550rpx; | |||
| margin: 50rpx auto 0; | |||
| background:#52A0FD; | |||
| border:1px solid #52A0FD; | |||
| border-radius:45rpx; | |||
| color: #fff; | |||
| font-weight:400; | |||
| font-size:36rpx; | |||
| box-shadow: 0 6px 20px 0 rgba(183, 216, 254, 1); | |||
| } | |||
| .btn2{ | |||
| width: 550rpx; | |||
| margin: 50rpx auto 0; | |||
| background:rgba(255,255,255,1); | |||
| border:1px solid rgba(180,212,249,1); | |||
| border-radius:45rpx; | |||
| font-weight:400; | |||
| font-size:36rpx; | |||
| color:rgba(81,160,252,1); | |||
| } | |||
| .active{ | |||
| opacity: .6; | |||
| } | |||
| @@ -0,0 +1,55 @@ | |||
| const config = require('../../config/config.js') | |||
| const Http = require('../../utils/http.js') | |||
| const HttpBasics = require('../../utils/HttpBasics.js') | |||
| const util = require('../../utils/util.js') | |||
| var app = getApp() | |||
| Page({ | |||
| /** | |||
| * 页面的初始数据 | |||
| */ | |||
| data: { | |||
| showDetailIf: true, | |||
| creditNum:0, | |||
| type:1, | |||
| creditAmount:0, | |||
| titleH:'', | |||
| title:[] | |||
| }, | |||
| goOn(){ | |||
| tt.navigateBack({ | |||
| delta: 1 | |||
| }) | |||
| }, | |||
| goBack(){ | |||
| tt.reLaunch({ | |||
| url: '/pages/main/main', | |||
| }) | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面显示 | |||
| */ | |||
| onLoad: function (options) { | |||
| console.log(options) | |||
| if (options.titleH){ | |||
| this.setData({ | |||
| type: options.type, | |||
| titleH: options.titleH, | |||
| title: options.titleH.split(',') | |||
| }) | |||
| tt.setNavigationBarTitle({ | |||
| title: '会员赠券' | |||
| }) | |||
| }else{ | |||
| this.setData({ | |||
| creditNum: options.creditNum, | |||
| type: options.type, | |||
| creditAmount: options.creditAmount, | |||
| }) | |||
| tt.setNavigationBarTitle({ | |||
| title: '会员积分' | |||
| }) | |||
| } | |||
| console.log(this.data.titleH, this.data.title) | |||
| }, | |||
| }) | |||
| @@ -0,0 +1,6 @@ | |||
| { | |||
| "backgroundTextStyle": "light", | |||
| "navigationBarTitleText": "会员赠券", | |||
| "navigationBarTextStyle": "white", | |||
| "navigationBarBackgroundColor": "#52A0FD" | |||
| } | |||
| @@ -0,0 +1,24 @@ | |||
| <!--pages/editSuccess/index.wxml--> | |||
| <view class='content'> | |||
| <view class='cBox'> | |||
| <image class='tick' src='../../static/images/tick.png' mode='widthFix'></image> | |||
| <text class='txt1'>操作成功</text> | |||
| </view> | |||
| <view tt:if="{{type==1}}"> | |||
| <text class='txt2'>本次积分:<text class='txt3'>+{{creditNum}}</text></text> | |||
| </view> | |||
| <view tt:if="{{type==2}}"> | |||
| <text class='txt4'>消费积分:<text class='txt3'>-{{creditNum}}</text></text> | |||
| <text class='txt5'>剩余积分:<text class='txt6'>{{creditAmount}}</text></text> | |||
| </view> | |||
| <view tt:if="{{type==3}}"> | |||
| <view class='title' tt:for="{{title}}" tt:key="{{index}}"> | |||
| <view class='txt3'>{{item}}赠送成功</view> | |||
| </view> | |||
| <!-- <text class='txt7' >赠送成功</text> --> | |||
| </view> | |||
| </view> | |||
| <view class='bBox'> | |||
| <button class='goOn' bindtap='goOn'>继续</button> | |||
| <button class='goBack' bindtap='goBack'>返回首页</button> | |||
| </view> | |||
| @@ -0,0 +1,110 @@ | |||
| page { | |||
| background: #f6f6f8; | |||
| height: 100%; | |||
| } | |||
| .content { | |||
| width: 630rpx; | |||
| border-radius: 20rpx; | |||
| background: #fff; | |||
| margin: 60rpx auto 68rpx; | |||
| padding-bottom: 67rpx; | |||
| } | |||
| .cBox { | |||
| display: flex; | |||
| } | |||
| .image { | |||
| width: 70rpx; | |||
| height: 70rpx; | |||
| float: left; | |||
| } | |||
| .tick { | |||
| width: 70rpx; | |||
| height: 70rpx; | |||
| margin-left: 189rpx; | |||
| margin-top: 73rpx; | |||
| margin-bottom: 21rpx; | |||
| } | |||
| .txt1 { | |||
| display: block; | |||
| font-size: 40rpx; | |||
| font-family: PingFang-SC-Bold; | |||
| font-weight: Bold; | |||
| margin-left: 26rpx; | |||
| margin-top: 85rpx; | |||
| } | |||
| .txt2 { | |||
| display: block; | |||
| width: 100%; | |||
| margin-left: 208rpx; | |||
| margin-bottom: 85rpx; | |||
| color: #333333; | |||
| font-size: 28rpx; | |||
| } | |||
| .txt3{ | |||
| color: #000; | |||
| font-weight: Regular; | |||
| } | |||
| .txt4 { | |||
| display: block; | |||
| width: 100%; | |||
| margin-left: 208rpx; | |||
| color: #333333; | |||
| font-size: 28rpx; | |||
| } | |||
| .txt5 { | |||
| display: block; | |||
| width: 100%; | |||
| margin-left: 208rpx; | |||
| margin-bottom: 85rpx; | |||
| color: #333333; | |||
| font-size: 28rpx; | |||
| } | |||
| .bBox { | |||
| display: flex; | |||
| } | |||
| .goOn { | |||
| display: block; | |||
| width: 300rpx; | |||
| height: 90rpx; | |||
| line-height: 90rpx; | |||
| margin: 15rpx auto 0; | |||
| font-size: 32rpx; | |||
| color: #fff; | |||
| text-align: center; | |||
| background: rgba(81, 160, 252, 1); | |||
| border-radius: 100rpx; | |||
| margin-left: 60rpx; | |||
| } | |||
| .goBack { | |||
| display: block; | |||
| width: 300rpx; | |||
| height: 90rpx; | |||
| line-height: 90rpx; | |||
| margin: 15rpx auto 0; | |||
| font-size: 32rpx; | |||
| color: #333; | |||
| text-align: center; | |||
| background: #fff; | |||
| border-radius: 45rpx; | |||
| border: 1rpx solid #d2d2d2; | |||
| margin-right: 60rpx; | |||
| } | |||
| .title{ | |||
| margin: 0 auto; | |||
| text-align: center; | |||
| display: block; | |||
| color: #333333; | |||
| font-size: 28rpx; | |||
| } | |||
| @@ -0,0 +1,22 @@ | |||
| // pages/index/solution/fail/fail.js | |||
| Page({ | |||
| /** | |||
| * 页面的初始数据 | |||
| */ | |||
| data: { | |||
| errTitle:"暂无结果" | |||
| }, | |||
| reBack(){ | |||
| tt.switchTab({ | |||
| url: '/pages/main/main', | |||
| }) | |||
| }, | |||
| onLoad(options) { | |||
| if (options.errTitle) { | |||
| this.setData({ | |||
| errTitle: options.errTitle | |||
| }) | |||
| } | |||
| }, | |||
| }) | |||
| @@ -0,0 +1,6 @@ | |||
| { | |||
| "backgroundTextStyle": "light", | |||
| "navigationBarTitleText": "查询", | |||
| "navigationBarTextStyle": "white", | |||
| "navigationBarBackgroundColor": "#52A0FD" | |||
| } | |||
| @@ -0,0 +1,9 @@ | |||
| <view class='success'> | |||
| <view class='success_logo'> | |||
| <icon class='iconfont icon-cuo'></icon> | |||
| </view> | |||
| <view class='info'> | |||
| <text>{{errTitle}}</text> | |||
| </view> | |||
| <button hover-class='active' bindtap='reBack' class='reBack'>返回首页</button> | |||
| </view> | |||
| @@ -0,0 +1,72 @@ | |||
| /* pages/index/solution/success/success.wxss */ | |||
| @font-face {font-family: "iconfont"; | |||
| src: url('iconfont.eot?t=1534918788675'); /* IE9*/ | |||
| src: url('iconfont.eot?t=1534918788675#iefix') format('embedded-opentype'), /* IE6-IE8 */ | |||
| url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAQMAAsAAAAABmAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8eUf1Y21hcAAAAYAAAABKAAABcOcrtbNnbHlmAAABzAAAAGEAAABsGZubU2hlYWQAAAIwAAAAKwAAADYSZIcFaGhlYQAAAlwAAAAcAAAAJAfeA4NobXR4AAACeAAAAAgAAAAICAAAAGxvY2EAAAKAAAAABgAAAAYANgAAbWF4cAAAAogAAAAeAAAAIAENAChuYW1lAAACqAAAAUUAAAJtPlT+fXBvc3QAAAPwAAAAHAAAAC1khnAFeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeMT9jZm7438AQw9zA0AAUZgTJAQDdnQvpeJztkLENgEAMA89KoECMQEXNLFTsX7LGf97AFlg6Sz6lCjABURxFgi7EyFlW9sFin+y+yeHvaO3r2ulGM39W9/Yu/+oBdTBACXUAAHicY2BkAALmBmYGBmkGBlVORjMTNSV2TkY1JTYRcU5GNhExI3NORjEjMxPmkn/HGK14JBR5/h37d4xXQYKH0erfMR4JBV5GK6C4ooQ7iAaJQ9Qp8ILUAcWh6hQZALfsFpMAAAB4nGNgZGBgAOKvzEtux/PbfGXgZmEAgeuLFVuQaRYGZhDFwcAEogAbEAh3AHicY2BkYGBu+N/AEMPCAAJAkpEBFTABAEcIAmsEAAAABAAAAAAAAAAANgAAeJxjYGRgYGBikGEA0SAWAwMXEDIw/AfzGQALUwE2AAB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxjYGKAAC4G7ICJkYmRmYE5uTSfgQEAB2cBYA==') format('woff'), | |||
| url('iconfont.ttf?t=1534918788675') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ | |||
| url('iconfont.svg?t=1534918788675#iconfont') format('svg'); /* iOS 4.1- */ | |||
| } | |||
| .iconfont { | |||
| font-family:"iconfont" !important; | |||
| font-size:16px; | |||
| font-style:normal; | |||
| -webkit-font-smoothing: antialiased; | |||
| -moz-osx-font-smoothing: grayscale; | |||
| } | |||
| .icon-cuo:before { content: "\e603"; } | |||
| .success { | |||
| width: 100%; | |||
| height: 100%; | |||
| position: absolute; | |||
| } | |||
| .success_logo { | |||
| width: 150rpx; | |||
| height: 150rpx; | |||
| margin: 0 auto; | |||
| display: flex; | |||
| flex-direction: column; | |||
| margin-top: 10%; | |||
| } | |||
| .success_logo icon { | |||
| width: 150rpx; | |||
| height: 150rpx; | |||
| background: #ccc; | |||
| border-radius: 50%; | |||
| color: #fff; | |||
| font-size: 30px; | |||
| text-align: center; | |||
| line-height: 150rpx; | |||
| } | |||
| .info { | |||
| width: 100%; | |||
| display: flex; | |||
| flex-direction: column; | |||
| } | |||
| .info text { | |||
| font-size: 36rpx; | |||
| text-align: center; | |||
| padding-top: 3%; | |||
| color:#999; | |||
| } | |||
| .reBack { | |||
| color: #fff; | |||
| width: 670rpx; | |||
| background: #52A0FD; | |||
| position: fixed; | |||
| bottom: 40rpx; | |||
| left: 0; | |||
| right: 0; | |||
| margin: auto; | |||
| } | |||
| .active{ | |||
| opacity: .6; | |||
| } | |||
| @@ -0,0 +1,167 @@ | |||
| // pages/operation/index.js | |||
| const config = require('../../config/config.js') | |||
| const Http = require('../../utils/HttpBasics.js') | |||
| const util = require('../../utils/util.js') | |||
| const app = getApp(); | |||
| Page({ | |||
| /** | |||
| * 页面的初始数据 | |||
| */ | |||
| data: { | |||
| showDetailIf: true, | |||
| type: null, | |||
| paramData: '', | |||
| array: ['美国', '中国', '巴西', '日本'], | |||
| merchentList: [], | |||
| spendStr: null, | |||
| creditNum: 0, | |||
| submitAble: true, | |||
| thoroughfare:'', | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面加载 | |||
| */ | |||
| onLoad: function (options) { | |||
| this.setData({ | |||
| type: options.type, | |||
| paramData: options | |||
| }) | |||
| this.getMerchent(); | |||
| }, | |||
| /** | |||
| * 保存积分操作数据 | |||
| */ | |||
| submitForm() { | |||
| let _this = this; | |||
| const reg = /^[1-9]\d*$/; | |||
| if (!reg.test(_this.data.creditNum) || Number(_this.data.creditNum) > 9999999 || Number(_this.data.creditNum) <1) { | |||
| tt.showToast({ | |||
| title: '消费金额限制1~9999999的正整数!', | |||
| icon: 'none', | |||
| duration: 2000, | |||
| mask: false | |||
| }); | |||
| return; | |||
| } | |||
| _this.setData({ | |||
| submitAble: false | |||
| }) | |||
| Http.post({ | |||
| url: config.api.addCredit, | |||
| data: { | |||
| creditNum: _this.data.creditNum, | |||
| creditType: 12,//消费积分 | |||
| cuserId: _this.data.paramData.id, | |||
| operatorType: 3, | |||
| merchantId: _this.data.paramData.merchant_id, | |||
| changePurpose: _this.data.thoroughfare | |||
| } | |||
| }) | |||
| .then(res => { | |||
| _this.setData({ | |||
| merchentList: res.data, | |||
| submitAble: true | |||
| }) | |||
| tt.showToast({ | |||
| title: '保存成功!', | |||
| icon: 'none', | |||
| duration: 2000, | |||
| mask: false | |||
| }); | |||
| tt.navigateTo({ | |||
| url: '/pages/editSuccess/index?type=2&creditNum=' + _this.data.creditNum + '&creditAmount=' + res.data.creditAmount, | |||
| }) | |||
| }) | |||
| .catch(err => { | |||
| _this.setData({ | |||
| submitAble: true | |||
| }) | |||
| tt.showToast({ | |||
| title: err.message, | |||
| icon: 'none', | |||
| duration: 2000, | |||
| mask: false | |||
| }); | |||
| }); | |||
| }, | |||
| getPrice(e) { | |||
| this.setData({ | |||
| creditNum: e.detail.value | |||
| }) | |||
| }, | |||
| getThoroughfare(e){ | |||
| this.setData({ | |||
| thoroughfare: e.detail.value | |||
| }) | |||
| }, | |||
| getMerchent() { | |||
| let _this = this; | |||
| Http.get({ | |||
| url: config.api.getMerchentList | |||
| }) | |||
| .then(res => { | |||
| _this.setData({ | |||
| merchentList: res.data | |||
| }) | |||
| }) | |||
| .catch(err => { | |||
| tt.showToast({ | |||
| title: err.message, | |||
| icon: 'none', | |||
| duration: 2000, | |||
| mask: false | |||
| }); | |||
| }); | |||
| }, | |||
| bindPickerChange(e) { | |||
| console.log('picker发送选择改变,携带值为', e.detail.value) | |||
| this.setData({ | |||
| index: e.detail.value | |||
| }) | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面初次渲染完成 | |||
| */ | |||
| onReady: function () { | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面显示 | |||
| */ | |||
| onShow: function () { | |||
| this.setData({ | |||
| submitAble:true | |||
| }) | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面隐藏 | |||
| */ | |||
| onHide: function () { | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面卸载 | |||
| */ | |||
| onUnload: function () { | |||
| }, | |||
| /** | |||
| * 页面相关事件处理函数--监听用户下拉动作 | |||
| */ | |||
| onPullDownRefresh: function () { | |||
| }, | |||
| /** | |||
| * 页面上拉触底事件的处理函数 | |||
| */ | |||
| onReachBottom: function () { | |||
| } | |||
| }) | |||
| @@ -0,0 +1,6 @@ | |||
| { | |||
| "backgroundTextStyle": "light", | |||
| "navigationBarTitleText": "会员积分", | |||
| "navigationBarTextStyle": "white", | |||
| "navigationBarBackgroundColor": "#52A0FD" | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| <!--pages/exchange/index.wxml--> | |||
| <view> | |||
| <view class='exchange'> | |||
| <image class='img' src='./../../static/images/bannerbg.png' mode="widthFix"></image> | |||
| <view class='exchangeBox'> | |||
| <view class='section'> | |||
| <view> | |||
| <text>会员姓名(昵称):</text> | |||
| <text>{{paramData.name!='undefined'?paramData.name:paramData.nickName!='undefined'?paramData.nickName:''}}</text> | |||
| </view> | |||
| <view> | |||
| <text>会员等级:</text> | |||
| <text>{{paramData.levelName}}</text> | |||
| </view> | |||
| <view> | |||
| <text>手机号码:</text> | |||
| <text>{{paramData.phone}}</text> | |||
| </view> | |||
| </view> | |||
| <view > | |||
| <view class='footer' bindtap='toDetail'> | |||
| <text>消费积分</text> | |||
| <input placeholder='请输入' type='number' bindinput="getPrice"></input> | |||
| </view> | |||
| <view class='footer footerYt' bindtap='toDetail'> | |||
| <text>消费用途</text> | |||
| <input placeholder='请输入' bindinput="getThoroughfare"></input> | |||
| </view> | |||
| <button bindtap='{{submitAble?"submitForm":""}}'>提交</button> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| @@ -0,0 +1,99 @@ | |||
| /* pages/exchange/index.wxss */ | |||
| .exchange { | |||
| width: 100%; | |||
| height: 100%; | |||
| background: #f8f8fa; | |||
| } | |||
| .exchangeBox{ | |||
| margin-top: -45rpx; | |||
| } | |||
| .radian{ | |||
| width: 100%; | |||
| height: 100rpx; | |||
| border-radius: 0 0 100rpx 100rpx; | |||
| background-color: #52A0FD; | |||
| } | |||
| .footer { | |||
| width: 710rpx; | |||
| height: 126rpx; | |||
| line-height: 126rpx; | |||
| display: flex; | |||
| background: #fff; | |||
| border-radius: 20rpx; | |||
| margin: 100rpx auto 0; | |||
| box-shadow: 0 6px 20px 0 rgba(0, 0, 0, 0.15); | |||
| } | |||
| .footerYt{ | |||
| width: 710rpx; | |||
| height: 126rpx; | |||
| line-height: 126rpx; | |||
| display: flex; | |||
| background: #fff; | |||
| border-radius: 20rpx; | |||
| margin: 30rpx auto 0; | |||
| box-shadow: 0 6px 20px 0 rgba(0, 0, 0, 0.15); | |||
| } | |||
| .footer text { | |||
| margin-left: 31rpx; | |||
| font-size: 30rpx; | |||
| } | |||
| .footer input{ | |||
| width: 460rpx; | |||
| margin-left: 40rpx; | |||
| height: 126rpx; | |||
| line-height: 126rpx; | |||
| font-size: 30rpx; | |||
| text-align: right; | |||
| } | |||
| .section { | |||
| width: 710rpx; | |||
| /* height: 176rpx; */ | |||
| margin-top: 8%; | |||
| background: #fff; | |||
| display: flex; | |||
| flex-direction: column; | |||
| border: 1px solid #eaeaea; | |||
| border-radius: 18rpx; | |||
| margin: auto; | |||
| } | |||
| .section view { | |||
| position: relative; | |||
| width: 92%; | |||
| height: 88rpx; | |||
| line-height: 88rpx; | |||
| display: flex; | |||
| justify-content: space-between; | |||
| padding: 0 4%; | |||
| /* border-bottom: 1px solid #f5f5f5; */ | |||
| } | |||
| .section view text { | |||
| font-size: 30rpx; | |||
| color: #999999; | |||
| letter-spacing: 1.16rpx; | |||
| } | |||
| .section view text:nth-child(2) { | |||
| font-size: 28rpx; | |||
| color: #000; | |||
| letter-spacing: 1.16rpx; | |||
| text-align: right; | |||
| } | |||
| button{ | |||
| width: 710rpx; | |||
| height: 94rpx; | |||
| margin-top: 88rpx; | |||
| color: #FFF; | |||
| font-size: 36rpx; | |||
| background-color: #52A0FD; | |||
| box-shadow:0px 10px 22px 2px rgba(82,160,253,0.51); | |||
| } | |||
| .img { | |||
| margin-top: -60rpx; | |||
| display: block; | |||
| width: 100%; | |||
| } | |||
| @@ -0,0 +1,163 @@ | |||
| const config = require('../../config/config.js') | |||
| const Common = require('../../common/common.js') | |||
| const app = getApp() | |||
| var interval = null //倒计时函数 | |||
| Page({ | |||
| data: { | |||
| phone: '', | |||
| yzm: '', | |||
| flag: true, | |||
| retry: false, | |||
| time: 60, | |||
| phones: "", | |||
| date: '请选择日期', | |||
| fun_id: 2, | |||
| time: '获取验证码', //倒计时 | |||
| currentTime: 61, | |||
| disabled:false, | |||
| setInter:'' | |||
| }, | |||
| getCode: function (options) { | |||
| var that = this; | |||
| var currentTime = that.data.currentTime | |||
| that.data.setInter = setInterval(function () { | |||
| currentTime--; | |||
| that.setData({ | |||
| time: currentTime + '秒' | |||
| }) | |||
| if (currentTime <= 0) { | |||
| clearInterval(that.data.setInter) | |||
| that.setData({ | |||
| time: '获取验证码', | |||
| currentTime: 61, | |||
| disabled: false | |||
| }) | |||
| } | |||
| console.log(that.data.time) | |||
| }, 1000) | |||
| }, | |||
| onHide:function(){ | |||
| let that = this; | |||
| clearInterval(that.data.setInter); | |||
| that.setData({ | |||
| time: '获取验证码', | |||
| currentTime: 61, | |||
| disabled: false | |||
| }) | |||
| }, | |||
| onUnload:function(){ | |||
| let that = this; | |||
| clearInterval(that.data.setInter) | |||
| that.setData({ | |||
| time: '获取验证码', | |||
| currentTime: 61, | |||
| disabled: false | |||
| }) | |||
| }, | |||
| onLoad:function(options){ | |||
| console.log(options); | |||
| if(tt.getStorageSync("phone")){ | |||
| this.setData({ | |||
| phone: tt.getStorageSync("phone"), | |||
| }) | |||
| } | |||
| if(options.flags=='reset'){ | |||
| tt.setNavigationBarTitle({ | |||
| title: '修改密码' | |||
| }) | |||
| this.setData({ | |||
| flags: options.flags | |||
| }) | |||
| }else{ | |||
| tt.setNavigationBarTitle({ | |||
| title: '忘记密码' | |||
| }) | |||
| } | |||
| }, | |||
| onShow: function () { | |||
| let that = this; | |||
| that.setData({ | |||
| phones: tt.getStorageSync("phone"), | |||
| disabled:false | |||
| }); | |||
| console.log(that.data.phones) | |||
| }, | |||
| getYZM(e) { | |||
| console.log(e); | |||
| if (e.detail.value.phone) { | |||
| this.setData({ | |||
| phone: e.detail.value.phone, | |||
| yzm: e.detail.value.yzm | |||
| }) | |||
| }else{ | |||
| this.setData({ | |||
| phone: tt.getStorageSync("phone"), | |||
| yzm: e.detail.value.yzm | |||
| }) | |||
| } | |||
| }, | |||
| next() { | |||
| setTimeout(() => { | |||
| console.log(this.data) | |||
| Common.hasValidationCode(this.data.phone, this.data.yzm) | |||
| .then(res => { | |||
| console.log(res) | |||
| setTimeout(() => { | |||
| console.log(res) | |||
| if (res.code == 200) { | |||
| tt.navigateTo({ | |||
| url: `/pages/setpwd/setpwd?phone=${this.data.phone}&code=${this.data.yzm}` | |||
| }) | |||
| } else { | |||
| tt.showToast({ | |||
| title: "验证码错误", | |||
| icon: "none", | |||
| duration: 2000 | |||
| }) | |||
| } | |||
| }, 500) | |||
| }) | |||
| }, 1000) | |||
| }, | |||
| send(e) { | |||
| console.log(this.data.phone); | |||
| var phoneReg = /(^1[3|4|5|7|8]\d{9}$)|(^09\d{8}$)/; | |||
| let that = this; | |||
| // setTimeout(() => { | |||
| let tel = that.data.phone; | |||
| console.log(tel) | |||
| if (phoneReg.test(tel)) { | |||
| Common.sendValidationCode(tel) | |||
| .then(res => { | |||
| console.log(res); | |||
| if (res.code == 200) { | |||
| that.getCode(); | |||
| that.setData({ | |||
| disabled: true | |||
| }) | |||
| tt.showToast({ | |||
| title: res.message, | |||
| image: '../../static/images/success.png' | |||
| }) | |||
| } else if (res.code == 12061){ | |||
| tt.showToast({ | |||
| title: "短息已发送,稍后重试", | |||
| icon: "none", | |||
| }) | |||
| } else { | |||
| tt.showToast({ | |||
| title: res.message, | |||
| icon: "none", | |||
| }) | |||
| } | |||
| }) | |||
| } else { | |||
| tt.showToast({ | |||
| title: '手机号有误', | |||
| icon: "none", | |||
| }) | |||
| } | |||
| // }, 500) | |||
| } | |||
| }) | |||
| @@ -0,0 +1,6 @@ | |||
| { | |||
| "backgroundTextStyle": "light", | |||
| "navigationBarTitleText": "", | |||
| "navigationBarTextStyle": "black", | |||
| "navigationBarBackgroundColor": "#fff" | |||
| } | |||
| @@ -0,0 +1,18 @@ | |||
| <view class='forgetpwd'> | |||
| <form bindsubmit='getYZM'> | |||
| <view class='retrievepwd'> | |||
| <view class='input01' tt:if="{{flags=='reset'}}">修改密码</view> | |||
| <view class='input01' tt:else>找回密码</view> | |||
| <view class='input02'>请填写你的手机号,我们会发送验证码验证身份</view> | |||
| <view class='pho'> | |||
| <input tt:if="{{phones}}" type='number' placeholder-style='color:#000;' placeholder='{{phones}}' maxlength='11' disabled /> | |||
| <input tt:else type='number' placeholder-style='color:#bfbfbf;' placeholder='请输入手机号' maxlength='11' name='phone' /> | |||
| <button form-type='submit' class='send' disabled='{{disabled}}' bindtap="send">{{time}}</button> | |||
| </view> | |||
| <view> | |||
| <input type='number' placeholder-style='color:#bfbfbf;' placeholder='请输入验证码' name='yzm' /> | |||
| </view> | |||
| </view> | |||
| <button form-type='submit' hover-class='active' bindtap='next'>下一步</button> | |||
| </form> | |||
| </view> | |||
| @@ -0,0 +1,116 @@ | |||
| .forgetpwd { | |||
| width: 100%; | |||
| display: flex; | |||
| flex-direction: column; | |||
| } | |||
| .retrievepwd { | |||
| width: 100%; | |||
| display: flex; | |||
| flex-direction: column; | |||
| position: relative; | |||
| margin-bottom: 68rpx; | |||
| } | |||
| /* .retrievepwd view { | |||
| width: 90%; | |||
| display: flex; | |||
| margin: 0 auto; | |||
| height: 94rpx; | |||
| line-height: 94rpx; | |||
| padding-left: 4%; | |||
| position: relative; | |||
| } */ | |||
| .input01 { | |||
| text-indent: 40rpx; | |||
| font-size: 40rpx; | |||
| color: #000; | |||
| letter-spacing: 0; | |||
| margin-top: 28rpx; | |||
| } | |||
| .input02 { | |||
| text-indent: 40rpx; | |||
| font-size: 28rpx; | |||
| margin-top: 16rpx; | |||
| color: #000; | |||
| letter-spacing: 0; | |||
| line-height: 32rpx; | |||
| } | |||
| .line { | |||
| width: 2rpx; | |||
| height: 22rpx; | |||
| background: #d7d7d7; | |||
| position: absolute; | |||
| left: 20%; | |||
| top: 38rpx; | |||
| } | |||
| .retrievepwd view input { | |||
| display: inline-block; | |||
| font-size: 30rpx; | |||
| width: 460rpx; | |||
| padding-left: 40rpx; | |||
| height: 94rpx; | |||
| color: #000!important; | |||
| letter-spacing: 0; | |||
| line-height: 32rpx; | |||
| } | |||
| .pho { | |||
| margin-top: 40rpx; | |||
| } | |||
| .retrievepwd view:nth-child(1) input { | |||
| width: 68%; | |||
| } | |||
| .retrievepwd view text:nth-child(4) { | |||
| color: #52a0fd; | |||
| font-size: 28rpx; | |||
| } | |||
| .forgetpwd button { | |||
| width: 92%; | |||
| height: 94rpx; | |||
| line-height: 94rpx; | |||
| background: #52a0fd; | |||
| color: #fff; | |||
| font-size: 36rpx; | |||
| } | |||
| .active { | |||
| opacity: 0.6; | |||
| } | |||
| .send { | |||
| display: inline-block; | |||
| width: 210rpx !important; | |||
| border-radius: 16rpx; | |||
| margin-top: 12rpx; | |||
| margin-right: 30rpx; | |||
| font-size: 30rpx!important; | |||
| letter-spacing: 0; | |||
| padding: 0!important; | |||
| } | |||
| button::after { | |||
| border: none; | |||
| } | |||
| .try { | |||
| width: 32%; | |||
| display: inline-block; | |||
| background: #52a0fd; | |||
| color: #fff; | |||
| border-radius: 16rpx; | |||
| text-align: center; | |||
| opacity: 0.6; | |||
| height: 70rpx !important; | |||
| font-size: 28rpx !important; | |||
| line-height: 70rpx !important; | |||
| margin-top: 12rpx; | |||
| } | |||
| @@ -0,0 +1,147 @@ | |||
| // pages/getMerchant/index.js | |||
| const config = require('../../config/config.js') | |||
| const Http = require('../../utils/HttpBasics.js') | |||
| const util = require('../../utils/util.js') | |||
| const app = getApp(); | |||
| Page({ | |||
| /** | |||
| * 页面的初始数据 | |||
| */ | |||
| data: { | |||
| selectList:[], | |||
| list: [], | |||
| selectMerchant:null, | |||
| businessId:'' | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面加载 | |||
| */ | |||
| onLoad: function (options) { | |||
| this.setData({ | |||
| paramData: options | |||
| }) | |||
| this.getMerchent() | |||
| }, | |||
| getMerchent() { | |||
| let _this = this; | |||
| Http.get({ | |||
| url: config.api.getMerchentList | |||
| }) | |||
| .then(res => { | |||
| _this.setData({ | |||
| list: res.data, | |||
| selectList:res.data | |||
| }) | |||
| }) | |||
| .catch(err => { | |||
| tt.showToast({ | |||
| title: err.message, | |||
| icon: 'none', | |||
| duration: 2000, | |||
| mask: false | |||
| }); | |||
| }); | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面初次渲染完成 | |||
| */ | |||
| onReady: function () { | |||
| }, | |||
| checkMerchant(e){ | |||
| console.log(e) | |||
| let id=e.target.id; | |||
| this.data.selectList.map((item,index)=>{ | |||
| if(id==item.id){ | |||
| console.log(item,item.businessId) | |||
| this.setData({ | |||
| selectMerchant:item, | |||
| businessId: item.businessId | |||
| }) | |||
| } | |||
| }) | |||
| }, | |||
| submitForm(){ | |||
| if (this.data.selectMerchant!=null){ | |||
| tt.redirectTo({ | |||
| url: `/pages/operation/index?address=${this.data.paramData.address}&id=${this.data.paramData.id}&levelName=${this.data.paramData.levelName}&name=${this.data.paramData.name}&nickName=${this.data.paramData.nickName}&phone=${this.data.paramData.phone}&score=${this.data.paramData.score}&credit=${this.data.paramData.credit}&type=1&merchantName=${this.data.selectMerchant.merchantName}&merchant_id=${this.data.selectMerchant.id}&isAdmin=1&merchantType=1&businessId=${this.data.businessId}`, | |||
| }) | |||
| }else{ | |||
| tt.showToast({ | |||
| title: '抱歉,您未选择门店', | |||
| icon: 'none', | |||
| duration: 2000, | |||
| mask: false | |||
| }); | |||
| } | |||
| }, | |||
| getList(e){ | |||
| console.log(e.detail.value) | |||
| let selectList = []; | |||
| var reg = new RegExp(e.detail.value.toUpperCase()); | |||
| this.data.list.map((item,index)=>{ | |||
| if (item.merchantName.toUpperCase().match(reg) || e.detail.value==''){ | |||
| selectList.push(item) | |||
| } | |||
| }) | |||
| let haveIf=false; | |||
| selectList.map((item,index)=>{ | |||
| console.log(item,this.data.selectMerchant) | |||
| if (this.data.selectMerchant!=null&&item.id == this.data.selectMerchant.id){ | |||
| haveIf=true | |||
| } | |||
| }) | |||
| if (!haveIf){ | |||
| this.setData({ | |||
| selectMerchant:null | |||
| }) | |||
| } | |||
| // debugger | |||
| this.setData({ | |||
| selectList | |||
| }) | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面显示 | |||
| */ | |||
| onShow: function () { | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面隐藏 | |||
| */ | |||
| onHide: function () { | |||
| }, | |||
| /** | |||
| * 生命周期函数--监听页面卸载 | |||
| */ | |||
| onUnload: function () { | |||
| }, | |||
| /** | |||
| * 页面相关事件处理函数--监听用户下拉动作 | |||
| */ | |||
| onPullDownRefresh: function () { | |||
| }, | |||
| /** | |||
| * 页面上拉触底事件的处理函数 | |||
| */ | |||
| onReachBottom: function () { | |||
| }, | |||
| /** | |||
| * 用户点击右上角分享 | |||
| */ | |||
| onShareAppMessage: function () { | |||
| } | |||
| }) | |||
| @@ -0,0 +1,4 @@ | |||
| { | |||
| "navigationBarTitleText": "消费门店", | |||
| "navigationBarTextStyle": "white" | |||
| } | |||
| @@ -0,0 +1,14 @@ | |||
| <!--pages/getMerchant/index.wxml--> | |||
| <view class='box'> | |||
| <view class='top'> | |||
| <view class='footer'> | |||
| <text>消费门店</text> | |||
| <input placeholder='请输入消费门店' bindinput="getList"></input> | |||
| </view> | |||
| </view> | |||
| <view class='merchant-list'> | |||
| <view class='lists' style='background:{{selectMerchant.id==item.id?"#F6F6F6":"#fff"}}' tt:for='{{selectList}}' id='{{item.id}}' bindtap='checkMerchant' tt:key='{{index}}'>{{item.merchantName}}</view> | |||
| </view> | |||
| <button class='sub-button' bindtap='submitForm'>提交</button> | |||
| </view> | |||
| @@ -0,0 +1,57 @@ | |||
| /* pages/getMerchant/index.wxss */ | |||
| .top{ | |||
| position: fixed; | |||
| top: 0; | |||
| left: 0; | |||
| opacity: 1; | |||
| background: #fff; | |||
| } | |||
| .footer { | |||
| width: 710rpx; | |||
| height: 126rpx; | |||
| line-height: 126rpx; | |||
| display: flex; | |||
| background: #fff; | |||
| border-radius: 20rpx; | |||
| margin-top: 40rpx; | |||
| margin-left: 20rpx; | |||
| align-self: center; | |||
| box-shadow: 0 6px 20px 0 rgba(0, 0, 0, 0.15); | |||
| } | |||
| .footer text { | |||
| margin-left: 31rpx; | |||
| font-size: 30rpx; | |||
| } | |||
| .footer input { | |||
| width: 450rpx; | |||
| margin-right: 19rpx; | |||
| height: 126rpx; | |||
| line-height: 126rpx; | |||
| font-size: 30rpx; | |||
| text-align: right; | |||
| } | |||
| .merchant-list{ | |||
| width: 690rpx; | |||
| margin: 230rpx auto; | |||
| border-top: 1px solid #EAEAEA; | |||
| } | |||
| .lists{ | |||
| height: 84rpx; | |||
| line-height: 84rpx; | |||
| border-bottom: 1px dashed #EAEAEA; | |||
| font-size:30rpx; | |||
| } | |||
| .sub-button{ | |||
| position: fixed; | |||
| bottom: 30rpx; | |||
| left: 20rpx; | |||
| width:710rpx; | |||
| height:94rpx; | |||
| background:rgba(82,160,253,1); | |||
| box-shadow:0px 10rpx 22rpx 2rpx rgba(82,160,253,0.51); | |||
| border-radius:10rpx; | |||
| color: #fff; | |||
| line-height: 94rpx; | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| // d:\fumaolianke\ttFmB\TTB\pages\goHtml\goHtml.js | |||
| Page({ | |||
| data: { | |||
| httpUrl:"" | |||
| }, | |||
| onLoad: function (options) { | |||
| this.setData({ | |||
| httpUrl:options.url | |||
| }) | |||
| } | |||
| }) | |||
| @@ -0,0 +1,3 @@ | |||
| { | |||
| "usingComponents": {} | |||
| } | |||
| @@ -0,0 +1,8 @@ | |||
| <web-view | |||
| src="{{httpUrl}}" | |||
| progressbar-color="{{progressbar-color}}" | |||
| bindmessage="bindmessage" | |||
| bindload="bindload" | |||
| binderror="binderror" | |||
| > | |||
| </web-view> | |||
| @@ -0,0 +1,222 @@ | |||
| const config = require('../../config/config.js') | |||
| const app = getApp() | |||
| const Common = require('../../common/common.js') | |||
| const Http = require('../../utils/http.js') | |||
| const HttpBasics = require('../../utils/HttpBasics.js') | |||
| Page({ | |||
| data: { | |||
| logo: '../../assets/images/logo.png', | |||
| phone: '', | |||
| pwd: '', | |||
| status:'', | |||
| showpass: "hidepass", | |||
| focus:false, | |||
| password: true | |||
| }, | |||
| onLoad() { | |||
| Common.getMallIcon() | |||
| .then(data => { | |||
| // debugge | |||
| console.log(data,777) | |||
| this.setData({ | |||
| logo: data.data&&data.data.mallImgUrl ? data.data.mallImgUrl : '../../assets/images/logo.png', | |||
| }) | |||
| }) | |||
| }, | |||
| onShow() { | |||
| var that = this; | |||
| var phone = tt.getStorageSync("phone"); | |||
| var pwd = tt.getStorageSync("pwd"); | |||
| that.ttLogin(); | |||
| if (phone) { | |||
| that.setData({ | |||
| phone: phone | |||
| }); | |||
| } | |||
| if (pwd) { | |||
| that.setData({ | |||
| pwd: pwd | |||
| }); | |||
| } | |||
| }, | |||
| //显示具体的密码 | |||
| showpassword:function(){ | |||
| console.log(this.data.password); | |||
| let that = this; | |||
| if (that.data.password){ | |||
| that.setData({ | |||
| password: false, | |||
| focus:true | |||
| }) | |||
| }else{ | |||
| that.setData({ | |||
| password: true, | |||
| focus: true | |||
| }) | |||
| } | |||
| }, | |||
| ttLogin(flag){ | |||
| let that = this; | |||
| tt.login({ | |||
| success: res => { | |||
| Common.getSuperOpenId(res.code) | |||
| .then(res => { | |||
| console.log(res) | |||
| if (res.data&& res.data.data&&res.data.data.openId){ | |||
| app.globalData.superopenId = res.data.data.openId; | |||
| } | |||
| if (res.data && res.data.data && res.data.data.session_key){ | |||
| app.globalData.session_key = res.data.data.session_key; | |||
| } | |||
| if (res.data.code == 200) { | |||
| app.globalData.phone = res.data.data.phone; | |||
| that.setData({ | |||
| ifAlBoss: true, | |||
| status: "use" | |||
| }) | |||
| if (flag =='fromgetPhoneNumber'){ | |||
| tt.navigateTo({ | |||
| url: `/pages/datatower/datatower?superopenId=${app.globalData.superopenId}&phone=${app.globalData.phone}`, | |||
| }) | |||
| } | |||
| } else { | |||
| if (flag =='fromgetPhoneNumber'){ | |||
| tt.showToast({ | |||
| title: res.data.message, | |||
| icon: "none", | |||
| duration: 2000 | |||
| }) | |||
| } | |||
| } | |||
| }).catch(error => { | |||
| console.log(error,"error"); | |||
| that.setData({ | |||
| error: error.message | |||
| }) | |||
| }) | |||
| } | |||
| }) | |||
| }, | |||
| showpass: function () { | |||
| let that = this; | |||
| }, | |||
| forgetPwd: function () { | |||
| tt.navigateTo({ | |||
| url: '/pages/index/forgetpwd/forgetpwd', | |||
| }) | |||
| }, | |||
| getLoginInfo(e) { | |||
| var phoneReg = /^1[0|1|2|3|4|5|6|7|8|9]\d{9}$/; | |||
| let { | |||
| phone, | |||
| pwd | |||
| } = e.detail.value; | |||
| if (phoneReg.test(phone)) { | |||
| if (pwd != '') { | |||
| Common.userLogin(phone, pwd, app.globalData.latitude, app.globalData.longitude) | |||
| .then(res => { | |||
| console.log(res); | |||
| if (res.code == 200) { | |||
| HttpBasics.setBUserId(res.data.bUserId); | |||
| tt.setStorageSync("phone", phone); | |||
| tt.setStorageSync("pwd", pwd); | |||
| tt.setStorageSync("bUserId", res.data.bUserId); | |||
| app.globalData.bUserId = res.data.bUserId; | |||
| tt.setStorage({ | |||
| key: 'bUserId', | |||
| data: res.data.bUserId, | |||
| }) | |||
| tt.login({ | |||
| success:function(res){ | |||
| Common.getOpenId(res.code,app.globalData.bUserId) | |||
| .then(res => { | |||
| console.log(res,888) | |||
| app.globalData.openId = res.data.data.openId; | |||
| app.globalData.token = res.data.data.token; | |||
| HttpBasics.setToken(res.data.data.token); | |||
| tt.setStorageSync("openId", res.data.data.openId); | |||
| tt.setStorageSync("session_key", res.data.data.session_key); | |||
| tt.showToast({ | |||
| image: './../../assets/images/success.png', | |||
| title: '登录成功', | |||
| }) | |||
| tt.switchTab({ | |||
| url: '/pages/main/main', | |||
| success(res) { | |||
| console.log(`${res}`); | |||
| }, | |||
| fail(err) { | |||
| console.log(err,`switchTab调用失败`); | |||
| }, | |||
| }) | |||
| }) | |||
| } | |||
| }) | |||
| } else { | |||
| tt.showToast({ | |||
| image:'./../../assets/images/fail.png', | |||
| title: res.message, | |||
| icon: "none" | |||
| }) | |||
| } | |||
| }) | |||
| } else { | |||
| tt.showToast({ | |||
| image: './../../assets/images/fail.png', | |||
| title: '密码不能为空', | |||
| icon: "none", | |||
| }) | |||
| } | |||
| } else if(phone=="") { | |||
| tt.showToast({ | |||
| image: './../../assets/images/fail.png', | |||
| title: '请输入手机号', | |||
| icon: "none" | |||
| }) | |||
| }else{ | |||
| tt.showToast({ | |||
| image: './../../assets/images/fail.png', | |||
| title: '手机号有误', | |||
| icon: "none" | |||
| }) | |||
| } | |||
| }, | |||
| /** | |||
| * 获得超级管理员手机号 | |||
| */ | |||
| getPhoneNumber: function (e) { | |||
| this.ttLogin("fromgetPhoneNumber"); | |||
| if (app.globalData.superopenId && app.globalData.session_key){ | |||
| let { encryptedData, iv } = { encryptedData: e.detail.encryptedData, iv: e.detail.iv }; | |||
| if (encryptedData && iv) { | |||
| Common.getUserPhone(encryptedData, iv, app.globalData.superopenId, app.globalData.session_key) | |||
| .then(res => { | |||
| if (res.data.code == 200 && res.data.data.admin == 1) { | |||
| app.globalData.phone = res.data.data.phone; | |||
| tt.navigateTo({ | |||
| url: `/pages/datatower/datatower?superopenId=${app.globalData.superopenId}&phone=${app.globalData.phone}`, | |||
| }) | |||
| } | |||
| }) | |||
| } | |||
| } | |||
| }, | |||
| /** | |||
| * 用户点击右上角分享 | |||
| */ | |||
| onShareAppMessage: function (res) { | |||
| let _this = this; | |||
| return { | |||
| title: '数据塔台', | |||
| path: '/pages/main/main', | |||
| success: function (res) { | |||
| // 转发成功 | |||
| }, | |||
| fail: function (res) { | |||
| // 转发失败 | |||
| } | |||
| } | |||
| }, | |||
| }) | |||
| @@ -0,0 +1,6 @@ | |||
| { | |||
| "backgroundTextStyle": "light", | |||
| "navigationBarTitleText": "登录", | |||
| "navigationBarTextStyle": "white", | |||
| "navigationBarBackgroundColor": "#52A0FD" | |||
| } | |||
| @@ -0,0 +1,30 @@ | |||
| <view class="logoin_wrap"> | |||
| <view class='logo'> | |||
| <image src='{{logo}}' mode="widthFix"></image> | |||
| </view> | |||
| <form bindsubmit='getLoginInfo'> | |||
| <view class='login'> | |||
| <view> | |||
| <input type='number' name='phone' value='{{phone}}' placeholder='请输入手机号' placeholder-style='color:#BFBFBF;' maxlength='11' class='inp' /> | |||
| </view> | |||
| <view> | |||
| <input password='{{password}}' focus='{{focus}}' class='inp' placeholder='请输入密码' placeholder-style='color:#BFBFBF;' name='pwd' value='{{pwd}}' /> | |||
| <image class='showpassword' bindtap='showpassword' src='../../assets/images/password.png' mode='widthFix'></image> | |||
| </view> | |||
| </view> | |||
| <navigator url='../index/index' open-type='navigate' hover-class='none'> | |||
| </navigator> | |||
| <button form-type='submit' class='button' hover-class='active'>登录管理门店</button> | |||
| <!-- <view class='forget clearfix'> | |||
| <text class='fr' bindtap='forgetPwd'>忘记密码</text> | |||
| </view> --> | |||
| <!-- <view> | |||
| <button class="phone" tt:if="{{!ifAlBoss}}" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"><image class='adminlogo' src='../../assets/images/admin.png' mode='widthFix'></image>数据塔台</button> | |||
| <button class="phone" tt:if="{{ifAlBoss}}" bindtap="getPhoneNumber"><image class='adminlogo' src='../../assets/images/admin.png' mode='widthFix'></image>数据塔台</button> | |||
| </view> --> | |||
| </form> | |||
| <view class='defaultLogo'> | |||
| <text>POWERED BY IFORMALL</text> | |||
| </view> | |||
| </view> | |||
| @@ -0,0 +1,142 @@ | |||
| .adminlogo{ | |||
| width: 100rpx; | |||
| display: block; | |||
| margin: 0 auto; | |||
| } | |||
| .logoin_wrap { | |||
| width: 100%; | |||
| display: flex; | |||
| flex-direction: column; | |||
| } | |||
| .login { | |||
| width: 100%; | |||
| display: flex; | |||
| flex-direction: column; | |||
| position: relative; | |||
| } | |||
| .inp{ | |||
| color: #666; | |||
| } | |||
| .login view { | |||
| position: relative; | |||
| width: 88%; | |||
| display: flex; | |||
| margin: 0 auto; | |||
| height: 100rpx; | |||
| line-height: 100rpx; | |||
| border-bottom: 1rpx solid #DADADA; | |||
| } | |||
| .line { | |||
| width: 2rpx; | |||
| height: 22rpx; | |||
| background: #d7d7d7; | |||
| position: absolute; | |||
| left: 20%; | |||
| top: 38rpx; | |||
| } | |||
| .login view input { | |||
| font-size: 34rpx; | |||
| height: 100rpx; | |||
| line-height: 100rpx; | |||
| } | |||
| .login view:nth-child(1) input { | |||
| /* padding-left: 60rpx; */ | |||
| font-size: 34rpx; | |||
| height: 100rpx; | |||
| line-height: 100rpx; | |||
| } | |||
| .eye{ | |||
| display: inline-block; | |||
| width: 50rpx; | |||
| margin-top:26rpx; | |||
| } | |||
| .logo { | |||
| width: 320rpx; | |||
| margin: 100rpx auto 30rpx; | |||
| } | |||
| .logo image { | |||
| display: block; | |||
| width: 320rpx; | |||
| } | |||
| .button { | |||
| background: #52A0FD; | |||
| border-radius: 8rpx; | |||
| color: #fff; | |||
| margin-top: 8%; | |||
| font-size: 36rpx; | |||
| width: 90%; | |||
| } | |||
| .active{ | |||
| opacity: .4; | |||
| } | |||
| .logoin_wrap navigator { | |||
| display: block; | |||
| width: 25%; | |||
| margin: 0 auto; | |||
| text-align: right; | |||
| margin-top: 15rpx; | |||
| } | |||
| .logoin_wrap navigator text { | |||
| display: block; | |||
| text-align: center; | |||
| /* padding-top: 1.5%; */ | |||
| font-size: 26rpx; | |||
| height: 45rpx; | |||
| color: #404040; | |||
| letter-spacing: 0; | |||
| line-height: 45rpx; | |||
| } | |||
| .forget{ | |||
| text-align: right; | |||
| padding:0 40rpx; | |||
| color: #999; | |||
| margin-top: 20rpx; | |||
| } | |||
| .forget text{ | |||
| font-size: 26rpx; | |||
| } | |||
| .defaultLogo{ | |||
| position: absolute; | |||
| bottom: 40rpx; | |||
| left: 0; | |||
| right: 0; | |||
| margin: auto; | |||
| } | |||
| .defaultLogo text { | |||
| display: block; | |||
| text-align: center; | |||
| color: #52A0FD; | |||
| font-size: 22rpx; | |||
| } | |||
| .defaultLogo image { | |||
| width: 200rpx; | |||
| } | |||
| .phone{ | |||
| display: block!important; | |||
| background: none!important; | |||
| color: #999!important; | |||
| font-size: 26rpx!important; | |||
| padding: 0!important; | |||
| margin-top: 40rpx!important; | |||
| } | |||
| button::after{ border: none; } | |||
| .showpassword{ | |||
| padding: 30rpx; | |||
| width: 40rpx; | |||
| position: absolute; | |||
| z-index: 100; | |||
| right: 20rpx; | |||
| top: 0; | |||
| bottom: 0; | |||
| margin: auto; | |||
| } | |||
| @@ -0,0 +1,705 @@ | |||
| const config = require('../../config/config.js') | |||
| const Http = require('../../utils/http.js') | |||
| const HttpBasics = require('../../utils/HttpBasics.js') | |||
| const util = require('../../utils/util') | |||
| const changeNum = require('../../utils/changeNum.js') | |||
| import * as echarts from '../../ec-canvas/echarts'; | |||
| var app = getApp() | |||
| function setOption(chart, xdata, ydata) { | |||
| const option = { | |||
| title: { | |||
| padding: [10, 0, 0, 20], | |||
| textStyle: { | |||
| fontSize: 14, | |||
| color: '#FF6A6A' | |||
| }, | |||
| }, | |||
| backgroundColor: "#fff", | |||
| color: ["#006EFF", "#67E0E3", "#9FE6B8"], | |||
| animation: true, | |||
| grid: { | |||
| top: '3%', | |||
| left: "5%", | |||
| right: "7%", | |||
| bottom: "4%", | |||
| containLabel: true, | |||
| }, | |||
| xAxis: { | |||
| type: 'category', | |||
| boundaryGap: false, | |||
| data: xdata, | |||
| splitLine: { | |||
| show: false | |||
| }, //去除网格线 | |||
| axisLine: { | |||
| show: false | |||
| }, | |||
| axisTick: { | |||
| show: false | |||
| } | |||
| }, | |||
| yAxis: [{ | |||
| splitLine: { | |||
| lineStyle: { | |||
| type: 'none' | |||
| } | |||
| }, | |||
| axisLine: { | |||
| show: false | |||
| }, | |||
| axisTick: { | |||
| show: false | |||
| }, | |||
| axisLabel: { | |||
| rotate: 40, | |||
| formatter: function(a, b) { | |||
| return a | |||
| } | |||
| }, | |||
| type: 'value', | |||
| }], | |||
| series: [{ | |||
| type: 'line', | |||
| data: ydata, | |||
| smooth: true, //这句就是让曲线变平滑的 | |||
| lineStyle: { | |||
| normal: { | |||
| color: '#33cdff', | |||
| } | |||
| }, | |||
| areaStyle: { | |||
| normal: { | |||
| color: new echarts.graphic.LinearGradient( | |||
| 0, 0, 0, 1, [{ | |||
| offset: 0, | |||
| color: '#FFF' | |||
| }, { | |||
| offset: 1, | |||
| color: '#52A0FD' | |||
| }] | |||
| ) | |||
| } | |||
| }, | |||
| }] | |||
| }; | |||
| chart.setOption(option) | |||
| console.log(chart) | |||
| } | |||
| /** | |||
| * 交易记录 | |||
| */ | |||
| function getBarOption(x, y) { | |||
| return { | |||
| color: ['#FF6A6A'], | |||
| fontSize: "14rpx", | |||
| grid: { | |||
| top: '3%', | |||
| left: "5%", | |||
| right: "7%", | |||
| bottom: "4%", | |||
| containLabel: true, | |||
| }, | |||
| xAxis: { | |||
| axisLine: { | |||
| show: false | |||
| }, | |||
| axisTick: { | |||
| show: false | |||
| }, | |||
| type: 'category', | |||
| boundaryGap: false, | |||
| data: x | |||
| }, | |||
| yAxis: { | |||
| axisLine: { | |||
| show: false | |||
| }, | |||
| axisTick: { | |||
| show: false | |||
| }, | |||
| type: 'value', | |||
| splitLine: { | |||
| lineStyle: { | |||
| type: 'none' | |||
| } | |||
| }, | |||
| axisLabel: { | |||
| rotate: 40, | |||
| } | |||
| }, | |||
| series: [{ | |||
| data: y, | |||
| type: 'line', | |||
| smooth: true, | |||
| lineStyle: { | |||
| normal: { | |||
| color: '#FF6A6A', | |||
| } | |||
| }, | |||
| areaStyle: {} | |||
| }] | |||
| }; | |||
| }; | |||
| /** | |||
| * 核销记录 | |||
| */ | |||
| function getScatterOption(x, y) { | |||
| return { | |||
| color: '#FFCE00', | |||
| fontSize: "14rpx", | |||
| grid: { | |||
| top: '3%', | |||
| left: "5%", | |||
| right: "7%", | |||
| bottom: "4%", | |||
| containLabel: true, | |||
| }, | |||
| xAxis: { | |||
| axisLine: { | |||
| show: false | |||
| }, | |||
| axisTick: { | |||
| show: false | |||
| }, | |||
| type: 'category', | |||
| boundaryGap: false, | |||
| data: x | |||
| }, | |||
| yAxis: { | |||
| axisLine: { | |||
| show: false | |||
| }, | |||
| axisTick: { | |||
| show: false | |||
| }, | |||
| type: 'value', | |||
| splitLine: { | |||
| lineStyle: { | |||
| type: 'none' | |||
| } | |||
| }, | |||
| axisLabel: { | |||
| rotate: 40, | |||
| } | |||
| }, | |||
| series: [{ | |||
| data: y, | |||
| type: 'line', | |||
| smooth: true, | |||
| areaStyle: {} | |||
| }] | |||
| }; | |||
| }; | |||
| /** | |||
| * 获取交易记录 | |||
| */ | |||
| function getTabletListOrder() { | |||
| let newArr = { | |||
| xList: [], | |||
| amountList: [] | |||
| } | |||
| return new Promise((resolve, reject) => { | |||
| Http.getRequest(config.api.dateAmountRecordListOrder, app.globalData.token, '', {}, (res) => { | |||
| // 日期 | |||
| res.data && res.data.map(file => { | |||
| newArr.xList.push(file.mouthAndDate) | |||
| newArr.amountList.push(file.amountStr) | |||
| }) | |||
| resolve(newArr); | |||
| }) | |||
| }) | |||
| }; | |||
| /** | |||
| * 获取核销记录 | |||
| */ | |||
| function getTabletListVerify() { | |||
| let newArr = { | |||
| xList: [], | |||
| amountList: [] | |||
| } | |||
| return new Promise((resolve, reject) => { | |||
| Http.getRequest(config.api.dateAmountRecordListVerified, app.globalData.token, '', {}, (res) => { | |||
| // 日期 | |||
| res.data && res.data.map(file => { | |||
| newArr.xList.push(file.mouthAndDate) | |||
| newArr.amountList.push(file.amountStr) | |||
| }) | |||
| resolve(newArr) | |||
| }) | |||
| }) | |||
| }; | |||
| Page({ | |||
| data: { | |||
| token:'', | |||
| currentIndex: 0, | |||
| userInfo: {}, | |||
| recordMoney: 0, | |||
| recordData: [], | |||
| userInfoLoadIf: false, | |||
| ec: { | |||
| lazyLoad: true | |||
| }, | |||
| classIfyList: [ | |||
| // { | |||
| // text: '收银台', | |||
| // icon: 'iconfont icon-shouyintai1', | |||
| // id: 3 | |||
| // }, | |||
| { | |||
| text: '会员核销', | |||
| icon: 'iconfont icon-hexiao', | |||
| id: 0 | |||
| }, | |||
| // { | |||
| // text: '消费卡收款', | |||
| // icon: 'iconfont icon-shouye1', | |||
| // id: 1 | |||
| // }, | |||
| // { | |||
| // text: '当日解单', | |||
| // icon: 'iconfont icon-shoufukuan', | |||
| // id: 2 | |||
| // }, | |||
| { | |||
| text: '会员积分', | |||
| icon: 'iconfont icon-jifen', | |||
| id: 4 | |||
| }, | |||
| // { | |||
| // text: '会员赠券', | |||
| // icon: 'iconfont icon-quan', | |||
| // id: 5 | |||
| // }, | |||
| { | |||
| text: '营销结算', | |||
| icon: 'iconfont icon-jiesuan', | |||
| id: 6 | |||
| }, | |||
| // { | |||
| // text: '商户建券', | |||
| // icon: 'iconfont icon-lingquanzhongxin', | |||
| // id: 7 | |||
| // }, | |||
| // { | |||
| // text: '商品配送', | |||
| // icon: 'iconfont icon-wuliu', | |||
| // id: 8 | |||
| // } | |||
| ], | |||
| amountMoney: '', | |||
| djZmoney:'', | |||
| writeOffMoney: '', | |||
| getFullYear: new Date().getFullYear(), | |||
| getMonth: new Date().getMonth() + 1, | |||
| getDate: new Date().getDate(), | |||
| dateTime: '', | |||
| show: null, | |||
| billList: [], | |||
| ifShowChart: null, | |||
| ifShowChart1: null, | |||
| ifShowChart2: null, | |||
| ecBar: { | |||
| lazyLoad: true | |||
| }, | |||
| ecScatter: { | |||
| lazyLoad: true | |||
| }, | |||
| djArr:[], | |||
| djMoney:[], | |||
| count:'' | |||
| }, | |||
| //获取商户信息 | |||
| getUserInfo() { | |||
| return new Promise((resolve, reject) => { | |||
| Http.getRequest(config.api.userDetail, app.globalData.token, '', {}, (res) => { | |||
| resolve(res.data); | |||
| }) | |||
| }) | |||
| }, | |||
| //今日交易额 | |||
| getUnverifiedAmountOnDate() { | |||
| let { | |||
| getFullYear, | |||
| getMonth, | |||
| getDate, | |||
| amountMoney, | |||
| writeOffMoney | |||
| } = this.data | |||
| let dateTimer = getFullYear + '-' + getMonth + '-' + getDate | |||
| Http.getRequest(config.api.getUnverifiedAmountOnDate, app.globalData.token, '', { | |||
| date: dateTimer | |||
| }, (res) => { | |||
| console.log(res) | |||
| this.setData({ | |||
| amountMoney: res.data.amount, | |||
| count: res.data.orderCount, | |||
| }) | |||
| }) | |||
| }, | |||
| //今日核销额 | |||
| getVerifiedAmountOnDate() { | |||
| let { | |||
| getFullYear, | |||
| getMonth, | |||
| getDate | |||
| } = this.data | |||
| let dateTimer = getFullYear + '-' + getMonth + '-' + getDate | |||
| Http.getRequest(config.api.getVerifiedAmountOnDate, app.globalData.token, '', { | |||
| date: dateTimer | |||
| }, (res) => { | |||
| this.setData({ | |||
| writeOffMoney: res.data.amount | |||
| }) | |||
| }) | |||
| }, | |||
| onPullDownRefresh: function() { | |||
| let that = this; | |||
| // that.getUnverifiedAmountOnDate() | |||
| // that.getVerifiedAmountOnDate(); | |||
| that.getpaybill(); | |||
| if (that.oneComponent) { | |||
| that.getrecordData(); | |||
| } | |||
| if (that.jiaoyiComponent) { | |||
| that.getTabletListOrder(); | |||
| } | |||
| if (that.hexiaoComponent) { | |||
| that.getTabletListVerify(); | |||
| } | |||
| tt.hideNavigationBarLoading(); | |||
| tt.stopPullDownRefresh(); | |||
| }, | |||
| onLoad: function (options) { | |||
| var that = this; | |||
| this.checkuserstatus() | |||
| }, | |||
| onReady() { | |||
| // this.oneComponent = this.selectComponent('#mychart-pament'); | |||
| // this.jiaoyiComponent = this.selectComponent('#mychart-jiaoyi'); | |||
| // this.hexiaoComponent = this.selectComponent('#mychart-hexiao'); | |||
| this.getrecordData(); | |||
| this.getTabletListOrder(); | |||
| this.getTabletListVerify(); | |||
| this.getUserInfo().then(res => { | |||
| this.setData({ | |||
| userInfo: res, | |||
| userInfoLoadIf:true | |||
| }) | |||
| app.globalData.merchant = res; | |||
| tt.setNavigationBarTitle({ | |||
| title: res.mall_name + "(" + res.merchant_name + ")" | |||
| }) | |||
| }) | |||
| app.globalData.userInfo = this.getUserInfo; | |||
| }, | |||
| /** | |||
| * gotolook | |||
| */ | |||
| gotobill: function(e) { | |||
| console.log(e) | |||
| let owe = e.currentTarget.dataset.data.owe; | |||
| let status = e.currentTarget.dataset.data.status; | |||
| let receivedate = e.currentTarget.dataset.data.receiveDate; | |||
| let starttime = e.currentTarget.dataset.data.starttime; | |||
| let endtime = e.currentTarget.dataset.data.endtime; | |||
| let id = e.currentTarget.dataset.data.id; | |||
| var transactionId = e.currentTarget.dataset.data.transactionId; | |||
| var priceDetail = e.currentTarget.dataset.data.priceDetail; | |||
| var freeze = e.currentTarget.dataset.data.freeze; | |||
| let pay = e.currentTarget.dataset.data.pay ? e.currentTarget.dataset.data.pay : 0; | |||
| let latePayPrice = e.currentTarget.dataset.data.latePayPrice ? e.currentTarget.dataset.data.latePayPrice : 0; | |||
| let serviceChargePay = e.currentTarget.dataset.data.serviceChargePay ? e.currentTarget.dataset.data.serviceChargePay : 0; | |||
| if (starttime && endtime) { | |||
| var end = starttime + "至" + endtime; | |||
| } else { | |||
| var end = ""; | |||
| } | |||
| if (transactionId) { | |||
| var tradeTime = e.currentTarget.dataset.data.tradeTime; | |||
| } else { | |||
| var tradeTime = e.currentTarget.dataset.data.payDate; | |||
| } | |||
| console.log(e.currentTarget.dataset.data, tradeTime, 6666666) | |||
| var billTypeValue = e.currentTarget.dataset.data.billTypeValue; | |||
| let receivePay = e.currentTarget.dataset.data.receivePay; | |||
| tt.navigateTo({ | |||
| url: `/pages/bill/billdetail/index?owe=${owe}&receivedate=${receivedate}&status=${status}&end=${end}&id=${id}&tradeTime=${tradeTime}&transactionId=${transactionId}&priceDetail=${priceDetail}&billTypeValue=${billTypeValue}&receivePay=${receivePay}&freeze=${freeze}&pay=${pay}&latePayPrice=${latePayPrice}&serviceChargePay=${serviceChargePay}`, | |||
| }) | |||
| }, | |||
| /** | |||
| * 核销记录 | |||
| */ | |||
| // hexiaoInit: function(heXiaox, heXiaoYiy) { | |||
| // this.hexiaoComponent.init((canvas, width, height) => { | |||
| // const barChart = echarts.init(canvas, null, { | |||
| // width: width, | |||
| // height: height | |||
| // }); | |||
| // canvas.setChart(barChart); | |||
| // barChart.setOption(getScatterOption(heXiaox, heXiaoYiy)); | |||
| // return barChart; | |||
| // }); | |||
| // }, | |||
| /** | |||
| * 交易记录 | |||
| */ | |||
| // jiaoyiInit: function(jiaoYix, jiaoYiy) { | |||
| // this.jiaoyiComponent.init((canvas, width, height) => { | |||
| // const barChart = echarts.init(canvas, null, { | |||
| // width: width, | |||
| // height: height | |||
| // }); | |||
| // canvas.setChart(barChart); | |||
| // barChart.setOption(getBarOption(jiaoYix, jiaoYiy)); | |||
| // return barChart; | |||
| // }); | |||
| // }, | |||
| // init_one: function(xdata, ydata) { //初始化第一个图表 | |||
| // console.log(this.oneComponent, xdata, ydata) | |||
| // this.oneComponent.init((canvas, width, height) => { | |||
| // const chart = echarts.init(canvas, null, { | |||
| // width: width, | |||
| // height: height | |||
| // }); | |||
| // console.log(chart, xdata, ydata) | |||
| // setOption(chart, xdata, ydata) | |||
| // this.chart = chart; | |||
| // return chart; | |||
| // }); | |||
| // }, | |||
| toWriteoff(e) { | |||
| console.log(e) | |||
| let id = e.currentTarget.dataset.id | |||
| console.log(id) | |||
| if (id == 0) { | |||
| tt.navigateTo({ | |||
| url: '/pages/scan/scan', | |||
| }) | |||
| } else if (id == 1) { | |||
| // 优惠卡收款 | |||
| tt.navigateTo({ | |||
| url: '/pages/cardReceive/cardReceive', | |||
| }) | |||
| } else if (id == 2) { | |||
| tt.navigateTo({ | |||
| url: '/pages/main/solution/solution', | |||
| }) | |||
| } else if (id == 3) { | |||
| tt.navigateTo({ | |||
| url: '/pages/payment/index', | |||
| }) | |||
| } else if (id == 4) { | |||
| tt.navigateTo({ | |||
| url: '/pages/creditSelect/index', | |||
| }) | |||
| } else if (id == 5) { | |||
| tt.navigateTo({ | |||
| url: '/pages/incouponSelect/index', | |||
| }) | |||
| } else if (id == 6) { | |||
| tt.navigateTo({ | |||
| url: '/pages/marktingsettlement/marktingsettlement', | |||
| }) | |||
| }else if(id==7){//用户发卷 | |||
| tt.navigateTo({ | |||
| url: '/pages/sendDiscounts/sendDiscounts', | |||
| }) | |||
| } else if (id == 8) {//商品配送 | |||
| tt.navigateTo({ | |||
| url: '/pages/delivery/delivery', | |||
| }) | |||
| } | |||
| }, | |||
| toTran(e) { | |||
| let type = e.currentTarget.dataset.type | |||
| tt.navigateTo({ | |||
| url: `./transaction/transaction?type=${type}`, | |||
| }) | |||
| }, | |||
| onShow() { | |||
| let that = this; | |||
| /** | |||
| * 交易记录 | |||
| */ | |||
| if (that.oneComponent) { | |||
| that.getrecordData(); | |||
| } | |||
| if (that.jiaoyiComponent) { | |||
| that.getTabletListOrder(); | |||
| } | |||
| if (that.hexiaoComponent) { | |||
| that.getTabletListVerify(); | |||
| } | |||
| /** | |||
| * 获得交易记录和核销额 | |||
| */ | |||
| that.getUnverifiedAmountOnDate(); | |||
| that.getVerifiedAmountOnDate(); | |||
| that.getpaybill(); | |||
| that.setData({ | |||
| currentIndex: 0 | |||
| }) | |||
| }, | |||
| getpaybill: function() { | |||
| let that = this; | |||
| that.getUserInfo().then(res => { | |||
| Http.postRequest(config.api.listBillOweAndWaitPay, app.globalData.token, '', { | |||
| merchantId: res.merchant_id, | |||
| tenantId: res.tenant_id, | |||
| }, (res) => { | |||
| console.log(res); | |||
| if (res) { | |||
| res.data.map(file => { | |||
| if (file.starttime && file.endtime) { | |||
| file.end = file.starttime.substring(0, 7).replace(/-/g, ".") + "-" + file.endtime.substring(0, 7).replace(/-/g, "."); | |||
| } else { | |||
| file.end = ""; | |||
| file.endtime = "" | |||
| } | |||
| file.receiveDate = util.fmtDate(file.receiveDate); | |||
| }) | |||
| that.setData({ | |||
| billList: res.data, | |||
| djArr : res.data.filter(item => item.status == 2), | |||
| }) | |||
| that.data.djMoney = that.data.djArr.map(item => parseInt(item.owe / 100)) | |||
| let money = 0 | |||
| that.data.djMoney.filter(function (item, index) { | |||
| money += item; | |||
| }) | |||
| that.setData({ | |||
| djZmoney: changeNum.changePeoNumber(money) | |||
| }) | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| getTabletListVerify: function() { | |||
| let that = this; | |||
| getTabletListVerify() | |||
| .then(res => { | |||
| if (res.xList.length > 0 && res.amountList.length > 0) { | |||
| that.setData({ | |||
| ifShowChart1: 'show1' | |||
| }) | |||
| // that.hexiaoInit(res.xList, res.amountList) | |||
| } else { | |||
| /** | |||
| * 判断是否显示数据表 | |||
| */ | |||
| that.setData({ | |||
| ifShowChart1: 'show' | |||
| }) | |||
| } | |||
| }) | |||
| }, | |||
| /** | |||
| * 交易 | |||
| */ | |||
| getTabletListOrder: function() { | |||
| let that = this; | |||
| getTabletListOrder() | |||
| .then(res => { | |||
| console.log(res); | |||
| if (res.xList.length > 0 && res.amountList.length > 0) { | |||
| // that.jiaoyiInit(res.xList, res.amountList) | |||
| that.setData({ | |||
| ifShowChart: 'show1' | |||
| }) | |||
| } else { | |||
| /** | |||
| * 判断是否显示数据表 | |||
| */ | |||
| that.setData({ | |||
| ifShowChart: 'show' | |||
| }) | |||
| } | |||
| }) | |||
| }, | |||
| /** | |||
| * 收银记录 | |||
| */ | |||
| getrecordData() { | |||
| let _this = this; | |||
| HttpBasics.get({ | |||
| url: config.api.getMicroPayAmountOnDate | |||
| }) | |||
| .then(res => { | |||
| _this.setData({ | |||
| recordMoney: res.data.amount | |||
| }) | |||
| }) | |||
| .catch(err => { | |||
| tt.showToast({ | |||
| title: err.message, | |||
| icon: 'none', | |||
| duration: 2000, | |||
| mask: false | |||
| }); | |||
| }); | |||
| HttpBasics.get({ | |||
| url: config.api.listMicropay | |||
| }) | |||
| .then(res => { | |||
| let dataX = []; | |||
| let dataY = []; | |||
| if (res.data && res.data.length > 0) { | |||
| _this.setData({ | |||
| ifShowChart2: "show1" | |||
| }) | |||
| res.data.map((item, index) => { | |||
| dataX.push(item.mouthAndDate) | |||
| dataY.push(Number(item.amountStr)) | |||
| }) | |||
| // _this.init_one(dataX, dataY) | |||
| } else { | |||
| _this.setData({ | |||
| ifShowChart2: "show" | |||
| }) | |||
| } | |||
| }) | |||
| .catch(err => { | |||
| tt.showToast({ | |||
| title: err.message, | |||
| icon: 'none', | |||
| duration: 2000, | |||
| mask: false | |||
| }); | |||
| }); | |||
| }, | |||
| toTran(e) { | |||
| let type = e.currentTarget.dataset.type | |||
| tt.navigateTo({ | |||
| url: `/pages/transaction/transaction?type=${type}`, | |||
| }) | |||
| }, | |||
| toRecord() { | |||
| tt.navigateTo({ | |||
| url: `/pages/record/list/index`, | |||
| }) | |||
| }, | |||
| checkuserstatus() { | |||
| let _this = this; | |||
| HttpBasics.get({ | |||
| url: config.api.checkPhoneStatus | |||
| }) | |||
| .then(res => { | |||
| }) | |||
| .catch(err => { | |||
| if (err.code == 11005) { | |||
| tt.redirectTo({ | |||
| url: `/pages/getuserinfo/index` | |||
| }) | |||
| } | |||
| }); | |||
| }, | |||
| }) | |||
| @@ -0,0 +1,10 @@ | |||
| { | |||
| "backgroundTextStyle": "dark", | |||
| "navigationBarBackgroundColor": "#52A0FD", | |||
| "navigationBarTitleText": "", | |||
| "navigationBarTextStyle": "white", | |||
| "enablePullDownRefresh": true, | |||
| "usingComponents": { | |||
| "ec-canvas": "../../ec-canvas/ec-canvas" | |||
| } | |||
| } | |||