@@ -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" | |||||
} | |||||
} |